| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- // include this file after all fragment surface functions definition
- // not contain anisotropic params
- #ifndef CC_SURFACES_FRAGMENT_MODIFY_BASECOLOR_AND_TRANSPARENCY
- #define CC_SURFACES_FRAGMENT_MODIFY_BASECOLOR_AND_TRANSPARENCY
- vec4 SurfacesFragmentModifyBaseColorAndTransparency()
- {
- vec4 baseColor = albedo;
- #if USE_VERTEX_COLOR
- baseColor.rgb *= SRGBToLinear(FSInput_vertexColor.rgb); // use linear
- baseColor.a *= FSInput_vertexColor.a;
- #endif
- #if USE_ALBEDO_MAP
- vec4 texColor = texture(albedoMap, ALBEDO_UV);
- texColor.rgb = SRGBToLinear(texColor.rgb);
- baseColor *= texColor;
- #endif
- #if USE_ALPHA_TEST
- if (baseColor.ALPHA_TEST_CHANNEL < albedoScaleAndCutoff.w) discard;
- #endif
- baseColor.rgb *= albedoScaleAndCutoff.xyz;
- return baseColor;
- }
- #endif
- #ifndef CC_SURFACES_FRAGMENT_ALPHA_CLIP_ONLY
- #define CC_SURFACES_FRAGMENT_ALPHA_CLIP_ONLY
- void SurfacesFragmentAlphaClipOnly()
- {
- #if USE_ALPHA_TEST
- float alpha = albedo.ALPHA_TEST_CHANNEL;
- #if USE_VERTEX_COLOR
- alpha *= FSInput_vertexColor.a;
- #endif
- #if USE_ALBEDO_MAP
- alpha = texture(albedoMap, ALBEDO_UV).ALPHA_TEST_CHANNEL;
- #endif
- if (alpha < albedoScaleAndCutoff.w) discard;
- #endif
- }
- #endif
- #ifndef CC_SURFACES_FRAGMENT_MODIFY_WORLD_NORMAL
- #define CC_SURFACES_FRAGMENT_MODIFY_WORLD_NORMAL
- vec3 SurfacesFragmentModifyWorldNormal()
- {
- vec3 normal = FSInput_worldNormal;
- #if USE_NORMAL_MAP
- vec3 nmmp = texture(normalMap, NORMAL_UV).xyz - vec3(0.5);
- normal = CalculateNormalFromTangentSpace(nmmp, emissiveScaleParam.w, normalize(normal.xyz), normalize(FSInput_worldTangent), FSInput_mirrorNormal);
- #endif
- return normalize(normal);
- }
- #endif
- #ifndef CC_SURFACES_FRAGMENT_MODIFY_PBRPARAMS
- #define CC_SURFACES_FRAGMENT_MODIFY_PBRPARAMS
- vec4 SurfacesFragmentModifyPBRParams()
- {
- vec4 pbr = pbrParams;
- pbr.x = 1.0;
- #if USE_PBR_MAP
- vec4 res = texture(pbrMap, DEFAULT_UV);
- pbr.x = mix(1.0, res.OCCLUSION_CHANNEL, pbrParams.x);
- pbr.y *= res.ROUGHNESS_CHANNEL;
- pbr.z *= res.METALLIC_CHANNEL;
- pbr.w *= res.SPECULAR_INTENSITY_CHANNEL;
- #endif
- #if USE_OCCLUSION_MAP
- pbr.x = mix(1.0, texture(occlusionMap, DEFAULT_UV).OCCLUSION_CHANNEL, pbrParams.x);
- #endif
- return pbr;
- }
- #endif
|