super-three 0.133.3 → 0.136.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 (354) hide show
  1. package/build/three.js +1059 -783
  2. package/build/three.min.js +1 -1
  3. package/build/three.module.js +1424 -895
  4. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  5. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  6. package/examples/fonts/open-sans/open-sans.css +9 -0
  7. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  8. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
  9. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  10. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  11. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  12. package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
  13. package/examples/js/animation/CCDIKSolver.js +0 -1
  14. package/examples/js/animation/MMDPhysics.js +1 -3
  15. package/examples/js/controls/ArcballControls.js +99 -72
  16. package/examples/js/controls/DragControls.js +7 -0
  17. package/examples/js/controls/OrbitControls.js +5 -36
  18. package/examples/js/controls/TrackballControls.js +3 -2
  19. package/examples/js/controls/TransformControls.js +24 -1
  20. package/examples/js/csm/CSM.js +2 -2
  21. package/examples/js/csm/CSMFrustum.js +133 -0
  22. package/examples/js/curves/CurveExtras.js +0 -2
  23. package/examples/js/effects/AsciiEffect.js +2 -9
  24. package/examples/js/exporters/GLTFExporter.js +148 -64
  25. package/examples/js/exporters/USDZExporter.js +45 -26
  26. package/examples/js/geometries/TeapotGeometry.js +0 -1
  27. package/examples/js/interactive/SelectionBox.js +2 -0
  28. package/examples/js/interactive/SelectionHelper.js +22 -7
  29. package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
  30. package/examples/js/lines/LineMaterial.js +58 -20
  31. package/examples/js/lines/LineSegments2.js +29 -24
  32. package/examples/js/loaders/3DMLoader.js +24 -11
  33. package/examples/js/loaders/3MFLoader.js +2 -2
  34. package/examples/js/loaders/AMFLoader.js +0 -2
  35. package/examples/js/loaders/ColladaLoader.js +61 -4
  36. package/examples/js/loaders/EXRLoader.js +185 -262
  37. package/examples/js/loaders/FBXLoader.js +4 -5
  38. package/examples/js/loaders/GLTFLoader.js +96 -33
  39. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -8
  40. package/examples/js/loaders/KTX2Loader.js +23 -2
  41. package/examples/js/loaders/KTXLoader.js +1 -1
  42. package/examples/js/loaders/LDrawLoader.js +26 -30
  43. package/examples/js/loaders/LUT3dlLoader.js +2 -0
  44. package/examples/js/loaders/LUTCubeLoader.js +2 -0
  45. package/examples/js/loaders/LWOLoader.js +8 -6
  46. package/examples/js/loaders/LogLuvLoader.js +766 -0
  47. package/examples/js/loaders/MMDLoader.js +0 -1
  48. package/examples/js/loaders/NRRDLoader.js +9 -2
  49. package/examples/js/loaders/OBJLoader.js +0 -2
  50. package/examples/js/loaders/PLYLoader.js +33 -8
  51. package/examples/js/loaders/RGBELoader.js +2 -16
  52. package/examples/js/loaders/RGBMLoader.js +55 -5
  53. package/examples/js/loaders/SVGLoader.js +9 -5
  54. package/examples/js/loaders/TDSLoader.js +237 -271
  55. package/examples/js/loaders/VOXLoader.js +1 -0
  56. package/examples/js/loaders/VRMLLoader.js +2 -1
  57. package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
  58. package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
  59. package/examples/js/math/ImprovedNoise.js +1 -1
  60. package/examples/js/misc/GPUComputationRenderer.js +3 -1
  61. package/examples/js/objects/Lensflare.js +2 -10
  62. package/examples/js/objects/MarchingCubes.js +42 -128
  63. package/examples/js/objects/Reflector.js +7 -0
  64. package/examples/js/objects/Refractor.js +7 -0
  65. package/examples/js/objects/Sky.js +1 -1
  66. package/examples/js/objects/Water.js +2 -2
  67. package/examples/js/objects/Water2.js +4 -7
  68. package/examples/js/postprocessing/GlitchPass.js +3 -1
  69. package/examples/js/postprocessing/SSAOPass.js +1 -0
  70. package/examples/js/renderers/CSS2DRenderer.js +4 -4
  71. package/examples/js/renderers/CSS3DRenderer.js +4 -4
  72. package/examples/js/shaders/ConvolutionShader.js +0 -1
  73. package/examples/js/shaders/FXAAShader.js +1 -1
  74. package/examples/js/shaders/FilmShader.js +1 -1
  75. package/examples/js/shaders/GammaCorrectionShader.js +1 -1
  76. package/examples/js/shaders/HorizontalBlurShader.js +1 -2
  77. package/examples/js/shaders/SSRShader.js +1 -1
  78. package/examples/js/shaders/SSRrShader.js +1 -1
  79. package/examples/js/shaders/VerticalBlurShader.js +1 -2
  80. package/examples/js/utils/GeometryUtils.js +1 -1
  81. package/examples/js/utils/RoughnessMipmapper.js +18 -28
  82. package/examples/jsm/animation/CCDIKSolver.js +0 -1
  83. package/examples/jsm/animation/MMDPhysics.js +0 -2
  84. package/examples/jsm/controls/ArcballControls.js +80 -77
  85. package/examples/jsm/controls/DragControls.js +7 -0
  86. package/examples/jsm/controls/OrbitControls.js +9 -51
  87. package/examples/jsm/controls/TrackballControls.js +1 -1
  88. package/examples/jsm/controls/TransformControls.js +24 -1
  89. package/examples/jsm/csm/CSM.js +3 -3
  90. package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
  91. package/examples/jsm/curves/CurveExtras.js +0 -2
  92. package/examples/jsm/effects/AsciiEffect.js +2 -9
  93. package/examples/jsm/exporters/GLTFExporter.js +161 -75
  94. package/examples/jsm/exporters/USDZExporter.js +47 -26
  95. package/examples/jsm/geometries/TeapotGeometry.js +0 -1
  96. package/examples/jsm/interactive/SelectionBox.js +1 -0
  97. package/examples/jsm/interactive/SelectionHelper.js +19 -7
  98. package/examples/jsm/libs/flow.module.js +3338 -0
  99. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  100. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  101. package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
  102. package/examples/jsm/lines/LineMaterial.js +59 -23
  103. package/examples/jsm/lines/LineSegments2.js +22 -18
  104. package/examples/jsm/loaders/3DMLoader.js +18 -12
  105. package/examples/jsm/loaders/3MFLoader.js +2 -2
  106. package/examples/jsm/loaders/AMFLoader.js +0 -2
  107. package/examples/jsm/loaders/ColladaLoader.js +61 -4
  108. package/examples/jsm/loaders/EXRLoader.js +184 -293
  109. package/examples/jsm/loaders/FBXLoader.js +4 -5
  110. package/examples/jsm/loaders/GLTFLoader.js +101 -37
  111. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -14
  112. package/examples/jsm/loaders/KTX2Loader.js +30 -2
  113. package/examples/jsm/loaders/KTXLoader.js +1 -1
  114. package/examples/jsm/loaders/LDrawLoader.js +23 -24
  115. package/examples/jsm/loaders/LUT3dlLoader.js +2 -0
  116. package/examples/jsm/loaders/LUTCubeLoader.js +2 -0
  117. package/examples/jsm/loaders/LWOLoader.js +8 -6
  118. package/examples/jsm/loaders/LogLuvLoader.js +606 -0
  119. package/examples/jsm/loaders/MMDLoader.js +0 -1
  120. package/examples/jsm/loaders/NRRDLoader.js +10 -2
  121. package/examples/jsm/loaders/OBJLoader.js +0 -2
  122. package/examples/jsm/loaders/PLYLoader.js +34 -8
  123. package/examples/jsm/loaders/RGBELoader.js +0 -20
  124. package/examples/jsm/loaders/RGBMLoader.js +61 -7
  125. package/examples/jsm/loaders/SVGLoader.js +9 -6
  126. package/examples/jsm/loaders/TDSLoader.js +236 -275
  127. package/examples/jsm/loaders/VOXLoader.js +1 -0
  128. package/examples/jsm/loaders/VRMLLoader.js +2 -1
  129. package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
  130. package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
  131. package/examples/jsm/math/ImprovedNoise.js +1 -1
  132. package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
  133. package/examples/jsm/node-editor/NodeEditor.js +456 -0
  134. package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
  135. package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
  136. package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
  137. package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
  138. package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
  139. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
  140. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
  141. package/examples/jsm/node-editor/examples/rim.json +1 -0
  142. package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
  143. package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
  144. package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
  145. package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
  146. package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
  147. package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
  148. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +108 -0
  149. package/examples/jsm/node-editor/math/DotEditor.js +36 -0
  150. package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
  151. package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
  152. package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
  153. package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
  154. package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
  155. package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
  156. package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
  157. package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
  158. package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
  159. package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
  160. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
  161. package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
  162. package/examples/jsm/nodes/math/MathNode.js +12 -0
  163. package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
  164. package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
  165. package/examples/jsm/nodes/utils/ColorSpaceNode.js +1 -164
  166. package/examples/jsm/objects/Lensflare.js +3 -14
  167. package/examples/jsm/objects/MarchingCubes.js +46 -152
  168. package/examples/jsm/objects/Reflector.js +7 -0
  169. package/examples/jsm/objects/Refractor.js +7 -0
  170. package/examples/jsm/objects/Sky.js +1 -1
  171. package/examples/jsm/objects/Water.js +2 -2
  172. package/examples/jsm/objects/Water2.js +4 -8
  173. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
  174. package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
  175. package/examples/jsm/postprocessing/BloomPass.js +1 -1
  176. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  177. package/examples/jsm/postprocessing/ClearPass.js +1 -1
  178. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
  179. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  180. package/examples/jsm/postprocessing/EffectComposer.js +3 -3
  181. package/examples/jsm/postprocessing/FilmPass.js +1 -1
  182. package/examples/jsm/postprocessing/GlitchPass.js +4 -2
  183. package/examples/jsm/postprocessing/HalftonePass.js +1 -1
  184. package/examples/jsm/postprocessing/MaskPass.js +1 -1
  185. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  186. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  187. package/examples/jsm/postprocessing/SAOPass.js +2 -2
  188. package/examples/jsm/postprocessing/SMAAPass.js +1 -1
  189. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
  190. package/examples/jsm/postprocessing/SSAOPass.js +2 -1
  191. package/examples/jsm/postprocessing/SSRPass.js +1 -1
  192. package/examples/jsm/postprocessing/SSRrPass.js +1 -1
  193. package/examples/jsm/postprocessing/SavePass.js +1 -1
  194. package/examples/jsm/postprocessing/ShaderPass.js +1 -1
  195. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  196. package/examples/jsm/postprocessing/TexturePass.js +1 -1
  197. package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
  198. package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
  199. package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
  200. package/examples/jsm/renderers/nodes/Nodes.js +15 -13
  201. package/examples/jsm/renderers/nodes/ShaderNode.js +194 -41
  202. package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
  203. package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
  204. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
  205. package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
  206. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
  207. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
  208. package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
  209. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
  210. package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
  211. package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
  212. package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
  213. package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
  214. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
  215. package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
  216. package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
  217. package/examples/jsm/renderers/nodes/core/Node.js +32 -10
  218. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
  219. package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
  220. package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
  221. package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
  222. package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
  223. package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
  224. package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
  225. package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
  226. package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
  227. package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
  228. package/examples/jsm/renderers/nodes/core/constants.js +2 -0
  229. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +60 -43
  230. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
  231. package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
  232. package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
  233. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
  234. package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
  235. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +10 -2
  236. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
  237. package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
  238. package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
  239. package/examples/jsm/renderers/nodes/math/MathNode.js +90 -37
  240. package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
  241. package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
  242. package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
  243. package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
  244. package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
  245. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
  246. package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
  247. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
  248. package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
  249. package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
  250. package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
  251. package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
  252. package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
  253. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
  254. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
  255. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
  256. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
  257. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
  258. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
  259. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
  260. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
  261. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
  262. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
  263. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +12 -28
  264. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
  265. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +34 -27
  266. package/examples/jsm/renderers/webgpu/constants.js +2 -2
  267. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +453 -95
  268. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  269. package/examples/jsm/shaders/ConvolutionShader.js +0 -1
  270. package/examples/jsm/shaders/FXAAShader.js +1 -1
  271. package/examples/jsm/shaders/FilmShader.js +1 -1
  272. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  273. package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
  274. package/examples/jsm/shaders/SSRShader.js +1 -1
  275. package/examples/jsm/shaders/SSRrShader.js +1 -1
  276. package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
  277. package/examples/jsm/utils/GeometryUtils.js +1 -1
  278. package/examples/jsm/utils/RoughnessMipmapper.js +19 -31
  279. package/examples/jsm/utils/WorkerPool.js +11 -11
  280. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
  281. package/package.json +24 -18
  282. package/src/Three.Legacy.js +18 -0
  283. package/src/Three.js +1 -3
  284. package/src/cameras/StereoCamera.js +8 -7
  285. package/src/constants.js +1 -8
  286. package/src/core/Layers.js +7 -1
  287. package/src/core/Object3D.js +3 -1
  288. package/src/extras/PMREMGenerator.js +23 -109
  289. package/src/extras/core/Interpolations.js +1 -1
  290. package/src/geometries/LatheGeometry.js +70 -47
  291. package/src/helpers/CameraHelper.js +1 -1
  292. package/src/loaders/FileLoader.js +98 -144
  293. package/src/loaders/ImageLoader.js +9 -4
  294. package/src/loaders/LoaderUtils.js +26 -0
  295. package/src/loaders/MaterialLoader.js +7 -4
  296. package/src/loaders/ObjectLoader.js +2 -0
  297. package/src/materials/Material.js +4 -4
  298. package/src/materials/MeshPhysicalMaterial.js +20 -14
  299. package/src/math/Color.js +0 -38
  300. package/src/math/MathUtils.js +5 -16
  301. package/src/math/Ray.js +2 -2
  302. package/src/math/Sphere.js +10 -1
  303. package/src/objects/Skeleton.js +1 -0
  304. package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
  305. package/src/renderers/WebGLRenderer.js +105 -132
  306. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
  307. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
  308. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
  309. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -74
  310. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  311. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
  312. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
  313. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
  314. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  315. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  316. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +1 -1
  317. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
  318. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
  319. package/src/renderers/shaders/ShaderLib.js +6 -4
  320. package/src/renderers/shaders/UniformsLib.js +1 -2
  321. package/src/renderers/webgl/WebGLCapabilities.js +0 -2
  322. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  323. package/src/renderers/webgl/WebGLMaterials.js +27 -15
  324. package/src/renderers/webgl/WebGLMorphtargets.js +1 -0
  325. package/src/renderers/webgl/WebGLProgram.js +11 -24
  326. package/src/renderers/webgl/WebGLPrograms.js +194 -33
  327. package/src/renderers/webgl/WebGLRenderLists.js +4 -14
  328. package/src/renderers/webgl/WebGLShaderCache.js +120 -0
  329. package/src/renderers/webgl/WebGLShadowMap.js +14 -5
  330. package/src/renderers/webgl/WebGLState.js +76 -17
  331. package/src/renderers/webgl/WebGLTextures.js +367 -61
  332. package/src/renderers/webgl/WebGLUniforms.js +45 -1
  333. package/src/renderers/webxr/WebXRManager.js +77 -109
  334. package/src/scenes/Scene.js +1 -1
  335. package/src/textures/DataTexture.js +0 -2
  336. package/src/textures/DataTexture2DArray.js +0 -2
  337. package/src/textures/DataTexture3D.js +0 -2
  338. package/src/textures/FramebufferTexture.js +25 -0
  339. package/src/textures/Texture.js +6 -0
  340. package/examples/js/controls/DeviceOrientationControls.js +0 -147
  341. package/examples/js/libs/dat.gui.min.js +0 -14
  342. package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
  343. package/examples/jsm/libs/dat.gui.module.js +0 -3575
  344. package/examples/jsm/libs/glslang.js +0 -78
  345. package/examples/jsm/libs/glslang.wasm +0 -0
  346. package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
  347. package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
  348. package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
  349. package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
  350. package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
  351. package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
  352. package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
  353. package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
  354. package/src/extras/objects/ImmediateRenderObject.js +0 -31
package/src/math/Ray.js CHANGED
@@ -100,7 +100,7 @@ class Ray {
100
100
 
101
101
  distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {
102
102
 
103
- // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h
103
+ // from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h
104
104
  // It returns the min distance between the ray and the segment
105
105
  // defined by v0 and v1
106
106
  // It can also set two optional targets :
@@ -399,7 +399,7 @@ class Ray {
399
399
 
400
400
  // Compute the offset origin, edges, and normal.
401
401
 
402
- // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h
402
+ // from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h
403
403
 
404
404
  _edge1.subVectors( b, a );
405
405
  _edge2.subVectors( c, a );
@@ -193,7 +193,16 @@ class Sphere {
193
193
  // 1) Enclose the farthest point on the other sphere into this sphere.
194
194
  // 2) Enclose the opposite point of the farthest point into this sphere.
195
195
 
196
- _toFarthestPoint.subVectors( sphere.center, this.center ).normalize().multiplyScalar( sphere.radius );
196
+ if ( this.center.equals( sphere.center ) === true ) {
197
+
198
+ _toFarthestPoint.set( 0, 0, 1 ).multiplyScalar( sphere.radius );
199
+
200
+
201
+ } else {
202
+
203
+ _toFarthestPoint.subVectors( sphere.center, this.center ).normalize().multiplyScalar( sphere.radius );
204
+
205
+ }
197
206
 
198
207
  this.expandByPoint( _v1.copy( sphere.center ).add( _toFarthestPoint ) );
199
208
  this.expandByPoint( _v1.copy( sphere.center ).sub( _toFarthestPoint ) );
@@ -178,6 +178,7 @@ class Skeleton {
178
178
  boneMatrices.set( this.boneMatrices ); // copy current values
179
179
 
180
180
  const boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );
181
+ boneTexture.needsUpdate = true;
181
182
 
182
183
  this.boneMatrices = boneMatrices;
183
184
  this.boneTexture = boneTexture;
@@ -2,12 +2,16 @@ import { WebGLRenderTarget } from './WebGLRenderTarget.js';
2
2
 
3
3
  class WebGLMultisampleRenderTarget extends WebGLRenderTarget {
4
4
 
5
- constructor( width, height, options ) {
5
+ constructor( width, height, options = {} ) {
6
6
 
7
7
  super( width, height, options );
8
8
 
9
9
  this.samples = 4;
10
10
 
11
+ this.ignoreDepthForMultisampleCopy = options.ignoreDepth !== undefined ? options.ignoreDepth : true;
12
+ this.useRenderToTexture = ( options.useRenderToTexture !== undefined ) ? options.useRenderToTexture : false;
13
+ this.useRenderbuffer = this.useRenderToTexture === false;
14
+
11
15
  }
12
16
 
13
17
  copy( source ) {
@@ -15,6 +19,8 @@ class WebGLMultisampleRenderTarget extends WebGLRenderTarget {
15
19
  super.copy.call( this, source );
16
20
 
17
21
  this.samples = source.samples;
22
+ this.useRenderToTexture = source.useRenderToTexture;
23
+ this.useRenderbuffer = source.useRenderbuffer;
18
24
 
19
25
  return this;
20
26
 
@@ -1,4 +1,5 @@
1
1
  import {
2
+ REVISION,
2
3
  BackSide,
3
4
  DoubleSide,
4
5
  FrontSide,
@@ -110,7 +111,6 @@ function WebGLRenderer( parameters = {} ) {
110
111
 
111
112
  // physically based shading
112
113
 
113
- this.gammaFactor = 2.0; // for backwards compatibility
114
114
  this.outputEncoding = LinearEncoding;
115
115
 
116
116
  // physical lights
@@ -216,8 +216,10 @@ function WebGLRenderer( parameters = {} ) {
216
216
  failIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat
217
217
  };
218
218
 
219
- // event listeners must be registered before WebGL context is created, see #12753
219
+ // OffscreenCanvas does not have setAttribute, see #22811
220
+ if ( 'setAttribute' in _canvas ) _canvas.setAttribute( 'data-engine', `three.js r${REVISION}` );
220
221
 
222
+ // event listeners must be registered before WebGL context is created, see #12753
221
223
  _canvas.addEventListener( 'webglcontextlost', onContextLost, false );
222
224
  _canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );
223
225
 
@@ -303,7 +305,7 @@ function WebGLRenderer( parameters = {} ) {
303
305
  clipping = new WebGLClipping( properties );
304
306
  programCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );
305
307
  materials = new WebGLMaterials( properties );
306
- renderLists = new WebGLRenderLists( properties );
308
+ renderLists = new WebGLRenderLists();
307
309
  renderStates = new WebGLRenderStates( extensions, capabilities );
308
310
  background = new WebGLBackground( _this, cubemaps, state, objects, _premultipliedAlpha );
309
311
  shadowMap = new WebGLShadowMap( _this, objects, capabilities );
@@ -569,6 +571,7 @@ function WebGLRenderer( parameters = {} ) {
569
571
  cubeuvmaps.dispose();
570
572
  objects.dispose();
571
573
  bindingStates.dispose();
574
+ programCache.dispose();
572
575
 
573
576
  xr.dispose();
574
577
 
@@ -653,82 +656,17 @@ function WebGLRenderer( parameters = {} ) {
653
656
 
654
657
  } );
655
658
 
656
- }
657
-
658
- }
659
-
660
- // Buffer rendering
661
-
662
- function renderObjectImmediate( object, program ) {
663
-
664
- object.render( function ( object ) {
665
-
666
- _this.renderBufferImmediate( object, program );
667
-
668
- } );
669
-
670
- }
671
-
672
- this.renderBufferImmediate = function ( object, program ) {
673
-
674
- bindingStates.initAttributes();
675
-
676
- const buffers = properties.get( object );
677
-
678
- if ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer();
679
- if ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer();
680
- if ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer();
681
- if ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer();
682
-
683
- const programAttributes = program.getAttributes();
684
-
685
- if ( object.hasPositions ) {
686
-
687
- _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.position );
688
- _gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW );
689
-
690
- bindingStates.enableAttribute( programAttributes.position.location );
691
- _gl.vertexAttribPointer( programAttributes.position.location, 3, _gl.FLOAT, false, 0, 0 );
692
-
693
- }
694
-
695
- if ( object.hasNormals ) {
659
+ if ( material.isShaderMaterial ) {
696
660
 
697
- _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.normal );
698
- _gl.bufferData( _gl.ARRAY_BUFFER, object.normalArray, _gl.DYNAMIC_DRAW );
661
+ programCache.releaseShaderCache( material );
699
662
 
700
- bindingStates.enableAttribute( programAttributes.normal.location );
701
- _gl.vertexAttribPointer( programAttributes.normal.location, 3, _gl.FLOAT, false, 0, 0 );
702
-
703
- }
704
-
705
- if ( object.hasUvs ) {
706
-
707
- _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.uv );
708
- _gl.bufferData( _gl.ARRAY_BUFFER, object.uvArray, _gl.DYNAMIC_DRAW );
709
-
710
- bindingStates.enableAttribute( programAttributes.uv.location );
711
- _gl.vertexAttribPointer( programAttributes.uv.location, 2, _gl.FLOAT, false, 0, 0 );
712
-
713
- }
714
-
715
- if ( object.hasColors ) {
716
-
717
- _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.color );
718
- _gl.bufferData( _gl.ARRAY_BUFFER, object.colorArray, _gl.DYNAMIC_DRAW );
719
-
720
- bindingStates.enableAttribute( programAttributes.color.location );
721
- _gl.vertexAttribPointer( programAttributes.color.location, 3, _gl.FLOAT, false, 0, 0 );
663
+ }
722
664
 
723
665
  }
724
666
 
725
- bindingStates.disableUnusedAttributes();
726
-
727
- _gl.drawArrays( _gl.TRIANGLES, 0, object.count );
728
-
729
- object.count = 0;
667
+ }
730
668
 
731
- };
669
+ // Buffer rendering
732
670
 
733
671
  this.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {
734
672
 
@@ -1171,17 +1109,6 @@ function WebGLRenderer( parameters = {} ) {
1171
1109
 
1172
1110
  }
1173
1111
 
1174
- } else if ( object.isImmediateRenderObject ) {
1175
-
1176
- if ( sortObjects ) {
1177
-
1178
- _vector3.setFromMatrixPosition( object.matrixWorld )
1179
- .applyMatrix4( _projScreenMatrix );
1180
-
1181
- }
1182
-
1183
- currentRenderList.push( object, null, object.material, groupOrder, _vector3.z, null );
1184
-
1185
1112
  } else if ( object.isMesh || object.isLine || object.isPoints ) {
1186
1113
 
1187
1114
  if ( object.isSkinnedMesh ) {
@@ -1279,7 +1206,8 @@ function WebGLRenderer( parameters = {} ) {
1279
1206
  minFilter: LinearMipmapLinearFilter,
1280
1207
  magFilter: NearestFilter,
1281
1208
  wrapS: ClampToEdgeWrapping,
1282
- wrapT: ClampToEdgeWrapping
1209
+ wrapT: ClampToEdgeWrapping,
1210
+ useRenderToTexture: extensions.has( 'WEBGL_multisampled_render_to_texture' )
1283
1211
  } );
1284
1212
 
1285
1213
  }
@@ -1336,35 +1264,21 @@ function WebGLRenderer( parameters = {} ) {
1336
1264
 
1337
1265
  material.onBeforeRender( _this, scene, camera, geometry, object, group );
1338
1266
 
1339
- if ( object.isImmediateRenderObject ) {
1267
+ if ( material.transparent === true && material.side === DoubleSide ) {
1340
1268
 
1341
- const program = setProgram( camera, scene, geometry, material, object );
1269
+ material.side = BackSide;
1270
+ material.needsUpdate = true;
1271
+ _this.renderBufferDirect( camera, scene, geometry, material, object, group );
1342
1272
 
1343
- state.setMaterial( material );
1273
+ material.side = FrontSide;
1274
+ material.needsUpdate = true;
1275
+ _this.renderBufferDirect( camera, scene, geometry, material, object, group );
1344
1276
 
1345
- bindingStates.reset();
1346
-
1347
- renderObjectImmediate( object, program );
1277
+ material.side = DoubleSide;
1348
1278
 
1349
1279
  } else {
1350
1280
 
1351
- if ( material.transparent === true && material.side === DoubleSide ) {
1352
-
1353
- material.side = BackSide;
1354
- material.needsUpdate = true;
1355
- _this.renderBufferDirect( camera, scene, geometry, material, object, group );
1356
-
1357
- material.side = FrontSide;
1358
- material.needsUpdate = true;
1359
- _this.renderBufferDirect( camera, scene, geometry, material, object, group );
1360
-
1361
- material.side = DoubleSide;
1362
-
1363
- } else {
1364
-
1365
- _this.renderBufferDirect( camera, scene, geometry, material, object, group );
1366
-
1367
- }
1281
+ _this.renderBufferDirect( camera, scene, geometry, material, object, group );
1368
1282
 
1369
1283
  }
1370
1284
 
@@ -1423,7 +1337,7 @@ function WebGLRenderer( parameters = {} ) {
1423
1337
 
1424
1338
  parameters.uniforms = programCache.getUniforms( material );
1425
1339
 
1426
- material.onBuild( parameters, _this );
1340
+ material.onBuild( object, parameters, _this );
1427
1341
 
1428
1342
  material.onBeforeCompile( parameters, _this );
1429
1343
 
@@ -1500,6 +1414,7 @@ function WebGLRenderer( parameters = {} ) {
1500
1414
  materialProperties.numIntersection = parameters.numClipIntersection;
1501
1415
  materialProperties.vertexAlphas = parameters.vertexAlphas;
1502
1416
  materialProperties.vertexTangents = parameters.vertexTangents;
1417
+ materialProperties.toneMapping = parameters.toneMapping;
1503
1418
 
1504
1419
  }
1505
1420
 
@@ -1513,11 +1428,12 @@ function WebGLRenderer( parameters = {} ) {
1513
1428
  const environment = material.isMeshStandardMaterial ? scene.environment : null;
1514
1429
  const encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : _currentRenderTarget.texture.encoding;
1515
1430
  const envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );
1516
- const vertexAlphas = material.vertexColors === true && !! geometry && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;
1517
- const vertexTangents = !! material.normalMap && !! geometry && !! geometry.attributes.tangent;
1518
- const morphTargets = !! geometry && !! geometry.morphAttributes.position;
1519
- const morphNormals = !! geometry && !! geometry.morphAttributes.normal;
1520
- const morphTargetsCount = ( !! geometry && !! geometry.morphAttributes.position ) ? geometry.morphAttributes.position.length : 0;
1431
+ const vertexAlphas = material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;
1432
+ const vertexTangents = !! material.normalMap && !! geometry.attributes.tangent;
1433
+ const morphTargets = !! geometry.morphAttributes.position;
1434
+ const morphNormals = !! geometry.morphAttributes.normal;
1435
+ const morphTargetsCount = !! geometry.morphAttributes.position ? geometry.morphAttributes.position.length : 0;
1436
+ const toneMapping = material.toneMapped ? _this.toneMapping : NoToneMapping;
1521
1437
 
1522
1438
  const materialProperties = properties.get( material );
1523
1439
  const lights = currentRenderState.state.lights;
@@ -1599,6 +1515,10 @@ function WebGLRenderer( parameters = {} ) {
1599
1515
 
1600
1516
  needsProgramChange = true;
1601
1517
 
1518
+ } else if ( materialProperties.toneMapping !== toneMapping ) {
1519
+
1520
+ needsProgramChange = true;
1521
+
1602
1522
  } else if ( capabilities.isWebGL2 === true && materialProperties.morphTargetsCount !== morphTargetsCount ) {
1603
1523
 
1604
1524
  needsProgramChange = true;
@@ -1885,15 +1805,71 @@ function WebGLRenderer( parameters = {} ) {
1885
1805
 
1886
1806
  };
1887
1807
 
1808
+ this.setRenderTargetTextures = function ( renderTarget, colorTexture, depthTexture ) {
1809
+
1810
+ properties.get( renderTarget.texture ).__webglTexture = colorTexture;
1811
+ properties.get( renderTarget.depthTexture ).__webglTexture = depthTexture;
1812
+
1813
+ const renderTargetProperties = properties.get( renderTarget );
1814
+ renderTargetProperties.__hasExternalTextures = true;
1815
+
1816
+ if ( renderTargetProperties.__hasExternalTextures ) {
1817
+
1818
+ renderTargetProperties.__autoAllocateDepthBuffer = depthTexture === undefined;
1819
+
1820
+ if ( ! renderTargetProperties.__autoAllocateDepthBuffer ) {
1821
+
1822
+ // The multisample_render_to_texture extension doesn't work properly if there
1823
+ // are midframe flushes and an external depth buffer. Disable use of the extension.
1824
+ if ( renderTarget.useRenderToTexture ) {
1825
+
1826
+ console.warn( 'render-to-texture extension was disabled because an external texture was provided' );
1827
+ renderTarget.useRenderToTexture = false;
1828
+ renderTarget.useRenderbuffer = true;
1829
+
1830
+ }
1831
+
1832
+ }
1833
+
1834
+ }
1835
+
1836
+ };
1837
+
1838
+ this.setRenderTargetFramebuffer = function ( renderTarget, defaultFramebuffer ) {
1839
+
1840
+ const renderTargetProperties = properties.get( renderTarget );
1841
+ renderTargetProperties.__webglFramebuffer = defaultFramebuffer;
1842
+ renderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === undefined;
1843
+
1844
+ };
1845
+
1888
1846
  this.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {
1889
1847
 
1890
1848
  _currentRenderTarget = renderTarget;
1891
1849
  _currentActiveCubeFace = activeCubeFace;
1892
1850
  _currentActiveMipmapLevel = activeMipmapLevel;
1851
+ let useDefaultFramebuffer = true;
1852
+
1853
+ if ( renderTarget ) {
1854
+
1855
+ const renderTargetProperties = properties.get( renderTarget );
1893
1856
 
1894
- if ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {
1857
+ if ( renderTargetProperties.__useDefaultFramebuffer !== undefined ) {
1895
1858
 
1896
- textures.setupRenderTarget( renderTarget );
1859
+ // We need to make sure to rebind the framebuffer.
1860
+ state.bindFramebuffer( _gl.FRAMEBUFFER, null );
1861
+ useDefaultFramebuffer = false;
1862
+
1863
+ } else if ( renderTargetProperties.__webglFramebuffer === undefined ) {
1864
+
1865
+ textures.setupRenderTarget( renderTarget );
1866
+
1867
+ } else if ( renderTargetProperties.__hasExternalTextures ) {
1868
+
1869
+ // Color and depth texture must be rebound in order for the swapchain to update.
1870
+ textures.rebindTextures( renderTarget, properties.get( renderTarget.texture ).__webglTexture, properties.get( renderTarget.depthTexture ).__webglTexture );
1871
+
1872
+ }
1897
1873
 
1898
1874
  }
1899
1875
 
@@ -1918,7 +1894,7 @@ function WebGLRenderer( parameters = {} ) {
1918
1894
  framebuffer = __webglFramebuffer[ activeCubeFace ];
1919
1895
  isCube = true;
1920
1896
 
1921
- } else if ( renderTarget.isWebGLMultisampleRenderTarget ) {
1897
+ } else if ( renderTarget.useRenderbuffer ) {
1922
1898
 
1923
1899
  framebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;
1924
1900
 
@@ -1942,7 +1918,7 @@ function WebGLRenderer( parameters = {} ) {
1942
1918
 
1943
1919
  const framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
1944
1920
 
1945
- if ( framebufferBound && capabilities.drawBuffers ) {
1921
+ if ( framebufferBound && capabilities.drawBuffers && useDefaultFramebuffer ) {
1946
1922
 
1947
1923
  let needsUpdate = false;
1948
1924
 
@@ -2105,25 +2081,20 @@ function WebGLRenderer( parameters = {} ) {
2105
2081
 
2106
2082
  this.copyFramebufferToTexture = function ( position, texture, level = 0 ) {
2107
2083
 
2108
- const levelScale = Math.pow( 2, - level );
2109
- const width = Math.floor( texture.image.width * levelScale );
2110
- const height = Math.floor( texture.image.height * levelScale );
2111
-
2112
- let glFormat = utils.convert( texture.format );
2113
-
2114
- if ( capabilities.isWebGL2 ) {
2115
-
2116
- // Workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=1120100
2117
- // Not needed in Chrome 93+
2084
+ if ( texture.isFramebufferTexture !== true ) {
2118
2085
 
2119
- if ( glFormat === _gl.RGB ) glFormat = _gl.RGB8;
2120
- if ( glFormat === _gl.RGBA ) glFormat = _gl.RGBA8;
2086
+ console.error( 'THREE.WebGLRenderer: copyFramebufferToTexture() can only be used with FramebufferTexture.' );
2087
+ return;
2121
2088
 
2122
2089
  }
2123
2090
 
2091
+ const levelScale = Math.pow( 2, - level );
2092
+ const width = Math.floor( texture.image.width * levelScale );
2093
+ const height = Math.floor( texture.image.height * levelScale );
2094
+
2124
2095
  textures.setTexture2D( texture, 0 );
2125
2096
 
2126
- _gl.copyTexImage2D( _gl.TEXTURE_2D, level, glFormat, position.x, position.y, width, height, 0 );
2097
+ _gl.copyTexSubImage2D( _gl.TEXTURE_2D, level, 0, 0, position.x, position.y, width, height );
2127
2098
 
2128
2099
  state.unbindTexture();
2129
2100
 
@@ -2273,10 +2244,12 @@ function WebGLRenderer( parameters = {} ) {
2273
2244
 
2274
2245
  if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {
2275
2246
 
2276
- __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef
2247
+ __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );
2277
2248
 
2278
2249
  }
2279
2250
 
2280
2251
  }
2281
2252
 
2253
+ WebGLRenderer.prototype.isWebGLRenderer = true;
2254
+
2282
2255
  export { WebGLRenderer };
@@ -239,7 +239,7 @@ float V_Neubelt( float dotNV, float dotNL ) {
239
239
 
240
240
  }
241
241
 
242
- vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenTint, const in float sheenRoughness ) {
242
+ vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {
243
243
 
244
244
  vec3 halfDir = normalize( lightDir + viewDir );
245
245
 
@@ -250,7 +250,7 @@ vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 no
250
250
  float D = D_Charlie( sheenRoughness, dotNH );
251
251
  float V = V_Neubelt( dotNV, dotNL );
252
252
 
253
- return sheenTint * ( D * V );
253
+ return sheenColor * ( D * V );
254
254
 
255
255
  }
256
256
 
@@ -5,7 +5,7 @@ export default /* glsl */`
5
5
  uniform float bumpScale;
6
6
 
7
7
  // Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen
8
- // http://api.unrealengine.com/attachments/Engine/Rendering/LightingAndShadows/BumpMappingWithoutTangentSpace/mm_sfgrad_bump.pdf
8
+ // https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf
9
9
 
10
10
  // Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)
11
11
 
@@ -89,11 +89,7 @@ export default /* glsl */`
89
89
 
90
90
  float texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );
91
91
 
92
- vec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );
93
-
94
- vec2 f = fract( uv );
95
-
96
- uv += 0.5 - f;
92
+ vec2 uv = getUV( direction, face ) * ( faceSize - 1.0 ) + 0.5;
97
93
 
98
94
  if ( face > 2.0 ) {
99
95
 
@@ -117,25 +113,7 @@ export default /* glsl */`
117
113
 
118
114
  uv *= texelSize;
119
115
 
120
- vec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;
121
-
122
- uv.x += texelSize;
123
-
124
- vec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;
125
-
126
- uv.y += texelSize;
127
-
128
- vec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;
129
-
130
- uv.x -= texelSize;
131
-
132
- vec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;
133
-
134
- vec3 tm = mix( tl, tr, f.x );
135
-
136
- vec3 bm = mix( bl, br, f.x );
137
-
138
- return mix( tm, bm, f.y );
116
+ return texture2D( envMap, uv ).rgb;
139
117
 
140
118
  }
141
119
 
@@ -1,18 +1,9 @@
1
1
  export default /* glsl */`
2
- // For a discussion of what this is, please read this: http://lousodrome.net/blog/light/2013/05/26/gamma-correct-and-hdr-rendering-in-a-32-bits-buffer/
3
2
 
4
3
  vec4 LinearToLinear( in vec4 value ) {
5
4
  return value;
6
5
  }
7
6
 
8
- vec4 GammaToLinear( in vec4 value, in float gammaFactor ) {
9
- return vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );
10
- }
11
-
12
- vec4 LinearToGamma( in vec4 value, in float gammaFactor ) {
13
- return vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );
14
- }
15
-
16
7
  vec4 sRGBToLinear( in vec4 value ) {
17
8
  return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );
18
9
  }
@@ -21,69 +12,4 @@ vec4 LinearTosRGB( in vec4 value ) {
21
12
  return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );
22
13
  }
23
14
 
24
- vec4 RGBEToLinear( in vec4 value ) {
25
- return vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );
26
- }
27
-
28
- vec4 LinearToRGBE( in vec4 value ) {
29
- float maxComponent = max( max( value.r, value.g ), value.b );
30
- float fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );
31
- return vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );
32
- // return vec4( value.brg, ( 3.0 + 128.0 ) / 256.0 );
33
- }
34
-
35
- // reference: http://iwasbeingirony.blogspot.ca/2010/06/difference-between-rgbm-and-rgbd.html
36
- vec4 RGBMToLinear( in vec4 value, in float maxRange ) {
37
- return vec4( value.rgb * value.a * maxRange, 1.0 );
38
- }
39
-
40
- vec4 LinearToRGBM( in vec4 value, in float maxRange ) {
41
- float maxRGB = max( value.r, max( value.g, value.b ) );
42
- float M = clamp( maxRGB / maxRange, 0.0, 1.0 );
43
- M = ceil( M * 255.0 ) / 255.0;
44
- return vec4( value.rgb / ( M * maxRange ), M );
45
- }
46
-
47
- // reference: http://iwasbeingirony.blogspot.ca/2010/06/difference-between-rgbm-and-rgbd.html
48
- vec4 RGBDToLinear( in vec4 value, in float maxRange ) {
49
- return vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );
50
- }
51
-
52
- vec4 LinearToRGBD( in vec4 value, in float maxRange ) {
53
- float maxRGB = max( value.r, max( value.g, value.b ) );
54
- float D = max( maxRange / maxRGB, 1.0 );
55
- // NOTE: The implementation with min causes the shader to not compile on
56
- // a common Alcatel A502DL in Chrome 78/Android 8.1. Some research suggests
57
- // that the chipset is Mediatek MT6739 w/ IMG PowerVR GE8100 GPU.
58
- // D = min( floor( D ) / 255.0, 1.0 );
59
- D = clamp( floor( D ) / 255.0, 0.0, 1.0 );
60
- return vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );
61
- }
62
-
63
- // LogLuv reference: http://graphicrants.blogspot.ca/2009/04/rgbm-color-encoding.html
64
-
65
- // M matrix, for encoding
66
- const mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );
67
- vec4 LinearToLogLuv( in vec4 value ) {
68
- vec3 Xp_Y_XYZp = cLogLuvM * value.rgb;
69
- Xp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );
70
- vec4 vResult;
71
- vResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;
72
- float Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;
73
- vResult.w = fract( Le );
74
- vResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;
75
- return vResult;
76
- }
77
-
78
- // Inverse M matrix, for decoding
79
- const mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );
80
- vec4 LogLuvToLinear( in vec4 value ) {
81
- float Le = value.z * 255.0 + value.w;
82
- vec3 Xp_Y_XYZp;
83
- Xp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );
84
- Xp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;
85
- Xp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;
86
- vec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;
87
- return vec4( max( vRGB, 0.0 ), 1.0 );
88
- }
89
15
  `;
@@ -3,7 +3,6 @@ export default /* glsl */`
3
3
 
4
4
  uniform float envMapIntensity;
5
5
  uniform float flipEnvMap;
6
- uniform int maxMipLevel;
7
6
 
8
7
  #ifdef ENVMAP_TYPE_CUBE
9
8
  uniform samplerCube envMap;
@@ -14,7 +14,7 @@ vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {
14
14
 
15
15
  #ifdef USE_GRADIENTMAP
16
16
 
17
- return texture2D( gradientMap, coord ).rgb;
17
+ return vec3( texture2D( gradientMap, coord ).r );
18
18
 
19
19
  #else
20
20