super-three 0.181.0 → 0.185.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 +3 -4
- package/build/three.cjs +21332 -19201
- package/build/three.core.js +20908 -19853
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1947 -862
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +37 -16
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +33628 -25197
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +33394 -25000
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +14 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +13 -6
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +127 -86
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +102 -17
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMFrustum.js +31 -6
- package/examples/jsm/csm/CSMShadowNode.js +10 -3
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +14 -1
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +27 -6
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +266 -21
- package/examples/jsm/exporters/PLYExporter.js +286 -73
- package/examples/jsm/exporters/USDZExporter.js +353 -99
- package/examples/jsm/generators/CityGenerator.js +346 -0
- package/examples/jsm/generators/ForestGenerator.js +347 -0
- package/examples/jsm/generators/TerrainGenerator.js +504 -0
- package/examples/jsm/generators/TreeGenerator.js +377 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
- package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/LoftGeometry.js +355 -0
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelper.js +5 -4
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +83 -14
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +244 -91
- package/examples/jsm/inspector/RendererInspector.js +165 -39
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +241 -25
- package/examples/jsm/inspector/tabs/Memory.js +136 -0
- package/examples/jsm/inspector/tabs/Parameters.js +115 -7
- package/examples/jsm/inspector/tabs/Performance.js +24 -9
- package/examples/jsm/inspector/tabs/Settings.js +306 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
- package/examples/jsm/inspector/tabs/Viewer.js +723 -9
- package/examples/jsm/inspector/ui/Graph.js +162 -25
- package/examples/jsm/inspector/ui/Item.js +92 -13
- package/examples/jsm/inspector/ui/List.js +2 -2
- package/examples/jsm/inspector/ui/Profiler.js +1991 -44
- package/examples/jsm/inspector/ui/Style.js +1943 -543
- package/examples/jsm/inspector/ui/Tab.js +226 -5
- package/examples/jsm/inspector/ui/Values.js +126 -8
- package/examples/jsm/inspector/ui/utils.js +143 -10
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/basis/README.md +0 -1
- package/examples/jsm/libs/demuxer_mp4.js +3 -3
- package/examples/jsm/libs/draco/README.md +0 -1
- package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
- package/examples/jsm/libs/mikktspace.module.js +34 -9
- package/examples/jsm/lighting/ClusteredLighting.js +55 -0
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +681 -0
- package/examples/jsm/lines/LineMaterial.js +45 -16
- package/examples/jsm/lines/LineSegments2.js +8 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
- package/examples/jsm/loaders/3DMLoader.js +6 -5
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +51 -18
- package/examples/jsm/loaders/EXRLoader.js +701 -90
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +7 -30
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +58 -17
- package/examples/jsm/loaders/LDrawLoader.js +49 -58
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +11 -39
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MaterialXLoader.js +31 -9
- package/examples/jsm/loaders/NRRDLoader.js +5 -5
- package/examples/jsm/loaders/PCDLoader.js +11 -9
- package/examples/jsm/loaders/PLYLoader.js +218 -55
- package/examples/jsm/loaders/SVGLoader.js +549 -497
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/USDLoader.js +127 -43
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +80 -3
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +504 -344
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
- package/examples/jsm/misc/Volume.js +2 -3
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/GroundedSkybox.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +72 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/Water2Mesh.js +1 -1
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +27 -15
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +36 -7
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/shaders/VolumeShader.js +31 -44
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
- package/examples/jsm/transpiler/Linker.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +75 -25
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +13 -14
- package/examples/jsm/tsl/display/GTAONode.js +40 -17
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +15 -27
- package/examples/jsm/tsl/display/SSGINode.js +96 -62
- package/examples/jsm/tsl/display/SSRNode.js +831 -134
- package/examples/jsm/tsl/display/SSSNode.js +8 -6
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/tsl/math/curlNoise.js +107 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
- package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
- package/examples/jsm/tsl/utils/RNoise.js +51 -0
- package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/SceneOptimizer.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/ARButton.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +28 -34
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +35 -14
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +13 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +18 -4
- package/src/animation/AnimationClip.js +0 -139
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyBinding.js +2 -2
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +34 -4
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/StereoCamera.js +5 -2
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +43 -9
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +69 -11
- package/src/core/Raycaster.js +3 -3
- package/src/core/RenderTarget.js +19 -6
- package/src/extras/PMREMGenerator.js +13 -22
- package/src/extras/TextureUtils.js +6 -2
- package/src/extras/core/ShapePath.js +149 -160
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/SphereGeometry.js +8 -3
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +6 -1
- package/src/helpers/HemisphereLightHelper.js +5 -0
- package/src/helpers/PointLightHelper.js +3 -25
- package/src/helpers/SpotLightHelper.js +4 -1
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +75 -42
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/LoadingManager.js +5 -0
- package/src/loaders/MaterialLoader.js +37 -266
- package/src/loaders/ObjectLoader.js +48 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +198 -1
- package/src/materials/MeshBasicMaterial.js +24 -0
- package/src/materials/MeshDepthMaterial.js +10 -0
- package/src/materials/MeshDistanceMaterial.js +10 -0
- package/src/materials/MeshLambertMaterial.js +49 -1
- package/src/materials/MeshMatcapMaterial.js +25 -1
- package/src/materials/MeshNormalMaterial.js +9 -1
- package/src/materials/MeshPhongMaterial.js +49 -1
- package/src/materials/MeshPhysicalMaterial.js +38 -0
- package/src/materials/MeshStandardMaterial.js +42 -1
- package/src/materials/MeshToonMaterial.js +35 -2
- package/src/materials/PointsMaterial.js +7 -0
- package/src/materials/ShaderMaterial.js +106 -1
- package/src/materials/SpriteMaterial.js +7 -0
- package/src/materials/nodes/Line2NodeMaterial.js +380 -297
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
- package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
- package/src/materials/nodes/NodeMaterial.js +153 -89
- package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
- package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
- package/src/math/Box3.js +5 -0
- package/src/math/FrustumArray.js +103 -133
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +12 -12
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +24 -9
- package/src/math/Matrix4.js +112 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +13 -9
- package/src/math/Vector3.js +17 -15
- package/src/math/Vector4.js +15 -11
- package/src/math/interpolants/BezierInterpolant.js +106 -0
- package/src/nodes/Nodes.js +86 -71
- package/src/nodes/TSL.js +15 -13
- package/src/nodes/accessors/Arrays.js +5 -5
- package/src/nodes/accessors/Batch.js +108 -0
- package/src/nodes/accessors/Bitangent.js +7 -7
- package/src/nodes/accessors/BufferAttributeNode.js +120 -17
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +5 -5
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/Instance.js +264 -0
- package/src/nodes/accessors/MaterialNode.js +27 -3
- package/src/nodes/accessors/MaterialProperties.js +6 -8
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
- package/src/nodes/accessors/Normal.js +24 -24
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +39 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +9 -8
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/Skinning.js +263 -0
- package/src/nodes/accessors/StorageBufferNode.js +16 -27
- package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
- package/src/nodes/accessors/StorageTextureNode.js +74 -11
- package/src/nodes/accessors/Tangent.js +8 -18
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +124 -25
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +4 -19
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +55 -4
- package/src/nodes/core/Node.js +151 -17
- package/src/nodes/core/NodeBuilder.js +479 -101
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +20 -18
- package/src/nodes/core/OutputStructNode.js +13 -11
- package/src/nodes/core/OverrideContextNode.js +153 -0
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +66 -4
- package/src/nodes/core/StackNode.js +91 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +20 -8
- package/src/nodes/core/StructTypeNode.js +17 -23
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +56 -23
- package/src/nodes/core/VaryingNode.js +14 -21
- package/src/nodes/display/BlendModes.js +1 -105
- package/src/nodes/display/BumpMapNode.js +6 -1
- package/src/nodes/display/ColorAdjustment.js +27 -9
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +38 -9
- package/src/nodes/display/NormalMapNode.js +41 -6
- package/src/nodes/display/PassNode.js +157 -56
- package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
- package/src/nodes/display/RenderOutputNode.js +19 -10
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/functions/VolumetricLightingModel.js +40 -7
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +30 -5
- package/src/nodes/lighting/IESSpotLightNode.js +40 -2
- package/src/nodes/lighting/LightingContextNode.js +10 -2
- package/src/nodes/lighting/LightsNode.js +97 -65
- package/src/nodes/lighting/PointShadowNode.js +166 -148
- package/src/nodes/lighting/ShadowFilterNode.js +74 -117
- package/src/nodes/lighting/ShadowNode.js +149 -51
- package/src/nodes/materialx/lib/mx_noise.js +2 -2
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +6 -6
- package/src/nodes/math/MathNode.js +115 -52
- package/src/nodes/math/OperatorNode.js +24 -23
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +34 -3
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +99 -33
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EquirectUV.js +30 -5
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +48 -5
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +41 -25
- package/src/nodes/utils/ReflectorNode.js +4 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +66 -30
- package/src/objects/InstancedMesh.js +19 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +344 -156
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +78 -13
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +141 -57
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ClippingContext.js +10 -2
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +374 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +51 -19
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +41 -4
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +88 -16
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +700 -163
- package/src/renderers/common/Sampler.js +16 -48
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +121 -9
- package/src/renderers/common/TimestampQueryPool.js +6 -4
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +84 -1
- package/src/renderers/common/XRManager.js +377 -51
- package/src/renderers/common/extras/PMREMGenerator.js +40 -61
- package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/src/renderers/common/nodes/NodeLibrary.js +4 -4
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +3 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +271 -0
- package/src/renderers/webgl/WebGLProgram.js +54 -113
- package/src/renderers/webgl/WebGLPrograms.js +74 -55
- package/src/renderers/webgl/WebGLRenderLists.js +24 -1
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShaderCache.js +5 -11
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +230 -56
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
- package/src/renderers/webgpu/WebGPUBackend.js +733 -302
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
- package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
- package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
- package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
- package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
- package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
- package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
- package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
- package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
- package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
- package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
- package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
- package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/DepthTexture.js +1 -1
- package/src/textures/ExternalTexture.js +0 -3
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/fonts/LICENSE +0 -13
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
- package/examples/fonts/README.md +0 -11
- package/examples/fonts/droid/NOTICE +0 -190
- package/examples/fonts/droid/README.txt +0 -18
- package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
- package/examples/fonts/gentilis_bold.typeface.json +0 -1
- package/examples/fonts/gentilis_regular.typeface.json +0 -1
- package/examples/fonts/helvetiker_bold.typeface.json +0 -1
- package/examples/fonts/helvetiker_regular.typeface.json +0 -1
- package/examples/fonts/optimer_bold.typeface.json +0 -1
- package/examples/fonts/optimer_regular.typeface.json +0 -1
- package/examples/fonts/ttf/README.md +0 -9
- package/examples/fonts/ttf/kenpixel.ttf +0 -0
- package/examples/jsm/libs/ammo.wasm.js +0 -822
- package/examples/jsm/libs/ammo.wasm.wasm +0 -0
- package/examples/jsm/libs/draco/draco_encoder.js +0 -33
- package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
- package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
- package/examples/jsm/libs/opentype.module.js +0 -14506
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lighting/TiledLighting.js +0 -42
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
- package/src/nodes/accessors/BatchNode.js +0 -163
- package/src/nodes/accessors/InstanceNode.js +0 -244
- package/src/nodes/accessors/InstancedMeshNode.js +0 -50
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/accessors/SkinningNode.js +0 -327
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -5,12 +5,15 @@ import { colorSpaceToWorking } from '../display/ColorSpaceNode.js';
|
|
|
5
5
|
import { expression } from '../code/ExpressionNode.js';
|
|
6
6
|
import { maxMipLevel } from '../utils/MaxMipLevelNode.js';
|
|
7
7
|
import { nodeProxy, vec3, nodeObject, int, Fn } from '../tsl/TSLBase.js';
|
|
8
|
+
import { step } from '../math/MathNode.js';
|
|
8
9
|
import { NodeUpdateType } from '../core/constants.js';
|
|
9
10
|
|
|
10
|
-
import { IntType, NearestFilter, UnsignedIntType } from '../../constants.js';
|
|
11
|
+
import { Compatibility, GreaterCompare, GreaterEqualCompare, IntType, LessCompare, LessEqualCompare, NearestFilter, UnsignedIntType } from '../../constants.js';
|
|
11
12
|
|
|
12
13
|
import { Texture } from '../../textures/Texture.js';
|
|
13
|
-
import { warn } from '../../utils.js';
|
|
14
|
+
import { warn, warnOnce } from '../../utils.js';
|
|
15
|
+
|
|
16
|
+
import NodeError from '../core/NodeError.js';
|
|
14
17
|
|
|
15
18
|
const EmptyTexture = /*@__PURE__*/ new Texture();
|
|
16
19
|
|
|
@@ -96,6 +99,15 @@ class TextureNode extends UniformNode {
|
|
|
96
99
|
*/
|
|
97
100
|
this.gradNode = null;
|
|
98
101
|
|
|
102
|
+
/**
|
|
103
|
+
* Represents the optional index constant of the channel to gather.
|
|
104
|
+
* This must be in range [0, 3] and a compile-time constant.
|
|
105
|
+
*
|
|
106
|
+
* @type {?Node<int>}
|
|
107
|
+
* @default null
|
|
108
|
+
*/
|
|
109
|
+
this.gatherNode = null;
|
|
110
|
+
|
|
99
111
|
/**
|
|
100
112
|
* Represents the optional texel offset applied to the unnormalized texture
|
|
101
113
|
* coordinate before sampling the texture.
|
|
@@ -214,9 +226,15 @@ class TextureNode extends UniformNode {
|
|
|
214
226
|
* @param {NodeBuilder} builder - The current node builder.
|
|
215
227
|
* @return {string} The node type.
|
|
216
228
|
*/
|
|
217
|
-
|
|
229
|
+
generateNodeType( /*builder*/ ) {
|
|
230
|
+
|
|
231
|
+
if ( this.value.isDepthTexture === true ) {
|
|
218
232
|
|
|
219
|
-
|
|
233
|
+
if ( this.gatherNode === null ) return 'float';
|
|
234
|
+
|
|
235
|
+
return 'vec4';
|
|
236
|
+
|
|
237
|
+
}
|
|
220
238
|
|
|
221
239
|
if ( this.value.type === UnsignedIntType ) {
|
|
222
240
|
|
|
@@ -343,7 +361,7 @@ class TextureNode extends UniformNode {
|
|
|
343
361
|
|
|
344
362
|
if ( ! texture || texture.isTexture !== true ) {
|
|
345
363
|
|
|
346
|
-
throw new
|
|
364
|
+
throw new NodeError( 'THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().', this.stackTrace );
|
|
347
365
|
|
|
348
366
|
}
|
|
349
367
|
|
|
@@ -391,11 +409,42 @@ class TextureNode extends UniformNode {
|
|
|
391
409
|
|
|
392
410
|
//
|
|
393
411
|
|
|
412
|
+
let compareNode = null;
|
|
413
|
+
let compareStepNode = null;
|
|
414
|
+
|
|
415
|
+
if ( this.compareNode !== null ) {
|
|
416
|
+
|
|
417
|
+
if ( builder.renderer.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {
|
|
418
|
+
|
|
419
|
+
compareNode = this.compareNode;
|
|
420
|
+
|
|
421
|
+
} else {
|
|
422
|
+
|
|
423
|
+
const compareFunction = texture.compareFunction;
|
|
424
|
+
|
|
425
|
+
if ( compareFunction === null || compareFunction === LessCompare || compareFunction === LessEqualCompare || compareFunction === GreaterCompare || compareFunction === GreaterEqualCompare ) {
|
|
426
|
+
|
|
427
|
+
compareStepNode = this.compareNode;
|
|
428
|
+
|
|
429
|
+
} else {
|
|
430
|
+
|
|
431
|
+
compareNode = this.compareNode;
|
|
432
|
+
|
|
433
|
+
warnOnce( 'TSL: Only "LessCompare", "LessEqualCompare", "GreaterCompare" and "GreaterEqualCompare" are supported for depth texture comparison fallback.' );
|
|
434
|
+
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
}
|
|
440
|
+
|
|
394
441
|
properties.uvNode = uvNode;
|
|
395
442
|
properties.levelNode = levelNode;
|
|
396
443
|
properties.biasNode = this.biasNode;
|
|
397
|
-
properties.compareNode =
|
|
444
|
+
properties.compareNode = compareNode;
|
|
445
|
+
properties.compareStepNode = compareStepNode;
|
|
398
446
|
properties.gradNode = this.gradNode;
|
|
447
|
+
properties.gatherNode = this.gatherNode;
|
|
399
448
|
properties.depthNode = this.depthNode;
|
|
400
449
|
properties.offsetNode = this.offsetNode;
|
|
401
450
|
|
|
@@ -438,10 +487,12 @@ class TextureNode extends UniformNode {
|
|
|
438
487
|
* @param {?string} depthSnippet - The depth snippet.
|
|
439
488
|
* @param {?string} compareSnippet - The compare snippet.
|
|
440
489
|
* @param {?Array<string>} gradSnippet - The grad snippet.
|
|
490
|
+
* @param {?string} gatherSnippet - The gather snippet.
|
|
441
491
|
* @param {?string} offsetSnippet - The offset snippet.
|
|
492
|
+
* @param {?string} flipYSnippet - The y-flip snippet. Only used for WebGL.
|
|
442
493
|
* @return {string} The generated code snippet.
|
|
443
494
|
*/
|
|
444
|
-
generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, offsetSnippet ) {
|
|
495
|
+
generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, gatherSnippet, offsetSnippet, flipYSnippet ) {
|
|
445
496
|
|
|
446
497
|
const texture = this.value;
|
|
447
498
|
|
|
@@ -455,6 +506,18 @@ class TextureNode extends UniformNode {
|
|
|
455
506
|
|
|
456
507
|
snippet = builder.generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, offsetSnippet );
|
|
457
508
|
|
|
509
|
+
} else if ( gatherSnippet ) {
|
|
510
|
+
|
|
511
|
+
if ( compareSnippet ) {
|
|
512
|
+
|
|
513
|
+
snippet = builder.generateTextureGatherCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, offsetSnippet, flipYSnippet );
|
|
514
|
+
|
|
515
|
+
} else {
|
|
516
|
+
|
|
517
|
+
snippet = builder.generateTextureGather( texture, textureProperty, uvSnippet, gatherSnippet, depthSnippet, offsetSnippet, flipYSnippet );
|
|
518
|
+
|
|
519
|
+
}
|
|
520
|
+
|
|
458
521
|
} else if ( compareSnippet ) {
|
|
459
522
|
|
|
460
523
|
snippet = builder.generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, offsetSnippet );
|
|
@@ -503,25 +566,60 @@ class TextureNode extends UniformNode {
|
|
|
503
566
|
|
|
504
567
|
const nodeData = builder.getDataFromNode( this );
|
|
505
568
|
|
|
569
|
+
let nodeType = this.getNodeType( builder );
|
|
570
|
+
|
|
506
571
|
let propertyName = nodeData.propertyName;
|
|
507
572
|
|
|
508
573
|
if ( propertyName === undefined ) {
|
|
509
574
|
|
|
510
|
-
const { uvNode, levelNode, biasNode, compareNode, depthNode, gradNode, offsetNode } = properties;
|
|
575
|
+
const { uvNode, levelNode, biasNode, compareNode, compareStepNode, depthNode, gradNode, gatherNode, offsetNode } = properties;
|
|
511
576
|
|
|
512
577
|
const uvSnippet = this.generateUV( builder, uvNode );
|
|
513
578
|
const levelSnippet = levelNode ? levelNode.build( builder, 'float' ) : null;
|
|
514
579
|
const biasSnippet = biasNode ? biasNode.build( builder, 'float' ) : null;
|
|
515
580
|
const depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;
|
|
516
581
|
const compareSnippet = compareNode ? compareNode.build( builder, 'float' ) : null;
|
|
582
|
+
const compareStepSnippet = compareStepNode ? compareStepNode.build( builder, 'float' ) : null;
|
|
517
583
|
const gradSnippet = gradNode ? [ gradNode[ 0 ].build( builder, 'vec2' ), gradNode[ 1 ].build( builder, 'vec2' ) ] : null;
|
|
584
|
+
const gatherSnippet = gatherNode ? gatherNode.build( builder, 'int' ) : null;
|
|
518
585
|
const offsetSnippet = offsetNode ? this.generateOffset( builder, offsetNode ) : null;
|
|
586
|
+
const flipYSnippet = this._flipYUniform ? this._flipYUniform.build( builder, 'bool' ) : null;
|
|
587
|
+
|
|
588
|
+
if ( gatherSnippet ) {
|
|
589
|
+
|
|
590
|
+
nodeType = 'vec4';
|
|
591
|
+
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
let finalDepthSnippet = depthSnippet;
|
|
595
|
+
|
|
596
|
+
if ( finalDepthSnippet === null && texture.isArrayTexture && this.isTexture3DNode !== true ) {
|
|
597
|
+
|
|
598
|
+
finalDepthSnippet = '0';
|
|
599
|
+
|
|
600
|
+
}
|
|
519
601
|
|
|
520
602
|
const nodeVar = builder.getVarFromNode( this );
|
|
521
603
|
|
|
522
604
|
propertyName = builder.getPropertyName( nodeVar );
|
|
523
605
|
|
|
524
|
-
|
|
606
|
+
let snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, finalDepthSnippet, compareSnippet, gradSnippet, gatherSnippet, offsetSnippet, flipYSnippet );
|
|
607
|
+
|
|
608
|
+
if ( compareStepSnippet !== null ) {
|
|
609
|
+
|
|
610
|
+
const compareFunction = texture.compareFunction;
|
|
611
|
+
|
|
612
|
+
if ( compareFunction === GreaterCompare || compareFunction === GreaterEqualCompare ) {
|
|
613
|
+
|
|
614
|
+
snippet = step( expression( snippet, nodeType ), expression( compareStepSnippet, 'float' ) ).build( builder, nodeType );
|
|
615
|
+
|
|
616
|
+
} else {
|
|
617
|
+
|
|
618
|
+
snippet = step( expression( compareStepSnippet, 'float' ), expression( snippet, nodeType ) ).build( builder, nodeType );
|
|
619
|
+
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
}
|
|
525
623
|
|
|
526
624
|
builder.addLineFlowCode( `${propertyName} = ${snippet}`, this );
|
|
527
625
|
|
|
@@ -531,7 +629,6 @@ class TextureNode extends UniformNode {
|
|
|
531
629
|
}
|
|
532
630
|
|
|
533
631
|
let snippet = propertyName;
|
|
534
|
-
const nodeType = this.getNodeType( builder );
|
|
535
632
|
|
|
536
633
|
if ( builder.needsToWorkingColorSpace( texture ) ) {
|
|
537
634
|
|
|
@@ -572,21 +669,6 @@ class TextureNode extends UniformNode {
|
|
|
572
669
|
|
|
573
670
|
// @TODO: Move to TSL
|
|
574
671
|
|
|
575
|
-
/**
|
|
576
|
-
* @function
|
|
577
|
-
* @deprecated since r172. Use {@link TextureNode#sample} instead.
|
|
578
|
-
*
|
|
579
|
-
* @param {Node} uvNode - The uv node.
|
|
580
|
-
* @return {TextureNode} A texture node representing the texture sample.
|
|
581
|
-
*/
|
|
582
|
-
uv( uvNode ) { // @deprecated, r172
|
|
583
|
-
|
|
584
|
-
warn( 'TextureNode: .uv() has been renamed. Use .sample() instead.' );
|
|
585
|
-
|
|
586
|
-
return this.sample( uvNode );
|
|
587
|
-
|
|
588
|
-
}
|
|
589
|
-
|
|
590
672
|
/**
|
|
591
673
|
* Samples the texture with the given uv node.
|
|
592
674
|
*
|
|
@@ -728,6 +810,22 @@ class TextureNode extends UniformNode {
|
|
|
728
810
|
|
|
729
811
|
}
|
|
730
812
|
|
|
813
|
+
/**
|
|
814
|
+
* Gathers four texels from the texture.
|
|
815
|
+
*
|
|
816
|
+
* @param {Node<int>} gatherNode - The index of the channel to read. This must be in range [0, 3] and a compile-time constant.
|
|
817
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
818
|
+
*/
|
|
819
|
+
gather( gatherNode = 0 ) {
|
|
820
|
+
|
|
821
|
+
const textureNode = this.clone();
|
|
822
|
+
textureNode.gatherNode = nodeObject( gatherNode );
|
|
823
|
+
textureNode.referenceNode = this.getBase();
|
|
824
|
+
|
|
825
|
+
return nodeObject( textureNode );
|
|
826
|
+
|
|
827
|
+
}
|
|
828
|
+
|
|
731
829
|
/**
|
|
732
830
|
* Samples the texture by defining a depth node.
|
|
733
831
|
*
|
|
@@ -824,6 +922,7 @@ class TextureNode extends UniformNode {
|
|
|
824
922
|
newNode.depthNode = this.depthNode;
|
|
825
923
|
newNode.compareNode = this.compareNode;
|
|
826
924
|
newNode.gradNode = this.gradNode;
|
|
925
|
+
newNode.gatherNode = this.gatherNode;
|
|
827
926
|
newNode.offsetNode = this.offsetNode;
|
|
828
927
|
|
|
829
928
|
return newNode;
|
|
@@ -41,7 +41,7 @@ class UniformArrayElementNode extends ArrayElementNode {
|
|
|
41
41
|
generate( builder ) {
|
|
42
42
|
|
|
43
43
|
const snippet = super.generate( builder );
|
|
44
|
-
const type = this.getNodeType();
|
|
44
|
+
const type = this.getNodeType( builder );
|
|
45
45
|
const paddedType = this.node.getPaddedType();
|
|
46
46
|
|
|
47
47
|
return builder.format( snippet, paddedType, type );
|
|
@@ -135,7 +135,7 @@ class UniformArrayNode extends BufferNode {
|
|
|
135
135
|
* @param {NodeBuilder} builder - The current node builder.
|
|
136
136
|
* @return {string} The node type.
|
|
137
137
|
*/
|
|
138
|
-
|
|
138
|
+
generateNodeType( /*builder*/ ) {
|
|
139
139
|
|
|
140
140
|
return this.paddedType;
|
|
141
141
|
|
|
@@ -315,6 +315,8 @@ class UniformArrayNode extends BufferNode {
|
|
|
315
315
|
this.bufferCount = length;
|
|
316
316
|
this.bufferType = paddedType;
|
|
317
317
|
|
|
318
|
+
this.update(); // initialize the buffer values
|
|
319
|
+
|
|
318
320
|
return super.setup( builder );
|
|
319
321
|
|
|
320
322
|
}
|
|
@@ -328,7 +330,7 @@ class UniformArrayNode extends BufferNode {
|
|
|
328
330
|
*/
|
|
329
331
|
element( indexNode ) {
|
|
330
332
|
|
|
331
|
-
return
|
|
333
|
+
return new UniformArrayElementNode( this, nodeObject( indexNode ) );
|
|
332
334
|
|
|
333
335
|
}
|
|
334
336
|
|
|
@@ -345,4 +347,4 @@ export default UniformArrayNode;
|
|
|
345
347
|
* @param {?string} [nodeType] - The data type of the array elements.
|
|
346
348
|
* @returns {UniformArrayNode}
|
|
347
349
|
*/
|
|
348
|
-
export const uniformArray = ( values, nodeType ) =>
|
|
350
|
+
export const uniformArray = ( values, nodeType ) => new UniformArrayNode( values, nodeType );
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import ReferenceNode from './ReferenceNode.js';
|
|
2
|
-
import { nodeObject } from '../tsl/TSLBase.js';
|
|
3
2
|
|
|
4
3
|
/**
|
|
5
4
|
* A special type of reference node that allows to link values in
|
|
@@ -74,4 +73,4 @@ export default UserDataNode;
|
|
|
74
73
|
* @param {?Object} userData - A reference to the `userData` object. If not provided, the `userData` property of the 3D object that uses the node material is evaluated.
|
|
75
74
|
* @returns {UserDataNode}
|
|
76
75
|
*/
|
|
77
|
-
export const userData = ( name, inputType, userData ) =>
|
|
76
|
+
export const userData = ( name, inputType, userData ) => new UserDataNode( name, inputType, userData );
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import AttributeNode from '../core/AttributeNode.js';
|
|
2
|
-
import { nodeObject } from '../tsl/TSLBase.js';
|
|
3
2
|
import { Vector4 } from '../../math/Vector4.js';
|
|
4
3
|
|
|
5
4
|
/**
|
|
@@ -107,4 +106,4 @@ export default VertexColorNode;
|
|
|
107
106
|
* @param {number} [index=0] - The attribute index.
|
|
108
107
|
* @returns {VertexColorNode}
|
|
109
108
|
*/
|
|
110
|
-
export const vertexColor = ( index = 0 ) =>
|
|
109
|
+
export const vertexColor = ( index = 0 ) => new VertexColorNode( index );
|
|
@@ -76,7 +76,7 @@ class FunctionCallNode extends TempNode {
|
|
|
76
76
|
* @param {NodeBuilder} builder - The current node builder.
|
|
77
77
|
* @returns {string} The type of this node.
|
|
78
78
|
*/
|
|
79
|
-
|
|
79
|
+
generateNodeType( builder ) {
|
|
80
80
|
|
|
81
81
|
return this.functionNode.getNodeType( builder );
|
|
82
82
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import CodeNode from './CodeNode.js';
|
|
2
|
-
import {
|
|
2
|
+
import { nodeProxyConstructor } from '../tsl/TSLCore.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* This class represents a native shader function. It can be used to implement
|
|
@@ -54,7 +54,7 @@ class FunctionNode extends CodeNode {
|
|
|
54
54
|
* @param {NodeBuilder} builder - The current node builder.
|
|
55
55
|
* @return {string} The type.
|
|
56
56
|
*/
|
|
57
|
-
|
|
57
|
+
generateNodeType( builder ) {
|
|
58
58
|
|
|
59
59
|
return this.getNodeFunction( builder ).type;
|
|
60
60
|
|
|
@@ -156,26 +156,11 @@ export default FunctionNode;
|
|
|
156
156
|
|
|
157
157
|
const nativeFn = ( code, includes = [], language = '' ) => {
|
|
158
158
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
const include = includes[ i ];
|
|
162
|
-
|
|
163
|
-
// TSL Function: glslFn, wgslFn
|
|
164
|
-
|
|
165
|
-
if ( typeof include === 'function' ) {
|
|
166
|
-
|
|
167
|
-
includes[ i ] = include.functionNode;
|
|
168
|
-
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
const functionNode = nodeObject( new FunctionNode( code, includes, language ) );
|
|
159
|
+
const functionNode = new FunctionNode( code, includes, language );
|
|
174
160
|
|
|
175
161
|
const fn = ( ...params ) => functionNode.call( ...params );
|
|
176
|
-
fn.functionNode = functionNode;
|
|
177
162
|
|
|
178
|
-
return fn;
|
|
163
|
+
return nodeProxyConstructor( fn, functionNode );
|
|
179
164
|
|
|
180
165
|
};
|
|
181
166
|
|
|
@@ -77,11 +77,11 @@ class ArrayNode extends TempNode {
|
|
|
77
77
|
* @param {NodeBuilder} builder - The current node builder.
|
|
78
78
|
* @return {string} The type of the node.
|
|
79
79
|
*/
|
|
80
|
-
|
|
80
|
+
generateNodeType( builder ) {
|
|
81
81
|
|
|
82
82
|
if ( this.nodeType === null ) {
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
return this.values[ 0 ].getNodeType( builder );
|
|
85
85
|
|
|
86
86
|
}
|
|
87
87
|
|
|
@@ -101,6 +101,25 @@ class ArrayNode extends TempNode {
|
|
|
101
101
|
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
/**
|
|
105
|
+
* Returns the type of a member variable.
|
|
106
|
+
*
|
|
107
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
108
|
+
* @param {string} name - The name of the member variable.
|
|
109
|
+
* @return {string} The type of the member variable.
|
|
110
|
+
*/
|
|
111
|
+
getMemberType( builder, name ) {
|
|
112
|
+
|
|
113
|
+
if ( this.nodeType === null ) {
|
|
114
|
+
|
|
115
|
+
return this.values[ 0 ].getMemberType( builder, name );
|
|
116
|
+
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return super.getMemberType( builder, name );
|
|
120
|
+
|
|
121
|
+
}
|
|
122
|
+
|
|
104
123
|
/**
|
|
105
124
|
* This method builds the output node and returns the resulting array as a shader string.
|
|
106
125
|
*
|
|
@@ -63,7 +63,7 @@ class AssignNode extends TempNode {
|
|
|
63
63
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
generateNodeType( builder, output ) {
|
|
67
67
|
|
|
68
68
|
return output !== 'void' ? this.targetNode.getNodeType( builder ) : 'void';
|
|
69
69
|
|
|
@@ -99,8 +99,8 @@ class AssignNode extends TempNode {
|
|
|
99
99
|
|
|
100
100
|
const scope = targetNode.getScope();
|
|
101
101
|
|
|
102
|
-
const
|
|
103
|
-
|
|
102
|
+
const scopeData = builder.getDataFromNode( scope );
|
|
103
|
+
scopeData.assign = true;
|
|
104
104
|
|
|
105
105
|
const properties = builder.getNodeProperties( this );
|
|
106
106
|
properties.sourceNode = sourceNode;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
|
-
import {
|
|
2
|
+
import { varying } from '../tsl/TSLBase.js';
|
|
3
3
|
import { warn } from '../../utils.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -43,7 +43,7 @@ class AttributeNode extends Node {
|
|
|
43
43
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
generateNodeType( builder ) {
|
|
47
47
|
|
|
48
48
|
let nodeType = this.nodeType;
|
|
49
49
|
|
|
@@ -165,4 +165,4 @@ export default AttributeNode;
|
|
|
165
165
|
* @param {?string} [nodeType=null] - The node type.
|
|
166
166
|
* @returns {AttributeNode}
|
|
167
167
|
*/
|
|
168
|
-
export const attribute = ( name, nodeType = null ) =>
|
|
168
|
+
export const attribute = ( name, nodeType = null ) => new AttributeNode( name, nodeType );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
|
-
import { addMethodChaining
|
|
2
|
+
import { addMethodChaining } from '../tsl/TSLCore.js';
|
|
3
3
|
import { warn } from '../../utils.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -9,6 +9,12 @@ import { warn } from '../../utils.js';
|
|
|
9
9
|
*
|
|
10
10
|
* ```js
|
|
11
11
|
*node.context( { getUV: () => customCoord } );
|
|
12
|
+
*\// or
|
|
13
|
+
*material.contextNode = context( { getUV: () => customCoord } );
|
|
14
|
+
*\// or
|
|
15
|
+
*renderer.contextNode = context( { getUV: () => customCoord } );
|
|
16
|
+
*\// or
|
|
17
|
+
*scenePass.contextNode = context( { getUV: () => customCoord } );
|
|
12
18
|
*```
|
|
13
19
|
* @augments Node
|
|
14
20
|
*/
|
|
@@ -26,7 +32,7 @@ class ContextNode extends Node {
|
|
|
26
32
|
* @param {Node} node - The node whose context should be modified.
|
|
27
33
|
* @param {Object} [value={}] - The modified context data.
|
|
28
34
|
*/
|
|
29
|
-
constructor( node, value = {} ) {
|
|
35
|
+
constructor( node = null, value = {} ) {
|
|
30
36
|
|
|
31
37
|
super();
|
|
32
38
|
|
|
@@ -73,12 +79,35 @@ class ContextNode extends Node {
|
|
|
73
79
|
* @param {NodeBuilder} builder - The current node builder.
|
|
74
80
|
* @return {string} The node type.
|
|
75
81
|
*/
|
|
76
|
-
|
|
82
|
+
generateNodeType( builder ) {
|
|
77
83
|
|
|
78
84
|
return this.node.getNodeType( builder );
|
|
79
85
|
|
|
80
86
|
}
|
|
81
87
|
|
|
88
|
+
/**
|
|
89
|
+
* Gathers the context data from all parent context nodes.
|
|
90
|
+
*
|
|
91
|
+
* @return {Object} The gathered context data.
|
|
92
|
+
*/
|
|
93
|
+
getFlowContextData() {
|
|
94
|
+
|
|
95
|
+
const children = [];
|
|
96
|
+
|
|
97
|
+
this.traverse( ( node ) => {
|
|
98
|
+
|
|
99
|
+
if ( node.isContextNode === true ) {
|
|
100
|
+
|
|
101
|
+
children.push( node.value );
|
|
102
|
+
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
} );
|
|
106
|
+
|
|
107
|
+
return Object.assign( {}, ...children );
|
|
108
|
+
|
|
109
|
+
}
|
|
110
|
+
|
|
82
111
|
/**
|
|
83
112
|
* This method is overwritten to ensure it returns the member type of {@link ContextNode#node}.
|
|
84
113
|
*
|
|
@@ -133,11 +162,24 @@ export default ContextNode;
|
|
|
133
162
|
*
|
|
134
163
|
* @tsl
|
|
135
164
|
* @function
|
|
136
|
-
* @param {Node}
|
|
165
|
+
* @param {Node|Object} [nodeOrValue={}] - The node whose context should be modified or the modified context data.
|
|
137
166
|
* @param {Object} [value={}] - The modified context data.
|
|
138
167
|
* @returns {ContextNode}
|
|
139
168
|
*/
|
|
140
|
-
export const context =
|
|
169
|
+
export const context = ( nodeOrValue = null, value = {} ) => {
|
|
170
|
+
|
|
171
|
+
let node = nodeOrValue;
|
|
172
|
+
|
|
173
|
+
if ( node === null || node.isNode !== true ) {
|
|
174
|
+
|
|
175
|
+
value = node || value;
|
|
176
|
+
node = null;
|
|
177
|
+
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return new ContextNode( node, value );
|
|
181
|
+
|
|
182
|
+
};
|
|
141
183
|
|
|
142
184
|
/**
|
|
143
185
|
* TSL function for defining a uniformFlow context value for a given node.
|
|
@@ -160,6 +202,61 @@ export const uniformFlow = ( node ) => context( node, { uniformFlow: true } );
|
|
|
160
202
|
*/
|
|
161
203
|
export const setName = ( node, name ) => context( node, { nodeName: name } );
|
|
162
204
|
|
|
205
|
+
/**
|
|
206
|
+
* TSL function for defining a built-in shadow context for a given node.
|
|
207
|
+
*
|
|
208
|
+
* @tsl
|
|
209
|
+
* @function
|
|
210
|
+
* @param {ShadowNode} shadowNode - The shadow node representing the light's shadow.
|
|
211
|
+
* @param {Light} light - The light associated with the shadow.
|
|
212
|
+
* @param {Node} [node=null] - The node whose context should be modified.
|
|
213
|
+
* @returns {ContextNode}
|
|
214
|
+
*/
|
|
215
|
+
export function builtinShadowContext( shadowNode, light, node = null ) {
|
|
216
|
+
|
|
217
|
+
return context( node, {
|
|
218
|
+
|
|
219
|
+
getShadow: ( { light: shadowLight, shadowColorNode } ) => {
|
|
220
|
+
|
|
221
|
+
if ( light === shadowLight ) {
|
|
222
|
+
|
|
223
|
+
return shadowColorNode.mul( shadowNode );
|
|
224
|
+
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return shadowColorNode;
|
|
228
|
+
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
} );
|
|
232
|
+
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* TSL function for defining a built-in ambient occlusion context for a given node.
|
|
237
|
+
*
|
|
238
|
+
* @tsl
|
|
239
|
+
* @function
|
|
240
|
+
* @param {Node} aoNode - The ambient occlusion value node to apply.
|
|
241
|
+
* @param {Node} [node=null] - The node whose context should be modified.
|
|
242
|
+
* @returns {ContextNode}
|
|
243
|
+
*/
|
|
244
|
+
export function builtinAOContext( aoNode, node = null ) {
|
|
245
|
+
|
|
246
|
+
return context( node, {
|
|
247
|
+
|
|
248
|
+
getAO: ( inputNode, { material } ) => {
|
|
249
|
+
|
|
250
|
+
if ( material.transparent === true ) return inputNode;
|
|
251
|
+
|
|
252
|
+
return inputNode !== null ? inputNode.mul( aoNode ) : aoNode;
|
|
253
|
+
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
} );
|
|
257
|
+
|
|
258
|
+
}
|
|
259
|
+
|
|
163
260
|
/**
|
|
164
261
|
* TSL function for defining a label context value for a given node.
|
|
165
262
|
*
|
|
@@ -182,3 +279,5 @@ addMethodChaining( 'context', context );
|
|
|
182
279
|
addMethodChaining( 'label', label );
|
|
183
280
|
addMethodChaining( 'uniformFlow', uniformFlow );
|
|
184
281
|
addMethodChaining( 'setName', setName );
|
|
282
|
+
addMethodChaining( 'builtinShadowContext', ( node, shadowNode, light ) => builtinShadowContext( shadowNode, light, node ) );
|
|
283
|
+
addMethodChaining( 'builtinAOContext', ( node, aoValue ) => builtinAOContext( aoValue, node ) );
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
|
-
import { nodeImmutable
|
|
2
|
+
import { nodeImmutable } from '../tsl/TSLCore.js';
|
|
3
|
+
import { varying } from './VaryingNode.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* This class represents shader indices of different types. The following predefined node
|