super-three 0.181.0 → 0.184.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.
- package/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +34 -2
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +687 -48
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -24
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -68
- package/src/nodes/TSL.js +7 -7
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +2 -3
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +29 -14
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +17 -5
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Color } from 'three';
|
|
2
|
-
import { attribute, cameraProjectionMatrix, dot, float, Fn, modelViewMatrix, modelViewProjection,
|
|
1
|
+
import { Color, NodeMaterial } from 'three/webgpu';
|
|
2
|
+
import { attribute, cameraProjectionMatrix, dot, float, Fn, modelViewMatrix, modelViewProjection, normalize, positionGeometry, sign, uniform, varyingProperty, vec2, vec4 } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* A special line material for meshes loaded via {@link LDrawLoader}.
|
|
@@ -297,7 +297,7 @@ const woodParams = {
|
|
|
297
297
|
teak: {
|
|
298
298
|
transformationMatrix: new THREE.Matrix4().identity(),
|
|
299
299
|
centerSize: 1.11, largeWarpScale: 0.32, largeGrainStretch: 0.24, smallWarpStrength: 0.059,
|
|
300
|
-
smallWarpScale: 2, fineWarpStrength: 0.006, fineWarpScale: 32.8, ringThickness: 1/34,
|
|
300
|
+
smallWarpScale: 2, fineWarpStrength: 0.006, fineWarpScale: 32.8, ringThickness: 1 / 34,
|
|
301
301
|
ringBias: 0.03, ringSizeVariance: 0.03, ringVarianceScale: 4.4, barkThickness: 0.3,
|
|
302
302
|
splotchScale: 0.2, splotchIntensity: 0.541, cellScale: 910, cellSize: 0.1,
|
|
303
303
|
darkGrainColor: '#0c0504', lightGrainColor: '#926c50'
|
|
@@ -305,7 +305,7 @@ const woodParams = {
|
|
|
305
305
|
walnut: {
|
|
306
306
|
transformationMatrix: new THREE.Matrix4().identity(),
|
|
307
307
|
centerSize: 1.07, largeWarpScale: 0.42, largeGrainStretch: 0.34, smallWarpStrength: 0.016,
|
|
308
|
-
smallWarpScale: 10.3, fineWarpStrength: 0.028, fineWarpScale: 12.7, ringThickness: 1/32,
|
|
308
|
+
smallWarpScale: 10.3, fineWarpStrength: 0.028, fineWarpScale: 12.7, ringThickness: 1 / 32,
|
|
309
309
|
ringBias: 0.08, ringSizeVariance: 0.03, ringVarianceScale: 5.5, barkThickness: 0.98,
|
|
310
310
|
splotchScale: 1.84, splotchIntensity: 0.97, cellScale: 710, cellSize: 0.31,
|
|
311
311
|
darkGrainColor: '#311e13', lightGrainColor: '#523424'
|
|
@@ -313,7 +313,7 @@ const woodParams = {
|
|
|
313
313
|
white_oak: {
|
|
314
314
|
transformationMatrix: new THREE.Matrix4().identity(),
|
|
315
315
|
centerSize: 1.23, largeWarpScale: 0.21, largeGrainStretch: 0.21, smallWarpStrength: 0.034,
|
|
316
|
-
smallWarpScale: 2.44, fineWarpStrength: 0.01, fineWarpScale: 14.3, ringThickness: 1/34,
|
|
316
|
+
smallWarpScale: 2.44, fineWarpStrength: 0.01, fineWarpScale: 14.3, ringThickness: 1 / 34,
|
|
317
317
|
ringBias: 0.82, ringSizeVariance: 0.16, ringVarianceScale: 1.4, barkThickness: 0.7,
|
|
318
318
|
splotchScale: 0.2, splotchIntensity: 0.541, cellScale: 800, cellSize: 0.28,
|
|
319
319
|
darkGrainColor: '#8b4c21', lightGrainColor: '#c57e43'
|
|
@@ -321,7 +321,7 @@ const woodParams = {
|
|
|
321
321
|
pine: {
|
|
322
322
|
transformationMatrix: new THREE.Matrix4().identity(),
|
|
323
323
|
centerSize: 1.23, largeWarpScale: 0.21, largeGrainStretch: 0.18, smallWarpStrength: 0.041,
|
|
324
|
-
smallWarpScale: 2.44, fineWarpStrength: 0.006, fineWarpScale: 23.2, ringThickness: 1/24,
|
|
324
|
+
smallWarpScale: 2.44, fineWarpStrength: 0.006, fineWarpScale: 23.2, ringThickness: 1 / 24,
|
|
325
325
|
ringBias: 0.1, ringSizeVariance: 0.07, ringVarianceScale: 5, barkThickness: 0.35,
|
|
326
326
|
splotchScale: 0.51, splotchIntensity: 3.32, cellScale: 1480, cellSize: 0.07,
|
|
327
327
|
darkGrainColor: '#c58355', lightGrainColor: '#d19d61'
|
|
@@ -329,7 +329,7 @@ const woodParams = {
|
|
|
329
329
|
poplar: {
|
|
330
330
|
transformationMatrix: new THREE.Matrix4().identity(),
|
|
331
331
|
centerSize: 1.43, largeWarpScale: 0.33, largeGrainStretch: 0.18, smallWarpStrength: 0.04,
|
|
332
|
-
smallWarpScale: 4.3, fineWarpStrength: 0.004, fineWarpScale: 33.6, ringThickness: 1/37,
|
|
332
|
+
smallWarpScale: 4.3, fineWarpStrength: 0.004, fineWarpScale: 33.6, ringThickness: 1 / 37,
|
|
333
333
|
ringBias: 0.07, ringSizeVariance: 0.03, ringVarianceScale: 3.8, barkThickness: 0.3,
|
|
334
334
|
splotchScale: 1.92, splotchIntensity: 0.71, cellScale: 830, cellSize: 0.04,
|
|
335
335
|
darkGrainColor: '#716347', lightGrainColor: '#998966'
|
|
@@ -337,7 +337,7 @@ const woodParams = {
|
|
|
337
337
|
maple: {
|
|
338
338
|
transformationMatrix: new THREE.Matrix4().identity(),
|
|
339
339
|
centerSize: 1.4, largeWarpScale: 0.38, largeGrainStretch: 0.25, smallWarpStrength: 0.067,
|
|
340
|
-
smallWarpScale: 2.5, fineWarpStrength: 0.005, fineWarpScale: 33.6, ringThickness: 1/35,
|
|
340
|
+
smallWarpScale: 2.5, fineWarpStrength: 0.005, fineWarpScale: 33.6, ringThickness: 1 / 35,
|
|
341
341
|
ringBias: 0.1, ringSizeVariance: 0.07, ringVarianceScale: 4.6, barkThickness: 0.61,
|
|
342
342
|
splotchScale: 0.46, splotchIntensity: 1.49, cellScale: 800, cellSize: 0.03,
|
|
343
343
|
darkGrainColor: '#b08969', lightGrainColor: '#bc9d7d'
|
|
@@ -345,7 +345,7 @@ const woodParams = {
|
|
|
345
345
|
red_oak: {
|
|
346
346
|
transformationMatrix: new THREE.Matrix4().identity(),
|
|
347
347
|
centerSize: 1.21, largeWarpScale: 0.24, largeGrainStretch: 0.25, smallWarpStrength: 0.044,
|
|
348
|
-
smallWarpScale: 2.54, fineWarpStrength: 0.01, fineWarpScale: 14.5, ringThickness: 1/34,
|
|
348
|
+
smallWarpScale: 2.54, fineWarpStrength: 0.01, fineWarpScale: 14.5, ringThickness: 1 / 34,
|
|
349
349
|
ringBias: 0.92, ringSizeVariance: 0.03, ringVarianceScale: 5.6, barkThickness: 1.01,
|
|
350
350
|
splotchScale: 0.28, splotchIntensity: 3.48, cellScale: 800, cellSize: 0.25,
|
|
351
351
|
darkGrainColor: '#af613b', lightGrainColor: '#e0a27a'
|
|
@@ -353,7 +353,7 @@ const woodParams = {
|
|
|
353
353
|
cherry: {
|
|
354
354
|
transformationMatrix: new THREE.Matrix4().identity(),
|
|
355
355
|
centerSize: 1.33, largeWarpScale: 0.11, largeGrainStretch: 0.33, smallWarpStrength: 0.024,
|
|
356
|
-
smallWarpScale: 2.48, fineWarpStrength: 0.01, fineWarpScale: 15.3, ringThickness: 1/36,
|
|
356
|
+
smallWarpScale: 2.48, fineWarpStrength: 0.01, fineWarpScale: 15.3, ringThickness: 1 / 36,
|
|
357
357
|
ringBias: 0.02, ringSizeVariance: 0.04, ringVarianceScale: 6.5, barkThickness: 0.09,
|
|
358
358
|
splotchScale: 1.27, splotchIntensity: 1.24, cellScale: 1530, cellSize: 0.15,
|
|
359
359
|
darkGrainColor: '#913f27', lightGrainColor: '#b45837'
|
|
@@ -361,7 +361,7 @@ const woodParams = {
|
|
|
361
361
|
cedar: {
|
|
362
362
|
transformationMatrix: new THREE.Matrix4().identity(),
|
|
363
363
|
centerSize: 1.11, largeWarpScale: 0.39, largeGrainStretch: 0.12, smallWarpStrength: 0.061,
|
|
364
|
-
smallWarpScale: 1.9, fineWarpStrength: 0.006, fineWarpScale: 4.8, ringThickness: 1/25,
|
|
364
|
+
smallWarpScale: 1.9, fineWarpStrength: 0.006, fineWarpScale: 4.8, ringThickness: 1 / 25,
|
|
365
365
|
ringBias: 0.01, ringSizeVariance: 0.07, ringVarianceScale: 6.7, barkThickness: 0.1,
|
|
366
366
|
splotchScale: 0.61, splotchIntensity: 2.54, cellScale: 630, cellSize: 0.19,
|
|
367
367
|
darkGrainColor: '#9a5b49', lightGrainColor: '#ae745e'
|
|
@@ -369,7 +369,7 @@ const woodParams = {
|
|
|
369
369
|
mahogany: {
|
|
370
370
|
transformationMatrix: new THREE.Matrix4().identity(),
|
|
371
371
|
centerSize: 1.25, largeWarpScale: 0.26, largeGrainStretch: 0.29, smallWarpStrength: 0.044,
|
|
372
|
-
smallWarpScale: 2.54, fineWarpStrength: 0.01, fineWarpScale: 15.3, ringThickness: 1/38,
|
|
372
|
+
smallWarpScale: 2.54, fineWarpStrength: 0.01, fineWarpScale: 15.3, ringThickness: 1 / 38,
|
|
373
373
|
ringBias: 0.01, ringSizeVariance: 0.33, ringVarianceScale: 1.2, barkThickness: 0.07,
|
|
374
374
|
splotchScale: 0.77, splotchIntensity: 1.39, cellScale: 1400, cellSize: 0.23,
|
|
375
375
|
darkGrainColor: '#501d12', lightGrainColor: '#6d3722'
|
|
@@ -433,7 +433,7 @@ uniforms.lightGrainColor = TSL.uniform( new THREE.Color( params.lightGrainColor
|
|
|
433
433
|
uniforms.transformationMatrix = TSL.uniform( new THREE.Matrix4().copy( params.transformationMatrix ) ).onObjectUpdate( ( { material } ) => material.transformationMatrix );
|
|
434
434
|
|
|
435
435
|
const colorNode = wood(
|
|
436
|
-
uniforms.transformationMatrix.mul( TSL.vec4(TSL.positionLocal, 1) ).xyz,
|
|
436
|
+
uniforms.transformationMatrix.mul( TSL.vec4( TSL.positionLocal, 1 ) ).xyz,
|
|
437
437
|
uniforms.centerSize,
|
|
438
438
|
uniforms.largeWarpScale,
|
|
439
439
|
uniforms.largeGrainStretch,
|
|
@@ -17,8 +17,10 @@ const _point2 = new Vector3();
|
|
|
17
17
|
const _plane = new Plane();
|
|
18
18
|
const _line1 = new Line3();
|
|
19
19
|
const _line2 = new Line3();
|
|
20
|
+
const _box = new Box3();
|
|
20
21
|
const _sphere = new Sphere();
|
|
21
22
|
const _capsule = new Capsule();
|
|
23
|
+
const _center = new Vector3();
|
|
22
24
|
|
|
23
25
|
const _temp1 = new Vector3();
|
|
24
26
|
const _temp2 = new Vector3();
|
|
@@ -373,6 +375,61 @@ class Octree {
|
|
|
373
375
|
|
|
374
376
|
}
|
|
375
377
|
|
|
378
|
+
/**
|
|
379
|
+
* Computes the intersection between the given bounding box and triangle.
|
|
380
|
+
*
|
|
381
|
+
* @param {Box3} box - The bounding box to test.
|
|
382
|
+
* @param {Triangle} triangle - The triangle to test.
|
|
383
|
+
* @return {Object|false} The intersection object. If no intersection
|
|
384
|
+
* is detected, the method returns `false`.
|
|
385
|
+
*/
|
|
386
|
+
triangleBoxIntersect( box, triangle ) {
|
|
387
|
+
|
|
388
|
+
// cheap check
|
|
389
|
+
|
|
390
|
+
if ( Math.max( triangle.a.x, triangle.b.x, triangle.c.x ) < box.min.x ||
|
|
391
|
+
Math.min( triangle.a.x, triangle.b.x, triangle.c.x ) > box.max.x ||
|
|
392
|
+
Math.max( triangle.a.y, triangle.b.y, triangle.c.y ) < box.min.y ||
|
|
393
|
+
Math.min( triangle.a.y, triangle.b.y, triangle.c.y ) > box.max.y ||
|
|
394
|
+
Math.max( triangle.a.z, triangle.b.z, triangle.c.z ) < box.min.z ||
|
|
395
|
+
Math.min( triangle.a.z, triangle.b.z, triangle.c.z ) > box.max.z ) {
|
|
396
|
+
|
|
397
|
+
return false;
|
|
398
|
+
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
// expensive check
|
|
402
|
+
|
|
403
|
+
if ( ! box.intersectsTriangle( triangle ) ) return false;
|
|
404
|
+
|
|
405
|
+
// there is an intersection, now compute collision data
|
|
406
|
+
|
|
407
|
+
triangle.getPlane( _plane );
|
|
408
|
+
|
|
409
|
+
// determine which corner of the box is "deepest" into the plane
|
|
410
|
+
|
|
411
|
+
_v1.x = ( _plane.normal.x > 0 ) ? box.min.x : box.max.x;
|
|
412
|
+
_v1.y = ( _plane.normal.y > 0 ) ? box.min.y : box.max.y;
|
|
413
|
+
_v1.z = ( _plane.normal.z > 0 ) ? box.min.z : box.max.z;
|
|
414
|
+
|
|
415
|
+
// Calculate the distance from the plane to that corner (the distance will be negative
|
|
416
|
+
// because of the intersection)
|
|
417
|
+
|
|
418
|
+
const distance = _plane.distanceToPoint( _v1 );
|
|
419
|
+
|
|
420
|
+
const intersection = {
|
|
421
|
+
depth: - distance, // Flip sign so depth is positive
|
|
422
|
+
normal: _plane.normal.clone(),
|
|
423
|
+
point: _v1.clone()
|
|
424
|
+
};
|
|
425
|
+
|
|
426
|
+
// project the point onto the triangle surface
|
|
427
|
+
intersection.point.addScaledVector( intersection.normal, distance );
|
|
428
|
+
|
|
429
|
+
return intersection;
|
|
430
|
+
|
|
431
|
+
}
|
|
432
|
+
|
|
376
433
|
/**
|
|
377
434
|
* Computes the intersection between the given sphere and triangle.
|
|
378
435
|
*
|
|
@@ -455,6 +512,38 @@ class Octree {
|
|
|
455
512
|
|
|
456
513
|
}
|
|
457
514
|
|
|
515
|
+
/**
|
|
516
|
+
* Computes the triangles that potentially intersect with the given bounding box.
|
|
517
|
+
*
|
|
518
|
+
* @param {Box3} box - The bounding box.
|
|
519
|
+
* @param {Array<Triangle>} triangles - The target array that holds the triangles.
|
|
520
|
+
*/
|
|
521
|
+
getBoxTriangles( box, triangles ) {
|
|
522
|
+
|
|
523
|
+
for ( let i = 0; i < this.subTrees.length; i ++ ) {
|
|
524
|
+
|
|
525
|
+
const subTree = this.subTrees[ i ];
|
|
526
|
+
|
|
527
|
+
if ( ! box.intersectsBox( subTree.box ) ) continue;
|
|
528
|
+
|
|
529
|
+
if ( subTree.triangles.length > 0 ) {
|
|
530
|
+
|
|
531
|
+
for ( let j = 0; j < subTree.triangles.length; j ++ ) {
|
|
532
|
+
|
|
533
|
+
if ( triangles.indexOf( subTree.triangles[ j ] ) === - 1 ) triangles.push( subTree.triangles[ j ] );
|
|
534
|
+
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
} else {
|
|
538
|
+
|
|
539
|
+
subTree.getBoxTriangles( box, triangles );
|
|
540
|
+
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
}
|
|
546
|
+
|
|
458
547
|
/**
|
|
459
548
|
* Computes the triangles that potentially intersect with the given capsule.
|
|
460
549
|
*
|
|
@@ -487,6 +576,47 @@ class Octree {
|
|
|
487
576
|
|
|
488
577
|
}
|
|
489
578
|
|
|
579
|
+
/**
|
|
580
|
+
* Performs a bounding box intersection test with this Octree.
|
|
581
|
+
*
|
|
582
|
+
* @param {Box3} box - The bounding box to test.
|
|
583
|
+
* @return {Object|boolean} The intersection object. If no intersection
|
|
584
|
+
* is detected, the method returns `false`.
|
|
585
|
+
*/
|
|
586
|
+
boxIntersect( box ) {
|
|
587
|
+
|
|
588
|
+
_box.copy( box );
|
|
589
|
+
|
|
590
|
+
const triangles = [];
|
|
591
|
+
let result, hit = false;
|
|
592
|
+
|
|
593
|
+
this.getBoxTriangles( box, triangles );
|
|
594
|
+
|
|
595
|
+
for ( let i = 0; i < triangles.length; i ++ ) {
|
|
596
|
+
|
|
597
|
+
if ( result = this.triangleBoxIntersect( _box, triangles[ i ] ) ) {
|
|
598
|
+
|
|
599
|
+
hit = true;
|
|
600
|
+
|
|
601
|
+
_box.translate( result.normal.multiplyScalar( result.depth ) );
|
|
602
|
+
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
if ( hit ) {
|
|
608
|
+
|
|
609
|
+
const collisionVector = _box.getCenter( _center ).sub( box.getCenter( _v1 ) );
|
|
610
|
+
const depth = collisionVector.length();
|
|
611
|
+
|
|
612
|
+
return { normal: collisionVector.normalize(), depth: depth };
|
|
613
|
+
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
return false;
|
|
617
|
+
|
|
618
|
+
}
|
|
619
|
+
|
|
490
620
|
/**
|
|
491
621
|
* Performs a bounding sphere intersection test with this Octree.
|
|
492
622
|
*
|
|
@@ -558,7 +688,7 @@ class Octree {
|
|
|
558
688
|
|
|
559
689
|
if ( hit ) {
|
|
560
690
|
|
|
561
|
-
const collisionVector = _capsule.getCenter(
|
|
691
|
+
const collisionVector = _capsule.getCenter( _center ).sub( capsule.getCenter( _v1 ) );
|
|
562
692
|
const depth = collisionVector.length();
|
|
563
693
|
|
|
564
694
|
return { normal: collisionVector.normalize(), depth: depth };
|
|
@@ -195,6 +195,10 @@ class RollerCoasterGeometry extends BufferGeometry {
|
|
|
195
195
|
|
|
196
196
|
const offset = new Vector3();
|
|
197
197
|
|
|
198
|
+
const sample1 = new Vector3();
|
|
199
|
+
const sample2 = new Vector3();
|
|
200
|
+
const rollQuaternion = new Quaternion();
|
|
201
|
+
|
|
198
202
|
for ( let i = 1; i <= divisions; i ++ ) {
|
|
199
203
|
|
|
200
204
|
point.copy( curve.getPointAt( i / divisions ) );
|
|
@@ -209,6 +213,20 @@ class RollerCoasterGeometry extends BufferGeometry {
|
|
|
209
213
|
|
|
210
214
|
quaternion.setFromAxisAngle( up, angle );
|
|
211
215
|
|
|
216
|
+
// banking
|
|
217
|
+
|
|
218
|
+
const bankDelta = 0.01;
|
|
219
|
+
const t = i / divisions;
|
|
220
|
+
|
|
221
|
+
sample1.copy( curve.getTangentAt( ( ( t - bankDelta ) % 1 + 1 ) % 1 ) );
|
|
222
|
+
sample2.copy( curve.getTangentAt( ( t + bankDelta ) % 1 ) );
|
|
223
|
+
|
|
224
|
+
let headingChange = Math.atan2( sample2.x, sample2.z ) - Math.atan2( sample1.x, sample1.z );
|
|
225
|
+
if ( headingChange > Math.PI ) headingChange -= Math.PI * 2;
|
|
226
|
+
if ( headingChange < -Math.PI ) headingChange += Math.PI * 2;
|
|
227
|
+
|
|
228
|
+
quaternion.premultiply( rollQuaternion.setFromAxisAngle( forward, - Math.atan( headingChange * 8 ) * 0.5 ) );
|
|
229
|
+
|
|
212
230
|
if ( i % 2 === 0 ) {
|
|
213
231
|
|
|
214
232
|
drawShape( step, color2 );
|
|
@@ -356,6 +374,11 @@ class RollerCoasterLiftersGeometry extends BufferGeometry {
|
|
|
356
374
|
const fromPoint = new Vector3();
|
|
357
375
|
const toPoint = new Vector3();
|
|
358
376
|
|
|
377
|
+
const sample1 = new Vector3();
|
|
378
|
+
const sample2 = new Vector3();
|
|
379
|
+
const bankedQuaternion = new Quaternion();
|
|
380
|
+
const rollQuaternion = new Quaternion();
|
|
381
|
+
|
|
359
382
|
for ( let i = 1; i <= divisions; i ++ ) {
|
|
360
383
|
|
|
361
384
|
point.copy( curve.getPointAt( i / divisions ) );
|
|
@@ -365,6 +388,22 @@ class RollerCoasterLiftersGeometry extends BufferGeometry {
|
|
|
365
388
|
|
|
366
389
|
quaternion.setFromAxisAngle( up, angle );
|
|
367
390
|
|
|
391
|
+
// banking
|
|
392
|
+
|
|
393
|
+
const bankDelta = 0.01;
|
|
394
|
+
const t = i / divisions;
|
|
395
|
+
|
|
396
|
+
sample1.copy( curve.getTangentAt( ( ( t - bankDelta ) % 1 + 1 ) % 1 ) );
|
|
397
|
+
sample2.copy( curve.getTangentAt( ( t + bankDelta ) % 1 ) );
|
|
398
|
+
|
|
399
|
+
let headingChange = Math.atan2( sample2.x, sample2.z ) - Math.atan2( sample1.x, sample1.z );
|
|
400
|
+
if ( headingChange > Math.PI ) headingChange -= Math.PI * 2;
|
|
401
|
+
if ( headingChange < -Math.PI ) headingChange += Math.PI * 2;
|
|
402
|
+
|
|
403
|
+
bankedQuaternion.copy( quaternion );
|
|
404
|
+
rollQuaternion.setFromAxisAngle( tangent, - Math.atan( headingChange * 8 ) * 0.5 );
|
|
405
|
+
bankedQuaternion.premultiply( rollQuaternion );
|
|
406
|
+
|
|
368
407
|
//
|
|
369
408
|
|
|
370
409
|
if ( point.y > 10 ) {
|
|
@@ -402,12 +441,11 @@ class RollerCoasterLiftersGeometry extends BufferGeometry {
|
|
|
402
441
|
} else {
|
|
403
442
|
|
|
404
443
|
fromPoint.set( 0, - 0.2, 0 );
|
|
405
|
-
fromPoint.applyQuaternion(
|
|
444
|
+
fromPoint.applyQuaternion( bankedQuaternion );
|
|
406
445
|
fromPoint.add( point );
|
|
407
446
|
|
|
408
|
-
toPoint.
|
|
409
|
-
toPoint.
|
|
410
|
-
toPoint.add( point );
|
|
447
|
+
toPoint.copy( fromPoint );
|
|
448
|
+
toPoint.y = 0;
|
|
411
449
|
|
|
412
450
|
extrudeShape( tube3, fromPoint, toPoint );
|
|
413
451
|
|
|
@@ -46,7 +46,7 @@ class TessellateModifier {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
/**
|
|
49
|
-
* Returns a new, modified version of the given geometry by applying a
|
|
49
|
+
* Returns a new, modified version of the given geometry by applying a tessellation.
|
|
50
50
|
* Please note that the resulting geometry is always non-indexed.
|
|
51
51
|
*
|
|
52
52
|
* @param {BufferGeometry} geometry - The geometry to modify.
|
|
@@ -215,7 +215,7 @@ class LensflareMesh extends Mesh {
|
|
|
215
215
|
|
|
216
216
|
renderer.getViewport( viewport );
|
|
217
217
|
|
|
218
|
-
viewport.multiplyScalar(
|
|
218
|
+
viewport.multiplyScalar( renderer.getPixelRatio() ).floor();
|
|
219
219
|
|
|
220
220
|
const renderTarget = renderer.getRenderTarget();
|
|
221
221
|
const type = ( renderTarget !== null ) ? renderTarget.texture.type : UnsignedByteType;
|
|
@@ -2,7 +2,6 @@ import {
|
|
|
2
2
|
Color,
|
|
3
3
|
Matrix4,
|
|
4
4
|
Mesh,
|
|
5
|
-
PerspectiveCamera,
|
|
6
5
|
Plane,
|
|
7
6
|
ShaderMaterial,
|
|
8
7
|
UniformsUtils,
|
|
@@ -67,12 +66,12 @@ class Reflector extends Mesh {
|
|
|
67
66
|
this.forceUpdate = false;
|
|
68
67
|
|
|
69
68
|
/**
|
|
70
|
-
*
|
|
71
|
-
* the scene from the mirror's point of view.
|
|
69
|
+
* Weak map for managing reflection cameras.
|
|
72
70
|
*
|
|
73
|
-
* @
|
|
71
|
+
* @private
|
|
72
|
+
* @type {WeakMap<Camera, Camera>}
|
|
74
73
|
*/
|
|
75
|
-
this.
|
|
74
|
+
this._reflectionCameras = new WeakMap();
|
|
76
75
|
|
|
77
76
|
const scope = this;
|
|
78
77
|
|
|
@@ -98,7 +97,6 @@ class Reflector extends Mesh {
|
|
|
98
97
|
const q = new Vector4();
|
|
99
98
|
|
|
100
99
|
const textureMatrix = new Matrix4();
|
|
101
|
-
const virtualCamera = this.camera;
|
|
102
100
|
|
|
103
101
|
const renderTarget = new WebGLRenderTarget( textureWidth, textureHeight, { samples: multisample, type: HalfFloatType } );
|
|
104
102
|
|
|
@@ -117,6 +115,8 @@ class Reflector extends Mesh {
|
|
|
117
115
|
|
|
118
116
|
this.onBeforeRender = function ( renderer, scene, camera ) {
|
|
119
117
|
|
|
118
|
+
const reflectionCamera = this._getReflectionCamera( camera );
|
|
119
|
+
|
|
120
120
|
reflectorWorldPosition.setFromMatrixPosition( scope.matrixWorld );
|
|
121
121
|
cameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );
|
|
122
122
|
|
|
@@ -145,16 +145,16 @@ class Reflector extends Mesh {
|
|
|
145
145
|
target.reflect( normal ).negate();
|
|
146
146
|
target.add( reflectorWorldPosition );
|
|
147
147
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
148
|
+
reflectionCamera.position.copy( view );
|
|
149
|
+
reflectionCamera.up.set( 0, 1, 0 );
|
|
150
|
+
reflectionCamera.up.applyMatrix4( rotationMatrix );
|
|
151
|
+
reflectionCamera.up.reflect( normal );
|
|
152
|
+
reflectionCamera.lookAt( target );
|
|
153
153
|
|
|
154
|
-
|
|
154
|
+
reflectionCamera.far = camera.far; // Used in WebGLBackground
|
|
155
155
|
|
|
156
|
-
|
|
157
|
-
|
|
156
|
+
reflectionCamera.updateMatrixWorld();
|
|
157
|
+
reflectionCamera.projectionMatrix.copy( camera.projectionMatrix );
|
|
158
158
|
|
|
159
159
|
// Update the texture matrix
|
|
160
160
|
textureMatrix.set(
|
|
@@ -163,23 +163,34 @@ class Reflector extends Mesh {
|
|
|
163
163
|
0.0, 0.0, 0.5, 0.5,
|
|
164
164
|
0.0, 0.0, 0.0, 1.0
|
|
165
165
|
);
|
|
166
|
-
textureMatrix.multiply(
|
|
167
|
-
textureMatrix.multiply(
|
|
166
|
+
textureMatrix.multiply( reflectionCamera.projectionMatrix );
|
|
167
|
+
textureMatrix.multiply( reflectionCamera.matrixWorldInverse );
|
|
168
168
|
textureMatrix.multiply( scope.matrixWorld );
|
|
169
169
|
|
|
170
170
|
// Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html
|
|
171
171
|
// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
|
|
172
172
|
reflectorPlane.setFromNormalAndCoplanarPoint( normal, reflectorWorldPosition );
|
|
173
|
-
reflectorPlane.applyMatrix4(
|
|
173
|
+
reflectorPlane.applyMatrix4( reflectionCamera.matrixWorldInverse );
|
|
174
174
|
|
|
175
175
|
clipPlane.set( reflectorPlane.normal.x, reflectorPlane.normal.y, reflectorPlane.normal.z, reflectorPlane.constant );
|
|
176
176
|
|
|
177
|
-
const projectionMatrix =
|
|
177
|
+
const projectionMatrix = reflectionCamera.projectionMatrix;
|
|
178
|
+
|
|
179
|
+
if ( reflectionCamera.isOrthographicCamera ) {
|
|
180
|
+
|
|
181
|
+
q.x = ( Math.sign( clipPlane.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];
|
|
182
|
+
q.y = ( Math.sign( clipPlane.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];
|
|
183
|
+
q.z = - camera.far; // actual view-space z at the far plane, no normalization needed
|
|
184
|
+
q.w = 1.0; // w_clip = 1 in orthographic (no perspective division)
|
|
185
|
+
|
|
186
|
+
} else {
|
|
178
187
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
188
|
+
q.x = ( Math.sign( clipPlane.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];
|
|
189
|
+
q.y = ( Math.sign( clipPlane.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];
|
|
190
|
+
q.z = - 1.0;
|
|
191
|
+
q.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];
|
|
192
|
+
|
|
193
|
+
}
|
|
183
194
|
|
|
184
195
|
// Calculate the scaled plane vector
|
|
185
196
|
clipPlane.multiplyScalar( 2.0 / clipPlane.dot( q ) );
|
|
@@ -187,8 +198,21 @@ class Reflector extends Mesh {
|
|
|
187
198
|
// Replacing the third row of the projection matrix
|
|
188
199
|
projectionMatrix.elements[ 2 ] = clipPlane.x;
|
|
189
200
|
projectionMatrix.elements[ 6 ] = clipPlane.y;
|
|
190
|
-
|
|
191
|
-
|
|
201
|
+
|
|
202
|
+
if ( reflectionCamera.isOrthographicCamera ) {
|
|
203
|
+
|
|
204
|
+
// For orthographic cameras, w_clip = 1 always (no perspective division),
|
|
205
|
+
// so the -1 near-plane offset must go into the constant term (elements[14])
|
|
206
|
+
// rather than the z coefficient (elements[10]).
|
|
207
|
+
projectionMatrix.elements[ 10 ] = clipPlane.z - clipBias;
|
|
208
|
+
projectionMatrix.elements[ 14 ] = clipPlane.w - 1.0;
|
|
209
|
+
|
|
210
|
+
} else {
|
|
211
|
+
|
|
212
|
+
projectionMatrix.elements[ 10 ] = clipPlane.z + 1.0 - clipBias;
|
|
213
|
+
projectionMatrix.elements[ 14 ] = clipPlane.w;
|
|
214
|
+
|
|
215
|
+
}
|
|
192
216
|
|
|
193
217
|
// Render
|
|
194
218
|
scope.visible = false;
|
|
@@ -206,7 +230,7 @@ class Reflector extends Mesh {
|
|
|
206
230
|
renderer.state.buffers.depth.setMask( true ); // make sure the depth buffer is writable so it can be properly cleared, see #18897
|
|
207
231
|
|
|
208
232
|
if ( renderer.autoClear === false ) renderer.clear();
|
|
209
|
-
renderer.render( scene,
|
|
233
|
+
renderer.render( scene, reflectionCamera );
|
|
210
234
|
|
|
211
235
|
renderer.xr.enabled = currentXrEnabled;
|
|
212
236
|
renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
|
|
@@ -250,6 +274,30 @@ class Reflector extends Mesh {
|
|
|
250
274
|
|
|
251
275
|
};
|
|
252
276
|
|
|
277
|
+
/**
|
|
278
|
+
* Returns a reflection camera for the given camera. The reflection camera is used to
|
|
279
|
+
* render the scene from the reflector's view so correct reflections can be produced.
|
|
280
|
+
*
|
|
281
|
+
* @private
|
|
282
|
+
* @param {Camera} camera - The scene's camera.
|
|
283
|
+
* @return {Camera} The corresponding reflection camera.
|
|
284
|
+
*/
|
|
285
|
+
this._getReflectionCamera = function ( camera ) {
|
|
286
|
+
|
|
287
|
+
let reflectionCamera = this._reflectionCameras.get( camera );
|
|
288
|
+
|
|
289
|
+
if ( reflectionCamera === undefined ) {
|
|
290
|
+
|
|
291
|
+
reflectionCamera = camera.clone();
|
|
292
|
+
|
|
293
|
+
this._reflectionCameras.set( camera, reflectionCamera );
|
|
294
|
+
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return reflectionCamera;
|
|
298
|
+
|
|
299
|
+
};
|
|
300
|
+
|
|
253
301
|
}
|
|
254
302
|
|
|
255
303
|
}
|