super-three 0.177.0 → 0.181.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/README.md +1 -1
- package/build/three.cjs +1994 -749
- package/build/three.core.js +1358 -506
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +631 -247
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +113 -33
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +9571 -3424
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +9397 -3426
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +2 -3
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +0 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +9 -9
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +62 -15
- package/examples/jsm/csm/CSMShadowNode.js +4 -4
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/RoomEnvironment.js +8 -3
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +683 -299
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -13
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lights/LightProbeGenerator.js +14 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +4 -4
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +210 -22
- package/examples/jsm/loaders/FBXLoader.js +4 -4
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +233 -34
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +13 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -892
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +3 -3
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/physics/RapierPhysics.js +95 -16
- package/examples/jsm/postprocessing/GTAOPass.js +10 -9
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +17 -17
- package/examples/jsm/postprocessing/SSAOPass.js +10 -9
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +196 -92
- package/examples/jsm/transpiler/Transpiler.js +17 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +11 -6
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +578 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +18 -20
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +5 -2
- package/src/Three.TSL.js +112 -32
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +8 -7
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +13 -5
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/Clock.js +2 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +4 -3
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/{examples/jsm/misc → src/core}/Timer.js +4 -42
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +279 -55
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/Path.js +22 -22
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +8 -6
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +42 -12
- package/src/helpers/SkeletonHelper.js +35 -6
- package/src/lights/LightShadow.js +21 -8
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +29 -5
- package/src/loaders/ImageBitmapLoader.js +32 -8
- package/src/loaders/ImageLoader.js +56 -9
- package/src/loaders/Loader.js +17 -3
- package/src/loaders/LoadingManager.js +45 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -3
- package/src/materials/MeshBasicMaterial.js +2 -1
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -10
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
- package/src/materials/nodes/NodeMaterial.js +90 -27
- package/src/materials/nodes/PointsNodeMaterial.js +86 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +10 -5
- package/src/math/Line3.js +129 -2
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +55 -34
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +69 -67
- package/src/math/Spherical.js +3 -3
- package/src/nodes/Nodes.js +6 -4
- package/src/nodes/TSL.js +9 -4
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +31 -25
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +142 -16
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +97 -30
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +25 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +20 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +23 -1
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +142 -44
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +13 -0
- package/src/nodes/core/AssignNode.js +6 -2
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +48 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
- package/src/nodes/core/Node.js +167 -34
- package/src/nodes/core/NodeBuilder.js +404 -120
- package/src/nodes/core/NodeFrame.js +21 -21
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +17 -88
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +77 -30
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +80 -14
- package/src/nodes/core/VarNode.js +142 -16
- package/src/nodes/core/VaryingNode.js +9 -6
- package/src/nodes/display/BlendModes.js +7 -6
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +35 -7
- package/src/nodes/display/NormalMapNode.js +20 -50
- package/src/nodes/display/PassNode.js +206 -17
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -40
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +94 -4
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +19 -18
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +81 -25
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
- package/src/nodes/lighting/EnvironmentNode.js +11 -11
- package/src/nodes/lighting/LightsNode.js +7 -8
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ProjectorLightNode.js +19 -6
- package/src/nodes/lighting/ShadowFilterNode.js +3 -1
- package/src/nodes/lighting/ShadowNode.js +77 -10
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +165 -1
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +25 -27
- package/src/nodes/math/MathNode.js +106 -65
- package/src/nodes/math/OperatorNode.js +28 -43
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -2
- package/src/nodes/tsl/TSLCore.js +546 -186
- package/src/nodes/utils/DebugNode.js +3 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +119 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -41
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +33 -6
- package/src/nodes/utils/ReflectorNode.js +68 -10
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +6 -4
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +77 -66
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/Bindings.js +76 -19
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +61 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +84 -5
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +486 -255
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -68
- package/src/renderers/common/Sampler.js +117 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +27 -0
- package/src/renderers/common/Textures.js +138 -46
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +63 -24
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +161 -66
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +4 -3
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +25 -18
- package/src/renderers/webgl/WebGLPrograms.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +13 -2
- package/src/renderers/webgl/WebGLState.js +17 -16
- package/src/renderers/webgl/WebGLTextures.js +38 -21
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +205 -128
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
- package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +89 -13
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +14 -3
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +29 -2
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import Node from './Node.js';
|
|
2
|
+
import { nodeObject } from '../tsl/TSLCore.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* This node is used to build a sub-build in the node system.
|
|
6
|
+
*
|
|
7
|
+
* @augments Node
|
|
8
|
+
* @param {Node} node - The node to be built in the sub-build.
|
|
9
|
+
* @param {string} name - The name of the sub-build.
|
|
10
|
+
* @param {?string} [nodeType=null] - The type of the node, if known.
|
|
11
|
+
*/
|
|
12
|
+
class SubBuildNode extends Node {
|
|
13
|
+
|
|
14
|
+
static get type() {
|
|
15
|
+
|
|
16
|
+
return 'SubBuild';
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
constructor( node, name, nodeType = null ) {
|
|
21
|
+
|
|
22
|
+
super( nodeType );
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The node to be built in the sub-build.
|
|
26
|
+
*
|
|
27
|
+
* @type {Node}
|
|
28
|
+
*/
|
|
29
|
+
this.node = node;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The name of the sub-build.
|
|
33
|
+
*
|
|
34
|
+
* @type {string}
|
|
35
|
+
*/
|
|
36
|
+
this.name = name;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* This flag can be used for type testing.
|
|
40
|
+
*
|
|
41
|
+
* @type {boolean}
|
|
42
|
+
* @readonly
|
|
43
|
+
* @default true
|
|
44
|
+
*/
|
|
45
|
+
this.isSubBuildNode = true;
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
getNodeType( builder ) {
|
|
50
|
+
|
|
51
|
+
if ( this.nodeType !== null ) return this.nodeType;
|
|
52
|
+
|
|
53
|
+
builder.addSubBuild( this.name );
|
|
54
|
+
|
|
55
|
+
const nodeType = this.node.getNodeType( builder );
|
|
56
|
+
|
|
57
|
+
builder.removeSubBuild();
|
|
58
|
+
|
|
59
|
+
return nodeType;
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
build( builder, ...params ) {
|
|
64
|
+
|
|
65
|
+
builder.addSubBuild( this.name );
|
|
66
|
+
|
|
67
|
+
const data = this.node.build( builder, ...params );
|
|
68
|
+
|
|
69
|
+
builder.removeSubBuild();
|
|
70
|
+
|
|
71
|
+
return data;
|
|
72
|
+
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export default SubBuildNode;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Creates a new sub-build node.
|
|
81
|
+
*
|
|
82
|
+
* @tsl
|
|
83
|
+
* @function
|
|
84
|
+
* @param {Node} node - The node to be built in the sub-build.
|
|
85
|
+
* @param {string} name - The name of the sub-build.
|
|
86
|
+
* @param {?string} [type=null] - The type of the node, if known.
|
|
87
|
+
* @returns {Node} A node object wrapping the SubBuildNode instance.
|
|
88
|
+
*/
|
|
89
|
+
export const subBuild = ( node, name, type = null ) => nodeObject( new SubBuildNode( nodeObject( node ), name, type ) );
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import InputNode from './InputNode.js';
|
|
2
2
|
import { objectGroup } from './UniformGroupNode.js';
|
|
3
3
|
import { nodeObject, getConstNodeType } from '../tsl/TSLCore.js';
|
|
4
|
+
import { getValueFromType } from './NodeUtils.js';
|
|
5
|
+
import { warn } from '../../utils.js';
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* Class for representing a uniform.
|
|
@@ -59,7 +61,7 @@ class UniformNode extends InputNode {
|
|
|
59
61
|
* @param {string} name - The name of the uniform.
|
|
60
62
|
* @return {UniformNode} A reference to this node.
|
|
61
63
|
*/
|
|
62
|
-
|
|
64
|
+
setName( name ) {
|
|
63
65
|
|
|
64
66
|
this.name = name;
|
|
65
67
|
|
|
@@ -67,6 +69,21 @@ class UniformNode extends InputNode {
|
|
|
67
69
|
|
|
68
70
|
}
|
|
69
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Sets the {@link UniformNode#name} property.
|
|
74
|
+
*
|
|
75
|
+
* @deprecated
|
|
76
|
+
* @param {string} name - The name of the uniform.
|
|
77
|
+
* @return {UniformNode} A reference to this node.
|
|
78
|
+
*/
|
|
79
|
+
label( name ) {
|
|
80
|
+
|
|
81
|
+
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
|
|
82
|
+
|
|
83
|
+
return this.setName( name );
|
|
84
|
+
|
|
85
|
+
}
|
|
86
|
+
|
|
70
87
|
/**
|
|
71
88
|
* Sets the {@link UniformNode#groupNode} property.
|
|
72
89
|
*
|
|
@@ -107,13 +124,11 @@ class UniformNode extends InputNode {
|
|
|
107
124
|
|
|
108
125
|
onUpdate( callback, updateType ) {
|
|
109
126
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
callback = callback.bind( self );
|
|
127
|
+
callback = callback.bind( this );
|
|
113
128
|
|
|
114
129
|
return super.onUpdate( ( frame ) => {
|
|
115
130
|
|
|
116
|
-
const value = callback( frame,
|
|
131
|
+
const value = callback( frame, this );
|
|
117
132
|
|
|
118
133
|
if ( value !== undefined ) {
|
|
119
134
|
|
|
@@ -125,6 +140,20 @@ class UniformNode extends InputNode {
|
|
|
125
140
|
|
|
126
141
|
}
|
|
127
142
|
|
|
143
|
+
getInputType( builder ) {
|
|
144
|
+
|
|
145
|
+
let type = super.getInputType( builder );
|
|
146
|
+
|
|
147
|
+
if ( type === 'bool' ) {
|
|
148
|
+
|
|
149
|
+
type = 'uint';
|
|
150
|
+
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return type;
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
|
|
128
157
|
generate( builder, output ) {
|
|
129
158
|
|
|
130
159
|
const type = this.getNodeType( builder );
|
|
@@ -143,12 +172,41 @@ class UniformNode extends InputNode {
|
|
|
143
172
|
|
|
144
173
|
const sharedNodeType = sharedNode.getInputType( builder );
|
|
145
174
|
|
|
146
|
-
const nodeUniform = builder.getUniformFromNode( sharedNode, sharedNodeType, builder.shaderStage, this.name || builder.context.
|
|
147
|
-
const
|
|
175
|
+
const nodeUniform = builder.getUniformFromNode( sharedNode, sharedNodeType, builder.shaderStage, this.name || builder.context.nodeName );
|
|
176
|
+
const uniformName = builder.getPropertyName( nodeUniform );
|
|
177
|
+
|
|
178
|
+
if ( builder.context.nodeName !== undefined ) delete builder.context.nodeName;
|
|
179
|
+
|
|
180
|
+
//
|
|
181
|
+
|
|
182
|
+
let snippet = uniformName;
|
|
183
|
+
|
|
184
|
+
if ( type === 'bool' ) {
|
|
185
|
+
|
|
186
|
+
// cache to variable
|
|
187
|
+
|
|
188
|
+
const nodeData = builder.getDataFromNode( this );
|
|
189
|
+
|
|
190
|
+
let propertyName = nodeData.propertyName;
|
|
191
|
+
|
|
192
|
+
if ( propertyName === undefined ) {
|
|
193
|
+
|
|
194
|
+
const nodeVar = builder.getVarFromNode( this, null, 'bool' );
|
|
195
|
+
propertyName = builder.getPropertyName( nodeVar );
|
|
196
|
+
|
|
197
|
+
nodeData.propertyName = propertyName;
|
|
148
198
|
|
|
149
|
-
|
|
199
|
+
snippet = builder.format( uniformName, sharedNodeType, type );
|
|
150
200
|
|
|
151
|
-
|
|
201
|
+
builder.addLineFlowCode( `${ propertyName } = ${ snippet }`, this );
|
|
202
|
+
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
snippet = propertyName;
|
|
206
|
+
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return builder.format( snippet, type, output );
|
|
152
210
|
|
|
153
211
|
}
|
|
154
212
|
|
|
@@ -161,16 +219,24 @@ export default UniformNode;
|
|
|
161
219
|
*
|
|
162
220
|
* @tsl
|
|
163
221
|
* @function
|
|
164
|
-
* @param {any}
|
|
165
|
-
* @param {string} [
|
|
222
|
+
* @param {any|string} value - The value of this uniform or your type. Usually a JS primitive or three.js object (vector, matrix, color, texture).
|
|
223
|
+
* @param {string} [type] - The node type. If no explicit type is defined, the node tries to derive the type from its value.
|
|
166
224
|
* @returns {UniformNode}
|
|
167
225
|
*/
|
|
168
|
-
export const uniform = (
|
|
226
|
+
export const uniform = ( value, type ) => {
|
|
169
227
|
|
|
170
|
-
const nodeType = getConstNodeType(
|
|
228
|
+
const nodeType = getConstNodeType( type || value );
|
|
229
|
+
|
|
230
|
+
if ( nodeType === value ) {
|
|
231
|
+
|
|
232
|
+
// if the value is a type but no having a value
|
|
233
|
+
|
|
234
|
+
value = getValueFromType( nodeType );
|
|
235
|
+
|
|
236
|
+
}
|
|
171
237
|
|
|
172
238
|
// @TODO: get ConstNode from .traverse() in the future
|
|
173
|
-
|
|
239
|
+
value = ( value && value.isNode === true ) ? ( value.node && value.node.value ) || value.value : value;
|
|
174
240
|
|
|
175
241
|
return nodeObject( new UniformNode( value, nodeType ) );
|
|
176
242
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
3
|
+
import { error } from '../../utils.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Class for representing shader variables as nodes. Variables are created from
|
|
@@ -81,6 +82,45 @@ class VarNode extends Node {
|
|
|
81
82
|
*/
|
|
82
83
|
this.parents = true;
|
|
83
84
|
|
|
85
|
+
/**
|
|
86
|
+
* This flag is used to indicate that this node is used for intent.
|
|
87
|
+
*
|
|
88
|
+
* @type {boolean}
|
|
89
|
+
* @default false
|
|
90
|
+
*/
|
|
91
|
+
this.intent = false;
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Sets the intent flag for this node.
|
|
97
|
+
*
|
|
98
|
+
* This flag is used to indicate that this node is used for intent
|
|
99
|
+
* and should not be built directly. Instead, it is used to indicate that
|
|
100
|
+
* the node should be treated as a variable intent.
|
|
101
|
+
*
|
|
102
|
+
* It's useful for assigning variables without needing creating a new variable node.
|
|
103
|
+
*
|
|
104
|
+
* @param {boolean} value - The value to set for the intent flag.
|
|
105
|
+
* @returns {VarNode} This node.
|
|
106
|
+
*/
|
|
107
|
+
setIntent( value ) {
|
|
108
|
+
|
|
109
|
+
this.intent = value;
|
|
110
|
+
|
|
111
|
+
return this;
|
|
112
|
+
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Returns the intent flag of this node.
|
|
117
|
+
*
|
|
118
|
+
* @return {boolean} The intent flag.
|
|
119
|
+
*/
|
|
120
|
+
getIntent() {
|
|
121
|
+
|
|
122
|
+
return this.intent;
|
|
123
|
+
|
|
84
124
|
}
|
|
85
125
|
|
|
86
126
|
getMemberType( builder, name ) {
|
|
@@ -101,6 +141,70 @@ class VarNode extends Node {
|
|
|
101
141
|
|
|
102
142
|
}
|
|
103
143
|
|
|
144
|
+
getArrayCount( builder ) {
|
|
145
|
+
|
|
146
|
+
return this.node.getArrayCount( builder );
|
|
147
|
+
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
isAssign( builder ) {
|
|
151
|
+
|
|
152
|
+
const properties = builder.getNodeProperties( this );
|
|
153
|
+
|
|
154
|
+
let assign = properties.assign;
|
|
155
|
+
|
|
156
|
+
if ( assign !== true ) {
|
|
157
|
+
|
|
158
|
+
if ( this.node.isShaderCallNodeInternal && this.node.shaderNode.getLayout() === null ) {
|
|
159
|
+
|
|
160
|
+
if ( builder.fnCall && builder.fnCall.shaderNode ) {
|
|
161
|
+
|
|
162
|
+
const shaderNodeData = builder.getDataFromNode( this.node.shaderNode );
|
|
163
|
+
|
|
164
|
+
if ( shaderNodeData.hasLoop ) {
|
|
165
|
+
|
|
166
|
+
assign = true;
|
|
167
|
+
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return assign;
|
|
177
|
+
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
build( ...params ) {
|
|
181
|
+
|
|
182
|
+
const builder = params[ 0 ];
|
|
183
|
+
|
|
184
|
+
if ( this._hasStack( builder ) === false && builder.buildStage === 'setup' ) {
|
|
185
|
+
|
|
186
|
+
if ( builder.context.nodeLoop || builder.context.nodeBlock ) {
|
|
187
|
+
|
|
188
|
+
builder.getBaseStack().addToStack( this );
|
|
189
|
+
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
if ( this.intent === true ) {
|
|
195
|
+
|
|
196
|
+
if ( this.isAssign( builder ) !== true ) {
|
|
197
|
+
|
|
198
|
+
return this.node.build( ...params );
|
|
199
|
+
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
return super.build( ...params );
|
|
205
|
+
|
|
206
|
+
}
|
|
207
|
+
|
|
104
208
|
generate( builder ) {
|
|
105
209
|
|
|
106
210
|
const { node, name, readOnly } = this;
|
|
@@ -119,7 +223,23 @@ class VarNode extends Node {
|
|
|
119
223
|
|
|
120
224
|
}
|
|
121
225
|
|
|
122
|
-
const
|
|
226
|
+
const nodeType = this.getNodeType( builder );
|
|
227
|
+
|
|
228
|
+
if ( nodeType == 'void' ) {
|
|
229
|
+
|
|
230
|
+
if ( this.intent !== true ) {
|
|
231
|
+
|
|
232
|
+
error( 'TSL: ".toVar()" can not be used with void type.' );
|
|
233
|
+
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
const snippet = node.build( builder );
|
|
237
|
+
|
|
238
|
+
return snippet;
|
|
239
|
+
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
const vectorType = builder.getVectorType( nodeType );
|
|
123
243
|
const snippet = node.build( builder, vectorType );
|
|
124
244
|
|
|
125
245
|
const nodeVar = builder.getVarFromNode( this, name, vectorType, undefined, shouldTreatAsReadOnly );
|
|
@@ -138,7 +258,7 @@ class VarNode extends Node {
|
|
|
138
258
|
|
|
139
259
|
} else {
|
|
140
260
|
|
|
141
|
-
const count =
|
|
261
|
+
const count = node.getArrayCount( builder );
|
|
142
262
|
|
|
143
263
|
declarationPrefix = `const ${ builder.getVar( nodeVar.type, propertyName, count ) }`;
|
|
144
264
|
|
|
@@ -152,6 +272,14 @@ class VarNode extends Node {
|
|
|
152
272
|
|
|
153
273
|
}
|
|
154
274
|
|
|
275
|
+
_hasStack( builder ) {
|
|
276
|
+
|
|
277
|
+
const nodeData = builder.getDataFromNode( this );
|
|
278
|
+
|
|
279
|
+
return nodeData.stack !== undefined;
|
|
280
|
+
|
|
281
|
+
}
|
|
282
|
+
|
|
155
283
|
}
|
|
156
284
|
|
|
157
285
|
export default VarNode;
|
|
@@ -189,28 +317,26 @@ export const Var = ( node, name = null ) => createVar( node, name ).toStack();
|
|
|
189
317
|
*/
|
|
190
318
|
export const Const = ( node, name = null ) => createVar( node, name, true ).toStack();
|
|
191
319
|
|
|
192
|
-
//
|
|
193
|
-
|
|
194
|
-
addMethodChaining( 'toVar', Var );
|
|
195
|
-
addMethodChaining( 'toConst', Const );
|
|
196
|
-
|
|
197
|
-
// Deprecated
|
|
320
|
+
//
|
|
321
|
+
//
|
|
198
322
|
|
|
199
323
|
/**
|
|
324
|
+
* TSL function for creating a var intent node.
|
|
325
|
+
*
|
|
200
326
|
* @tsl
|
|
201
327
|
* @function
|
|
202
|
-
* @
|
|
203
|
-
*
|
|
204
|
-
* @param {any} node
|
|
328
|
+
* @param {Node} node - The node for which a variable should be created.
|
|
329
|
+
* @param {?string} name - The name of the variable in the shader.
|
|
205
330
|
* @returns {VarNode}
|
|
206
331
|
*/
|
|
207
|
-
export const
|
|
208
|
-
|
|
209
|
-
console.warn( 'TSL: "temp( node )" is deprecated. Use "Var( node )" or "node.toVar()" instead.' );
|
|
332
|
+
export const VarIntent = ( node ) => {
|
|
210
333
|
|
|
211
|
-
return createVar( node );
|
|
334
|
+
return createVar( node ).setIntent( true ).toStack();
|
|
212
335
|
|
|
213
336
|
};
|
|
214
337
|
|
|
215
|
-
|
|
338
|
+
// Method chaining
|
|
216
339
|
|
|
340
|
+
addMethodChaining( 'toVar', Var );
|
|
341
|
+
addMethodChaining( 'toConst', Const );
|
|
342
|
+
addMethodChaining( 'toVarIntent', VarIntent );
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { NodeShaderStage } from './constants.js';
|
|
3
3
|
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
4
|
+
import { subBuild } from './SubBuildNode.js';
|
|
5
|
+
import { warn } from '../../utils.js';
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* Class for representing shader varyings as nodes. Varyings are create from
|
|
@@ -131,7 +133,7 @@ class VaryingNode extends Node {
|
|
|
131
133
|
const interpolationSampling = this.interpolationSampling;
|
|
132
134
|
|
|
133
135
|
properties.varying = varying = builder.getVaryingFromNode( this, name, type, interpolationType, interpolationSampling );
|
|
134
|
-
properties.node = this.node;
|
|
136
|
+
properties.node = subBuild( this.node, 'VERTEX' );
|
|
135
137
|
|
|
136
138
|
}
|
|
137
139
|
|
|
@@ -160,18 +162,19 @@ class VaryingNode extends Node {
|
|
|
160
162
|
|
|
161
163
|
generate( builder ) {
|
|
162
164
|
|
|
165
|
+
const propertyKey = builder.getSubBuildProperty( 'property', builder.currentStack );
|
|
163
166
|
const properties = builder.getNodeProperties( this );
|
|
164
167
|
const varying = this.setupVarying( builder );
|
|
165
168
|
|
|
166
|
-
if ( properties
|
|
169
|
+
if ( properties[ propertyKey ] === undefined ) {
|
|
167
170
|
|
|
168
171
|
const type = this.getNodeType( builder );
|
|
169
172
|
const propertyName = builder.getPropertyName( varying, NodeShaderStage.VERTEX );
|
|
170
173
|
|
|
171
174
|
// force node run in vertex stage
|
|
172
|
-
builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX,
|
|
175
|
+
builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, properties.node, type, propertyName );
|
|
173
176
|
|
|
174
|
-
properties
|
|
177
|
+
properties[ propertyKey ] = propertyName;
|
|
175
178
|
|
|
176
179
|
}
|
|
177
180
|
|
|
@@ -211,14 +214,14 @@ addMethodChaining( 'toVertexStage', vertexStage );
|
|
|
211
214
|
|
|
212
215
|
addMethodChaining( 'varying', ( ...params ) => { // @deprecated, r173
|
|
213
216
|
|
|
214
|
-
|
|
217
|
+
warn( 'TSL: .varying() has been renamed to .toVarying().' );
|
|
215
218
|
return varying( ...params );
|
|
216
219
|
|
|
217
220
|
} );
|
|
218
221
|
|
|
219
222
|
addMethodChaining( 'vertexStage', ( ...params ) => { // @deprecated, r173
|
|
220
223
|
|
|
221
|
-
|
|
224
|
+
warn( 'TSL: .vertexStage() has been renamed to .toVertexStage().' );
|
|
222
225
|
return varying( ...params );
|
|
223
226
|
|
|
224
227
|
} );
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Fn, If, vec4 } from '../tsl/TSLBase.js';
|
|
2
2
|
import { mix, min, step } from '../math/MathNode.js';
|
|
3
|
+
import { warn } from '../../utils.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Represents a "Color Burn" blend mode.
|
|
@@ -143,7 +144,7 @@ export const blendColor = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
|
|
|
143
144
|
* @param {Node<vec4>} color - The input color with non-premultiplied alpha.
|
|
144
145
|
* @return {Node<vec4>} The color with premultiplied alpha.
|
|
145
146
|
*/
|
|
146
|
-
export const
|
|
147
|
+
export const premultiplyAlpha = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
147
148
|
|
|
148
149
|
return vec4( color.rgb.mul( color.a ), color.a );
|
|
149
150
|
|
|
@@ -162,7 +163,7 @@ export const premult = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
|
162
163
|
* @param {Node<vec4>} color - The input color with premultiplied alpha.
|
|
163
164
|
* @return {Node<vec4>} The color with non-premultiplied alpha.
|
|
164
165
|
*/
|
|
165
|
-
export const
|
|
166
|
+
export const unpremultiplyAlpha = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
166
167
|
|
|
167
168
|
If( color.a.equal( 0.0 ), () => vec4( 0.0 ) );
|
|
168
169
|
|
|
@@ -183,7 +184,7 @@ export const unpremult = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
|
183
184
|
*/
|
|
184
185
|
export const burn = ( ...params ) => { // @deprecated, r171
|
|
185
186
|
|
|
186
|
-
|
|
187
|
+
warn( 'TSL: "burn" has been renamed. Use "blendBurn" instead.' );
|
|
187
188
|
return blendBurn( params );
|
|
188
189
|
|
|
189
190
|
};
|
|
@@ -198,7 +199,7 @@ export const burn = ( ...params ) => { // @deprecated, r171
|
|
|
198
199
|
*/
|
|
199
200
|
export const dodge = ( ...params ) => { // @deprecated, r171
|
|
200
201
|
|
|
201
|
-
|
|
202
|
+
warn( 'TSL: "dodge" has been renamed. Use "blendDodge" instead.' );
|
|
202
203
|
return blendDodge( params );
|
|
203
204
|
|
|
204
205
|
};
|
|
@@ -213,7 +214,7 @@ export const dodge = ( ...params ) => { // @deprecated, r171
|
|
|
213
214
|
*/
|
|
214
215
|
export const screen = ( ...params ) => { // @deprecated, r171
|
|
215
216
|
|
|
216
|
-
|
|
217
|
+
warn( 'TSL: "screen" has been renamed. Use "blendScreen" instead.' );
|
|
217
218
|
return blendScreen( params );
|
|
218
219
|
|
|
219
220
|
};
|
|
@@ -228,7 +229,7 @@ export const screen = ( ...params ) => { // @deprecated, r171
|
|
|
228
229
|
*/
|
|
229
230
|
export const overlay = ( ...params ) => { // @deprecated, r171
|
|
230
231
|
|
|
231
|
-
|
|
232
|
+
warn( 'TSL: "overlay" has been renamed. Use "blendOverlay" instead.' );
|
|
232
233
|
return blendOverlay( params );
|
|
233
234
|
|
|
234
235
|
};
|
|
@@ -11,7 +11,7 @@ import { Fn, nodeProxy, float, vec2 } from '../tsl/TSLBase.js';
|
|
|
11
11
|
const dHdxy_fwd = Fn( ( { textureNode, bumpScale } ) => {
|
|
12
12
|
|
|
13
13
|
// It's used to preserve the same TextureNode instance
|
|
14
|
-
const sampleTexture = ( callback ) => textureNode.
|
|
14
|
+
const sampleTexture = ( callback ) => textureNode.isolate().context( { getUV: ( texNode ) => callback( texNode.uvNode || uv() ), forceUVContext: true } );
|
|
15
15
|
|
|
16
16
|
const Hll = float( sampleTexture( ( uvNode ) => uvNode ) );
|
|
17
17
|
|
|
@@ -82,7 +82,7 @@ export const hue = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
|
|
|
82
82
|
* @function
|
|
83
83
|
* @param {Node<vec3>} color - The color value to compute the luminance for.
|
|
84
84
|
* @param {?Node<vec3>} luminanceCoefficients - The luminance coefficients. By default predefined values of the current working color space are used.
|
|
85
|
-
* @return {Node<
|
|
85
|
+
* @return {Node<float>} The luminance.
|
|
86
86
|
*/
|
|
87
87
|
export const luminance = (
|
|
88
88
|
color,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
|
-
import { nodeImmutable, float } from '../tsl/TSLBase.js';
|
|
2
|
+
import { nodeImmutable, float, Fn } from '../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
|
-
import { BackSide,
|
|
4
|
+
import { BackSide, DoubleSide } from '../../constants.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* This node can be used to evaluate whether a primitive is front or back facing.
|
|
@@ -36,15 +36,15 @@ class FrontFacingNode extends Node {
|
|
|
36
36
|
|
|
37
37
|
generate( builder ) {
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
if ( builder.shaderStage !== 'fragment' ) return 'true';
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
//
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
const { material } = builder;
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
if ( material.side === BackSide ) {
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
return 'false';
|
|
48
48
|
|
|
49
49
|
}
|
|
50
50
|
|
|
@@ -72,3 +72,31 @@ export const frontFacing = /*@__PURE__*/ nodeImmutable( FrontFacingNode );
|
|
|
72
72
|
* @type {Node<float>}
|
|
73
73
|
*/
|
|
74
74
|
export const faceDirection = /*@__PURE__*/ float( frontFacing ).mul( 2.0 ).sub( 1.0 );
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Converts a direction vector to a face direction vector based on the material's side.
|
|
78
|
+
*
|
|
79
|
+
* If the material is set to `BackSide`, the direction is inverted.
|
|
80
|
+
* If the material is set to `DoubleSide`, the direction is multiplied by `faceDirection`.
|
|
81
|
+
*
|
|
82
|
+
* @tsl
|
|
83
|
+
* @param {Node<vec3>} direction - The direction vector to convert.
|
|
84
|
+
* @returns {Node<vec3>} The converted direction vector.
|
|
85
|
+
*/
|
|
86
|
+
export const directionToFaceDirection = /*@__PURE__*/ Fn( ( [ direction ], { material } ) => {
|
|
87
|
+
|
|
88
|
+
const side = material.side;
|
|
89
|
+
|
|
90
|
+
if ( side === BackSide ) {
|
|
91
|
+
|
|
92
|
+
direction = direction.mul( - 1.0 );
|
|
93
|
+
|
|
94
|
+
} else if ( side === DoubleSide ) {
|
|
95
|
+
|
|
96
|
+
direction = direction.mul( faceDirection );
|
|
97
|
+
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return direction;
|
|
101
|
+
|
|
102
|
+
} );
|