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
|
@@ -31,7 +31,7 @@ const getVolumeTransmissionRay = /*@__PURE__*/ Fn( ( [ n, v, thickness, ior, mod
|
|
|
31
31
|
// Direction of refracted light.
|
|
32
32
|
const refractionVector = vec3( refract( v.negate(), normalize( n ), div( 1.0, ior ) ) );
|
|
33
33
|
|
|
34
|
-
// Compute rotation-
|
|
34
|
+
// Compute rotation-independent scaling of the model matrix.
|
|
35
35
|
const modelScale = vec3(
|
|
36
36
|
length( modelMatrix[ 0 ].xyz ),
|
|
37
37
|
length( modelMatrix[ 1 ].xyz ),
|
|
@@ -73,9 +73,9 @@ const viewportFrontSideTexture = /*@__PURE__*/ viewportMipTexture();
|
|
|
73
73
|
|
|
74
74
|
const getTransmissionSample = /*@__PURE__*/ Fn( ( [ fragCoord, roughness, ior ], { material } ) => {
|
|
75
75
|
|
|
76
|
-
const vTexture = material.side
|
|
76
|
+
const vTexture = material.side === BackSide ? viewportBackSideTexture : viewportFrontSideTexture;
|
|
77
77
|
|
|
78
|
-
const transmissionSample = vTexture.
|
|
78
|
+
const transmissionSample = vTexture.sample( fragCoord );
|
|
79
79
|
//const transmissionSample = viewportMipTexture( fragCoord );
|
|
80
80
|
|
|
81
81
|
const lod = log2( screenSize.x ).mul( applyIorToRoughness( roughness, ior ) );
|
|
@@ -311,7 +311,7 @@ const evalIridescence = /*@__PURE__*/ Fn( ( { outsideIOR, eta2, cosTheta1, thinF
|
|
|
311
311
|
// Sheen
|
|
312
312
|
//
|
|
313
313
|
|
|
314
|
-
// This is a curve-fit
|
|
314
|
+
// This is a curve-fit approximation to the "Charlie sheen" BRDF integrated over the hemisphere from
|
|
315
315
|
// Estevez and Kulla 2017, "Production Friendly Microfacet Sheen BRDF". The analysis can be found
|
|
316
316
|
// in the Sheen section of https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing
|
|
317
317
|
const IBLSheenBRDF = /*@__PURE__*/ Fn( ( { normal, viewDir, roughness } ) => {
|
|
@@ -341,31 +341,140 @@ const IBLSheenBRDF = /*@__PURE__*/ Fn( ( { normal, viewDir, roughness } ) => {
|
|
|
341
341
|
const clearcoatF0 = vec3( 0.04 );
|
|
342
342
|
const clearcoatF90 = float( 1 );
|
|
343
343
|
|
|
344
|
-
//
|
|
345
344
|
|
|
345
|
+
/**
|
|
346
|
+
* Represents the lighting model for a PBR material.
|
|
347
|
+
*
|
|
348
|
+
* @augments LightingModel
|
|
349
|
+
*/
|
|
346
350
|
class PhysicalLightingModel extends LightingModel {
|
|
347
351
|
|
|
352
|
+
/**
|
|
353
|
+
* Constructs a new physical lighting model.
|
|
354
|
+
*
|
|
355
|
+
* @param {Boolean} [clearcoat=false] - Whether clearcoat is supported or not.
|
|
356
|
+
* @param {Boolean} [sheen=false] - Whether sheen is supported or not.
|
|
357
|
+
* @param {Boolean} [iridescence=false] - Whether iridescence is supported or not.
|
|
358
|
+
* @param {Boolean} [anisotropy=false] - Whether anisotropy is supported or not.
|
|
359
|
+
* @param {Boolean} [transmission=false] - Whether transmission is supported or not.
|
|
360
|
+
* @param {Boolean} [dispersion=false] - Whether dispersion is supported or not.
|
|
361
|
+
*/
|
|
348
362
|
constructor( clearcoat = false, sheen = false, iridescence = false, anisotropy = false, transmission = false, dispersion = false ) {
|
|
349
363
|
|
|
350
364
|
super();
|
|
351
365
|
|
|
366
|
+
/**
|
|
367
|
+
* Whether clearcoat is supported or not.
|
|
368
|
+
*
|
|
369
|
+
* @type {Boolean}
|
|
370
|
+
* @default false
|
|
371
|
+
*/
|
|
352
372
|
this.clearcoat = clearcoat;
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* Whether sheen is supported or not.
|
|
376
|
+
*
|
|
377
|
+
* @type {Boolean}
|
|
378
|
+
* @default false
|
|
379
|
+
*/
|
|
353
380
|
this.sheen = sheen;
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Whether iridescence is supported or not.
|
|
384
|
+
*
|
|
385
|
+
* @type {Boolean}
|
|
386
|
+
* @default false
|
|
387
|
+
*/
|
|
354
388
|
this.iridescence = iridescence;
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Whether anisotropy is supported or not.
|
|
392
|
+
*
|
|
393
|
+
* @type {Boolean}
|
|
394
|
+
* @default false
|
|
395
|
+
*/
|
|
355
396
|
this.anisotropy = anisotropy;
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* Whether transmission is supported or not.
|
|
400
|
+
*
|
|
401
|
+
* @type {Boolean}
|
|
402
|
+
* @default false
|
|
403
|
+
*/
|
|
356
404
|
this.transmission = transmission;
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* Whether dispersion is supported or not.
|
|
408
|
+
*
|
|
409
|
+
* @type {Boolean}
|
|
410
|
+
* @default false
|
|
411
|
+
*/
|
|
357
412
|
this.dispersion = dispersion;
|
|
358
413
|
|
|
414
|
+
/**
|
|
415
|
+
* The clear coat radiance.
|
|
416
|
+
*
|
|
417
|
+
* @type {Node?}
|
|
418
|
+
* @default null
|
|
419
|
+
*/
|
|
359
420
|
this.clearcoatRadiance = null;
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* The clear coat specular direct.
|
|
424
|
+
*
|
|
425
|
+
* @type {Node?}
|
|
426
|
+
* @default null
|
|
427
|
+
*/
|
|
360
428
|
this.clearcoatSpecularDirect = null;
|
|
429
|
+
|
|
430
|
+
/**
|
|
431
|
+
* The clear coat specular indirect.
|
|
432
|
+
*
|
|
433
|
+
* @type {Node?}
|
|
434
|
+
* @default null
|
|
435
|
+
*/
|
|
361
436
|
this.clearcoatSpecularIndirect = null;
|
|
437
|
+
|
|
438
|
+
/**
|
|
439
|
+
* The sheen specular direct.
|
|
440
|
+
*
|
|
441
|
+
* @type {Node?}
|
|
442
|
+
* @default null
|
|
443
|
+
*/
|
|
362
444
|
this.sheenSpecularDirect = null;
|
|
445
|
+
|
|
446
|
+
/**
|
|
447
|
+
* The sheen specular indirect.
|
|
448
|
+
*
|
|
449
|
+
* @type {Node?}
|
|
450
|
+
* @default null
|
|
451
|
+
*/
|
|
363
452
|
this.sheenSpecularIndirect = null;
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* The iridescence Fresnel.
|
|
456
|
+
*
|
|
457
|
+
* @type {Node?}
|
|
458
|
+
* @default null
|
|
459
|
+
*/
|
|
364
460
|
this.iridescenceFresnel = null;
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* The iridescence F0.
|
|
464
|
+
*
|
|
465
|
+
* @type {Node?}
|
|
466
|
+
* @default null
|
|
467
|
+
*/
|
|
365
468
|
this.iridescenceF0 = null;
|
|
366
469
|
|
|
367
470
|
}
|
|
368
471
|
|
|
472
|
+
/**
|
|
473
|
+
* Depending on what features are requested, the method prepares certain node variables
|
|
474
|
+
* which are later used for lighting computations.
|
|
475
|
+
*
|
|
476
|
+
* @param {ContextNode} context - The current node context.
|
|
477
|
+
*/
|
|
369
478
|
start( context ) {
|
|
370
479
|
|
|
371
480
|
if ( this.clearcoat === true ) {
|
|
@@ -432,7 +541,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
432
541
|
}
|
|
433
542
|
|
|
434
543
|
// Fdez-Agüera's "Multiple-Scattering Microfacet Model for Real-Time Image Based Lighting"
|
|
435
|
-
// Approximates
|
|
544
|
+
// Approximates multi-scattering in order to preserve energy.
|
|
436
545
|
// http://www.jcgt.org/published/0008/01/03/
|
|
437
546
|
|
|
438
547
|
computeMultiscattering( singleScatter, multiScatter, specularF90 ) {
|
|
@@ -456,6 +565,13 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
456
565
|
|
|
457
566
|
}
|
|
458
567
|
|
|
568
|
+
/**
|
|
569
|
+
* Implements the direct light.
|
|
570
|
+
*
|
|
571
|
+
* @param {Object} input - The input data.
|
|
572
|
+
* @param {StackNode} stack - The current stack.
|
|
573
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
574
|
+
*/
|
|
459
575
|
direct( { lightDirection, lightColor, reflectedLight } ) {
|
|
460
576
|
|
|
461
577
|
const dotNL = transformedNormalView.dot( lightDirection ).clamp();
|
|
@@ -482,6 +598,14 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
482
598
|
|
|
483
599
|
}
|
|
484
600
|
|
|
601
|
+
/**
|
|
602
|
+
* This method is intended for implementing the direct light term for
|
|
603
|
+
* rect area light nodes.
|
|
604
|
+
*
|
|
605
|
+
* @param {Object} input - The input data.
|
|
606
|
+
* @param {StackNode} stack - The current stack.
|
|
607
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
608
|
+
*/
|
|
485
609
|
directRectArea( { lightColor, lightPosition, halfWidth, halfHeight, reflectedLight, ltc_1, ltc_2 } ) {
|
|
486
610
|
|
|
487
611
|
const p0 = lightPosition.add( halfWidth ).sub( halfHeight ); // counterclockwise; light shines in local neg z direction
|
|
@@ -495,8 +619,8 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
495
619
|
|
|
496
620
|
const uv = LTC_Uv( { N, V, roughness } );
|
|
497
621
|
|
|
498
|
-
const t1 = ltc_1.
|
|
499
|
-
const t2 = ltc_2.
|
|
622
|
+
const t1 = ltc_1.sample( uv ).toVar();
|
|
623
|
+
const t2 = ltc_2.sample( uv ).toVar();
|
|
500
624
|
|
|
501
625
|
const mInv = mat3(
|
|
502
626
|
vec3( t1.x, 0, t1.y ),
|
|
@@ -514,6 +638,13 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
514
638
|
|
|
515
639
|
}
|
|
516
640
|
|
|
641
|
+
/**
|
|
642
|
+
* Implements the indirect lighting.
|
|
643
|
+
*
|
|
644
|
+
* @param {ContextNode} context - The current node context.
|
|
645
|
+
* @param {StackNode} stack - The current stack.
|
|
646
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
647
|
+
*/
|
|
517
648
|
indirect( context, stack, builder ) {
|
|
518
649
|
|
|
519
650
|
this.indirectDiffuse( context, stack, builder );
|
|
@@ -522,12 +653,26 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
522
653
|
|
|
523
654
|
}
|
|
524
655
|
|
|
656
|
+
/**
|
|
657
|
+
* Implements the indirect diffuse term.
|
|
658
|
+
*
|
|
659
|
+
* @param {ContextNode} input - The current node context.
|
|
660
|
+
* @param {StackNode} stack - The current stack.
|
|
661
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
662
|
+
*/
|
|
525
663
|
indirectDiffuse( { irradiance, reflectedLight } ) {
|
|
526
664
|
|
|
527
665
|
reflectedLight.indirectDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor } ) ) );
|
|
528
666
|
|
|
529
667
|
}
|
|
530
668
|
|
|
669
|
+
/**
|
|
670
|
+
* Implements the indirect specular term.
|
|
671
|
+
*
|
|
672
|
+
* @param {ContextNode} input - The current node context.
|
|
673
|
+
* @param {StackNode} stack - The current stack.
|
|
674
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
675
|
+
*/
|
|
531
676
|
indirectSpecular( { radiance, iblIrradiance, reflectedLight } ) {
|
|
532
677
|
|
|
533
678
|
if ( this.sheen === true ) {
|
|
@@ -577,6 +722,13 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
577
722
|
|
|
578
723
|
}
|
|
579
724
|
|
|
725
|
+
/**
|
|
726
|
+
* Implements the ambient occlusion term.
|
|
727
|
+
*
|
|
728
|
+
* @param {ContextNode} input - The current node context.
|
|
729
|
+
* @param {StackNode} stack - The current stack.
|
|
730
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
731
|
+
*/
|
|
580
732
|
ambientOcclusion( { ambientOcclusion, reflectedLight } ) {
|
|
581
733
|
|
|
582
734
|
const dotNV = transformedNormalView.dot( positionViewDirection ).clamp(); // @ TODO: Move to core dotNV
|
|
@@ -603,6 +755,13 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
603
755
|
|
|
604
756
|
}
|
|
605
757
|
|
|
758
|
+
/**
|
|
759
|
+
* Used for final lighting accumulations depending on the requested features.
|
|
760
|
+
*
|
|
761
|
+
* @param {ContextNode} context - The current node context.
|
|
762
|
+
* @param {StackNode} stack - The current stack.
|
|
763
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
764
|
+
*/
|
|
606
765
|
finish( context ) {
|
|
607
766
|
|
|
608
767
|
const { outgoingLight } = context;
|
|
@@ -2,22 +2,45 @@ import LightingModel from '../core/LightingModel.js';
|
|
|
2
2
|
import { diffuseColor } from '../core/PropertyNode.js';
|
|
3
3
|
import { float } from '../tsl/TSLBase.js';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Represents lighting model for a shadow material. Used in {@link ShadowNodeMaterial}.
|
|
7
|
+
*
|
|
8
|
+
* @augments LightingModel
|
|
9
|
+
*/
|
|
5
10
|
class ShadowMaskModel extends LightingModel {
|
|
6
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new shadow mask model.
|
|
14
|
+
*/
|
|
7
15
|
constructor() {
|
|
8
16
|
|
|
9
17
|
super();
|
|
10
18
|
|
|
19
|
+
/**
|
|
20
|
+
* The shadow mask node.
|
|
21
|
+
*
|
|
22
|
+
* @type {Node}
|
|
23
|
+
*/
|
|
11
24
|
this.shadowNode = float( 1 ).toVar( 'shadowMask' );
|
|
12
25
|
|
|
13
26
|
}
|
|
14
27
|
|
|
28
|
+
/**
|
|
29
|
+
* Only used to save the shadow mask.
|
|
30
|
+
*
|
|
31
|
+
* @param {Object} input - The input data.
|
|
32
|
+
*/
|
|
15
33
|
direct( { shadowMask } ) {
|
|
16
34
|
|
|
17
35
|
this.shadowNode.mulAssign( shadowMask );
|
|
18
36
|
|
|
19
37
|
}
|
|
20
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Uses the shadow mask to produce the final color.
|
|
41
|
+
*
|
|
42
|
+
* @param {ContextNode} context - The current node context.
|
|
43
|
+
*/
|
|
21
44
|
finish( context ) {
|
|
22
45
|
|
|
23
46
|
diffuseColor.a.mulAssign( this.shadowNode.oneMinus() );
|
|
@@ -28,8 +28,21 @@ const getGradientIrradiance = /*@__PURE__*/ Fn( ( { normal, lightDirection, buil
|
|
|
28
28
|
|
|
29
29
|
} );
|
|
30
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Represents the lighting model for a toon material. Used in {@link MeshToonNodeMaterial}.
|
|
33
|
+
*
|
|
34
|
+
* @augments LightingModel
|
|
35
|
+
*/
|
|
31
36
|
class ToonLightingModel extends LightingModel {
|
|
32
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Implements the direct lighting. Instead of using a conventional smooth irradiance, the irradiance is
|
|
40
|
+
* reduced to a small number of discrete shades to create a comic-like, flat look.
|
|
41
|
+
*
|
|
42
|
+
* @param {Object} input - The input data.
|
|
43
|
+
* @param {StackNode} stack - The current stack.
|
|
44
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
45
|
+
*/
|
|
33
46
|
direct( { lightDirection, lightColor, reflectedLight }, stack, builder ) {
|
|
34
47
|
|
|
35
48
|
const irradiance = getGradientIrradiance( { normal: normalGeometry, lightDirection, builder } ).mul( lightColor );
|
|
@@ -38,6 +51,13 @@ class ToonLightingModel extends LightingModel {
|
|
|
38
51
|
|
|
39
52
|
}
|
|
40
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Implements the indirect lighting.
|
|
56
|
+
*
|
|
57
|
+
* @param {ContextNode} input - The current node context.
|
|
58
|
+
* @param {StackNode} stack - The current stack.
|
|
59
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
60
|
+
*/
|
|
41
61
|
indirect( { ambientOcclusion, irradiance, reflectedLight } ) {
|
|
42
62
|
|
|
43
63
|
reflectedLight.indirectDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor } ) ) );
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { abs, add, ceil, clamp, dFdx, dFdy, exp2, float, floor, Fn, fract, length, log2, max, min, mul, sin, sub, vec2, vec3 } from '../../tsl/TSLBase.js';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
* See: https://casual-effects.com/research/Wyman2017Hashed/index.html
|
|
5
|
-
*/
|
|
3
|
+
// See: https://casual-effects.com/research/Wyman2017Hashed/index.html
|
|
6
4
|
|
|
7
5
|
const ALPHA_HASH_SCALE = 0.05; // Derived from trials only, and may be changed.
|
|
8
6
|
|
|
@@ -1,8 +1,23 @@
|
|
|
1
1
|
import { positionWorld } from '../../accessors/Position.js';
|
|
2
2
|
import { float, Fn, min, normalize, sub, vec3 } from '../../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
/** @module getParallaxCorrectNormal **/
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* This computes a parallax corrected normal which is used for box-projected cube mapping (BPCEM).
|
|
8
|
+
*
|
|
9
|
+
* Reference: {@link https://devlog-martinsh.blogspot.com/2011/09/box-projected-cube-environment-mapping.html}
|
|
10
|
+
*
|
|
11
|
+
* ```js
|
|
12
|
+
* const uvNode = getParallaxCorrectNormal( reflectVector, vec3( 200, 100, 100 ), vec3( 0, - 50, 0 ) );
|
|
13
|
+
* material.envNode = pmremTexture( renderTarget.texture, uvNode );
|
|
14
|
+
* ```
|
|
15
|
+
* @function
|
|
16
|
+
* @param {Node<vec3>} normal - The normal to correct.
|
|
17
|
+
* @param {Node<vec3>} cubeSize - The cube size should reflect the size of the environment (BPCEM is usually applied in closed environments like rooms).
|
|
18
|
+
* @param {Node<vec3>} cubePos - The cube position.
|
|
19
|
+
* @return {Node<vec3>} The parallax corrected normal.
|
|
20
|
+
*/
|
|
6
21
|
const getParallaxCorrectNormal = /*@__PURE__*/ Fn( ( [ normal, cubeSize, cubePos ] ) => {
|
|
7
22
|
|
|
8
23
|
const nDir = normalize( normal ).toVar( 'nDir' );
|
|
@@ -9,9 +9,22 @@ import { Vector4 } from '../../math/Vector4.js';
|
|
|
9
9
|
import { MathUtils } from '../../math/MathUtils.js';
|
|
10
10
|
import { InstancedBufferAttribute } from '../../core/InstancedBufferAttribute.js';
|
|
11
11
|
|
|
12
|
+
/** @module RangeNode **/
|
|
13
|
+
|
|
12
14
|
let min = null;
|
|
13
15
|
let max = null;
|
|
14
16
|
|
|
17
|
+
/**
|
|
18
|
+
* `RangeNode` generates random instanced attribute data in a defined range.
|
|
19
|
+
* An exemplary use case for this utility node is to generate random per-instance
|
|
20
|
+
* colors:
|
|
21
|
+
* ```js
|
|
22
|
+
* const material = new MeshBasicNodeMaterial();
|
|
23
|
+
* material.colorNode = range( new Color( 0x000000 ), new Color( 0xFFFFFF ) );
|
|
24
|
+
* const mesh = new InstancedMesh( geometry, material, count );
|
|
25
|
+
* ```
|
|
26
|
+
* @augments Node
|
|
27
|
+
*/
|
|
15
28
|
class RangeNode extends Node {
|
|
16
29
|
|
|
17
30
|
static get type() {
|
|
@@ -20,15 +33,40 @@ class RangeNode extends Node {
|
|
|
20
33
|
|
|
21
34
|
}
|
|
22
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Constructs a new range node.
|
|
38
|
+
*
|
|
39
|
+
* @param {Node<any>} [minNode=float()] - A node defining the lower bound of the range.
|
|
40
|
+
* @param {Node<any>} [maxNode=float()] - A node defining the upper bound of the range.
|
|
41
|
+
*/
|
|
23
42
|
constructor( minNode = float(), maxNode = float() ) {
|
|
24
43
|
|
|
25
44
|
super();
|
|
26
45
|
|
|
46
|
+
/**
|
|
47
|
+
* A node defining the lower bound of the range.
|
|
48
|
+
*
|
|
49
|
+
* @type {Node<any>}
|
|
50
|
+
* @default float()
|
|
51
|
+
*/
|
|
27
52
|
this.minNode = minNode;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* A node defining the upper bound of the range.
|
|
56
|
+
*
|
|
57
|
+
* @type {Node<any>}
|
|
58
|
+
* @default float()
|
|
59
|
+
*/
|
|
28
60
|
this.maxNode = maxNode;
|
|
29
61
|
|
|
30
62
|
}
|
|
31
63
|
|
|
64
|
+
/**
|
|
65
|
+
* Returns the vector length which is computed based on the range definition.
|
|
66
|
+
*
|
|
67
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
68
|
+
* @return {Number} The vector length.
|
|
69
|
+
*/
|
|
32
70
|
getVectorLength( builder ) {
|
|
33
71
|
|
|
34
72
|
const minLength = builder.getTypeLength( getValueType( this.minNode.value ) );
|
|
@@ -38,6 +76,12 @@ class RangeNode extends Node {
|
|
|
38
76
|
|
|
39
77
|
}
|
|
40
78
|
|
|
79
|
+
/**
|
|
80
|
+
* This method is overwritten since the node type is inferred from range definition.
|
|
81
|
+
*
|
|
82
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
83
|
+
* @return {String} The node type.
|
|
84
|
+
*/
|
|
41
85
|
getNodeType( builder ) {
|
|
42
86
|
|
|
43
87
|
return builder.object.count > 1 ? builder.getTypeFromLength( this.getVectorLength( builder ) ) : 'float';
|
|
@@ -65,11 +109,11 @@ class RangeNode extends Node {
|
|
|
65
109
|
max.setScalar( 0 );
|
|
66
110
|
|
|
67
111
|
if ( minLength === 1 ) min.setScalar( minValue );
|
|
68
|
-
else if ( minValue.isColor ) min.set( minValue.r, minValue.g, minValue.b );
|
|
112
|
+
else if ( minValue.isColor ) min.set( minValue.r, minValue.g, minValue.b, 1 );
|
|
69
113
|
else min.set( minValue.x, minValue.y, minValue.z || 0, minValue.w || 0 );
|
|
70
114
|
|
|
71
115
|
if ( maxLength === 1 ) max.setScalar( maxValue );
|
|
72
|
-
else if ( maxValue.isColor ) max.set( maxValue.r, maxValue.g, maxValue.b );
|
|
116
|
+
else if ( maxValue.isColor ) max.set( maxValue.r, maxValue.g, maxValue.b, 1 );
|
|
73
117
|
else max.set( maxValue.x, maxValue.y, maxValue.z || 0, maxValue.w || 0 );
|
|
74
118
|
|
|
75
119
|
const stride = 4;
|
|
@@ -118,4 +162,12 @@ class RangeNode extends Node {
|
|
|
118
162
|
|
|
119
163
|
export default RangeNode;
|
|
120
164
|
|
|
165
|
+
/**
|
|
166
|
+
* TSL function for creating a range node.
|
|
167
|
+
*
|
|
168
|
+
* @function
|
|
169
|
+
* @param {Node<any>} [minNode=float()] - A node defining the lower bound of the range.
|
|
170
|
+
* @param {Node<any>} [maxNode=float()] - A node defining the upper bound of the range.
|
|
171
|
+
* @returns {RangeNode}
|
|
172
|
+
*/
|
|
121
173
|
export const range = /*@__PURE__*/ nodeProxy( RangeNode );
|