super-three 0.171.0 → 0.173.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +594 -427
- package/build/three.core.js +515 -81
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +79 -350
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +20 -7
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +29362 -3427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +29361 -3427
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +9 -7
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +48 -37
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +34 -29
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +22 -4
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -2
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
- package/examples/jsm/misc/Volume.js +27 -17
- package/examples/jsm/misc/VolumeSlice.js +7 -5
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +29 -24
- package/examples/jsm/physics/JoltPhysics.js +7 -7
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +5 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +2 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +4 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +18 -5
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/ArrayCamera.js +1 -0
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +6 -1
- package/src/core/BufferAttribute.js +4 -0
- package/src/core/EventDispatcher.js +8 -6
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/ImageUtils.js +1 -11
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +476 -23
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +121 -10
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
- package/src/nodes/Nodes.js +5 -6
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +47 -6
- package/src/nodes/accessors/BatchNode.js +42 -6
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +113 -3
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +306 -12
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +65 -5
- package/src/nodes/accessors/Object3DNode.js +101 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +56 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
- package/src/nodes/accessors/ReferenceNode.js +201 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +209 -8
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +38 -2
- package/src/nodes/accessors/Texture3DNode.js +91 -7
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +316 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +231 -25
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +80 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/ArrayNode.js +125 -0
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +350 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1166 -26
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +152 -1
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +51 -10
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +98 -1
- package/src/nodes/core/StructNode.js +121 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +105 -6
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +146 -7
- package/src/nodes/core/VaryingNode.js +100 -3
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BlendModes.js +88 -1
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +300 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +96 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +110 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +241 -35
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +78 -4
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +627 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +329 -18
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +3 -2
- package/src/nodes/tsl/TSLCore.js +22 -2
- package/src/nodes/utils/ArrayElementNode.js +39 -3
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +82 -2
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +54 -0
- package/src/nodes/utils/Timer.js +40 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +2 -3
- package/src/objects/ClippingGroup.js +49 -0
- package/src/objects/Line.js +6 -6
- package/src/renderers/WebGLRenderer.js +30 -4
- package/src/renderers/common/Animation.js +85 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +502 -44
- package/src/renderers/common/Background.js +48 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +108 -15
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +91 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +34 -6
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +99 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +201 -2
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +40 -3
- package/src/renderers/common/RenderObject.js +400 -17
- package/src/renderers/common/RenderObjects.js +103 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1170 -86
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +120 -0
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +97 -7
- package/src/renderers/common/TimestampQueryPool.js +39 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +141 -2
- package/src/renderers/common/XRManager.js +1193 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +76 -10
- package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +243 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +352 -78
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl/WebGLBackground.js +4 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +578 -164
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
- package/src/renderers/webgpu/WebGPURenderer.js +36 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +19 -2
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/src/textures/VideoFrameTexture.js +35 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/objects/InstancedPoints.js +0 -19
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -4,6 +4,15 @@ import { cameraNear, cameraFar } from '../accessors/Camera.js';
|
|
|
4
4
|
import { positionView } from '../accessors/Position.js';
|
|
5
5
|
import { viewportDepthTexture } from './ViewportDepthTextureNode.js';
|
|
6
6
|
|
|
7
|
+
/** @module ViewportDepthNode **/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* This node offers a collection of features in context of the depth logic in the fragment shader.
|
|
11
|
+
* Depending on {@link ViewportDepthNode#scope}, it can be used to define a depth value for the current
|
|
12
|
+
* fragment or for depth evaluation purposes.
|
|
13
|
+
*
|
|
14
|
+
* @augments Node
|
|
15
|
+
*/
|
|
7
16
|
class ViewportDepthNode extends Node {
|
|
8
17
|
|
|
9
18
|
static get type() {
|
|
@@ -12,13 +21,44 @@ class ViewportDepthNode extends Node {
|
|
|
12
21
|
|
|
13
22
|
}
|
|
14
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Constructs a new viewport depth node.
|
|
26
|
+
*
|
|
27
|
+
* @param {('depth'|'depthBase'|'linearDepth')} scope - The node's scope.
|
|
28
|
+
* @param {Node?} [valueNode=null] - The value node.
|
|
29
|
+
*/
|
|
15
30
|
constructor( scope, valueNode = null ) {
|
|
16
31
|
|
|
17
32
|
super( 'float' );
|
|
18
33
|
|
|
34
|
+
/**
|
|
35
|
+
* The node behaves differently depending on which scope is selected.
|
|
36
|
+
*
|
|
37
|
+
* - `ViewportDepthNode.DEPTH_BASE`: Allows to define a value for the current fragment's depth.
|
|
38
|
+
* - `ViewportDepthNode.DEPTH`: Represents the depth value for the current fragment (`valueNode` is ignored).
|
|
39
|
+
* - `ViewportDepthNode.LINEAR_DEPTH`: Represents the linear (orthographic) depth value of the current fragment.
|
|
40
|
+
* If a `valueNode` is set, the scope can be used to convert perspective depth data to linear data.
|
|
41
|
+
*
|
|
42
|
+
* @type {('depth'|'depthBase'|'linearDepth')}
|
|
43
|
+
*/
|
|
19
44
|
this.scope = scope;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Can be used to define a custom depth value.
|
|
48
|
+
* The property is ignored in the `ViewportDepthNode.DEPTH` scope.
|
|
49
|
+
*
|
|
50
|
+
* @type {Node?}
|
|
51
|
+
* @default null
|
|
52
|
+
*/
|
|
20
53
|
this.valueNode = valueNode;
|
|
21
54
|
|
|
55
|
+
/**
|
|
56
|
+
* This flag can be used for type testing.
|
|
57
|
+
*
|
|
58
|
+
* @type {Boolean}
|
|
59
|
+
* @readonly
|
|
60
|
+
* @default true
|
|
61
|
+
*/
|
|
22
62
|
this.isViewportDepthNode = true;
|
|
23
63
|
|
|
24
64
|
}
|
|
@@ -102,21 +142,61 @@ export default ViewportDepthNode;
|
|
|
102
142
|
|
|
103
143
|
// NOTE: viewZ, the z-coordinate in camera space, is negative for points in front of the camera
|
|
104
144
|
|
|
105
|
-
|
|
145
|
+
/**
|
|
146
|
+
* TSL function for converting a viewZ value to an orthographic depth value.
|
|
147
|
+
*
|
|
148
|
+
* @function
|
|
149
|
+
* @param {Node<float>} viewZ - The viewZ node.
|
|
150
|
+
* @param {Node<float>} near - The camera's near value.
|
|
151
|
+
* @param {Node<float>} far - The camera's far value.
|
|
152
|
+
* @returns {Node<float>}
|
|
153
|
+
*/
|
|
106
154
|
export const viewZToOrthographicDepth = ( viewZ, near, far ) => viewZ.add( near ).div( near.sub( far ) );
|
|
107
155
|
|
|
108
|
-
|
|
156
|
+
/**
|
|
157
|
+
* TSL function for converting an orthographic depth value to a viewZ value.
|
|
158
|
+
*
|
|
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
|
+
*/
|
|
109
165
|
export const orthographicDepthToViewZ = ( depth, near, far ) => near.sub( far ).mul( depth ).sub( near );
|
|
110
166
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
+
* @function
|
|
173
|
+
* @param {Node<float>} viewZ - The viewZ node.
|
|
174
|
+
* @param {Node<float>} near - The camera's near value.
|
|
175
|
+
* @param {Node<float>} far - The camera's far value.
|
|
176
|
+
* @returns {Node<float>}
|
|
177
|
+
*/
|
|
114
178
|
export const viewZToPerspectiveDepth = ( viewZ, near, far ) => near.add( viewZ ).mul( far ).div( far.sub( near ).mul( viewZ ) );
|
|
115
179
|
|
|
116
|
-
|
|
180
|
+
/**
|
|
181
|
+
* TSL function for converting a perspective depth value to a viewZ value.
|
|
182
|
+
*
|
|
183
|
+
* @function
|
|
184
|
+
* @param {Node<float>} depth - The perspective depth.
|
|
185
|
+
* @param {Node<float>} near - The camera's near value.
|
|
186
|
+
* @param {Node<float>} far - The camera's far value.
|
|
187
|
+
* @returns {Node<float>}
|
|
188
|
+
*/
|
|
117
189
|
export const perspectiveDepthToViewZ = ( depth, near, far ) => near.mul( far ).div( far.sub( near ).mul( depth ).sub( far ) );
|
|
118
190
|
|
|
119
|
-
|
|
191
|
+
/**
|
|
192
|
+
* TSL function for converting a viewZ value to a logarithmic depth value.
|
|
193
|
+
*
|
|
194
|
+
* @function
|
|
195
|
+
* @param {Node<float>} viewZ - The viewZ node.
|
|
196
|
+
* @param {Node<float>} near - The camera's near value.
|
|
197
|
+
* @param {Node<float>} far - The camera's far value.
|
|
198
|
+
* @returns {Node<float>}
|
|
199
|
+
*/
|
|
120
200
|
export const viewZToLogarithmicDepth = ( viewZ, near, far ) => {
|
|
121
201
|
|
|
122
202
|
// NOTE: viewZ must be negative--see explanation at the end of this comment block.
|
|
@@ -152,7 +232,15 @@ export const viewZToLogarithmicDepth = ( viewZ, near, far ) => {
|
|
|
152
232
|
|
|
153
233
|
};
|
|
154
234
|
|
|
155
|
-
|
|
235
|
+
/**
|
|
236
|
+
* TSL function for converting a logarithmic depth value to a viewZ value.
|
|
237
|
+
*
|
|
238
|
+
* @function
|
|
239
|
+
* @param {Node<float>} depth - The logarithmic depth.
|
|
240
|
+
* @param {Node<float>} near - The camera's near value.
|
|
241
|
+
* @param {Node<float>} far - The camera's far value.
|
|
242
|
+
* @returns {Node<float>}
|
|
243
|
+
*/
|
|
156
244
|
export const logarithmicDepthToViewZ = ( depth, near, far ) => {
|
|
157
245
|
|
|
158
246
|
// NOTE: we add a 'negate()' call to the return value here to maintain consistency with
|
|
@@ -163,10 +251,36 @@ export const logarithmicDepthToViewZ = ( depth, near, far ) => {
|
|
|
163
251
|
|
|
164
252
|
};
|
|
165
253
|
|
|
254
|
+
/**
|
|
255
|
+
* TSL function for defining a value for the current fragment's depth.
|
|
256
|
+
*
|
|
257
|
+
* @function
|
|
258
|
+
* @param {Node<float>} value - The depth value to set.
|
|
259
|
+
* @returns {ViewportDepthNode<float>}
|
|
260
|
+
*/
|
|
166
261
|
const depthBase = /*@__PURE__*/ nodeProxy( ViewportDepthNode, ViewportDepthNode.DEPTH_BASE );
|
|
167
262
|
|
|
263
|
+
/**
|
|
264
|
+
* TSL object that represents the depth value for the current fragment.
|
|
265
|
+
*
|
|
266
|
+
* @type {ViewportDepthNode}
|
|
267
|
+
*/
|
|
168
268
|
export const depth = /*@__PURE__*/ nodeImmutable( ViewportDepthNode, ViewportDepthNode.DEPTH );
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* TSL function for converting a perspective depth value to linear depth.
|
|
272
|
+
*
|
|
273
|
+
* @function
|
|
274
|
+
* @param {Node<float>} value - The perspective depth.
|
|
275
|
+
* @returns {ViewportDepthNode<float>}
|
|
276
|
+
*/
|
|
169
277
|
export const linearDepth = /*@__PURE__*/ nodeProxy( ViewportDepthNode, ViewportDepthNode.LINEAR_DEPTH );
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* TSL object that represents the linear (orthographic) depth value of the current fragment
|
|
281
|
+
*
|
|
282
|
+
* @type {ViewportDepthNode}
|
|
283
|
+
*/
|
|
170
284
|
export const viewportLinearDepth = /*@__PURE__*/ linearDepth( viewportDepthTexture() );
|
|
171
285
|
|
|
172
286
|
depth.assign = ( value ) => depthBase( value );
|
|
@@ -4,8 +4,17 @@ import { screenUV } from './ScreenNode.js';
|
|
|
4
4
|
|
|
5
5
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
6
6
|
|
|
7
|
+
/** @module ViewportDepthTextureNode **/
|
|
8
|
+
|
|
7
9
|
let sharedDepthbuffer = null;
|
|
8
10
|
|
|
11
|
+
/**
|
|
12
|
+
* Represents the depth of the current viewport as a texture. This module
|
|
13
|
+
* can be used in combination with viewport texture to achieve effects
|
|
14
|
+
* that require depth evaluation.
|
|
15
|
+
*
|
|
16
|
+
* @augments module:ViewportTextureNode~ViewportTextureNode
|
|
17
|
+
*/
|
|
9
18
|
class ViewportDepthTextureNode extends ViewportTextureNode {
|
|
10
19
|
|
|
11
20
|
static get type() {
|
|
@@ -14,6 +23,12 @@ class ViewportDepthTextureNode extends ViewportTextureNode {
|
|
|
14
23
|
|
|
15
24
|
}
|
|
16
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Constructs a new viewport depth texture node.
|
|
28
|
+
*
|
|
29
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
30
|
+
* @param {Node?} [levelNode=null] - The level node.
|
|
31
|
+
*/
|
|
17
32
|
constructor( uvNode = screenUV, levelNode = null ) {
|
|
18
33
|
|
|
19
34
|
if ( sharedDepthbuffer === null ) {
|
|
@@ -30,4 +45,12 @@ class ViewportDepthTextureNode extends ViewportTextureNode {
|
|
|
30
45
|
|
|
31
46
|
export default ViewportDepthTextureNode;
|
|
32
47
|
|
|
48
|
+
/**
|
|
49
|
+
* TSL function for a viewport depth texture node.
|
|
50
|
+
*
|
|
51
|
+
* @function
|
|
52
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
53
|
+
* @param {Node?} [levelNode=null] - The level node.
|
|
54
|
+
* @returns {ViewportDepthTextureNode}
|
|
55
|
+
*/
|
|
33
56
|
export const viewportDepthTexture = /*@__PURE__*/ nodeProxy( ViewportDepthTextureNode );
|
|
@@ -4,8 +4,17 @@ import { screenUV } from './ScreenNode.js';
|
|
|
4
4
|
|
|
5
5
|
import { FramebufferTexture } from '../../textures/FramebufferTexture.js';
|
|
6
6
|
|
|
7
|
+
/** @module ViewportSharedTextureNode **/
|
|
8
|
+
|
|
7
9
|
let _sharedFramebuffer = null;
|
|
8
10
|
|
|
11
|
+
/**
|
|
12
|
+
* `ViewportTextureNode` creates an internal texture for each node instance. This module
|
|
13
|
+
* shares a texture across all instances of `ViewportSharedTextureNode`. It should
|
|
14
|
+
* be the first choice when using data of the default/screen framebuffer for performance reasons.
|
|
15
|
+
*
|
|
16
|
+
* @augments module:ViewportTextureNode~ViewportTextureNode
|
|
17
|
+
*/
|
|
9
18
|
class ViewportSharedTextureNode extends ViewportTextureNode {
|
|
10
19
|
|
|
11
20
|
static get type() {
|
|
@@ -14,6 +23,12 @@ class ViewportSharedTextureNode extends ViewportTextureNode {
|
|
|
14
23
|
|
|
15
24
|
}
|
|
16
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Constructs a new viewport shared texture node.
|
|
28
|
+
*
|
|
29
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
30
|
+
* @param {Node?} [levelNode=null] - The level node.
|
|
31
|
+
*/
|
|
17
32
|
constructor( uvNode = screenUV, levelNode = null ) {
|
|
18
33
|
|
|
19
34
|
if ( _sharedFramebuffer === null ) {
|
|
@@ -36,4 +51,12 @@ class ViewportSharedTextureNode extends ViewportTextureNode {
|
|
|
36
51
|
|
|
37
52
|
export default ViewportSharedTextureNode;
|
|
38
53
|
|
|
54
|
+
/**
|
|
55
|
+
* TSL function for creating a shared viewport texture node.
|
|
56
|
+
*
|
|
57
|
+
* @function
|
|
58
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
59
|
+
* @param {Node?} [levelNode=null] - The level node.
|
|
60
|
+
* @returns {ViewportSharedTextureNode}
|
|
61
|
+
*/
|
|
39
62
|
export const viewportSharedTexture = /*@__PURE__*/ nodeProxy( ViewportSharedTextureNode );
|
|
@@ -7,8 +7,19 @@ import { Vector2 } from '../../math/Vector2.js';
|
|
|
7
7
|
import { FramebufferTexture } from '../../textures/FramebufferTexture.js';
|
|
8
8
|
import { LinearMipmapLinearFilter } from '../../constants.js';
|
|
9
9
|
|
|
10
|
+
/** @module ViewportTextureNode **/
|
|
11
|
+
|
|
10
12
|
const _size = /*@__PURE__*/ new Vector2();
|
|
11
13
|
|
|
14
|
+
/**
|
|
15
|
+
* A special type of texture node which represents the data of the current viewport
|
|
16
|
+
* as a texture. The module extracts data from the current bound framebuffer with
|
|
17
|
+
* a copy operation so no extra render pass is required to produce the texture data
|
|
18
|
+
* (which is good for performance). `ViewportTextureNode` can be used as an input for a
|
|
19
|
+
* variety of effects like refractive or transmissive materials.
|
|
20
|
+
*
|
|
21
|
+
* @augments module:TextureNode~TextureNode
|
|
22
|
+
*/
|
|
12
23
|
class ViewportTextureNode extends TextureNode {
|
|
13
24
|
|
|
14
25
|
static get type() {
|
|
@@ -17,6 +28,13 @@ class ViewportTextureNode extends TextureNode {
|
|
|
17
28
|
|
|
18
29
|
}
|
|
19
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Constructs a new viewport texture node.
|
|
33
|
+
*
|
|
34
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
35
|
+
* @param {Node?} [levelNode=null] - The level node.
|
|
36
|
+
* @param {Texture?} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
|
|
37
|
+
*/
|
|
20
38
|
constructor( uvNode = screenUV, levelNode = null, framebufferTexture = null ) {
|
|
21
39
|
|
|
22
40
|
if ( framebufferTexture === null ) {
|
|
@@ -28,10 +46,30 @@ class ViewportTextureNode extends TextureNode {
|
|
|
28
46
|
|
|
29
47
|
super( framebufferTexture, uvNode, levelNode );
|
|
30
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Whether to generate mipmaps or not.
|
|
51
|
+
*
|
|
52
|
+
* @type {Boolean}
|
|
53
|
+
* @default false
|
|
54
|
+
*/
|
|
31
55
|
this.generateMipmaps = false;
|
|
32
56
|
|
|
57
|
+
/**
|
|
58
|
+
* This flag can be used for type testing.
|
|
59
|
+
*
|
|
60
|
+
* @type {Boolean}
|
|
61
|
+
* @readonly
|
|
62
|
+
* @default true
|
|
63
|
+
*/
|
|
33
64
|
this.isOutputTextureNode = true;
|
|
34
65
|
|
|
66
|
+
/**
|
|
67
|
+
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders the
|
|
68
|
+
* scene once per frame in its {@link ViewportTextureNode#updateBefore} method.
|
|
69
|
+
*
|
|
70
|
+
* @type {String}
|
|
71
|
+
* @default 'frame'
|
|
72
|
+
*/
|
|
35
73
|
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
36
74
|
|
|
37
75
|
}
|
|
@@ -77,5 +115,24 @@ class ViewportTextureNode extends TextureNode {
|
|
|
77
115
|
|
|
78
116
|
export default ViewportTextureNode;
|
|
79
117
|
|
|
118
|
+
/**
|
|
119
|
+
* TSL function for creating a viewport texture node.
|
|
120
|
+
*
|
|
121
|
+
* @function
|
|
122
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
123
|
+
* @param {Node?} [levelNode=null] - The level node.
|
|
124
|
+
* @param {Texture?} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
|
|
125
|
+
* @returns {ViewportTextureNode}
|
|
126
|
+
*/
|
|
80
127
|
export const viewportTexture = /*@__PURE__*/ nodeProxy( ViewportTextureNode );
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* TSL function for creating a viewport texture node with enabled mipmap generation.
|
|
131
|
+
*
|
|
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
|
+
*/
|
|
81
138
|
export const viewportMipTexture = /*@__PURE__*/ nodeProxy( ViewportTextureNode, null, null, { generateMipmaps: true } );
|
|
@@ -0,0 +1,110 @@
|
|
|
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
|
+
/** @module Fog **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Returns a node that represents the `z` coordinate in view space
|
|
9
|
+
* for the current fragment. It's a different representation of the
|
|
10
|
+
* default depth value.
|
|
11
|
+
*
|
|
12
|
+
* This value can be part of a computation that defines how the fog
|
|
13
|
+
* density increases when moving away from the camera.
|
|
14
|
+
*
|
|
15
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
16
|
+
* @return {Node} The viewZ node.
|
|
17
|
+
*/
|
|
18
|
+
function getViewZNode( builder ) {
|
|
19
|
+
|
|
20
|
+
let viewZ;
|
|
21
|
+
|
|
22
|
+
const getViewZ = builder.context.getViewZ;
|
|
23
|
+
|
|
24
|
+
if ( getViewZ !== undefined ) {
|
|
25
|
+
|
|
26
|
+
viewZ = getViewZ( this );
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return ( viewZ || positionView.z ).negate();
|
|
31
|
+
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Constructs a new range factor node.
|
|
36
|
+
*
|
|
37
|
+
* @function
|
|
38
|
+
* @param {Node} near - Defines the near value.
|
|
39
|
+
* @param {Node} far - Defines the far value.
|
|
40
|
+
*/
|
|
41
|
+
export const rangeFogFactor = Fn( ( [ near, far ], builder ) => {
|
|
42
|
+
|
|
43
|
+
const viewZ = getViewZNode( builder );
|
|
44
|
+
|
|
45
|
+
return smoothstep( near, far, viewZ );
|
|
46
|
+
|
|
47
|
+
} );
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Represents an exponential squared fog. This type of fog gives
|
|
51
|
+
* a clear view near the camera and a faster than exponentially
|
|
52
|
+
* densening fog farther from the camera.
|
|
53
|
+
*
|
|
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
|
+
* @function
|
|
70
|
+
* @param {Node} color - Defines the color of the fog.
|
|
71
|
+
* @param {Node} factor - Defines how the fog is factored in the scene.
|
|
72
|
+
*/
|
|
73
|
+
export const fog = Fn( ( [ color, factor ] ) => {
|
|
74
|
+
|
|
75
|
+
return vec4( factor.toFloat().mix( output.rgb, color.toVec3() ), output.a );
|
|
76
|
+
|
|
77
|
+
} );
|
|
78
|
+
|
|
79
|
+
// Deprecated
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* @function
|
|
83
|
+
* @deprecated since r171. Use `fog( color, rangeFogFactor( near, far ) )` instead.
|
|
84
|
+
*
|
|
85
|
+
* @param {Node} color
|
|
86
|
+
* @param {Node} near
|
|
87
|
+
* @param {Node} far
|
|
88
|
+
* @returns {Function}
|
|
89
|
+
*/
|
|
90
|
+
export function rangeFog( color, near, far ) { // @deprecated, r171
|
|
91
|
+
|
|
92
|
+
console.warn( 'THREE.TSL: "rangeFog( color, near, far )" is deprecated. Use "fog( color, rangeFogFactor( near, far ) )" instead.' );
|
|
93
|
+
return fog( color, rangeFogFactor( near, far ) );
|
|
94
|
+
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* @function
|
|
99
|
+
* @deprecated since r171. Use `fog( color, densityFogFactor( density ) )` instead.
|
|
100
|
+
*
|
|
101
|
+
* @param {Node} color
|
|
102
|
+
* @param {Node} density
|
|
103
|
+
* @returns {Function}
|
|
104
|
+
*/
|
|
105
|
+
export function densityFog( color, density ) { // @deprecated, r171
|
|
106
|
+
|
|
107
|
+
console.warn( 'THREE.TSL: "densityFog( color, density )" is deprecated. Use "fog( color, densityFogFactor( density ) )" instead.' );
|
|
108
|
+
return fog( color, densityFogFactor( density ) );
|
|
109
|
+
|
|
110
|
+
}
|
|
@@ -5,14 +5,31 @@ import { materialSpecularStrength, materialReflectivity } from '../accessors/Mat
|
|
|
5
5
|
import { mix } from '../math/MathNode.js';
|
|
6
6
|
import { vec4 } from '../tsl/TSLBase.js';
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Represents the lighting model for unlit materials. The only light contribution
|
|
10
|
+
* is baked indirect lighting modulated with ambient occlusion and the material's
|
|
11
|
+
* diffuse color. Environment mapping is supported. Used in {@link MeshBasicNodeMaterial}.
|
|
12
|
+
*
|
|
13
|
+
* @augments LightingModel
|
|
14
|
+
*/
|
|
8
15
|
class BasicLightingModel extends LightingModel {
|
|
9
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Constructs a new basic lighting model.
|
|
19
|
+
*/
|
|
10
20
|
constructor() {
|
|
11
21
|
|
|
12
22
|
super();
|
|
13
23
|
|
|
14
24
|
}
|
|
15
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Implements the baked indirect lighting with its modulation.
|
|
28
|
+
*
|
|
29
|
+
* @param {ContextNode} context - The current node context.
|
|
30
|
+
* @param {StackNode} stack - The current stack.
|
|
31
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
32
|
+
*/
|
|
16
33
|
indirect( context, stack, builder ) {
|
|
17
34
|
|
|
18
35
|
const ambientOcclusion = context.ambientOcclusion;
|
|
@@ -41,6 +58,13 @@ class BasicLightingModel extends LightingModel {
|
|
|
41
58
|
|
|
42
59
|
}
|
|
43
60
|
|
|
61
|
+
/**
|
|
62
|
+
* Implements the environment mapping.
|
|
63
|
+
*
|
|
64
|
+
* @param {ContextNode} context - The current node context.
|
|
65
|
+
* @param {StackNode} stack - The current stack.
|
|
66
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
67
|
+
*/
|
|
44
68
|
finish( context, stack, builder ) {
|
|
45
69
|
|
|
46
70
|
const material = builder.material;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import BasicLightingModel from './BasicLightingModel.js';
|
|
2
2
|
import F_Schlick from './BSDF/F_Schlick.js';
|
|
3
3
|
import BRDF_Lambert from './BSDF/BRDF_Lambert.js';
|
|
4
|
-
import { diffuseColor } from '../core/PropertyNode.js';
|
|
4
|
+
import { diffuseColor, shininess, specularColor } from '../core/PropertyNode.js';
|
|
5
5
|
import { transformedNormalView } from '../accessors/Normal.js';
|
|
6
6
|
import { materialSpecularStrength } from '../accessors/MaterialNode.js';
|
|
7
|
-
import { shininess, specularColor } from '../core/PropertyNode.js';
|
|
8
7
|
import { positionViewDirection } from '../accessors/Position.js';
|
|
9
8
|
import { Fn, float } from '../tsl/TSLBase.js';
|
|
10
9
|
|
|
@@ -31,16 +30,42 @@ const BRDF_BlinnPhong = /*@__PURE__*/ Fn( ( { lightDirection } ) => {
|
|
|
31
30
|
|
|
32
31
|
} );
|
|
33
32
|
|
|
33
|
+
/**
|
|
34
|
+
* Represents the lighting model for a phong material. Used in {@link MeshPhongNodeMaterial}.
|
|
35
|
+
*
|
|
36
|
+
* @augments BasicLightingModel
|
|
37
|
+
*/
|
|
34
38
|
class PhongLightingModel extends BasicLightingModel {
|
|
35
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Constructs a new phong lighting model.
|
|
42
|
+
*
|
|
43
|
+
* @param {Boolean} [specular=true] - Whether specular is supported or not.
|
|
44
|
+
*/
|
|
36
45
|
constructor( specular = true ) {
|
|
37
46
|
|
|
38
47
|
super();
|
|
39
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Whether specular is supported or not. Set this to `false` if you are
|
|
51
|
+
* looking for a Lambert-like material meaning a material for non-shiny
|
|
52
|
+
* surfaces, without specular highlights.
|
|
53
|
+
*
|
|
54
|
+
* @type {Boolean}
|
|
55
|
+
* @default true
|
|
56
|
+
*/
|
|
40
57
|
this.specular = specular;
|
|
41
58
|
|
|
42
59
|
}
|
|
43
60
|
|
|
61
|
+
/**
|
|
62
|
+
* Implements the direct lighting. The specular portion is optional an can be controlled
|
|
63
|
+
* with the {@link PhongLightingModel#specular} flag.
|
|
64
|
+
*
|
|
65
|
+
* @param {Object} input - The input data.
|
|
66
|
+
* @param {StackNode} stack - The current stack.
|
|
67
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
68
|
+
*/
|
|
44
69
|
direct( { lightDirection, lightColor, reflectedLight } ) {
|
|
45
70
|
|
|
46
71
|
const dotNL = transformedNormalView.dot( lightDirection ).clamp();
|
|
@@ -56,6 +81,13 @@ class PhongLightingModel extends BasicLightingModel {
|
|
|
56
81
|
|
|
57
82
|
}
|
|
58
83
|
|
|
84
|
+
/**
|
|
85
|
+
* Implements the indirect lighting.
|
|
86
|
+
*
|
|
87
|
+
* @param {ContextNode} input - The current node context.
|
|
88
|
+
* @param {StackNode} stack - The current stack.
|
|
89
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
90
|
+
*/
|
|
59
91
|
indirect( { ambientOcclusion, irradiance, reflectedLight } ) {
|
|
60
92
|
|
|
61
93
|
reflectedLight.indirectDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor } ) ) );
|