super-three 0.152.0 → 0.154.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 (339) hide show
  1. package/build/three.cjs +779 -557
  2. package/build/three.js +779 -557
  3. package/build/three.min.js +2 -1
  4. package/build/three.module.js +770 -539
  5. package/build/three.module.min.js +2 -1
  6. package/examples/jsm/cameras/CinematicCamera.js +1 -2
  7. package/examples/jsm/capabilities/WebGPU.js +15 -1
  8. package/examples/jsm/controls/ArcballControls.js +2 -1
  9. package/examples/jsm/controls/FlyControls.js +25 -9
  10. package/examples/jsm/controls/OrbitControls.js +5 -1
  11. package/examples/jsm/csm/CSM.js +1 -3
  12. package/examples/jsm/effects/AnaglyphEffect.js +6 -20
  13. package/examples/jsm/effects/OutlineEffect.js +1 -1
  14. package/examples/jsm/effects/ParallaxBarrierEffect.js +3 -0
  15. package/examples/jsm/environments/RoomEnvironment.js +6 -2
  16. package/examples/jsm/exporters/GLTFExporter.js +74 -2
  17. package/examples/jsm/exporters/USDZExporter.js +170 -129
  18. package/examples/jsm/helpers/ViewHelper.js +1 -1
  19. package/examples/jsm/lines/LineMaterial.js +1 -1
  20. package/examples/jsm/loaders/3DMLoader.js +1 -1
  21. package/examples/jsm/loaders/3MFLoader.js +5 -1
  22. package/examples/jsm/loaders/AMFLoader.js +5 -1
  23. package/examples/jsm/loaders/ColladaLoader.js +4 -1
  24. package/examples/jsm/loaders/DRACOLoader.js +2 -0
  25. package/examples/jsm/loaders/FBXLoader.js +9 -2
  26. package/examples/jsm/loaders/GLTFLoader.js +230 -94
  27. package/examples/jsm/loaders/KTX2Loader.js +106 -47
  28. package/examples/jsm/loaders/LDrawLoader.js +4 -7
  29. package/examples/jsm/loaders/MMDLoader.js +40 -13
  30. package/examples/jsm/loaders/PCDLoader.js +25 -10
  31. package/examples/jsm/loaders/PDBLoader.js +7 -2
  32. package/examples/jsm/loaders/PLYLoader.js +30 -8
  33. package/examples/jsm/loaders/STLLoader.js +8 -3
  34. package/examples/jsm/loaders/VRMLLoader.js +55 -7
  35. package/examples/jsm/loaders/VTKLoader.js +12 -4
  36. package/examples/jsm/loaders/XYZLoader.js +9 -3
  37. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -2
  38. package/examples/jsm/math/Lut.js +5 -4
  39. package/examples/jsm/math/MeshSurfaceSampler.js +82 -37
  40. package/examples/jsm/misc/GPUComputationRenderer.js +1 -0
  41. package/examples/jsm/misc/VolumeSlice.js +3 -1
  42. package/examples/jsm/nodes/Nodes.js +22 -16
  43. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +99 -0
  44. package/examples/jsm/nodes/accessors/BufferNode.js +2 -2
  45. package/examples/jsm/nodes/accessors/CameraNode.js +25 -4
  46. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +7 -1
  47. package/examples/jsm/nodes/accessors/InstanceNode.js +29 -12
  48. package/examples/jsm/nodes/accessors/MaterialNode.js +55 -47
  49. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +2 -2
  50. package/examples/jsm/nodes/accessors/ModelNode.js +3 -1
  51. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +4 -9
  52. package/examples/jsm/nodes/accessors/MorphNode.js +70 -0
  53. package/examples/jsm/nodes/accessors/NormalNode.js +3 -2
  54. package/examples/jsm/nodes/accessors/Object3DNode.js +10 -2
  55. package/examples/jsm/nodes/accessors/ReferenceNode.js +2 -2
  56. package/examples/jsm/nodes/accessors/SceneNode.js +46 -0
  57. package/examples/jsm/nodes/accessors/SkinningNode.js +43 -62
  58. package/examples/jsm/nodes/accessors/StorageBufferNode.js +2 -2
  59. package/examples/jsm/nodes/accessors/TangentNode.js +2 -2
  60. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +94 -0
  61. package/examples/jsm/nodes/accessors/TextureNode.js +68 -6
  62. package/examples/jsm/nodes/accessors/TextureSizeNode.js +35 -0
  63. package/examples/jsm/nodes/accessors/UVNode.js +1 -1
  64. package/examples/jsm/nodes/code/CodeNode.js +3 -0
  65. package/examples/jsm/nodes/code/FunctionNode.js +25 -4
  66. package/examples/jsm/nodes/core/AttributeNode.js +1 -1
  67. package/examples/jsm/nodes/core/BypassNode.js +2 -2
  68. package/examples/jsm/nodes/core/ContextNode.js +2 -0
  69. package/examples/jsm/nodes/core/IndexNode.js +66 -0
  70. package/examples/jsm/nodes/core/LightingModel.js +2 -1
  71. package/examples/jsm/nodes/core/Node.js +13 -16
  72. package/examples/jsm/nodes/core/NodeAttribute.js +2 -1
  73. package/examples/jsm/nodes/core/NodeBuilder.js +86 -8
  74. package/examples/jsm/nodes/core/NodeUtils.js +10 -0
  75. package/examples/jsm/nodes/core/PropertyNode.js +6 -2
  76. package/examples/jsm/nodes/core/StackNode.js +8 -1
  77. package/examples/jsm/nodes/core/UniformNode.js +1 -1
  78. package/examples/jsm/nodes/core/VarNode.js +1 -3
  79. package/examples/jsm/nodes/display/BlendModeNode.js +9 -9
  80. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +7 -7
  81. package/examples/jsm/nodes/display/ColorSpaceNode.js +50 -49
  82. package/examples/jsm/nodes/display/NormalMapNode.js +3 -3
  83. package/examples/jsm/nodes/display/ToneMappingNode.js +24 -15
  84. package/examples/jsm/nodes/display/ViewportDepthNode.js +69 -0
  85. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +34 -0
  86. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +7 -6
  87. package/examples/jsm/nodes/display/ViewportTextureNode.js +33 -19
  88. package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +5 -5
  89. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -8
  90. package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  91. package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +43 -0
  92. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +4 -4
  93. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +2 -2
  94. package/examples/jsm/nodes/functions/BSDF/EnvironmentBRDF.js +13 -0
  95. package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +2 -4
  96. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  97. package/examples/jsm/nodes/functions/PhongLightingModel.js +7 -7
  98. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +132 -19
  99. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +2 -2
  100. package/examples/jsm/nodes/functions/material/getRoughness.js +3 -3
  101. package/examples/jsm/nodes/geometry/RangeNode.js +33 -51
  102. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +6 -3
  103. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -2
  104. package/examples/jsm/nodes/lighting/EnvironmentNode.js +107 -62
  105. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +2 -2
  106. package/examples/jsm/nodes/lighting/LightUtils.js +2 -2
  107. package/examples/jsm/nodes/lighting/LightingContextNode.js +17 -15
  108. package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
  109. package/examples/jsm/nodes/lighting/SpotLightNode.js +3 -3
  110. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -15
  111. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -15
  112. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -10
  113. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -9
  114. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +41 -0
  115. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +1 -14
  116. package/examples/jsm/nodes/materials/NodeMaterial.js +119 -29
  117. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -9
  118. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  119. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +3 -3
  120. package/examples/jsm/nodes/materialx/lib/mx_noise.js +14 -14
  121. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +4 -4
  122. package/examples/jsm/nodes/math/MathNode.js +6 -0
  123. package/examples/jsm/nodes/math/OperatorNode.js +1 -1
  124. package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
  125. package/examples/jsm/nodes/shadernode/ShaderNode.js +60 -33
  126. package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -3
  127. package/examples/jsm/nodes/utils/LoopNode.js +186 -0
  128. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +1 -1
  129. package/examples/jsm/objects/GroundProjectedSkybox.js +1 -1
  130. package/examples/jsm/objects/Lensflare.js +3 -4
  131. package/examples/jsm/objects/MarchingCubes.js +5 -1
  132. package/examples/jsm/objects/Reflector.js +4 -1
  133. package/examples/jsm/objects/Refractor.js +1 -1
  134. package/examples/jsm/objects/Sky.js +1 -1
  135. package/examples/jsm/objects/Water.js +2 -1
  136. package/examples/jsm/objects/Water2.js +1 -1
  137. package/examples/jsm/offscreen/scene.js +1 -0
  138. package/examples/jsm/physics/RapierPhysics.js +93 -133
  139. package/examples/jsm/postprocessing/AfterimagePass.js +3 -0
  140. package/examples/jsm/postprocessing/BloomPass.js +7 -2
  141. package/examples/jsm/postprocessing/BokehPass.js +3 -2
  142. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  143. package/examples/jsm/postprocessing/EffectComposer.js +4 -1
  144. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  145. package/examples/jsm/postprocessing/OutlinePass.js +8 -9
  146. package/examples/jsm/postprocessing/OutputPass.js +72 -0
  147. package/examples/jsm/postprocessing/RenderPixelatedPass.js +4 -3
  148. package/examples/jsm/postprocessing/SAOPass.js +4 -2
  149. package/examples/jsm/postprocessing/SMAAPass.js +5 -2
  150. package/examples/jsm/postprocessing/SSAARenderPass.js +5 -13
  151. package/examples/jsm/postprocessing/SSAOPass.js +4 -2
  152. package/examples/jsm/postprocessing/SSRPass.js +3 -1
  153. package/examples/jsm/postprocessing/SavePass.js +5 -2
  154. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  155. package/examples/jsm/postprocessing/TAARenderPass.js +17 -4
  156. package/examples/jsm/postprocessing/TexturePass.js +2 -1
  157. package/examples/jsm/postprocessing/UnrealBloomPass.js +13 -13
  158. package/examples/jsm/renderers/{webgpu/WebGPUAnimation.js → common/Animation.js} +2 -2
  159. package/examples/jsm/renderers/common/Attributes.js +75 -0
  160. package/examples/jsm/renderers/common/Backend.js +162 -0
  161. package/examples/jsm/renderers/common/Background.js +134 -0
  162. package/examples/jsm/renderers/common/Binding.js +11 -0
  163. package/examples/jsm/renderers/common/Bindings.js +169 -0
  164. package/examples/jsm/renderers/common/Buffer.js +38 -0
  165. package/examples/jsm/renderers/{webgpu/WebGPUBufferUtils.js → common/BufferUtils.js} +2 -2
  166. package/examples/jsm/renderers/{webgpu/WebGPUWeakMap.js → common/ChainMap.js} +11 -5
  167. package/examples/jsm/renderers/common/ComputePipeline.js +17 -0
  168. package/examples/jsm/renderers/common/Constants.js +14 -0
  169. package/examples/jsm/renderers/common/CubeRenderTarget.js +65 -0
  170. package/examples/jsm/renderers/common/DataMap.js +54 -0
  171. package/examples/jsm/renderers/{webgpu/WebGPUGeometries.js → common/Geometries.js} +38 -37
  172. package/examples/jsm/renderers/{webgpu/WebGPUInfo.js → common/Info.js} +2 -3
  173. package/examples/jsm/renderers/common/Pipeline.js +13 -0
  174. package/examples/jsm/renderers/common/Pipelines.js +321 -0
  175. package/examples/jsm/renderers/common/ProgrammableStage.js +18 -0
  176. package/examples/jsm/renderers/common/RenderContext.js +37 -0
  177. package/examples/jsm/renderers/common/RenderContexts.js +38 -0
  178. package/examples/jsm/renderers/{webgpu/WebGPURenderLists.js → common/RenderList.js} +2 -39
  179. package/examples/jsm/renderers/common/RenderLists.js +38 -0
  180. package/examples/jsm/renderers/common/RenderObject.js +113 -0
  181. package/examples/jsm/renderers/common/RenderObjects.js +92 -0
  182. package/examples/jsm/renderers/common/RenderPipeline.js +16 -0
  183. package/examples/jsm/renderers/{webgpu/WebGPURenderTarget.js → common/RenderTarget.js} +2 -2
  184. package/examples/jsm/renderers/common/Renderer.js +864 -0
  185. package/examples/jsm/renderers/common/SampledTexture.js +80 -0
  186. package/examples/jsm/renderers/common/Sampler.js +18 -0
  187. package/examples/jsm/renderers/common/StorageBuffer.js +17 -0
  188. package/examples/jsm/renderers/common/Textures.js +206 -0
  189. package/examples/jsm/renderers/{webgpu/WebGPUUniform.js → common/Uniform.js} +13 -9
  190. package/examples/jsm/renderers/common/UniformBuffer.js +15 -0
  191. package/examples/jsm/renderers/{webgpu/WebGPUUniformsGroup.js → common/UniformsGroup.js} +13 -13
  192. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodes.js → common/nodes/NodeRender.js} +3 -3
  193. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampledTexture.js → common/nodes/NodeSampledTexture.js} +4 -4
  194. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampler.js → common/nodes/NodeSampler.js} +3 -3
  195. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeUniform.js → common/nodes/NodeUniform.js} +1 -1
  196. package/examples/jsm/renderers/common/nodes/Nodes.js +319 -0
  197. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +340 -0
  198. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +23 -19
  199. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +847 -0
  200. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +15 -1131
  201. package/examples/jsm/renderers/webgpu/nodes/{WebGPUNodeBuilder.js → WGSLNodeBuilder.js} +75 -45
  202. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeFunction.js +2 -2
  203. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeParser.js +1 -1
  204. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +255 -0
  205. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +145 -0
  206. package/examples/jsm/renderers/webgpu/{constants.js → utils/WebGPUConstants.js} +6 -7
  207. package/examples/jsm/renderers/webgpu/{WebGPURenderPipeline.js → utils/WebGPUPipelineUtils.js} +154 -247
  208. package/examples/jsm/renderers/webgpu/{WebGPUTextureUtils.js → utils/WebGPUTextureMipmapUtils.js} +3 -25
  209. package/examples/jsm/renderers/webgpu/{WebGPUTextures.js → utils/WebGPUTextureUtils.js} +392 -505
  210. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +92 -0
  211. package/examples/jsm/shaders/BleachBypassShader.js +2 -0
  212. package/examples/jsm/shaders/BlendShader.js +1 -2
  213. package/examples/jsm/shaders/BokehShader2.js +3 -0
  214. package/examples/jsm/shaders/ColorifyShader.js +2 -0
  215. package/examples/jsm/shaders/ConvolutionShader.js +2 -0
  216. package/examples/jsm/shaders/CopyShader.js +4 -2
  217. package/examples/jsm/shaders/DotScreenShader.js +2 -0
  218. package/examples/jsm/shaders/ExposureShader.js +44 -0
  219. package/examples/jsm/shaders/FilmShader.js +2 -0
  220. package/examples/jsm/shaders/GammaCorrectionShader.js +2 -0
  221. package/examples/jsm/shaders/HorizontalBlurShader.js +2 -0
  222. package/examples/jsm/shaders/OutputShader.js +61 -0
  223. package/examples/jsm/shaders/RGBShiftShader.js +2 -0
  224. package/examples/jsm/shaders/SepiaShader.js +2 -0
  225. package/examples/jsm/shaders/ToonShader.js +13 -5
  226. package/examples/jsm/shaders/VerticalBlurShader.js +2 -0
  227. package/examples/jsm/shaders/VignetteShader.js +2 -0
  228. package/examples/jsm/shaders/WaterRefractionShader.js +5 -2
  229. package/examples/jsm/utils/BufferGeometryUtils.js +17 -1
  230. package/examples/jsm/utils/TextureUtils.js +86 -0
  231. package/examples/jsm/webxr/OculusHandPointerModel.js +34 -13
  232. package/examples/jsm/webxr/XRHandPrimitiveModel.js +1 -0
  233. package/examples/jsm/webxr/XRPlanes.js +100 -0
  234. package/package.json +3 -1
  235. package/src/Three.Legacy.js +0 -228
  236. package/src/audio/PositionalAudio.js +8 -0
  237. package/src/cameras/Camera.js +5 -0
  238. package/src/cameras/CubeCamera.js +76 -13
  239. package/src/cameras/OrthographicCamera.js +1 -1
  240. package/src/cameras/PerspectiveCamera.js +1 -1
  241. package/src/constants.js +13 -1
  242. package/src/core/BufferAttribute.js +3 -25
  243. package/src/core/BufferGeometry.js +1 -8
  244. package/src/core/Object3D.js +1 -1
  245. package/src/extras/core/Curve.js +1 -1
  246. package/src/loaders/CubeTextureLoader.js +2 -0
  247. package/src/loaders/Loader.js +2 -0
  248. package/src/loaders/MaterialLoader.js +5 -0
  249. package/src/loaders/ObjectLoader.js +1 -0
  250. package/src/materials/Material.js +13 -1
  251. package/src/materials/MeshPhysicalMaterial.js +32 -6
  252. package/src/math/Color.js +16 -11
  253. package/src/math/Frustum.js +16 -2
  254. package/src/math/MathUtils.js +16 -0
  255. package/src/math/Matrix3.js +26 -6
  256. package/src/math/Matrix4.js +74 -19
  257. package/src/objects/InstancedMesh.js +3 -0
  258. package/src/objects/Mesh.js +14 -10
  259. package/src/objects/Skeleton.js +1 -3
  260. package/src/objects/SkinnedMesh.js +36 -8
  261. package/src/renderers/WebGLRenderer.js +126 -21
  262. package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -0
  263. package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -0
  264. package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +6 -0
  265. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -0
  266. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +26 -3
  267. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +9 -1
  268. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +26 -0
  269. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -2
  270. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +10 -2
  271. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +1 -1
  272. package/src/renderers/shaders/ShaderChunk/{output_fragment.glsl.js → opaque_fragment.glsl.js} +1 -2
  273. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  274. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +3 -3
  275. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +10 -5
  276. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +6 -1
  277. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +7 -1
  278. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +6 -1
  279. package/src/renderers/shaders/ShaderChunk.js +10 -6
  280. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  281. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -1
  282. package/src/renderers/shaders/ShaderLib/cube.glsl.js +1 -1
  283. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  284. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  285. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -1
  286. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -2
  287. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +4 -2
  288. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +4 -2
  289. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +4 -2
  290. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +4 -2
  291. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +12 -2
  292. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +4 -2
  293. package/src/renderers/shaders/ShaderLib/points.glsl.js +4 -2
  294. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  295. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +4 -2
  296. package/src/renderers/shaders/ShaderLib.js +4 -1
  297. package/src/renderers/shaders/UniformsLib.js +2 -0
  298. package/src/renderers/webgl/WebGLBindingStates.js +13 -5
  299. package/src/renderers/webgl/WebGLGeometries.js +12 -0
  300. package/src/renderers/webgl/WebGLInfo.js +0 -1
  301. package/src/renderers/webgl/WebGLMaterials.js +18 -0
  302. package/src/renderers/webgl/WebGLObjects.js +23 -3
  303. package/src/renderers/webgl/WebGLProgram.js +43 -5
  304. package/src/renderers/webgl/WebGLPrograms.js +19 -7
  305. package/src/renderers/webgl/WebGLTextures.js +19 -1
  306. package/src/renderers/webvr/WebVRManager.js +12 -0
  307. package/src/renderers/webxr/WebXRManager.js +39 -99
  308. package/src/scenes/Scene.js +0 -14
  309. package/src/textures/DepthTexture.js +22 -0
  310. package/src/textures/FramebufferTexture.js +1 -3
  311. package/src/textures/Source.js +4 -0
  312. package/src/textures/Texture.js +1 -1
  313. package/examples/jsm/exporters/ColladaExporter.js +0 -725
  314. package/examples/jsm/geometries/LightningStrike.js +0 -1017
  315. package/examples/jsm/loaders/PRWMLoader.js +0 -299
  316. package/examples/jsm/nodes/core/InstanceIndexNode.js +0 -26
  317. package/examples/jsm/objects/LightningStorm.js +0 -245
  318. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +0 -361
  319. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +0 -197
  320. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +0 -190
  321. package/examples/jsm/renderers/webgpu/WebGPUBinding.js +0 -22
  322. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +0 -270
  323. package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +0 -43
  324. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +0 -78
  325. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +0 -22
  326. package/examples/jsm/renderers/webgpu/WebGPUProperties.js +0 -44
  327. package/examples/jsm/renderers/webgpu/WebGPURenderObject.js +0 -40
  328. package/examples/jsm/renderers/webgpu/WebGPURenderObjects.js +0 -50
  329. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +0 -274
  330. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +0 -54
  331. package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +0 -75
  332. package/examples/jsm/renderers/webgpu/WebGPUSampler.js +0 -29
  333. package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +0 -20
  334. package/examples/jsm/renderers/webgpu/WebGPUTextureRenderer.js +0 -38
  335. package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +0 -18
  336. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +0 -88
  337. package/examples/jsm/shaders/ToneMapShader.js +0 -73
  338. /package/src/renderers/shaders/ShaderChunk/{encodings_fragment.glsl.js → colorspace_fragment.glsl.js} +0 -0
  339. /package/src/renderers/shaders/ShaderChunk/{encodings_pars_fragment.glsl.js → colorspace_pars_fragment.glsl.js} +0 -0
@@ -1,5 +1,4 @@
1
1
  import TempNode from '../core/TempNode.js';
2
- import { negate } from '../math/MathNode.js';
3
2
  import { positionWorldDirection } from '../accessors/PositionNode.js';
4
3
  import { nodeProxy, vec2 } from '../shadernode/ShaderNode.js';
5
4
  import { addNodeClass } from '../core/Node.js';
@@ -16,10 +15,10 @@ class EquirectUVNode extends TempNode {
16
15
 
17
16
  construct() {
18
17
 
19
- const dir = negate( this.dirNode );
18
+ const dir = this.dirNode;
20
19
 
21
20
  const u = dir.z.atan2( dir.x ).mul( 1 / ( Math.PI * 2 ) ).add( 0.5 );
22
- const v = dir.y.clamp( - 1.0, 1.0 ).asin().mul( 1 / Math.PI ).add( 0.5 );
21
+ const v = dir.y.negate().clamp( - 1.0, 1.0 ).asin().mul( 1 / Math.PI ).add( 0.5 ); // @TODO: The use of negate() here could be an NDC issue.
23
22
 
24
23
  return vec2( u, v );
25
24
 
@@ -0,0 +1,186 @@
1
+ import Node, { addNodeClass } from '../core/Node.js';
2
+ import { expression } from '../code/ExpressionNode.js';
3
+ import { bypass } from '../core/BypassNode.js';
4
+ import { context as contextNode } from '../core/ContextNode.js';
5
+ import { addNodeElement, nodeObject, nodeArray } from '../shadernode/ShaderNode.js';
6
+
7
+ class LoopNode extends Node {
8
+
9
+ constructor( params = [] ) {
10
+
11
+ super();
12
+
13
+ this.params = params;
14
+
15
+ }
16
+
17
+ getVarName( index ) {
18
+
19
+ return String.fromCharCode( 'i'.charCodeAt() + index );
20
+
21
+ }
22
+
23
+ getProperties( builder ) {
24
+
25
+ const properties = builder.getNodeProperties( this );
26
+
27
+ if ( properties.stackNode !== undefined ) return properties;
28
+
29
+ //
30
+
31
+ const inputs = {};
32
+
33
+ for ( let i = 0, l = this.params.length - 1; i < l; i ++ ) {
34
+
35
+ const prop = this.getVarName( i );
36
+
37
+ inputs[ prop ] = expression( prop, 'int' );
38
+
39
+ }
40
+
41
+ properties.returnsNode = this.params[ this.params.length - 1 ]( inputs, builder.addStack(), builder );
42
+ properties.stackNode = builder.removeStack();
43
+
44
+ return properties;
45
+
46
+ }
47
+
48
+ getNodeType( builder ) {
49
+
50
+ const { returnsNode } = this.getProperties( builder );
51
+
52
+ return returnsNode ? returnsNode.getNodeType( builder ) : 'void';
53
+
54
+ }
55
+
56
+ construct( builder ) {
57
+
58
+ // construct properties
59
+
60
+ this.getProperties( builder );
61
+
62
+ }
63
+
64
+ generate( builder ) {
65
+
66
+ const properties = this.getProperties( builder );
67
+
68
+ const context = { tempWrite: false };
69
+
70
+ const params = this.params;
71
+ const stackNode = properties.stackNode;
72
+
73
+ const returnsSnippet = properties.returnsNode ? properties.returnsNode.build( builder ) : '';
74
+
75
+ for ( let i = 0, l = params.length - 1; i < l; i ++ ) {
76
+
77
+ const param = params[ i ];
78
+ const property = this.getVarName( i );
79
+
80
+ let start = null, end = null, direction = null;
81
+
82
+ if ( param.isNode ) {
83
+
84
+ start = '0';
85
+ end = param.generate( builder, 'int' );
86
+ direction = 'forward';
87
+
88
+ } else {
89
+
90
+ start = param.start;
91
+ end = param.end;
92
+ direction = param.direction;
93
+
94
+ if ( typeof start === 'number' ) start = start.toString();
95
+ else if ( start && start.isNode ) start = start.generate( builder, 'int' );
96
+
97
+ if ( typeof end === 'number' ) end = end.toString();
98
+ else if ( end && end.isNode ) end = end.generate( builder, 'int' );
99
+
100
+ if ( start !== undefined && end === undefined ) {
101
+
102
+ start = start + ' - 1';
103
+ end = '0';
104
+ direction = 'backwards';
105
+
106
+ } else if ( end !== undefined && start === undefined ) {
107
+
108
+ start = '0';
109
+ direction = 'forward';
110
+
111
+ }
112
+
113
+ if ( direction === undefined ) {
114
+
115
+ if ( Number( start ) > Number( end ) ) {
116
+
117
+ direction = 'backwards';
118
+
119
+ } else {
120
+
121
+ direction = 'forward';
122
+
123
+ }
124
+
125
+ }
126
+
127
+ }
128
+
129
+ const internalParam = { start, end, direction };
130
+
131
+ //
132
+
133
+ const startSnippet = internalParam.start;
134
+ const endSnippet = internalParam.end;
135
+
136
+ let declarationSnippet = '';
137
+ let conditionalSnippet = '';
138
+ let updateSnippet = '';
139
+
140
+ declarationSnippet += builder.getVar( 'int', property ) + ' = ' + startSnippet;
141
+
142
+ if ( internalParam.direction === 'backwards' ) {
143
+
144
+ conditionalSnippet += property + ' >= ' + endSnippet;
145
+ updateSnippet += property + ' --';
146
+
147
+ } else {
148
+
149
+ // forward
150
+
151
+ conditionalSnippet += property + ' < ' + endSnippet;
152
+ updateSnippet += property + ' ++';
153
+
154
+ }
155
+
156
+ const forSnippet = `for ( ${ declarationSnippet }; ${ conditionalSnippet }; ${ updateSnippet } )`;
157
+
158
+ builder.addFlowCode( ( i === 0 ? '\n' : '' ) + builder.tab + forSnippet + ' {\n\n' ).addFlowTab();
159
+
160
+ }
161
+
162
+ const stackSnippet = contextNode( stackNode, context ).build( builder, 'void' );
163
+
164
+ builder.removeFlowTab().addFlowCode( '\n' + builder.tab + stackSnippet );
165
+
166
+ for ( let i = 0, l = this.params.length - 1; i < l; i ++ ) {
167
+
168
+ builder.addFlowCode( ( i === 0 ? '' : builder.tab ) + '}\n\n' ).removeFlowTab();
169
+
170
+ }
171
+
172
+ builder.addFlowTab();
173
+
174
+ return returnsSnippet;
175
+
176
+ }
177
+
178
+ }
179
+
180
+ export default LoopNode;
181
+
182
+ export const loop = ( ...params ) => nodeObject( new LoopNode( nodeArray( params, 'int' ) ) );
183
+
184
+ addNodeElement( 'loop', ( returns, ...params ) => bypass( returns, loop( ...params ) ) );
185
+
186
+ addNodeClass( LoopNode );
@@ -55,7 +55,7 @@ class TriplanarTexturesNode extends Node {
55
55
  export default TriplanarTexturesNode;
56
56
 
57
57
  export const triplanarTextures = nodeProxy( TriplanarTexturesNode );
58
- export const triplanarTexture = ( texture, ...params ) => triplanarTextures( texture, texture, texture, ...params );
58
+ export const triplanarTexture = ( ...params ) => triplanarTextures( ...params );
59
59
 
60
60
  addNodeElement( 'triplanarTexture', triplanarTexture );
61
61
 
@@ -120,7 +120,7 @@ class GroundProjectedSkybox extends Mesh {
120
120
  gl_FragColor = vec4( outcolor, 1.0 );
121
121
 
122
122
  #include <tonemapping_fragment>
123
- #include <encodings_fragment>
123
+ #include <colorspace_fragment>
124
124
 
125
125
  }
126
126
  `;
@@ -11,8 +11,7 @@ import {
11
11
  RawShaderMaterial,
12
12
  Vector2,
13
13
  Vector3,
14
- Vector4,
15
- RGBAFormat
14
+ Vector4
16
15
  } from 'three';
17
16
 
18
17
  class Lensflare extends Mesh {
@@ -34,8 +33,8 @@ class Lensflare extends Mesh {
34
33
 
35
34
  // textures
36
35
 
37
- const tempMap = new FramebufferTexture( 16, 16, RGBAFormat );
38
- const occlusionMap = new FramebufferTexture( 16, 16, RGBAFormat );
36
+ const tempMap = new FramebufferTexture( 16, 16 );
37
+ const occlusionMap = new FramebufferTexture( 16, 16 );
39
38
 
40
39
  // material
41
40
 
@@ -3,7 +3,9 @@ import {
3
3
  BufferGeometry,
4
4
  Color,
5
5
  DynamicDrawUsage,
6
- Mesh
6
+ Mesh,
7
+ Sphere,
8
+ Vector3
7
9
  } from 'three';
8
10
 
9
11
  /**
@@ -94,6 +96,8 @@ class MarchingCubes extends Mesh {
94
96
 
95
97
  }
96
98
 
99
+ geometry.boundingSphere = new Sphere( new Vector3(), 1 );
100
+
97
101
  };
98
102
 
99
103
  ///////////////////////
@@ -54,6 +54,7 @@ class Reflector extends Mesh {
54
54
  const renderTarget = new WebGLRenderTarget( textureWidth, textureHeight, { samples: multisample, type: HalfFloatType } );
55
55
 
56
56
  const material = new ShaderMaterial( {
57
+ name: ( shader.name !== undefined ) ? shader.name : 'unspecified',
57
58
  uniforms: UniformsUtils.clone( shader.uniforms ),
58
59
  fragmentShader: shader.fragmentShader,
59
60
  vertexShader: shader.vertexShader
@@ -201,6 +202,8 @@ class Reflector extends Mesh {
201
202
 
202
203
  Reflector.ReflectorShader = {
203
204
 
205
+ name: 'ReflectorShader',
206
+
204
207
  uniforms: {
205
208
 
206
209
  'color': {
@@ -261,7 +264,7 @@ Reflector.ReflectorShader = {
261
264
  gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );
262
265
 
263
266
  #include <tonemapping_fragment>
264
- #include <encodings_fragment>
267
+ #include <colorspace_fragment>
265
268
 
266
269
  }`
267
270
  };
@@ -323,7 +323,7 @@ Refractor.RefractorShader = {
323
323
  gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );
324
324
 
325
325
  #include <tonemapping_fragment>
326
- #include <encodings_fragment>
326
+ #include <colorspace_fragment>
327
327
 
328
328
  }`
329
329
 
@@ -210,7 +210,7 @@ Sky.SkyShader = {
210
210
  gl_FragColor = vec4( retColor, 1.0 );
211
211
 
212
212
  #include <tonemapping_fragment>
213
- #include <encodings_fragment>
213
+ #include <colorspace_fragment>
214
214
 
215
215
  }`
216
216
 
@@ -181,7 +181,8 @@ class Water extends Mesh {
181
181
  gl_FragColor = vec4( outgoingLight, alpha );
182
182
 
183
183
  #include <tonemapping_fragment>
184
- #include <fog_fragment>
184
+ #include <colorspace_fragment>
185
+ #include <fog_fragment>
185
186
  }`
186
187
 
187
188
  };
@@ -348,7 +348,7 @@ Water.WaterShader = {
348
348
  gl_FragColor = vec4( color, 1.0 ) * mix( refractColor, reflectColor, reflectance );
349
349
 
350
350
  #include <tonemapping_fragment>
351
- #include <encodings_fragment>
351
+ #include <colorspace_fragment>
352
352
  #include <fog_fragment>
353
353
 
354
354
  }`
@@ -45,6 +45,7 @@ function init( canvas, width, height, pixelRatio, path ) {
45
45
  renderer = new THREE.WebGLRenderer( { antialias: true, canvas: canvas } );
46
46
  renderer.setPixelRatio( pixelRatio );
47
47
  renderer.setSize( width, height, false );
48
+ renderer.useLegacyLights = false;
48
49
 
49
50
  animate();
50
51
 
@@ -1,79 +1,72 @@
1
- async function RapierPhysics() {
2
-
3
- const RAPIER = await import( 'https://cdn.skypack.dev/@dimforge/rapier3d-compat@0.11.2' );
4
-
5
- await RAPIER.init();
1
+ import { Clock, Vector3, Quaternion, Matrix4 } from 'three';
6
2
 
7
- const frameRate = 60;
3
+ const RAPIER_PATH = 'https://cdn.skypack.dev/@dimforge/rapier3d-compat@0.11.2';
8
4
 
9
- // Docs: https://rapier.rs/docs/api/javascript/JavaScript3D/
5
+ const frameRate = 60;
10
6
 
11
- const gravity = { x: 0.0, y: - 9.81, z: 0.0 };
12
- const world = new RAPIER.World( gravity );
7
+ const _scale = new Vector3( 1, 1, 1 );
8
+ const ZERO = new Vector3();
13
9
 
14
- function getCollider( geometry ) {
10
+ let RAPIER = null;
15
11
 
16
- const parameters = geometry.parameters;
12
+ function getCollider( geometry ) {
17
13
 
18
- // TODO change type to is*
14
+ const parameters = geometry.parameters;
19
15
 
20
- if ( geometry.type === 'BoxGeometry' ) {
16
+ // TODO change type to is*
21
17
 
22
- const sx = parameters.width !== undefined ? parameters.width / 2 : 0.5;
23
- const sy = parameters.height !== undefined ? parameters.height / 2 : 0.5;
24
- const sz = parameters.depth !== undefined ? parameters.depth / 2 : 0.5;
18
+ if ( geometry.type === 'BoxGeometry' ) {
25
19
 
26
- return RAPIER.ColliderDesc.cuboid( sx, sy, sz );
20
+ const sx = parameters.width !== undefined ? parameters.width / 2 : 0.5;
21
+ const sy = parameters.height !== undefined ? parameters.height / 2 : 0.5;
22
+ const sz = parameters.depth !== undefined ? parameters.depth / 2 : 0.5;
27
23
 
28
- } else if ( geometry.type === 'SphereGeometry' || geometry.type === 'IcosahedronGeometry' ) {
24
+ return RAPIER.ColliderDesc.cuboid( sx, sy, sz );
29
25
 
30
- const radius = parameters.radius !== undefined ? parameters.radius : 1;
31
-
32
- return RAPIER.ColliderDesc.ball( radius );
33
-
34
- }
26
+ } else if ( geometry.type === 'SphereGeometry' || geometry.type === 'IcosahedronGeometry' ) {
35
27
 
36
- return null;
28
+ const radius = parameters.radius !== undefined ? parameters.radius : 1;
29
+ return RAPIER.ColliderDesc.ball( radius );
37
30
 
38
31
  }
39
32
 
40
- const meshes = [];
41
- const meshMap = new WeakMap();
33
+ return null;
42
34
 
43
- function addMesh( mesh, mass = 0, restitution = 0 ) {
35
+ }
44
36
 
45
- const shape = getCollider( mesh.geometry );
37
+ async function RapierPhysics() {
46
38
 
47
- if ( shape !== null ) {
39
+ if ( RAPIER === null ) {
48
40
 
49
- shape.setMass( mass );
50
- shape.setRestitution( restitution );
51
-
52
- if ( mesh.isInstancedMesh ) {
41
+ RAPIER = await import( RAPIER_PATH );
42
+ await RAPIER.init();
53
43
 
54
- handleInstancedMesh( mesh, mass, shape );
44
+ }
55
45
 
56
- } else if ( mesh.isMesh ) {
46
+ // Docs: https://rapier.rs/docs/api/javascript/JavaScript3D/
57
47
 
58
- handleMesh( mesh, mass, shape );
48
+ const gravity = new Vector3( 0.0, - 9.81, 0.0 );
49
+ const world = new RAPIER.World( gravity );
59
50
 
60
- }
51
+ const meshes = [];
52
+ const meshMap = new WeakMap();
61
53
 
62
- }
54
+ const _vector = new Vector3();
55
+ const _quaternion = new Quaternion();
56
+ const _matrix = new Matrix4();
63
57
 
64
- }
58
+ function addMesh( mesh, mass = 0, restitution = 0 ) {
65
59
 
66
- function handleMesh( mesh, mass, shape ) {
60
+ const shape = getCollider( mesh.geometry );
67
61
 
68
- const position = mesh.position;
69
- const quaternion = mesh.quaternion;
62
+ if ( shape === null ) return;
70
63
 
71
- const desc = mass > 0 ? RAPIER.RigidBodyDesc.dynamic() : RAPIER.RigidBodyDesc.fixed();
72
- desc.setTranslation( position.x, position.y, position.z );
73
- desc.setRotation( quaternion );
64
+ shape.setMass( mass );
65
+ shape.setRestitution( restitution );
74
66
 
75
- const body = world.createRigidBody( desc );
76
- world.createCollider( shape, body );
67
+ const body = mesh.isInstancedMesh
68
+ ? createInstancedBody( mesh, mass, shape )
69
+ : createBody( mesh.position, mesh.quaternion, mass, shape );
77
70
 
78
71
  if ( mass > 0 ) {
79
72
 
@@ -84,7 +77,7 @@ async function RapierPhysics() {
84
77
 
85
78
  }
86
79
 
87
- function handleInstancedMesh( mesh, mass, shape ) {
80
+ function createInstancedBody( mesh, mass, shape ) {
88
81
 
89
82
  const array = mesh.instanceMatrix.array;
90
83
 
@@ -92,107 +85,103 @@ async function RapierPhysics() {
92
85
 
93
86
  for ( let i = 0; i < mesh.count; i ++ ) {
94
87
 
95
- const index = i * 16;
88
+ const position = _vector.fromArray( array, i * 16 + 12 );
89
+ bodies.push( createBody( position, null, mass, shape ) );
96
90
 
97
- const desc = mass > 0 ? RAPIER.RigidBodyDesc.dynamic() : RAPIER.RigidBodyDesc.fixed();
98
- desc.setTranslation( array[ index + 12 ], array[ index + 13 ], array[ index + 14 ] );
91
+ }
99
92
 
100
- const body = world.createRigidBody( desc );
101
- world.createCollider( shape, body );
93
+ return bodies;
102
94
 
103
- bodies.push( body );
95
+ }
104
96
 
105
- }
97
+ function createBody( position, quaternion, mass, shape ) {
106
98
 
107
- if ( mass > 0 ) {
99
+ const desc = mass > 0 ? RAPIER.RigidBodyDesc.dynamic() : RAPIER.RigidBodyDesc.fixed();
100
+ desc.setTranslation( ...position );
101
+ if ( quaternion !== null ) desc.setRotation( quaternion );
108
102
 
109
- meshes.push( mesh );
110
- meshMap.set( mesh, bodies );
103
+ const body = world.createRigidBody( desc );
104
+ world.createCollider( shape, body );
111
105
 
112
- }
106
+ return body;
113
107
 
114
108
  }
115
109
 
116
- const vector = { x: 0, y: 0, z: 0 };
117
-
118
110
  function setMeshPosition( mesh, position, index = 0 ) {
119
111
 
112
+ let body = meshMap.get( mesh );
113
+
120
114
  if ( mesh.isInstancedMesh ) {
121
115
 
122
- const bodies = meshMap.get( mesh );
123
- const body = bodies[ index ];
116
+ body = body[ index ];
124
117
 
125
- body.setAngvel( vector );
126
- body.setLinvel( vector );
127
- body.setTranslation( position );
118
+ }
128
119
 
129
- } else if ( mesh.isMesh ) {
120
+ body.setAngvel( ZERO );
121
+ body.setLinvel( ZERO );
122
+ body.setTranslation( position );
130
123
 
131
- const body = meshMap.get( mesh );
124
+ }
132
125
 
133
- body.setAngvel( vector );
134
- body.setLinvel( vector );
135
- body.setTranslation( position );
126
+ function setMeshVelocity( mesh, velocity, index = 0 ) {
136
127
 
137
- }
128
+ let body = meshMap.get( mesh );
138
129
 
139
- }
130
+ if ( mesh.isInstancedMesh ) {
140
131
 
141
- //
132
+ body = body[ index ];
142
133
 
143
- let lastTime = 0;
134
+ }
144
135
 
145
- function step() {
136
+ body.setLinvel( velocity );
146
137
 
147
- const time = performance.now();
138
+ }
148
139
 
149
- if ( lastTime > 0 ) {
140
+ //
150
141
 
151
- const delta = ( time - lastTime ) / 1000;
142
+ const clock = new Clock();
152
143
 
153
- world.timestep = delta;
154
- world.step();
144
+ function step() {
155
145
 
156
- //
146
+ world.timestep = clock.getDelta();
147
+ world.step();
157
148
 
158
- for ( let i = 0, l = meshes.length; i < l; i ++ ) {
149
+ //
159
150
 
160
- const mesh = meshes[ i ];
151
+ for ( let i = 0, l = meshes.length; i < l; i ++ ) {
161
152
 
162
- if ( mesh.isInstancedMesh ) {
153
+ const mesh = meshes[ i ];
163
154
 
164
- const array = mesh.instanceMatrix.array;
165
- const bodies = meshMap.get( mesh );
155
+ if ( mesh.isInstancedMesh ) {
166
156
 
167
- for ( let j = 0; j < bodies.length; j ++ ) {
157
+ const array = mesh.instanceMatrix.array;
158
+ const bodies = meshMap.get( mesh );
168
159
 
169
- const body = bodies[ j ];
160
+ for ( let j = 0; j < bodies.length; j ++ ) {
170
161
 
171
- const position = body.translation();
172
- const quaternion = body.rotation();
162
+ const body = bodies[ j ];
173
163
 
174
- compose( position, quaternion, array, j * 16 );
164
+ const position = body.translation();
165
+ _quaternion.copy( body.rotation() );
175
166
 
176
- }
167
+ _matrix.compose( position, _quaternion, _scale ).toArray( array, j * 16 );
177
168
 
178
- mesh.instanceMatrix.needsUpdate = true;
179
- mesh.computeBoundingSphere();
169
+ }
180
170
 
181
- } else if ( mesh.isMesh ) {
171
+ mesh.instanceMatrix.needsUpdate = true;
172
+ mesh.computeBoundingSphere();
182
173
 
183
- const body = meshMap.get( mesh );
174
+ } else {
184
175
 
185
- mesh.position.copy( body.translation() );
186
- mesh.quaternion.copy( body.rotation() );
176
+ const body = meshMap.get( mesh );
187
177
 
188
- }
178
+ mesh.position.copy( body.translation() );
179
+ mesh.quaternion.copy( body.rotation() );
189
180
 
190
181
  }
191
182
 
192
183
  }
193
184
 
194
- lastTime = time;
195
-
196
185
  }
197
186
 
198
187
  // animate
@@ -201,39 +190,10 @@ async function RapierPhysics() {
201
190
 
202
191
  return {
203
192
  addMesh: addMesh,
204
- setMeshPosition: setMeshPosition
193
+ setMeshPosition: setMeshPosition,
194
+ setMeshVelocity: setMeshVelocity
205
195
  };
206
196
 
207
197
  }
208
198
 
209
- function compose( position, quaternion, array, index ) {
210
-
211
- const x = quaternion.x, y = quaternion.y, z = quaternion.z, w = quaternion.w;
212
- const x2 = x + x, y2 = y + y, z2 = z + z;
213
- const xx = x * x2, xy = x * y2, xz = x * z2;
214
- const yy = y * y2, yz = y * z2, zz = z * z2;
215
- const wx = w * x2, wy = w * y2, wz = w * z2;
216
-
217
- array[ index + 0 ] = ( 1 - ( yy + zz ) );
218
- array[ index + 1 ] = ( xy + wz );
219
- array[ index + 2 ] = ( xz - wy );
220
- array[ index + 3 ] = 0;
221
-
222
- array[ index + 4 ] = ( xy - wz );
223
- array[ index + 5 ] = ( 1 - ( xx + zz ) );
224
- array[ index + 6 ] = ( yz + wx );
225
- array[ index + 7 ] = 0;
226
-
227
- array[ index + 8 ] = ( xz + wy );
228
- array[ index + 9 ] = ( yz - wx );
229
- array[ index + 10 ] = ( 1 - ( xx + yy ) );
230
- array[ index + 11 ] = 0;
231
-
232
- array[ index + 12 ] = position.x;
233
- array[ index + 13 ] = position.y;
234
- array[ index + 14 ] = position.z;
235
- array[ index + 15 ] = 1;
236
-
237
- }
238
-
239
199
  export { RapierPhysics };