@plastic-software/three 0.174.0 → 0.175.1

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 (567) hide show
  1. package/build/three.cjs +10744 -1476
  2. package/build/three.core.js +9633 -1096
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +918 -189
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +4 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2658 -1697
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2654 -1709
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +93 -39
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +171 -48
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +71 -29
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +41 -3
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +35 -0
  94. package/examples/jsm/loaders/DDSLoader.js +24 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +42 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +218 -5
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +86 -18
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +38 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +81 -61
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +79 -2
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +108 -72
  162. package/examples/jsm/misc/VolumeSlice.js +88 -45
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +70 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +131 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +266 -133
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/Transpiler.js +31 -0
  273. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  274. package/examples/jsm/tsl/display/BloomNode.js +1 -1
  275. package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
  276. package/examples/jsm/tsl/display/SSRNode.js +1 -1
  277. package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
  278. package/examples/jsm/tsl/math/Bayer.js +14 -1
  279. package/examples/jsm/tsl/utils/Raymarching.js +4 -2
  280. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  281. package/examples/jsm/utils/CameraUtils.js +10 -7
  282. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  283. package/examples/jsm/utils/GeometryUtils.js +12 -13
  284. package/examples/jsm/utils/LDrawUtils.js +11 -4
  285. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  286. package/examples/jsm/utils/SceneUtils.js +50 -3
  287. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  288. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  289. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  290. package/examples/jsm/utils/SortUtils.js +14 -5
  291. package/examples/jsm/utils/UVsDebug.js +9 -4
  292. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  293. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  294. package/examples/jsm/utils/WorkerPool.js +65 -2
  295. package/examples/jsm/webxr/ARButton.js +18 -0
  296. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  297. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  298. package/examples/jsm/webxr/Text2D.js +11 -0
  299. package/examples/jsm/webxr/VRButton.js +30 -0
  300. package/examples/jsm/webxr/XRButton.js +22 -0
  301. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  302. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  303. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  304. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  305. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  306. package/examples/jsm/webxr/XRPlanes.js +17 -0
  307. package/package.json +1 -1
  308. package/src/Three.TSL.js +3 -1
  309. package/src/animation/AnimationAction.js +262 -30
  310. package/src/animation/AnimationClip.js +141 -2
  311. package/src/animation/AnimationMixer.js +99 -15
  312. package/src/animation/AnimationObjectGroup.js +41 -18
  313. package/src/animation/AnimationUtils.js +168 -18
  314. package/src/animation/KeyframeTrack.js +144 -10
  315. package/src/animation/PropertyBinding.js +77 -3
  316. package/src/animation/PropertyMixer.js +72 -5
  317. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  318. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  319. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  320. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  321. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  322. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  323. package/src/audio/AudioAnalyser.js +1 -1
  324. package/src/audio/AudioListener.js +2 -2
  325. package/src/audio/PositionalAudio.js +5 -5
  326. package/src/constants.js +1432 -5
  327. package/src/core/BufferAttribute.js +413 -3
  328. package/src/core/BufferGeometry.js +337 -1
  329. package/src/core/Clock.js +60 -0
  330. package/src/core/GLBufferAttribute.js +99 -0
  331. package/src/core/InstancedBufferAttribute.js +29 -0
  332. package/src/core/InstancedBufferGeometry.js +20 -0
  333. package/src/core/InstancedInterleavedBuffer.js +26 -0
  334. package/src/core/InterleavedBuffer.js +137 -3
  335. package/src/core/InterleavedBufferAttribute.js +197 -0
  336. package/src/core/Layers.js +71 -10
  337. package/src/core/Object3D.js +23 -0
  338. package/src/core/Raycaster.js +134 -1
  339. package/src/core/RenderTarget.js +166 -7
  340. package/src/core/RenderTarget3D.js +25 -0
  341. package/src/core/RenderTargetArray.js +18 -0
  342. package/src/core/Uniform.js +29 -0
  343. package/src/core/UniformsGroup.js +84 -2
  344. package/src/extras/Controls.js +16 -1
  345. package/src/extras/Earcut.js +3 -781
  346. package/src/extras/ImageUtils.js +3 -2
  347. package/src/extras/PMREMGenerator.js +22 -17
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/extras/core/Path.js +1 -1
  350. package/src/extras/lib/earcut.js +685 -0
  351. package/src/geometries/ConeGeometry.js +2 -2
  352. package/src/geometries/CylinderGeometry.js +2 -2
  353. package/src/geometries/ExtrudeGeometry.js +71 -39
  354. package/src/geometries/LatheGeometry.js +1 -1
  355. package/src/lights/LightShadow.js +1 -1
  356. package/src/lights/webgpu/IESSpotLight.js +1 -1
  357. package/src/loaders/AnimationLoader.js +31 -0
  358. package/src/loaders/AudioLoader.js +31 -0
  359. package/src/loaders/BufferGeometryLoader.js +34 -0
  360. package/src/loaders/Cache.js +45 -0
  361. package/src/loaders/CompressedTextureLoader.js +36 -3
  362. package/src/loaders/CubeTextureLoader.js +45 -0
  363. package/src/loaders/DataTextureLoader.js +44 -3
  364. package/src/loaders/FileLoader.js +57 -1
  365. package/src/loaders/ImageBitmapLoader.js +57 -0
  366. package/src/loaders/ImageLoader.js +30 -0
  367. package/src/loaders/Loader.js +4 -6
  368. package/src/loaders/LoaderUtils.js +18 -36
  369. package/src/loaders/LoadingManager.js +142 -0
  370. package/src/loaders/MaterialLoader.js +57 -0
  371. package/src/loaders/ObjectLoader.js +58 -1
  372. package/src/loaders/TextureLoader.js +33 -0
  373. package/src/loaders/nodes/NodeLoader.js +6 -2
  374. package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
  375. package/src/loaders/nodes/NodeObjectLoader.js +3 -3
  376. package/src/materials/LineBasicMaterial.js +74 -1
  377. package/src/materials/LineDashedMaterial.js +52 -0
  378. package/src/materials/Material.js +18 -3
  379. package/src/materials/MeshBasicMaterial.js +165 -0
  380. package/src/materials/MeshDepthMaterial.js +93 -0
  381. package/src/materials/MeshDistanceMaterial.js +76 -0
  382. package/src/materials/MeshLambertMaterial.js +273 -0
  383. package/src/materials/MeshMatcapMaterial.js +142 -0
  384. package/src/materials/MeshNormalMaterial.js +113 -0
  385. package/src/materials/MeshPhongMaterial.js +288 -0
  386. package/src/materials/MeshPhysicalMaterial.js +292 -1
  387. package/src/materials/MeshStandardMaterial.js +297 -0
  388. package/src/materials/MeshToonMaterial.js +218 -0
  389. package/src/materials/PointsMaterial.js +89 -0
  390. package/src/materials/RawShaderMaterial.js +25 -0
  391. package/src/materials/ShaderMaterial.js +215 -6
  392. package/src/materials/ShadowMaterial.js +54 -0
  393. package/src/materials/SpriteMaterial.js +82 -0
  394. package/src/materials/nodes/Line2NodeMaterial.js +1 -1
  395. package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
  396. package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
  397. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  398. package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
  399. package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
  400. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  401. package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
  402. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
  403. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  404. package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
  405. package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
  406. package/src/materials/nodes/NodeMaterial.js +7 -3
  407. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  408. package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
  409. package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
  410. package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
  411. package/src/math/Color.js +1 -1
  412. package/src/math/MathUtils.js +223 -0
  413. package/src/nodes/Nodes.js +1 -0
  414. package/src/nodes/accessors/BatchNode.js +8 -8
  415. package/src/nodes/accessors/BuiltinNode.js +1 -1
  416. package/src/nodes/accessors/CubeTextureNode.js +1 -1
  417. package/src/nodes/accessors/InstanceNode.js +5 -5
  418. package/src/nodes/accessors/InstancedMeshNode.js +1 -1
  419. package/src/nodes/accessors/MorphNode.js +27 -23
  420. package/src/nodes/accessors/Normal.js +1 -1
  421. package/src/nodes/accessors/Object3DNode.js +12 -12
  422. package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
  423. package/src/nodes/accessors/ReferenceNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +46 -37
  425. package/src/nodes/accessors/StorageBufferNode.js +1 -1
  426. package/src/nodes/accessors/StorageTextureNode.js +3 -3
  427. package/src/nodes/accessors/Texture3DNode.js +1 -1
  428. package/src/nodes/accessors/TextureNode.js +25 -5
  429. package/src/nodes/accessors/TextureSizeNode.js +1 -1
  430. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  431. package/src/nodes/code/CodeNode.js +4 -4
  432. package/src/nodes/code/ExpressionNode.js +4 -4
  433. package/src/nodes/code/FunctionCallNode.js +23 -3
  434. package/src/nodes/code/ScriptableNode.js +4 -4
  435. package/src/nodes/code/ScriptableValueNode.js +2 -2
  436. package/src/nodes/core/AssignNode.js +1 -1
  437. package/src/nodes/core/AttributeNode.js +1 -1
  438. package/src/nodes/core/BypassNode.js +1 -1
  439. package/src/nodes/core/CacheNode.js +1 -1
  440. package/src/nodes/core/ContextNode.js +1 -1
  441. package/src/nodes/core/InputNode.js +2 -2
  442. package/src/nodes/core/Node.js +14 -2
  443. package/src/nodes/core/NodeBuilder.js +86 -14
  444. package/src/nodes/core/StackNode.js +5 -5
  445. package/src/nodes/core/StructNode.js +1 -1
  446. package/src/nodes/core/StructTypeNode.js +2 -2
  447. package/src/nodes/core/VarNode.js +2 -8
  448. package/src/nodes/core/VaryingNode.js +3 -3
  449. package/src/nodes/display/BlendModes.js +4 -4
  450. package/src/nodes/display/BumpMapNode.js +1 -1
  451. package/src/nodes/display/NormalMapNode.js +1 -1
  452. package/src/nodes/display/PosterizeNode.js +1 -1
  453. package/src/nodes/display/ScreenNode.js +3 -3
  454. package/src/nodes/display/ViewportDepthNode.js +2 -2
  455. package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
  456. package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
  457. package/src/nodes/display/ViewportTextureNode.js +4 -4
  458. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  459. package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
  460. package/src/nodes/geometry/RangeNode.js +1 -1
  461. package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
  462. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  463. package/src/nodes/gpgpu/ComputeNode.js +30 -2
  464. package/src/nodes/lighting/AnalyticLightNode.js +9 -1
  465. package/src/nodes/lighting/LightsNode.js +3 -3
  466. package/src/nodes/lighting/ShadowNode.js +1 -1
  467. package/src/nodes/math/ConditionalNode.js +20 -3
  468. package/src/nodes/math/MathNode.js +83 -78
  469. package/src/nodes/math/OperatorNode.js +171 -82
  470. package/src/nodes/pmrem/PMREMNode.js +4 -4
  471. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  472. package/src/nodes/tsl/TSLBase.js +2 -1
  473. package/src/nodes/tsl/TSLCore.js +115 -12
  474. package/src/nodes/utils/ArrayElementNode.js +3 -1
  475. package/src/nodes/utils/CubeMapNode.js +3 -3
  476. package/src/nodes/utils/DebugNode.js +70 -0
  477. package/src/nodes/utils/EquirectUVNode.js +2 -2
  478. package/src/nodes/utils/JoinNode.js +27 -2
  479. package/src/nodes/utils/LoopNode.js +58 -28
  480. package/src/nodes/utils/MaxMipLevelNode.js +1 -1
  481. package/src/nodes/utils/ReflectorNode.js +2 -2
  482. package/src/nodes/utils/RemapNode.js +6 -6
  483. package/src/nodes/utils/RotateNode.js +1 -1
  484. package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
  485. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  486. package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
  487. package/src/objects/BatchedMesh.js +4 -4
  488. package/src/objects/InstancedMesh.js +2 -2
  489. package/src/objects/LOD.js +1 -1
  490. package/src/objects/Skeleton.js +1 -1
  491. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  492. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  493. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  494. package/src/renderers/WebGLRenderTarget.js +19 -0
  495. package/src/renderers/WebGLRenderer.js +617 -79
  496. package/src/renderers/common/Animation.js +2 -2
  497. package/src/renderers/common/Attributes.js +2 -2
  498. package/src/renderers/common/Backend.js +12 -3
  499. package/src/renderers/common/Background.js +1 -0
  500. package/src/renderers/common/Color4.js +1 -1
  501. package/src/renderers/common/CubeRenderTarget.js +13 -0
  502. package/src/renderers/common/PostProcessing.js +2 -0
  503. package/src/renderers/common/QuadMesh.js +2 -0
  504. package/src/renderers/common/RenderList.js +2 -2
  505. package/src/renderers/common/RenderObject.js +1 -1
  506. package/src/renderers/common/RenderObjects.js +2 -2
  507. package/src/renderers/common/Renderer.js +52 -31
  508. package/src/renderers/common/XRManager.js +333 -10
  509. package/src/renderers/common/extras/PMREMGenerator.js +6 -0
  510. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  511. package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +10 -1
  512. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
  513. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
  514. package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
  515. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
  516. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
  517. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
  518. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
  519. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
  520. package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
  521. package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
  522. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
  523. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
  524. package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
  525. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
  526. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
  527. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
  528. package/src/renderers/shaders/ShaderChunk.js +2 -0
  529. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
  530. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
  531. package/src/renderers/shaders/UniformsLib.js +6 -5
  532. package/src/renderers/shaders/UniformsUtils.js +1 -3
  533. package/src/renderers/webgl/WebGLBackground.js +4 -2
  534. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  535. package/src/renderers/webgl/WebGLProgram.js +25 -5
  536. package/src/renderers/webgl/WebGLPrograms.js +21 -7
  537. package/src/renderers/webgl/WebGLState.js +9 -9
  538. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  539. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  540. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  541. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  542. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  543. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  544. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  545. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  546. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  547. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  548. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  549. package/src/renderers/webxr/WebXRController.js +87 -2
  550. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  551. package/src/renderers/webxr/WebXRManager.js +173 -1
  552. package/src/scenes/Scene.js +2 -1
  553. package/src/textures/CanvasTexture.js +28 -0
  554. package/src/textures/CompressedArrayTexture.js +57 -0
  555. package/src/textures/CompressedCubeTexture.js +29 -0
  556. package/src/textures/CompressedTexture.js +64 -6
  557. package/src/textures/CubeTexture.js +52 -4
  558. package/src/textures/Data3DTexture.js +77 -0
  559. package/src/textures/DataArrayTexture.js +93 -0
  560. package/src/textures/DataTexture.js +65 -0
  561. package/src/textures/DepthTexture.js +59 -9
  562. package/src/textures/FramebufferTexture.js +62 -0
  563. package/src/textures/Source.js +69 -0
  564. package/src/textures/Texture.js +5 -5
  565. package/src/textures/VideoFrameTexture.js +43 -6
  566. package/src/textures/VideoTexture.js +49 -4
  567. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -2,8 +2,14 @@ export default /* glsl */`
2
2
  float metalnessFactor = metalness;
3
3
 
4
4
  #ifdef USE_METALNESSMAP
5
-
6
- vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );
5
+ #ifdef USE_METALNESSMAP_TRIPLANAR
6
+ vec4 texelMetalness = texture2DTriplanar( metalnessMap, metalnessMapTransform, triplanarCoords, triplanarWeights );
7
+ #else
8
+ #if defined( USE_METALNESSMAP_CYLINDRICAL )
9
+ vec2 vMetalnessMapUv = ( metalnessMapTransform * vec3( positionBasedUv, 1 ) ).xy;
10
+ #endif
11
+ vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );
12
+ #endif
7
13
 
8
14
  // reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture
9
15
  metalnessFactor *= texelMetalness.b;
@@ -21,21 +21,35 @@ float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;
21
21
 
22
22
  #if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )
23
23
 
24
- #ifdef USE_TANGENT
24
+ #if defined( USE_TANGENT )
25
25
 
26
26
  mat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );
27
27
 
28
+ #elif defined( USE_NORMALMAP_UV )
29
+
30
+ mat3 tbn = getTangentFrame( - vViewPosition, normal, vNormalMapUv );
31
+
32
+ #elif defined( USE_NORMALMAP_CYLINDRICAL ) || defined( USE_CLEARCOAT_NORMALMAP_CYLINDRICAL ) || (defined( USE_ANISOTROPY ) && !defined( USE_UV1 ) || !defined( USE_UV2 ) && !defined( USE_UV3 ))
33
+
34
+ #if defined( USE_NORMALMAP_CYLINDRICAL )
35
+ vec2 vNormalMapUv = ( normalMapTransform * vec3( positionBasedUv, 1 ) ).xy;
36
+ #endif
37
+
38
+ #if defined( USE_CLEARCOAT_NORMALMAP_CYLINDRICAL )
39
+ vec2 vClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( positionBasedUv, 1 ) ).xy;
40
+ #endif
41
+
42
+ vec3 tangent = normalize(cross(normal, mat3(modelViewMatrix) * transpose(mat3(texture3DMatrix)) * vec3(0, 1, 0)));
43
+ vec3 bitangent = cross(tangent, normal);
44
+ mat3 tbn = mat3(tangent, bitangent, normal);
45
+
46
+ #elif defined( USE_CLEARCOAT_NORMALMAP_UV )
47
+
48
+ mat3 tbn = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );
49
+
28
50
  #else
29
51
 
30
- mat3 tbn = getTangentFrame( - vViewPosition, normal,
31
- #if defined( USE_NORMALMAP )
32
- vNormalMapUv
33
- #elif defined( USE_CLEARCOAT_NORMALMAP )
34
- vClearcoatNormalMapUv
35
- #else
36
- vUv
37
- #endif
38
- );
52
+ mat3 tbn = getTangentFrame( - vViewPosition, normal, vUv );
39
53
 
40
54
  #endif
41
55
 
@@ -54,7 +68,13 @@ float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;
54
68
 
55
69
  mat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );
56
70
 
57
- #else
71
+ #elif defined( USE_CLEARCOAT_NORMALMAP_CYLINDRICAL )
72
+
73
+ vec3 tangent2 = normalize(cross(normal, mat3(modelViewMatrix) * transpose(mat3(texture3DMatrix)) * vec3(0, 1, 0)));
74
+ vec3 bitangent2 = cross(tangent2, normal);
75
+ mat3 tbn2 = mat3(tangent2, bitangent2, normal);
76
+
77
+ #elif defined( USE_CLEARCOAT_NORMALMAP_UV )
58
78
 
59
79
  mat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );
60
80
 
@@ -1,6 +1,10 @@
1
1
  export default /* glsl */`
2
2
 
3
- #ifdef USE_NORMALMAP_OBJECTSPACE
3
+ #ifdef USE_NORMALMAP_TRIPLANAR
4
+
5
+ normal = normalize(normalMatrix * transpose(mat3(texture3DMatrix)) * texture2DTriplanarNormal( normalMap, normalMapTransform, normalScale, normalize(mat3(texture3DMatrix) * vModelNormal.xyz), triplanarCoords, triplanarWeights ));
6
+
7
+ #elif defined( USE_NORMALMAP_OBJECTSPACE )
4
8
 
5
9
  normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; // overrides both flatShading and attribute normals
6
10
 
@@ -3,7 +3,7 @@ export default /* glsl */`
3
3
 
4
4
  varying vec3 vNormal;
5
5
 
6
- #ifdef USE_TANGENT
6
+ #if defined( USE_TANGENT )
7
7
 
8
8
  varying vec3 vTangent;
9
9
  varying vec3 vBitangent;
@@ -3,7 +3,7 @@ export default /* glsl */`
3
3
 
4
4
  varying vec3 vNormal;
5
5
 
6
- #ifdef USE_TANGENT
6
+ #if defined( USE_TANGENT )
7
7
 
8
8
  varying vec3 vTangent;
9
9
  varying vec3 vBitangent;
@@ -16,7 +16,7 @@ export default /* glsl */`
16
16
 
17
17
  // Normal Mapping Without Precomputed Tangents
18
18
  // http://www.thetenthplanet.de/archives/1180
19
-
19
+
20
20
  mat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {
21
21
 
22
22
  vec3 q0 = dFdx( eye_pos.xyz );
@@ -40,4 +40,5 @@ export default /* glsl */`
40
40
  }
41
41
 
42
42
  #endif
43
+
43
44
  `;
@@ -1,7 +1,18 @@
1
1
  export default /* glsl */`
2
2
  float roughnessFactor = roughness;
3
3
 
4
- #ifdef USE_ROUGHNESSMAP
4
+ #ifdef USE_ROUGHNESSMAP_TRIPLANAR
5
+
6
+ vec4 texelRoughness = texture2DTriplanar( roughnessMap, roughnessMapTransform, triplanarCoords, triplanarWeights );
7
+
8
+ // reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture
9
+ roughnessFactor *= texelRoughness.g;
10
+
11
+ #elif defined( USE_ROUGHNESSMAP )
12
+
13
+ #if defined( USE_ROUGHNESSMAP_CYLINDRICAL )
14
+ vec2 vRoughnessMapUv = ( roughnessMapTransform * vec3( positionBasedUv, 1 ) ).xy;
15
+ #endif
5
16
 
6
17
  vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );
7
18
 
@@ -0,0 +1,20 @@
1
+ export default /* glsl */`
2
+ #ifdef USE_TRIPLANAR
3
+
4
+ vec3 triplanarWeights = pow(abs(mat3(texture3DMatrix) * vModelNormal), vec3(triplanarHardness, triplanarHardness, triplanarHardness));
5
+ triplanarWeights /= dot(triplanarWeights, vec3(1.0, 1.0, 1.0));
6
+ vec3 triplanarCoords = vModelPosition.xyz;
7
+
8
+ #endif
9
+
10
+ #ifdef USE_CYLINDRICAL
11
+
12
+ // Cylindrical and toroidal parameterizations without vertex seams
13
+ // DOI:10.1080/2151237X.2012.654054
14
+ float positionBasedU1 = fract(atan(vModelPosition.z, vModelPosition.x) * RECIPROCAL_PI2);
15
+ float positionBasedU2 = fract(positionBasedU1 + 0.5) - 0.5;
16
+ vec2 positionBasedUv = vec2(fwidth(positionBasedU1) < fwidth(positionBasedU2) - 1e-3 ? positionBasedU1 : positionBasedU2, vModelPosition.y);
17
+
18
+ #endif
19
+
20
+ `;
@@ -4,12 +4,37 @@ export default /* glsl */`
4
4
  varying vec2 vUv;
5
5
 
6
6
  #endif
7
- #ifdef USE_MAP
7
+ #if defined( USE_TRIPLANAR )
8
+
9
+ uniform float triplanarHardness;
10
+
11
+ #endif
12
+ #if defined( USE_TRIPLANAR ) || defined( USE_CYLINDRICAL )
13
+
14
+ varying vec3 vModelPosition;
15
+
16
+ #endif
17
+ #if defined( USE_TRIPLANAR ) || defined( USE_CYLINDRICAL ) || (defined(USE_ANISOTROPY) && !defined(USE_UV1) && !defined(USE_UV2) && !defined(USE_UV3))
18
+
19
+ varying vec3 vModelNormal;
20
+ uniform mat4 texture3DMatrix;
21
+ uniform mat4 invTexture3DMatrix;
22
+
23
+ #endif
24
+ #if defined( USE_MAP_CYLINDRICAL ) || defined( USE_MAP_TRIPLANAR )
25
+
26
+ uniform mat3 mapTransform;
27
+
28
+ #elif defined( USE_MAP_UV )
8
29
 
9
30
  varying vec2 vMapUv;
10
31
 
11
32
  #endif
12
- #ifdef USE_ALPHAMAP
33
+ #if defined( USE_ALPHAMAP_CYLINDRICAL ) || defined( USE_ALPHAMAP_TRIPLANAR )
34
+
35
+ uniform mat3 alphaMapTransform;
36
+
37
+ #elif defined( USE_ALPHAMAP_UV )
13
38
 
14
39
  varying vec2 vAlphaMapUv;
15
40
 
@@ -19,7 +44,11 @@ export default /* glsl */`
19
44
  varying vec2 vLightMapUv;
20
45
 
21
46
  #endif
22
- #ifdef USE_AOMAP
47
+ #if defined( USE_AOMAP_CYLINDRICAL ) || defined( USE_AOMAP_TRIPLANAR )
48
+
49
+ uniform mat3 aoMapTransform;
50
+
51
+ #elif defined( USE_AOMAP_UV )
23
52
 
24
53
  varying vec2 vAoMapUv;
25
54
 
@@ -29,7 +58,11 @@ export default /* glsl */`
29
58
  varying vec2 vBumpMapUv;
30
59
 
31
60
  #endif
32
- #ifdef USE_NORMALMAP
61
+ #if defined( USE_NORMALMAP_CYLINDRICAL ) || defined( USE_NORMALMAP_TRIPLANAR )
62
+
63
+ uniform mat3 normalMapTransform;
64
+
65
+ #elif defined( USE_NORMALMAP_UV )
33
66
 
34
67
  varying vec2 vNormalMapUv;
35
68
 
@@ -39,12 +72,20 @@ export default /* glsl */`
39
72
  varying vec2 vEmissiveMapUv;
40
73
 
41
74
  #endif
42
- #ifdef USE_METALNESSMAP
75
+ #if defined( USE_METALNESSMAP_CYLINDRICAL ) || defined( USE_METALNESSMAP_TRIPLANAR )
76
+
77
+ uniform mat3 metalnessMapTransform;
78
+
79
+ #elif defined( USE_METALNESSMAP_UV )
43
80
 
44
81
  varying vec2 vMetalnessMapUv;
45
82
 
46
83
  #endif
47
- #ifdef USE_ROUGHNESSMAP
84
+ #if defined( USE_ROUGHNESSMAP_CYLINDRICAL ) || defined( USE_ROUGHNESSMAP_TRIPLANAR )
85
+
86
+ uniform mat3 roughnessMapTransform;
87
+
88
+ #elif defined( USE_ROUGHNESSMAP_UV )
48
89
 
49
90
  varying vec2 vRoughnessMapUv;
50
91
 
@@ -59,7 +100,11 @@ export default /* glsl */`
59
100
  varying vec2 vClearcoatMapUv;
60
101
 
61
102
  #endif
62
- #ifdef USE_CLEARCOAT_NORMALMAP
103
+ #if defined( USE_CLEARCOAT_NORMALMAP_CYLINDRICAL ) || defined( USE_CLEARCOAT_NORMALMAP_TRIPLANAR )
104
+
105
+ uniform mat3 clearcoatNormalMapTransform;
106
+
107
+ #elif defined( USE_CLEARCOAT_NORMALMAP_UV )
63
108
 
64
109
  varying vec2 vClearcoatNormalMapUv;
65
110
 
@@ -4,13 +4,31 @@ export default /* glsl */`
4
4
  varying vec2 vUv;
5
5
 
6
6
  #endif
7
- #ifdef USE_MAP
7
+ #if defined( USE_TRIPLANAR ) || defined( USE_CYLINDRICAL ) || ( defined(USE_ANISOTROPY) && !defined(USE_UV1) && !defined(USE_UV2) && !defined(USE_UV3) )
8
+
9
+ uniform mat4 texture3DMatrix;
10
+
11
+ #endif
12
+ #if defined( USE_TRIPLANAR ) || defined( USE_CYLINDRICAL )
13
+
14
+ varying vec3 vModelPosition;
15
+
16
+ #endif
17
+ #if defined( USE_TRIPLANAR ) || ( defined(USE_ANISOTROPY) && !defined(USE_UV1) && !defined(USE_UV2) && !defined(USE_UV3) )
18
+
19
+ varying vec3 vModelNormal;
20
+
21
+ #endif
22
+ #if defined( USE_CYLINDRICAL )
23
+
24
+ #endif
25
+ #if defined( USE_MAP_UV )
8
26
 
9
27
  uniform mat3 mapTransform;
10
28
  varying vec2 vMapUv;
11
29
 
12
30
  #endif
13
- #ifdef USE_ALPHAMAP
31
+ #if defined( USE_ALPHAMAP_UV )
14
32
 
15
33
  uniform mat3 alphaMapTransform;
16
34
  varying vec2 vAlphaMapUv;
@@ -22,7 +40,7 @@ export default /* glsl */`
22
40
  varying vec2 vLightMapUv;
23
41
 
24
42
  #endif
25
- #ifdef USE_AOMAP
43
+ #if defined( USE_AOMAP_UV )
26
44
 
27
45
  uniform mat3 aoMapTransform;
28
46
  varying vec2 vAoMapUv;
@@ -34,7 +52,7 @@ export default /* glsl */`
34
52
  varying vec2 vBumpMapUv;
35
53
 
36
54
  #endif
37
- #ifdef USE_NORMALMAP
55
+ #if defined( USE_NORMALMAP_UV )
38
56
 
39
57
  uniform mat3 normalMapTransform;
40
58
  varying vec2 vNormalMapUv;
@@ -52,13 +70,13 @@ export default /* glsl */`
52
70
  varying vec2 vEmissiveMapUv;
53
71
 
54
72
  #endif
55
- #ifdef USE_METALNESSMAP
73
+ #if defined( USE_METALNESSMAP_UV )
56
74
 
57
75
  uniform mat3 metalnessMapTransform;
58
76
  varying vec2 vMetalnessMapUv;
59
77
 
60
78
  #endif
61
- #ifdef USE_ROUGHNESSMAP
79
+ #if defined( USE_ROUGHNESSMAP_UV )
62
80
 
63
81
  uniform mat3 roughnessMapTransform;
64
82
  varying vec2 vRoughnessMapUv;
@@ -142,4 +160,5 @@ export default /* glsl */`
142
160
  varying vec2 vThicknessMapUv;
143
161
 
144
162
  #endif
163
+
145
164
  `;
@@ -1,15 +1,27 @@
1
1
  export default /* glsl */`
2
2
  #if defined( USE_UV ) || defined( USE_ANISOTROPY )
3
3
 
4
- vUv = vec3( uv, 1 ).xy;
4
+ #if defined( USE_UV1 ) || defined( USE_UV2 ) || defined( USE_UV3 )
5
+ vUv = vec3( uv, 1 ).xy;
6
+ #endif
5
7
 
6
8
  #endif
7
- #ifdef USE_MAP
9
+ #if defined( USE_TRIPLANAR ) || defined( USE_CYLINDRICAL )
10
+
11
+ vModelPosition = (texture3DMatrix * vec4(position.xyz, 1)).xyz;
12
+
13
+ #endif
14
+ #if defined( USE_TRIPLANAR )
15
+
16
+ vModelNormal = normal.xyz;
17
+
18
+ #endif
19
+ #if defined( USE_MAP_UV )
8
20
 
9
21
  vMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;
10
22
 
11
23
  #endif
12
- #ifdef USE_ALPHAMAP
24
+ #if defined( USE_ALPHAMAP_UV )
13
25
 
14
26
  vAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;
15
27
 
@@ -19,7 +31,7 @@ export default /* glsl */`
19
31
  vLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;
20
32
 
21
33
  #endif
22
- #ifdef USE_AOMAP
34
+ #if defined( USE_AOMAP_UV )
23
35
 
24
36
  vAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;
25
37
 
@@ -29,7 +41,7 @@ export default /* glsl */`
29
41
  vBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;
30
42
 
31
43
  #endif
32
- #ifdef USE_NORMALMAP
44
+ #if defined( USE_NORMALMAP_UV )
33
45
 
34
46
  vNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;
35
47
 
@@ -44,12 +56,12 @@ export default /* glsl */`
44
56
  vEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;
45
57
 
46
58
  #endif
47
- #ifdef USE_METALNESSMAP
59
+ #if defined( USE_METALNESSMAP_UV )
48
60
 
49
61
  vMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;
50
62
 
51
63
  #endif
52
- #ifdef USE_ROUGHNESSMAP
64
+ #if defined( USE_ROUGHNESSMAP_UV )
53
65
 
54
66
  vRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;
55
67
 
@@ -59,6 +59,7 @@ import logdepthbuf_pars_fragment from './ShaderChunk/logdepthbuf_pars_fragment.g
59
59
  import logdepthbuf_pars_vertex from './ShaderChunk/logdepthbuf_pars_vertex.glsl.js';
60
60
  import logdepthbuf_vertex from './ShaderChunk/logdepthbuf_vertex.glsl.js';
61
61
  import map_fragment from './ShaderChunk/map_fragment.glsl.js';
62
+ import triplanar_fragment from './ShaderChunk/triplanar_fragment.glsl.js';
62
63
  import map_pars_fragment from './ShaderChunk/map_pars_fragment.glsl.js';
63
64
  import map_particle_fragment from './ShaderChunk/map_particle_fragment.glsl.js';
64
65
  import map_particle_pars_fragment from './ShaderChunk/map_particle_pars_fragment.glsl.js';
@@ -186,6 +187,7 @@ export const ShaderChunk = {
186
187
  logdepthbuf_pars_vertex: logdepthbuf_pars_vertex,
187
188
  logdepthbuf_vertex: logdepthbuf_vertex,
188
189
  map_fragment: map_fragment,
190
+ triplanar_fragment: triplanar_fragment,
189
191
  map_pars_fragment: map_pars_fragment,
190
192
  map_particle_fragment: map_particle_fragment,
191
193
  map_particle_pars_fragment: map_particle_pars_fragment,
@@ -5,6 +5,7 @@ attribute float lineDistance;
5
5
  varying float vLineDistance;
6
6
 
7
7
  #include <common>
8
+ #include <batching_pars_vertex>
8
9
  #include <uv_pars_vertex>
9
10
  #include <color_pars_vertex>
10
11
  #include <fog_pars_vertex>
@@ -20,6 +21,7 @@ void main() {
20
21
  #include <color_vertex>
21
22
  #include <morphinstance_vertex>
22
23
  #include <morphcolor_vertex>
24
+ #include <batching_vertex>
23
25
  #include <begin_vertex>
24
26
  #include <morphtarget_vertex>
25
27
  #include <project_vertex>
@@ -168,6 +168,7 @@ void main() {
168
168
  ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
169
169
  vec3 totalEmissiveRadiance = emissive;
170
170
 
171
+ #include <triplanar_fragment>
171
172
  #include <logdepthbuf_fragment>
172
173
  #include <map_fragment>
173
174
  #include <color_fragment>
@@ -1,11 +1,9 @@
1
1
  import { Color } from '../../math/Color.js';
2
2
  import { Vector2 } from '../../math/Vector2.js';
3
3
  import { Matrix3 } from '../../math/Matrix3.js';
4
+ import { Matrix4 } from '../../math/Matrix4.js';
4
5
 
5
- /**
6
- * Uniforms library for shared webgl shaders
7
- */
8
-
6
+ // Uniforms library for shared webgl shaders
9
7
  const UniformsLib = {
10
8
 
11
9
  common: {
@@ -19,7 +17,10 @@ const UniformsLib = {
19
17
  alphaMap: { value: null },
20
18
  alphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },
21
19
 
22
- alphaTest: { value: 0 }
20
+ alphaTest: { value: 0 },
21
+
22
+ texture3DMatrix: { value: /*@__PURE__*/ new Matrix4() },
23
+ triplanarHardness: { value: 16.0 }
23
24
 
24
25
  },
25
26
 
@@ -1,8 +1,6 @@
1
1
  import { ColorManagement } from '../../math/ColorManagement.js';
2
2
 
3
- /**
4
- * Uniform Utilities
5
- */
3
+ // Uniform Utilities
6
4
 
7
5
  export function cloneUniforms( src ) {
8
6
 
@@ -101,7 +101,8 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
101
101
  side: BackSide,
102
102
  depthTest: false,
103
103
  depthWrite: false,
104
- fog: false
104
+ fog: false,
105
+ allowOverride: false
105
106
  } )
106
107
  );
107
108
 
@@ -180,7 +181,8 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
180
181
  side: FrontSide,
181
182
  depthTest: false,
182
183
  depthWrite: false,
183
- fog: false
184
+ fog: false,
185
+ allowOverride: false
184
186
  } )
185
187
  );
186
188
 
@@ -141,6 +141,18 @@ function WebGLMaterials( renderer, properties ) {
141
141
 
142
142
  }
143
143
 
144
+ if ( material.texture3DMatrix ) {
145
+
146
+ uniforms.texture3DMatrix.value.copy( material.texture3DMatrix );
147
+
148
+ }
149
+
150
+ if ( material.triplanarHardness ) {
151
+
152
+ uniforms.triplanarHardness.value = material.triplanarHardness;
153
+
154
+ }
155
+
144
156
  if ( material.alphaMap ) {
145
157
 
146
158
  uniforms.alphaMap.value = material.alphaMap;
@@ -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 } from '../../constants.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';
5
5
  import { ColorManagement } from '../../math/ColorManagement.js';
6
6
  import { Vector3 } from '../../math/Vector3.js';
7
7
  import { Matrix3 } from '../../math/Matrix3.js';
@@ -552,14 +552,17 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
552
552
  parameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',
553
553
 
554
554
  parameters.map ? '#define USE_MAP' : '',
555
+ parameters.mapMode === TriPlanarMapping ? '#define USE_MAP_TRIPLANAR' : parameters.mapMode === CylindricalMapping ? '#define USE_MAP_CYLINDRICAL' : parameters.mapMode === UVMapping ? '#define USE_MAP_UV' : '',
555
556
  parameters.envMap ? '#define USE_ENVMAP' : '',
556
557
  parameters.envMap ? '#define ' + envMapModeDefine : '',
557
558
  parameters.lightMap ? '#define USE_LIGHTMAP' : '',
558
559
  parameters.aoMap ? '#define USE_AOMAP' : '',
560
+ parameters.aoMapMode === TriPlanarMapping ? '#define USE_AOMAP_TRIPLANAR' : parameters.aoMapMode === CylindricalMapping ? '#define USE_AOMAP_CYLINDRICAL' : parameters.aoMapMode == UVMapping ? '#define USE_AOMAP_UV' : '',
559
561
  parameters.bumpMap ? '#define USE_BUMPMAP' : '',
560
562
  parameters.normalMap ? '#define USE_NORMALMAP' : '',
561
- parameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',
562
- parameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',
563
+ parameters.normalMapMode === TriPlanarMapping ? '#define USE_NORMALMAP_TRIPLANAR' : parameters.normalMapMode === CylindricalMapping ? '#define USE_NORMALMAP_CYLINDRICAL' : parameters.normalMapMode === UVMapping ? '#define USE_NORMALMAP_UV' : '',
564
+ parameters.normalMapObjectSpace && [UVMapping, CylindricalMapping].includes( parameters.normalMapMode ) ? '#define USE_NORMALMAP_OBJECTSPACE' : '',
565
+ parameters.normalMapTangentSpace && [UVMapping, CylindricalMapping].includes( parameters.normalMapMode ) ? '#define USE_NORMALMAP_TANGENTSPACE' : '',
563
566
  parameters.displacementMap ? '#define USE_DISPLACEMENTMAP' : '',
564
567
  parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',
565
568
 
@@ -569,6 +572,9 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
569
572
  parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',
570
573
  parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',
571
574
  parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',
575
+ parameters.clearcoatNormalMapMode === TriPlanarMapping ? '#define USE_CLEARCOAT_NORMALMAP_TRIPLANAR'
576
+ : parameters.clearcoatNormalMapMode === CylindricalMapping ? '#define USE_CLEARCOAT_NORMALMAP_CYLINDRICAL'
577
+ : parameters.clearcoatNormalMapMode === UVMapping ? '#define USE_CLEARCOAT_NORMALMAP_UV' : '',
572
578
 
573
579
  parameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',
574
580
  parameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',
@@ -578,8 +584,11 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
578
584
  parameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',
579
585
 
580
586
  parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',
587
+ parameters.roughnessMapMode === TriPlanarMapping ? '#define USE_ROUGHNESSMAP_TRIPLANAR' : parameters.roughnessMapMode === CylindricalMapping ? '#define USE_ROUGHNESSMAP_CYLINDRICAL' : parameters.roughnessMapMode === UVMapping ? '#define USE_ROUGHNESSMAP_UV' : '',
581
588
  parameters.metalnessMap ? '#define USE_METALNESSMAP' : '',
589
+ parameters.metalnessMapMode === TriPlanarMapping ? '#define USE_METALNESSMAP_TRIPLANAR' : parameters.metalnessMapMode === CylindricalMapping ? '#define USE_METALNESSMAP_CYLINDRICAL' : parameters.metalnessMapMode === UVMapping ? '#define USE_METALNESSMAP_UV' : '',
582
590
  parameters.alphaMap ? '#define USE_ALPHAMAP' : '',
591
+ parameters.alphaMapMode === TriPlanarMapping ? '#define USE_ALPHAMAP_TRIPLANAR' : parameters.alphaMapMode === CylindricalMapping ? '#define USE_ALPHAMAP_CYLINDRICAL' : parameters.alphaMapMode === UVMapping ? '#define USE_ALPHAMAP_UV' : '',
583
592
  parameters.alphaHash ? '#define USE_ALPHAHASH' : '',
584
593
 
585
594
  parameters.transmission ? '#define USE_TRANSMISSION' : '',
@@ -744,6 +753,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
744
753
 
745
754
  parameters.alphaToCoverage ? '#define ALPHA_TO_COVERAGE' : '',
746
755
  parameters.map ? '#define USE_MAP' : '',
756
+ parameters.mapMode === TriPlanarMapping ? '#define USE_MAP_TRIPLANAR' : parameters.mapMode === CylindricalMapping ? '#define USE_MAP_CYLINDRICAL' : parameters.mapMode === UVMapping ? '#define USE_MAP_UV' : '',
747
757
  parameters.matcap ? '#define USE_MATCAP' : '',
748
758
  parameters.envMap ? '#define USE_ENVMAP' : '',
749
759
  parameters.envMap ? '#define ' + envMapTypeDefine : '',
@@ -754,10 +764,12 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
754
764
  envMapCubeUVSize ? '#define CUBEUV_MAX_MIP ' + envMapCubeUVSize.maxMip + '.0' : '',
755
765
  parameters.lightMap ? '#define USE_LIGHTMAP' : '',
756
766
  parameters.aoMap ? '#define USE_AOMAP' : '',
767
+ parameters.aoMapMode === TriPlanarMapping ? '#define USE_AOMAP_TRIPLANAR' : parameters.aoMapMode === CylindricalMapping ? '#define USE_AOMAP_CYLINDRICAL' : parameters.aoMapMode == UVMapping ? '#define USE_AOMAP_UV' : '',
757
768
  parameters.bumpMap ? '#define USE_BUMPMAP' : '',
758
769
  parameters.normalMap ? '#define USE_NORMALMAP' : '',
759
- parameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',
760
- parameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',
770
+ parameters.normalMapMode === TriPlanarMapping ? '#define USE_NORMALMAP_TRIPLANAR' : parameters.normalMapMode === CylindricalMapping ? '#define USE_NORMALMAP_CYLINDRICAL' : parameters.normalMapMode === UVMapping ? '#define USE_NORMALMAP_UV' : '',
771
+ parameters.normalMapObjectSpace && [UVMapping, CylindricalMapping].includes( parameters.normalMapMode ) ? '#define USE_NORMALMAP_OBJECTSPACE' : '',
772
+ parameters.normalMapTangentSpace && [UVMapping, CylindricalMapping].includes( parameters.normalMapMode ) ? '#define USE_NORMALMAP_TANGENTSPACE' : '',
761
773
  parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',
762
774
 
763
775
  parameters.anisotropy ? '#define USE_ANISOTROPY' : '',
@@ -767,6 +779,9 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
767
779
  parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',
768
780
  parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',
769
781
  parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',
782
+ parameters.clearcoatNormalMapMode === TriPlanarMapping ? '#define USE_CLEARCOAT_NORMALMAP_TRIPLANAR'
783
+ : parameters.clearcoatNormalMapMode === CylindricalMapping ? '#define USE_CLEARCOAT_NORMALMAP_CYLINDRICAL'
784
+ : parameters.clearcoatNormalMapMode === UVMapping ? '#define USE_CLEARCOAT_NORMALMAP_UV' : '',
770
785
 
771
786
  parameters.dispersion ? '#define USE_DISPERSION' : '',
772
787
 
@@ -779,9 +794,12 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
779
794
  parameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',
780
795
 
781
796
  parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',
797
+ parameters.roughnessMapMode === TriPlanarMapping ? '#define USE_ROUGHNESSMAP_TRIPLANAR' : parameters.roughnessMapMode === CylindricalMapping ? '#define USE_ROUGHNESSMAP_CYLINDRICAL' : parameters.roughnessMapMode === UVMapping ? '#define USE_ROUGHNESSMAP_UV' : '',
782
798
  parameters.metalnessMap ? '#define USE_METALNESSMAP' : '',
799
+ parameters.metalnessMapMode === TriPlanarMapping ? '#define USE_METALNESSMAP_TRIPLANAR' : parameters.metalnessMapMode === CylindricalMapping ? '#define USE_METALNESSMAP_CYLINDRICAL' : parameters.metalnessMapMode === UVMapping ? '#define USE_METALNESSMAP_UV' : '',
783
800
 
784
801
  parameters.alphaMap ? '#define USE_ALPHAMAP' : '',
802
+ parameters.alphaMapMode === TriPlanarMapping ? '#define USE_ALPHAMAP_TRIPLANAR' : parameters.alphaMapMode === CylindricalMapping ? '#define USE_ALPHAMAP_CYLINDRICAL' : parameters.alphaMapMode === UVMapping ? '#define USE_ALPHAMAP_UV' : '',
785
803
  parameters.alphaTest ? '#define USE_ALPHATEST' : '',
786
804
  parameters.alphaHash ? '#define USE_ALPHAHASH' : '',
787
805
 
@@ -822,7 +840,9 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
822
840
  parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
823
841
  parameters.reverseDepthBuffer ? '#define USE_REVERSEDEPTHBUF' : '',
824
842
 
843
+ 'uniform mat4 modelViewMatrix;',
825
844
  'uniform mat4 viewMatrix;',
845
+ 'uniform mat3 normalMatrix;',
826
846
  'uniform vec3 cameraPosition;',
827
847
  'uniform bool isOrthographic;',
828
848