ShaderLib.js 28 KB

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