@gnsx/three 0.185.15 → 0.186.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/build/three.cjs +10 -82600
- package/build/three.core.js +1303 -728
- package/build/three.module.js +439 -338
- package/build/three.tsl.js +74 -44
- package/build/three.webgpu.js +6036 -2184
- package/build/three.webgpu.nodes.js +6020 -2184
- package/examples/jsm/Addons.js +6 -6
- package/examples/jsm/controls/ArcballControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +44 -20
- package/examples/jsm/controls/OrbitControls.js +9 -0
- package/examples/jsm/controls/TrackballControls.js +109 -4
- package/examples/jsm/csm/CSMShadowNode.js +13 -0
- package/examples/jsm/exporters/GLTFExporter.js +23 -7
- package/examples/jsm/exporters/USDZExporter.js +2 -2
- package/examples/jsm/generators/CityGenerator.js +377 -45
- package/examples/jsm/generators/ForestGenerator.js +12 -12
- package/examples/jsm/generators/TerrainGenerator.js +49 -37
- package/examples/jsm/generators/TreeGenerator.js +70 -76
- package/examples/jsm/generators/city/BenchGenerator.js +127 -0
- package/examples/jsm/generators/city/CarGenerator.js +479 -0
- package/examples/jsm/generators/city/CityGeneratorUtils.js +31 -0
- package/examples/jsm/generators/city/HydrantGenerator.js +106 -0
- package/examples/jsm/generators/city/InstancedMeshGenerator.js +86 -0
- package/examples/jsm/generators/city/PersonGenerator.js +447 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +33 -38
- package/examples/jsm/generators/city/SkyscraperGenerator.js +448 -48
- package/examples/jsm/generators/city/StreetTreeGenerator.js +231 -0
- package/examples/jsm/generators/city/StreetlightGenerator.js +100 -0
- package/examples/jsm/generators/city/TrafficlightGenerator.js +106 -0
- package/examples/jsm/generators/city/TrashcanGenerator.js +100 -0
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +1 -1
- package/examples/jsm/gpgpu/CountingSort.js +271 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +60 -239
- package/examples/jsm/helpers/LightProbeGridHelperWebGL.js +221 -0
- package/examples/jsm/inspector/Extension.js +94 -0
- package/examples/jsm/inspector/Inspector.js +145 -41
- package/examples/jsm/inspector/RendererInspector.js +100 -52
- package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +2609 -0
- package/examples/jsm/inspector/extensions/color-grading/ColorWheel.js +352 -0
- package/examples/jsm/inspector/extensions/color-grading/CurveEditor.js +599 -0
- package/examples/jsm/inspector/extensions/color-grading/LUT3DStyle.js +1201 -0
- package/examples/jsm/inspector/extensions/color-grading/LUTMath.js +788 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/BrightnessModule.js +72 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ColorWheelModule.js +112 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ContrastModule.js +82 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/CurvesModule.js +109 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ExposureHueModule.js +110 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ExposureModule.js +73 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/HueModule.js +78 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ImportedCubeModule.js +89 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/Module.js +285 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/OutputModule.js +101 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/RendererModule.js +225 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/SatVibranceModule.js +102 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/SaturationModule.js +76 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/VibranceModule.js +76 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/WhiteBalanceModule.js +86 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +26 -31
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -0
- package/examples/jsm/inspector/tabs/Memory.js +0 -2
- package/examples/jsm/inspector/tabs/Settings.js +4 -0
- package/examples/jsm/inspector/tabs/Timeline.js +223 -171
- package/examples/jsm/inspector/tabs/Viewer.js +515 -21
- package/examples/jsm/inspector/ui/List.js +15 -9
- package/examples/jsm/inspector/ui/Profiler.js +170 -14
- package/examples/jsm/inspector/ui/Style.js +269 -23
- package/examples/jsm/inspector/ui/Tab.js +2 -0
- package/examples/jsm/inspector/ui/Values.js +14 -2
- package/examples/jsm/interactive/HTMLMesh.js +19 -3
- package/examples/jsm/lighting/LightProbeGrid.js +484 -889
- package/examples/jsm/lighting/LightProbeGridUtils.js +107 -0
- package/examples/jsm/lighting/LightProbeGridWebGL.js +841 -0
- package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +194 -0
- package/examples/jsm/lighting/vxgi/VXGINode.js +660 -0
- package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +478 -0
- package/examples/jsm/lighting/vxgi/VXGIVolume.js +1430 -0
- package/examples/jsm/lights/SunLight.js +95 -0
- package/examples/jsm/lights/SunLightNode.js +56 -0
- package/examples/jsm/lights/SunLightShadow.js +319 -0
- package/examples/jsm/lights/SunShadowNode.js +312 -0
- package/examples/jsm/loaders/3DMLoader.js +150 -49
- package/examples/jsm/loaders/3MFLoader.js +202 -1
- package/examples/jsm/loaders/FBXLoader.js +81 -5
- package/examples/jsm/loaders/GLTFGaussianSplatLoaderExtension.js +330 -0
- package/examples/jsm/loaders/GLTFLoader.js +79 -14
- package/examples/jsm/loaders/GaussianSplatPLYLoader.js +386 -0
- package/examples/jsm/loaders/KSPLATLoader.js +463 -0
- package/examples/jsm/loaders/MaterialXLoader.js +111 -1010
- package/examples/jsm/loaders/PCDLoader.js +1 -1
- package/examples/jsm/loaders/SPLATLoader.js +139 -0
- package/examples/jsm/loaders/SPZLoader.js +561 -0
- package/examples/jsm/loaders/materialx/MaterialXArchive.js +108 -0
- package/examples/jsm/loaders/materialx/MaterialXDocument.js +878 -0
- package/examples/jsm/loaders/materialx/MaterialXHextile.js +183 -0
- package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +376 -0
- package/examples/jsm/loaders/materialx/MaterialXLog.js +75 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +4 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +1021 -0
- package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +661 -0
- package/examples/jsm/loaders/materialx/MaterialXUtils.js +57 -0
- package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +997 -0
- package/examples/jsm/loaders/materialx/parse/MaterialXParser.js +28 -0
- package/examples/jsm/loaders/usd/USDAParser.js +15 -2
- package/examples/jsm/loaders/usd/USDCParser.js +1 -4
- package/examples/jsm/loaders/usd/USDComposer.js +80 -42
- package/examples/jsm/materials/WoodNodeMaterial.js +6 -108
- package/examples/jsm/misc/RollerCoaster.js +2 -2
- package/examples/jsm/misc/SculptGL.LICENSE.txt +21 -0
- package/examples/jsm/misc/Sculptor.js +1679 -0
- package/examples/jsm/misc/SculptorMesh.js +1504 -0
- package/examples/jsm/misc/SculptorTools.js +1180 -0
- package/examples/jsm/misc/SculptorUtils.js +345 -0
- package/examples/jsm/misc/TubePainter.js +28 -16
- package/examples/jsm/misc/VolumeSlice.js +24 -24
- package/examples/jsm/modifiers/SimplifyModifier.js +63 -556
- package/examples/jsm/objects/GaussianSplat.js +1039 -0
- package/examples/jsm/objects/Sky.js +66 -45
- package/examples/jsm/objects/SkyMesh.js +70 -51
- package/examples/jsm/physics/JoltPhysics.js +1 -1
- package/examples/jsm/postprocessing/AfterimagePass.js +4 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/GTAOPass.js +1 -1
- package/examples/jsm/postprocessing/OutlinePass.js +5 -5
- package/examples/jsm/postprocessing/SAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +4 -2
- package/examples/jsm/postprocessing/SavePass.js +1 -1
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +30 -13
- package/examples/jsm/renderers/CSS2DRenderer.js +29 -5
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +1 -1
- package/examples/jsm/shaders/FilmShader.js +2 -1
- package/examples/jsm/transpiler/AST.js +21 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +498 -8
- package/examples/jsm/transpiler/TSLEncoder.js +82 -10
- package/examples/jsm/transpiler/WGSLEncoder.js +33 -4
- package/examples/jsm/tsl/WebGLNodesHandler.js +29 -39
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +3 -2
- package/examples/jsm/tsl/display/BilateralBlurNode.js +5 -2
- package/examples/jsm/tsl/display/BloomNode.js +55 -30
- package/examples/jsm/tsl/display/DenoiseNode.js +21 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +24 -6
- package/examples/jsm/tsl/display/DotScreenNode.js +11 -11
- package/examples/jsm/tsl/display/FSR1Node.js +8 -4
- package/examples/jsm/tsl/display/GTAONode.js +199 -86
- package/examples/jsm/tsl/display/GaussianBlurNode.js +65 -52
- package/examples/jsm/tsl/display/GodraysNode.js +5 -2
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +2 -2
- package/examples/jsm/tsl/display/LensflareNode.js +5 -2
- package/examples/jsm/tsl/display/OITPassNode.js +352 -0
- package/examples/jsm/tsl/display/OutlineNode.js +2 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +3 -2
- package/examples/jsm/tsl/display/RGBShiftNode.js +9 -9
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +7 -4
- package/examples/jsm/tsl/display/RetroPassNode.js +1 -1
- package/examples/jsm/tsl/display/SMAANode.js +22 -61
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -4
- package/examples/jsm/tsl/display/SSAONode.js +436 -0
- package/examples/jsm/tsl/display/SSGINode.js +5 -2
- package/examples/jsm/tsl/display/SSRNode.js +7 -2
- package/examples/jsm/tsl/display/SSSNode.js +5 -2
- package/examples/jsm/tsl/display/SharpenNode.js +5 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -3
- package/examples/jsm/tsl/display/TAAUNode.js +22 -125
- package/examples/jsm/tsl/display/TRAANode.js +16 -142
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +21 -15
- package/examples/jsm/tsl/display/depthAwareBlur.js +63 -0
- package/examples/jsm/tsl/display/hashBlur.js +3 -2
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +38 -27
- package/examples/jsm/tsl/lighting/LightProbeGridNode.js +136 -0
- package/examples/jsm/tsl/math/voronoiNoise.js +112 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +4 -6
- package/examples/jsm/tsl/utils/Raymarching.js +5 -5
- package/examples/jsm/tsl/utils/SoftParticles.js +60 -0
- package/examples/jsm/tsl/utils/TAAUtils.js +195 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +14 -14
- package/examples/jsm/utils/GaussianSplatUtils.js +229 -0
- package/examples/jsm/utils/WebGLTextureUtils.js +1 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +2 -16
- package/examples/jsm/webxr/XRControllerModelFactory.js +16 -4
- package/package.json +9 -16
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +73 -43
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +1 -0
- package/src/animation/AnimationClip.js +15 -2
- package/src/animation/AnimationObjectGroup.js +18 -6
- package/src/animation/AnimationUtils.js +26 -0
- package/src/animation/KeyframeTrack.js +37 -0
- package/src/constants.js +23 -1
- package/src/core/BufferAttribute.js +3 -2
- package/src/core/BufferGeometry.js +1 -1
- package/src/core/InterleavedBuffer.js +5 -1
- package/src/core/Object3D.js +40 -12
- package/src/core/Raycaster.js +4 -0
- package/src/core/RenderTarget.js +99 -9
- package/src/core/RenderTarget3D.js +12 -8
- package/src/extras/Controls.js +0 -8
- package/src/extras/PMREMGenerator.js +99 -205
- package/src/geometries/TorusGeometry.js +1 -1
- package/src/helpers/ArrowHelper.js +2 -0
- package/src/helpers/AxesHelper.js +2 -0
- package/src/helpers/Box3Helper.js +2 -0
- package/src/helpers/BoxHelper.js +2 -0
- package/src/helpers/CameraHelper.js +2 -0
- package/src/helpers/DirectionalLightHelper.js +2 -0
- package/src/helpers/GridHelper.js +2 -0
- package/src/helpers/HemisphereLightHelper.js +2 -0
- package/src/helpers/PlaneHelper.js +2 -0
- package/src/helpers/PointLightHelper.js +2 -0
- package/src/helpers/PolarGridHelper.js +2 -0
- package/src/helpers/SkeletonHelper.js +2 -0
- package/src/helpers/SpotLightHelper.js +2 -0
- package/src/lights/Light.js +0 -10
- package/src/lights/LightShadow.js +43 -12
- package/src/lights/SpotLightShadow.js +18 -0
- package/src/loaders/BufferGeometryLoader.js +5 -0
- package/src/loaders/ImageBitmapLoader.js +3 -1
- package/src/loaders/ObjectLoader.js +8 -5
- package/src/materials/Material.js +80 -57
- package/src/materials/MeshPhysicalMaterial.js +32 -0
- package/src/materials/nodes/Line2NodeMaterial.js +17 -8
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +42 -5
- package/src/materials/nodes/NodeMaterial.js +19 -13
- package/src/materials/nodes/PointsNodeMaterial.js +2 -1
- package/src/materials/nodes/manager/NodeMaterialObserver.js +282 -55
- package/src/math/Frustum.js +9 -0
- package/src/math/FrustumArray.js +1 -1
- package/src/math/MathUtils.js +5 -3
- package/src/math/Matrix4.js +2 -9
- package/src/math/Plane.js +30 -1
- package/src/math/Quaternion.js +0 -10
- package/src/math/Ray.js +95 -45
- package/src/math/Triangle.js +0 -2
- package/src/math/Vector3.js +2 -2
- package/src/math/Vector4.js +0 -4
- package/src/math/interpolants/BezierInterpolant.js +36 -23
- package/src/nodes/Nodes.js +2 -0
- package/src/nodes/TSL.js +11 -3
- package/src/nodes/accessors/Batch.js +85 -13
- package/src/nodes/accessors/BufferAttributeNode.js +1 -1
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/Instance.js +19 -18
- package/src/nodes/accessors/MaterialNode.js +9 -0
- package/src/nodes/accessors/ModelNode.js +85 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -70
- package/src/nodes/accessors/ReferenceElementNode.js +72 -0
- package/src/nodes/accessors/ReferenceNode.js +1 -70
- package/src/nodes/accessors/Skinning.js +124 -12
- package/src/nodes/accessors/StorageTextureNode.js +7 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +51 -21
- package/src/nodes/accessors/TextureSizeNode.js +4 -2
- package/src/nodes/accessors/UniformArrayNode.js +30 -5
- package/src/nodes/code/CodeNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +12 -2
- package/src/nodes/core/ArrayNode.js +2 -2
- package/src/nodes/core/ContextNode.js +57 -4
- package/src/nodes/core/IndexNode.js +69 -4
- package/src/nodes/core/InspectorNode.js +2 -2
- package/src/nodes/core/MRTNode.js +44 -2
- package/src/nodes/core/Node.js +6 -3
- package/src/nodes/core/NodeBuilder.js +65 -50
- package/src/nodes/core/NodeFrame.js +11 -3
- package/src/nodes/core/NodeUtils.js +88 -0
- package/src/nodes/core/PropertyNode.js +8 -0
- package/src/nodes/core/StackNode.js +0 -1
- package/src/nodes/core/StructNode.js +4 -3
- package/src/nodes/core/UniformGroupNode.js +3 -2
- package/src/nodes/core/UniformNode.js +26 -12
- package/src/nodes/core/VarNode.js +0 -1
- package/src/nodes/display/BumpMapNode.js +2 -2
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/PassNode.js +76 -15
- package/src/nodes/display/ScreenNode.js +22 -65
- package/src/nodes/fog/Fog.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_GGX.js +6 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +1 -1
- package/src/nodes/functions/BSDF/DFGLUT.js +2 -1
- package/src/nodes/functions/BSDF/LTC.js +1 -1
- package/src/nodes/functions/PhongLightingModel.js +1 -1
- package/src/nodes/functions/PhysicalLightingModel.js +83 -25
- package/src/nodes/functions/ToonLightingModel.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +3 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +64 -13
- package/src/nodes/gpgpu/BarrierNode.js +13 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +20 -17
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +165 -37
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +44 -6
- package/src/nodes/lighting/EnvironmentNode.js +40 -4
- package/src/nodes/lighting/LightsNode.js +20 -4
- package/src/nodes/lighting/ShadowBaseNode.js +158 -1
- package/src/nodes/lighting/ShadowFilterNode.js +2 -106
- package/src/nodes/lighting/ShadowNode.js +22 -91
- package/src/nodes/materialx/{lib/mx_hsv.js → MaterialXColor.js} +3 -6
- package/src/nodes/materialx/{lib/mx_transform_color.js → MaterialXColorTransform.js} +3 -6
- package/src/nodes/materialx/MaterialXCore.js +37 -0
- package/src/nodes/materialx/MaterialXNodes.js +64 -72
- package/src/nodes/materialx/{lib/mx_noise.js → MaterialXNoise.js} +426 -197
- package/src/nodes/math/BitcountNode.js +24 -4
- package/src/nodes/math/MathNode.js +4 -4
- package/src/nodes/math/MathUtils.js +15 -4
- package/src/nodes/math/OperatorNode.js +2 -2
- package/src/nodes/math/PackFloatNode.js +29 -1
- package/src/nodes/math/Packed4x8IntegerNode.js +433 -0
- package/src/nodes/math/UnpackFloatNode.js +30 -2
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +31 -74
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLCore.js +1 -31
- package/src/nodes/utils/EventNode.js +75 -0
- package/src/nodes/utils/LoopNode.js +54 -13
- package/src/nodes/utils/PostProcessingUtils.js +23 -2
- package/src/nodes/utils/RTTNode.js +97 -32
- package/src/nodes/utils/ReflectorNode.js +8 -4
- package/src/nodes/utils/RotateNode.js +85 -8
- package/src/nodes/utils/SpriteUtils.js +58 -23
- package/src/objects/BatchedMesh.js +6 -0
- package/src/objects/InstancedMesh.js +1 -1
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +12 -0
- package/src/objects/Mesh.js +12 -0
- package/src/objects/Points.js +12 -0
- package/src/objects/Sprite.js +12 -0
- package/src/renderers/WebGLRenderer.js +93 -27
- package/src/renderers/common/Animation.js +12 -2
- package/src/renderers/common/Backend.js +38 -10
- package/src/renderers/common/BindGroup.js +0 -1
- package/src/renderers/common/Bindings.js +50 -4
- package/src/renderers/common/BundleGroup.js +4 -0
- package/src/renderers/common/ClippingContext.js +11 -1
- package/src/renderers/common/Color4.js +9 -0
- package/src/renderers/common/Constants.js +0 -5
- package/src/renderers/common/DirectRenderPipeline.js +233 -0
- package/src/renderers/common/Geometries.js +24 -3
- package/src/renderers/common/Info.js +3 -3
- package/src/renderers/common/InspectorBase.js +37 -8
- package/src/renderers/common/Lighting.js +11 -4
- package/src/renderers/common/Pipelines.js +6 -4
- package/src/renderers/common/QuadMesh.js +16 -2
- package/src/renderers/common/RenderContext.js +8 -0
- package/src/renderers/common/RenderList.js +53 -19
- package/src/renderers/common/RenderLists.js +58 -11
- package/src/renderers/common/RenderObject.js +14 -0
- package/src/renderers/common/RenderObjects.js +14 -9
- package/src/renderers/common/RenderPipeline.js +52 -44
- package/src/renderers/common/Renderer.js +226 -55
- package/src/renderers/common/Storage3DTexture.js +16 -0
- package/src/renderers/common/Textures.js +3 -3
- package/src/renderers/common/XRManager.js +79 -72
- package/src/renderers/common/extras/PMREMGenerator.js +76 -144
- package/src/renderers/common/nodes/NodeManager.js +144 -6
- package/src/renderers/common/nodes/NodeStorageBuffer.js +3 -1
- package/src/renderers/common/nodes/NodeUniformBuffer.js +3 -1
- package/src/renderers/shaders/DFGLUTData.js +2 -1
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +4 -2
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +48 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +53 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +20 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +20 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +61 -57
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +82 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +9 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +8 -1
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +15 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
- package/src/renderers/shaders/ShaderLib.js +1 -0
- package/src/renderers/shaders/UniformsLib.js +16 -0
- package/src/renderers/webgl/WebGLAnimation.js +2 -2
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLLights.js +74 -4
- package/src/renderers/webgl/WebGLMaterials.js +6 -0
- package/src/renderers/webgl/WebGLOutput.js +36 -24
- package/src/renderers/webgl/WebGLProgram.js +3 -0
- package/src/renderers/webgl/WebGLPrograms.js +8 -0
- package/src/renderers/webgl/WebGLRenderLists.js +6 -10
- package/src/renderers/webgl/WebGLShadowMap.js +47 -44
- package/src/renderers/webgl/WebGLTextures.js +7 -7
- package/src/renderers/webgl-fallback/WebGLBackend.js +153 -45
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +83 -29
- package/src/renderers/webgl-fallback/utils/WebGLState.js +163 -17
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +32 -5
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +11 -4
- package/src/renderers/webgpu/WebGPUBackend.js +513 -145
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +99 -20
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -12
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +24 -14
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +80 -14
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +62 -7
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +9 -3
- package/src/renderers/webgpu/utils/WebGPUUtils.js +16 -4
- package/src/renderers/webxr/WebXRManager.js +25 -2
- package/src/scenes/Scene.js +3 -3
- package/src/textures/CompressedArrayTexture.js +16 -0
- package/src/textures/Data3DTexture.js +16 -0
- package/src/textures/DataArrayTexture.js +16 -0
- package/src/textures/DepthTexture.js +3 -3
- package/src/textures/Texture.js +3 -3
- package/src/textures/{Source.js → TextureSource.js} +39 -8
- package/build/three.core.min.js +0 -6
- package/build/three.module.min.js +0 -6
- package/build/three.tsl.min.js +0 -6
- package/build/three.webgpu.min.js +0 -6
- package/build/three.webgpu.nodes.min.js +0 -6
- package/examples/jsm/libs/ecsy.module.js +0 -1792
- package/examples/jsm/loaders/LottieLoader.js +0 -130
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +0 -52
|
@@ -2,12 +2,15 @@ import { nodeObject } from '../tsl/TSLCore.js';
|
|
|
2
2
|
import TextureNode from '../accessors/TextureNode.js';
|
|
3
3
|
import { NodeUpdateType } from '../core/constants.js';
|
|
4
4
|
import { uv } from '../accessors/UV.js';
|
|
5
|
+
import { context } from '../core/ContextNode.js';
|
|
5
6
|
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
6
7
|
import QuadMesh from '../../renderers/common/QuadMesh.js';
|
|
7
8
|
|
|
8
9
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
9
10
|
import { Vector2 } from '../../math/Vector2.js';
|
|
10
11
|
import { HalfFloatType } from '../../constants.js';
|
|
12
|
+
import { error } from '../../utils.js';
|
|
13
|
+
import { resetRendererState, restoreRendererState } from '../../renderers/common/RendererUtils.js';
|
|
11
14
|
|
|
12
15
|
const _size = /*@__PURE__*/ new Vector2();
|
|
13
16
|
|
|
@@ -31,13 +34,21 @@ class RTTNode extends TextureNode {
|
|
|
31
34
|
* Constructs a new RTT node.
|
|
32
35
|
*
|
|
33
36
|
* @param {Node} node - The node to render a texture with.
|
|
34
|
-
* @param {?number} [width=null] - The width of the internal render target. If
|
|
37
|
+
* @param {?number} [width=null] - The width of the internal render target. If no width is applied, the render target is automatically resized.
|
|
35
38
|
* @param {?number} [height=null] - The height of the internal render target.
|
|
36
|
-
* @param {Object} [options={
|
|
39
|
+
* @param {Object} [options={}] - The options for the internal render target.
|
|
40
|
+
* @param {number} [options.type=HalfFloatType] - The texture type.
|
|
41
|
+
* @param {boolean} [options.autoUpdate=true] - Whether the texture should automatically be updated or not.
|
|
42
|
+
* @param {number} [options.resolutionScale=1] - The resolution scale.
|
|
37
43
|
*/
|
|
38
|
-
constructor( node, width = null, height = null, options = {
|
|
44
|
+
constructor( node, width = null, height = null, options = {} ) {
|
|
39
45
|
|
|
40
|
-
const
|
|
46
|
+
const {
|
|
47
|
+
autoUpdate = true,
|
|
48
|
+
resolutionScale = 1
|
|
49
|
+
} = options;
|
|
50
|
+
|
|
51
|
+
const renderTarget = new RenderTarget( width ?? 1, height ?? 1, { type: HalfFloatType, ...options } );
|
|
41
52
|
|
|
42
53
|
super( renderTarget.texture, uv() );
|
|
43
54
|
|
|
@@ -95,7 +106,7 @@ class RTTNode extends TextureNode {
|
|
|
95
106
|
* @type {boolean}
|
|
96
107
|
* @default true
|
|
97
108
|
*/
|
|
98
|
-
this.autoUpdate =
|
|
109
|
+
this.autoUpdate = autoUpdate;
|
|
99
110
|
|
|
100
111
|
/**
|
|
101
112
|
* The resolution scale
|
|
@@ -104,33 +115,33 @@ class RTTNode extends TextureNode {
|
|
|
104
115
|
* @type {number}
|
|
105
116
|
* @default 1
|
|
106
117
|
*/
|
|
107
|
-
this._resolutionScale =
|
|
118
|
+
this._resolutionScale = resolutionScale;
|
|
108
119
|
|
|
109
120
|
/**
|
|
110
|
-
* The
|
|
121
|
+
* The internal quad mesh for RTT.
|
|
111
122
|
*
|
|
112
123
|
* @private
|
|
113
|
-
* @type {
|
|
114
|
-
* @default null
|
|
124
|
+
* @type {QuadMesh}
|
|
115
125
|
*/
|
|
116
|
-
this.
|
|
126
|
+
this._quadMesh = new QuadMesh( new NodeMaterial() );
|
|
117
127
|
|
|
118
128
|
/**
|
|
119
|
-
* The
|
|
129
|
+
* The renderer state saved and restored around the RTT render.
|
|
130
|
+
* Kept per instance because nested RTT nodes must not share it.
|
|
120
131
|
*
|
|
121
132
|
* @private
|
|
122
|
-
* @type {
|
|
133
|
+
* @type {Object}
|
|
123
134
|
*/
|
|
124
|
-
this.
|
|
135
|
+
this._rendererState = {};
|
|
125
136
|
|
|
126
137
|
/**
|
|
127
|
-
* The `updateBeforeType` is set to `NodeUpdateType.
|
|
128
|
-
* the texture once per
|
|
138
|
+
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node updates
|
|
139
|
+
* the texture once per frame in its {@link RTTNode#updateBefore} method.
|
|
129
140
|
*
|
|
130
141
|
* @type {string}
|
|
131
|
-
* @default '
|
|
142
|
+
* @default 'frame'
|
|
132
143
|
*/
|
|
133
|
-
this.updateBeforeType = NodeUpdateType.
|
|
144
|
+
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
134
145
|
|
|
135
146
|
}
|
|
136
147
|
|
|
@@ -149,7 +160,8 @@ class RTTNode extends TextureNode {
|
|
|
149
160
|
|
|
150
161
|
setup( builder ) {
|
|
151
162
|
|
|
152
|
-
this.
|
|
163
|
+
this._quadMesh.material.contextNode = context( builder.getSharedContext() );
|
|
164
|
+
this._quadMesh.material.fragmentNode = this.node;
|
|
153
165
|
this._quadMesh.material.name = 'RTT';
|
|
154
166
|
this._quadMesh.material.needsUpdate = true;
|
|
155
167
|
|
|
@@ -158,10 +170,10 @@ class RTTNode extends TextureNode {
|
|
|
158
170
|
}
|
|
159
171
|
|
|
160
172
|
/**
|
|
161
|
-
* Sets the size of the internal render target
|
|
173
|
+
* Sets the size of the internal render target.
|
|
162
174
|
*
|
|
163
175
|
* @param {number} width - The width to set.
|
|
164
|
-
* @param {number} height - The
|
|
176
|
+
* @param {number} height - The height to set.
|
|
165
177
|
*/
|
|
166
178
|
setSize( width, height ) {
|
|
167
179
|
|
|
@@ -206,7 +218,42 @@ class RTTNode extends TextureNode {
|
|
|
206
218
|
|
|
207
219
|
}
|
|
208
220
|
|
|
209
|
-
|
|
221
|
+
/**
|
|
222
|
+
* Overwritten since the value is defined by the internal render target.
|
|
223
|
+
*
|
|
224
|
+
* @param {Texture} value - The texture value.
|
|
225
|
+
*/
|
|
226
|
+
set value( value ) {
|
|
227
|
+
|
|
228
|
+
if ( this.renderTarget && value !== this.renderTarget.texture ) {
|
|
229
|
+
|
|
230
|
+
error( 'TSL: "rtt()" does not allow overwriting the value.' );
|
|
231
|
+
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* The texture of the internal render target.
|
|
238
|
+
*
|
|
239
|
+
* @type {Texture}
|
|
240
|
+
*/
|
|
241
|
+
get value() {
|
|
242
|
+
|
|
243
|
+
return this.renderTarget ? this.renderTarget.texture : null;
|
|
244
|
+
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Renders the node's output into the internal render target before the main render pass.
|
|
249
|
+
* Handles automatic resizing of the render target when `autoResize` is enabled,
|
|
250
|
+
* and skips rendering if neither `textureNeedsUpdate` nor `autoUpdate` is true.
|
|
251
|
+
*
|
|
252
|
+
* @param {NodeFrame} frame - The current node frame, providing access to the renderer and other frame data.
|
|
253
|
+
*/
|
|
254
|
+
updateBefore( frame ) {
|
|
255
|
+
|
|
256
|
+
const { renderer } = frame;
|
|
210
257
|
|
|
211
258
|
if ( this.textureNeedsUpdate === false && this.autoUpdate === false ) return;
|
|
212
259
|
|
|
@@ -214,8 +261,6 @@ class RTTNode extends TextureNode {
|
|
|
214
261
|
|
|
215
262
|
//
|
|
216
263
|
|
|
217
|
-
const currentRenderTarget = renderer.getRenderTarget();
|
|
218
|
-
|
|
219
264
|
if ( this.autoResize === true ) {
|
|
220
265
|
|
|
221
266
|
const size = renderer.getDrawingBufferSize( _size );
|
|
@@ -237,23 +282,25 @@ class RTTNode extends TextureNode {
|
|
|
237
282
|
|
|
238
283
|
let name = 'RTT';
|
|
239
284
|
|
|
240
|
-
|
|
285
|
+
const callName = this.name || this.node.name;
|
|
241
286
|
|
|
242
|
-
|
|
287
|
+
if ( callName ) {
|
|
243
288
|
|
|
244
|
-
|
|
289
|
+
name = callName + ' [ ' + name + ' ]';
|
|
245
290
|
|
|
291
|
+
}
|
|
246
292
|
|
|
247
|
-
this._quadMesh.material.fragmentNode = this._rttNode;
|
|
248
293
|
this._quadMesh.name = name;
|
|
249
294
|
|
|
250
295
|
//
|
|
251
296
|
|
|
297
|
+
resetRendererState( renderer, this._rendererState );
|
|
298
|
+
|
|
252
299
|
renderer.setRenderTarget( this.renderTarget );
|
|
253
300
|
|
|
254
301
|
this._quadMesh.render( renderer );
|
|
255
302
|
|
|
256
|
-
renderer.
|
|
303
|
+
restoreRendererState( renderer, this._rendererState );
|
|
257
304
|
|
|
258
305
|
}
|
|
259
306
|
|
|
@@ -267,6 +314,18 @@ class RTTNode extends TextureNode {
|
|
|
267
314
|
|
|
268
315
|
}
|
|
269
316
|
|
|
317
|
+
/**
|
|
318
|
+
* Frees internal resources. Should be called when the node is no longer in use.
|
|
319
|
+
*/
|
|
320
|
+
dispose() {
|
|
321
|
+
|
|
322
|
+
this.renderTarget.dispose();
|
|
323
|
+
this._quadMesh.material.dispose();
|
|
324
|
+
|
|
325
|
+
super.dispose();
|
|
326
|
+
|
|
327
|
+
}
|
|
328
|
+
|
|
270
329
|
}
|
|
271
330
|
|
|
272
331
|
export default RTTNode;
|
|
@@ -277,9 +336,12 @@ export default RTTNode;
|
|
|
277
336
|
* @tsl
|
|
278
337
|
* @function
|
|
279
338
|
* @param {Node} node - The node to render a texture with.
|
|
280
|
-
* @param {?number} [width=null] - The width of the internal render target. If
|
|
339
|
+
* @param {?number} [width=null] - The width of the internal render target. If no width is applied, the render target is automatically resized.
|
|
281
340
|
* @param {?number} [height=null] - The height of the internal render target.
|
|
282
|
-
* @param {Object} [options={
|
|
341
|
+
* @param {Object} [options={}] - The options for the internal render target.
|
|
342
|
+
* @param {number} [options.type=HalfFloatType] - The texture type.
|
|
343
|
+
* @param {boolean} [options.autoUpdate=true] - Whether the texture should automatically be updated or not.
|
|
344
|
+
* @param {number} [options.resolutionScale=1] - The resolution scale.
|
|
283
345
|
* @returns {RTTNode}
|
|
284
346
|
*/
|
|
285
347
|
export const rtt = ( node, ...params ) => new RTTNode( nodeObject( node ), ...params );
|
|
@@ -290,9 +352,12 @@ export const rtt = ( node, ...params ) => new RTTNode( nodeObject( node ), ...pa
|
|
|
290
352
|
* @tsl
|
|
291
353
|
* @function
|
|
292
354
|
* @param {Node} node - The node to render a texture with.
|
|
293
|
-
* @param {?number} [width=null] - The width of the internal render target. If
|
|
355
|
+
* @param {?number} [width=null] - The width of the internal render target. If no width is applied, the render target is automatically resized.
|
|
294
356
|
* @param {?number} [height=null] - The height of the internal render target.
|
|
295
|
-
* @param {Object} [options={
|
|
357
|
+
* @param {Object} [options={}] - The options for the internal render target.
|
|
358
|
+
* @param {number} [options.type=HalfFloatType] - The texture type.
|
|
359
|
+
* @param {boolean} [options.autoUpdate=true] - Whether the texture should automatically be updated or not.
|
|
360
|
+
* @param {number} [options.resolutionScale=1] - The resolution scale.
|
|
296
361
|
* @returns {RTTNode}
|
|
297
362
|
*/
|
|
298
363
|
export const convertToTexture = ( node, ...params ) => {
|
|
@@ -185,10 +185,14 @@ class ReflectorNode extends TextureNode {
|
|
|
185
185
|
}
|
|
186
186
|
|
|
187
187
|
/**
|
|
188
|
-
* Holds the actual implementation of the reflector
|
|
188
|
+
* Holds the actual implementation of the reflector (virtual cameras, render
|
|
189
|
+
* targets and the reflection rendering).
|
|
189
190
|
*
|
|
190
|
-
*
|
|
191
|
-
*
|
|
191
|
+
* This logic is kept separate from {@link ReflectorNode} because the latter is
|
|
192
|
+
* a {@link TextureNode} representing a single texture view. A reflector can be
|
|
193
|
+
* sampled by multiple texture nodes at once - e.g. one for color and one for
|
|
194
|
+
* depth (see {@link ReflectorNode#getDepthNode}) - which all reference the same
|
|
195
|
+
* base node so the reflection is rendered only once.
|
|
192
196
|
*
|
|
193
197
|
* @private
|
|
194
198
|
* @augments Node
|
|
@@ -409,7 +413,7 @@ class ReflectorBaseNode extends Node {
|
|
|
409
413
|
|
|
410
414
|
if ( renderTarget === undefined ) {
|
|
411
415
|
|
|
412
|
-
renderTarget = new RenderTarget(
|
|
416
|
+
renderTarget = new RenderTarget( 1, 1, { type: HalfFloatType, samples: this.samples } );
|
|
413
417
|
|
|
414
418
|
if ( this.generateMipmaps === true ) {
|
|
415
419
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
2
|
import { nodeProxy, vec4, mat2, mat4 } from '../tsl/TSLBase.js';
|
|
3
3
|
import { cos, sin } from '../math/MathNode.js';
|
|
4
|
+
import { hashString } from '../core/NodeUtils.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Applies a rotation to the given position node.
|
|
@@ -21,8 +22,9 @@ class RotateNode extends TempNode {
|
|
|
21
22
|
* @param {Node} positionNode - The position node.
|
|
22
23
|
* @param {Node} rotationNode - Represents the rotation that is applied to the position node. Depending
|
|
23
24
|
* on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
|
|
25
|
+
* @param {string} [order='XYZ'] - The Euler rotation order. Only used for 3D rotation.
|
|
24
26
|
*/
|
|
25
|
-
constructor( positionNode, rotationNode ) {
|
|
27
|
+
constructor( positionNode, rotationNode, order = 'XYZ' ) {
|
|
26
28
|
|
|
27
29
|
super();
|
|
28
30
|
|
|
@@ -34,13 +36,59 @@ class RotateNode extends TempNode {
|
|
|
34
36
|
this.positionNode = positionNode;
|
|
35
37
|
|
|
36
38
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
+
* Represents the rotation that is applied to the position node.
|
|
40
|
+
* Depending on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
|
|
39
41
|
*
|
|
40
42
|
* @type {Node}
|
|
41
43
|
*/
|
|
42
44
|
this.rotationNode = rotationNode;
|
|
43
45
|
|
|
46
|
+
/**
|
|
47
|
+
* The Euler rotation order.
|
|
48
|
+
*
|
|
49
|
+
* @private
|
|
50
|
+
* @type {string}
|
|
51
|
+
* @default 'XYZ'
|
|
52
|
+
*/
|
|
53
|
+
this._order = order;
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Overwrites the default `customCacheKey()` implementation by including the
|
|
59
|
+
* Euler order into the cache key.
|
|
60
|
+
*
|
|
61
|
+
* @return {number} The hash.
|
|
62
|
+
*/
|
|
63
|
+
customCacheKey() {
|
|
64
|
+
|
|
65
|
+
return hashString( this._order );
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Sets the Euler rotation order.
|
|
71
|
+
*
|
|
72
|
+
* @param {string} value - The Euler rotation order.
|
|
73
|
+
* @return {RotateNode} A reference to this node.
|
|
74
|
+
*/
|
|
75
|
+
setOrder( value ) {
|
|
76
|
+
|
|
77
|
+
this._order = value;
|
|
78
|
+
|
|
79
|
+
return this;
|
|
80
|
+
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Gets the Euler rotation order.
|
|
85
|
+
*
|
|
86
|
+
* @return {string} The Euler rotation order.
|
|
87
|
+
*/
|
|
88
|
+
getOrder() {
|
|
89
|
+
|
|
90
|
+
return this._order;
|
|
91
|
+
|
|
44
92
|
}
|
|
45
93
|
|
|
46
94
|
/**
|
|
@@ -76,16 +124,44 @@ class RotateNode extends TempNode {
|
|
|
76
124
|
} else {
|
|
77
125
|
|
|
78
126
|
const rotation = rotationNode;
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
const
|
|
127
|
+
const order = this._order;
|
|
128
|
+
|
|
129
|
+
const rotationXMatrix = mat4( vec4( 1.0, 0.0, 0.0, 0.0 ), vec4( 0.0, cos( rotation.x ), sin( rotation.x ), 0.0 ), vec4( 0.0, sin( rotation.x ).negate(), cos( rotation.x ), 0.0 ), vec4( 0.0, 0.0, 0.0, 1.0 ) );
|
|
130
|
+
const rotationYMatrix = mat4( vec4( cos( rotation.y ), 0.0, sin( rotation.y ).negate(), 0.0 ), vec4( 0.0, 1.0, 0.0, 0.0 ), vec4( sin( rotation.y ), 0.0, cos( rotation.y ), 0.0 ), vec4( 0.0, 0.0, 0.0, 1.0 ) );
|
|
131
|
+
const rotationZMatrix = mat4( vec4( cos( rotation.z ), sin( rotation.z ), 0.0, 0.0 ), vec4( sin( rotation.z ).negate(), cos( rotation.z ), 0.0, 0.0 ), vec4( 0.0, 0.0, 1.0, 0.0 ), vec4( 0.0, 0.0, 0.0, 1.0 ) );
|
|
132
|
+
|
|
133
|
+
const matrixMap = {
|
|
134
|
+
'X': rotationXMatrix,
|
|
135
|
+
'Y': rotationYMatrix,
|
|
136
|
+
'Z': rotationZMatrix
|
|
137
|
+
};
|
|
82
138
|
|
|
83
|
-
|
|
139
|
+
const matrixChain = matrixMap[ order.charAt( 0 ) ]
|
|
140
|
+
.mul( matrixMap[ order.charAt( 1 ) ] )
|
|
141
|
+
.mul( matrixMap[ order.charAt( 2 ) ] );
|
|
142
|
+
|
|
143
|
+
return matrixChain.mul( vec4( positionNode, 1.0 ) ).xyz;
|
|
84
144
|
|
|
85
145
|
}
|
|
86
146
|
|
|
87
147
|
}
|
|
88
148
|
|
|
149
|
+
serialize( data ) {
|
|
150
|
+
|
|
151
|
+
super.serialize( data );
|
|
152
|
+
|
|
153
|
+
data.order = this._order;
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
deserialize( data ) {
|
|
158
|
+
|
|
159
|
+
super.deserialize( data );
|
|
160
|
+
|
|
161
|
+
this._order = data.order;
|
|
162
|
+
|
|
163
|
+
}
|
|
164
|
+
|
|
89
165
|
}
|
|
90
166
|
|
|
91
167
|
export default RotateNode;
|
|
@@ -98,6 +174,7 @@ export default RotateNode;
|
|
|
98
174
|
* @param {Node} positionNode - The position node.
|
|
99
175
|
* @param {Node} rotationNode - Represents the rotation that is applied to the position node. Depending
|
|
100
176
|
* on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
|
|
177
|
+
* @param {string} [order='XYZ'] - The Euler rotation order. Only used for 3D rotation.
|
|
101
178
|
* @returns {RotateNode}
|
|
102
179
|
*/
|
|
103
|
-
export const rotate = /*@__PURE__*/ nodeProxy( RotateNode ).setParameterLength( 2 );
|
|
180
|
+
export const rotate = /*@__PURE__*/ nodeProxy( RotateNode ).setParameterLength( 2, 3 );
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { modelWorldMatrix } from '../accessors/ModelNode.js';
|
|
2
|
-
import { cameraViewMatrix, cameraProjectionMatrix } from '../accessors/Camera.js';
|
|
3
|
-
import {
|
|
4
|
-
import { Fn, defined } from '../tsl/TSLBase.js';
|
|
2
|
+
import { cameraViewMatrix, cameraProjectionMatrix, cameraPosition } from '../accessors/Camera.js';
|
|
3
|
+
import { positionGeometry, positionWorld } from '../accessors/Position.js';
|
|
4
|
+
import { Fn, defined, nodeObject, vec3, vec4 } from '../tsl/TSLBase.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* This can be used to achieve a billboarding behavior for flat meshes. That means they are
|
|
@@ -14,50 +14,85 @@ import { Fn, defined } from '../tsl/TSLBase.js';
|
|
|
14
14
|
* @tsl
|
|
15
15
|
* @function
|
|
16
16
|
* @param {Object} config - The configuration object.
|
|
17
|
-
* @param {?Node<vec3>} [config.position=null] - Can be used to define the
|
|
17
|
+
* @param {?Node<vec3>} [config.position=null] - Can be used to define the billboard center position directly.
|
|
18
|
+
* When null, the center is derived automatically from `positionWorld`.
|
|
18
19
|
* @param {boolean} [config.horizontal=true] - Whether to follow the camera rotation horizontally or not.
|
|
19
20
|
* @param {boolean} [config.vertical=false] - Whether to follow the camera rotation vertically or not.
|
|
21
|
+
* @param {boolean} [config.horizontalRotation=false] - Whether to rotate around the Y axis to face the camera.
|
|
20
22
|
* @return {Node<vec3>} The updated vertex position in clip space.
|
|
21
23
|
*/
|
|
22
|
-
export const billboarding = /*@__PURE__*/ Fn( ( { position = null, horizontal = true, vertical = false } ) => {
|
|
24
|
+
export const billboarding = /*@__PURE__*/ Fn( ( { position = null, horizontal = true, vertical = false, horizontalRotation = false } ) => {
|
|
23
25
|
|
|
24
|
-
let
|
|
26
|
+
let center;
|
|
25
27
|
|
|
26
28
|
if ( position !== null ) {
|
|
27
29
|
|
|
28
|
-
|
|
29
|
-
worldMatrix[ 3 ][ 0 ] = position.x;
|
|
30
|
-
worldMatrix[ 3 ][ 1 ] = position.y;
|
|
31
|
-
worldMatrix[ 3 ][ 2 ] = position.z;
|
|
30
|
+
center = nodeObject( position );
|
|
32
31
|
|
|
33
32
|
} else {
|
|
34
33
|
|
|
35
|
-
|
|
34
|
+
center = positionWorld.sub( modelWorldMatrix.mul( vec4( positionGeometry, 0 ) ).xyz );
|
|
36
35
|
|
|
37
36
|
}
|
|
38
37
|
|
|
38
|
+
const worldMatrix = modelWorldMatrix.toVar();
|
|
39
|
+
worldMatrix[ 3 ][ 0 ] = center.x;
|
|
40
|
+
worldMatrix[ 3 ][ 1 ] = center.y;
|
|
41
|
+
worldMatrix[ 3 ][ 2 ] = center.z;
|
|
42
|
+
|
|
39
43
|
const modelViewMatrix = cameraViewMatrix.mul( worldMatrix );
|
|
40
44
|
|
|
41
|
-
|
|
45
|
+
const scaleX = modelWorldMatrix[ 0 ].length();
|
|
46
|
+
const scaleY = modelWorldMatrix[ 1 ].length();
|
|
47
|
+
const scaleZ = modelWorldMatrix[ 2 ].length();
|
|
48
|
+
|
|
49
|
+
let right, up, forward;
|
|
50
|
+
|
|
51
|
+
if ( defined( horizontalRotation ) ) {
|
|
52
|
+
|
|
53
|
+
const worldPosition = worldMatrix[ 3 ].xyz;
|
|
54
|
+
const look = cameraPosition.sub( worldPosition );
|
|
55
|
+
const lookXZ = vec3( look.x, 0, look.z ).normalize();
|
|
56
|
+
|
|
57
|
+
const right_w = vec3( lookXZ.z, 0, lookXZ.x.negate() );
|
|
58
|
+
|
|
59
|
+
right = cameraViewMatrix.mul( vec4( right_w, 0 ) ).xyz.mul( scaleX );
|
|
60
|
+
up = cameraViewMatrix[ 1 ].xyz.mul( scaleY );
|
|
61
|
+
forward = cameraViewMatrix.mul( vec4( lookXZ, 0 ) ).xyz.mul( scaleZ );
|
|
62
|
+
|
|
63
|
+
} else {
|
|
64
|
+
|
|
65
|
+
if ( defined( horizontal ) ) right = vec3( scaleX, 0, 0 );
|
|
66
|
+
if ( defined( vertical ) ) up = vec3( 0, scaleY, 0 );
|
|
67
|
+
|
|
68
|
+
forward = vec3( 0, 0, 1 );
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if ( right ) {
|
|
42
73
|
|
|
43
|
-
modelViewMatrix[ 0 ][ 0 ] =
|
|
44
|
-
modelViewMatrix[ 0 ][ 1 ] =
|
|
45
|
-
modelViewMatrix[ 0 ][ 2 ] =
|
|
74
|
+
modelViewMatrix[ 0 ][ 0 ] = right.x;
|
|
75
|
+
modelViewMatrix[ 0 ][ 1 ] = right.y;
|
|
76
|
+
modelViewMatrix[ 0 ][ 2 ] = right.z;
|
|
46
77
|
|
|
47
78
|
}
|
|
48
79
|
|
|
49
|
-
if (
|
|
80
|
+
if ( up ) {
|
|
50
81
|
|
|
51
|
-
modelViewMatrix[ 1 ][ 0 ] =
|
|
52
|
-
modelViewMatrix[ 1 ][ 1 ] =
|
|
53
|
-
modelViewMatrix[ 1 ][ 2 ] =
|
|
82
|
+
modelViewMatrix[ 1 ][ 0 ] = up.x;
|
|
83
|
+
modelViewMatrix[ 1 ][ 1 ] = up.y;
|
|
84
|
+
modelViewMatrix[ 1 ][ 2 ] = up.z;
|
|
54
85
|
|
|
55
86
|
}
|
|
56
87
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
88
|
+
if ( forward ) {
|
|
89
|
+
|
|
90
|
+
modelViewMatrix[ 2 ][ 0 ] = forward.x;
|
|
91
|
+
modelViewMatrix[ 2 ][ 1 ] = forward.y;
|
|
92
|
+
modelViewMatrix[ 2 ][ 2 ] = forward.z;
|
|
93
|
+
|
|
94
|
+
}
|
|
60
95
|
|
|
61
|
-
return cameraProjectionMatrix.mul( modelViewMatrix ).mul(
|
|
96
|
+
return cameraProjectionMatrix.mul( modelViewMatrix ).mul( positionGeometry );
|
|
62
97
|
|
|
63
98
|
} );
|
|
@@ -272,6 +272,7 @@ class BatchedMesh extends Mesh {
|
|
|
272
272
|
this._multiDrawCounts = new Int32Array( maxInstanceCount );
|
|
273
273
|
this._multiDrawStarts = new Int32Array( maxInstanceCount );
|
|
274
274
|
this._multiDrawCount = 0;
|
|
275
|
+
this._multiDrawBytesPerElement = 1;
|
|
275
276
|
|
|
276
277
|
// Local matrix per geometry by using data texture
|
|
277
278
|
this._matricesTexture = null;
|
|
@@ -1203,6 +1204,7 @@ class BatchedMesh extends Mesh {
|
|
|
1203
1204
|
this.validateGeometryId( geometryId );
|
|
1204
1205
|
|
|
1205
1206
|
this._instanceInfo[ instanceId ].geometryIndex = geometryId;
|
|
1207
|
+
this._visibilityChanged = true;
|
|
1206
1208
|
|
|
1207
1209
|
return this;
|
|
1208
1210
|
|
|
@@ -1473,6 +1475,7 @@ class BatchedMesh extends Mesh {
|
|
|
1473
1475
|
this._geometryInitialized = source._geometryInitialized;
|
|
1474
1476
|
this._multiDrawCounts = source._multiDrawCounts.slice();
|
|
1475
1477
|
this._multiDrawStarts = source._multiDrawStarts.slice();
|
|
1478
|
+
this._multiDrawBytesPerElement = source._multiDrawBytesPerElement;
|
|
1476
1479
|
|
|
1477
1480
|
this._indirectTexture = source._indirectTexture.clone();
|
|
1478
1481
|
this._indirectTexture.image.data = this._indirectTexture.image.data.slice();
|
|
@@ -1497,6 +1500,8 @@ class BatchedMesh extends Mesh {
|
|
|
1497
1500
|
*/
|
|
1498
1501
|
dispose() {
|
|
1499
1502
|
|
|
1503
|
+
super.dispose();
|
|
1504
|
+
|
|
1500
1505
|
// Assuming the geometry is not shared with other meshes
|
|
1501
1506
|
this.geometry.dispose();
|
|
1502
1507
|
|
|
@@ -1675,6 +1680,7 @@ class BatchedMesh extends Mesh {
|
|
|
1675
1680
|
|
|
1676
1681
|
indirectTexture.needsUpdate = true;
|
|
1677
1682
|
this._multiDrawCount = multiDrawCount;
|
|
1683
|
+
this._multiDrawBytesPerElement = bytesPerElement;
|
|
1678
1684
|
this._visibilityChanged = false;
|
|
1679
1685
|
|
|
1680
1686
|
}
|
package/src/objects/LOD.js
CHANGED
package/src/objects/Line.js
CHANGED
|
@@ -151,6 +151,18 @@ class Line extends Object3D {
|
|
|
151
151
|
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
+
/**
|
|
155
|
+
* Returns `true` if this line intersects the given frustum.
|
|
156
|
+
*
|
|
157
|
+
* @param {Frustum|FrustumArray} frustum - The frustum to test.
|
|
158
|
+
* @return {boolean} Whether this line intersects the given frustum or not.
|
|
159
|
+
*/
|
|
160
|
+
intersectsFrustum( frustum ) {
|
|
161
|
+
|
|
162
|
+
return frustum.intersectsObject( this );
|
|
163
|
+
|
|
164
|
+
}
|
|
165
|
+
|
|
154
166
|
/**
|
|
155
167
|
* Computes intersection points between a casted ray and this line.
|
|
156
168
|
*
|
package/src/objects/Mesh.js
CHANGED
|
@@ -217,6 +217,18 @@ class Mesh extends Object3D {
|
|
|
217
217
|
|
|
218
218
|
}
|
|
219
219
|
|
|
220
|
+
/**
|
|
221
|
+
* Returns `true` if this mesh intersects the given frustum.
|
|
222
|
+
*
|
|
223
|
+
* @param {Frustum|FrustumArray} frustum - The frustum to test.
|
|
224
|
+
* @return {boolean} Whether this mesh intersects the given frustum or not.
|
|
225
|
+
*/
|
|
226
|
+
intersectsFrustum( frustum ) {
|
|
227
|
+
|
|
228
|
+
return frustum.intersectsObject( this );
|
|
229
|
+
|
|
230
|
+
}
|
|
231
|
+
|
|
220
232
|
/**
|
|
221
233
|
* Computes intersection points between a casted ray and this line.
|
|
222
234
|
*
|
package/src/objects/Points.js
CHANGED
|
@@ -89,6 +89,18 @@ class Points extends Object3D {
|
|
|
89
89
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
+
/**
|
|
93
|
+
* Returns `true` if this point cloud intersects the given frustum.
|
|
94
|
+
*
|
|
95
|
+
* @param {Frustum|FrustumArray} frustum - The frustum to test.
|
|
96
|
+
* @return {boolean} Whether this point cloud intersects the given frustum or not.
|
|
97
|
+
*/
|
|
98
|
+
intersectsFrustum( frustum ) {
|
|
99
|
+
|
|
100
|
+
return frustum.intersectsObject( this );
|
|
101
|
+
|
|
102
|
+
}
|
|
103
|
+
|
|
92
104
|
/**
|
|
93
105
|
* Computes intersection points between a casted ray and this point cloud.
|
|
94
106
|
*
|
package/src/objects/Sprite.js
CHANGED
|
@@ -120,6 +120,18 @@ class Sprite extends Object3D {
|
|
|
120
120
|
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
+
/**
|
|
124
|
+
* Returns `true` if this sprite intersects the given frustum.
|
|
125
|
+
*
|
|
126
|
+
* @param {Frustum|FrustumArray} frustum - The frustum to test.
|
|
127
|
+
* @return {boolean} Whether this sprite intersects the given frustum or not.
|
|
128
|
+
*/
|
|
129
|
+
intersectsFrustum( frustum ) {
|
|
130
|
+
|
|
131
|
+
return frustum.intersectsSprite( this );
|
|
132
|
+
|
|
133
|
+
}
|
|
134
|
+
|
|
123
135
|
/**
|
|
124
136
|
* Computes intersection points between a casted ray and this sprite.
|
|
125
137
|
*
|