common-functions.chunk 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // include this file after all fragment surface functions definition
  2. // not contain anisotropic params
  3. #ifndef CC_SURFACES_FRAGMENT_MODIFY_BASECOLOR_AND_TRANSPARENCY
  4. #define CC_SURFACES_FRAGMENT_MODIFY_BASECOLOR_AND_TRANSPARENCY
  5. vec4 SurfacesFragmentModifyBaseColorAndTransparency()
  6. {
  7. vec4 baseColor = albedo;
  8. #if USE_VERTEX_COLOR
  9. baseColor.rgb *= SRGBToLinear(FSInput_vertexColor.rgb); // use linear
  10. baseColor.a *= FSInput_vertexColor.a;
  11. #endif
  12. #if USE_ALBEDO_MAP
  13. vec4 texColor = texture(albedoMap, ALBEDO_UV);
  14. texColor.rgb = SRGBToLinear(texColor.rgb);
  15. baseColor *= texColor;
  16. #endif
  17. #if USE_ALPHA_TEST
  18. if (baseColor.ALPHA_TEST_CHANNEL < albedoScaleAndCutoff.w) discard;
  19. #endif
  20. baseColor.rgb *= albedoScaleAndCutoff.xyz;
  21. return baseColor;
  22. }
  23. #endif
  24. #ifndef CC_SURFACES_FRAGMENT_ALPHA_CLIP_ONLY
  25. #define CC_SURFACES_FRAGMENT_ALPHA_CLIP_ONLY
  26. void SurfacesFragmentAlphaClipOnly()
  27. {
  28. #if USE_ALPHA_TEST
  29. float alpha = albedo.ALPHA_TEST_CHANNEL;
  30. #if USE_VERTEX_COLOR
  31. alpha *= FSInput_vertexColor.a;
  32. #endif
  33. #if USE_ALBEDO_MAP
  34. alpha = texture(albedoMap, ALBEDO_UV).ALPHA_TEST_CHANNEL;
  35. #endif
  36. if (alpha < albedoScaleAndCutoff.w) discard;
  37. #endif
  38. }
  39. #endif
  40. #ifndef CC_SURFACES_FRAGMENT_MODIFY_WORLD_NORMAL
  41. #define CC_SURFACES_FRAGMENT_MODIFY_WORLD_NORMAL
  42. vec3 SurfacesFragmentModifyWorldNormal()
  43. {
  44. vec3 normal = FSInput_worldNormal;
  45. #if USE_NORMAL_MAP
  46. vec3 nmmp = texture(normalMap, NORMAL_UV).xyz - vec3(0.5);
  47. normal = CalculateNormalFromTangentSpace(nmmp, emissiveScaleParam.w, normalize(normal.xyz), normalize(FSInput_worldTangent), FSInput_mirrorNormal);
  48. #endif
  49. return normalize(normal);
  50. }
  51. #endif
  52. #ifndef CC_SURFACES_FRAGMENT_MODIFY_PBRPARAMS
  53. #define CC_SURFACES_FRAGMENT_MODIFY_PBRPARAMS
  54. vec4 SurfacesFragmentModifyPBRParams()
  55. {
  56. vec4 pbr = pbrParams;
  57. pbr.x = 1.0;
  58. #if USE_PBR_MAP
  59. vec4 res = texture(pbrMap, DEFAULT_UV);
  60. pbr.x = mix(1.0, res.OCCLUSION_CHANNEL, pbrParams.x);
  61. pbr.y *= res.ROUGHNESS_CHANNEL;
  62. pbr.z *= res.METALLIC_CHANNEL;
  63. pbr.w *= res.SPECULAR_INTENSITY_CHANNEL;
  64. #endif
  65. #if USE_OCCLUSION_MAP
  66. pbr.x = mix(1.0, texture(occlusionMap, DEFAULT_UV).OCCLUSION_CHANNEL, pbrParams.x);
  67. #endif
  68. return pbr;
  69. }
  70. #endif