meshphysical.glsl.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. export const vertex = /* glsl */`
  2. #define STANDARD
  3. varying vec3 vViewPosition;
  4. #ifdef USE_TRANSMISSION
  5. varying vec3 vWorldPosition;
  6. #endif
  7. #include <common>
  8. #include <uv_pars_vertex>
  9. #include <displacementmap_pars_vertex>
  10. #include <color_pars_vertex>
  11. #include <fog_pars_vertex>
  12. #include <normal_pars_vertex>
  13. #include <morphtarget_pars_vertex>
  14. #include <skinning_pars_vertex>
  15. #include <shadowmap_pars_vertex>
  16. #include <logdepthbuf_pars_vertex>
  17. #include <clipping_planes_pars_vertex>
  18. void main() {
  19. #include <uv_vertex>
  20. #include <color_vertex>
  21. #include <morphcolor_vertex>
  22. #include <beginnormal_vertex>
  23. #include <morphnormal_vertex>
  24. #include <skinbase_vertex>
  25. #include <skinnormal_vertex>
  26. #include <defaultnormal_vertex>
  27. #include <normal_vertex>
  28. #include <begin_vertex>
  29. #include <morphtarget_vertex>
  30. #include <skinning_vertex>
  31. #include <displacementmap_vertex>
  32. #include <project_vertex>
  33. #include <logdepthbuf_vertex>
  34. #include <clipping_planes_vertex>
  35. vViewPosition = - mvPosition.xyz;
  36. #include <worldpos_vertex>
  37. #include <shadowmap_vertex>
  38. #include <fog_vertex>
  39. #ifdef USE_TRANSMISSION
  40. vWorldPosition = worldPosition.xyz;
  41. #endif
  42. }
  43. `;
  44. export const fragment = /* glsl */`
  45. #define STANDARD
  46. #ifdef PHYSICAL
  47. #define IOR
  48. #define USE_SPECULAR
  49. #endif
  50. uniform vec3 diffuse;
  51. uniform vec3 emissive;
  52. uniform float roughness;
  53. uniform float metalness;
  54. uniform float opacity;
  55. #ifdef IOR
  56. uniform float ior;
  57. #endif
  58. #ifdef USE_SPECULAR
  59. uniform float specularIntensity;
  60. uniform vec3 specularColor;
  61. #ifdef USE_SPECULAR_COLORMAP
  62. uniform sampler2D specularColorMap;
  63. #endif
  64. #ifdef USE_SPECULAR_INTENSITYMAP
  65. uniform sampler2D specularIntensityMap;
  66. #endif
  67. #endif
  68. #ifdef USE_CLEARCOAT
  69. uniform float clearcoat;
  70. uniform float clearcoatRoughness;
  71. #endif
  72. #ifdef USE_IRIDESCENCE
  73. uniform float iridescence;
  74. uniform float iridescenceIOR;
  75. uniform float iridescenceThicknessMinimum;
  76. uniform float iridescenceThicknessMaximum;
  77. #endif
  78. #ifdef USE_SHEEN
  79. uniform vec3 sheenColor;
  80. uniform float sheenRoughness;
  81. #ifdef USE_SHEEN_COLORMAP
  82. uniform sampler2D sheenColorMap;
  83. #endif
  84. #ifdef USE_SHEEN_ROUGHNESSMAP
  85. uniform sampler2D sheenRoughnessMap;
  86. #endif
  87. #endif
  88. #ifdef USE_ANISOTROPY
  89. uniform vec2 anisotropyVector;
  90. #ifdef USE_ANISOTROPYMAP
  91. uniform sampler2D anisotropyMap;
  92. #endif
  93. #endif
  94. varying vec3 vViewPosition;
  95. #include <common>
  96. #include <packing>
  97. #include <dithering_pars_fragment>
  98. #include <color_pars_fragment>
  99. #include <uv_pars_fragment>
  100. #include <map_pars_fragment>
  101. #include <alphamap_pars_fragment>
  102. #include <alphatest_pars_fragment>
  103. #include <alphahash_pars_fragment>
  104. #include <aomap_pars_fragment>
  105. #include <lightmap_pars_fragment>
  106. #include <emissivemap_pars_fragment>
  107. #include <iridescence_fragment>
  108. #include <cube_uv_reflection_fragment>
  109. #include <envmap_common_pars_fragment>
  110. #include <envmap_physical_pars_fragment>
  111. #include <fog_pars_fragment>
  112. #include <lights_pars_begin>
  113. #include <normal_pars_fragment>
  114. #include <lights_physical_pars_fragment>
  115. #include <transmission_pars_fragment>
  116. #include <shadowmap_pars_fragment>
  117. #include <bumpmap_pars_fragment>
  118. #include <normalmap_pars_fragment>
  119. #include <clearcoat_pars_fragment>
  120. #include <iridescence_pars_fragment>
  121. #include <roughnessmap_pars_fragment>
  122. #include <metalnessmap_pars_fragment>
  123. #include <logdepthbuf_pars_fragment>
  124. #include <clipping_planes_pars_fragment>
  125. void main() {
  126. #include <clipping_planes_fragment>
  127. vec4 diffuseColor = vec4( diffuse, opacity );
  128. ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
  129. vec3 totalEmissiveRadiance = emissive;
  130. #include <logdepthbuf_fragment>
  131. #include <map_fragment>
  132. #include <color_fragment>
  133. #include <alphamap_fragment>
  134. #include <alphatest_fragment>
  135. #include <alphahash_fragment>
  136. #include <roughnessmap_fragment>
  137. #include <metalnessmap_fragment>
  138. #include <normal_fragment_begin>
  139. #include <normal_fragment_maps>
  140. #include <clearcoat_normal_fragment_begin>
  141. #include <clearcoat_normal_fragment_maps>
  142. #include <emissivemap_fragment>
  143. // accumulation
  144. #include <lights_physical_fragment>
  145. #include <lights_fragment_begin>
  146. #include <lights_fragment_maps>
  147. #include <lights_fragment_end>
  148. // modulation
  149. #include <aomap_fragment>
  150. vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;
  151. vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;
  152. #include <transmission_fragment>
  153. vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;
  154. #ifdef USE_SHEEN
  155. // Sheen energy compensation approximation calculation can be found at the end of
  156. // https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing
  157. float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );
  158. outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;
  159. #endif
  160. #ifdef USE_CLEARCOAT
  161. float dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );
  162. vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );
  163. outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;
  164. #endif
  165. #include <opaque_fragment>
  166. #include <tonemapping_fragment>
  167. #include <colorspace_fragment>
  168. #include <fog_fragment>
  169. #include <premultiplied_alpha_fragment>
  170. #include <dithering_fragment>
  171. }
  172. `;