Files
loop/shader/cloud/basic.frag
T
2025-10-29 11:14:08 +00:00

31 lines
1.1 KiB
GLSL

#version 450 core
in vec4 vPosID;
in vec4 vCol;
in vec4 vCenterSize;
in vec4 vControls;
layout (location=0) out vec4 fCol;
layout (location=1) out vec4 fPos;
layout (location=2) out vec4 fNorm;
void main()
{
// there are quite a few intricate controls concerning the normals
// we want normals to be bigger towards the center, so that when two clouds
// are blended central normals predominate
// similarly, we want normals to be bigger the further up the cloud is
// finally, we want normals to allow for shadows at the edge of a cloud
// when a light is direcly above the cloud
float d = dot(vControls,vControls);
if (d > 1) {discard;}
fCol = vec4(vCol.xyz,vCol.w*(1-d));
//fCol = vCol;
//float rad = vCenterSize.w*0.5;
float rad = vCenterSize.w;
float h = (1-d) * rad;
fPos = vec4(vPosID.xy, vPosID.z + h, vCol.w*(1-d));
//vec3 vCen =
//vec3 fn1 = fPos.z*normalize(vec3(vCenterSize.xyz - fPos.xyz));
vec3 fn1 = fPos.z*normalize(vec3(vCenterSize.xy - vPosID.xy,0));
//fNorm = vec4(fn1,fPos.w);
fNorm = vec4(vControls.xy, 0.1 ,fPos.w);
}