super-three 0.171.0 → 0.173.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +594 -427
- package/build/three.core.js +515 -81
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +79 -350
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +20 -7
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +29362 -3427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +29361 -3427
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +9 -7
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +48 -37
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +34 -29
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +22 -4
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -2
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
- package/examples/jsm/misc/Volume.js +27 -17
- package/examples/jsm/misc/VolumeSlice.js +7 -5
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +29 -24
- package/examples/jsm/physics/JoltPhysics.js +7 -7
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +5 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +2 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +4 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +18 -5
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/ArrayCamera.js +1 -0
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +6 -1
- package/src/core/BufferAttribute.js +4 -0
- package/src/core/EventDispatcher.js +8 -6
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/ImageUtils.js +1 -11
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +476 -23
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +121 -10
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
- package/src/nodes/Nodes.js +5 -6
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +47 -6
- package/src/nodes/accessors/BatchNode.js +42 -6
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +113 -3
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +306 -12
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +65 -5
- package/src/nodes/accessors/Object3DNode.js +101 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +56 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
- package/src/nodes/accessors/ReferenceNode.js +201 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +209 -8
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +38 -2
- package/src/nodes/accessors/Texture3DNode.js +91 -7
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +316 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +231 -25
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +80 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/ArrayNode.js +125 -0
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +350 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1166 -26
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +152 -1
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +51 -10
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +98 -1
- package/src/nodes/core/StructNode.js +121 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +105 -6
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +146 -7
- package/src/nodes/core/VaryingNode.js +100 -3
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BlendModes.js +88 -1
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +300 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +96 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +110 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +241 -35
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +78 -4
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +627 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +329 -18
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +3 -2
- package/src/nodes/tsl/TSLCore.js +22 -2
- package/src/nodes/utils/ArrayElementNode.js +39 -3
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +82 -2
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +54 -0
- package/src/nodes/utils/Timer.js +40 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +2 -3
- package/src/objects/ClippingGroup.js +49 -0
- package/src/objects/Line.js +6 -6
- package/src/renderers/WebGLRenderer.js +30 -4
- package/src/renderers/common/Animation.js +85 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +502 -44
- package/src/renderers/common/Background.js +48 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +108 -15
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +91 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +34 -6
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +99 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +201 -2
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +40 -3
- package/src/renderers/common/RenderObject.js +400 -17
- package/src/renderers/common/RenderObjects.js +103 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1170 -86
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +120 -0
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +97 -7
- package/src/renderers/common/TimestampQueryPool.js +39 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +141 -2
- package/src/renderers/common/XRManager.js +1193 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +76 -10
- package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +243 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +352 -78
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl/WebGLBackground.js +4 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +578 -164
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
- package/src/renderers/webgpu/WebGPURenderer.js +36 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +19 -2
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/src/textures/VideoFrameTexture.js +35 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/objects/InstancedPoints.js +0 -19
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -3,27 +3,93 @@ import { vec4, renderOutput } from '../../nodes/TSL.js';
|
|
|
3
3
|
import { LinearSRGBColorSpace, NoToneMapping } from '../../constants.js';
|
|
4
4
|
import QuadMesh from '../../renderers/common/QuadMesh.js';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
/**
|
|
7
|
+
* This module is responsible to manage the post processing setups in apps.
|
|
8
|
+
* You usually create a single instance of this class and use it to define
|
|
9
|
+
* the output of your post processing effect chain.
|
|
10
|
+
* ```js
|
|
11
|
+
* const postProcessing = new PostProcessing( renderer );
|
|
12
|
+
*
|
|
13
|
+
* const scenePass = pass( scene, camera );
|
|
14
|
+
*
|
|
15
|
+
* postProcessing.outputNode = scenePass;
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
9
18
|
class PostProcessing {
|
|
10
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new post processing management module.
|
|
22
|
+
*
|
|
23
|
+
* @param {Renderer} renderer - A reference to the renderer.
|
|
24
|
+
* @param {Node<vec4>} outputNode - An optional output node.
|
|
25
|
+
*/
|
|
11
26
|
constructor( renderer, outputNode = vec4( 0, 0, 1, 1 ) ) {
|
|
12
27
|
|
|
28
|
+
/**
|
|
29
|
+
* A reference to the renderer.
|
|
30
|
+
*
|
|
31
|
+
* @type {Renderer}
|
|
32
|
+
*/
|
|
13
33
|
this.renderer = renderer;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* A node which defines the final output of the post
|
|
37
|
+
* processing. This is usually the last node in a chain
|
|
38
|
+
* of effect nodes.
|
|
39
|
+
*
|
|
40
|
+
* @type {Node<vec4>}
|
|
41
|
+
*/
|
|
14
42
|
this.outputNode = outputNode;
|
|
15
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Whether the default output tone mapping and color
|
|
46
|
+
* space transformation should be enabled or not.
|
|
47
|
+
*
|
|
48
|
+
* It is enabled by default by it must be disabled when
|
|
49
|
+
* effects must be executed after tone mapping and color
|
|
50
|
+
* space conversion. A typical example is FXAA which
|
|
51
|
+
* requires sRGB input.
|
|
52
|
+
*
|
|
53
|
+
* When set to `false`, the app must control the output
|
|
54
|
+
* transformation with `RenderOutputNode`.
|
|
55
|
+
*
|
|
56
|
+
* ```js
|
|
57
|
+
* const outputPass = renderOutput( scenePass );
|
|
58
|
+
* ```
|
|
59
|
+
*
|
|
60
|
+
* @type {Boolean}
|
|
61
|
+
*/
|
|
16
62
|
this.outputColorTransform = true;
|
|
17
63
|
|
|
64
|
+
/**
|
|
65
|
+
* Must be set to `true` when the output node changes.
|
|
66
|
+
*
|
|
67
|
+
* @type {Node<vec4>}
|
|
68
|
+
*/
|
|
18
69
|
this.needsUpdate = true;
|
|
19
70
|
|
|
20
|
-
|
|
71
|
+
const material = new NodeMaterial();
|
|
72
|
+
material.name = 'PostProcessing';
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* The full screen quad that is used to render
|
|
76
|
+
* the effects.
|
|
77
|
+
*
|
|
78
|
+
* @private
|
|
79
|
+
* @type {QuadMesh}
|
|
80
|
+
*/
|
|
81
|
+
this._quadMesh = new QuadMesh( material );
|
|
21
82
|
|
|
22
83
|
}
|
|
23
84
|
|
|
85
|
+
/**
|
|
86
|
+
* When `PostProcessing` is used to apply post processing effects,
|
|
87
|
+
* the application must use this version of `render()` inside
|
|
88
|
+
* its animation loop (not the one from the renderer).
|
|
89
|
+
*/
|
|
24
90
|
render() {
|
|
25
91
|
|
|
26
|
-
this.
|
|
92
|
+
this._update();
|
|
27
93
|
|
|
28
94
|
const renderer = this.renderer;
|
|
29
95
|
|
|
@@ -35,7 +101,7 @@ class PostProcessing {
|
|
|
35
101
|
|
|
36
102
|
//
|
|
37
103
|
|
|
38
|
-
_quadMesh.render( renderer );
|
|
104
|
+
this._quadMesh.render( renderer );
|
|
39
105
|
|
|
40
106
|
//
|
|
41
107
|
|
|
@@ -44,7 +110,21 @@ class PostProcessing {
|
|
|
44
110
|
|
|
45
111
|
}
|
|
46
112
|
|
|
47
|
-
|
|
113
|
+
/**
|
|
114
|
+
* Frees internal resources.
|
|
115
|
+
*/
|
|
116
|
+
dispose() {
|
|
117
|
+
|
|
118
|
+
this._quadMesh.material.dispose();
|
|
119
|
+
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Updates the state of the module.
|
|
124
|
+
*
|
|
125
|
+
* @private
|
|
126
|
+
*/
|
|
127
|
+
_update() {
|
|
48
128
|
|
|
49
129
|
if ( this.needsUpdate === true ) {
|
|
50
130
|
|
|
@@ -53,8 +133,8 @@ class PostProcessing {
|
|
|
53
133
|
const toneMapping = renderer.toneMapping;
|
|
54
134
|
const outputColorSpace = renderer.outputColorSpace;
|
|
55
135
|
|
|
56
|
-
_quadMesh.material.fragmentNode = this.outputColorTransform === true ? renderOutput( this.outputNode, toneMapping, outputColorSpace ) : this.outputNode.context( { toneMapping, outputColorSpace } );
|
|
57
|
-
_quadMesh.material.needsUpdate = true;
|
|
136
|
+
this._quadMesh.material.fragmentNode = this.outputColorTransform === true ? renderOutput( this.outputNode, toneMapping, outputColorSpace ) : this.outputNode.context( { toneMapping, outputColorSpace } );
|
|
137
|
+
this._quadMesh.material.needsUpdate = true;
|
|
58
138
|
|
|
59
139
|
this.needsUpdate = false;
|
|
60
140
|
|
|
@@ -62,9 +142,17 @@ class PostProcessing {
|
|
|
62
142
|
|
|
63
143
|
}
|
|
64
144
|
|
|
145
|
+
/**
|
|
146
|
+
* When `PostProcessing` is used to apply post processing effects,
|
|
147
|
+
* the application must use this version of `renderAsync()` inside
|
|
148
|
+
* its animation loop (not the one from the renderer).
|
|
149
|
+
*
|
|
150
|
+
* @async
|
|
151
|
+
* @return {Promise} A Promise that resolves when the render has been finished.
|
|
152
|
+
*/
|
|
65
153
|
async renderAsync() {
|
|
66
154
|
|
|
67
|
-
this.
|
|
155
|
+
this._update();
|
|
68
156
|
|
|
69
157
|
const renderer = this.renderer;
|
|
70
158
|
|
|
@@ -76,7 +164,7 @@ class PostProcessing {
|
|
|
76
164
|
|
|
77
165
|
//
|
|
78
166
|
|
|
79
|
-
await _quadMesh.renderAsync( renderer );
|
|
167
|
+
await this._quadMesh.renderAsync( renderer );
|
|
80
168
|
|
|
81
169
|
//
|
|
82
170
|
|
|
@@ -1,16 +1,74 @@
|
|
|
1
1
|
let _id = 0;
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Class for representing programmable stages which are vertex,
|
|
5
|
+
* fragment or compute shaders. Unlike fixed-function states (like blending),
|
|
6
|
+
* they represent the programmable part of a pipeline.
|
|
7
|
+
*
|
|
8
|
+
* @private
|
|
9
|
+
*/
|
|
3
10
|
class ProgrammableStage {
|
|
4
11
|
|
|
5
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new programmable stage.
|
|
14
|
+
*
|
|
15
|
+
* @param {String} code - The shader code.
|
|
16
|
+
* @param {('vertex'|'fragment'|'compute')} stage - The type of stage.
|
|
17
|
+
* @param {String} name - The name of the shader.
|
|
18
|
+
* @param {Array<Object>?} [transforms=null] - The transforms (only relevant for compute stages with WebGL 2 which uses Transform Feedback).
|
|
19
|
+
* @param {Array<Object>?} [attributes=null] - The attributes (only relevant for compute stages with WebGL 2 which uses Transform Feedback).
|
|
20
|
+
*/
|
|
21
|
+
constructor( code, stage, name, transforms = null, attributes = null ) {
|
|
6
22
|
|
|
23
|
+
/**
|
|
24
|
+
* The id of the programmable stage.
|
|
25
|
+
*
|
|
26
|
+
* @type {Number}
|
|
27
|
+
*/
|
|
7
28
|
this.id = _id ++;
|
|
8
29
|
|
|
30
|
+
/**
|
|
31
|
+
* The shader code.
|
|
32
|
+
*
|
|
33
|
+
* @type {String}
|
|
34
|
+
*/
|
|
9
35
|
this.code = code;
|
|
10
|
-
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The type of stage.
|
|
39
|
+
*
|
|
40
|
+
* @type {String}
|
|
41
|
+
*/
|
|
42
|
+
this.stage = stage;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* The name of the stage.
|
|
46
|
+
* This is used for debugging purposes.
|
|
47
|
+
*
|
|
48
|
+
* @type {String}
|
|
49
|
+
*/
|
|
50
|
+
this.name = name;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The transforms (only relevant for compute stages with WebGL 2 which uses Transform Feedback).
|
|
54
|
+
*
|
|
55
|
+
* @type {Array<Object>?}
|
|
56
|
+
*/
|
|
11
57
|
this.transforms = transforms;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The attributes (only relevant for compute stages with WebGL 2 which uses Transform Feedback).
|
|
61
|
+
*
|
|
62
|
+
* @type {Array<Object>?}
|
|
63
|
+
*/
|
|
12
64
|
this.attributes = attributes;
|
|
13
65
|
|
|
66
|
+
/**
|
|
67
|
+
* How often the programmable stage is currently in use.
|
|
68
|
+
*
|
|
69
|
+
* @type {Number}
|
|
70
|
+
* @default 0
|
|
71
|
+
*/
|
|
14
72
|
this.usedTimes = 0;
|
|
15
73
|
|
|
16
74
|
}
|
|
@@ -3,14 +3,23 @@ import { Float32BufferAttribute } from '../../core/BufferAttribute.js';
|
|
|
3
3
|
import { Mesh } from '../../objects/Mesh.js';
|
|
4
4
|
import { OrthographicCamera } from '../../cameras/OrthographicCamera.js';
|
|
5
5
|
|
|
6
|
-
// Helper for passes that need to fill the viewport with a single quad.
|
|
7
|
-
|
|
8
6
|
const _camera = /*@__PURE__*/ new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
|
|
9
7
|
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
/**
|
|
9
|
+
* The purpose of this special geometry is to fill the entire viewport with a single triangle.
|
|
10
|
+
*
|
|
11
|
+
* Reference: {@link https://github.com/mrdoob/three.js/pull/21358}
|
|
12
|
+
*
|
|
13
|
+
* @private
|
|
14
|
+
* @augments BufferGeometry
|
|
15
|
+
*/
|
|
12
16
|
class QuadGeometry extends BufferGeometry {
|
|
13
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Constructs a new quad geometry.
|
|
20
|
+
*
|
|
21
|
+
* @param {Boolean} [flipY=false] - Whether the uv coordinates should be flipped along the vertical axis or not.
|
|
22
|
+
*/
|
|
14
23
|
constructor( flipY = false ) {
|
|
15
24
|
|
|
16
25
|
super();
|
|
@@ -26,24 +35,64 @@ class QuadGeometry extends BufferGeometry {
|
|
|
26
35
|
|
|
27
36
|
const _geometry = /*@__PURE__*/ new QuadGeometry();
|
|
28
37
|
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* This module is a helper for passes which need to render a full
|
|
41
|
+
* screen effect which is quite common in context of post processing.
|
|
42
|
+
*
|
|
43
|
+
* The intended usage is to reuse a single quad mesh for rendering
|
|
44
|
+
* subsequent passes by just reassigning the `material` reference.
|
|
45
|
+
*
|
|
46
|
+
* @augments Mesh
|
|
47
|
+
*/
|
|
29
48
|
class QuadMesh extends Mesh {
|
|
30
49
|
|
|
50
|
+
/**
|
|
51
|
+
* Constructs a new quad mesh.
|
|
52
|
+
*
|
|
53
|
+
* @param {Material?} [material=null] - The material to render the quad mesh with.
|
|
54
|
+
*/
|
|
31
55
|
constructor( material = null ) {
|
|
32
56
|
|
|
33
57
|
super( _geometry, material );
|
|
34
58
|
|
|
59
|
+
/**
|
|
60
|
+
* The camera to render the quad mesh with.
|
|
61
|
+
*
|
|
62
|
+
* @type {OrthographicCamera}
|
|
63
|
+
* @readonly
|
|
64
|
+
*/
|
|
35
65
|
this.camera = _camera;
|
|
36
66
|
|
|
67
|
+
/**
|
|
68
|
+
* This flag can be used for type testing.
|
|
69
|
+
*
|
|
70
|
+
* @type {Boolean}
|
|
71
|
+
* @readonly
|
|
72
|
+
* @default true
|
|
73
|
+
*/
|
|
37
74
|
this.isQuadMesh = true;
|
|
38
75
|
|
|
39
76
|
}
|
|
40
77
|
|
|
41
|
-
|
|
78
|
+
/**
|
|
79
|
+
* Async version of `render()`.
|
|
80
|
+
*
|
|
81
|
+
* @async
|
|
82
|
+
* @param {Renderer} renderer - The renderer.
|
|
83
|
+
* @return {Promise} A Promise that resolves when the render has been finished.
|
|
84
|
+
*/
|
|
85
|
+
async renderAsync( renderer ) {
|
|
42
86
|
|
|
43
87
|
return renderer.renderAsync( this, _camera );
|
|
44
88
|
|
|
45
89
|
}
|
|
46
90
|
|
|
91
|
+
/**
|
|
92
|
+
* Renders the quad mesh
|
|
93
|
+
*
|
|
94
|
+
* @param {Renderer} renderer - The renderer.
|
|
95
|
+
*/
|
|
47
96
|
render( renderer ) {
|
|
48
97
|
|
|
49
98
|
renderer.render( this, _camera );
|
|
@@ -1,18 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module is used to represent render bundles inside the renderer
|
|
3
|
+
* for further processing.
|
|
4
|
+
*
|
|
5
|
+
* @private
|
|
6
|
+
*/
|
|
1
7
|
class RenderBundle {
|
|
2
8
|
|
|
3
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Constructs a new bundle group.
|
|
11
|
+
*
|
|
12
|
+
* @param {BundleGroup} bundleGroup - The bundle group.
|
|
13
|
+
* @param {Camera} camera - The camera the bundle group is rendered with.
|
|
14
|
+
*/
|
|
15
|
+
constructor( bundleGroup, camera ) {
|
|
4
16
|
|
|
5
|
-
this.
|
|
17
|
+
this.bundleGroup = bundleGroup;
|
|
6
18
|
this.camera = camera;
|
|
7
19
|
|
|
8
20
|
}
|
|
9
21
|
|
|
10
|
-
clone() {
|
|
11
|
-
|
|
12
|
-
return Object.assign( new this.constructor(), this );
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
|
|
16
22
|
}
|
|
17
23
|
|
|
18
24
|
export default RenderBundle;
|
|
@@ -1,35 +1,64 @@
|
|
|
1
1
|
import ChainMap from './ChainMap.js';
|
|
2
2
|
import RenderBundle from './RenderBundle.js';
|
|
3
3
|
|
|
4
|
+
const _chainKeys = [];
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* This renderer module manages render bundles.
|
|
8
|
+
*
|
|
9
|
+
* @private
|
|
10
|
+
*/
|
|
4
11
|
class RenderBundles {
|
|
5
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Constructs a new render bundle management component.
|
|
15
|
+
*/
|
|
6
16
|
constructor() {
|
|
7
17
|
|
|
8
|
-
|
|
18
|
+
/**
|
|
19
|
+
* A chain map for maintaining the render bundles.
|
|
20
|
+
*
|
|
21
|
+
* @type {ChainMap}
|
|
22
|
+
*/
|
|
23
|
+
this.bundles = new ChainMap();
|
|
9
24
|
|
|
10
25
|
}
|
|
11
26
|
|
|
12
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Returns a render bundle for the given bundle group and camera.
|
|
29
|
+
*
|
|
30
|
+
* @param {BundleGroup} bundleGroup - The bundle group.
|
|
31
|
+
* @param {Camera} camera - The camera the bundle group is rendered with.
|
|
32
|
+
* @return {RenderBundle} The render bundle.
|
|
33
|
+
*/
|
|
34
|
+
get( bundleGroup, camera ) {
|
|
35
|
+
|
|
36
|
+
const bundles = this.bundles;
|
|
13
37
|
|
|
14
|
-
|
|
15
|
-
|
|
38
|
+
_chainKeys[ 0 ] = bundleGroup;
|
|
39
|
+
_chainKeys[ 1 ] = camera;
|
|
16
40
|
|
|
17
|
-
let
|
|
41
|
+
let bundle = bundles.get( _chainKeys );
|
|
18
42
|
|
|
19
|
-
if (
|
|
43
|
+
if ( bundle === undefined ) {
|
|
20
44
|
|
|
21
|
-
|
|
22
|
-
|
|
45
|
+
bundle = new RenderBundle( bundleGroup, camera );
|
|
46
|
+
bundles.set( _chainKeys, bundle );
|
|
23
47
|
|
|
24
48
|
}
|
|
25
49
|
|
|
26
|
-
|
|
50
|
+
_chainKeys.length = 0;
|
|
51
|
+
|
|
52
|
+
return bundle;
|
|
27
53
|
|
|
28
54
|
}
|
|
29
55
|
|
|
56
|
+
/**
|
|
57
|
+
* Frees all internal resources.
|
|
58
|
+
*/
|
|
30
59
|
dispose() {
|
|
31
60
|
|
|
32
|
-
this.
|
|
61
|
+
this.bundles = new ChainMap();
|
|
33
62
|
|
|
34
63
|
}
|
|
35
64
|
|
|
@@ -1,44 +1,235 @@
|
|
|
1
1
|
import { Vector4 } from '../../math/Vector4.js';
|
|
2
2
|
import { hashArray } from '../../nodes/core/NodeUtils.js';
|
|
3
3
|
|
|
4
|
-
let
|
|
4
|
+
let _id = 0;
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Any render or compute command is executed in a specific context that defines
|
|
8
|
+
* the state of the renderer and its backend. Typical examples for such context
|
|
9
|
+
* data are the current clear values or data from the active framebuffer. This
|
|
10
|
+
* module is used to represent these contexts as objects.
|
|
11
|
+
*
|
|
12
|
+
* @private
|
|
13
|
+
*/
|
|
6
14
|
class RenderContext {
|
|
7
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Constructs a new render context.
|
|
18
|
+
*/
|
|
8
19
|
constructor() {
|
|
9
20
|
|
|
10
|
-
|
|
21
|
+
/**
|
|
22
|
+
* The context's ID.
|
|
23
|
+
*
|
|
24
|
+
* @type {Number}
|
|
25
|
+
*/
|
|
26
|
+
this.id = _id ++;
|
|
11
27
|
|
|
28
|
+
/**
|
|
29
|
+
* Whether the current active framebuffer has a color attachment.
|
|
30
|
+
*
|
|
31
|
+
* @type {Boolean}
|
|
32
|
+
* @default true
|
|
33
|
+
*/
|
|
12
34
|
this.color = true;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Whether the color attachment should be cleared or not.
|
|
38
|
+
*
|
|
39
|
+
* @type {Boolean}
|
|
40
|
+
* @default true
|
|
41
|
+
*/
|
|
13
42
|
this.clearColor = true;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* The clear color value.
|
|
46
|
+
*
|
|
47
|
+
* @type {Object}
|
|
48
|
+
* @default true
|
|
49
|
+
*/
|
|
14
50
|
this.clearColorValue = { r: 0, g: 0, b: 0, a: 1 };
|
|
15
51
|
|
|
52
|
+
/**
|
|
53
|
+
* Whether the current active framebuffer has a depth attachment.
|
|
54
|
+
*
|
|
55
|
+
* @type {Boolean}
|
|
56
|
+
* @default true
|
|
57
|
+
*/
|
|
16
58
|
this.depth = true;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Whether the depth attachment should be cleared or not.
|
|
62
|
+
*
|
|
63
|
+
* @type {Boolean}
|
|
64
|
+
* @default true
|
|
65
|
+
*/
|
|
17
66
|
this.clearDepth = true;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* The clear depth value.
|
|
70
|
+
*
|
|
71
|
+
* @type {Number}
|
|
72
|
+
* @default 1
|
|
73
|
+
*/
|
|
18
74
|
this.clearDepthValue = 1;
|
|
19
75
|
|
|
76
|
+
/**
|
|
77
|
+
* Whether the current active framebuffer has a stencil attachment.
|
|
78
|
+
*
|
|
79
|
+
* @type {Boolean}
|
|
80
|
+
* @default false
|
|
81
|
+
*/
|
|
20
82
|
this.stencil = false;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Whether the stencil attachment should be cleared or not.
|
|
86
|
+
*
|
|
87
|
+
* @type {Boolean}
|
|
88
|
+
* @default true
|
|
89
|
+
*/
|
|
21
90
|
this.clearStencil = true;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* The clear stencil value.
|
|
94
|
+
*
|
|
95
|
+
* @type {Number}
|
|
96
|
+
* @default 1
|
|
97
|
+
*/
|
|
22
98
|
this.clearStencilValue = 1;
|
|
23
99
|
|
|
100
|
+
/**
|
|
101
|
+
* By default the viewport encloses the entire framebuffer If a smaller
|
|
102
|
+
* viewport is manually defined, this property is to `true` by the renderer.
|
|
103
|
+
*
|
|
104
|
+
* @type {Boolean}
|
|
105
|
+
* @default false
|
|
106
|
+
*/
|
|
24
107
|
this.viewport = false;
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* The viewport value. This value is in physical pixels meaning it incorporates
|
|
111
|
+
* the renderer's pixel ratio. The viewport property of render targets or
|
|
112
|
+
* the renderer is in logical pixels.
|
|
113
|
+
*
|
|
114
|
+
* @type {Vector4}
|
|
115
|
+
*/
|
|
25
116
|
this.viewportValue = new Vector4();
|
|
26
117
|
|
|
118
|
+
/**
|
|
119
|
+
* When the scissor test is active and scissor rectangle smaller than the
|
|
120
|
+
* framebuffers dimensions, this property is to `true` by the renderer.
|
|
121
|
+
*
|
|
122
|
+
* @type {Boolean}
|
|
123
|
+
* @default false
|
|
124
|
+
*/
|
|
27
125
|
this.scissor = false;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* The scissor rectangle.
|
|
129
|
+
*
|
|
130
|
+
* @type {Vector4}
|
|
131
|
+
*/
|
|
28
132
|
this.scissorValue = new Vector4();
|
|
29
133
|
|
|
134
|
+
/**
|
|
135
|
+
* The active render target.
|
|
136
|
+
*
|
|
137
|
+
* @type {RenderTarget?}
|
|
138
|
+
* @default null
|
|
139
|
+
*/
|
|
140
|
+
this.renderTarget = null;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* The textures of the active render target.
|
|
144
|
+
* `null` when no render target is set.
|
|
145
|
+
*
|
|
146
|
+
* @type {Array<Texture>?}
|
|
147
|
+
* @default null
|
|
148
|
+
*/
|
|
30
149
|
this.textures = null;
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* The depth texture of the active render target.
|
|
153
|
+
* `null` when no render target is set.
|
|
154
|
+
*
|
|
155
|
+
* @type {DepthTexture?}
|
|
156
|
+
* @default null
|
|
157
|
+
*/
|
|
31
158
|
this.depthTexture = null;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* The active cube face.
|
|
162
|
+
*
|
|
163
|
+
* @type {Number}
|
|
164
|
+
* @default 0
|
|
165
|
+
*/
|
|
32
166
|
this.activeCubeFace = 0;
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* The active mipmap level.
|
|
170
|
+
*
|
|
171
|
+
* @type {Number}
|
|
172
|
+
* @default 0
|
|
173
|
+
*/
|
|
174
|
+
this.activeMipmapLevel = 0;
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* The number of MSAA samples. This value is always `1` when
|
|
178
|
+
* MSAA isn't used.
|
|
179
|
+
*
|
|
180
|
+
* @type {Number}
|
|
181
|
+
* @default 1
|
|
182
|
+
*/
|
|
33
183
|
this.sampleCount = 1;
|
|
34
184
|
|
|
185
|
+
/**
|
|
186
|
+
* The active render target's width in physical pixels.
|
|
187
|
+
*
|
|
188
|
+
* @type {Number}
|
|
189
|
+
* @default 0
|
|
190
|
+
*/
|
|
35
191
|
this.width = 0;
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* The active render target's height in physical pixels.
|
|
195
|
+
*
|
|
196
|
+
* @type {Number}
|
|
197
|
+
* @default 0
|
|
198
|
+
*/
|
|
36
199
|
this.height = 0;
|
|
37
200
|
|
|
201
|
+
/**
|
|
202
|
+
* The occlusion query count.
|
|
203
|
+
*
|
|
204
|
+
* @type {Number}
|
|
205
|
+
* @default 0
|
|
206
|
+
*/
|
|
207
|
+
this.occlusionQueryCount = 0;
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* The current clipping context.
|
|
211
|
+
*
|
|
212
|
+
* @type {ClippingContext?}
|
|
213
|
+
* @default null
|
|
214
|
+
*/
|
|
215
|
+
this.clippingContext = null;
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* This flag can be used for type testing.
|
|
219
|
+
*
|
|
220
|
+
* @type {Boolean}
|
|
221
|
+
* @readonly
|
|
222
|
+
* @default true
|
|
223
|
+
*/
|
|
38
224
|
this.isRenderContext = true;
|
|
39
225
|
|
|
40
226
|
}
|
|
41
227
|
|
|
228
|
+
/**
|
|
229
|
+
* Returns the cache key of this render context.
|
|
230
|
+
*
|
|
231
|
+
* @return {Number} The cache key.
|
|
232
|
+
*/
|
|
42
233
|
getCacheKey() {
|
|
43
234
|
|
|
44
235
|
return getCacheKey( this );
|
|
@@ -47,6 +238,14 @@ class RenderContext {
|
|
|
47
238
|
|
|
48
239
|
}
|
|
49
240
|
|
|
241
|
+
/**
|
|
242
|
+
* Computes a cache key for the given render context. This key
|
|
243
|
+
* should identify the render target state so it is possible to
|
|
244
|
+
* configure the correct attachments in the respective backend.
|
|
245
|
+
*
|
|
246
|
+
* @param {RenderContext} renderContext - The render context.
|
|
247
|
+
* @return {Number} The cache key.
|
|
248
|
+
*/
|
|
50
249
|
export function getCacheKey( renderContext ) {
|
|
51
250
|
|
|
52
251
|
const { textures, activeCubeFace } = renderContext;
|