@plastic-software/three 0.167.3 → 0.174.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 +36277 -24023
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46743
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50670
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -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 +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- 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/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- 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 +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- 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 +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -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 +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/points.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -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 +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
|
@@ -3,18 +3,63 @@ import RenderPipeline from './RenderPipeline.js';
|
|
|
3
3
|
import ComputePipeline from './ComputePipeline.js';
|
|
4
4
|
import ProgrammableStage from './ProgrammableStage.js';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* This renderer module manages the pipelines of the renderer.
|
|
8
|
+
*
|
|
9
|
+
* @private
|
|
10
|
+
* @augments DataMap
|
|
11
|
+
*/
|
|
6
12
|
class Pipelines extends DataMap {
|
|
7
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new pipeline management component.
|
|
16
|
+
*
|
|
17
|
+
* @param {Backend} backend - The renderer's backend.
|
|
18
|
+
* @param {Nodes} nodes - Renderer component for managing nodes related logic.
|
|
19
|
+
*/
|
|
8
20
|
constructor( backend, nodes ) {
|
|
9
21
|
|
|
10
22
|
super();
|
|
11
23
|
|
|
24
|
+
/**
|
|
25
|
+
* The renderer's backend.
|
|
26
|
+
*
|
|
27
|
+
* @type {Backend}
|
|
28
|
+
*/
|
|
12
29
|
this.backend = backend;
|
|
13
|
-
this.nodes = nodes;
|
|
14
30
|
|
|
15
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Renderer component for managing nodes related logic.
|
|
33
|
+
*
|
|
34
|
+
* @type {Nodes}
|
|
35
|
+
*/
|
|
36
|
+
this.nodes = nodes;
|
|
16
37
|
|
|
38
|
+
/**
|
|
39
|
+
* A references to the bindings management component.
|
|
40
|
+
* This reference will be set inside the `Bindings`
|
|
41
|
+
* constructor.
|
|
42
|
+
*
|
|
43
|
+
* @type {?Bindings}
|
|
44
|
+
* @default null
|
|
45
|
+
*/
|
|
46
|
+
this.bindings = null;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Internal cache for maintaining pipelines.
|
|
50
|
+
* The key of the map is a cache key, the value the pipeline.
|
|
51
|
+
*
|
|
52
|
+
* @type {Map<string,Pipeline>}
|
|
53
|
+
*/
|
|
17
54
|
this.caches = new Map();
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* This dictionary maintains for each shader stage type (vertex,
|
|
58
|
+
* fragment and compute) the programmable stage objects which
|
|
59
|
+
* represent the actual shader code.
|
|
60
|
+
*
|
|
61
|
+
* @type {Object<string,Map>}
|
|
62
|
+
*/
|
|
18
63
|
this.programs = {
|
|
19
64
|
vertex: new Map(),
|
|
20
65
|
fragment: new Map(),
|
|
@@ -23,6 +68,13 @@ class Pipelines extends DataMap {
|
|
|
23
68
|
|
|
24
69
|
}
|
|
25
70
|
|
|
71
|
+
/**
|
|
72
|
+
* Returns a compute pipeline for the given compute node.
|
|
73
|
+
*
|
|
74
|
+
* @param {Node} computeNode - The compute node.
|
|
75
|
+
* @param {Array<BindGroup>} bindings - The bindings.
|
|
76
|
+
* @return {ComputePipeline} The compute pipeline.
|
|
77
|
+
*/
|
|
26
78
|
getForCompute( computeNode, bindings ) {
|
|
27
79
|
|
|
28
80
|
const { backend } = this;
|
|
@@ -52,7 +104,7 @@ class Pipelines extends DataMap {
|
|
|
52
104
|
|
|
53
105
|
if ( previousPipeline && previousPipeline.computeProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.computeProgram );
|
|
54
106
|
|
|
55
|
-
stageCompute = new ProgrammableStage( nodeBuilderState.computeShader, 'compute', nodeBuilderState.transforms, nodeBuilderState.nodeAttributes );
|
|
107
|
+
stageCompute = new ProgrammableStage( nodeBuilderState.computeShader, 'compute', computeNode.name, nodeBuilderState.transforms, nodeBuilderState.nodeAttributes );
|
|
56
108
|
this.programs.compute.set( nodeBuilderState.computeShader, stageCompute );
|
|
57
109
|
|
|
58
110
|
backend.createProgram( stageCompute );
|
|
@@ -89,6 +141,13 @@ class Pipelines extends DataMap {
|
|
|
89
141
|
|
|
90
142
|
}
|
|
91
143
|
|
|
144
|
+
/**
|
|
145
|
+
* Returns a render pipeline for the given render object.
|
|
146
|
+
*
|
|
147
|
+
* @param {RenderObject} renderObject - The render object.
|
|
148
|
+
* @param {?Array<Promise>} [promises=null] - An array of compilation promises which is only relevant in context of `Renderer.compileAsync()`.
|
|
149
|
+
* @return {RenderPipeline} The render pipeline.
|
|
150
|
+
*/
|
|
92
151
|
getForRender( renderObject, promises = null ) {
|
|
93
152
|
|
|
94
153
|
const { backend } = this;
|
|
@@ -111,6 +170,8 @@ class Pipelines extends DataMap {
|
|
|
111
170
|
|
|
112
171
|
const nodeBuilderState = renderObject.getNodeBuilderState();
|
|
113
172
|
|
|
173
|
+
const name = renderObject.material ? renderObject.material.name : '';
|
|
174
|
+
|
|
114
175
|
// programmable stages
|
|
115
176
|
|
|
116
177
|
let stageVertex = this.programs.vertex.get( nodeBuilderState.vertexShader );
|
|
@@ -119,7 +180,7 @@ class Pipelines extends DataMap {
|
|
|
119
180
|
|
|
120
181
|
if ( previousPipeline && previousPipeline.vertexProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.vertexProgram );
|
|
121
182
|
|
|
122
|
-
stageVertex = new ProgrammableStage( nodeBuilderState.vertexShader, 'vertex' );
|
|
183
|
+
stageVertex = new ProgrammableStage( nodeBuilderState.vertexShader, 'vertex', name );
|
|
123
184
|
this.programs.vertex.set( nodeBuilderState.vertexShader, stageVertex );
|
|
124
185
|
|
|
125
186
|
backend.createProgram( stageVertex );
|
|
@@ -132,7 +193,7 @@ class Pipelines extends DataMap {
|
|
|
132
193
|
|
|
133
194
|
if ( previousPipeline && previousPipeline.fragmentProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.fragmentProgram );
|
|
134
195
|
|
|
135
|
-
stageFragment = new ProgrammableStage( nodeBuilderState.fragmentShader, 'fragment' );
|
|
196
|
+
stageFragment = new ProgrammableStage( nodeBuilderState.fragmentShader, 'fragment', name );
|
|
136
197
|
this.programs.fragment.set( nodeBuilderState.fragmentShader, stageFragment );
|
|
137
198
|
|
|
138
199
|
backend.createProgram( stageFragment );
|
|
@@ -173,6 +234,12 @@ class Pipelines extends DataMap {
|
|
|
173
234
|
|
|
174
235
|
}
|
|
175
236
|
|
|
237
|
+
/**
|
|
238
|
+
* Deletes the pipeline for the given render object.
|
|
239
|
+
*
|
|
240
|
+
* @param {RenderObject} object - The render object.
|
|
241
|
+
* @return {?Object} The deleted dictionary.
|
|
242
|
+
*/
|
|
176
243
|
delete( object ) {
|
|
177
244
|
|
|
178
245
|
const pipeline = this.get( object ).pipeline;
|
|
@@ -209,6 +276,9 @@ class Pipelines extends DataMap {
|
|
|
209
276
|
|
|
210
277
|
}
|
|
211
278
|
|
|
279
|
+
/**
|
|
280
|
+
* Frees internal resources.
|
|
281
|
+
*/
|
|
212
282
|
dispose() {
|
|
213
283
|
|
|
214
284
|
super.dispose();
|
|
@@ -222,12 +292,27 @@ class Pipelines extends DataMap {
|
|
|
222
292
|
|
|
223
293
|
}
|
|
224
294
|
|
|
295
|
+
/**
|
|
296
|
+
* Updates the pipeline for the given render object.
|
|
297
|
+
*
|
|
298
|
+
* @param {RenderObject} renderObject - The render object.
|
|
299
|
+
*/
|
|
225
300
|
updateForRender( renderObject ) {
|
|
226
301
|
|
|
227
302
|
this.getForRender( renderObject );
|
|
228
303
|
|
|
229
304
|
}
|
|
230
305
|
|
|
306
|
+
/**
|
|
307
|
+
* Returns a compute pipeline for the given parameters.
|
|
308
|
+
*
|
|
309
|
+
* @private
|
|
310
|
+
* @param {Node} computeNode - The compute node.
|
|
311
|
+
* @param {ProgrammableStage} stageCompute - The programmable stage representing the compute shader.
|
|
312
|
+
* @param {string} cacheKey - The cache key.
|
|
313
|
+
* @param {Array<BindGroup>} bindings - The bindings.
|
|
314
|
+
* @return {ComputePipeline} The compute pipeline.
|
|
315
|
+
*/
|
|
231
316
|
_getComputePipeline( computeNode, stageCompute, cacheKey, bindings ) {
|
|
232
317
|
|
|
233
318
|
// check for existing pipeline
|
|
@@ -250,6 +335,17 @@ class Pipelines extends DataMap {
|
|
|
250
335
|
|
|
251
336
|
}
|
|
252
337
|
|
|
338
|
+
/**
|
|
339
|
+
* Returns a render pipeline for the given parameters.
|
|
340
|
+
*
|
|
341
|
+
* @private
|
|
342
|
+
* @param {RenderObject} renderObject - The render object.
|
|
343
|
+
* @param {ProgrammableStage} stageVertex - The programmable stage representing the vertex shader.
|
|
344
|
+
* @param {ProgrammableStage} stageFragment - The programmable stage representing the fragment shader.
|
|
345
|
+
* @param {string} cacheKey - The cache key.
|
|
346
|
+
* @param {?Array<Promise>} promises - An array of compilation promises which is only relevant in context of `Renderer.compileAsync()`.
|
|
347
|
+
* @return {ComputePipeline} The compute pipeline.
|
|
348
|
+
*/
|
|
253
349
|
_getRenderPipeline( renderObject, stageVertex, stageFragment, cacheKey, promises ) {
|
|
254
350
|
|
|
255
351
|
// check for existing pipeline
|
|
@@ -266,6 +362,10 @@ class Pipelines extends DataMap {
|
|
|
266
362
|
|
|
267
363
|
renderObject.pipeline = pipeline;
|
|
268
364
|
|
|
365
|
+
// The `promises` array is `null` by default and only set to an empty array when
|
|
366
|
+
// `Renderer.compileAsync()` is used. The next call actually fills the array with
|
|
367
|
+
// pending promises that resolve when the render pipelines are ready for rendering.
|
|
368
|
+
|
|
269
369
|
this.backend.createRenderPipeline( renderObject, promises );
|
|
270
370
|
|
|
271
371
|
}
|
|
@@ -274,24 +374,53 @@ class Pipelines extends DataMap {
|
|
|
274
374
|
|
|
275
375
|
}
|
|
276
376
|
|
|
377
|
+
/**
|
|
378
|
+
* Computes a cache key representing a compute pipeline.
|
|
379
|
+
*
|
|
380
|
+
* @private
|
|
381
|
+
* @param {Node} computeNode - The compute node.
|
|
382
|
+
* @param {ProgrammableStage} stageCompute - The programmable stage representing the compute shader.
|
|
383
|
+
* @return {string} The cache key.
|
|
384
|
+
*/
|
|
277
385
|
_getComputeCacheKey( computeNode, stageCompute ) {
|
|
278
386
|
|
|
279
387
|
return computeNode.id + ',' + stageCompute.id;
|
|
280
388
|
|
|
281
389
|
}
|
|
282
390
|
|
|
391
|
+
/**
|
|
392
|
+
* Computes a cache key representing a render pipeline.
|
|
393
|
+
*
|
|
394
|
+
* @private
|
|
395
|
+
* @param {RenderObject} renderObject - The render object.
|
|
396
|
+
* @param {ProgrammableStage} stageVertex - The programmable stage representing the vertex shader.
|
|
397
|
+
* @param {ProgrammableStage} stageFragment - The programmable stage representing the fragment shader.
|
|
398
|
+
* @return {string} The cache key.
|
|
399
|
+
*/
|
|
283
400
|
_getRenderCacheKey( renderObject, stageVertex, stageFragment ) {
|
|
284
401
|
|
|
285
402
|
return stageVertex.id + ',' + stageFragment.id + ',' + this.backend.getRenderCacheKey( renderObject );
|
|
286
403
|
|
|
287
404
|
}
|
|
288
405
|
|
|
406
|
+
/**
|
|
407
|
+
* Releases the given pipeline.
|
|
408
|
+
*
|
|
409
|
+
* @private
|
|
410
|
+
* @param {Pipeline} pipeline - The pipeline to release.
|
|
411
|
+
*/
|
|
289
412
|
_releasePipeline( pipeline ) {
|
|
290
413
|
|
|
291
414
|
this.caches.delete( pipeline.cacheKey );
|
|
292
415
|
|
|
293
416
|
}
|
|
294
417
|
|
|
418
|
+
/**
|
|
419
|
+
* Releases the shader program.
|
|
420
|
+
*
|
|
421
|
+
* @private
|
|
422
|
+
* @param {Object} program - The shader program to release.
|
|
423
|
+
*/
|
|
295
424
|
_releaseProgram( program ) {
|
|
296
425
|
|
|
297
426
|
const code = program.code;
|
|
@@ -301,6 +430,13 @@ class Pipelines extends DataMap {
|
|
|
301
430
|
|
|
302
431
|
}
|
|
303
432
|
|
|
433
|
+
/**
|
|
434
|
+
* Returns `true` if the compute pipeline for the given compute node requires an update.
|
|
435
|
+
*
|
|
436
|
+
* @private
|
|
437
|
+
* @param {Node} computeNode - The compute node.
|
|
438
|
+
* @return {boolean} Whether the compute pipeline for the given compute node requires an update or not.
|
|
439
|
+
*/
|
|
304
440
|
_needsComputeUpdate( computeNode ) {
|
|
305
441
|
|
|
306
442
|
const data = this.get( computeNode );
|
|
@@ -309,6 +445,13 @@ class Pipelines extends DataMap {
|
|
|
309
445
|
|
|
310
446
|
}
|
|
311
447
|
|
|
448
|
+
/**
|
|
449
|
+
* Returns `true` if the render pipeline for the given render object requires an update.
|
|
450
|
+
*
|
|
451
|
+
* @private
|
|
452
|
+
* @param {RenderObject} renderObject - The render object.
|
|
453
|
+
* @return {boolean} Whether the render object for the given render object requires an update or not.
|
|
454
|
+
*/
|
|
312
455
|
_needsRenderUpdate( renderObject ) {
|
|
313
456
|
|
|
314
457
|
const data = this.get( renderObject );
|
|
@@ -1,26 +1,95 @@
|
|
|
1
|
-
import
|
|
1
|
+
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
2
|
+
import { vec4, renderOutput } from '../../nodes/TSL.js';
|
|
2
3
|
import { LinearSRGBColorSpace, NoToneMapping } from '../../constants.js';
|
|
3
4
|
import QuadMesh from '../../renderers/common/QuadMesh.js';
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
+
*/
|
|
8
18
|
class PostProcessing {
|
|
9
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
|
+
*/
|
|
10
26
|
constructor( renderer, outputNode = vec4( 0, 0, 1, 1 ) ) {
|
|
11
27
|
|
|
28
|
+
/**
|
|
29
|
+
* A reference to the renderer.
|
|
30
|
+
*
|
|
31
|
+
* @type {Renderer}
|
|
32
|
+
*/
|
|
12
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
|
+
*/
|
|
13
42
|
this.outputNode = outputNode;
|
|
14
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
|
+
*/
|
|
15
62
|
this.outputColorTransform = true;
|
|
16
63
|
|
|
64
|
+
/**
|
|
65
|
+
* Must be set to `true` when the output node changes.
|
|
66
|
+
*
|
|
67
|
+
* @type {Node<vec4>}
|
|
68
|
+
*/
|
|
17
69
|
this.needsUpdate = true;
|
|
18
70
|
|
|
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 );
|
|
82
|
+
|
|
19
83
|
}
|
|
20
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
|
+
*/
|
|
21
90
|
render() {
|
|
22
91
|
|
|
23
|
-
this.
|
|
92
|
+
this._update();
|
|
24
93
|
|
|
25
94
|
const renderer = this.renderer;
|
|
26
95
|
|
|
@@ -32,7 +101,12 @@ class PostProcessing {
|
|
|
32
101
|
|
|
33
102
|
//
|
|
34
103
|
|
|
35
|
-
|
|
104
|
+
const currentXR = renderer.xr.enabled;
|
|
105
|
+
renderer.xr.enabled = false;
|
|
106
|
+
|
|
107
|
+
this._quadMesh.render( renderer );
|
|
108
|
+
|
|
109
|
+
renderer.xr.enabled = currentXR;
|
|
36
110
|
|
|
37
111
|
//
|
|
38
112
|
|
|
@@ -41,7 +115,21 @@ class PostProcessing {
|
|
|
41
115
|
|
|
42
116
|
}
|
|
43
117
|
|
|
44
|
-
|
|
118
|
+
/**
|
|
119
|
+
* Frees internal resources.
|
|
120
|
+
*/
|
|
121
|
+
dispose() {
|
|
122
|
+
|
|
123
|
+
this._quadMesh.material.dispose();
|
|
124
|
+
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Updates the state of the module.
|
|
129
|
+
*
|
|
130
|
+
* @private
|
|
131
|
+
*/
|
|
132
|
+
_update() {
|
|
45
133
|
|
|
46
134
|
if ( this.needsUpdate === true ) {
|
|
47
135
|
|
|
@@ -50,8 +138,8 @@ class PostProcessing {
|
|
|
50
138
|
const toneMapping = renderer.toneMapping;
|
|
51
139
|
const outputColorSpace = renderer.outputColorSpace;
|
|
52
140
|
|
|
53
|
-
_quadMesh.material.fragmentNode = this.outputColorTransform === true ? renderOutput( this.outputNode, toneMapping, outputColorSpace ) : this.outputNode.context( { toneMapping, outputColorSpace } );
|
|
54
|
-
_quadMesh.material.needsUpdate = true;
|
|
141
|
+
this._quadMesh.material.fragmentNode = this.outputColorTransform === true ? renderOutput( this.outputNode, toneMapping, outputColorSpace ) : this.outputNode.context( { toneMapping, outputColorSpace } );
|
|
142
|
+
this._quadMesh.material.needsUpdate = true;
|
|
55
143
|
|
|
56
144
|
this.needsUpdate = false;
|
|
57
145
|
|
|
@@ -59,9 +147,17 @@ class PostProcessing {
|
|
|
59
147
|
|
|
60
148
|
}
|
|
61
149
|
|
|
150
|
+
/**
|
|
151
|
+
* When `PostProcessing` is used to apply post processing effects,
|
|
152
|
+
* the application must use this version of `renderAsync()` inside
|
|
153
|
+
* its animation loop (not the one from the renderer).
|
|
154
|
+
*
|
|
155
|
+
* @async
|
|
156
|
+
* @return {Promise} A Promise that resolves when the render has been finished.
|
|
157
|
+
*/
|
|
62
158
|
async renderAsync() {
|
|
63
159
|
|
|
64
|
-
this.
|
|
160
|
+
this._update();
|
|
65
161
|
|
|
66
162
|
const renderer = this.renderer;
|
|
67
163
|
|
|
@@ -73,7 +169,12 @@ class PostProcessing {
|
|
|
73
169
|
|
|
74
170
|
//
|
|
75
171
|
|
|
76
|
-
|
|
172
|
+
const currentXR = renderer.xr.enabled;
|
|
173
|
+
renderer.xr.enabled = false;
|
|
174
|
+
|
|
175
|
+
await this._quadMesh.renderAsync( renderer );
|
|
176
|
+
|
|
177
|
+
renderer.xr.enabled = currentXR;
|
|
77
178
|
|
|
78
179
|
//
|
|
79
180
|
|
|
@@ -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,22 +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
|
+
*/
|
|
74
|
+
this.isQuadMesh = true;
|
|
75
|
+
|
|
37
76
|
}
|
|
38
77
|
|
|
39
|
-
|
|
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 ) {
|
|
40
86
|
|
|
41
87
|
return renderer.renderAsync( this, _camera );
|
|
42
88
|
|
|
43
89
|
}
|
|
44
90
|
|
|
91
|
+
/**
|
|
92
|
+
* Renders the quad mesh
|
|
93
|
+
*
|
|
94
|
+
* @param {Renderer} renderer - The renderer.
|
|
95
|
+
*/
|
|
45
96
|
render( renderer ) {
|
|
46
97
|
|
|
47
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;
|