simple-skin.chunk 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include <surfaces/data-structures/standard>
  2. #include <lighting-models/includes/standard>
  3. #if USE_PREINTEGRATED_SKIN
  4. uniform sampler2D preIntegratedSkinMap; // engine internal assets
  5. #endif
  6. #define CC_SURFACES_LIGHTING_MODIFY_FINAL_RESULT
  7. void SurfacesLightingModifyFinalResult(inout LightingResult result, in LightingIntermediateData lightingData, in SurfacesMaterialData surfaceData, in LightingMiscData miscData)
  8. {
  9. #if CC_SURFACES_LIGHTING_SSS
  10. float sssIntensity = surfaceData.sssParams.x;
  11. // curvature needs pre-generating in vertex or texture data, otherwise disable pre-integrated skin
  12. float sssCurvature = surfaceData.sssParams.y;
  13. float sssColoration = surfaceData.sssParams.z;
  14. // update lighting data for diffuse calculations
  15. LightingIntermediateData lightingData3S = lightingData;
  16. lightingData3S.N = normalize(FSInput_worldNormal);
  17. lightingData3S.NoL = dot(lightingData3S.N, lightingData.L);
  18. lightingData3S.NoL = mix(lightingData.NoL, lightingData3S.NoL, sssIntensity);
  19. lightingData3S.NoLSat = saturate(lightingData3S.NoL);
  20. float multiplier = lightingData.distAttenuation * lightingData.angleAttenuation;
  21. #if USE_PREINTEGRATED_SKIN
  22. result.directDiffuse = texture(preIntegratedSkinMap, vec2(lightingData3S.NoL * 0.5 + 0.5, sssCurvature)).rgb;
  23. vec3 color = result.directDiffuse / (EPSILON_LOWP + max(max(result.directDiffuse.r, result.directDiffuse.g), result.directDiffuse.b));
  24. result.directDiffuse *= pow(color, vec3(sssColoration));
  25. result.directDiffuse *= miscData.lightColorAndIntensity.rgb * miscData.lightColorAndIntensity.w * DiffuseCoefficient_EnergyConservation;
  26. #else
  27. result.directDiffuse = CalculateDirectDiffuse(lightingData3S, miscData.lightColorAndIntensity) * multiplier;
  28. #endif
  29. #if !CC_FORWARD_ADD
  30. result.environmentDiffuse = CalculateEnvironmentDiffuse(lightingData3S, cc_ambientSky.w);
  31. #endif
  32. #endif
  33. }