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
|
@@ -35,7 +35,7 @@ class Sampler extends Binding {
|
|
|
35
35
|
this._onTextureDispose = () => {
|
|
36
36
|
|
|
37
37
|
this.generation = null;
|
|
38
|
-
this.version =
|
|
38
|
+
this.version = - 1;
|
|
39
39
|
|
|
40
40
|
};
|
|
41
41
|
|
|
@@ -47,7 +47,7 @@ class Sampler extends Binding {
|
|
|
47
47
|
*
|
|
48
48
|
* @type {number}
|
|
49
49
|
*/
|
|
50
|
-
this.version = texture ? texture.version :
|
|
50
|
+
this.version = texture ? texture.version : - 1;
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
53
|
* The binding's generation which is an additional version
|
|
@@ -95,7 +95,7 @@ class Sampler extends Binding {
|
|
|
95
95
|
this._texture = value;
|
|
96
96
|
|
|
97
97
|
this.generation = null;
|
|
98
|
-
this.version =
|
|
98
|
+
this.version = - 1;
|
|
99
99
|
|
|
100
100
|
if ( this._texture ) {
|
|
101
101
|
|
|
@@ -150,7 +150,7 @@ class Sampler extends Binding {
|
|
|
150
150
|
clonedSampler._onTextureDispose = () => {
|
|
151
151
|
|
|
152
152
|
clonedSampler.generation = null;
|
|
153
|
-
clonedSampler.version =
|
|
153
|
+
clonedSampler.version = - 1;
|
|
154
154
|
|
|
155
155
|
};
|
|
156
156
|
|
|
@@ -21,9 +21,10 @@ class StorageBuffer extends Buffer {
|
|
|
21
21
|
/**
|
|
22
22
|
* This flag can be used for type testing.
|
|
23
23
|
*
|
|
24
|
+
* @private
|
|
24
25
|
* @type {BufferAttribute}
|
|
25
26
|
*/
|
|
26
|
-
this.
|
|
27
|
+
this._attribute = attribute;
|
|
27
28
|
|
|
28
29
|
/**
|
|
29
30
|
* This flag can be used for type testing.
|
|
@@ -36,6 +37,17 @@ class StorageBuffer extends Buffer {
|
|
|
36
37
|
|
|
37
38
|
}
|
|
38
39
|
|
|
40
|
+
/**
|
|
41
|
+
* The storage buffer attribute.
|
|
42
|
+
*
|
|
43
|
+
* @type {BufferAttribute}
|
|
44
|
+
*/
|
|
45
|
+
get attribute() {
|
|
46
|
+
|
|
47
|
+
return this._attribute;
|
|
48
|
+
|
|
49
|
+
}
|
|
50
|
+
|
|
39
51
|
}
|
|
40
52
|
|
|
41
53
|
export default StorageBuffer;
|
|
@@ -48,6 +48,13 @@ class Textures extends DataMap {
|
|
|
48
48
|
*/
|
|
49
49
|
this.info = info;
|
|
50
50
|
|
|
51
|
+
/**
|
|
52
|
+
* A set of HTMLTextures that need paint updates.
|
|
53
|
+
*
|
|
54
|
+
* @type {Set<HTMLTexture>}
|
|
55
|
+
*/
|
|
56
|
+
this._htmlTextures = new Set();
|
|
57
|
+
|
|
51
58
|
}
|
|
52
59
|
|
|
53
60
|
/**
|
|
@@ -162,6 +169,8 @@ class Textures extends DataMap {
|
|
|
162
169
|
|
|
163
170
|
renderTargetData.initialized = true;
|
|
164
171
|
|
|
172
|
+
this.info.memory.renderTargets ++;
|
|
173
|
+
|
|
165
174
|
// dispose
|
|
166
175
|
|
|
167
176
|
renderTargetData.onDispose = () => {
|
|
@@ -218,6 +227,56 @@ class Textures extends DataMap {
|
|
|
218
227
|
|
|
219
228
|
}
|
|
220
229
|
|
|
230
|
+
// Ensure HTMLTexture elements are in the canvas before measuring size.
|
|
231
|
+
|
|
232
|
+
if ( texture.isHTMLTexture && texture.image ) {
|
|
233
|
+
|
|
234
|
+
const canvas = this.renderer.domElement;
|
|
235
|
+
|
|
236
|
+
if ( 'requestPaint' in canvas ) {
|
|
237
|
+
|
|
238
|
+
if ( ! canvas.hasAttribute( 'layoutsubtree' ) ) {
|
|
239
|
+
|
|
240
|
+
canvas.setAttribute( 'layoutsubtree', 'true' );
|
|
241
|
+
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if ( texture.image.parentNode !== canvas ) {
|
|
245
|
+
|
|
246
|
+
canvas.appendChild( texture.image );
|
|
247
|
+
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Set up shared paint callback for all HTMLTextures.
|
|
251
|
+
|
|
252
|
+
if ( this._htmlTextures.size === 0 ) {
|
|
253
|
+
|
|
254
|
+
const htmlTextures = this._htmlTextures;
|
|
255
|
+
|
|
256
|
+
canvas.onpaint = ( event ) => {
|
|
257
|
+
|
|
258
|
+
const changed = event && event.changedElements;
|
|
259
|
+
|
|
260
|
+
for ( const t of htmlTextures ) {
|
|
261
|
+
|
|
262
|
+
if ( ! changed || changed.includes( t.image ) ) {
|
|
263
|
+
|
|
264
|
+
t.needsUpdate = true;
|
|
265
|
+
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
this._htmlTextures.add( texture );
|
|
275
|
+
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
}
|
|
279
|
+
|
|
221
280
|
//
|
|
222
281
|
|
|
223
282
|
const { width, height, depth } = this.getSize( texture );
|
|
@@ -318,14 +377,15 @@ class Textures extends DataMap {
|
|
|
318
377
|
|
|
319
378
|
textureData.initialized = true;
|
|
320
379
|
textureData.generation = texture.version;
|
|
380
|
+
textureData.bindGroups = new Set();
|
|
321
381
|
|
|
322
382
|
//
|
|
323
383
|
|
|
324
|
-
this.info.
|
|
384
|
+
this.info.createTexture( texture );
|
|
325
385
|
|
|
326
386
|
//
|
|
327
387
|
|
|
328
|
-
if ( texture.isVideoTexture && ColorManagement.getTransfer( texture.colorSpace ) !== SRGBTransfer ) {
|
|
388
|
+
if ( texture.isVideoTexture && ColorManagement.enabled === true && ColorManagement.getTransfer( texture.colorSpace ) !== SRGBTransfer ) {
|
|
329
389
|
|
|
330
390
|
warn( 'WebGPURenderer: Video textures must use a color space with a sRGB transfer function, e.g. SRGBColorSpace.' );
|
|
331
391
|
|
|
@@ -387,7 +447,13 @@ class Textures extends DataMap {
|
|
|
387
447
|
|
|
388
448
|
if ( image.image !== undefined ) image = image.image;
|
|
389
449
|
|
|
390
|
-
if (
|
|
450
|
+
if ( texture.isHTMLTexture ) {
|
|
451
|
+
|
|
452
|
+
target.width = image.offsetWidth || 1;
|
|
453
|
+
target.height = image.offsetHeight || 1;
|
|
454
|
+
target.depth = 1;
|
|
455
|
+
|
|
456
|
+
} else if ( ( typeof HTMLVideoElement !== 'undefined' ) && ( image instanceof HTMLVideoElement ) ) {
|
|
391
457
|
|
|
392
458
|
target.width = image.videoWidth || 1;
|
|
393
459
|
target.height = image.videoHeight || 1;
|
|
@@ -503,6 +569,8 @@ class Textures extends DataMap {
|
|
|
503
569
|
this.delete( renderTarget );
|
|
504
570
|
this.backend.delete( renderTarget );
|
|
505
571
|
|
|
572
|
+
this.info.memory.renderTargets --;
|
|
573
|
+
|
|
506
574
|
}
|
|
507
575
|
|
|
508
576
|
}
|
|
@@ -531,9 +599,26 @@ class Textures extends DataMap {
|
|
|
531
599
|
const isDefaultTexture = textureData.isDefaultTexture;
|
|
532
600
|
this.backend.destroyTexture( texture, isDefaultTexture );
|
|
533
601
|
|
|
602
|
+
// delete cached bind groups so they don't point to destroyed textures
|
|
603
|
+
|
|
604
|
+
if ( textureData.bindGroups ) {
|
|
605
|
+
|
|
606
|
+
for ( const bindGroup of textureData.bindGroups ) {
|
|
607
|
+
|
|
608
|
+
const bindingsData = this.backend.get( bindGroup );
|
|
609
|
+
|
|
610
|
+
bindingsData.groups = undefined;
|
|
611
|
+
bindingsData.versions = undefined;
|
|
612
|
+
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
this._htmlTextures.delete( texture );
|
|
618
|
+
|
|
534
619
|
this.delete( texture );
|
|
535
620
|
|
|
536
|
-
this.info.
|
|
621
|
+
this.info.destroyTexture( texture );
|
|
537
622
|
|
|
538
623
|
}
|
|
539
624
|
|
|
@@ -54,7 +54,7 @@ class TimestampQueryPool {
|
|
|
54
54
|
this.isDisposed = false;
|
|
55
55
|
|
|
56
56
|
/**
|
|
57
|
-
*
|
|
57
|
+
* The total frame duration until the next update.
|
|
58
58
|
*
|
|
59
59
|
* @type {number}
|
|
60
60
|
* @default 0
|
|
@@ -69,9 +69,11 @@ class TimestampQueryPool {
|
|
|
69
69
|
this.frames = [];
|
|
70
70
|
|
|
71
71
|
/**
|
|
72
|
-
*
|
|
72
|
+
* This property is used to avoid multiple concurrent resolve operations.
|
|
73
|
+
* The WebGL backend uses it as a boolean flag. In context of WebGPU, it holds
|
|
74
|
+
* the promise of the current resolve operation.
|
|
73
75
|
*
|
|
74
|
-
* @type {boolean}
|
|
76
|
+
* @type {boolean|Promise<number>}
|
|
75
77
|
* @default false
|
|
76
78
|
*/
|
|
77
79
|
this.pendingResolve = false;
|
|
@@ -47,6 +47,51 @@ class UniformsGroup extends UniformBuffer {
|
|
|
47
47
|
*/
|
|
48
48
|
this.uniforms = [];
|
|
49
49
|
|
|
50
|
+
/**
|
|
51
|
+
* A cache for the uniform update ranges.
|
|
52
|
+
*
|
|
53
|
+
* @private
|
|
54
|
+
* @type {Map<number, {start: number, count: number}>}
|
|
55
|
+
*/
|
|
56
|
+
this._updateRangeCache = new Map();
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Adds a uniform's update range to this buffer.
|
|
62
|
+
*
|
|
63
|
+
* @param {Uniform} uniform - The uniform.
|
|
64
|
+
*/
|
|
65
|
+
addUniformUpdateRange( uniform ) {
|
|
66
|
+
|
|
67
|
+
const index = uniform.index;
|
|
68
|
+
|
|
69
|
+
if ( this._updateRangeCache.has( index ) !== true ) {
|
|
70
|
+
|
|
71
|
+
const updateRanges = this.updateRanges;
|
|
72
|
+
|
|
73
|
+
const start = uniform.offset;
|
|
74
|
+
const count = uniform.itemSize;
|
|
75
|
+
|
|
76
|
+
const range = { start, count };
|
|
77
|
+
|
|
78
|
+
updateRanges.push( range );
|
|
79
|
+
|
|
80
|
+
this._updateRangeCache.set( index, range );
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Clears all update ranges of this buffer.
|
|
88
|
+
*/
|
|
89
|
+
clearUpdateRanges() {
|
|
90
|
+
|
|
91
|
+
this._updateRangeCache.clear();
|
|
92
|
+
|
|
93
|
+
super.clearUpdateRanges();
|
|
94
|
+
|
|
50
95
|
}
|
|
51
96
|
|
|
52
97
|
/**
|
|
@@ -156,6 +201,7 @@ class UniformsGroup extends UniformBuffer {
|
|
|
156
201
|
}
|
|
157
202
|
|
|
158
203
|
uniform.offset = offset / bytesPerElement;
|
|
204
|
+
uniform.index = i;
|
|
159
205
|
|
|
160
206
|
offset += itemSize;
|
|
161
207
|
|
|
@@ -235,6 +281,8 @@ class UniformsGroup extends UniformBuffer {
|
|
|
235
281
|
b[ offset ] = a[ offset ] = v;
|
|
236
282
|
updated = true;
|
|
237
283
|
|
|
284
|
+
this.addUniformUpdateRange( uniform );
|
|
285
|
+
|
|
238
286
|
}
|
|
239
287
|
|
|
240
288
|
return updated;
|
|
@@ -265,6 +313,8 @@ class UniformsGroup extends UniformBuffer {
|
|
|
265
313
|
|
|
266
314
|
updated = true;
|
|
267
315
|
|
|
316
|
+
this.addUniformUpdateRange( uniform );
|
|
317
|
+
|
|
268
318
|
}
|
|
269
319
|
|
|
270
320
|
return updated;
|
|
@@ -296,6 +346,8 @@ class UniformsGroup extends UniformBuffer {
|
|
|
296
346
|
|
|
297
347
|
updated = true;
|
|
298
348
|
|
|
349
|
+
this.addUniformUpdateRange( uniform );
|
|
350
|
+
|
|
299
351
|
}
|
|
300
352
|
|
|
301
353
|
return updated;
|
|
@@ -317,7 +369,7 @@ class UniformsGroup extends UniformBuffer {
|
|
|
317
369
|
const offset = uniform.offset;
|
|
318
370
|
const type = uniform.getType();
|
|
319
371
|
|
|
320
|
-
if ( a[ offset + 0 ] !== v.x || a[ offset + 1 ] !== v.y || a[ offset + 2 ] !== v.z || a[ offset +
|
|
372
|
+
if ( a[ offset + 0 ] !== v.x || a[ offset + 1 ] !== v.y || a[ offset + 2 ] !== v.z || a[ offset + 3 ] !== v.w ) {
|
|
321
373
|
|
|
322
374
|
const b = this._getBufferForType( type );
|
|
323
375
|
|
|
@@ -328,6 +380,8 @@ class UniformsGroup extends UniformBuffer {
|
|
|
328
380
|
|
|
329
381
|
updated = true;
|
|
330
382
|
|
|
383
|
+
this.addUniformUpdateRange( uniform );
|
|
384
|
+
|
|
331
385
|
}
|
|
332
386
|
|
|
333
387
|
return updated;
|
|
@@ -358,6 +412,8 @@ class UniformsGroup extends UniformBuffer {
|
|
|
358
412
|
|
|
359
413
|
updated = true;
|
|
360
414
|
|
|
415
|
+
this.addUniformUpdateRange( uniform );
|
|
416
|
+
|
|
361
417
|
}
|
|
362
418
|
|
|
363
419
|
return updated;
|
|
@@ -396,6 +452,8 @@ class UniformsGroup extends UniformBuffer {
|
|
|
396
452
|
|
|
397
453
|
updated = true;
|
|
398
454
|
|
|
455
|
+
this.addUniformUpdateRange( uniform );
|
|
456
|
+
|
|
399
457
|
}
|
|
400
458
|
|
|
401
459
|
return updated;
|
|
@@ -423,6 +481,8 @@ class UniformsGroup extends UniformBuffer {
|
|
|
423
481
|
setArray( a, e, offset );
|
|
424
482
|
updated = true;
|
|
425
483
|
|
|
484
|
+
this.addUniformUpdateRange( uniform );
|
|
485
|
+
|
|
426
486
|
}
|
|
427
487
|
|
|
428
488
|
return updated;
|
|
@@ -432,6 +492,7 @@ class UniformsGroup extends UniformBuffer {
|
|
|
432
492
|
/**
|
|
433
493
|
* Returns a typed array that matches the given data type.
|
|
434
494
|
*
|
|
495
|
+
* @private
|
|
435
496
|
* @param {string} type - The data type.
|
|
436
497
|
* @return {TypedArray} The typed array.
|
|
437
498
|
*/
|
|
@@ -11,16 +11,17 @@ import { AddEquation, BackSide, CustomBlending, DepthFormat, DepthStencilFormat,
|
|
|
11
11
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
12
12
|
import { XRRenderTarget } from './XRRenderTarget.js';
|
|
13
13
|
import { CylinderGeometry } from '../../geometries/CylinderGeometry.js';
|
|
14
|
-
import QuadMesh from './QuadMesh.js';
|
|
15
|
-
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
16
14
|
import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
|
|
17
15
|
import { MeshBasicMaterial } from '../../materials/MeshBasicMaterial.js';
|
|
18
16
|
import { Mesh } from '../../objects/Mesh.js';
|
|
19
17
|
import { warn } from '../../utils.js';
|
|
18
|
+
import { renderOutput } from '../../nodes/display/RenderOutputNode.js';
|
|
20
19
|
|
|
21
20
|
const _cameraLPos = /*@__PURE__*/ new Vector3();
|
|
22
21
|
const _cameraRPos = /*@__PURE__*/ new Vector3();
|
|
23
22
|
|
|
23
|
+
const _contextNodeLib = /*@__PURE__*/ new WeakMap();
|
|
24
|
+
|
|
24
25
|
/**
|
|
25
26
|
* The XR manager is built on top of the WebXR Device API to
|
|
26
27
|
* manage XR sessions with `WebGPURenderer`.
|
|
@@ -167,6 +168,7 @@ class XRManager extends EventDispatcher {
|
|
|
167
168
|
/**
|
|
168
169
|
* Whether the XR session uses layers.
|
|
169
170
|
*
|
|
171
|
+
* @private
|
|
170
172
|
* @type {boolean}
|
|
171
173
|
* @default false
|
|
172
174
|
*/
|
|
@@ -181,8 +183,6 @@ class XRManager extends EventDispatcher {
|
|
|
181
183
|
*/
|
|
182
184
|
this._supportsGlBinding = typeof XRWebGLBinding !== 'undefined';
|
|
183
185
|
|
|
184
|
-
this._frameBufferTargets = null;
|
|
185
|
-
|
|
186
186
|
/**
|
|
187
187
|
* Helper function to create native WebXR Layer.
|
|
188
188
|
*
|
|
@@ -829,19 +829,23 @@ class XRManager extends EventDispatcher {
|
|
|
829
829
|
const renderer = this._renderer;
|
|
830
830
|
|
|
831
831
|
const wasPresenting = this.isPresenting;
|
|
832
|
-
|
|
833
|
-
const rendererFramebufferTarget = renderer._frameBufferTarget;
|
|
832
|
+
|
|
834
833
|
this.isPresenting = false;
|
|
835
834
|
|
|
836
835
|
const rendererSize = new Vector2();
|
|
837
836
|
renderer.getSize( rendererSize );
|
|
838
|
-
|
|
837
|
+
|
|
838
|
+
const currentRenderTarget = renderer.getRenderTarget();
|
|
839
839
|
|
|
840
840
|
for ( const layer of this._layers ) {
|
|
841
841
|
|
|
842
842
|
layer.renderTarget.isXRRenderTarget = this._session !== null;
|
|
843
843
|
layer.renderTarget._hasExternalTextures = layer.renderTarget.isXRRenderTarget;
|
|
844
844
|
|
|
845
|
+
const currentContextNode = renderer.contextNode;
|
|
846
|
+
|
|
847
|
+
let contextNode;
|
|
848
|
+
|
|
845
849
|
if ( layer.renderTarget.isXRRenderTarget && this._sessionUsesLayers ) {
|
|
846
850
|
|
|
847
851
|
layer.xrlayer.transform = new XRRigidTransform( layer.plane.getWorldPosition( translationObject ), layer.plane.getWorldQuaternion( quaternionObject ) );
|
|
@@ -853,42 +857,46 @@ class XRManager extends EventDispatcher {
|
|
|
853
857
|
undefined );
|
|
854
858
|
|
|
855
859
|
renderer._setXRLayerSize( layer.renderTarget.width, layer.renderTarget.height );
|
|
856
|
-
renderer.setOutputRenderTarget( layer.renderTarget );
|
|
857
|
-
renderer.setRenderTarget( null );
|
|
858
|
-
renderer._frameBufferTarget = null;
|
|
859
860
|
|
|
860
|
-
|
|
861
|
-
const { frameBufferTarget, quad } = this._frameBufferTargets.get( layer.renderTarget ) || { frameBufferTarget: null, quad: null };
|
|
862
|
-
if ( ! frameBufferTarget ) {
|
|
861
|
+
contextNode = _contextNodeLib.get( currentContextNode );
|
|
863
862
|
|
|
864
|
-
|
|
865
|
-
this._frameBufferTargets.set( layer.renderTarget, { frameBufferTarget: renderer._getFrameBufferTarget(), quad: renderer._quad } );
|
|
863
|
+
if ( contextNode === undefined ) {
|
|
866
864
|
|
|
867
|
-
|
|
865
|
+
// Apply ToneMapping and OutputColorSpace directly in the material shader
|
|
868
866
|
|
|
869
|
-
|
|
870
|
-
renderer._quad = quad;
|
|
867
|
+
contextNode = currentContextNode.context( {
|
|
871
868
|
|
|
872
|
-
|
|
869
|
+
getOutput: ( outputNode ) => {
|
|
870
|
+
|
|
871
|
+
return renderOutput( outputNode, renderer.toneMapping, renderer.outputColorSpace );
|
|
873
872
|
|
|
874
|
-
|
|
873
|
+
}
|
|
875
874
|
|
|
876
|
-
|
|
875
|
+
} );
|
|
876
|
+
|
|
877
|
+
_contextNodeLib.set( currentContextNode, contextNode );
|
|
878
|
+
|
|
879
|
+
}
|
|
877
880
|
|
|
878
881
|
} else {
|
|
879
882
|
|
|
880
|
-
|
|
881
|
-
layer.rendercall();
|
|
883
|
+
contextNode = currentContextNode;
|
|
882
884
|
|
|
883
885
|
}
|
|
884
886
|
|
|
887
|
+
renderer.contextNode = contextNode;
|
|
888
|
+
|
|
889
|
+
renderer.setRenderTarget( layer.renderTarget );
|
|
890
|
+
|
|
891
|
+
layer.rendercall();
|
|
892
|
+
|
|
893
|
+
renderer.contextNode = currentContextNode;
|
|
894
|
+
|
|
885
895
|
}
|
|
886
896
|
|
|
887
|
-
renderer.setRenderTarget(
|
|
888
|
-
renderer.setOutputRenderTarget( rendererOutputTarget );
|
|
889
|
-
renderer._frameBufferTarget = rendererFramebufferTarget;
|
|
897
|
+
renderer.setRenderTarget( currentRenderTarget );
|
|
890
898
|
renderer._setXRLayerSize( rendererSize.x, rendererSize.y );
|
|
891
|
-
|
|
899
|
+
|
|
892
900
|
this.isPresenting = wasPresenting;
|
|
893
901
|
|
|
894
902
|
}
|
|
@@ -1130,8 +1138,8 @@ class XRManager extends EventDispatcher {
|
|
|
1130
1138
|
|
|
1131
1139
|
// inherit camera layers and enable eye layers (1 = left, 2 = right)
|
|
1132
1140
|
cameraXR.layers.mask = camera.layers.mask | 0b110;
|
|
1133
|
-
cameraL.layers.mask = cameraXR.layers.mask &
|
|
1134
|
-
cameraR.layers.mask = cameraXR.layers.mask &
|
|
1141
|
+
cameraL.layers.mask = cameraXR.layers.mask & ~ 0b100;
|
|
1142
|
+
cameraR.layers.mask = cameraXR.layers.mask & ~ 0b010;
|
|
1135
1143
|
|
|
1136
1144
|
|
|
1137
1145
|
const parent = camera.parent;
|
|
@@ -410,7 +410,7 @@ class PMREMGenerator {
|
|
|
410
410
|
|
|
411
411
|
this._renderer.setRenderTarget( _oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel );
|
|
412
412
|
outputTarget.scissorTest = false;
|
|
413
|
-
_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );
|
|
413
|
+
this._setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );
|
|
414
414
|
|
|
415
415
|
}
|
|
416
416
|
|
|
@@ -459,6 +459,7 @@ class PMREMGenerator {
|
|
|
459
459
|
( { lodMeshes: this._lodMeshes, sizeLods: this._sizeLods, sigmas: this._sigmas } = _createPlanes( _lodMax ) );
|
|
460
460
|
|
|
461
461
|
this._blurMaterial = _getBlurShader( _lodMax, renderTarget.width, renderTarget.height );
|
|
462
|
+
this._ggxMaterial = _getGGXShader( _lodMax, renderTarget.width, renderTarget.height );
|
|
462
463
|
|
|
463
464
|
}
|
|
464
465
|
|
|
@@ -565,7 +566,7 @@ class PMREMGenerator {
|
|
|
565
566
|
|
|
566
567
|
const size = this._cubeSize;
|
|
567
568
|
|
|
568
|
-
_setViewport( cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size );
|
|
569
|
+
this._setViewport( cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size );
|
|
569
570
|
|
|
570
571
|
renderer.render( scene, cubeCamera );
|
|
571
572
|
|
|
@@ -607,9 +608,7 @@ class PMREMGenerator {
|
|
|
607
608
|
mesh.material = material;
|
|
608
609
|
|
|
609
610
|
const size = this._cubeSize;
|
|
610
|
-
|
|
611
|
-
_setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size );
|
|
612
|
-
|
|
611
|
+
this._setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size );
|
|
613
612
|
renderer.setRenderTarget( cubeUVRenderTarget );
|
|
614
613
|
renderer.render( mesh, _flatCamera );
|
|
615
614
|
|
|
@@ -650,13 +649,6 @@ class PMREMGenerator {
|
|
|
650
649
|
const renderer = this._renderer;
|
|
651
650
|
const pingPongRenderTarget = this._pingPongRenderTarget;
|
|
652
651
|
|
|
653
|
-
// Lazy create GGX material only when first used
|
|
654
|
-
if ( this._ggxMaterial === null ) {
|
|
655
|
-
|
|
656
|
-
this._ggxMaterial = _getGGXShader( this._lodMax, this._pingPongRenderTarget.width, this._pingPongRenderTarget.height );
|
|
657
|
-
|
|
658
|
-
}
|
|
659
|
-
|
|
660
652
|
const ggxMaterial = this._ggxMaterial;
|
|
661
653
|
const ggxMesh = this._lodMeshes[ lodOut ];
|
|
662
654
|
ggxMesh.material = ggxMaterial;
|
|
@@ -669,7 +661,7 @@ class PMREMGenerator {
|
|
|
669
661
|
const incrementalRoughness = Math.sqrt( targetRoughness * targetRoughness - sourceRoughness * sourceRoughness );
|
|
670
662
|
|
|
671
663
|
// Apply blur strength mapping for better quality across the roughness range
|
|
672
|
-
const blurStrength = 0.
|
|
664
|
+
const blurStrength = 0.0 + targetRoughness * 1.25;
|
|
673
665
|
const adjustedRoughness = incrementalRoughness * blurStrength;
|
|
674
666
|
|
|
675
667
|
// Calculate viewport position based on output LOD level
|
|
@@ -684,7 +676,7 @@ class PMREMGenerator {
|
|
|
684
676
|
ggxUniforms.roughness.value = adjustedRoughness;
|
|
685
677
|
ggxUniforms.mipInt.value = _lodMax - lodIn; // Sample from input LOD
|
|
686
678
|
|
|
687
|
-
_setViewport( pingPongRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
|
|
679
|
+
this._setViewport( pingPongRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
|
|
688
680
|
renderer.setRenderTarget( pingPongRenderTarget );
|
|
689
681
|
renderer.render( ggxMesh, _flatCamera );
|
|
690
682
|
|
|
@@ -694,7 +686,7 @@ class PMREMGenerator {
|
|
|
694
686
|
ggxUniforms.roughness.value = 0.0; // Direct copy
|
|
695
687
|
ggxUniforms.mipInt.value = _lodMax - lodOut; // Read from the level we just wrote
|
|
696
688
|
|
|
697
|
-
_setViewport( cubeUVRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
|
|
689
|
+
this._setViewport( cubeUVRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
|
|
698
690
|
renderer.setRenderTarget( cubeUVRenderTarget );
|
|
699
691
|
renderer.render( ggxMesh, _flatCamera );
|
|
700
692
|
|
|
@@ -820,12 +812,29 @@ class PMREMGenerator {
|
|
|
820
812
|
const x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );
|
|
821
813
|
const y = 4 * ( this._cubeSize - outputSize );
|
|
822
814
|
|
|
823
|
-
_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );
|
|
815
|
+
this._setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );
|
|
824
816
|
renderer.setRenderTarget( targetOut );
|
|
825
817
|
renderer.render( blurMesh, _flatCamera );
|
|
826
818
|
|
|
827
819
|
}
|
|
828
820
|
|
|
821
|
+
_setViewport( target, x, y, width, height ) {
|
|
822
|
+
|
|
823
|
+
if ( this._renderer.isWebGLRenderer ) {
|
|
824
|
+
|
|
825
|
+
target.viewport.set( x, target.height - height - y, width, height );
|
|
826
|
+
target.scissor.set( x, target.height - height - y, width, height );
|
|
827
|
+
|
|
828
|
+
} else {
|
|
829
|
+
|
|
830
|
+
target.viewport.set( x, y, width, height );
|
|
831
|
+
target.scissor.set( x, y, width, height );
|
|
832
|
+
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
|
|
829
838
|
}
|
|
830
839
|
|
|
831
840
|
function _createPlanes( lodMax ) {
|
|
@@ -931,13 +940,6 @@ function _createRenderTarget( width, height ) {
|
|
|
931
940
|
|
|
932
941
|
}
|
|
933
942
|
|
|
934
|
-
function _setViewport( target, x, y, width, height ) {
|
|
935
|
-
|
|
936
|
-
target.viewport.set( x, y, width, height );
|
|
937
|
-
target.scissor.set( x, y, width, height );
|
|
938
|
-
|
|
939
|
-
}
|
|
940
|
-
|
|
941
943
|
function _getMaterial( type ) {
|
|
942
944
|
|
|
943
945
|
const material = new NodeMaterial();
|
|
@@ -126,7 +126,7 @@ class NodeBuilderState {
|
|
|
126
126
|
|
|
127
127
|
if ( shared !== true ) {
|
|
128
128
|
|
|
129
|
-
const bindingsGroup = new BindGroup( instanceGroup.name, []
|
|
129
|
+
const bindingsGroup = new BindGroup( instanceGroup.name, [] );
|
|
130
130
|
bindings.push( bindingsGroup );
|
|
131
131
|
|
|
132
132
|
for ( const instanceBinding of instanceGroup.bindings ) {
|