3 layout(location=0) in vec2 vTexCoord;
4 layout(location=1) in vec3 vLightDirection;
5 layout(location=2) in vec3 vHalfVector;
7 layout( set = 0, binding = 1, std140 ) uniform FragData
12 float preMultipliedAlpha;
15 layout( set = 0, binding = 2 ) uniform sampler2D sDiffuse;
16 layout( set = 0, binding = 3 ) uniform sampler2D sNormal;
17 layout( set = 0, binding = 4 ) uniform sampler2D sGloss;
19 layout( location = 0 ) out vec4 fragColor;
23 return vec4( mixColor * mix( 1.0, opacity, preMultipliedAlpha ), opacity );
27 vec4 diffuse = texture( sDiffuse, vTexCoord );
28 vec3 normal = normalize( texture( sNormal, vTexCoord ).xyz * 2.0 - 1.0 );
29 vec4 glossMap = texture( sGloss, vTexCoord );
30 vec4 visualMixColor = visualMixColor();
32 float lightDiffuse = max( 0.0, dot( normal, normalize( vLightDirection ) ) );
33 lightDiffuse = lightDiffuse * 0.5 + 0.5;
35 float shininess = pow ( max ( dot ( normalize( vHalfVector ), normal ), 0.0 ), 16.0 );
37 fragColor = vec4( diffuse.rgb * uColor.rgb * visualMixColor.rgb * lightDiffuse + shininess * glossMap.rgb, diffuse.a * uColor.a * visualMixColor.a );