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
@@ -12,13 +12,15 @@
12
12
  this.pointTopLeft = new THREE.Vector2();
13
13
  this.pointBottomRight = new THREE.Vector2();
14
14
  this.isDown = false;
15
- this.renderer.domElement.addEventListener( 'pointerdown', function ( event ) {
15
+
16
+ this.onPointerDown = function ( event ) {
16
17
 
17
18
  this.isDown = true;
18
19
  this.onSelectStart( event );
19
20
 
20
- }.bind( this ) );
21
- this.renderer.domElement.addEventListener( 'pointermove', function ( event ) {
21
+ }.bind( this );
22
+
23
+ this.onPointerMove = function ( event ) {
22
24
 
23
25
  if ( this.isDown ) {
24
26
 
@@ -26,13 +28,26 @@
26
28
 
27
29
  }
28
30
 
29
- }.bind( this ) );
30
- this.renderer.domElement.addEventListener( 'pointerup', function ( event ) {
31
+ }.bind( this );
32
+
33
+ this.onPointerUp = function () {
31
34
 
32
35
  this.isDown = false;
33
- this.onSelectOver( event );
36
+ this.onSelectOver();
37
+
38
+ }.bind( this );
39
+
40
+ this.renderer.domElement.addEventListener( 'pointerdown', this.onPointerDown );
41
+ this.renderer.domElement.addEventListener( 'pointermove', this.onPointerMove );
42
+ this.renderer.domElement.addEventListener( 'pointerup', this.onPointerUp );
43
+
44
+ }
45
+
46
+ dispose() {
34
47
 
35
- }.bind( this ) );
48
+ this.renderer.domElement.removeEventListener( 'pointerdown', this.onPointerDown );
49
+ this.renderer.domElement.removeEventListener( 'pointermove', this.onPointerMove );
50
+ this.renderer.domElement.removeEventListener( 'pointerup', this.onPointerUp );
36
51
 
37
52
  }
38
53
 
@@ -28,6 +28,8 @@
28
28
  const ltc_float_2 = new Float32Array( LTC_MAT_2 );
29
29
  THREE.UniformsLib.LTC_FLOAT_1 = new THREE.DataTexture( ltc_float_1, 64, 64, THREE.RGBAFormat, THREE.FloatType, THREE.UVMapping, THREE.ClampToEdgeWrapping, THREE.ClampToEdgeWrapping, THREE.LinearFilter, THREE.NearestFilter, 1 );
30
30
  THREE.UniformsLib.LTC_FLOAT_2 = new THREE.DataTexture( ltc_float_2, 64, 64, THREE.RGBAFormat, THREE.FloatType, THREE.UVMapping, THREE.ClampToEdgeWrapping, THREE.ClampToEdgeWrapping, THREE.LinearFilter, THREE.NearestFilter, 1 );
31
+ THREE.UniformsLib.LTC_FLOAT_1.needsUpdate = true;
32
+ THREE.UniformsLib.LTC_FLOAT_2.needsUpdate = true;
31
33
  const ltc_half_1 = new Uint16Array( LTC_MAT_1.length );
32
34
  LTC_MAT_1.forEach( function ( x, index ) {
33
35
 
@@ -42,6 +44,8 @@
42
44
  } );
43
45
  THREE.UniformsLib.LTC_HALF_1 = new THREE.DataTexture( ltc_half_1, 64, 64, THREE.RGBAFormat, THREE.HalfFloatType, THREE.UVMapping, THREE.ClampToEdgeWrapping, THREE.ClampToEdgeWrapping, THREE.LinearFilter, THREE.NearestFilter, 1 );
44
46
  THREE.UniformsLib.LTC_HALF_2 = new THREE.DataTexture( ltc_half_2, 64, 64, THREE.RGBAFormat, THREE.HalfFloatType, THREE.UVMapping, THREE.ClampToEdgeWrapping, THREE.ClampToEdgeWrapping, THREE.LinearFilter, THREE.NearestFilter, 1 );
47
+ THREE.UniformsLib.LTC_HALF_1.needsUpdate = true;
48
+ THREE.UniformsLib.LTC_HALF_2.needsUpdate = true;
45
49
 
46
50
  }
47
51
 
@@ -7,6 +7,7 @@
7
7
  * dashed: <boolean>,
8
8
  * dashScale: <float>,
9
9
  * dashSize: <float>,
10
+ * dashOffset: <float>,
10
11
  * gapSize: <float>,
11
12
  * resolution: <Vector2>, // to be set by renderer
12
13
  * }
@@ -21,6 +22,9 @@
21
22
  resolution: {
22
23
  value: new THREE.Vector2( 1, 1 )
23
24
  },
25
+ dashOffset: {
26
+ value: 0
27
+ },
24
28
  dashScale: {
25
29
  value: 1
26
30
  },
@@ -52,10 +56,23 @@
52
56
  attribute vec3 instanceColorStart;
53
57
  attribute vec3 instanceColorEnd;
54
58
 
55
- varying vec2 vUv;
56
- varying vec4 worldPos;
57
- varying vec3 worldStart;
58
- varying vec3 worldEnd;
59
+ #ifdef WORLD_UNITS
60
+
61
+ varying vec4 worldPos;
62
+ varying vec3 worldStart;
63
+ varying vec3 worldEnd;
64
+
65
+ #ifdef USE_DASH
66
+
67
+ varying vec2 vUv;
68
+
69
+ #endif
70
+
71
+ #else
72
+
73
+ varying vec2 vUv;
74
+
75
+ #endif
59
76
 
60
77
  #ifdef USE_DASH
61
78
 
@@ -92,19 +109,26 @@
92
109
  #ifdef USE_DASH
93
110
 
94
111
  vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;
112
+ vUv = uv;
95
113
 
96
114
  #endif
97
115
 
98
116
  float aspect = resolution.x / resolution.y;
99
117
 
100
- vUv = uv;
101
-
102
118
  // camera space
103
119
  vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );
104
120
  vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );
105
121
 
106
- worldStart = start.xyz;
107
- worldEnd = end.xyz;
122
+ #ifdef WORLD_UNITS
123
+
124
+ worldStart = start.xyz;
125
+ worldEnd = end.xyz;
126
+
127
+ #else
128
+
129
+ vUv = uv;
130
+
131
+ #endif
108
132
 
109
133
  // special case for perspective projection, and segments that terminate either in, or behind, the camera plane
110
134
  // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space
@@ -254,15 +278,31 @@
254
278
 
255
279
  #ifdef USE_DASH
256
280
 
281
+ uniform float dashOffset;
257
282
  uniform float dashSize;
258
283
  uniform float gapSize;
259
284
 
260
285
  #endif
261
286
 
262
287
  varying float vLineDistance;
263
- varying vec4 worldPos;
264
- varying vec3 worldStart;
265
- varying vec3 worldEnd;
288
+
289
+ #ifdef WORLD_UNITS
290
+
291
+ varying vec4 worldPos;
292
+ varying vec3 worldStart;
293
+ varying vec3 worldEnd;
294
+
295
+ #ifdef USE_DASH
296
+
297
+ varying vec2 vUv;
298
+
299
+ #endif
300
+
301
+ #else
302
+
303
+ varying vec2 vUv;
304
+
305
+ #endif
266
306
 
267
307
  #include <common>
268
308
  #include <color_pars_fragment>
@@ -270,8 +310,6 @@
270
310
  #include <logdepthbuf_pars_fragment>
271
311
  #include <clipping_planes_pars_fragment>
272
312
 
273
- varying vec2 vUv;
274
-
275
313
  vec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) {
276
314
 
277
315
  float mua;
@@ -309,7 +347,7 @@
309
347
 
310
348
  if ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps
311
349
 
312
- if ( mod( vLineDistance, dashSize + gapSize ) > dashSize ) discard; // todo - FIX
350
+ if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX
313
351
 
314
352
  #endif
315
353
 
@@ -330,7 +368,7 @@
330
368
 
331
369
  #ifndef USE_DASH
332
370
 
333
- #ifdef ALPHA_TO_COVERAGE
371
+ #ifdef USE_ALPHA_TO_COVERAGE
334
372
 
335
373
  float dnorm = fwidth( norm );
336
374
  alpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm );
@@ -349,7 +387,7 @@
349
387
 
350
388
  #else
351
389
 
352
- #ifdef ALPHA_TO_COVERAGE
390
+ #ifdef USE_ALPHA_TO_COVERAGE
353
391
 
354
392
  // artifacts appear on some hardware if a derivative is taken within a conditional
355
393
  float a = vUv.x;
@@ -566,12 +604,12 @@
566
604
  enumerable: true,
567
605
  get: function () {
568
606
 
569
- return Boolean( 'ALPHA_TO_COVERAGE' in this.defines );
607
+ return Boolean( 'USE_ALPHA_TO_COVERAGE' in this.defines );
570
608
 
571
609
  },
572
610
  set: function ( value ) {
573
611
 
574
- if ( Boolean( value ) !== Boolean( 'ALPHA_TO_COVERAGE' in this.defines ) ) {
612
+ if ( Boolean( value ) !== Boolean( 'USE_ALPHA_TO_COVERAGE' in this.defines ) ) {
575
613
 
576
614
  this.needsUpdate = true;
577
615
 
@@ -579,12 +617,12 @@
579
617
 
580
618
  if ( value === true ) {
581
619
 
582
- this.defines.ALPHA_TO_COVERAGE = '';
620
+ this.defines.USE_ALPHA_TO_COVERAGE = '';
583
621
  this.extensions.derivatives = true;
584
622
 
585
623
  } else {
586
624
 
587
- delete this.defines.ALPHA_TO_COVERAGE;
625
+ delete this.defines.USE_ALPHA_TO_COVERAGE;
588
626
  this.extensions.derivatives = false;
589
627
 
590
628
  }
@@ -22,7 +22,29 @@
22
22
 
23
23
  const _sphere = new THREE.Sphere();
24
24
 
25
- const _clipToWorldVector = new THREE.Vector4();
25
+ const _clipToWorldVector = new THREE.Vector4(); // Returns the margin required to expand by in world space given the distance from the camera,
26
+ // line width, resolution, and camera projection
27
+
28
+
29
+ function getWorldSpaceHalfWidth( camera, distance, lineWidth, resolution ) {
30
+
31
+ // transform into clip space, adjust the x and y values by the pixel width offset, then
32
+ // transform back into world space to get world offset. Note clip space is [-1, 1] so full
33
+ // width does not need to be halved.
34
+ _clipToWorldVector.set( 0, 0, - distance, 1.0 ).applyMatrix4( camera.projectionMatrix );
35
+
36
+ _clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );
37
+
38
+ _clipToWorldVector.x = lineWidth / resolution.width;
39
+ _clipToWorldVector.y = lineWidth / resolution.height;
40
+
41
+ _clipToWorldVector.applyMatrix4( camera.projectionMatrixInverse );
42
+
43
+ _clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );
44
+
45
+ return Math.abs( Math.max( _clipToWorldVector.x, _clipToWorldVector.y ) );
46
+
47
+ }
26
48
 
27
49
  class LineSegments2 extends THREE.Mesh {
28
50
 
@@ -84,10 +106,7 @@
84
106
  const instanceStart = geometry.attributes.instanceStart;
85
107
  const instanceEnd = geometry.attributes.instanceEnd; // camera forward is negative
86
108
 
87
- const near = - camera.near; // clip space is [ - 1, 1 ] so multiply by two to get the full
88
- // width in clip space
89
-
90
- const ssMaxWidth = 2.0 * Math.max( lineWidth / resolution.width, lineWidth / resolution.height ); //
109
+ const near = - camera.near; //
91
110
  // check if we intersect the sphere bounds
92
111
 
93
112
  if ( geometry.boundingSphere === null ) {
@@ -98,16 +117,9 @@
98
117
 
99
118
  _sphere.copy( geometry.boundingSphere ).applyMatrix4( matrixWorld );
100
119
 
101
- const distanceToSphere = Math.max( camera.near, _sphere.distanceToPoint( ray.origin ) ); // get the w component to scale the world space line width
102
-
103
- _clipToWorldVector.set( 0, 0, - distanceToSphere, 1.0 ).applyMatrix4( camera.projectionMatrix );
104
-
105
- _clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );
106
-
107
- _clipToWorldVector.applyMatrix4( camera.projectionMatrixInverse ); // increase the sphere bounds by the worst case line screen space width
108
-
120
+ const distanceToSphere = Math.max( camera.near, _sphere.distanceToPoint( ray.origin ) ); // increase the sphere bounds by the worst case line screen space width
109
121
 
110
- const sphereMargin = Math.abs( ssMaxWidth / _clipToWorldVector.w ) * 0.5;
122
+ const sphereMargin = getWorldSpaceHalfWidth( camera, distanceToSphere, lineWidth, resolution );
111
123
  _sphere.radius += sphereMargin;
112
124
 
113
125
  if ( raycaster.ray.intersectsSphere( _sphere ) === false ) {
@@ -126,16 +138,9 @@
126
138
 
127
139
  _box.copy( geometry.boundingBox ).applyMatrix4( matrixWorld );
128
140
 
129
- const distanceToBox = Math.max( camera.near, _box.distanceToPoint( ray.origin ) ); // get the w component to scale the world space line width
130
-
131
- _clipToWorldVector.set( 0, 0, - distanceToBox, 1.0 ).applyMatrix4( camera.projectionMatrix );
132
-
133
- _clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );
134
-
135
- _clipToWorldVector.applyMatrix4( camera.projectionMatrixInverse ); // increase the sphere bounds by the worst case line screen space width
136
-
141
+ const distanceToBox = Math.max( camera.near, _box.distanceToPoint( ray.origin ) ); // increase the box bounds by the worst case line screen space width
137
142
 
138
- const boxMargin = Math.abs( ssMaxWidth / _clipToWorldVector.w ) * 0.5;
143
+ const boxMargin = getWorldSpaceHalfWidth( camera, distanceToBox, lineWidth, resolution );
139
144
  _box.max.x += boxMargin;
140
145
  _box.max.y += boxMargin;
141
146
  _box.max.z += boxMargin;
@@ -276,7 +281,7 @@
276
281
 
277
282
  }
278
283
 
279
- LineSegments2.prototype.LineSegments2 = true;
284
+ LineSegments2.prototype.isLineSegments2 = true;
280
285
 
281
286
  THREE.LineSegments2 = LineSegments2;
282
287
 
@@ -231,6 +231,10 @@
231
231
 
232
232
  }
233
233
 
234
+ map.wrapS = texture.wrapU === 0 ? THREE.RepeatWrapping : THREE.ClampToEdgeWrapping;
235
+ map.wrapT = texture.wrapV === 0 ? THREE.RepeatWrapping : THREE.ClampToEdgeWrapping;
236
+ map.repeat.set( texture.repeat[ 0 ], texture.repeat[ 1 ] );
237
+
234
238
  }
235
239
 
236
240
  }
@@ -778,7 +782,8 @@
778
782
  const layers = [];
779
783
  const views = [];
780
784
  const namedViews = [];
781
- const groups = []; //Handle objects
785
+ const groups = [];
786
+ const strings = []; //Handle objects
782
787
 
783
788
  const objs = doc.objects();
784
789
  const cnt = objs.count;
@@ -840,6 +845,13 @@
840
845
  type: textureType
841
846
  };
842
847
  const image = doc.getEmbeddedFileAsBase64( _texture.fileName );
848
+ texture.wrapU = _texture.wrapU;
849
+ texture.wrapV = _texture.wrapV;
850
+ texture.wrapW = _texture.wrapW;
851
+
852
+ const uvw = _texture.uvwTransform.toFloatArray( true );
853
+
854
+ texture.repeat = [ uvw[ 0 ], uvw[ 5 ] ];
843
855
 
844
856
  if ( image ) {
845
857
 
@@ -959,18 +971,18 @@
959
971
  // console.log( `Dimstyle Count: ${doc.dimstyles().count()}` );
960
972
  // Handle bitmaps
961
973
  // console.log( `Bitmap Count: ${doc.bitmaps().count()}` );
962
- // Handle strings -- this seems to be broken at the moment in rhino3dm
974
+ // Handle strings
963
975
  // console.log( `Document Strings Count: ${doc.strings().count()}` );
976
+ // Note: doc.strings().documentUserTextCount() counts any doc.strings defined in a section
977
+ //console.log( `Document User Text Count: ${doc.strings().documentUserTextCount()}` );
978
+
979
+ const strings_count = doc.strings().count();
964
980
 
965
- /*
966
- for( var i = 0; i < doc.strings().count(); i++ ){
967
- var _string= doc.strings().get( i );
968
- console.log(_string);
969
- var string = extractProperties( _group );
970
- strings.push( string );
971
- _string.delete();
972
- }
973
- */
981
+ for ( let i = 0; i < strings_count; i ++ ) {
982
+
983
+ strings.push( doc.strings().get( i ) );
984
+
985
+ }
974
986
 
975
987
  doc.delete();
976
988
  return {
@@ -980,6 +992,7 @@
980
992
  views,
981
993
  namedViews,
982
994
  groups,
995
+ strings,
983
996
  settings
984
997
  };
985
998
 
@@ -968,7 +968,7 @@
968
968
  geometry.setIndex( new THREE.BufferAttribute( meshData[ 'triangles' ], 1 ) );
969
969
  geometry.setAttribute( 'position', new THREE.BufferAttribute( meshData[ 'vertices' ], 3 ) );
970
970
  const material = new THREE.MeshPhongMaterial( {
971
- color: 0xaaaaff,
971
+ color: 0xffffff,
972
972
  flatShading: true
973
973
  } );
974
974
  const mesh = new THREE.Mesh( geometry, material );
@@ -1299,7 +1299,7 @@
1299
1299
  for ( let i = 0; i < buildData.length; i ++ ) {
1300
1300
 
1301
1301
  const buildItem = buildData[ i ];
1302
- const object3D = objects[ buildItem[ 'objectId' ] ]; // apply transform
1302
+ const object3D = objects[ buildItem[ 'objectId' ] ].clone(); // apply transform
1303
1303
 
1304
1304
  const transform = buildItem[ 'transform' ];
1305
1305
 
@@ -4,8 +4,6 @@
4
4
  * Description: Early release of an AMF THREE.Loader following the pattern of the
5
5
  * example loaders in the three.js project.
6
6
  *
7
- * More information about the AMF format: http://amf.wikispaces.com
8
- *
9
7
  * Usage:
10
8
  * const loader = new AMFLoader();
11
9
  * loader.load('/path/to/project.amf', function(objecttree) {
@@ -1110,6 +1110,10 @@
1110
1110
  data.parameters = parseEffectParameters( child );
1111
1111
  break;
1112
1112
 
1113
+ case 'extra':
1114
+ data.extra = parseEffectExtra( child );
1115
+ break;
1116
+
1113
1117
  }
1114
1118
 
1115
1119
  }
@@ -1141,7 +1145,7 @@
1141
1145
 
1142
1146
  case 'transparent':
1143
1147
  data[ child.nodeName ] = {
1144
- opaque: child.getAttribute( 'opaque' ),
1148
+ opaque: child.hasAttribute( 'opaque' ) ? child.getAttribute( 'opaque' ) : 'A_ONE',
1145
1149
  data: parseEffectParameter( child )
1146
1150
  };
1147
1151
  break;
@@ -1267,6 +1271,10 @@
1267
1271
 
1268
1272
  break;
1269
1273
 
1274
+ case 'bump':
1275
+ data[ child.nodeName ] = parseEffectExtraTechniqueBump( child );
1276
+ break;
1277
+
1270
1278
  }
1271
1279
 
1272
1280
  }
@@ -1311,6 +1319,37 @@
1311
1319
  data[ child.nodeName ] = parseInt( child.textContent );
1312
1320
  break;
1313
1321
 
1322
+ case 'bump':
1323
+ data[ child.nodeName ] = parseEffectExtraTechniqueBump( child );
1324
+ break;
1325
+
1326
+ }
1327
+
1328
+ }
1329
+
1330
+ return data;
1331
+
1332
+ }
1333
+
1334
+ function parseEffectExtraTechniqueBump( xml ) {
1335
+
1336
+ var data = {};
1337
+
1338
+ for ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {
1339
+
1340
+ var child = xml.childNodes[ i ];
1341
+ if ( child.nodeType !== 1 ) continue;
1342
+
1343
+ switch ( child.nodeName ) {
1344
+
1345
+ case 'texture':
1346
+ data[ child.nodeName ] = {
1347
+ id: child.getAttribute( 'texture' ),
1348
+ texcoord: child.getAttribute( 'texcoord' ),
1349
+ extra: parseEffectParameterTexture( child )
1350
+ };
1351
+ break;
1352
+
1314
1353
  }
1315
1354
 
1316
1355
  }
@@ -1383,7 +1422,6 @@
1383
1422
 
1384
1423
  const effect = getEffect( data.url );
1385
1424
  const technique = effect.profile.technique;
1386
- const extra = effect.profile.extra;
1387
1425
  let material;
1388
1426
 
1389
1427
  switch ( technique.type ) {
@@ -1570,9 +1608,28 @@
1570
1608
  } //
1571
1609
 
1572
1610
 
1573
- if ( extra !== undefined && extra.technique !== undefined && extra.technique.double_sided === 1 ) {
1611
+ if ( technique.extra !== undefined && technique.extra.technique !== undefined ) {
1612
+
1613
+ const techniques = technique.extra.technique;
1574
1614
 
1575
- material.side = THREE.DoubleSide;
1615
+ for ( const k in techniques ) {
1616
+
1617
+ const v = techniques[ k ];
1618
+
1619
+ switch ( k ) {
1620
+
1621
+ case 'double_sided':
1622
+ material.side = v === 1 ? THREE.DoubleSide : THREE.FrontSide;
1623
+ break;
1624
+
1625
+ case 'bump':
1626
+ material.normalMap = getTexture( v.texture );
1627
+ material.normalScale = new THREE.Vector2( 1, 1 );
1628
+ break;
1629
+
1630
+ }
1631
+
1632
+ }
1576
1633
 
1577
1634
  }
1578
1635