@plastic-software/three 0.181.3 → 0.183.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (437) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +11330 -10017
  4. package/build/three.core.js +10011 -9493
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1414 -631
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +21 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +8007 -5427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +8005 -5426
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +2 -2
  16. package/examples/jsm/controls/ArcballControls.js +3 -3
  17. package/examples/jsm/controls/MapControls.js +55 -1
  18. package/examples/jsm/controls/OrbitControls.js +109 -6
  19. package/examples/jsm/controls/TrackballControls.js +6 -6
  20. package/examples/jsm/csm/CSM.js +2 -1
  21. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  22. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  23. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  24. package/examples/jsm/exporters/EXRExporter.js +1 -1
  25. package/examples/jsm/exporters/GLTFExporter.js +131 -4
  26. package/examples/jsm/exporters/USDZExporter.js +22 -3
  27. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  28. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  29. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  30. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  31. package/examples/jsm/helpers/ViewHelper.js +67 -8
  32. package/examples/jsm/inspector/Inspector.js +74 -14
  33. package/examples/jsm/inspector/RendererInspector.js +12 -2
  34. package/examples/jsm/inspector/tabs/Console.js +41 -7
  35. package/examples/jsm/inspector/tabs/Parameters.js +18 -2
  36. package/examples/jsm/inspector/tabs/Performance.js +2 -2
  37. package/examples/jsm/inspector/tabs/Viewer.js +4 -4
  38. package/examples/jsm/inspector/ui/Profiler.js +1836 -31
  39. package/examples/jsm/inspector/ui/Style.js +973 -14
  40. package/examples/jsm/inspector/ui/Tab.js +188 -1
  41. package/examples/jsm/inspector/ui/Values.js +17 -1
  42. package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
  43. package/examples/jsm/lines/LineMaterial.js +6 -0
  44. package/examples/jsm/loaders/3DMLoader.js +5 -4
  45. package/examples/jsm/loaders/3MFLoader.js +2 -2
  46. package/examples/jsm/loaders/AMFLoader.js +2 -2
  47. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  48. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  49. package/examples/jsm/loaders/EXRLoader.js +5 -5
  50. package/examples/jsm/loaders/FBXLoader.js +2 -4
  51. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  52. package/examples/jsm/loaders/GLTFLoader.js +122 -171
  53. package/examples/jsm/loaders/HDRLoader.js +0 -1
  54. package/examples/jsm/loaders/KMZLoader.js +5 -5
  55. package/examples/jsm/loaders/KTX2Loader.js +19 -3
  56. package/examples/jsm/loaders/LDrawLoader.js +2 -3
  57. package/examples/jsm/loaders/LWOLoader.js +7 -39
  58. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  59. package/examples/jsm/loaders/PCDLoader.js +4 -2
  60. package/examples/jsm/loaders/SVGLoader.js +1 -1
  61. package/examples/jsm/loaders/TDSLoader.js +0 -2
  62. package/examples/jsm/loaders/TGALoader.js +0 -2
  63. package/examples/jsm/loaders/USDLoader.js +100 -40
  64. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  65. package/examples/jsm/loaders/VOXLoader.js +660 -117
  66. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  67. package/examples/jsm/loaders/VTKLoader.js +37 -24
  68. package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
  69. package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
  70. package/examples/jsm/loaders/usd/USDAParser.js +447 -366
  71. package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
  72. package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
  73. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  74. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  75. package/examples/jsm/math/Octree.js +131 -1
  76. package/examples/jsm/misc/Volume.js +0 -1
  77. package/examples/jsm/misc/VolumeSlice.js +0 -1
  78. package/examples/jsm/objects/LensflareMesh.js +1 -1
  79. package/examples/jsm/objects/Sky.js +76 -4
  80. package/examples/jsm/objects/SkyMesh.js +127 -10
  81. package/examples/jsm/objects/Water.js +4 -3
  82. package/examples/jsm/objects/Water2.js +5 -3
  83. package/examples/jsm/objects/WaterMesh.js +5 -7
  84. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  85. package/examples/jsm/physics/JoltPhysics.js +10 -6
  86. package/examples/jsm/physics/RapierPhysics.js +9 -5
  87. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  88. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  89. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  90. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  91. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  92. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  93. package/examples/jsm/renderers/Projector.js +268 -30
  94. package/examples/jsm/renderers/SVGRenderer.js +193 -60
  95. package/examples/jsm/shaders/GTAOShader.js +19 -6
  96. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  97. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  98. package/examples/jsm/shaders/SAOShader.js +17 -4
  99. package/examples/jsm/shaders/SSAOShader.js +11 -1
  100. package/examples/jsm/shaders/SSRShader.js +6 -5
  101. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  102. package/examples/jsm/shaders/VignetteShader.js +1 -1
  103. package/examples/jsm/transpiler/AST.js +44 -0
  104. package/examples/jsm/transpiler/GLSLDecoder.js +61 -4
  105. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  106. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  107. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  108. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  109. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  110. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  111. package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
  112. package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
  113. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  114. package/examples/jsm/tsl/display/CRT.js +150 -0
  115. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  116. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  117. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  118. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  119. package/examples/jsm/tsl/display/GTAONode.js +5 -4
  120. package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
  121. package/examples/jsm/tsl/display/GodraysNode.js +624 -0
  122. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  123. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  124. package/examples/jsm/tsl/display/OutlineNode.js +3 -3
  125. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  126. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  127. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  128. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  129. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  130. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  131. package/examples/jsm/tsl/display/SSGINode.js +8 -20
  132. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  133. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  134. package/examples/jsm/tsl/display/Shape.js +29 -0
  135. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  136. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  137. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  138. package/examples/jsm/tsl/display/TRAANode.js +273 -125
  139. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  140. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  141. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  142. package/examples/jsm/tsl/math/Bayer.js +40 -1
  143. package/examples/jsm/utils/LDrawUtils.js +1 -1
  144. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  145. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  146. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  147. package/package.json +20 -26
  148. package/src/Three.Core.js +2 -1
  149. package/src/Three.TSL.js +19 -11
  150. package/src/Three.WebGPU.Nodes.js +2 -0
  151. package/src/Three.WebGPU.js +3 -0
  152. package/src/Three.js +1 -0
  153. package/src/animation/AnimationAction.js +1 -1
  154. package/src/animation/AnimationClip.js +1 -1
  155. package/src/animation/AnimationMixer.js +6 -0
  156. package/src/animation/AnimationUtils.js +1 -12
  157. package/src/animation/KeyframeTrack.js +47 -8
  158. package/src/animation/PropertyMixer.js +4 -4
  159. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  160. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  161. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  162. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  163. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  164. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  165. package/src/audio/Audio.js +1 -1
  166. package/src/audio/AudioListener.js +5 -3
  167. package/src/cameras/Camera.js +32 -2
  168. package/src/cameras/CubeCamera.js +20 -0
  169. package/src/constants.js +90 -5
  170. package/src/core/BufferGeometry.js +14 -2
  171. package/src/core/Clock.js +7 -0
  172. package/src/core/Object3D.js +56 -4
  173. package/src/core/Raycaster.js +2 -2
  174. package/src/core/RenderTarget.js +3 -4
  175. package/src/extras/PMREMGenerator.js +7 -18
  176. package/src/extras/TextureUtils.js +5 -1
  177. package/src/geometries/ExtrudeGeometry.js +2 -2
  178. package/src/geometries/PolyhedronGeometry.js +1 -1
  179. package/src/geometries/TorusGeometry.js +8 -3
  180. package/src/helpers/CameraHelper.js +3 -0
  181. package/src/helpers/DirectionalLightHelper.js +4 -1
  182. package/src/helpers/HemisphereLightHelper.js +3 -0
  183. package/src/helpers/PointLightHelper.js +1 -25
  184. package/src/helpers/SpotLightHelper.js +3 -0
  185. package/src/lights/DirectionalLight.js +13 -0
  186. package/src/lights/HemisphereLight.js +10 -0
  187. package/src/lights/Light.js +1 -11
  188. package/src/lights/LightProbe.js +0 -15
  189. package/src/lights/LightShadow.js +15 -6
  190. package/src/lights/PointLight.js +15 -0
  191. package/src/lights/PointLightShadow.js +0 -86
  192. package/src/lights/SpotLight.js +22 -1
  193. package/src/lights/webgpu/IESSpotLight.js +2 -1
  194. package/src/loaders/Cache.js +28 -0
  195. package/src/loaders/FileLoader.js +1 -1
  196. package/src/loaders/ImageBitmapLoader.js +8 -3
  197. package/src/loaders/Loader.js +6 -0
  198. package/src/loaders/MaterialLoader.js +2 -1
  199. package/src/loaders/ObjectLoader.js +21 -2
  200. package/src/loaders/nodes/NodeLoader.js +2 -2
  201. package/src/materials/Material.js +2 -0
  202. package/src/materials/MeshLambertMaterial.js +9 -0
  203. package/src/materials/MeshPhongMaterial.js +9 -0
  204. package/src/materials/ShaderMaterial.js +20 -1
  205. package/src/materials/nodes/Line2NodeMaterial.js +7 -7
  206. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  207. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  208. package/src/materials/nodes/NodeMaterial.js +72 -25
  209. package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
  210. package/src/math/Line3.js +3 -5
  211. package/src/math/MathUtils.js +10 -10
  212. package/src/math/Matrix4.js +74 -65
  213. package/src/math/Quaternion.js +3 -29
  214. package/src/math/Sphere.js +1 -1
  215. package/src/math/Vector3.js +3 -5
  216. package/src/math/interpolants/BezierInterpolant.js +108 -0
  217. package/src/nodes/Nodes.js +87 -68
  218. package/src/nodes/TSL.js +6 -6
  219. package/src/nodes/accessors/Arrays.js +1 -1
  220. package/src/nodes/accessors/BatchNode.js +10 -10
  221. package/src/nodes/accessors/Bitangent.js +5 -5
  222. package/src/nodes/accessors/BufferAttributeNode.js +98 -12
  223. package/src/nodes/accessors/BufferNode.js +29 -2
  224. package/src/nodes/accessors/Camera.js +149 -28
  225. package/src/nodes/accessors/ClippingNode.js +4 -4
  226. package/src/nodes/accessors/CubeTextureNode.js +20 -1
  227. package/src/nodes/accessors/InstanceNode.js +148 -43
  228. package/src/nodes/accessors/MaterialNode.js +9 -1
  229. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  230. package/src/nodes/accessors/ModelNode.js +1 -1
  231. package/src/nodes/accessors/Normal.js +11 -11
  232. package/src/nodes/accessors/Position.js +34 -2
  233. package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
  234. package/src/nodes/accessors/ReferenceNode.js +4 -4
  235. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  236. package/src/nodes/accessors/SceneProperties.js +53 -0
  237. package/src/nodes/accessors/SkinningNode.js +27 -26
  238. package/src/nodes/accessors/StorageBufferNode.js +4 -21
  239. package/src/nodes/accessors/StorageTextureNode.js +37 -1
  240. package/src/nodes/accessors/Tangent.js +4 -14
  241. package/src/nodes/accessors/Texture3DNode.js +32 -35
  242. package/src/nodes/accessors/TextureNode.js +58 -22
  243. package/src/nodes/accessors/UniformArrayNode.js +4 -2
  244. package/src/nodes/accessors/UserDataNode.js +1 -2
  245. package/src/nodes/accessors/VertexColorNode.js +1 -2
  246. package/src/nodes/code/FunctionNode.js +1 -2
  247. package/src/nodes/core/ArrayNode.js +20 -1
  248. package/src/nodes/core/AssignNode.js +2 -2
  249. package/src/nodes/core/AttributeNode.js +2 -2
  250. package/src/nodes/core/ContextNode.js +103 -4
  251. package/src/nodes/core/MRTNode.js +48 -2
  252. package/src/nodes/core/Node.js +29 -3
  253. package/src/nodes/core/NodeBuilder.js +170 -53
  254. package/src/nodes/core/NodeError.js +28 -0
  255. package/src/nodes/core/NodeFrame.js +12 -4
  256. package/src/nodes/core/NodeUtils.js +10 -8
  257. package/src/nodes/core/OutputStructNode.js +12 -10
  258. package/src/nodes/core/ParameterNode.js +3 -3
  259. package/src/nodes/core/PropertyNode.js +19 -3
  260. package/src/nodes/core/StackNode.js +65 -16
  261. package/src/nodes/core/StackTrace.js +139 -0
  262. package/src/nodes/core/StructNode.js +16 -2
  263. package/src/nodes/core/StructTypeNode.js +11 -17
  264. package/src/nodes/core/SubBuildNode.js +1 -1
  265. package/src/nodes/core/UniformNode.js +21 -5
  266. package/src/nodes/core/VarNode.js +47 -22
  267. package/src/nodes/core/VaryingNode.js +1 -18
  268. package/src/nodes/display/BlendModes.js +0 -64
  269. package/src/nodes/display/ColorAdjustment.js +17 -0
  270. package/src/nodes/display/ColorSpaceNode.js +3 -3
  271. package/src/nodes/display/NormalMapNode.js +39 -4
  272. package/src/nodes/display/PassNode.js +98 -9
  273. package/src/nodes/display/RenderOutputNode.js +3 -3
  274. package/src/nodes/display/ScreenNode.js +3 -1
  275. package/src/nodes/display/ToneMappingNode.js +1 -1
  276. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  277. package/src/nodes/display/ViewportDepthNode.js +52 -4
  278. package/src/nodes/display/ViewportTextureNode.js +21 -4
  279. package/src/nodes/fog/Fog.js +18 -35
  280. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  281. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  282. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  283. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
  284. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  285. package/src/nodes/geometry/RangeNode.js +4 -2
  286. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
  287. package/src/nodes/gpgpu/ComputeNode.js +5 -4
  288. package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
  289. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  290. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  291. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  292. package/src/nodes/lighting/LightsNode.js +2 -2
  293. package/src/nodes/lighting/PointShadowNode.js +162 -149
  294. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  295. package/src/nodes/lighting/ShadowNode.js +97 -41
  296. package/src/nodes/math/BitcountNode.js +433 -0
  297. package/src/nodes/math/ConditionalNode.js +2 -2
  298. package/src/nodes/math/MathNode.js +3 -40
  299. package/src/nodes/math/OperatorNode.js +2 -1
  300. package/src/nodes/math/PackFloatNode.js +98 -0
  301. package/src/nodes/math/UnpackFloatNode.js +96 -0
  302. package/src/nodes/pmrem/PMREMNode.js +1 -1
  303. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  304. package/src/nodes/tsl/TSLCore.js +17 -14
  305. package/src/nodes/utils/ArrayElementNode.js +13 -0
  306. package/src/nodes/utils/DebugNode.js +11 -11
  307. package/src/nodes/utils/EventNode.js +1 -2
  308. package/src/nodes/utils/JoinNode.js +2 -2
  309. package/src/nodes/utils/LoopNode.js +1 -1
  310. package/src/nodes/utils/MemberNode.js +1 -1
  311. package/src/nodes/utils/Packing.js +13 -1
  312. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  313. package/src/nodes/utils/RTTNode.js +1 -1
  314. package/src/nodes/utils/ReflectorNode.js +3 -4
  315. package/src/nodes/utils/SampleNode.js +1 -1
  316. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  317. package/src/nodes/utils/UVUtils.js +28 -0
  318. package/src/objects/BatchedMesh.js +27 -14
  319. package/src/objects/InstancedMesh.js +11 -0
  320. package/src/objects/Line.js +1 -1
  321. package/src/objects/Mesh.js +1 -1
  322. package/src/objects/Points.js +1 -1
  323. package/src/objects/Skeleton.js +9 -0
  324. package/src/renderers/WebGLRenderer.js +178 -92
  325. package/src/renderers/common/Backend.js +29 -0
  326. package/src/renderers/common/Background.js +24 -11
  327. package/src/renderers/common/BindGroup.js +1 -9
  328. package/src/renderers/common/Binding.js +11 -0
  329. package/src/renderers/common/Bindings.js +27 -12
  330. package/src/renderers/common/BlendMode.js +143 -0
  331. package/src/renderers/common/Buffer.js +40 -0
  332. package/src/renderers/common/BundleGroup.js +1 -1
  333. package/src/renderers/common/ChainMap.js +30 -6
  334. package/src/renderers/common/CubeRenderTarget.js +50 -6
  335. package/src/renderers/common/Geometries.js +29 -3
  336. package/src/renderers/common/Lighting.js +5 -21
  337. package/src/renderers/common/Pipelines.js +4 -4
  338. package/src/renderers/common/PostProcessing.js +8 -206
  339. package/src/renderers/common/RenderBundles.js +2 -1
  340. package/src/renderers/common/RenderContext.js +16 -0
  341. package/src/renderers/common/RenderContexts.js +33 -49
  342. package/src/renderers/common/RenderLists.js +2 -1
  343. package/src/renderers/common/RenderObject.js +15 -3
  344. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  345. package/src/renderers/common/RenderObjects.js +18 -2
  346. package/src/renderers/common/RenderPipeline.js +203 -17
  347. package/src/renderers/common/Renderer.js +257 -72
  348. package/src/renderers/common/Sampler.js +4 -4
  349. package/src/renderers/common/StorageBuffer.js +13 -1
  350. package/src/renderers/common/Textures.js +17 -1
  351. package/src/renderers/common/TimestampQueryPool.js +5 -3
  352. package/src/renderers/common/Uniform.js +8 -0
  353. package/src/renderers/common/UniformsGroup.js +61 -0
  354. package/src/renderers/common/XRManager.js +3 -2
  355. package/src/renderers/common/extras/PMREMGenerator.js +2 -8
  356. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  357. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
  358. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  359. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  360. package/src/renderers/shaders/DFGLUTData.js +19 -34
  361. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  362. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  363. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  364. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  365. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  366. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
  367. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  369. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  370. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  371. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
  372. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  373. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  374. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  375. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  376. package/src/renderers/shaders/ShaderChunk.js +3 -3
  377. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  378. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  379. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  380. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  381. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  382. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  383. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  384. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  386. package/src/renderers/shaders/ShaderLib.js +7 -5
  387. package/src/renderers/shaders/UniformsLib.js +0 -3
  388. package/src/renderers/webgl/WebGLBackground.js +2 -2
  389. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  390. package/src/renderers/webgl/WebGLCapabilities.js +3 -4
  391. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  392. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  393. package/src/renderers/webgl/WebGLLights.js +18 -1
  394. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  395. package/src/renderers/webgl/WebGLObjects.js +3 -1
  396. package/src/renderers/webgl/WebGLOutput.js +267 -0
  397. package/src/renderers/webgl/WebGLProgram.js +45 -109
  398. package/src/renderers/webgl/WebGLPrograms.js +45 -49
  399. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  400. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  401. package/src/renderers/webgl/WebGLState.js +32 -37
  402. package/src/renderers/webgl/WebGLTextures.js +89 -28
  403. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  404. package/src/renderers/webgl/WebGLUtils.js +6 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
  407. package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
  408. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
  409. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
  410. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  411. package/src/renderers/webgpu/WebGPUBackend.js +119 -13
  412. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  413. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
  414. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
  415. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  416. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -0
  417. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  418. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  419. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +65 -42
  420. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  421. package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
  422. package/src/renderers/webxr/WebXRManager.js +2 -2
  423. package/src/textures/CubeDepthTexture.js +76 -0
  424. package/src/textures/Source.js +1 -1
  425. package/src/textures/Texture.js +3 -3
  426. package/src/utils.js +258 -3
  427. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  428. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  429. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  430. package/src/nodes/accessors/SceneNode.js +0 -145
  431. package/src/nodes/code/ScriptableNode.js +0 -726
  432. package/src/nodes/code/ScriptableValueNode.js +0 -253
  433. package/src/nodes/display/PosterizeNode.js +0 -65
  434. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  435. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  436. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  437. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -47,6 +47,12 @@ function WebGLMaterials( renderer, properties ) {
47
47
 
48
48
  refreshUniformsCommon( uniforms, material );
49
49
 
50
+ if ( material.envMap ) {
51
+
52
+ uniforms.envMapIntensity.value = material.envMapIntensity;
53
+
54
+ }
55
+
50
56
  } else if ( material.isMeshToonMaterial ) {
51
57
 
52
58
  refreshUniformsCommon( uniforms, material );
@@ -57,6 +63,12 @@ function WebGLMaterials( renderer, properties ) {
57
63
  refreshUniformsCommon( uniforms, material );
58
64
  refreshUniformsPhong( uniforms, material );
59
65
 
66
+ if ( material.envMap ) {
67
+
68
+ uniforms.envMapIntensity.value = material.envMapIntensity;
69
+
70
+ }
71
+
60
72
  } else if ( material.isMeshStandardMaterial ) {
61
73
 
62
74
  refreshUniformsCommon( uniforms, material );
@@ -1,4 +1,4 @@
1
- function WebGLObjects( gl, geometries, attributes, info ) {
1
+ function WebGLObjects( gl, geometries, attributes, bindingStates, info ) {
2
2
 
3
3
  let updateMap = new WeakMap();
4
4
 
@@ -73,6 +73,8 @@ function WebGLObjects( gl, geometries, attributes, info ) {
73
73
 
74
74
  instancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );
75
75
 
76
+ bindingStates.releaseStatesOfObject( instancedMesh );
77
+
76
78
  attributes.remove( instancedMesh.instanceMatrix );
77
79
 
78
80
  if ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );
@@ -0,0 +1,267 @@
1
+ import {
2
+ NoToneMapping,
3
+ LinearToneMapping,
4
+ ReinhardToneMapping,
5
+ CineonToneMapping,
6
+ ACESFilmicToneMapping,
7
+ AgXToneMapping,
8
+ NeutralToneMapping,
9
+ CustomToneMapping,
10
+ SRGBTransfer,
11
+ HalfFloatType
12
+ } from '../../constants.js';
13
+ import { BufferGeometry } from '../../core/BufferGeometry.js';
14
+ import { Float32BufferAttribute } from '../../core/BufferAttribute.js';
15
+ import { RawShaderMaterial } from '../../materials/RawShaderMaterial.js';
16
+ import { Mesh } from '../../objects/Mesh.js';
17
+ import { OrthographicCamera } from '../../cameras/OrthographicCamera.js';
18
+ import { WebGLRenderTarget } from '../WebGLRenderTarget.js';
19
+ import { ColorManagement } from '../../math/ColorManagement.js';
20
+
21
+ const toneMappingMap = {
22
+ [ LinearToneMapping ]: 'LINEAR_TONE_MAPPING',
23
+ [ ReinhardToneMapping ]: 'REINHARD_TONE_MAPPING',
24
+ [ CineonToneMapping ]: 'CINEON_TONE_MAPPING',
25
+ [ ACESFilmicToneMapping ]: 'ACES_FILMIC_TONE_MAPPING',
26
+ [ AgXToneMapping ]: 'AGX_TONE_MAPPING',
27
+ [ NeutralToneMapping ]: 'NEUTRAL_TONE_MAPPING',
28
+ [ CustomToneMapping ]: 'CUSTOM_TONE_MAPPING'
29
+ };
30
+
31
+ function WebGLOutput( type, width, height, depth, stencil ) {
32
+
33
+ // render targets for scene and post-processing
34
+ const targetA = new WebGLRenderTarget( width, height, {
35
+ type: type,
36
+ depthBuffer: depth,
37
+ stencilBuffer: stencil
38
+ } );
39
+
40
+ const targetB = new WebGLRenderTarget( width, height, {
41
+ type: HalfFloatType,
42
+ depthBuffer: false,
43
+ stencilBuffer: false
44
+ } );
45
+
46
+ // create fullscreen triangle geometry
47
+ const geometry = new BufferGeometry();
48
+ geometry.setAttribute( 'position', new Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );
49
+ geometry.setAttribute( 'uv', new Float32BufferAttribute( [ 0, 2, 0, 0, 2, 0 ], 2 ) );
50
+
51
+ // create output material with tone mapping support
52
+ const material = new RawShaderMaterial( {
53
+ uniforms: {
54
+ tDiffuse: { value: null }
55
+ },
56
+ vertexShader: /* glsl */`
57
+ precision highp float;
58
+
59
+ uniform mat4 modelViewMatrix;
60
+ uniform mat4 projectionMatrix;
61
+
62
+ attribute vec3 position;
63
+ attribute vec2 uv;
64
+
65
+ varying vec2 vUv;
66
+
67
+ void main() {
68
+ vUv = uv;
69
+ gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
70
+ }`,
71
+ fragmentShader: /* glsl */`
72
+ precision highp float;
73
+
74
+ uniform sampler2D tDiffuse;
75
+
76
+ varying vec2 vUv;
77
+
78
+ #include <tonemapping_pars_fragment>
79
+ #include <colorspace_pars_fragment>
80
+
81
+ void main() {
82
+ gl_FragColor = texture2D( tDiffuse, vUv );
83
+
84
+ #ifdef LINEAR_TONE_MAPPING
85
+ gl_FragColor.rgb = LinearToneMapping( gl_FragColor.rgb );
86
+ #elif defined( REINHARD_TONE_MAPPING )
87
+ gl_FragColor.rgb = ReinhardToneMapping( gl_FragColor.rgb );
88
+ #elif defined( CINEON_TONE_MAPPING )
89
+ gl_FragColor.rgb = CineonToneMapping( gl_FragColor.rgb );
90
+ #elif defined( ACES_FILMIC_TONE_MAPPING )
91
+ gl_FragColor.rgb = ACESFilmicToneMapping( gl_FragColor.rgb );
92
+ #elif defined( AGX_TONE_MAPPING )
93
+ gl_FragColor.rgb = AgXToneMapping( gl_FragColor.rgb );
94
+ #elif defined( NEUTRAL_TONE_MAPPING )
95
+ gl_FragColor.rgb = NeutralToneMapping( gl_FragColor.rgb );
96
+ #elif defined( CUSTOM_TONE_MAPPING )
97
+ gl_FragColor.rgb = CustomToneMapping( gl_FragColor.rgb );
98
+ #endif
99
+
100
+ #ifdef SRGB_TRANSFER
101
+ gl_FragColor = sRGBTransferOETF( gl_FragColor );
102
+ #endif
103
+ }`,
104
+ depthTest: false,
105
+ depthWrite: false
106
+ } );
107
+
108
+ const mesh = new Mesh( geometry, material );
109
+ const camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
110
+
111
+ let _outputColorSpace = null;
112
+ let _outputToneMapping = null;
113
+ let _isCompositing = false;
114
+ let _savedToneMapping;
115
+ let _savedRenderTarget = null;
116
+ let _effects = [];
117
+ let _hasRenderPass = false;
118
+
119
+ this.setSize = function ( width, height ) {
120
+
121
+ targetA.setSize( width, height );
122
+ targetB.setSize( width, height );
123
+
124
+ for ( let i = 0; i < _effects.length; i ++ ) {
125
+
126
+ const effect = _effects[ i ];
127
+ if ( effect.setSize ) effect.setSize( width, height );
128
+
129
+ }
130
+
131
+ };
132
+
133
+ this.setEffects = function ( effects ) {
134
+
135
+ _effects = effects;
136
+ _hasRenderPass = _effects.length > 0 && _effects[ 0 ].isRenderPass === true;
137
+
138
+ const width = targetA.width;
139
+ const height = targetA.height;
140
+
141
+ for ( let i = 0; i < _effects.length; i ++ ) {
142
+
143
+ const effect = _effects[ i ];
144
+ if ( effect.setSize ) effect.setSize( width, height );
145
+
146
+ }
147
+
148
+ };
149
+
150
+ this.begin = function ( renderer, renderTarget ) {
151
+
152
+ // Don't begin during compositing phase (post-processing effects call render())
153
+ if ( _isCompositing ) return false;
154
+
155
+ if ( renderer.toneMapping === NoToneMapping && _effects.length === 0 ) return false;
156
+
157
+ _savedRenderTarget = renderTarget;
158
+
159
+ // resize internal buffers to match render target (e.g. XR resolution)
160
+ if ( renderTarget !== null ) {
161
+
162
+ const width = renderTarget.width;
163
+ const height = renderTarget.height;
164
+
165
+ if ( targetA.width !== width || targetA.height !== height ) {
166
+
167
+ this.setSize( width, height );
168
+
169
+ }
170
+
171
+ }
172
+
173
+ // if first effect is a RenderPass, it will set its own render target
174
+ if ( _hasRenderPass === false ) {
175
+
176
+ renderer.setRenderTarget( targetA );
177
+
178
+ }
179
+
180
+ // disable tone mapping during render - it will be applied in end()
181
+ _savedToneMapping = renderer.toneMapping;
182
+ renderer.toneMapping = NoToneMapping;
183
+
184
+ return true;
185
+
186
+ };
187
+
188
+ this.hasRenderPass = function () {
189
+
190
+ return _hasRenderPass;
191
+
192
+ };
193
+
194
+ this.end = function ( renderer, deltaTime ) {
195
+
196
+ // restore tone mapping
197
+ renderer.toneMapping = _savedToneMapping;
198
+
199
+ _isCompositing = true;
200
+
201
+ // run post-processing effects
202
+ let readBuffer = targetA;
203
+ let writeBuffer = targetB;
204
+
205
+ for ( let i = 0; i < _effects.length; i ++ ) {
206
+
207
+ const effect = _effects[ i ];
208
+
209
+ if ( effect.enabled === false ) continue;
210
+
211
+ effect.render( renderer, writeBuffer, readBuffer, deltaTime );
212
+
213
+ if ( effect.needsSwap !== false ) {
214
+
215
+ const temp = readBuffer;
216
+ readBuffer = writeBuffer;
217
+ writeBuffer = temp;
218
+
219
+ }
220
+
221
+ }
222
+
223
+ // update output material defines if settings changed
224
+ if ( _outputColorSpace !== renderer.outputColorSpace || _outputToneMapping !== renderer.toneMapping ) {
225
+
226
+ _outputColorSpace = renderer.outputColorSpace;
227
+ _outputToneMapping = renderer.toneMapping;
228
+
229
+ material.defines = {};
230
+
231
+ if ( ColorManagement.getTransfer( _outputColorSpace ) === SRGBTransfer ) material.defines.SRGB_TRANSFER = '';
232
+
233
+ const toneMapping = toneMappingMap[ _outputToneMapping ];
234
+ if ( toneMapping ) material.defines[ toneMapping ] = '';
235
+
236
+ material.needsUpdate = true;
237
+
238
+ }
239
+
240
+ // final output to canvas (or XR render target)
241
+ material.uniforms.tDiffuse.value = readBuffer.texture;
242
+ renderer.setRenderTarget( _savedRenderTarget );
243
+ renderer.render( mesh, camera );
244
+
245
+ _savedRenderTarget = null;
246
+ _isCompositing = false;
247
+
248
+ };
249
+
250
+ this.isCompositing = function () {
251
+
252
+ return _isCompositing;
253
+
254
+ };
255
+
256
+ this.dispose = function () {
257
+
258
+ targetA.dispose();
259
+ targetB.dispose();
260
+ geometry.dispose();
261
+ material.dispose();
262
+
263
+ };
264
+
265
+ }
266
+
267
+ export { WebGLOutput };
@@ -1,7 +1,7 @@
1
1
  import { WebGLUniforms } from './WebGLUniforms.js';
2
2
  import { WebGLShader } from './WebGLShader.js';
3
3
  import { ShaderChunk } from '../shaders/ShaderChunk.js';
4
- import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, AgXToneMapping, ACESFilmicToneMapping, NeutralToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearTransfer, SRGBTransfer, TriPlanarMapping, CylindricalMapping, UVMapping } from '../../constants.js';
4
+ import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFShadowMap, VSMShadowMap, AgXToneMapping, ACESFilmicToneMapping, NeutralToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearTransfer, SRGBTransfer, TriPlanarMapping, UVMapping, CylindricalMapping } from '../../constants.js';
5
5
  import { ColorManagement } from '../../math/ColorManagement.js';
6
6
  import { Vector3 } from '../../math/Vector3.js';
7
7
  import { Matrix3 } from '../../math/Matrix3.js';
@@ -97,43 +97,24 @@ function getTexelEncodingFunction( functionName, colorSpace ) {
97
97
 
98
98
  }
99
99
 
100
- function getToneMappingFunction( functionName, toneMapping ) {
101
-
102
- let toneMappingName;
103
-
104
- switch ( toneMapping ) {
105
-
106
- case LinearToneMapping:
107
- toneMappingName = 'Linear';
108
- break;
109
-
110
- case ReinhardToneMapping:
111
- toneMappingName = 'Reinhard';
112
- break;
113
-
114
- case CineonToneMapping:
115
- toneMappingName = 'Cineon';
116
- break;
100
+ const toneMappingFunctions = {
101
+ [ LinearToneMapping ]: 'Linear',
102
+ [ ReinhardToneMapping ]: 'Reinhard',
103
+ [ CineonToneMapping ]: 'Cineon',
104
+ [ ACESFilmicToneMapping ]: 'ACESFilmic',
105
+ [ AgXToneMapping ]: 'AgX',
106
+ [ NeutralToneMapping ]: 'Neutral',
107
+ [ CustomToneMapping ]: 'Custom'
108
+ };
117
109
 
118
- case ACESFilmicToneMapping:
119
- toneMappingName = 'ACESFilmic';
120
- break;
121
-
122
- case AgXToneMapping:
123
- toneMappingName = 'AgX';
124
- break;
110
+ function getToneMappingFunction( functionName, toneMapping ) {
125
111
 
126
- case NeutralToneMapping:
127
- toneMappingName = 'Neutral';
128
- break;
112
+ const toneMappingName = toneMappingFunctions[ toneMapping ];
129
113
 
130
- case CustomToneMapping:
131
- toneMappingName = 'Custom';
132
- break;
114
+ if ( toneMappingName === undefined ) {
133
115
 
134
- default:
135
- warn( 'WebGLProgram: Unsupported toneMapping:', toneMapping );
136
- toneMappingName = 'Linear';
116
+ warn( 'WebGLProgram: Unsupported toneMapping:', toneMapping );
117
+ return 'vec3 ' + functionName + '( vec3 color ) { return LinearToneMapping( color ); }';
137
118
 
138
119
  }
139
120
 
@@ -361,99 +342,54 @@ function generatePrecision( parameters ) {
361
342
 
362
343
  }
363
344
 
364
- function generateShadowMapTypeDefine( parameters ) {
365
-
366
- let shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';
367
-
368
- if ( parameters.shadowMapType === PCFShadowMap ) {
345
+ const shadowMapTypeDefines = {
346
+ [ PCFShadowMap ]: 'SHADOWMAP_TYPE_PCF',
347
+ [ VSMShadowMap ]: 'SHADOWMAP_TYPE_VSM'
348
+ };
369
349
 
370
- shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';
371
-
372
- } else if ( parameters.shadowMapType === PCFSoftShadowMap ) {
373
-
374
- shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';
375
-
376
- } else if ( parameters.shadowMapType === VSMShadowMap ) {
377
-
378
- shadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';
379
-
380
- }
350
+ function generateShadowMapTypeDefine( parameters ) {
381
351
 
382
- return shadowMapTypeDefine;
352
+ return shadowMapTypeDefines[ parameters.shadowMapType ] || 'SHADOWMAP_TYPE_BASIC';
383
353
 
384
354
  }
385
355
 
386
- function generateEnvMapTypeDefine( parameters ) {
387
-
388
- let envMapTypeDefine = 'ENVMAP_TYPE_CUBE';
389
-
390
- if ( parameters.envMap ) {
391
-
392
- switch ( parameters.envMapMode ) {
393
-
394
- case CubeReflectionMapping:
395
- case CubeRefractionMapping:
396
- envMapTypeDefine = 'ENVMAP_TYPE_CUBE';
397
- break;
356
+ const envMapTypeDefines = {
357
+ [ CubeReflectionMapping ]: 'ENVMAP_TYPE_CUBE',
358
+ [ CubeRefractionMapping ]: 'ENVMAP_TYPE_CUBE',
359
+ [ CubeUVReflectionMapping ]: 'ENVMAP_TYPE_CUBE_UV'
360
+ };
398
361
 
399
- case CubeUVReflectionMapping:
400
- envMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';
401
- break;
402
-
403
- }
362
+ function generateEnvMapTypeDefine( parameters ) {
404
363
 
405
- }
364
+ if ( parameters.envMap === false ) return 'ENVMAP_TYPE_CUBE';
406
365
 
407
- return envMapTypeDefine;
366
+ return envMapTypeDefines[ parameters.envMapMode ] || 'ENVMAP_TYPE_CUBE';
408
367
 
409
368
  }
410
369
 
411
- function generateEnvMapModeDefine( parameters ) {
412
-
413
- let envMapModeDefine = 'ENVMAP_MODE_REFLECTION';
370
+ const envMapModeDefines = {
371
+ [ CubeRefractionMapping ]: 'ENVMAP_MODE_REFRACTION'
372
+ };
414
373
 
415
- if ( parameters.envMap ) {
416
-
417
- switch ( parameters.envMapMode ) {
418
-
419
- case CubeRefractionMapping:
420
-
421
- envMapModeDefine = 'ENVMAP_MODE_REFRACTION';
422
- break;
423
-
424
- }
374
+ function generateEnvMapModeDefine( parameters ) {
425
375
 
426
- }
376
+ if ( parameters.envMap === false ) return 'ENVMAP_MODE_REFLECTION';
427
377
 
428
- return envMapModeDefine;
378
+ return envMapModeDefines[ parameters.envMapMode ] || 'ENVMAP_MODE_REFLECTION';
429
379
 
430
380
  }
431
381
 
432
- function generateEnvMapBlendingDefine( parameters ) {
433
-
434
- let envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';
435
-
436
- if ( parameters.envMap ) {
437
-
438
- switch ( parameters.combine ) {
439
-
440
- case MultiplyOperation:
441
- envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';
442
- break;
382
+ const envMapBlendingDefines = {
383
+ [ MultiplyOperation ]: 'ENVMAP_BLENDING_MULTIPLY',
384
+ [ MixOperation ]: 'ENVMAP_BLENDING_MIX',
385
+ [ AddOperation ]: 'ENVMAP_BLENDING_ADD'
386
+ };
443
387
 
444
- case MixOperation:
445
- envMapBlendingDefine = 'ENVMAP_BLENDING_MIX';
446
- break;
447
-
448
- case AddOperation:
449
- envMapBlendingDefine = 'ENVMAP_BLENDING_ADD';
450
- break;
451
-
452
- }
388
+ function generateEnvMapBlendingDefine( parameters ) {
453
389
 
454
- }
390
+ if ( parameters.envMap === false ) return 'ENVMAP_BLENDING_NONE';
455
391
 
456
- return envMapBlendingDefine;
392
+ return envMapBlendingDefines[ parameters.combine ] || 'ENVMAP_BLENDING_NONE';
457
393
 
458
394
  }
459
395
 
@@ -815,8 +751,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
815
751
  parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',
816
752
 
817
753
  parameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',
818
- parameters.vertexColors || parameters.instancingColor || parameters.batchingColor ? '#define USE_COLOR' : '',
819
- parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',
754
+ parameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',
755
+ parameters.vertexAlphas || parameters.batchingColor ? '#define USE_COLOR_ALPHA' : '',
820
756
  parameters.vertexUv1s ? '#define USE_UV1' : '',
821
757
  parameters.vertexUv2s ? '#define USE_UV2' : '',
822
758
  parameters.vertexUv3s ? '#define USE_UV3' : '',