depth.glsl.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. export const vertex = /* glsl */`
  2. #include <common>
  3. #include <batching_pars_vertex>
  4. #include <uv_pars_vertex>
  5. #include <displacementmap_pars_vertex>
  6. #include <morphtarget_pars_vertex>
  7. #include <skinning_pars_vertex>
  8. #include <logdepthbuf_pars_vertex>
  9. #include <clipping_planes_pars_vertex>
  10. // This is used for computing an equivalent of gl_FragCoord.z that is as high precision as possible.
  11. // Some platforms compute gl_FragCoord at a lower precision which makes the manually computed value better for
  12. // depth-based postprocessing effects. Reproduced on iPad with A10 processor / iPadOS 13.3.1.
  13. varying vec2 vHighPrecisionZW;
  14. void main() {
  15. #include <uv_vertex>
  16. #include <batching_vertex>
  17. #include <skinbase_vertex>
  18. #include <morphinstance_vertex>
  19. #ifdef USE_DISPLACEMENTMAP
  20. #include <beginnormal_vertex>
  21. #include <morphnormal_vertex>
  22. #include <skinnormal_vertex>
  23. #endif
  24. #include <begin_vertex>
  25. #include <morphtarget_vertex>
  26. #include <skinning_vertex>
  27. #include <displacementmap_vertex>
  28. #include <project_vertex>
  29. #include <logdepthbuf_vertex>
  30. #include <clipping_planes_vertex>
  31. vHighPrecisionZW = gl_Position.zw;
  32. }
  33. `;
  34. export const fragment = /* glsl */`
  35. #if DEPTH_PACKING == 3200
  36. uniform float opacity;
  37. #endif
  38. #include <common>
  39. #include <packing>
  40. #include <uv_pars_fragment>
  41. #include <map_pars_fragment>
  42. #include <alphamap_pars_fragment>
  43. #include <alphatest_pars_fragment>
  44. #include <alphahash_pars_fragment>
  45. #include <logdepthbuf_pars_fragment>
  46. #include <clipping_planes_pars_fragment>
  47. varying vec2 vHighPrecisionZW;
  48. void main() {
  49. vec4 diffuseColor = vec4( 1.0 );
  50. #include <clipping_planes_fragment>
  51. #if DEPTH_PACKING == 3200
  52. diffuseColor.a = opacity;
  53. #endif
  54. #include <map_fragment>
  55. #include <alphamap_fragment>
  56. #include <alphatest_fragment>
  57. #include <alphahash_fragment>
  58. #include <logdepthbuf_fragment>
  59. // Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.
  60. float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;
  61. #if DEPTH_PACKING == 3200
  62. gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );
  63. #elif DEPTH_PACKING == 3201
  64. gl_FragColor = packDepthToRGBA( fragCoordZ );
  65. #elif DEPTH_PACKING == 3202
  66. gl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );
  67. #elif DEPTH_PACKING == 3203
  68. gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );
  69. #endif
  70. }
  71. `;