ShaderLib.js 28 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100
  1. /**
  2. * Webgl Shader Library for three.js
  3. *
  4. * @author alteredq / http://alteredqualia.com/
  5. * @author mrdoob / http://mrdoob.com/
  6. * @author mikael emtinger / http://gomo.se/
  7. */
  8. THREE.ShaderLib = {
  9. 'basic': {
  10. uniforms: THREE.UniformsUtils.merge( [
  11. THREE.UniformsLib[ "common" ],
  12. THREE.UniformsLib[ "aomap" ],
  13. THREE.UniformsLib[ "fog" ],
  14. THREE.UniformsLib[ "shadowmap" ]
  15. ] ),
  16. vertexShader: [
  17. THREE.ShaderChunk[ "common" ],
  18. THREE.ShaderChunk[ "uv_pars_vertex" ],
  19. THREE.ShaderChunk[ "uv2_pars_vertex" ],
  20. THREE.ShaderChunk[ "envmap_pars_vertex" ],
  21. THREE.ShaderChunk[ "color_pars_vertex" ],
  22. THREE.ShaderChunk[ "morphtarget_pars_vertex" ],
  23. THREE.ShaderChunk[ "skinning_pars_vertex" ],
  24. THREE.ShaderChunk[ "shadowmap_pars_vertex" ],
  25. THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
  26. "void main() {",
  27. THREE.ShaderChunk[ "uv_vertex" ],
  28. THREE.ShaderChunk[ "uv2_vertex" ],
  29. THREE.ShaderChunk[ "color_vertex" ],
  30. THREE.ShaderChunk[ "skinbase_vertex" ],
  31. " #ifdef USE_ENVMAP",
  32. THREE.ShaderChunk[ "beginnormal_vertex" ],
  33. THREE.ShaderChunk[ "morphnormal_vertex" ],
  34. THREE.ShaderChunk[ "skinnormal_vertex" ],
  35. THREE.ShaderChunk[ "defaultnormal_vertex" ],
  36. " #endif",
  37. THREE.ShaderChunk[ "begin_vertex" ],
  38. THREE.ShaderChunk[ "morphtarget_vertex" ],
  39. THREE.ShaderChunk[ "skinning_vertex" ],
  40. THREE.ShaderChunk[ "project_vertex" ],
  41. THREE.ShaderChunk[ "logdepthbuf_vertex" ],
  42. THREE.ShaderChunk[ "worldpos_vertex" ],
  43. THREE.ShaderChunk[ "envmap_vertex" ],
  44. THREE.ShaderChunk[ "shadowmap_vertex" ],
  45. "}"
  46. ].join( "\n" ),
  47. fragmentShader: [
  48. "uniform vec3 diffuse;",
  49. "uniform float opacity;",
  50. "#ifndef FLAT_SHADED",
  51. " varying vec3 vNormal;",
  52. "#endif",
  53. THREE.ShaderChunk[ "common" ],
  54. THREE.ShaderChunk[ "color_pars_fragment" ],
  55. THREE.ShaderChunk[ "uv_pars_fragment" ],
  56. THREE.ShaderChunk[ "uv2_pars_fragment" ],
  57. THREE.ShaderChunk[ "map_pars_fragment" ],
  58. THREE.ShaderChunk[ "alphamap_pars_fragment" ],
  59. THREE.ShaderChunk[ "aomap_pars_fragment" ],
  60. THREE.ShaderChunk[ "envmap_pars_fragment" ],
  61. THREE.ShaderChunk[ "fog_pars_fragment" ],
  62. THREE.ShaderChunk[ "shadowmap_pars_fragment" ],
  63. THREE.ShaderChunk[ "specularmap_pars_fragment" ],
  64. THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
  65. "void main() {",
  66. " vec4 diffuseColor = vec4( diffuse, opacity );",
  67. THREE.ShaderChunk[ "logdepthbuf_fragment" ],
  68. THREE.ShaderChunk[ "map_fragment" ],
  69. THREE.ShaderChunk[ "color_fragment" ],
  70. THREE.ShaderChunk[ "alphamap_fragment" ],
  71. THREE.ShaderChunk[ "alphatest_fragment" ],
  72. THREE.ShaderChunk[ "specularmap_fragment" ],
  73. " ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), diffuseColor.rgb, vec3( 0.0 ) );",
  74. THREE.ShaderChunk[ "aomap_fragment" ],
  75. THREE.ShaderChunk[ "shadowmap_fragment" ],
  76. "reflectedLight.indirectDiffuse *= shadowMask;",
  77. "vec3 outgoingLight = reflectedLight.indirectDiffuse;",
  78. THREE.ShaderChunk[ "envmap_fragment" ],
  79. THREE.ShaderChunk[ "linear_to_gamma_fragment" ],
  80. THREE.ShaderChunk[ "fog_fragment" ],
  81. " gl_FragColor = vec4( outgoingLight, diffuseColor.a );",
  82. "}"
  83. ].join( "\n" )
  84. },
  85. 'lambert': {
  86. uniforms: THREE.UniformsUtils.merge( [
  87. THREE.UniformsLib[ "common" ],
  88. THREE.UniformsLib[ "fog" ],
  89. THREE.UniformsLib[ "lights" ],
  90. THREE.UniformsLib[ "shadowmap" ],
  91. {
  92. "emissive" : { type: "c", value: new THREE.Color( 0x000000 ) }
  93. }
  94. ] ),
  95. vertexShader: [
  96. "#define LAMBERT",
  97. "varying vec3 vLightFront;",
  98. "#ifdef DOUBLE_SIDED",
  99. " varying vec3 vLightBack;",
  100. "#endif",
  101. THREE.ShaderChunk[ "common" ],
  102. THREE.ShaderChunk[ "uv_pars_vertex" ],
  103. THREE.ShaderChunk[ "uv2_pars_vertex" ],
  104. THREE.ShaderChunk[ "envmap_pars_vertex" ],
  105. THREE.ShaderChunk[ "bsdfs" ],
  106. THREE.ShaderChunk[ "lights_pars" ],
  107. THREE.ShaderChunk[ "color_pars_vertex" ],
  108. THREE.ShaderChunk[ "morphtarget_pars_vertex" ],
  109. THREE.ShaderChunk[ "skinning_pars_vertex" ],
  110. THREE.ShaderChunk[ "shadowmap_pars_vertex" ],
  111. THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
  112. "void main() {",
  113. THREE.ShaderChunk[ "uv_vertex" ],
  114. THREE.ShaderChunk[ "uv2_vertex" ],
  115. THREE.ShaderChunk[ "color_vertex" ],
  116. THREE.ShaderChunk[ "beginnormal_vertex" ],
  117. THREE.ShaderChunk[ "morphnormal_vertex" ],
  118. THREE.ShaderChunk[ "skinbase_vertex" ],
  119. THREE.ShaderChunk[ "skinnormal_vertex" ],
  120. THREE.ShaderChunk[ "defaultnormal_vertex" ],
  121. THREE.ShaderChunk[ "begin_vertex" ],
  122. THREE.ShaderChunk[ "morphtarget_vertex" ],
  123. THREE.ShaderChunk[ "skinning_vertex" ],
  124. THREE.ShaderChunk[ "project_vertex" ],
  125. THREE.ShaderChunk[ "logdepthbuf_vertex" ],
  126. THREE.ShaderChunk[ "worldpos_vertex" ],
  127. THREE.ShaderChunk[ "envmap_vertex" ],
  128. THREE.ShaderChunk[ "lights_lambert_vertex" ],
  129. THREE.ShaderChunk[ "shadowmap_vertex" ],
  130. "}"
  131. ].join( "\n" ),
  132. fragmentShader: [
  133. "uniform vec3 diffuse;",
  134. "uniform vec3 emissive;",
  135. "uniform float opacity;",
  136. "uniform vec3 ambientLightColor;",
  137. "varying vec3 vLightFront;",
  138. "#ifdef DOUBLE_SIDED",
  139. " varying vec3 vLightBack;",
  140. "#endif",
  141. THREE.ShaderChunk[ "common" ],
  142. THREE.ShaderChunk[ "color_pars_fragment" ],
  143. THREE.ShaderChunk[ "uv_pars_fragment" ],
  144. THREE.ShaderChunk[ "uv2_pars_fragment" ],
  145. THREE.ShaderChunk[ "map_pars_fragment" ],
  146. THREE.ShaderChunk[ "alphamap_pars_fragment" ],
  147. THREE.ShaderChunk[ "envmap_pars_fragment" ],
  148. THREE.ShaderChunk[ "fog_pars_fragment" ],
  149. THREE.ShaderChunk[ "shadowmap_pars_fragment" ],
  150. THREE.ShaderChunk[ "specularmap_pars_fragment" ],
  151. THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
  152. "void main() {",
  153. " vec3 outgoingLight = vec3( 0.0 );",
  154. " vec4 diffuseColor = vec4( diffuse, opacity );",
  155. " vec3 totalAmbientLight = PI * ambientLightColor;",
  156. THREE.ShaderChunk[ "logdepthbuf_fragment" ],
  157. THREE.ShaderChunk[ "map_fragment" ],
  158. THREE.ShaderChunk[ "color_fragment" ],
  159. THREE.ShaderChunk[ "alphamap_fragment" ],
  160. THREE.ShaderChunk[ "alphatest_fragment" ],
  161. THREE.ShaderChunk[ "specularmap_fragment" ],
  162. THREE.ShaderChunk[ "shadowmap_fragment" ],
  163. " #ifdef DOUBLE_SIDED",
  164. " if ( gl_FrontFacing )",
  165. " outgoingLight += RECIPROCAL_PI * diffuseColor.rgb * ( vLightFront * shadowMask + totalAmbientLight ) + emissive;",
  166. " else",
  167. " outgoingLight += RECIPROCAL_PI * diffuseColor.rgb * ( vLightBack * shadowMask + totalAmbientLight ) + emissive;",
  168. " #else",
  169. " outgoingLight += RECIPROCAL_PI * diffuseColor.rgb * ( vLightFront * shadowMask + totalAmbientLight ) + emissive;",
  170. " #endif",
  171. THREE.ShaderChunk[ "envmap_fragment" ],
  172. THREE.ShaderChunk[ "linear_to_gamma_fragment" ],
  173. THREE.ShaderChunk[ "fog_fragment" ],
  174. " gl_FragColor = vec4( outgoingLight, diffuseColor.a );",
  175. "}"
  176. ].join( "\n" )
  177. },
  178. 'phong': {
  179. uniforms: THREE.UniformsUtils.merge( [
  180. THREE.UniformsLib[ "common" ],
  181. THREE.UniformsLib[ "aomap" ],
  182. THREE.UniformsLib[ "lightmap" ],
  183. THREE.UniformsLib[ "emissivemap" ],
  184. THREE.UniformsLib[ "bumpmap" ],
  185. THREE.UniformsLib[ "normalmap" ],
  186. THREE.UniformsLib[ "displacementmap" ],
  187. THREE.UniformsLib[ "fog" ],
  188. THREE.UniformsLib[ "lights" ],
  189. THREE.UniformsLib[ "shadowmap" ],
  190. {
  191. "emissive" : { type: "c", value: new THREE.Color( 0x000000 ) },
  192. "specular" : { type: "c", value: new THREE.Color( 0x111111 ) },
  193. "shininess": { type: "f", value: 30 }
  194. }
  195. ] ),
  196. vertexShader: [
  197. "#define PHONG",
  198. "varying vec3 vViewPosition;",
  199. "#ifndef FLAT_SHADED",
  200. " varying vec3 vNormal;",
  201. "#endif",
  202. THREE.ShaderChunk[ "common" ],
  203. THREE.ShaderChunk[ "uv_pars_vertex" ],
  204. THREE.ShaderChunk[ "uv2_pars_vertex" ],
  205. THREE.ShaderChunk[ "displacementmap_pars_vertex" ],
  206. THREE.ShaderChunk[ "envmap_pars_vertex" ],
  207. THREE.ShaderChunk[ "lights_phong_pars_vertex" ],
  208. THREE.ShaderChunk[ "color_pars_vertex" ],
  209. THREE.ShaderChunk[ "morphtarget_pars_vertex" ],
  210. THREE.ShaderChunk[ "skinning_pars_vertex" ],
  211. THREE.ShaderChunk[ "shadowmap_pars_vertex" ],
  212. THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
  213. "void main() {",
  214. THREE.ShaderChunk[ "uv_vertex" ],
  215. THREE.ShaderChunk[ "uv2_vertex" ],
  216. THREE.ShaderChunk[ "color_vertex" ],
  217. THREE.ShaderChunk[ "beginnormal_vertex" ],
  218. THREE.ShaderChunk[ "morphnormal_vertex" ],
  219. THREE.ShaderChunk[ "skinbase_vertex" ],
  220. THREE.ShaderChunk[ "skinnormal_vertex" ],
  221. THREE.ShaderChunk[ "defaultnormal_vertex" ],
  222. "#ifndef FLAT_SHADED", // Normal computed with derivatives when FLAT_SHADED
  223. " vNormal = normalize( transformedNormal );",
  224. "#endif",
  225. THREE.ShaderChunk[ "begin_vertex" ],
  226. THREE.ShaderChunk[ "displacementmap_vertex" ],
  227. THREE.ShaderChunk[ "morphtarget_vertex" ],
  228. THREE.ShaderChunk[ "skinning_vertex" ],
  229. THREE.ShaderChunk[ "project_vertex" ],
  230. THREE.ShaderChunk[ "logdepthbuf_vertex" ],
  231. " vViewPosition = - mvPosition.xyz;",
  232. THREE.ShaderChunk[ "worldpos_vertex" ],
  233. THREE.ShaderChunk[ "envmap_vertex" ],
  234. THREE.ShaderChunk[ "lights_phong_vertex" ],
  235. THREE.ShaderChunk[ "shadowmap_vertex" ],
  236. "}"
  237. ].join( "\n" ),
  238. fragmentShader: [
  239. "#define PHONG",
  240. "uniform vec3 diffuse;",
  241. "uniform vec3 emissive;",
  242. "uniform vec3 specular;",
  243. "uniform float shininess;",
  244. "uniform float opacity;",
  245. THREE.ShaderChunk[ "common" ],
  246. THREE.ShaderChunk[ "color_pars_fragment" ],
  247. THREE.ShaderChunk[ "uv_pars_fragment" ],
  248. THREE.ShaderChunk[ "uv2_pars_fragment" ],
  249. THREE.ShaderChunk[ "map_pars_fragment" ],
  250. THREE.ShaderChunk[ "alphamap_pars_fragment" ],
  251. THREE.ShaderChunk[ "aomap_pars_fragment" ],
  252. THREE.ShaderChunk[ "lightmap_pars_fragment" ],
  253. THREE.ShaderChunk[ "emissivemap_pars_fragment" ],
  254. THREE.ShaderChunk[ "envmap_pars_fragment" ],
  255. THREE.ShaderChunk[ "fog_pars_fragment" ],
  256. THREE.ShaderChunk[ "bsdfs" ],
  257. THREE.ShaderChunk[ "lights_pars" ],
  258. THREE.ShaderChunk[ "lights_phong_pars_fragment" ],
  259. THREE.ShaderChunk[ "shadowmap_pars_fragment" ],
  260. THREE.ShaderChunk[ "bumpmap_pars_fragment" ],
  261. THREE.ShaderChunk[ "normalmap_pars_fragment" ],
  262. THREE.ShaderChunk[ "specularmap_pars_fragment" ],
  263. THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
  264. "void main() {",
  265. " vec4 diffuseColor = vec4( diffuse, opacity );",
  266. " ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );",
  267. " vec3 totalEmissiveLight = emissive;",
  268. THREE.ShaderChunk[ "logdepthbuf_fragment" ],
  269. THREE.ShaderChunk[ "map_fragment" ],
  270. THREE.ShaderChunk[ "color_fragment" ],
  271. THREE.ShaderChunk[ "alphamap_fragment" ],
  272. THREE.ShaderChunk[ "alphatest_fragment" ],
  273. THREE.ShaderChunk[ "specularmap_fragment" ],
  274. THREE.ShaderChunk[ "normal_phong_fragment" ],
  275. THREE.ShaderChunk[ "emissivemap_fragment" ],
  276. // accumulation
  277. THREE.ShaderChunk[ "lights_phong_fragment" ],
  278. THREE.ShaderChunk[ "lights_template" ],
  279. THREE.ShaderChunk[ "lightmap_fragment" ],
  280. // modulation
  281. THREE.ShaderChunk[ "aomap_fragment" ],
  282. THREE.ShaderChunk[ "shadowmap_fragment" ],
  283. "reflectedLight.directDiffuse *= shadowMask;",
  284. "reflectedLight.directSpecular *= shadowMask;",
  285. "vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveLight;",
  286. THREE.ShaderChunk[ "envmap_fragment" ],
  287. THREE.ShaderChunk[ "linear_to_gamma_fragment" ],
  288. THREE.ShaderChunk[ "fog_fragment" ],
  289. " gl_FragColor = vec4( outgoingLight, diffuseColor.a );",
  290. "}"
  291. ].join( "\n" )
  292. },
  293. 'standard': {
  294. uniforms: THREE.UniformsUtils.merge( [
  295. THREE.UniformsLib[ "common" ],
  296. THREE.UniformsLib[ "aomap" ],
  297. THREE.UniformsLib[ "lightmap" ],
  298. THREE.UniformsLib[ "emissivemap" ],
  299. THREE.UniformsLib[ "bumpmap" ],
  300. THREE.UniformsLib[ "normalmap" ],
  301. THREE.UniformsLib[ "displacementmap" ],
  302. THREE.UniformsLib[ "roughnessmap" ],
  303. THREE.UniformsLib[ "reflectivitymap" ],
  304. THREE.UniformsLib[ "metalnessmap" ],
  305. THREE.UniformsLib[ "fog" ],
  306. THREE.UniformsLib[ "lights" ],
  307. THREE.UniformsLib[ "shadowmap" ],
  308. {
  309. "emissive" : { type: "c", value: new THREE.Color( 0x000000 ) },
  310. "roughness": { type: "f", value: 0.5 },
  311. "metalness": { type: "f", value: 0 },
  312. "envMapIntensity" : { type: "f", value: 1 } // temporary
  313. }
  314. ] ),
  315. vertexShader: [
  316. "#define STANDARD",
  317. "varying vec3 vViewPosition;",
  318. "#ifndef FLAT_SHADED",
  319. " varying vec3 vNormal;",
  320. "#endif",
  321. THREE.ShaderChunk[ "common" ],
  322. THREE.ShaderChunk[ "uv_pars_vertex" ],
  323. THREE.ShaderChunk[ "uv2_pars_vertex" ],
  324. THREE.ShaderChunk[ "displacementmap_pars_vertex" ],
  325. THREE.ShaderChunk[ "envmap_pars_vertex" ],
  326. THREE.ShaderChunk[ "lights_phong_pars_vertex" ], // use phong chunk for now
  327. THREE.ShaderChunk[ "color_pars_vertex" ],
  328. THREE.ShaderChunk[ "morphtarget_pars_vertex" ],
  329. THREE.ShaderChunk[ "skinning_pars_vertex" ],
  330. THREE.ShaderChunk[ "shadowmap_pars_vertex" ],
  331. THREE.ShaderChunk[ "specularmap_pars_fragment" ],
  332. THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
  333. "void main() {", // STANDARD
  334. THREE.ShaderChunk[ "uv_vertex" ],
  335. THREE.ShaderChunk[ "uv2_vertex" ],
  336. THREE.ShaderChunk[ "color_vertex" ],
  337. THREE.ShaderChunk[ "beginnormal_vertex" ],
  338. THREE.ShaderChunk[ "morphnormal_vertex" ],
  339. THREE.ShaderChunk[ "skinbase_vertex" ],
  340. THREE.ShaderChunk[ "skinnormal_vertex" ],
  341. THREE.ShaderChunk[ "defaultnormal_vertex" ],
  342. "#ifndef FLAT_SHADED", // Normal computed with derivatives when FLAT_SHADED
  343. " vNormal = normalize( transformedNormal );",
  344. "#endif",
  345. THREE.ShaderChunk[ "begin_vertex" ],
  346. THREE.ShaderChunk[ "displacementmap_vertex" ],
  347. THREE.ShaderChunk[ "morphtarget_vertex" ],
  348. THREE.ShaderChunk[ "skinning_vertex" ],
  349. THREE.ShaderChunk[ "project_vertex" ],
  350. THREE.ShaderChunk[ "logdepthbuf_vertex" ],
  351. " vViewPosition = - mvPosition.xyz;",
  352. THREE.ShaderChunk[ "worldpos_vertex" ],
  353. THREE.ShaderChunk[ "envmap_vertex" ],
  354. THREE.ShaderChunk[ "lights_phong_vertex" ], // use phong chunk for now
  355. THREE.ShaderChunk[ "shadowmap_vertex" ],
  356. "}"
  357. ].join( "\n" ),
  358. fragmentShader: [
  359. "#define STANDARD",
  360. "uniform vec3 diffuse;",
  361. "uniform vec3 emissive;",
  362. "uniform float roughness;",
  363. "uniform float metalness;",
  364. "uniform float opacity;",
  365. "uniform float envMapIntensity;", // temporary
  366. "varying vec3 vViewPosition;",
  367. "#ifndef FLAT_SHADED",
  368. " varying vec3 vNormal;",
  369. "#endif",
  370. THREE.ShaderChunk[ "common" ],
  371. THREE.ShaderChunk[ "color_pars_fragment" ],
  372. THREE.ShaderChunk[ "uv_pars_fragment" ],
  373. THREE.ShaderChunk[ "uv2_pars_fragment" ],
  374. THREE.ShaderChunk[ "map_pars_fragment" ],
  375. THREE.ShaderChunk[ "alphamap_pars_fragment" ],
  376. THREE.ShaderChunk[ "aomap_pars_fragment" ],
  377. THREE.ShaderChunk[ "lightmap_pars_fragment" ],
  378. THREE.ShaderChunk[ "emissivemap_pars_fragment" ],
  379. THREE.ShaderChunk[ "envmap_pars_fragment" ],
  380. THREE.ShaderChunk[ "fog_pars_fragment" ],
  381. THREE.ShaderChunk[ "bsdfs" ],
  382. THREE.ShaderChunk[ "lights_pars" ],
  383. THREE.ShaderChunk[ "lights_standard_pars_fragment" ],
  384. THREE.ShaderChunk[ "shadowmap_pars_fragment" ],
  385. THREE.ShaderChunk[ "bumpmap_pars_fragment" ],
  386. THREE.ShaderChunk[ "normalmap_pars_fragment" ],
  387. THREE.ShaderChunk[ "roughnessmap_pars_fragment" ],
  388. //THREE.ShaderChunk[ "reflectivitymap_pars_fragment" ],
  389. THREE.ShaderChunk[ "metalnessmap_pars_fragment" ],
  390. THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
  391. "void main() {",
  392. " vec4 diffuseColor = vec4( diffuse, opacity );",
  393. " ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );",
  394. " vec3 totalEmissiveLight = emissive;",
  395. THREE.ShaderChunk[ "logdepthbuf_fragment" ],
  396. THREE.ShaderChunk[ "map_fragment" ],
  397. THREE.ShaderChunk[ "color_fragment" ],
  398. THREE.ShaderChunk[ "alphamap_fragment" ],
  399. THREE.ShaderChunk[ "alphatest_fragment" ],
  400. THREE.ShaderChunk[ "specularmap_fragment" ],
  401. THREE.ShaderChunk[ "roughnessmap_fragment" ],
  402. //THREE.ShaderChunk[ "reflectivitymap_fragment" ],
  403. THREE.ShaderChunk[ "metalnessmap_fragment" ],
  404. THREE.ShaderChunk[ "normal_phong_fragment" ], // use phong chunk for now
  405. THREE.ShaderChunk[ "emissivemap_fragment" ],
  406. // accumulation
  407. THREE.ShaderChunk[ "lights_standard_fragment" ],
  408. THREE.ShaderChunk[ "lights_template" ],
  409. THREE.ShaderChunk[ "lightmap_fragment" ],
  410. // modulation
  411. THREE.ShaderChunk[ "aomap_fragment" ],
  412. THREE.ShaderChunk[ "shadowmap_fragment" ],
  413. "reflectedLight.directDiffuse *= shadowMask;",
  414. "reflectedLight.directSpecular *= shadowMask;",
  415. "vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveLight;",
  416. THREE.ShaderChunk[ "linear_to_gamma_fragment" ],
  417. THREE.ShaderChunk[ "fog_fragment" ],
  418. " gl_FragColor = vec4( outgoingLight, diffuseColor.a );",
  419. "}"
  420. ].join( "\n" )
  421. },
  422. 'points': {
  423. uniforms: THREE.UniformsUtils.merge( [
  424. THREE.UniformsLib[ "points" ],
  425. THREE.UniformsLib[ "shadowmap" ]
  426. ] ),
  427. vertexShader: [
  428. "uniform float size;",
  429. "uniform float scale;",
  430. THREE.ShaderChunk[ "common" ],
  431. THREE.ShaderChunk[ "color_pars_vertex" ],
  432. THREE.ShaderChunk[ "shadowmap_pars_vertex" ],
  433. THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
  434. "void main() {",
  435. THREE.ShaderChunk[ "color_vertex" ],
  436. " vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",
  437. " #ifdef USE_SIZEATTENUATION",
  438. " gl_PointSize = size * ( scale / -mvPosition.z );",
  439. " #else",
  440. " gl_PointSize = size;",
  441. " #endif",
  442. " gl_Position = projectionMatrix * mvPosition;",
  443. THREE.ShaderChunk[ "logdepthbuf_vertex" ],
  444. THREE.ShaderChunk[ "worldpos_vertex" ],
  445. THREE.ShaderChunk[ "shadowmap_vertex" ],
  446. "}"
  447. ].join( "\n" ),
  448. fragmentShader: [
  449. "uniform vec3 psColor;",
  450. "uniform float opacity;",
  451. THREE.ShaderChunk[ "common" ],
  452. THREE.ShaderChunk[ "color_pars_fragment" ],
  453. THREE.ShaderChunk[ "map_particle_pars_fragment" ],
  454. THREE.ShaderChunk[ "fog_pars_fragment" ],
  455. THREE.ShaderChunk[ "shadowmap_pars_fragment" ],
  456. THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
  457. "void main() {",
  458. " vec3 outgoingLight = vec3( 0.0 );",
  459. " vec4 diffuseColor = vec4( psColor, opacity );",
  460. THREE.ShaderChunk[ "logdepthbuf_fragment" ],
  461. THREE.ShaderChunk[ "map_particle_fragment" ],
  462. THREE.ShaderChunk[ "color_fragment" ],
  463. THREE.ShaderChunk[ "alphatest_fragment" ],
  464. THREE.ShaderChunk[ "shadowmap_fragment" ],
  465. " outgoingLight = diffuseColor.rgb * shadowMask;",
  466. THREE.ShaderChunk[ "fog_fragment" ],
  467. " gl_FragColor = vec4( outgoingLight, diffuseColor.a );",
  468. "}"
  469. ].join( "\n" )
  470. },
  471. 'dashed': {
  472. uniforms: THREE.UniformsUtils.merge( [
  473. THREE.UniformsLib[ "common" ],
  474. THREE.UniformsLib[ "fog" ],
  475. {
  476. "scale" : { type: "f", value: 1 },
  477. "dashSize" : { type: "f", value: 1 },
  478. "totalSize": { type: "f", value: 2 }
  479. }
  480. ] ),
  481. vertexShader: [
  482. "uniform float scale;",
  483. "attribute float lineDistance;",
  484. "varying float vLineDistance;",
  485. THREE.ShaderChunk[ "common" ],
  486. THREE.ShaderChunk[ "color_pars_vertex" ],
  487. THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
  488. "void main() {",
  489. THREE.ShaderChunk[ "color_vertex" ],
  490. " vLineDistance = scale * lineDistance;",
  491. " vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",
  492. " gl_Position = projectionMatrix * mvPosition;",
  493. THREE.ShaderChunk[ "logdepthbuf_vertex" ],
  494. "}"
  495. ].join( "\n" ),
  496. fragmentShader: [
  497. "uniform vec3 diffuse;",
  498. "uniform float opacity;",
  499. "uniform float dashSize;",
  500. "uniform float totalSize;",
  501. "varying float vLineDistance;",
  502. THREE.ShaderChunk[ "common" ],
  503. THREE.ShaderChunk[ "color_pars_fragment" ],
  504. THREE.ShaderChunk[ "fog_pars_fragment" ],
  505. THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
  506. "void main() {",
  507. " if ( mod( vLineDistance, totalSize ) > dashSize ) {",
  508. " discard;",
  509. " }",
  510. " vec3 outgoingLight = vec3( 0.0 );",
  511. " vec4 diffuseColor = vec4( diffuse, opacity );",
  512. THREE.ShaderChunk[ "logdepthbuf_fragment" ],
  513. THREE.ShaderChunk[ "color_fragment" ],
  514. " outgoingLight = diffuseColor.rgb;", // simple shader
  515. THREE.ShaderChunk[ "fog_fragment" ],
  516. " gl_FragColor = vec4( outgoingLight, diffuseColor.a );",
  517. "}"
  518. ].join( "\n" )
  519. },
  520. 'depth': {
  521. uniforms: {
  522. "mNear": { type: "f", value: 1.0 },
  523. "mFar" : { type: "f", value: 2000.0 },
  524. "opacity" : { type: "f", value: 1.0 }
  525. },
  526. vertexShader: [
  527. THREE.ShaderChunk[ "common" ],
  528. THREE.ShaderChunk[ "morphtarget_pars_vertex" ],
  529. THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
  530. "void main() {",
  531. THREE.ShaderChunk[ "begin_vertex" ],
  532. THREE.ShaderChunk[ "morphtarget_vertex" ],
  533. THREE.ShaderChunk[ "project_vertex" ],
  534. THREE.ShaderChunk[ "logdepthbuf_vertex" ],
  535. "}"
  536. ].join( "\n" ),
  537. fragmentShader: [
  538. "uniform float mNear;",
  539. "uniform float mFar;",
  540. "uniform float opacity;",
  541. THREE.ShaderChunk[ "common" ],
  542. THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
  543. "void main() {",
  544. THREE.ShaderChunk[ "logdepthbuf_fragment" ],
  545. " #ifdef USE_LOGDEPTHBUF_EXT",
  546. " float depth = gl_FragDepthEXT / gl_FragCoord.w;",
  547. " #else",
  548. " float depth = gl_FragCoord.z / gl_FragCoord.w;",
  549. " #endif",
  550. " float color = 1.0 - smoothstep( mNear, mFar, depth );",
  551. " gl_FragColor = vec4( vec3( color ), opacity );",
  552. "}"
  553. ].join( "\n" )
  554. },
  555. 'normal': {
  556. uniforms: {
  557. "opacity" : { type: "f", value: 1.0 }
  558. },
  559. vertexShader: [
  560. "varying vec3 vNormal;",
  561. THREE.ShaderChunk[ "common" ],
  562. THREE.ShaderChunk[ "morphtarget_pars_vertex" ],
  563. THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
  564. "void main() {",
  565. " vNormal = normalize( normalMatrix * normal );",
  566. THREE.ShaderChunk[ "begin_vertex" ],
  567. THREE.ShaderChunk[ "morphtarget_vertex" ],
  568. THREE.ShaderChunk[ "project_vertex" ],
  569. THREE.ShaderChunk[ "logdepthbuf_vertex" ],
  570. "}"
  571. ].join( "\n" ),
  572. fragmentShader: [
  573. "uniform float opacity;",
  574. "varying vec3 vNormal;",
  575. THREE.ShaderChunk[ "common" ],
  576. THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
  577. "void main() {",
  578. " gl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );",
  579. THREE.ShaderChunk[ "logdepthbuf_fragment" ],
  580. "}"
  581. ].join( "\n" )
  582. },
  583. /* -------------------------------------------------------------------------
  584. // Cube map shader
  585. ------------------------------------------------------------------------- */
  586. 'cube': {
  587. uniforms: { "tCube": { type: "t", value: null },
  588. "tFlip": { type: "f", value: - 1 } },
  589. vertexShader: [
  590. "varying vec3 vWorldPosition;",
  591. THREE.ShaderChunk[ "common" ],
  592. THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
  593. "void main() {",
  594. " vWorldPosition = transformDirection( position, modelMatrix );",
  595. " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
  596. THREE.ShaderChunk[ "logdepthbuf_vertex" ],
  597. "}"
  598. ].join( "\n" ),
  599. fragmentShader: [
  600. "uniform samplerCube tCube;",
  601. "uniform float tFlip;",
  602. "varying vec3 vWorldPosition;",
  603. THREE.ShaderChunk[ "common" ],
  604. THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
  605. "void main() {",
  606. " gl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );",
  607. THREE.ShaderChunk[ "logdepthbuf_fragment" ],
  608. "}"
  609. ].join( "\n" )
  610. },
  611. /* -------------------------------------------------------------------------
  612. // Cube map shader
  613. ------------------------------------------------------------------------- */
  614. 'equirect': {
  615. uniforms: { "tEquirect": { type: "t", value: null },
  616. "tFlip": { type: "f", value: - 1 } },
  617. vertexShader: [
  618. "varying vec3 vWorldPosition;",
  619. THREE.ShaderChunk[ "common" ],
  620. THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
  621. "void main() {",
  622. " vWorldPosition = transformDirection( position, modelMatrix );",
  623. " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
  624. THREE.ShaderChunk[ "logdepthbuf_vertex" ],
  625. "}"
  626. ].join( "\n" ),
  627. fragmentShader: [
  628. "uniform sampler2D tEquirect;",
  629. "uniform float tFlip;",
  630. "varying vec3 vWorldPosition;",
  631. THREE.ShaderChunk[ "common" ],
  632. THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
  633. "void main() {",
  634. // " gl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );",
  635. "vec3 direction = normalize( vWorldPosition );",
  636. "vec2 sampleUV;",
  637. "sampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );",
  638. "sampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;",
  639. "gl_FragColor = texture2D( tEquirect, sampleUV );",
  640. THREE.ShaderChunk[ "logdepthbuf_fragment" ],
  641. "}"
  642. ].join( "\n" )
  643. },
  644. /* Depth encoding into RGBA texture
  645. *
  646. * based on SpiderGL shadow map example
  647. * http://spidergl.org/example.php?id=6
  648. *
  649. * originally from
  650. * http://www.gamedev.net/topic/442138-packing-a-float-into-a-a8r8g8b8-texture-shader/page__whichpage__1%25EF%25BF%25BD
  651. *
  652. * see also
  653. * http://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/
  654. */
  655. 'depthRGBA': {
  656. uniforms: {},
  657. vertexShader: [
  658. THREE.ShaderChunk[ "common" ],
  659. THREE.ShaderChunk[ "morphtarget_pars_vertex" ],
  660. THREE.ShaderChunk[ "skinning_pars_vertex" ],
  661. THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
  662. "void main() {",
  663. THREE.ShaderChunk[ "skinbase_vertex" ],
  664. THREE.ShaderChunk[ "begin_vertex" ],
  665. THREE.ShaderChunk[ "morphtarget_vertex" ],
  666. THREE.ShaderChunk[ "skinning_vertex" ],
  667. THREE.ShaderChunk[ "project_vertex" ],
  668. THREE.ShaderChunk[ "logdepthbuf_vertex" ],
  669. "}"
  670. ].join( "\n" ),
  671. fragmentShader: [
  672. THREE.ShaderChunk[ "common" ],
  673. THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
  674. "vec4 pack_depth( const in float depth ) {",
  675. " const vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );",
  676. " const vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );",
  677. " vec4 res = mod( depth * bit_shift * vec4( 255 ), vec4( 256 ) ) / vec4( 255 );", // " vec4 res = fract( depth * bit_shift );",
  678. " res -= res.xxyz * bit_mask;",
  679. " return res;",
  680. "}",
  681. "void main() {",
  682. THREE.ShaderChunk[ "logdepthbuf_fragment" ],
  683. " #ifdef USE_LOGDEPTHBUF_EXT",
  684. " gl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );",
  685. " #else",
  686. " gl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );",
  687. " #endif",
  688. //"gl_FragData[ 0 ] = pack_depth( gl_FragCoord.z / gl_FragCoord.w );",
  689. //"float z = ( ( gl_FragCoord.z / gl_FragCoord.w ) - 3.0 ) / ( 4000.0 - 3.0 );",
  690. //"gl_FragData[ 0 ] = pack_depth( z );",
  691. //"gl_FragData[ 0 ] = vec4( z, z, z, 1.0 );",
  692. "}"
  693. ].join( "\n" )
  694. },
  695. 'distanceRGBA': {
  696. uniforms: {
  697. "lightPos": { type: "v3", value: new THREE.Vector3( 0, 0, 0 ) }
  698. },
  699. vertexShader: [
  700. "varying vec4 vWorldPosition;",
  701. THREE.ShaderChunk[ "common" ],
  702. THREE.ShaderChunk[ "morphtarget_pars_vertex" ],
  703. THREE.ShaderChunk[ "skinning_pars_vertex" ],
  704. "void main() {",
  705. THREE.ShaderChunk[ "skinbase_vertex" ],
  706. THREE.ShaderChunk[ "begin_vertex" ],
  707. THREE.ShaderChunk[ "morphtarget_vertex" ],
  708. THREE.ShaderChunk[ "skinning_vertex" ],
  709. THREE.ShaderChunk[ "project_vertex" ],
  710. THREE.ShaderChunk[ "worldpos_vertex" ],
  711. "vWorldPosition = worldPosition;",
  712. "}"
  713. ].join( "\n" ),
  714. fragmentShader: [
  715. "uniform vec3 lightPos;",
  716. "varying vec4 vWorldPosition;",
  717. THREE.ShaderChunk[ "common" ],
  718. "vec4 pack1K ( float depth ) {",
  719. " depth /= 1000.0;",
  720. " const vec4 bitSh = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );",
  721. " const vec4 bitMsk = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );",
  722. " vec4 res = fract( depth * bitSh );",
  723. " res -= res.xxyz * bitMsk;",
  724. " return res; ",
  725. "}",
  726. "float unpack1K ( vec4 color ) {",
  727. " const vec4 bitSh = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );",
  728. " return dot( color, bitSh ) * 1000.0;",
  729. "}",
  730. "void main () {",
  731. " gl_FragColor = pack1K( length( vWorldPosition.xyz - lightPos.xyz ) );",
  732. "}"
  733. ].join( "\n" )
  734. }
  735. };
粤ICP备19079148号