super-three 0.171.0 → 0.173.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 (455) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +594 -427
  4. package/build/three.core.js +515 -81
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +79 -350
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +20 -7
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +29362 -3427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +29361 -3427
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -5
  15. package/examples/jsm/animation/CCDIKSolver.js +9 -7
  16. package/examples/jsm/capabilities/WebGPU.js +1 -1
  17. package/examples/jsm/controls/ArcballControls.js +48 -37
  18. package/examples/jsm/controls/OrbitControls.js +5 -4
  19. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  20. package/examples/jsm/curves/NURBSCurve.js +1 -1
  21. package/examples/jsm/curves/NURBSUtils.js +3 -0
  22. package/examples/jsm/effects/OutlineEffect.js +1 -1
  23. package/examples/jsm/exporters/GLTFExporter.js +34 -29
  24. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  25. package/examples/jsm/exporters/PLYExporter.js +2 -2
  26. package/examples/jsm/geometries/TextGeometry.js +1 -12
  27. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  28. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  29. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  30. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  31. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  32. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  33. package/examples/jsm/loaders/3MFLoader.js +6 -3
  34. package/examples/jsm/loaders/BVHLoader.js +1 -1
  35. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  36. package/examples/jsm/loaders/DDSLoader.js +42 -0
  37. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  38. package/examples/jsm/loaders/GLTFLoader.js +22 -4
  39. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  40. package/examples/jsm/loaders/KTXLoader.js +4 -4
  41. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  42. package/examples/jsm/loaders/LottieLoader.js +1 -1
  43. package/examples/jsm/loaders/MTLLoader.js +1 -0
  44. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  45. package/examples/jsm/loaders/PLYLoader.js +7 -7
  46. package/examples/jsm/loaders/PVRLoader.js +1 -1
  47. package/examples/jsm/loaders/SVGLoader.js +2 -2
  48. package/examples/jsm/loaders/TDSLoader.js +1 -2
  49. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  50. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  51. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  52. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  53. package/examples/jsm/math/ConvexHull.js +1 -1
  54. package/examples/jsm/math/OBB.js +17 -0
  55. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  56. package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
  57. package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
  58. package/examples/jsm/misc/Volume.js +27 -17
  59. package/examples/jsm/misc/VolumeSlice.js +7 -5
  60. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  61. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  62. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  63. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  64. package/examples/jsm/objects/Sky.js +2 -2
  65. package/examples/jsm/objects/SkyMesh.js +3 -3
  66. package/examples/jsm/objects/Water2.js +1 -1
  67. package/examples/jsm/objects/Water2Mesh.js +2 -2
  68. package/examples/jsm/objects/WaterMesh.js +29 -24
  69. package/examples/jsm/physics/JoltPhysics.js +7 -7
  70. package/examples/jsm/physics/RapierPhysics.js +4 -4
  71. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  72. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  73. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  74. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  75. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  76. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  77. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  78. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  79. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  80. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  81. package/examples/jsm/shaders/BokehShader2.js +1 -1
  82. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  83. package/examples/jsm/shaders/OutputShader.js +5 -1
  84. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  85. package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
  86. package/examples/jsm/transpiler/TSLEncoder.js +2 -0
  87. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  88. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  89. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  90. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  91. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  92. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  93. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  94. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  95. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  96. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  97. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  98. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  99. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  100. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  101. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  102. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  103. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  104. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  105. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  106. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  107. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  108. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  109. package/examples/jsm/tsl/display/Sepia.js +9 -0
  110. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  111. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  112. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  113. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  114. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  115. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  116. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  117. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  118. package/examples/jsm/utils/CameraUtils.js +4 -1
  119. package/examples/jsm/utils/GeometryUtils.js +22 -19
  120. package/examples/jsm/utils/SceneUtils.js +2 -2
  121. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  122. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  123. package/package.json +8 -3
  124. package/src/Three.Core.js +4 -0
  125. package/src/Three.Legacy.js +0 -21
  126. package/src/Three.TSL.js +18 -5
  127. package/src/Three.WebGPU.Nodes.js +2 -2
  128. package/src/Three.WebGPU.js +2 -2
  129. package/src/animation/PropertyBinding.js +2 -2
  130. package/src/cameras/ArrayCamera.js +1 -0
  131. package/src/cameras/PerspectiveCamera.js +18 -2
  132. package/src/constants.js +6 -1
  133. package/src/core/BufferAttribute.js +4 -0
  134. package/src/core/EventDispatcher.js +8 -6
  135. package/src/core/RenderTarget.js +18 -0
  136. package/src/core/RenderTarget3D.js +22 -0
  137. package/src/core/RenderTargetArray.js +22 -0
  138. package/src/extras/Earcut.js +1 -1
  139. package/src/extras/ImageUtils.js +1 -11
  140. package/src/extras/PMREMGenerator.js +20 -0
  141. package/src/extras/TextureUtils.js +6 -0
  142. package/src/helpers/CameraHelper.js +16 -13
  143. package/src/loaders/nodes/NodeLoader.js +59 -0
  144. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  145. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  146. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  147. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  148. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  149. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  150. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  151. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  152. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  153. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  154. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  155. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  156. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  157. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  158. package/src/materials/nodes/NodeMaterial.js +476 -23
  159. package/src/materials/nodes/NodeMaterials.js +0 -1
  160. package/src/materials/nodes/PointsNodeMaterial.js +121 -10
  161. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  162. package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
  163. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  164. package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
  165. package/src/nodes/Nodes.js +5 -6
  166. package/src/nodes/TSL.js +6 -3
  167. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  168. package/src/nodes/accessors/Arrays.js +47 -6
  169. package/src/nodes/accessors/BatchNode.js +42 -6
  170. package/src/nodes/accessors/Bitangent.js +37 -0
  171. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  172. package/src/nodes/accessors/BufferNode.js +63 -0
  173. package/src/nodes/accessors/BuiltinNode.js +38 -0
  174. package/src/nodes/accessors/Camera.js +113 -3
  175. package/src/nodes/accessors/ClippingNode.js +71 -2
  176. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  177. package/src/nodes/accessors/InstanceNode.js +85 -2
  178. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  179. package/src/nodes/accessors/Lights.js +50 -1
  180. package/src/nodes/accessors/MaterialNode.js +306 -12
  181. package/src/nodes/accessors/MaterialProperties.js +7 -0
  182. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  183. package/src/nodes/accessors/ModelNode.js +100 -5
  184. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  185. package/src/nodes/accessors/MorphNode.js +48 -4
  186. package/src/nodes/accessors/Normal.js +65 -5
  187. package/src/nodes/accessors/Object3DNode.js +101 -1
  188. package/src/nodes/accessors/PointUVNode.js +26 -0
  189. package/src/nodes/accessors/Position.js +56 -7
  190. package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
  191. package/src/nodes/accessors/ReferenceNode.js +201 -2
  192. package/src/nodes/accessors/ReflectVector.js +24 -0
  193. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  194. package/src/nodes/accessors/SceneNode.js +54 -0
  195. package/src/nodes/accessors/SkinningNode.js +127 -1
  196. package/src/nodes/accessors/StorageBufferNode.js +209 -8
  197. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  198. package/src/nodes/accessors/Tangent.js +38 -2
  199. package/src/nodes/accessors/Texture3DNode.js +91 -7
  200. package/src/nodes/accessors/TextureBicubic.js +12 -2
  201. package/src/nodes/accessors/TextureNode.js +316 -10
  202. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  203. package/src/nodes/accessors/UV.js +10 -1
  204. package/src/nodes/accessors/UniformArrayNode.js +231 -25
  205. package/src/nodes/accessors/UserDataNode.js +46 -0
  206. package/src/nodes/accessors/VelocityNode.js +80 -0
  207. package/src/nodes/accessors/VertexColorNode.js +39 -2
  208. package/src/nodes/code/CodeNode.js +95 -1
  209. package/src/nodes/code/ExpressionNode.js +28 -0
  210. package/src/nodes/code/FunctionCallNode.js +37 -0
  211. package/src/nodes/code/FunctionNode.js +45 -0
  212. package/src/nodes/code/ScriptableNode.js +223 -1
  213. package/src/nodes/code/ScriptableValueNode.js +85 -1
  214. package/src/nodes/core/ArrayNode.js +125 -0
  215. package/src/nodes/core/AssignNode.js +48 -2
  216. package/src/nodes/core/AttributeNode.js +43 -0
  217. package/src/nodes/core/BypassNode.js +47 -2
  218. package/src/nodes/core/CacheNode.js +53 -2
  219. package/src/nodes/core/ConstNode.js +32 -0
  220. package/src/nodes/core/ContextNode.js +65 -0
  221. package/src/nodes/core/IndexNode.js +68 -7
  222. package/src/nodes/core/InputNode.js +48 -0
  223. package/src/nodes/core/LightingModel.js +60 -0
  224. package/src/nodes/core/MRTNode.js +66 -0
  225. package/src/nodes/core/Node.js +350 -12
  226. package/src/nodes/core/NodeAttribute.js +38 -0
  227. package/src/nodes/core/NodeBuilder.js +1166 -26
  228. package/src/nodes/core/NodeCache.js +41 -2
  229. package/src/nodes/core/NodeCode.js +31 -0
  230. package/src/nodes/core/NodeFrame.js +123 -2
  231. package/src/nodes/core/NodeFunction.js +46 -0
  232. package/src/nodes/core/NodeFunctionInput.js +44 -0
  233. package/src/nodes/core/NodeParser.js +11 -0
  234. package/src/nodes/core/NodeUniform.js +52 -0
  235. package/src/nodes/core/NodeUtils.js +152 -1
  236. package/src/nodes/core/NodeVar.js +47 -1
  237. package/src/nodes/core/NodeVarying.js +28 -0
  238. package/src/nodes/core/OutputStructNode.js +51 -10
  239. package/src/nodes/core/ParameterNode.js +28 -0
  240. package/src/nodes/core/PropertyNode.js +232 -0
  241. package/src/nodes/core/StackNode.js +98 -1
  242. package/src/nodes/core/StructNode.js +121 -0
  243. package/src/nodes/core/StructType.js +13 -0
  244. package/src/nodes/core/StructTypeNode.js +105 -6
  245. package/src/nodes/core/TempNode.js +31 -5
  246. package/src/nodes/core/UniformGroupNode.js +82 -7
  247. package/src/nodes/core/UniformNode.js +66 -0
  248. package/src/nodes/core/VarNode.js +146 -7
  249. package/src/nodes/core/VaryingNode.js +100 -3
  250. package/src/nodes/core/constants.js +36 -0
  251. package/src/nodes/display/BlendModes.js +88 -1
  252. package/src/nodes/display/BumpMapNode.js +37 -0
  253. package/src/nodes/display/ColorAdjustment.js +53 -11
  254. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  255. package/src/nodes/display/ColorSpaceNode.js +82 -0
  256. package/src/nodes/display/FrontFacingNode.js +29 -0
  257. package/src/nodes/display/NormalMapNode.js +43 -0
  258. package/src/nodes/display/PassNode.js +300 -7
  259. package/src/nodes/display/PosterizeNode.js +33 -0
  260. package/src/nodes/display/RenderOutputNode.js +66 -1
  261. package/src/nodes/display/ScreenNode.js +96 -0
  262. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  263. package/src/nodes/display/ToneMappingNode.js +55 -2
  264. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  265. package/src/nodes/display/ViewportDepthNode.js +122 -8
  266. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  267. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  268. package/src/nodes/display/ViewportTextureNode.js +57 -0
  269. package/src/nodes/fog/Fog.js +110 -0
  270. package/src/nodes/functions/BasicLightingModel.js +24 -0
  271. package/src/nodes/functions/PhongLightingModel.js +34 -2
  272. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  273. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  274. package/src/nodes/functions/ToonLightingModel.js +20 -0
  275. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  276. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  277. package/src/nodes/geometry/RangeNode.js +54 -2
  278. package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
  279. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  280. package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
  281. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  282. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  283. package/src/nodes/lighting/AONode.js +18 -0
  284. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  285. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  286. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  287. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  288. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  289. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  290. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  291. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  292. package/src/nodes/lighting/IrradianceNode.js +17 -0
  293. package/src/nodes/lighting/LightProbeNode.js +20 -0
  294. package/src/nodes/lighting/LightUtils.js +12 -0
  295. package/src/nodes/lighting/LightingContextNode.js +48 -0
  296. package/src/nodes/lighting/LightingNode.js +15 -6
  297. package/src/nodes/lighting/LightsNode.js +132 -1
  298. package/src/nodes/lighting/PointLightNode.js +32 -1
  299. package/src/nodes/lighting/PointShadowNode.js +54 -1
  300. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  301. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  302. package/src/nodes/lighting/ShadowNode.js +241 -35
  303. package/src/nodes/lighting/SpotLightNode.js +43 -0
  304. package/src/nodes/math/ConditionalNode.js +78 -4
  305. package/src/nodes/math/Hash.js +9 -0
  306. package/src/nodes/math/MathNode.js +627 -11
  307. package/src/nodes/math/MathUtils.js +45 -1
  308. package/src/nodes/math/OperatorNode.js +329 -18
  309. package/src/nodes/math/TriNoise3D.js +18 -7
  310. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  311. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  312. package/src/nodes/pmrem/PMREMNode.js +133 -0
  313. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  314. package/src/nodes/procedural/Checker.js +9 -0
  315. package/src/nodes/shapes/Shapes.js +33 -0
  316. package/src/nodes/tsl/TSLBase.js +3 -2
  317. package/src/nodes/tsl/TSLCore.js +22 -2
  318. package/src/nodes/utils/ArrayElementNode.js +39 -3
  319. package/src/nodes/utils/ConvertNode.js +31 -0
  320. package/src/nodes/utils/CubeMapNode.js +78 -0
  321. package/src/nodes/utils/Discard.js +16 -0
  322. package/src/nodes/utils/EquirectUVNode.js +31 -1
  323. package/src/nodes/utils/FlipNode.js +38 -0
  324. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  325. package/src/nodes/utils/JoinNode.js +25 -0
  326. package/src/nodes/utils/LoopNode.js +82 -2
  327. package/src/nodes/utils/MatcapUVNode.js +17 -0
  328. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  329. package/src/nodes/utils/MemberNode.js +68 -0
  330. package/src/nodes/utils/Oscillators.js +33 -0
  331. package/src/nodes/utils/Packing.js +17 -0
  332. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  333. package/src/nodes/utils/RTTNode.js +123 -2
  334. package/src/nodes/utils/ReflectorNode.js +174 -4
  335. package/src/nodes/utils/RemapNode.js +79 -0
  336. package/src/nodes/utils/RotateNode.js +41 -0
  337. package/src/nodes/utils/SetNode.js +44 -1
  338. package/src/nodes/utils/SplitNode.js +55 -3
  339. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  340. package/src/nodes/utils/SpriteUtils.js +17 -0
  341. package/src/nodes/utils/StorageArrayElementNode.js +54 -0
  342. package/src/nodes/utils/Timer.js +40 -0
  343. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  344. package/src/nodes/utils/UVUtils.js +20 -0
  345. package/src/nodes/utils/ViewportUtils.js +13 -0
  346. package/src/objects/BatchedMesh.js +2 -3
  347. package/src/objects/ClippingGroup.js +49 -0
  348. package/src/objects/Line.js +6 -6
  349. package/src/renderers/WebGLRenderer.js +30 -4
  350. package/src/renderers/common/Animation.js +85 -0
  351. package/src/renderers/common/Attributes.js +36 -0
  352. package/src/renderers/common/Backend.js +502 -44
  353. package/src/renderers/common/Background.js +48 -1
  354. package/src/renderers/common/BindGroup.js +43 -0
  355. package/src/renderers/common/Binding.js +35 -0
  356. package/src/renderers/common/Bindings.js +93 -1
  357. package/src/renderers/common/Buffer.js +49 -0
  358. package/src/renderers/common/BufferUtils.js +27 -0
  359. package/src/renderers/common/BundleGroup.js +57 -0
  360. package/src/renderers/common/ChainMap.js +45 -6
  361. package/src/renderers/common/ClippingContext.js +108 -15
  362. package/src/renderers/common/Color4.js +40 -0
  363. package/src/renderers/common/ComputePipeline.js +24 -0
  364. package/src/renderers/common/CubeRenderTarget.js +13 -0
  365. package/src/renderers/common/DataMap.js +37 -1
  366. package/src/renderers/common/Geometries.js +91 -14
  367. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  368. package/src/renderers/common/Info.js +78 -35
  369. package/src/renderers/common/Lighting.js +34 -6
  370. package/src/renderers/common/Pipeline.js +22 -0
  371. package/src/renderers/common/Pipelines.js +148 -5
  372. package/src/renderers/common/PostProcessing.js +99 -11
  373. package/src/renderers/common/ProgrammableStage.js +60 -2
  374. package/src/renderers/common/QuadMesh.js +54 -5
  375. package/src/renderers/common/RenderBundle.js +14 -8
  376. package/src/renderers/common/RenderBundles.js +39 -10
  377. package/src/renderers/common/RenderContext.js +201 -2
  378. package/src/renderers/common/RenderContexts.js +59 -6
  379. package/src/renderers/common/RenderList.js +178 -0
  380. package/src/renderers/common/RenderLists.js +40 -3
  381. package/src/renderers/common/RenderObject.js +400 -17
  382. package/src/renderers/common/RenderObjects.js +103 -7
  383. package/src/renderers/common/RenderPipeline.js +24 -0
  384. package/src/renderers/common/Renderer.js +1170 -86
  385. package/src/renderers/common/RendererUtils.js +193 -0
  386. package/src/renderers/common/SampledTexture.js +120 -0
  387. package/src/renderers/common/Sampler.js +30 -0
  388. package/src/renderers/common/StorageBuffer.js +24 -0
  389. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  390. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  391. package/src/renderers/common/StorageTexture.js +38 -0
  392. package/src/renderers/common/Textures.js +97 -7
  393. package/src/renderers/common/TimestampQueryPool.js +39 -0
  394. package/src/renderers/common/Uniform.js +225 -3
  395. package/src/renderers/common/UniformBuffer.js +19 -0
  396. package/src/renderers/common/UniformsGroup.js +141 -2
  397. package/src/renderers/common/XRManager.js +1193 -0
  398. package/src/renderers/common/XRRenderTarget.js +74 -0
  399. package/src/renderers/common/extras/PMREMGenerator.js +76 -10
  400. package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
  401. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  402. package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
  403. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  404. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  405. package/src/renderers/common/nodes/NodeUniform.js +243 -2
  406. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  407. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  408. package/src/renderers/common/nodes/Nodes.js +352 -78
  409. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  410. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  411. package/src/renderers/webgl/WebGLBackground.js +4 -0
  412. package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
  413. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
  414. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
  415. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  416. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  417. package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
  418. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
  419. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
  420. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  421. package/src/renderers/webgpu/WebGPUBackend.js +578 -164
  422. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
  423. package/src/renderers/webgpu/WebGPURenderer.js +36 -0
  424. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  425. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  426. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
  427. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  428. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  429. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
  430. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
  431. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
  432. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
  433. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
  434. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
  435. package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
  436. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  437. package/src/renderers/webxr/WebXRManager.js +19 -2
  438. package/src/textures/Data3DTexture.js +2 -2
  439. package/src/textures/Texture.js +4 -0
  440. package/src/textures/VideoFrameTexture.js +35 -0
  441. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  442. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  443. package/examples/jsm/exporters/MMDExporter.js +0 -223
  444. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
  445. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  446. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  447. package/examples/jsm/objects/InstancedPoints.js +0 -19
  448. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  449. package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
  450. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
  451. package/src/nodes/core/UniformGroup.js +0 -13
  452. package/src/nodes/fog/FogExp2Node.js +0 -35
  453. package/src/nodes/fog/FogNode.js +0 -50
  454. package/src/nodes/fog/FogRangeNode.js +0 -36
  455. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -1,1408 +0,0 @@
1
- import {
2
- Bone,
3
- BoxGeometry,
4
- CapsuleGeometry,
5
- Color,
6
- Euler,
7
- Matrix4,
8
- Mesh,
9
- MeshBasicMaterial,
10
- Object3D,
11
- Quaternion,
12
- SphereGeometry,
13
- Vector3
14
- } from 'three';
15
-
16
- /**
17
- * Dependencies
18
- * - Ammo.js https://github.com/kripken/ammo.js
19
- *
20
- * MMDPhysics calculates physics with Ammo(Bullet based JavaScript Physics engine)
21
- * for MMD model loaded by MMDLoader.
22
- *
23
- * TODO
24
- * - Physics in Worker
25
- */
26
-
27
- /* global Ammo */
28
-
29
- class MMDPhysics {
30
-
31
- /**
32
- * @param {THREE.SkinnedMesh} mesh
33
- * @param {Array<Object>} rigidBodyParams
34
- * @param {Array<Object>} (optional) constraintParams
35
- * @param {Object} params - (optional)
36
- * @param {Number} params.unitStep - Default is 1 / 65.
37
- * @param {Integer} params.maxStepNum - Default is 3.
38
- * @param {Vector3} params.gravity - Default is ( 0, - 9.8 * 10, 0 )
39
- */
40
- constructor( mesh, rigidBodyParams, constraintParams = [], params = {} ) {
41
-
42
- if ( typeof Ammo === 'undefined' ) {
43
-
44
- throw new Error( 'THREE.MMDPhysics: Import ammo.js https://github.com/kripken/ammo.js' );
45
-
46
- }
47
-
48
- this.manager = new ResourceManager();
49
-
50
- this.mesh = mesh;
51
-
52
- /*
53
- * I don't know why but 1/60 unitStep easily breaks models
54
- * so I set it 1/65 so far.
55
- * Don't set too small unitStep because
56
- * the smaller unitStep can make the performance worse.
57
- */
58
- this.unitStep = ( params.unitStep !== undefined ) ? params.unitStep : 1 / 65;
59
- this.maxStepNum = ( params.maxStepNum !== undefined ) ? params.maxStepNum : 3;
60
- this.gravity = new Vector3( 0, - 9.8 * 10, 0 );
61
-
62
- if ( params.gravity !== undefined ) this.gravity.copy( params.gravity );
63
-
64
- this.world = params.world !== undefined ? params.world : null; // experimental
65
-
66
- this.bodies = [];
67
- this.constraints = [];
68
-
69
- this._init( mesh, rigidBodyParams, constraintParams );
70
-
71
- console.warn( 'THREE.MMDPhysics: The module has been deprecated and will be removed with r172. Please migrate to https://github.com/takahirox/three-mmd-loader instead.' );
72
-
73
- }
74
-
75
- /**
76
- * Advances Physics calculation and updates bones.
77
- *
78
- * @param {Number} delta - time in second
79
- * @return {MMDPhysics}
80
- */
81
- update( delta ) {
82
-
83
- const manager = this.manager;
84
- const mesh = this.mesh;
85
-
86
- // rigid bodies and constrains are for
87
- // mesh's world scale (1, 1, 1).
88
- // Convert to (1, 1, 1) if it isn't.
89
-
90
- let isNonDefaultScale = false;
91
-
92
- const position = manager.allocThreeVector3();
93
- const quaternion = manager.allocThreeQuaternion();
94
- const scale = manager.allocThreeVector3();
95
-
96
- mesh.matrixWorld.decompose( position, quaternion, scale );
97
-
98
- if ( scale.x !== 1 || scale.y !== 1 || scale.z !== 1 ) {
99
-
100
- isNonDefaultScale = true;
101
-
102
- }
103
-
104
- let parent;
105
-
106
- if ( isNonDefaultScale ) {
107
-
108
- parent = mesh.parent;
109
-
110
- if ( parent !== null ) mesh.parent = null;
111
-
112
- scale.copy( this.mesh.scale );
113
-
114
- mesh.scale.set( 1, 1, 1 );
115
- mesh.updateMatrixWorld( true );
116
-
117
- }
118
-
119
- // calculate physics and update bones
120
-
121
- this._updateRigidBodies();
122
- this._stepSimulation( delta );
123
- this._updateBones();
124
-
125
- // restore mesh if converted above
126
-
127
- if ( isNonDefaultScale ) {
128
-
129
- if ( parent !== null ) mesh.parent = parent;
130
-
131
- mesh.scale.copy( scale );
132
-
133
- }
134
-
135
- manager.freeThreeVector3( scale );
136
- manager.freeThreeQuaternion( quaternion );
137
- manager.freeThreeVector3( position );
138
-
139
- return this;
140
-
141
- }
142
-
143
- /**
144
- * Resets rigid bodies transorm to current bone's.
145
- *
146
- * @return {MMDPhysics}
147
- */
148
- reset() {
149
-
150
- for ( let i = 0, il = this.bodies.length; i < il; i ++ ) {
151
-
152
- this.bodies[ i ].reset();
153
-
154
- }
155
-
156
- return this;
157
-
158
- }
159
-
160
- /**
161
- * Warm ups Rigid bodies. Calculates cycles steps.
162
- *
163
- * @param {Integer} cycles
164
- * @return {MMDPhysics}
165
- */
166
- warmup( cycles ) {
167
-
168
- for ( let i = 0; i < cycles; i ++ ) {
169
-
170
- this.update( 1 / 60 );
171
-
172
- }
173
-
174
- return this;
175
-
176
- }
177
-
178
- /**
179
- * Sets gravity.
180
- *
181
- * @param {Vector3} gravity
182
- * @return {MMDPhysicsHelper}
183
- */
184
- setGravity( gravity ) {
185
-
186
- this.world.setGravity( new Ammo.btVector3( gravity.x, gravity.y, gravity.z ) );
187
- this.gravity.copy( gravity );
188
-
189
- return this;
190
-
191
- }
192
-
193
- /**
194
- * Creates MMDPhysicsHelper
195
- *
196
- * @return {MMDPhysicsHelper}
197
- */
198
- createHelper() {
199
-
200
- return new MMDPhysicsHelper( this.mesh, this );
201
-
202
- }
203
-
204
- // private methods
205
-
206
- _init( mesh, rigidBodyParams, constraintParams ) {
207
-
208
- const manager = this.manager;
209
-
210
- // rigid body/constraint parameters are for
211
- // mesh's default world transform as position(0, 0, 0),
212
- // quaternion(0, 0, 0, 1) and scale(0, 0, 0)
213
-
214
- const parent = mesh.parent;
215
-
216
- if ( parent !== null ) mesh.parent = null;
217
-
218
- const currentPosition = manager.allocThreeVector3();
219
- const currentQuaternion = manager.allocThreeQuaternion();
220
- const currentScale = manager.allocThreeVector3();
221
-
222
- currentPosition.copy( mesh.position );
223
- currentQuaternion.copy( mesh.quaternion );
224
- currentScale.copy( mesh.scale );
225
-
226
- mesh.position.set( 0, 0, 0 );
227
- mesh.quaternion.set( 0, 0, 0, 1 );
228
- mesh.scale.set( 1, 1, 1 );
229
-
230
- mesh.updateMatrixWorld( true );
231
-
232
- if ( this.world === null ) {
233
-
234
- this.world = this._createWorld();
235
- this.setGravity( this.gravity );
236
-
237
- }
238
-
239
- this._initRigidBodies( rigidBodyParams );
240
- this._initConstraints( constraintParams );
241
-
242
- if ( parent !== null ) mesh.parent = parent;
243
-
244
- mesh.position.copy( currentPosition );
245
- mesh.quaternion.copy( currentQuaternion );
246
- mesh.scale.copy( currentScale );
247
-
248
- mesh.updateMatrixWorld( true );
249
-
250
- this.reset();
251
-
252
- manager.freeThreeVector3( currentPosition );
253
- manager.freeThreeQuaternion( currentQuaternion );
254
- manager.freeThreeVector3( currentScale );
255
-
256
- }
257
-
258
- _createWorld() {
259
-
260
- const config = new Ammo.btDefaultCollisionConfiguration();
261
- const dispatcher = new Ammo.btCollisionDispatcher( config );
262
- const cache = new Ammo.btDbvtBroadphase();
263
- const solver = new Ammo.btSequentialImpulseConstraintSolver();
264
- const world = new Ammo.btDiscreteDynamicsWorld( dispatcher, cache, solver, config );
265
- return world;
266
-
267
- }
268
-
269
- _initRigidBodies( rigidBodies ) {
270
-
271
- for ( let i = 0, il = rigidBodies.length; i < il; i ++ ) {
272
-
273
- this.bodies.push( new RigidBody(
274
- this.mesh, this.world, rigidBodies[ i ], this.manager ) );
275
-
276
- }
277
-
278
- }
279
-
280
- _initConstraints( constraints ) {
281
-
282
- for ( let i = 0, il = constraints.length; i < il; i ++ ) {
283
-
284
- const params = constraints[ i ];
285
- const bodyA = this.bodies[ params.rigidBodyIndex1 ];
286
- const bodyB = this.bodies[ params.rigidBodyIndex2 ];
287
- this.constraints.push( new Constraint( this.mesh, this.world, bodyA, bodyB, params, this.manager ) );
288
-
289
- }
290
-
291
- }
292
-
293
- _stepSimulation( delta ) {
294
-
295
- const unitStep = this.unitStep;
296
- let stepTime = delta;
297
- let maxStepNum = ( ( delta / unitStep ) | 0 ) + 1;
298
-
299
- if ( stepTime < unitStep ) {
300
-
301
- stepTime = unitStep;
302
- maxStepNum = 1;
303
-
304
- }
305
-
306
- if ( maxStepNum > this.maxStepNum ) {
307
-
308
- maxStepNum = this.maxStepNum;
309
-
310
- }
311
-
312
- this.world.stepSimulation( stepTime, maxStepNum, unitStep );
313
-
314
- }
315
-
316
- _updateRigidBodies() {
317
-
318
- for ( let i = 0, il = this.bodies.length; i < il; i ++ ) {
319
-
320
- this.bodies[ i ].updateFromBone();
321
-
322
- }
323
-
324
- }
325
-
326
- _updateBones() {
327
-
328
- for ( let i = 0, il = this.bodies.length; i < il; i ++ ) {
329
-
330
- this.bodies[ i ].updateBone();
331
-
332
- }
333
-
334
- }
335
-
336
- }
337
-
338
- /**
339
- * This manager's responsibilies are
340
- *
341
- * 1. manage Ammo.js and Three.js object resources and
342
- * improve the performance and the memory consumption by
343
- * reusing objects.
344
- *
345
- * 2. provide simple Ammo object operations.
346
- */
347
- class ResourceManager {
348
-
349
- constructor() {
350
-
351
- // for Three.js
352
- this.threeVector3s = [];
353
- this.threeMatrix4s = [];
354
- this.threeQuaternions = [];
355
- this.threeEulers = [];
356
-
357
- // for Ammo.js
358
- this.transforms = [];
359
- this.quaternions = [];
360
- this.vector3s = [];
361
-
362
- }
363
-
364
- allocThreeVector3() {
365
-
366
- return ( this.threeVector3s.length > 0 )
367
- ? this.threeVector3s.pop()
368
- : new Vector3();
369
-
370
- }
371
-
372
- freeThreeVector3( v ) {
373
-
374
- this.threeVector3s.push( v );
375
-
376
- }
377
-
378
- allocThreeMatrix4() {
379
-
380
- return ( this.threeMatrix4s.length > 0 )
381
- ? this.threeMatrix4s.pop()
382
- : new Matrix4();
383
-
384
- }
385
-
386
- freeThreeMatrix4( m ) {
387
-
388
- this.threeMatrix4s.push( m );
389
-
390
- }
391
-
392
- allocThreeQuaternion() {
393
-
394
- return ( this.threeQuaternions.length > 0 )
395
- ? this.threeQuaternions.pop()
396
- : new Quaternion();
397
-
398
- }
399
-
400
- freeThreeQuaternion( q ) {
401
-
402
- this.threeQuaternions.push( q );
403
-
404
- }
405
-
406
- allocThreeEuler() {
407
-
408
- return ( this.threeEulers.length > 0 )
409
- ? this.threeEulers.pop()
410
- : new Euler();
411
-
412
- }
413
-
414
- freeThreeEuler( e ) {
415
-
416
- this.threeEulers.push( e );
417
-
418
- }
419
-
420
- allocTransform() {
421
-
422
- return ( this.transforms.length > 0 )
423
- ? this.transforms.pop()
424
- : new Ammo.btTransform();
425
-
426
- }
427
-
428
- freeTransform( t ) {
429
-
430
- this.transforms.push( t );
431
-
432
- }
433
-
434
- allocQuaternion() {
435
-
436
- return ( this.quaternions.length > 0 )
437
- ? this.quaternions.pop()
438
- : new Ammo.btQuaternion();
439
-
440
- }
441
-
442
- freeQuaternion( q ) {
443
-
444
- this.quaternions.push( q );
445
-
446
- }
447
-
448
- allocVector3() {
449
-
450
- return ( this.vector3s.length > 0 )
451
- ? this.vector3s.pop()
452
- : new Ammo.btVector3();
453
-
454
- }
455
-
456
- freeVector3( v ) {
457
-
458
- this.vector3s.push( v );
459
-
460
- }
461
-
462
- setIdentity( t ) {
463
-
464
- t.setIdentity();
465
-
466
- }
467
-
468
- getBasis( t ) {
469
-
470
- var q = this.allocQuaternion();
471
- t.getBasis().getRotation( q );
472
- return q;
473
-
474
- }
475
-
476
- getBasisAsMatrix3( t ) {
477
-
478
- var q = this.getBasis( t );
479
- var m = this.quaternionToMatrix3( q );
480
- this.freeQuaternion( q );
481
- return m;
482
-
483
- }
484
-
485
- getOrigin( t ) {
486
-
487
- return t.getOrigin();
488
-
489
- }
490
-
491
- setOrigin( t, v ) {
492
-
493
- t.getOrigin().setValue( v.x(), v.y(), v.z() );
494
-
495
- }
496
-
497
- copyOrigin( t1, t2 ) {
498
-
499
- var o = t2.getOrigin();
500
- this.setOrigin( t1, o );
501
-
502
- }
503
-
504
- setBasis( t, q ) {
505
-
506
- t.setRotation( q );
507
-
508
- }
509
-
510
- setBasisFromMatrix3( t, m ) {
511
-
512
- var q = this.matrix3ToQuaternion( m );
513
- this.setBasis( t, q );
514
- this.freeQuaternion( q );
515
-
516
- }
517
-
518
- setOriginFromArray3( t, a ) {
519
-
520
- t.getOrigin().setValue( a[ 0 ], a[ 1 ], a[ 2 ] );
521
-
522
- }
523
-
524
- setOriginFromThreeVector3( t, v ) {
525
-
526
- t.getOrigin().setValue( v.x, v.y, v.z );
527
-
528
- }
529
-
530
- setBasisFromArray3( t, a ) {
531
-
532
- var thQ = this.allocThreeQuaternion();
533
- var thE = this.allocThreeEuler();
534
- thE.set( a[ 0 ], a[ 1 ], a[ 2 ] );
535
- this.setBasisFromThreeQuaternion( t, thQ.setFromEuler( thE ) );
536
-
537
- this.freeThreeEuler( thE );
538
- this.freeThreeQuaternion( thQ );
539
-
540
- }
541
-
542
- setBasisFromThreeQuaternion( t, a ) {
543
-
544
- var q = this.allocQuaternion();
545
-
546
- q.setX( a.x );
547
- q.setY( a.y );
548
- q.setZ( a.z );
549
- q.setW( a.w );
550
- this.setBasis( t, q );
551
-
552
- this.freeQuaternion( q );
553
-
554
- }
555
-
556
- multiplyTransforms( t1, t2 ) {
557
-
558
- var t = this.allocTransform();
559
- this.setIdentity( t );
560
-
561
- var m1 = this.getBasisAsMatrix3( t1 );
562
- var m2 = this.getBasisAsMatrix3( t2 );
563
-
564
- var o1 = this.getOrigin( t1 );
565
- var o2 = this.getOrigin( t2 );
566
-
567
- var v1 = this.multiplyMatrix3ByVector3( m1, o2 );
568
- var v2 = this.addVector3( v1, o1 );
569
- this.setOrigin( t, v2 );
570
-
571
- var m3 = this.multiplyMatrices3( m1, m2 );
572
- this.setBasisFromMatrix3( t, m3 );
573
-
574
- this.freeVector3( v1 );
575
- this.freeVector3( v2 );
576
-
577
- return t;
578
-
579
- }
580
-
581
- inverseTransform( t ) {
582
-
583
- var t2 = this.allocTransform();
584
-
585
- var m1 = this.getBasisAsMatrix3( t );
586
- var o = this.getOrigin( t );
587
-
588
- var m2 = this.transposeMatrix3( m1 );
589
- var v1 = this.negativeVector3( o );
590
- var v2 = this.multiplyMatrix3ByVector3( m2, v1 );
591
-
592
- this.setOrigin( t2, v2 );
593
- this.setBasisFromMatrix3( t2, m2 );
594
-
595
- this.freeVector3( v1 );
596
- this.freeVector3( v2 );
597
-
598
- return t2;
599
-
600
- }
601
-
602
- multiplyMatrices3( m1, m2 ) {
603
-
604
- var m3 = [];
605
-
606
- var v10 = this.rowOfMatrix3( m1, 0 );
607
- var v11 = this.rowOfMatrix3( m1, 1 );
608
- var v12 = this.rowOfMatrix3( m1, 2 );
609
-
610
- var v20 = this.columnOfMatrix3( m2, 0 );
611
- var v21 = this.columnOfMatrix3( m2, 1 );
612
- var v22 = this.columnOfMatrix3( m2, 2 );
613
-
614
- m3[ 0 ] = this.dotVectors3( v10, v20 );
615
- m3[ 1 ] = this.dotVectors3( v10, v21 );
616
- m3[ 2 ] = this.dotVectors3( v10, v22 );
617
- m3[ 3 ] = this.dotVectors3( v11, v20 );
618
- m3[ 4 ] = this.dotVectors3( v11, v21 );
619
- m3[ 5 ] = this.dotVectors3( v11, v22 );
620
- m3[ 6 ] = this.dotVectors3( v12, v20 );
621
- m3[ 7 ] = this.dotVectors3( v12, v21 );
622
- m3[ 8 ] = this.dotVectors3( v12, v22 );
623
-
624
- this.freeVector3( v10 );
625
- this.freeVector3( v11 );
626
- this.freeVector3( v12 );
627
- this.freeVector3( v20 );
628
- this.freeVector3( v21 );
629
- this.freeVector3( v22 );
630
-
631
- return m3;
632
-
633
- }
634
-
635
- addVector3( v1, v2 ) {
636
-
637
- var v = this.allocVector3();
638
- v.setValue( v1.x() + v2.x(), v1.y() + v2.y(), v1.z() + v2.z() );
639
- return v;
640
-
641
- }
642
-
643
- dotVectors3( v1, v2 ) {
644
-
645
- return v1.x() * v2.x() + v1.y() * v2.y() + v1.z() * v2.z();
646
-
647
- }
648
-
649
- rowOfMatrix3( m, i ) {
650
-
651
- var v = this.allocVector3();
652
- v.setValue( m[ i * 3 + 0 ], m[ i * 3 + 1 ], m[ i * 3 + 2 ] );
653
- return v;
654
-
655
- }
656
-
657
- columnOfMatrix3( m, i ) {
658
-
659
- var v = this.allocVector3();
660
- v.setValue( m[ i + 0 ], m[ i + 3 ], m[ i + 6 ] );
661
- return v;
662
-
663
- }
664
-
665
- negativeVector3( v ) {
666
-
667
- var v2 = this.allocVector3();
668
- v2.setValue( - v.x(), - v.y(), - v.z() );
669
- return v2;
670
-
671
- }
672
-
673
- multiplyMatrix3ByVector3( m, v ) {
674
-
675
- var v4 = this.allocVector3();
676
-
677
- var v0 = this.rowOfMatrix3( m, 0 );
678
- var v1 = this.rowOfMatrix3( m, 1 );
679
- var v2 = this.rowOfMatrix3( m, 2 );
680
- var x = this.dotVectors3( v0, v );
681
- var y = this.dotVectors3( v1, v );
682
- var z = this.dotVectors3( v2, v );
683
-
684
- v4.setValue( x, y, z );
685
-
686
- this.freeVector3( v0 );
687
- this.freeVector3( v1 );
688
- this.freeVector3( v2 );
689
-
690
- return v4;
691
-
692
- }
693
-
694
- transposeMatrix3( m ) {
695
-
696
- var m2 = [];
697
- m2[ 0 ] = m[ 0 ];
698
- m2[ 1 ] = m[ 3 ];
699
- m2[ 2 ] = m[ 6 ];
700
- m2[ 3 ] = m[ 1 ];
701
- m2[ 4 ] = m[ 4 ];
702
- m2[ 5 ] = m[ 7 ];
703
- m2[ 6 ] = m[ 2 ];
704
- m2[ 7 ] = m[ 5 ];
705
- m2[ 8 ] = m[ 8 ];
706
- return m2;
707
-
708
- }
709
-
710
- quaternionToMatrix3( q ) {
711
-
712
- var m = [];
713
-
714
- var x = q.x();
715
- var y = q.y();
716
- var z = q.z();
717
- var w = q.w();
718
-
719
- var xx = x * x;
720
- var yy = y * y;
721
- var zz = z * z;
722
-
723
- var xy = x * y;
724
- var yz = y * z;
725
- var zx = z * x;
726
-
727
- var xw = x * w;
728
- var yw = y * w;
729
- var zw = z * w;
730
-
731
- m[ 0 ] = 1 - 2 * ( yy + zz );
732
- m[ 1 ] = 2 * ( xy - zw );
733
- m[ 2 ] = 2 * ( zx + yw );
734
- m[ 3 ] = 2 * ( xy + zw );
735
- m[ 4 ] = 1 - 2 * ( zz + xx );
736
- m[ 5 ] = 2 * ( yz - xw );
737
- m[ 6 ] = 2 * ( zx - yw );
738
- m[ 7 ] = 2 * ( yz + xw );
739
- m[ 8 ] = 1 - 2 * ( xx + yy );
740
-
741
- return m;
742
-
743
- }
744
-
745
- matrix3ToQuaternion( m ) {
746
-
747
- var t = m[ 0 ] + m[ 4 ] + m[ 8 ];
748
- var s, x, y, z, w;
749
-
750
- if ( t > 0 ) {
751
-
752
- s = Math.sqrt( t + 1.0 ) * 2;
753
- w = 0.25 * s;
754
- x = ( m[ 7 ] - m[ 5 ] ) / s;
755
- y = ( m[ 2 ] - m[ 6 ] ) / s;
756
- z = ( m[ 3 ] - m[ 1 ] ) / s;
757
-
758
- } else if ( ( m[ 0 ] > m[ 4 ] ) && ( m[ 0 ] > m[ 8 ] ) ) {
759
-
760
- s = Math.sqrt( 1.0 + m[ 0 ] - m[ 4 ] - m[ 8 ] ) * 2;
761
- w = ( m[ 7 ] - m[ 5 ] ) / s;
762
- x = 0.25 * s;
763
- y = ( m[ 1 ] + m[ 3 ] ) / s;
764
- z = ( m[ 2 ] + m[ 6 ] ) / s;
765
-
766
- } else if ( m[ 4 ] > m[ 8 ] ) {
767
-
768
- s = Math.sqrt( 1.0 + m[ 4 ] - m[ 0 ] - m[ 8 ] ) * 2;
769
- w = ( m[ 2 ] - m[ 6 ] ) / s;
770
- x = ( m[ 1 ] + m[ 3 ] ) / s;
771
- y = 0.25 * s;
772
- z = ( m[ 5 ] + m[ 7 ] ) / s;
773
-
774
- } else {
775
-
776
- s = Math.sqrt( 1.0 + m[ 8 ] - m[ 0 ] - m[ 4 ] ) * 2;
777
- w = ( m[ 3 ] - m[ 1 ] ) / s;
778
- x = ( m[ 2 ] + m[ 6 ] ) / s;
779
- y = ( m[ 5 ] + m[ 7 ] ) / s;
780
- z = 0.25 * s;
781
-
782
- }
783
-
784
- var q = this.allocQuaternion();
785
- q.setX( x );
786
- q.setY( y );
787
- q.setZ( z );
788
- q.setW( w );
789
- return q;
790
-
791
- }
792
-
793
- }
794
-
795
- /**
796
- * @param {THREE.SkinnedMesh} mesh
797
- * @param {Ammo.btDiscreteDynamicsWorld} world
798
- * @param {Object} params
799
- * @param {ResourceManager} manager
800
- */
801
- class RigidBody {
802
-
803
- constructor( mesh, world, params, manager ) {
804
-
805
- this.mesh = mesh;
806
- this.world = world;
807
- this.params = params;
808
- this.manager = manager;
809
-
810
- this.body = null;
811
- this.bone = null;
812
- this.boneOffsetForm = null;
813
- this.boneOffsetFormInverse = null;
814
-
815
- this._init();
816
-
817
- }
818
-
819
- /**
820
- * Resets rigid body transform to the current bone's.
821
- *
822
- * @return {RigidBody}
823
- */
824
- reset() {
825
-
826
- this._setTransformFromBone();
827
- return this;
828
-
829
- }
830
-
831
- /**
832
- * Updates rigid body's transform from the current bone.
833
- *
834
- * @return {RidigBody}
835
- */
836
- updateFromBone() {
837
-
838
- if ( this.params.boneIndex !== - 1 && this.params.type === 0 ) {
839
-
840
- this._setTransformFromBone();
841
-
842
- }
843
-
844
- return this;
845
-
846
- }
847
-
848
- /**
849
- * Updates bone from the current ridid body's transform.
850
- *
851
- * @return {RidigBody}
852
- */
853
- updateBone() {
854
-
855
- if ( this.params.type === 0 || this.params.boneIndex === - 1 ) {
856
-
857
- return this;
858
-
859
- }
860
-
861
- this._updateBoneRotation();
862
-
863
- if ( this.params.type === 1 ) {
864
-
865
- this._updateBonePosition();
866
-
867
- }
868
-
869
- this.bone.updateMatrixWorld( true );
870
-
871
- if ( this.params.type === 2 ) {
872
-
873
- this._setPositionFromBone();
874
-
875
- }
876
-
877
- return this;
878
-
879
- }
880
-
881
- // private methods
882
-
883
- _init() {
884
-
885
- function generateShape( p ) {
886
-
887
- switch ( p.shapeType ) {
888
-
889
- case 0:
890
- return new Ammo.btSphereShape( p.width );
891
-
892
- case 1:
893
- return new Ammo.btBoxShape( new Ammo.btVector3( p.width, p.height, p.depth ) );
894
-
895
- case 2:
896
- return new Ammo.btCapsuleShape( p.width, p.height );
897
-
898
- default:
899
- throw new Error( 'unknown shape type ' + p.shapeType );
900
-
901
- }
902
-
903
- }
904
-
905
- const manager = this.manager;
906
- const params = this.params;
907
- const bones = this.mesh.skeleton.bones;
908
- const bone = ( params.boneIndex === - 1 )
909
- ? new Bone()
910
- : bones[ params.boneIndex ];
911
-
912
- const shape = generateShape( params );
913
- const weight = ( params.type === 0 ) ? 0 : params.weight;
914
- const localInertia = manager.allocVector3();
915
- localInertia.setValue( 0, 0, 0 );
916
-
917
- if ( weight !== 0 ) {
918
-
919
- shape.calculateLocalInertia( weight, localInertia );
920
-
921
- }
922
-
923
- const boneOffsetForm = manager.allocTransform();
924
- manager.setIdentity( boneOffsetForm );
925
- manager.setOriginFromArray3( boneOffsetForm, params.position );
926
- manager.setBasisFromArray3( boneOffsetForm, params.rotation );
927
-
928
- const vector = manager.allocThreeVector3();
929
- const boneForm = manager.allocTransform();
930
- manager.setIdentity( boneForm );
931
- manager.setOriginFromThreeVector3( boneForm, bone.getWorldPosition( vector ) );
932
-
933
- const form = manager.multiplyTransforms( boneForm, boneOffsetForm );
934
- const state = new Ammo.btDefaultMotionState( form );
935
-
936
- const info = new Ammo.btRigidBodyConstructionInfo( weight, state, shape, localInertia );
937
- info.set_m_friction( params.friction );
938
- info.set_m_restitution( params.restitution );
939
-
940
- const body = new Ammo.btRigidBody( info );
941
-
942
- if ( params.type === 0 ) {
943
-
944
- body.setCollisionFlags( body.getCollisionFlags() | 2 );
945
-
946
- /*
947
- * It'd be better to comment out this line though in general I should call this method
948
- * because I'm not sure why but physics will be more like MMD's
949
- * if I comment out.
950
- */
951
- body.setActivationState( 4 );
952
-
953
- }
954
-
955
- body.setDamping( params.positionDamping, params.rotationDamping );
956
- body.setSleepingThresholds( 0, 0 );
957
-
958
- this.world.addRigidBody( body, 1 << params.groupIndex, params.groupTarget );
959
-
960
- this.body = body;
961
- this.bone = bone;
962
- this.boneOffsetForm = boneOffsetForm;
963
- this.boneOffsetFormInverse = manager.inverseTransform( boneOffsetForm );
964
-
965
- manager.freeVector3( localInertia );
966
- manager.freeTransform( form );
967
- manager.freeTransform( boneForm );
968
- manager.freeThreeVector3( vector );
969
-
970
- }
971
-
972
- _getBoneTransform() {
973
-
974
- const manager = this.manager;
975
- const p = manager.allocThreeVector3();
976
- const q = manager.allocThreeQuaternion();
977
- const s = manager.allocThreeVector3();
978
-
979
- this.bone.matrixWorld.decompose( p, q, s );
980
-
981
- const tr = manager.allocTransform();
982
- manager.setOriginFromThreeVector3( tr, p );
983
- manager.setBasisFromThreeQuaternion( tr, q );
984
-
985
- const form = manager.multiplyTransforms( tr, this.boneOffsetForm );
986
-
987
- manager.freeTransform( tr );
988
- manager.freeThreeVector3( s );
989
- manager.freeThreeQuaternion( q );
990
- manager.freeThreeVector3( p );
991
-
992
- return form;
993
-
994
- }
995
-
996
- _getWorldTransformForBone() {
997
-
998
- const manager = this.manager;
999
- const tr = this.body.getCenterOfMassTransform();
1000
- return manager.multiplyTransforms( tr, this.boneOffsetFormInverse );
1001
-
1002
- }
1003
-
1004
- _setTransformFromBone() {
1005
-
1006
- const manager = this.manager;
1007
- const form = this._getBoneTransform();
1008
-
1009
- // TODO: check the most appropriate way to set
1010
- //this.body.setWorldTransform( form );
1011
- this.body.setCenterOfMassTransform( form );
1012
- this.body.getMotionState().setWorldTransform( form );
1013
-
1014
- manager.freeTransform( form );
1015
-
1016
- }
1017
-
1018
- _setPositionFromBone() {
1019
-
1020
- const manager = this.manager;
1021
- const form = this._getBoneTransform();
1022
-
1023
- const tr = manager.allocTransform();
1024
- this.body.getMotionState().getWorldTransform( tr );
1025
- manager.copyOrigin( tr, form );
1026
-
1027
- // TODO: check the most appropriate way to set
1028
- //this.body.setWorldTransform( tr );
1029
- this.body.setCenterOfMassTransform( tr );
1030
- this.body.getMotionState().setWorldTransform( tr );
1031
-
1032
- manager.freeTransform( tr );
1033
- manager.freeTransform( form );
1034
-
1035
- }
1036
-
1037
- _updateBoneRotation() {
1038
-
1039
- const manager = this.manager;
1040
-
1041
- const tr = this._getWorldTransformForBone();
1042
- const q = manager.getBasis( tr );
1043
-
1044
- const thQ = manager.allocThreeQuaternion();
1045
- const thQ2 = manager.allocThreeQuaternion();
1046
- const thQ3 = manager.allocThreeQuaternion();
1047
-
1048
- thQ.set( q.x(), q.y(), q.z(), q.w() );
1049
- thQ2.setFromRotationMatrix( this.bone.matrixWorld );
1050
- thQ2.conjugate();
1051
- thQ2.multiply( thQ );
1052
-
1053
- //this.bone.quaternion.multiply( thQ2 );
1054
-
1055
- thQ3.setFromRotationMatrix( this.bone.matrix );
1056
-
1057
- // Renormalizing quaternion here because repeatedly transforming
1058
- // quaternion continuously accumulates floating point error and
1059
- // can end up being overflow. See #15335
1060
- this.bone.quaternion.copy( thQ2.multiply( thQ3 ).normalize() );
1061
-
1062
- manager.freeThreeQuaternion( thQ );
1063
- manager.freeThreeQuaternion( thQ2 );
1064
- manager.freeThreeQuaternion( thQ3 );
1065
-
1066
- manager.freeQuaternion( q );
1067
- manager.freeTransform( tr );
1068
-
1069
- }
1070
-
1071
- _updateBonePosition() {
1072
-
1073
- const manager = this.manager;
1074
-
1075
- const tr = this._getWorldTransformForBone();
1076
-
1077
- const thV = manager.allocThreeVector3();
1078
-
1079
- const o = manager.getOrigin( tr );
1080
- thV.set( o.x(), o.y(), o.z() );
1081
-
1082
- if ( this.bone.parent ) {
1083
-
1084
- this.bone.parent.worldToLocal( thV );
1085
-
1086
- }
1087
-
1088
- this.bone.position.copy( thV );
1089
-
1090
- manager.freeThreeVector3( thV );
1091
-
1092
- manager.freeTransform( tr );
1093
-
1094
- }
1095
-
1096
- }
1097
-
1098
- //
1099
-
1100
- class Constraint {
1101
-
1102
- /**
1103
- * @param {THREE.SkinnedMesh} mesh
1104
- * @param {Ammo.btDiscreteDynamicsWorld} world
1105
- * @param {RigidBody} bodyA
1106
- * @param {RigidBody} bodyB
1107
- * @param {Object} params
1108
- * @param {ResourceManager} manager
1109
- */
1110
- constructor( mesh, world, bodyA, bodyB, params, manager ) {
1111
-
1112
- this.mesh = mesh;
1113
- this.world = world;
1114
- this.bodyA = bodyA;
1115
- this.bodyB = bodyB;
1116
- this.params = params;
1117
- this.manager = manager;
1118
-
1119
- this.constraint = null;
1120
-
1121
- this._init();
1122
-
1123
- }
1124
-
1125
- // private method
1126
-
1127
- _init() {
1128
-
1129
- const manager = this.manager;
1130
- const params = this.params;
1131
- const bodyA = this.bodyA;
1132
- const bodyB = this.bodyB;
1133
-
1134
- const form = manager.allocTransform();
1135
- manager.setIdentity( form );
1136
- manager.setOriginFromArray3( form, params.position );
1137
- manager.setBasisFromArray3( form, params.rotation );
1138
-
1139
- const formA = manager.allocTransform();
1140
- const formB = manager.allocTransform();
1141
-
1142
- bodyA.body.getMotionState().getWorldTransform( formA );
1143
- bodyB.body.getMotionState().getWorldTransform( formB );
1144
-
1145
- const formInverseA = manager.inverseTransform( formA );
1146
- const formInverseB = manager.inverseTransform( formB );
1147
-
1148
- const formA2 = manager.multiplyTransforms( formInverseA, form );
1149
- const formB2 = manager.multiplyTransforms( formInverseB, form );
1150
-
1151
- const constraint = new Ammo.btGeneric6DofSpringConstraint( bodyA.body, bodyB.body, formA2, formB2, true );
1152
-
1153
- const lll = manager.allocVector3();
1154
- const lul = manager.allocVector3();
1155
- const all = manager.allocVector3();
1156
- const aul = manager.allocVector3();
1157
-
1158
- lll.setValue( params.translationLimitation1[ 0 ],
1159
- params.translationLimitation1[ 1 ],
1160
- params.translationLimitation1[ 2 ] );
1161
- lul.setValue( params.translationLimitation2[ 0 ],
1162
- params.translationLimitation2[ 1 ],
1163
- params.translationLimitation2[ 2 ] );
1164
- all.setValue( params.rotationLimitation1[ 0 ],
1165
- params.rotationLimitation1[ 1 ],
1166
- params.rotationLimitation1[ 2 ] );
1167
- aul.setValue( params.rotationLimitation2[ 0 ],
1168
- params.rotationLimitation2[ 1 ],
1169
- params.rotationLimitation2[ 2 ] );
1170
-
1171
- constraint.setLinearLowerLimit( lll );
1172
- constraint.setLinearUpperLimit( lul );
1173
- constraint.setAngularLowerLimit( all );
1174
- constraint.setAngularUpperLimit( aul );
1175
-
1176
- for ( let i = 0; i < 3; i ++ ) {
1177
-
1178
- if ( params.springPosition[ i ] !== 0 ) {
1179
-
1180
- constraint.enableSpring( i, true );
1181
- constraint.setStiffness( i, params.springPosition[ i ] );
1182
-
1183
- }
1184
-
1185
- }
1186
-
1187
- for ( let i = 0; i < 3; i ++ ) {
1188
-
1189
- if ( params.springRotation[ i ] !== 0 ) {
1190
-
1191
- constraint.enableSpring( i + 3, true );
1192
- constraint.setStiffness( i + 3, params.springRotation[ i ] );
1193
-
1194
- }
1195
-
1196
- }
1197
-
1198
- /*
1199
- * Currently(10/31/2016) official ammo.js doesn't support
1200
- * btGeneric6DofSpringConstraint.setParam method.
1201
- * You need custom ammo.js (add the method into idl) if you wanna use.
1202
- * By setting this parameter, physics will be more like MMD's
1203
- */
1204
- if ( constraint.setParam !== undefined ) {
1205
-
1206
- for ( let i = 0; i < 6; i ++ ) {
1207
-
1208
- constraint.setParam( 2, 0.475, i );
1209
-
1210
- }
1211
-
1212
- }
1213
-
1214
- this.world.addConstraint( constraint, true );
1215
- this.constraint = constraint;
1216
-
1217
- manager.freeTransform( form );
1218
- manager.freeTransform( formA );
1219
- manager.freeTransform( formB );
1220
- manager.freeTransform( formInverseA );
1221
- manager.freeTransform( formInverseB );
1222
- manager.freeTransform( formA2 );
1223
- manager.freeTransform( formB2 );
1224
- manager.freeVector3( lll );
1225
- manager.freeVector3( lul );
1226
- manager.freeVector3( all );
1227
- manager.freeVector3( aul );
1228
-
1229
- }
1230
-
1231
- }
1232
-
1233
- //
1234
-
1235
- const _position = new Vector3();
1236
- const _quaternion = new Quaternion();
1237
- const _scale = new Vector3();
1238
- const _matrixWorldInv = new Matrix4();
1239
-
1240
- class MMDPhysicsHelper extends Object3D {
1241
-
1242
- /**
1243
- * Visualize Rigid bodies
1244
- *
1245
- * @param {THREE.SkinnedMesh} mesh
1246
- * @param {Physics} physics
1247
- */
1248
- constructor( mesh, physics ) {
1249
-
1250
- super();
1251
-
1252
- this.root = mesh;
1253
- this.physics = physics;
1254
-
1255
- this.matrix.copy( mesh.matrixWorld );
1256
- this.matrixAutoUpdate = false;
1257
-
1258
- this.materials = [];
1259
-
1260
- this.materials.push(
1261
- new MeshBasicMaterial( {
1262
- color: new Color( 0xff8888 ),
1263
- wireframe: true,
1264
- depthTest: false,
1265
- depthWrite: false,
1266
- opacity: 0.25,
1267
- transparent: true
1268
- } )
1269
- );
1270
-
1271
- this.materials.push(
1272
- new MeshBasicMaterial( {
1273
- color: new Color( 0x88ff88 ),
1274
- wireframe: true,
1275
- depthTest: false,
1276
- depthWrite: false,
1277
- opacity: 0.25,
1278
- transparent: true
1279
- } )
1280
- );
1281
-
1282
- this.materials.push(
1283
- new MeshBasicMaterial( {
1284
- color: new Color( 0x8888ff ),
1285
- wireframe: true,
1286
- depthTest: false,
1287
- depthWrite: false,
1288
- opacity: 0.25,
1289
- transparent: true
1290
- } )
1291
- );
1292
-
1293
- this._init();
1294
-
1295
- }
1296
-
1297
-
1298
- /**
1299
- * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.
1300
- */
1301
- dispose() {
1302
-
1303
- const materials = this.materials;
1304
- const children = this.children;
1305
-
1306
- for ( let i = 0; i < materials.length; i ++ ) {
1307
-
1308
- materials[ i ].dispose();
1309
-
1310
- }
1311
-
1312
- for ( let i = 0; i < children.length; i ++ ) {
1313
-
1314
- const child = children[ i ];
1315
-
1316
- if ( child.isMesh ) child.geometry.dispose();
1317
-
1318
- }
1319
-
1320
- }
1321
-
1322
- /**
1323
- * Updates Rigid Bodies visualization.
1324
- */
1325
- updateMatrixWorld( force ) {
1326
-
1327
- var mesh = this.root;
1328
-
1329
- if ( this.visible ) {
1330
-
1331
- var bodies = this.physics.bodies;
1332
-
1333
- _matrixWorldInv
1334
- .copy( mesh.matrixWorld )
1335
- .decompose( _position, _quaternion, _scale )
1336
- .compose( _position, _quaternion, _scale.set( 1, 1, 1 ) )
1337
- .invert();
1338
-
1339
- for ( var i = 0, il = bodies.length; i < il; i ++ ) {
1340
-
1341
- var body = bodies[ i ].body;
1342
- var child = this.children[ i ];
1343
-
1344
- var tr = body.getCenterOfMassTransform();
1345
- var origin = tr.getOrigin();
1346
- var rotation = tr.getRotation();
1347
-
1348
- child.position
1349
- .set( origin.x(), origin.y(), origin.z() )
1350
- .applyMatrix4( _matrixWorldInv );
1351
-
1352
- child.quaternion
1353
- .setFromRotationMatrix( _matrixWorldInv )
1354
- .multiply(
1355
- _quaternion.set( rotation.x(), rotation.y(), rotation.z(), rotation.w() )
1356
- );
1357
-
1358
- }
1359
-
1360
- }
1361
-
1362
- this.matrix
1363
- .copy( mesh.matrixWorld )
1364
- .decompose( _position, _quaternion, _scale )
1365
- .compose( _position, _quaternion, _scale.set( 1, 1, 1 ) );
1366
-
1367
- super.updateMatrixWorld( force );
1368
-
1369
- }
1370
-
1371
- // private method
1372
-
1373
- _init() {
1374
-
1375
- var bodies = this.physics.bodies;
1376
-
1377
- function createGeometry( param ) {
1378
-
1379
- switch ( param.shapeType ) {
1380
-
1381
- case 0:
1382
- return new SphereGeometry( param.width, 16, 8 );
1383
-
1384
- case 1:
1385
- return new BoxGeometry( param.width * 2, param.height * 2, param.depth * 2, 8, 8, 8 );
1386
-
1387
- case 2:
1388
- return new CapsuleGeometry( param.width, param.height, 8, 16 );
1389
-
1390
- default:
1391
- return null;
1392
-
1393
- }
1394
-
1395
- }
1396
-
1397
- for ( var i = 0, il = bodies.length; i < il; i ++ ) {
1398
-
1399
- var param = bodies[ i ].params;
1400
- this.add( new Mesh( createGeometry( param ), this.materials[ param.type ] ) );
1401
-
1402
- }
1403
-
1404
- }
1405
-
1406
- }
1407
-
1408
- export { MMDPhysics };