special-effects.chunk 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. // dithered transparency (dithered alpha test), better looking with TAA
  2. // arguments: FSInput_clipPos, cc_viewPort.zw, baseColor.a
  3. void DitheredAlphaClip(vec4 clipPos, vec2 screen_resolution, float transparency)
  4. {
  5. // can not be floor or ceil
  6. vec2 screenPos = (clipPos.xy / clipPos.w * 0.5 + vec2(0.5)) * floor(screen_resolution);
  7. float dither5 = fract( ( screenPos.x + screenPos.y * 2.0 - 1.5 /*+ ResolvedView.TemporalAAParams.x*/ ) / 5.0 );
  8. float noiseValue = fract( dot( vec2( 171.0, 231.0 ) / 71.0, screenPos.xy ) );
  9. float dither = ( dither5 * 5.0 + noiseValue ) * (1.0 / 6.0);
  10. if( transparency + dither < 0.833333333 ) discard;
  11. }
  12. // NormalFromMap is: texture(normalmap) - 0.5
  13. vec3 BlendDetailedNormalMap(vec3 baseNormalFromMap, vec3 detailedNormalFromMap, float detailedIntensity)
  14. {
  15. return normalize(vec3(baseNormalFromMap.xy + detailedNormalFromMap.xy * detailedIntensity, baseNormalFromMap.z));
  16. }
  17. float BlendDetailedColorMap(float baseColor, float detailedColor)
  18. {
  19. float s = baseColor, d = detailedColor;
  20. if (s < 0.5)
  21. {
  22. return 2.0 * s * d;
  23. }
  24. else
  25. {
  26. if (d >= 0.5)
  27. return 1.0 - 2.0 * (1.0 - s) * (1.0 - d);
  28. else
  29. return mix(2.0 * s * d, s, (2.0 * s - 1.0) * (2.0 * s - 1.0));
  30. }
  31. }
  32. vec3 BlendDetailedColorMap(vec3 baseColor, vec3 detailedColor)
  33. {
  34. return vec3(BlendDetailedColorMap(baseColor.r, detailedColor.r),
  35. BlendDetailedColorMap(baseColor.g, detailedColor.g),
  36. BlendDetailedColorMap(baseColor.b, detailedColor.b));
  37. }