@plastic-software/three 0.167.4 → 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 +36217 -23964
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46744
- package/build/three.module.min.js +2 -3
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50671
- package/build/three.webgpu.min.js +2 -3
- 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/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
|
@@ -1,18 +1,62 @@
|
|
|
1
|
-
import Node
|
|
2
|
-
import { nodeImmutable, nodeProxy } from '../
|
|
3
|
-
import { cameraNear, cameraFar } from '../accessors/
|
|
4
|
-
import { positionView } from '../accessors/
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
|
+
import { float, log, log2, nodeImmutable, nodeProxy } from '../tsl/TSLBase.js';
|
|
3
|
+
import { cameraNear, cameraFar } from '../accessors/Camera.js';
|
|
4
|
+
import { positionView } from '../accessors/Position.js';
|
|
5
5
|
import { viewportDepthTexture } from './ViewportDepthTextureNode.js';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* This node offers a collection of features in context of the depth logic in the fragment shader.
|
|
9
|
+
* Depending on {@link ViewportDepthNode#scope}, it can be used to define a depth value for the current
|
|
10
|
+
* fragment or for depth evaluation purposes.
|
|
11
|
+
*
|
|
12
|
+
* @augments Node
|
|
13
|
+
*/
|
|
7
14
|
class ViewportDepthNode extends Node {
|
|
8
15
|
|
|
16
|
+
static get type() {
|
|
17
|
+
|
|
18
|
+
return 'ViewportDepthNode';
|
|
19
|
+
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new viewport depth node.
|
|
24
|
+
*
|
|
25
|
+
* @param {('depth'|'depthBase'|'linearDepth')} scope - The node's scope.
|
|
26
|
+
* @param {?Node} [valueNode=null] - The value node.
|
|
27
|
+
*/
|
|
9
28
|
constructor( scope, valueNode = null ) {
|
|
10
29
|
|
|
11
30
|
super( 'float' );
|
|
12
31
|
|
|
32
|
+
/**
|
|
33
|
+
* The node behaves differently depending on which scope is selected.
|
|
34
|
+
*
|
|
35
|
+
* - `ViewportDepthNode.DEPTH_BASE`: Allows to define a value for the current fragment's depth.
|
|
36
|
+
* - `ViewportDepthNode.DEPTH`: Represents the depth value for the current fragment (`valueNode` is ignored).
|
|
37
|
+
* - `ViewportDepthNode.LINEAR_DEPTH`: Represents the linear (orthographic) depth value of the current fragment.
|
|
38
|
+
* If a `valueNode` is set, the scope can be used to convert perspective depth data to linear data.
|
|
39
|
+
*
|
|
40
|
+
* @type {('depth'|'depthBase'|'linearDepth')}
|
|
41
|
+
*/
|
|
13
42
|
this.scope = scope;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Can be used to define a custom depth value.
|
|
46
|
+
* The property is ignored in the `ViewportDepthNode.DEPTH` scope.
|
|
47
|
+
*
|
|
48
|
+
* @type {?Node}
|
|
49
|
+
* @default null
|
|
50
|
+
*/
|
|
14
51
|
this.valueNode = valueNode;
|
|
15
52
|
|
|
53
|
+
/**
|
|
54
|
+
* This flag can be used for type testing.
|
|
55
|
+
*
|
|
56
|
+
* @type {boolean}
|
|
57
|
+
* @readonly
|
|
58
|
+
* @default true
|
|
59
|
+
*/
|
|
16
60
|
this.isViewportDepthNode = true;
|
|
17
61
|
|
|
18
62
|
}
|
|
@@ -21,7 +65,7 @@ class ViewportDepthNode extends Node {
|
|
|
21
65
|
|
|
22
66
|
const { scope } = this;
|
|
23
67
|
|
|
24
|
-
if ( scope === ViewportDepthNode.
|
|
68
|
+
if ( scope === ViewportDepthNode.DEPTH_BASE ) {
|
|
25
69
|
|
|
26
70
|
return builder.getFragDepth();
|
|
27
71
|
|
|
@@ -34,43 +78,43 @@ class ViewportDepthNode extends Node {
|
|
|
34
78
|
setup( { camera } ) {
|
|
35
79
|
|
|
36
80
|
const { scope } = this;
|
|
37
|
-
const
|
|
81
|
+
const value = this.valueNode;
|
|
38
82
|
|
|
39
83
|
let node = null;
|
|
40
84
|
|
|
41
|
-
if ( scope === ViewportDepthNode.
|
|
85
|
+
if ( scope === ViewportDepthNode.DEPTH_BASE ) {
|
|
42
86
|
|
|
43
|
-
if (
|
|
87
|
+
if ( value !== null ) {
|
|
44
88
|
|
|
45
|
-
node = depthBase().assign(
|
|
89
|
+
node = depthBase().assign( value );
|
|
46
90
|
|
|
47
|
-
}
|
|
91
|
+
}
|
|
48
92
|
|
|
49
|
-
|
|
93
|
+
} else if ( scope === ViewportDepthNode.DEPTH ) {
|
|
50
94
|
|
|
51
|
-
|
|
95
|
+
if ( camera.isPerspectiveCamera ) {
|
|
52
96
|
|
|
53
|
-
|
|
97
|
+
node = viewZToPerspectiveDepth( positionView.z, cameraNear, cameraFar );
|
|
54
98
|
|
|
55
|
-
|
|
99
|
+
} else {
|
|
56
100
|
|
|
57
|
-
|
|
101
|
+
node = viewZToOrthographicDepth( positionView.z, cameraNear, cameraFar );
|
|
58
102
|
|
|
59
103
|
}
|
|
60
104
|
|
|
61
105
|
} else if ( scope === ViewportDepthNode.LINEAR_DEPTH ) {
|
|
62
106
|
|
|
63
|
-
if (
|
|
107
|
+
if ( value !== null ) {
|
|
64
108
|
|
|
65
109
|
if ( camera.isPerspectiveCamera ) {
|
|
66
110
|
|
|
67
|
-
const viewZ = perspectiveDepthToViewZ(
|
|
111
|
+
const viewZ = perspectiveDepthToViewZ( value, cameraNear, cameraFar );
|
|
68
112
|
|
|
69
113
|
node = viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );
|
|
70
114
|
|
|
71
115
|
} else {
|
|
72
116
|
|
|
73
|
-
node =
|
|
117
|
+
node = value;
|
|
74
118
|
|
|
75
119
|
}
|
|
76
120
|
|
|
@@ -88,33 +132,163 @@ class ViewportDepthNode extends Node {
|
|
|
88
132
|
|
|
89
133
|
}
|
|
90
134
|
|
|
135
|
+
ViewportDepthNode.DEPTH_BASE = 'depthBase';
|
|
136
|
+
ViewportDepthNode.DEPTH = 'depth';
|
|
137
|
+
ViewportDepthNode.LINEAR_DEPTH = 'linearDepth';
|
|
138
|
+
|
|
139
|
+
export default ViewportDepthNode;
|
|
140
|
+
|
|
91
141
|
// NOTE: viewZ, the z-coordinate in camera space, is negative for points in front of the camera
|
|
92
142
|
|
|
93
|
-
|
|
143
|
+
/**
|
|
144
|
+
* TSL function for converting a viewZ value to an orthographic depth value.
|
|
145
|
+
*
|
|
146
|
+
* @tsl
|
|
147
|
+
* @function
|
|
148
|
+
* @param {Node<float>} viewZ - The viewZ node.
|
|
149
|
+
* @param {Node<float>} near - The camera's near value.
|
|
150
|
+
* @param {Node<float>} far - The camera's far value.
|
|
151
|
+
* @returns {Node<float>}
|
|
152
|
+
*/
|
|
94
153
|
export const viewZToOrthographicDepth = ( viewZ, near, far ) => viewZ.add( near ).div( near.sub( far ) );
|
|
95
154
|
|
|
96
|
-
|
|
155
|
+
/**
|
|
156
|
+
* TSL function for converting an orthographic depth value to a viewZ value.
|
|
157
|
+
*
|
|
158
|
+
* @tsl
|
|
159
|
+
* @function
|
|
160
|
+
* @param {Node<float>} depth - The orthographic depth.
|
|
161
|
+
* @param {Node<float>} near - The camera's near value.
|
|
162
|
+
* @param {Node<float>} far - The camera's far value.
|
|
163
|
+
* @returns {Node<float>}
|
|
164
|
+
*/
|
|
97
165
|
export const orthographicDepthToViewZ = ( depth, near, far ) => near.sub( far ).mul( depth ).sub( near );
|
|
98
166
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
167
|
+
/**
|
|
168
|
+
* TSL function for converting a viewZ value to a perspective depth value.
|
|
169
|
+
*
|
|
170
|
+
* Note: {link https://twitter.com/gonnavis/status/1377183786949959682}.
|
|
171
|
+
*
|
|
172
|
+
* @tsl
|
|
173
|
+
* @function
|
|
174
|
+
* @param {Node<float>} viewZ - The viewZ node.
|
|
175
|
+
* @param {Node<float>} near - The camera's near value.
|
|
176
|
+
* @param {Node<float>} far - The camera's far value.
|
|
177
|
+
* @returns {Node<float>}
|
|
178
|
+
*/
|
|
102
179
|
export const viewZToPerspectiveDepth = ( viewZ, near, far ) => near.add( viewZ ).mul( far ).div( far.sub( near ).mul( viewZ ) );
|
|
103
180
|
|
|
104
|
-
|
|
181
|
+
/**
|
|
182
|
+
* TSL function for converting a perspective depth value to a viewZ value.
|
|
183
|
+
*
|
|
184
|
+
* @tsl
|
|
185
|
+
* @function
|
|
186
|
+
* @param {Node<float>} depth - The perspective depth.
|
|
187
|
+
* @param {Node<float>} near - The camera's near value.
|
|
188
|
+
* @param {Node<float>} far - The camera's far value.
|
|
189
|
+
* @returns {Node<float>}
|
|
190
|
+
*/
|
|
105
191
|
export const perspectiveDepthToViewZ = ( depth, near, far ) => near.mul( far ).div( far.sub( near ).mul( depth ).sub( far ) );
|
|
106
192
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
193
|
+
/**
|
|
194
|
+
* TSL function for converting a viewZ value to a logarithmic depth value.
|
|
195
|
+
*
|
|
196
|
+
* @tsl
|
|
197
|
+
* @function
|
|
198
|
+
* @param {Node<float>} viewZ - The viewZ node.
|
|
199
|
+
* @param {Node<float>} near - The camera's near value.
|
|
200
|
+
* @param {Node<float>} far - The camera's far value.
|
|
201
|
+
* @returns {Node<float>}
|
|
202
|
+
*/
|
|
203
|
+
export const viewZToLogarithmicDepth = ( viewZ, near, far ) => {
|
|
204
|
+
|
|
205
|
+
// NOTE: viewZ must be negative--see explanation at the end of this comment block.
|
|
206
|
+
// The final logarithmic depth formula used here is adapted from one described in an
|
|
207
|
+
// article by Thatcher Ulrich (see http://tulrich.com/geekstuff/log_depth_buffer.txt),
|
|
208
|
+
// which was an improvement upon an earlier formula one described in an
|
|
209
|
+
// Outerra article (https://outerra.blogspot.com/2009/08/logarithmic-z-buffer.html).
|
|
210
|
+
// Ulrich's formula is the following:
|
|
211
|
+
// z = K * log( w / cameraNear ) / log( cameraFar / cameraNear )
|
|
212
|
+
// where K = 2^k - 1, and k is the number of bits in the depth buffer.
|
|
213
|
+
// The Outerra variant ignored the camera near plane (it assumed it was 0) and instead
|
|
214
|
+
// opted for a "C-constant" for resolution adjustment of objects near the camera.
|
|
215
|
+
// Outerra states: "Notice that the 'C' variant doesn’t use a near plane distance, it has it
|
|
216
|
+
// set at 0" (quote from https://outerra.blogspot.com/2012/11/maximizing-depth-buffer-range-and.html).
|
|
217
|
+
// Ulrich's variant has the benefit of constant relative precision over the whole near-far range.
|
|
218
|
+
// It was debated here whether Outerra's "C-constant" or Ulrich's "near plane" variant should
|
|
219
|
+
// be used, and ultimately Ulrich's "near plane" version was chosen.
|
|
220
|
+
// Outerra eventually made another improvement to their original "C-constant" variant,
|
|
221
|
+
// but it still does not incorporate the camera near plane (for this version,
|
|
222
|
+
// see https://outerra.blogspot.com/2013/07/logarithmic-depth-buffer-optimizations.html).
|
|
223
|
+
// Here we make 4 changes to Ulrich's formula:
|
|
224
|
+
// 1. Clamp the camera near plane so we don't divide by 0.
|
|
225
|
+
// 2. Use log2 instead of log to avoid an extra multiply (shaders implement log using log2).
|
|
226
|
+
// 3. Assume K is 1 (K = maximum value in depth buffer; see Ulrich's formula above).
|
|
227
|
+
// 4. To maintain consistency with the functions "viewZToOrthographicDepth" and "viewZToPerspectiveDepth",
|
|
228
|
+
// we modify the formula here to use 'viewZ' instead of 'w'. The other functions expect a negative viewZ,
|
|
229
|
+
// so we do the same here, hence the 'viewZ.negate()' call.
|
|
230
|
+
// For visual representation of this depth curve, see https://www.desmos.com/calculator/uyqk0vex1u
|
|
231
|
+
near = near.max( 1e-6 ).toVar();
|
|
232
|
+
const numerator = log2( viewZ.negate().div( near ) );
|
|
233
|
+
const denominator = log2( far.div( near ) );
|
|
234
|
+
return numerator.div( denominator );
|
|
235
|
+
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* TSL function for converting a logarithmic depth value to a viewZ value.
|
|
240
|
+
*
|
|
241
|
+
* @tsl
|
|
242
|
+
* @function
|
|
243
|
+
* @param {Node<float>} depth - The logarithmic depth.
|
|
244
|
+
* @param {Node<float>} near - The camera's near value.
|
|
245
|
+
* @param {Node<float>} far - The camera's far value.
|
|
246
|
+
* @returns {Node<float>}
|
|
247
|
+
*/
|
|
248
|
+
export const logarithmicDepthToViewZ = ( depth, near, far ) => {
|
|
249
|
+
|
|
250
|
+
// NOTE: we add a 'negate()' call to the return value here to maintain consistency with
|
|
251
|
+
// the functions "orthographicDepthToViewZ" and "perspectiveDepthToViewZ" (they return
|
|
252
|
+
// a negative viewZ).
|
|
253
|
+
const exponent = depth.mul( log( far.div( near ) ) );
|
|
254
|
+
return float( Math.E ).pow( exponent ).mul( near ).negate();
|
|
255
|
+
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* TSL function for defining a value for the current fragment's depth.
|
|
260
|
+
*
|
|
261
|
+
* @tsl
|
|
262
|
+
* @function
|
|
263
|
+
* @param {Node<float>} value - The depth value to set.
|
|
264
|
+
* @returns {ViewportDepthNode<float>}
|
|
265
|
+
*/
|
|
266
|
+
const depthBase = /*@__PURE__*/ nodeProxy( ViewportDepthNode, ViewportDepthNode.DEPTH_BASE );
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* TSL object that represents the depth value for the current fragment.
|
|
270
|
+
*
|
|
271
|
+
* @tsl
|
|
272
|
+
* @type {ViewportDepthNode}
|
|
273
|
+
*/
|
|
274
|
+
export const depth = /*@__PURE__*/ nodeImmutable( ViewportDepthNode, ViewportDepthNode.DEPTH );
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* TSL function for converting a perspective depth value to linear depth.
|
|
278
|
+
*
|
|
279
|
+
* @tsl
|
|
280
|
+
* @function
|
|
281
|
+
* @param {Node<float>} value - The perspective depth.
|
|
282
|
+
* @returns {ViewportDepthNode<float>}
|
|
283
|
+
*/
|
|
284
|
+
export const linearDepth = /*@__PURE__*/ nodeProxy( ViewportDepthNode, ViewportDepthNode.LINEAR_DEPTH );
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* TSL object that represents the linear (orthographic) depth value of the current fragment
|
|
288
|
+
*
|
|
289
|
+
* @tsl
|
|
290
|
+
* @type {ViewportDepthNode}
|
|
291
|
+
*/
|
|
292
|
+
export const viewportLinearDepth = /*@__PURE__*/ linearDepth( viewportDepthTexture() );
|
|
117
293
|
|
|
118
294
|
depth.assign = ( value ) => depthBase( value );
|
|
119
|
-
|
|
120
|
-
addNodeClass( 'ViewportDepthNode', ViewportDepthNode );
|
|
@@ -1,15 +1,33 @@
|
|
|
1
1
|
import ViewportTextureNode from './ViewportTextureNode.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { viewportTopLeft } from './ViewportNode.js';
|
|
2
|
+
import { nodeProxy } from '../tsl/TSLBase.js';
|
|
3
|
+
import { screenUV } from './ScreenNode.js';
|
|
5
4
|
|
|
6
5
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
7
6
|
|
|
8
7
|
let sharedDepthbuffer = null;
|
|
9
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Represents the depth of the current viewport as a texture. This module
|
|
11
|
+
* can be used in combination with viewport texture to achieve effects
|
|
12
|
+
* that require depth evaluation.
|
|
13
|
+
*
|
|
14
|
+
* @augments ViewportTextureNode
|
|
15
|
+
*/
|
|
10
16
|
class ViewportDepthTextureNode extends ViewportTextureNode {
|
|
11
17
|
|
|
12
|
-
|
|
18
|
+
static get type() {
|
|
19
|
+
|
|
20
|
+
return 'ViewportDepthTextureNode';
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Constructs a new viewport depth texture node.
|
|
26
|
+
*
|
|
27
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
28
|
+
* @param {?Node} [levelNode=null] - The level node.
|
|
29
|
+
*/
|
|
30
|
+
constructor( uvNode = screenUV, levelNode = null ) {
|
|
13
31
|
|
|
14
32
|
if ( sharedDepthbuffer === null ) {
|
|
15
33
|
|
|
@@ -25,8 +43,13 @@ class ViewportDepthTextureNode extends ViewportTextureNode {
|
|
|
25
43
|
|
|
26
44
|
export default ViewportDepthTextureNode;
|
|
27
45
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
46
|
+
/**
|
|
47
|
+
* TSL function for a viewport depth texture node.
|
|
48
|
+
*
|
|
49
|
+
* @tsl
|
|
50
|
+
* @function
|
|
51
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
52
|
+
* @param {?Node} [levelNode=null] - The level node.
|
|
53
|
+
* @returns {ViewportDepthTextureNode}
|
|
54
|
+
*/
|
|
55
|
+
export const viewportDepthTexture = /*@__PURE__*/ nodeProxy( ViewportDepthTextureNode );
|
|
@@ -1,15 +1,33 @@
|
|
|
1
1
|
import ViewportTextureNode from './ViewportTextureNode.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { viewportTopLeft } from './ViewportNode.js';
|
|
2
|
+
import { nodeProxy } from '../tsl/TSLBase.js';
|
|
3
|
+
import { screenUV } from './ScreenNode.js';
|
|
5
4
|
|
|
6
5
|
import { FramebufferTexture } from '../../textures/FramebufferTexture.js';
|
|
7
6
|
|
|
8
7
|
let _sharedFramebuffer = null;
|
|
9
8
|
|
|
9
|
+
/**
|
|
10
|
+
* `ViewportTextureNode` creates an internal texture for each node instance. This module
|
|
11
|
+
* shares a texture across all instances of `ViewportSharedTextureNode`. It should
|
|
12
|
+
* be the first choice when using data of the default/screen framebuffer for performance reasons.
|
|
13
|
+
*
|
|
14
|
+
* @augments ViewportTextureNode
|
|
15
|
+
*/
|
|
10
16
|
class ViewportSharedTextureNode extends ViewportTextureNode {
|
|
11
17
|
|
|
12
|
-
|
|
18
|
+
static get type() {
|
|
19
|
+
|
|
20
|
+
return 'ViewportSharedTextureNode';
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Constructs a new viewport shared texture node.
|
|
26
|
+
*
|
|
27
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
28
|
+
* @param {?Node} [levelNode=null] - The level node.
|
|
29
|
+
*/
|
|
30
|
+
constructor( uvNode = screenUV, levelNode = null ) {
|
|
13
31
|
|
|
14
32
|
if ( _sharedFramebuffer === null ) {
|
|
15
33
|
|
|
@@ -31,8 +49,13 @@ class ViewportSharedTextureNode extends ViewportTextureNode {
|
|
|
31
49
|
|
|
32
50
|
export default ViewportSharedTextureNode;
|
|
33
51
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
52
|
+
/**
|
|
53
|
+
* TSL function for creating a shared viewport texture node.
|
|
54
|
+
*
|
|
55
|
+
* @tsl
|
|
56
|
+
* @function
|
|
57
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
58
|
+
* @param {?Node} [levelNode=null] - The level node.
|
|
59
|
+
* @returns {ViewportSharedTextureNode}
|
|
60
|
+
*/
|
|
61
|
+
export const viewportSharedTexture = /*@__PURE__*/ nodeProxy( ViewportSharedTextureNode );
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import TextureNode from '../accessors/TextureNode.js';
|
|
2
2
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { viewportTopLeft } from './ViewportNode.js';
|
|
3
|
+
import { nodeProxy } from '../tsl/TSLBase.js';
|
|
4
|
+
import { screenUV } from './ScreenNode.js';
|
|
6
5
|
|
|
7
6
|
import { Vector2 } from '../../math/Vector2.js';
|
|
8
7
|
import { FramebufferTexture } from '../../textures/FramebufferTexture.js';
|
|
@@ -10,9 +9,31 @@ import { LinearMipmapLinearFilter } from '../../constants.js';
|
|
|
10
9
|
|
|
11
10
|
const _size = /*@__PURE__*/ new Vector2();
|
|
12
11
|
|
|
12
|
+
/**
|
|
13
|
+
* A special type of texture node which represents the data of the current viewport
|
|
14
|
+
* as a texture. The module extracts data from the current bound framebuffer with
|
|
15
|
+
* a copy operation so no extra render pass is required to produce the texture data
|
|
16
|
+
* (which is good for performance). `ViewportTextureNode` can be used as an input for a
|
|
17
|
+
* variety of effects like refractive or transmissive materials.
|
|
18
|
+
*
|
|
19
|
+
* @augments TextureNode
|
|
20
|
+
*/
|
|
13
21
|
class ViewportTextureNode extends TextureNode {
|
|
14
22
|
|
|
15
|
-
|
|
23
|
+
static get type() {
|
|
24
|
+
|
|
25
|
+
return 'ViewportTextureNode';
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Constructs a new viewport texture node.
|
|
31
|
+
*
|
|
32
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
33
|
+
* @param {?Node} [levelNode=null] - The level node.
|
|
34
|
+
* @param {?Texture} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
|
|
35
|
+
*/
|
|
36
|
+
constructor( uvNode = screenUV, levelNode = null, framebufferTexture = null ) {
|
|
16
37
|
|
|
17
38
|
if ( framebufferTexture === null ) {
|
|
18
39
|
|
|
@@ -23,10 +44,30 @@ class ViewportTextureNode extends TextureNode {
|
|
|
23
44
|
|
|
24
45
|
super( framebufferTexture, uvNode, levelNode );
|
|
25
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Whether to generate mipmaps or not.
|
|
49
|
+
*
|
|
50
|
+
* @type {boolean}
|
|
51
|
+
* @default false
|
|
52
|
+
*/
|
|
26
53
|
this.generateMipmaps = false;
|
|
27
54
|
|
|
55
|
+
/**
|
|
56
|
+
* This flag can be used for type testing.
|
|
57
|
+
*
|
|
58
|
+
* @type {boolean}
|
|
59
|
+
* @readonly
|
|
60
|
+
* @default true
|
|
61
|
+
*/
|
|
28
62
|
this.isOutputTextureNode = true;
|
|
29
63
|
|
|
64
|
+
/**
|
|
65
|
+
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders the
|
|
66
|
+
* scene once per frame in its {@link ViewportTextureNode#updateBefore} method.
|
|
67
|
+
*
|
|
68
|
+
* @type {string}
|
|
69
|
+
* @default 'frame'
|
|
70
|
+
*/
|
|
30
71
|
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
31
72
|
|
|
32
73
|
}
|
|
@@ -72,10 +113,26 @@ class ViewportTextureNode extends TextureNode {
|
|
|
72
113
|
|
|
73
114
|
export default ViewportTextureNode;
|
|
74
115
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
116
|
+
/**
|
|
117
|
+
* TSL function for creating a viewport texture node.
|
|
118
|
+
*
|
|
119
|
+
* @tsl
|
|
120
|
+
* @function
|
|
121
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
122
|
+
* @param {?Node} [levelNode=null] - The level node.
|
|
123
|
+
* @param {?Texture} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
|
|
124
|
+
* @returns {ViewportTextureNode}
|
|
125
|
+
*/
|
|
126
|
+
export const viewportTexture = /*@__PURE__*/ nodeProxy( ViewportTextureNode );
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* TSL function for creating a viewport texture node with enabled mipmap generation.
|
|
130
|
+
*
|
|
131
|
+
* @tsl
|
|
132
|
+
* @function
|
|
133
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
134
|
+
* @param {?Node} [levelNode=null] - The level node.
|
|
135
|
+
* @param {?Texture} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
|
|
136
|
+
* @returns {ViewportTextureNode}
|
|
137
|
+
*/
|
|
138
|
+
export const viewportMipTexture = /*@__PURE__*/ nodeProxy( ViewportTextureNode, null, null, { generateMipmaps: true } );
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { positionView } from '../accessors/Position.js';
|
|
2
|
+
import { smoothstep } from '../math/MathNode.js';
|
|
3
|
+
import { Fn, output, vec4 } from '../tsl/TSLBase.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Returns a node that represents the `z` coordinate in view space
|
|
7
|
+
* for the current fragment. It's a different representation of the
|
|
8
|
+
* default depth value.
|
|
9
|
+
*
|
|
10
|
+
* This value can be part of a computation that defines how the fog
|
|
11
|
+
* density increases when moving away from the camera.
|
|
12
|
+
*
|
|
13
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
14
|
+
* @return {Node} The viewZ node.
|
|
15
|
+
*/
|
|
16
|
+
function getViewZNode( builder ) {
|
|
17
|
+
|
|
18
|
+
let viewZ;
|
|
19
|
+
|
|
20
|
+
const getViewZ = builder.context.getViewZ;
|
|
21
|
+
|
|
22
|
+
if ( getViewZ !== undefined ) {
|
|
23
|
+
|
|
24
|
+
viewZ = getViewZ( this );
|
|
25
|
+
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return ( viewZ || positionView.z ).negate();
|
|
29
|
+
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Constructs a new range factor node.
|
|
34
|
+
*
|
|
35
|
+
* @tsl
|
|
36
|
+
* @function
|
|
37
|
+
* @param {Node} near - Defines the near value.
|
|
38
|
+
* @param {Node} far - Defines the far value.
|
|
39
|
+
*/
|
|
40
|
+
export const rangeFogFactor = Fn( ( [ near, far ], builder ) => {
|
|
41
|
+
|
|
42
|
+
const viewZ = getViewZNode( builder );
|
|
43
|
+
|
|
44
|
+
return smoothstep( near, far, viewZ );
|
|
45
|
+
|
|
46
|
+
} );
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Represents an exponential squared fog. This type of fog gives
|
|
50
|
+
* a clear view near the camera and a faster than exponentially
|
|
51
|
+
* densening fog farther from the camera.
|
|
52
|
+
*
|
|
53
|
+
* @tsl
|
|
54
|
+
* @function
|
|
55
|
+
* @param {Node} density - Defines the fog density.
|
|
56
|
+
*/
|
|
57
|
+
export const densityFogFactor = Fn( ( [ density ], builder ) => {
|
|
58
|
+
|
|
59
|
+
const viewZ = getViewZNode( builder );
|
|
60
|
+
|
|
61
|
+
return density.mul( density, viewZ, viewZ ).negate().exp().oneMinus();
|
|
62
|
+
|
|
63
|
+
} );
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* This class can be used to configure a fog for the scene.
|
|
67
|
+
* Nodes of this type are assigned to `Scene.fogNode`.
|
|
68
|
+
*
|
|
69
|
+
* @tsl
|
|
70
|
+
* @function
|
|
71
|
+
* @param {Node} color - Defines the color of the fog.
|
|
72
|
+
* @param {Node} factor - Defines how the fog is factored in the scene.
|
|
73
|
+
*/
|
|
74
|
+
export const fog = Fn( ( [ color, factor ] ) => {
|
|
75
|
+
|
|
76
|
+
return vec4( factor.toFloat().mix( output.rgb, color.toVec3() ), output.a );
|
|
77
|
+
|
|
78
|
+
} );
|
|
79
|
+
|
|
80
|
+
// Deprecated
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* @tsl
|
|
84
|
+
* @function
|
|
85
|
+
* @deprecated since r171. Use `fog( color, rangeFogFactor( near, far ) )` instead.
|
|
86
|
+
*
|
|
87
|
+
* @param {Node} color
|
|
88
|
+
* @param {Node} near
|
|
89
|
+
* @param {Node} far
|
|
90
|
+
* @returns {Function}
|
|
91
|
+
*/
|
|
92
|
+
export function rangeFog( color, near, far ) { // @deprecated, r171
|
|
93
|
+
|
|
94
|
+
console.warn( 'THREE.TSL: "rangeFog( color, near, far )" is deprecated. Use "fog( color, rangeFogFactor( near, far ) )" instead.' );
|
|
95
|
+
return fog( color, rangeFogFactor( near, far ) );
|
|
96
|
+
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @tsl
|
|
101
|
+
* @function
|
|
102
|
+
* @deprecated since r171. Use `fog( color, densityFogFactor( density ) )` instead.
|
|
103
|
+
*
|
|
104
|
+
* @param {Node} color
|
|
105
|
+
* @param {Node} density
|
|
106
|
+
* @returns {Function}
|
|
107
|
+
*/
|
|
108
|
+
export function densityFog( color, density ) { // @deprecated, r171
|
|
109
|
+
|
|
110
|
+
console.warn( 'THREE.TSL: "densityFog( color, density )" is deprecated. Use "fog( color, densityFogFactor( density ) )" instead.' );
|
|
111
|
+
return fog( color, densityFogFactor( density ) );
|
|
112
|
+
|
|
113
|
+
}
|
|
@@ -3,13 +3,13 @@ import V_GGX_SmithCorrelated from './V_GGX_SmithCorrelated.js';
|
|
|
3
3
|
import V_GGX_SmithCorrelated_Anisotropic from './V_GGX_SmithCorrelated_Anisotropic.js';
|
|
4
4
|
import D_GGX from './D_GGX.js';
|
|
5
5
|
import D_GGX_Anisotropic from './D_GGX_Anisotropic.js';
|
|
6
|
-
import { transformedNormalView } from '../../accessors/
|
|
7
|
-
import { positionViewDirection } from '../../accessors/
|
|
6
|
+
import { transformedNormalView } from '../../accessors/Normal.js';
|
|
7
|
+
import { positionViewDirection } from '../../accessors/Position.js';
|
|
8
8
|
import { iridescence, alphaT, anisotropyT, anisotropyB } from '../../core/PropertyNode.js';
|
|
9
|
-
import { Fn, defined } from '../../
|
|
9
|
+
import { Fn, defined } from '../../tsl/TSLBase.js';
|
|
10
10
|
|
|
11
11
|
// GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility
|
|
12
|
-
const BRDF_GGX = Fn( ( inputs ) => {
|
|
12
|
+
const BRDF_GGX = /*@__PURE__*/ Fn( ( inputs ) => {
|
|
13
13
|
|
|
14
14
|
const { lightDirection, f0, f90, roughness, f, USE_IRIDESCENCE, USE_ANISOTROPY } = inputs;
|
|
15
15
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Fn } from '../../
|
|
1
|
+
import { Fn } from '../../tsl/TSLBase.js';
|
|
2
2
|
|
|
3
|
-
const BRDF_Lambert = Fn( ( inputs ) => {
|
|
3
|
+
const BRDF_Lambert = /*@__PURE__*/ Fn( ( inputs ) => {
|
|
4
4
|
|
|
5
5
|
return inputs.diffuseColor.mul( 1 / Math.PI ); // punctual light
|
|
6
6
|
|