ShaderLib.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. import { ShaderChunk } from './ShaderChunk.js';
  2. import { mergeUniforms } from './UniformsUtils.js';
  3. import { Vector2 } from '../../math/Vector2.js';
  4. import { Vector3 } from '../../math/Vector3.js';
  5. import { UniformsLib } from './UniformsLib.js';
  6. import { Color } from '../../math/Color.js';
  7. import { Matrix3 } from '../../math/Matrix3.js';
  8. const ShaderLib = {
  9. basic: {
  10. uniforms: mergeUniforms( [
  11. UniformsLib.common,
  12. UniformsLib.specularmap,
  13. UniformsLib.envmap,
  14. UniformsLib.aomap,
  15. UniformsLib.lightmap,
  16. UniformsLib.fog
  17. ] ),
  18. vertexShader: ShaderChunk.meshbasic_vert,
  19. fragmentShader: ShaderChunk.meshbasic_frag
  20. },
  21. lambert: {
  22. uniforms: mergeUniforms( [
  23. UniformsLib.common,
  24. UniformsLib.specularmap,
  25. UniformsLib.envmap,
  26. UniformsLib.aomap,
  27. UniformsLib.lightmap,
  28. UniformsLib.emissivemap,
  29. UniformsLib.fog,
  30. UniformsLib.lights,
  31. {
  32. emissive: { value: new Color( 0x000000 ) }
  33. }
  34. ] ),
  35. vertexShader: ShaderChunk.meshlambert_vert,
  36. fragmentShader: ShaderChunk.meshlambert_frag
  37. },
  38. phong: {
  39. uniforms: mergeUniforms( [
  40. UniformsLib.common,
  41. UniformsLib.specularmap,
  42. UniformsLib.envmap,
  43. UniformsLib.aomap,
  44. UniformsLib.lightmap,
  45. UniformsLib.emissivemap,
  46. UniformsLib.bumpmap,
  47. UniformsLib.normalmap,
  48. UniformsLib.displacementmap,
  49. UniformsLib.fog,
  50. UniformsLib.lights,
  51. {
  52. emissive: { value: new Color( 0x000000 ) },
  53. specular: { value: new Color( 0x111111 ) },
  54. shininess: { value: 30 }
  55. }
  56. ] ),
  57. vertexShader: ShaderChunk.meshphong_vert,
  58. fragmentShader: ShaderChunk.meshphong_frag
  59. },
  60. standard: {
  61. uniforms: mergeUniforms( [
  62. UniformsLib.common,
  63. UniformsLib.envmap,
  64. UniformsLib.aomap,
  65. UniformsLib.lightmap,
  66. UniformsLib.emissivemap,
  67. UniformsLib.bumpmap,
  68. UniformsLib.normalmap,
  69. UniformsLib.displacementmap,
  70. UniformsLib.roughnessmap,
  71. UniformsLib.metalnessmap,
  72. UniformsLib.fog,
  73. UniformsLib.lights,
  74. {
  75. emissive: { value: new Color( 0x000000 ) },
  76. roughness: { value: 1.0 },
  77. metalness: { value: 0.0 },
  78. envMapIntensity: { value: 1 } // temporary
  79. }
  80. ] ),
  81. vertexShader: ShaderChunk.meshphysical_vert,
  82. fragmentShader: ShaderChunk.meshphysical_frag
  83. },
  84. toon: {
  85. uniforms: mergeUniforms( [
  86. UniformsLib.common,
  87. UniformsLib.aomap,
  88. UniformsLib.lightmap,
  89. UniformsLib.emissivemap,
  90. UniformsLib.bumpmap,
  91. UniformsLib.normalmap,
  92. UniformsLib.displacementmap,
  93. UniformsLib.gradientmap,
  94. UniformsLib.fog,
  95. UniformsLib.lights,
  96. {
  97. emissive: { value: new Color( 0x000000 ) }
  98. }
  99. ] ),
  100. vertexShader: ShaderChunk.meshtoon_vert,
  101. fragmentShader: ShaderChunk.meshtoon_frag
  102. },
  103. matcap: {
  104. uniforms: mergeUniforms( [
  105. UniformsLib.common,
  106. UniformsLib.bumpmap,
  107. UniformsLib.normalmap,
  108. UniformsLib.displacementmap,
  109. UniformsLib.fog,
  110. {
  111. matcap: { value: null }
  112. }
  113. ] ),
  114. vertexShader: ShaderChunk.meshmatcap_vert,
  115. fragmentShader: ShaderChunk.meshmatcap_frag
  116. },
  117. points: {
  118. uniforms: mergeUniforms( [
  119. UniformsLib.points,
  120. UniformsLib.fog
  121. ] ),
  122. vertexShader: ShaderChunk.points_vert,
  123. fragmentShader: ShaderChunk.points_frag
  124. },
  125. dashed: {
  126. uniforms: mergeUniforms( [
  127. UniformsLib.common,
  128. UniformsLib.fog,
  129. {
  130. scale: { value: 1 },
  131. dashSize: { value: 1 },
  132. totalSize: { value: 2 }
  133. }
  134. ] ),
  135. vertexShader: ShaderChunk.linedashed_vert,
  136. fragmentShader: ShaderChunk.linedashed_frag
  137. },
  138. depth: {
  139. uniforms: mergeUniforms( [
  140. UniformsLib.common,
  141. UniformsLib.displacementmap
  142. ] ),
  143. vertexShader: ShaderChunk.depth_vert,
  144. fragmentShader: ShaderChunk.depth_frag
  145. },
  146. normal: {
  147. uniforms: mergeUniforms( [
  148. UniformsLib.common,
  149. UniformsLib.bumpmap,
  150. UniformsLib.normalmap,
  151. UniformsLib.displacementmap,
  152. {
  153. opacity: { value: 1.0 }
  154. }
  155. ] ),
  156. vertexShader: ShaderChunk.meshnormal_vert,
  157. fragmentShader: ShaderChunk.meshnormal_frag
  158. },
  159. sprite: {
  160. uniforms: mergeUniforms( [
  161. UniformsLib.sprite,
  162. UniformsLib.fog
  163. ] ),
  164. vertexShader: ShaderChunk.sprite_vert,
  165. fragmentShader: ShaderChunk.sprite_frag
  166. },
  167. background: {
  168. uniforms: {
  169. uvTransform: { value: new Matrix3() },
  170. t2D: { value: null },
  171. },
  172. vertexShader: ShaderChunk.background_vert,
  173. fragmentShader: ShaderChunk.background_frag
  174. },
  175. /* -------------------------------------------------------------------------
  176. // Cube map shader
  177. ------------------------------------------------------------------------- */
  178. cube: {
  179. uniforms: mergeUniforms( [
  180. UniformsLib.envmap,
  181. {
  182. opacity: { value: 1.0 }
  183. }
  184. ] ),
  185. vertexShader: ShaderChunk.cube_vert,
  186. fragmentShader: ShaderChunk.cube_frag
  187. },
  188. equirect: {
  189. uniforms: {
  190. tEquirect: { value: null },
  191. },
  192. vertexShader: ShaderChunk.equirect_vert,
  193. fragmentShader: ShaderChunk.equirect_frag
  194. },
  195. distanceRGBA: {
  196. uniforms: mergeUniforms( [
  197. UniformsLib.common,
  198. UniformsLib.displacementmap,
  199. {
  200. referencePosition: { value: new Vector3() },
  201. nearDistance: { value: 1 },
  202. farDistance: { value: 1000 }
  203. }
  204. ] ),
  205. vertexShader: ShaderChunk.distanceRGBA_vert,
  206. fragmentShader: ShaderChunk.distanceRGBA_frag
  207. },
  208. shadow: {
  209. uniforms: mergeUniforms( [
  210. UniformsLib.lights,
  211. UniformsLib.fog,
  212. {
  213. color: { value: new Color( 0x00000 ) },
  214. opacity: { value: 1.0 }
  215. },
  216. ] ),
  217. vertexShader: ShaderChunk.shadow_vert,
  218. fragmentShader: ShaderChunk.shadow_frag
  219. }
  220. };
  221. ShaderLib.physical = {
  222. uniforms: mergeUniforms( [
  223. ShaderLib.standard.uniforms,
  224. {
  225. clearcoat: { value: 0 },
  226. clearcoatMap: { value: null },
  227. clearcoatRoughness: { value: 0 },
  228. clearcoatRoughnessMap: { value: null },
  229. clearcoatNormalScale: { value: new Vector2( 1, 1 ) },
  230. clearcoatNormalMap: { value: null },
  231. iridescence: { value: 0 },
  232. iridescenceMap: { value: null },
  233. iridescenceIOR: { value: 1.3 },
  234. iridescenceThicknessMinimum: { value: 100 },
  235. iridescenceThicknessMaximum: { value: 400 },
  236. iridescenceThicknessMap: { value: null },
  237. sheen: { value: 0 },
  238. sheenColor: { value: new Color( 0x000000 ) },
  239. sheenColorMap: { value: null },
  240. sheenRoughness: { value: 1 },
  241. sheenRoughnessMap: { value: null },
  242. transmission: { value: 0 },
  243. transmissionMap: { value: null },
  244. transmissionSamplerSize: { value: new Vector2() },
  245. transmissionSamplerMap: { value: null },
  246. thickness: { value: 0 },
  247. thicknessMap: { value: null },
  248. attenuationDistance: { value: 0 },
  249. attenuationColor: { value: new Color( 0x000000 ) },
  250. specularIntensity: { value: 1 },
  251. specularIntensityMap: { value: null },
  252. specularColor: { value: new Color( 1, 1, 1 ) },
  253. specularColorMap: { value: null },
  254. }
  255. ] ),
  256. vertexShader: ShaderChunk.meshphysical_vert,
  257. fragmentShader: ShaderChunk.meshphysical_frag
  258. };
  259. export { ShaderLib };
粤ICP备19079148号