@plastic-software/three 0.179.0 → 0.181.1
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/build/three.cjs +1108 -591
- package/build/three.core.js +616 -345
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +488 -250
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +37 -6
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6576 -2152
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6575 -2151
- 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 +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +8 -8
- 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 +1 -1
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- 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 +9 -2
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- 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 +6 -10
- 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/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 +3 -3
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -2
- 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 +22 -5
- 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 +4 -4
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- 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/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +1 -1
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- 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 +1 -1
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
- package/examples/jsm/transpiler/TSLEncoder.js +9 -10
- package/examples/jsm/transpiler/WGSLEncoder.js +24 -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 +7 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
- 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 +49 -35
- package/examples/jsm/tsl/display/OutlineNode.js +13 -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 +124 -7
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- 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 +4 -2
- package/src/Three.TSL.js +36 -5
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +2 -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 +7 -6
- package/src/animation/PropertyBinding.js +12 -11
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +11 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +3 -2
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- 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 +268 -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/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 +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 +3 -2
- package/src/loaders/ImageBitmapLoader.js +5 -4
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +3 -3
- package/src/loaders/LoadingManager.js +25 -3
- 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 +1 -0
- 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 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/NodeMaterial.js +62 -22
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +3 -2
- 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/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +7 -7
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +68 -66
- package/src/math/Spherical.js +1 -1
- package/src/nodes/Nodes.js +4 -1
- package/src/nodes/TSL.js +4 -1
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +133 -7
- 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 +5 -4
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +18 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +3 -2
- package/src/nodes/accessors/SceneNode.js +2 -1
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +22 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureNode.js +130 -44
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +1 -0
- package/src/nodes/core/AssignNode.js +4 -3
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +29 -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} +40 -7
- package/src/nodes/core/Node.js +152 -31
- package/src/nodes/core/NodeBuilder.js +183 -35
- 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 -91
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +43 -16
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformNode.js +18 -10
- package/src/nodes/core/VarNode.js +70 -33
- package/src/nodes/core/VaryingNode.js +3 -2
- package/src/nodes/display/BlendModes.js +5 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +2 -1
- package/src/nodes/display/PassNode.js +52 -11
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -14
- 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 +42 -12
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +3 -2
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +17 -5
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
- package/src/nodes/lighting/EnvironmentNode.js +6 -6
- package/src/nodes/lighting/LightsNode.js +3 -4
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ShadowFilterNode.js +2 -0
- package/src/nodes/lighting/ShadowNode.js +75 -8
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +24 -7
- package/src/nodes/math/MathNode.js +25 -19
- package/src/nodes/math/OperatorNode.js +7 -5
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +5 -2
- package/src/nodes/tsl/TSLCore.js +460 -159
- package/src/nodes/utils/DebugNode.js +2 -1
- package/src/nodes/utils/EventNode.js +36 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +13 -3
- package/src/nodes/utils/ReflectorNode.js +58 -7
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/objects/BatchedMesh.js +2 -2
- 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 +48 -41
- 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 +2 -1
- package/src/renderers/common/Bindings.js +58 -2
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.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 +6 -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 +16 -2
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +473 -245
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +50 -12
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +121 -45
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +42 -22
- package/src/renderers/common/extras/PMREMGenerator.js +160 -65
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- 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 +7 -15
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLCapabilities.js +2 -1
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +15 -14
- package/src/renderers/webgl/WebGLPrograms.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +15 -14
- package/src/renderers/webgl/WebGLTextures.js +19 -14
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +199 -167
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +181 -25
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +7 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +169 -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 +153 -123
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +142 -50
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +53 -34
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +260 -99
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
- package/src/renderers/webxr/WebXRManager.js +42 -26
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/Source.js +3 -2
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
import TempNode from '../core/TempNode.js';
|
|
2
|
+
import { nodeProxyIntent } from '../tsl/TSLCore.js';
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* This class represents a set of built in WGSL shader functions that sync
|
|
7
|
+
* synchronously execute an operation across a subgroup, or 'warp', of compute
|
|
8
|
+
* or fragment shader invocations within a workgroup. Typically, these functions
|
|
9
|
+
* will synchronously execute an operation using data from all active invocations
|
|
10
|
+
* within the subgroup, then broadcast that result to all active invocations. In
|
|
11
|
+
* other graphics APIs, subgroup functions are also referred to as wave intrinsics
|
|
12
|
+
* (DirectX/HLSL) or warp intrinsics (CUDA).
|
|
13
|
+
*
|
|
14
|
+
* @augments TempNode
|
|
15
|
+
*/
|
|
16
|
+
class SubgroupFunctionNode extends TempNode {
|
|
17
|
+
|
|
18
|
+
static get type() {
|
|
19
|
+
|
|
20
|
+
return 'SubgroupFunctionNode';
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Constructs a new function node.
|
|
26
|
+
*
|
|
27
|
+
* @param {string} method - The subgroup/wave intrinsic method to construct.
|
|
28
|
+
* @param {Node} [aNode=null] - The method's first argument.
|
|
29
|
+
* @param {Node} [bNode=null] - The method's second argument.
|
|
30
|
+
*/
|
|
31
|
+
constructor( method, aNode = null, bNode = null ) {
|
|
32
|
+
|
|
33
|
+
super();
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The subgroup/wave intrinsic method to construct.
|
|
37
|
+
*
|
|
38
|
+
* @type {String}
|
|
39
|
+
*/
|
|
40
|
+
this.method = method;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The method's first argument.
|
|
44
|
+
*
|
|
45
|
+
* @type {Node}
|
|
46
|
+
*/
|
|
47
|
+
this.aNode = aNode;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The method's second argument.
|
|
51
|
+
*
|
|
52
|
+
* @type {Node}
|
|
53
|
+
*/
|
|
54
|
+
this.bNode = bNode;
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
getInputType( builder ) {
|
|
59
|
+
|
|
60
|
+
const aType = this.aNode ? this.aNode.getNodeType( builder ) : null;
|
|
61
|
+
const bType = this.bNode ? this.bNode.getNodeType( builder ) : null;
|
|
62
|
+
|
|
63
|
+
const aLen = builder.isMatrix( aType ) ? 0 : builder.getTypeLength( aType );
|
|
64
|
+
const bLen = builder.isMatrix( bType ) ? 0 : builder.getTypeLength( bType );
|
|
65
|
+
|
|
66
|
+
if ( aLen > bLen ) {
|
|
67
|
+
|
|
68
|
+
return aType;
|
|
69
|
+
|
|
70
|
+
} else {
|
|
71
|
+
|
|
72
|
+
return bType;
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
getNodeType( builder ) {
|
|
79
|
+
|
|
80
|
+
const method = this.method;
|
|
81
|
+
|
|
82
|
+
if ( method === SubgroupFunctionNode.SUBGROUP_ELECT ) {
|
|
83
|
+
|
|
84
|
+
return 'bool';
|
|
85
|
+
|
|
86
|
+
} else if ( method === SubgroupFunctionNode.SUBGROUP_BALLOT ) {
|
|
87
|
+
|
|
88
|
+
return 'uvec4';
|
|
89
|
+
|
|
90
|
+
} else {
|
|
91
|
+
|
|
92
|
+
return this.getInputType( builder );
|
|
93
|
+
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
generate( builder, output ) {
|
|
99
|
+
|
|
100
|
+
const method = this.method;
|
|
101
|
+
|
|
102
|
+
const type = this.getNodeType( builder );
|
|
103
|
+
const inputType = this.getInputType( builder );
|
|
104
|
+
|
|
105
|
+
const a = this.aNode;
|
|
106
|
+
const b = this.bNode;
|
|
107
|
+
|
|
108
|
+
const params = [];
|
|
109
|
+
|
|
110
|
+
if (
|
|
111
|
+
method === SubgroupFunctionNode.SUBGROUP_BROADCAST ||
|
|
112
|
+
method === SubgroupFunctionNode.SUBGROUP_SHUFFLE ||
|
|
113
|
+
method === SubgroupFunctionNode.QUAD_BROADCAST
|
|
114
|
+
) {
|
|
115
|
+
|
|
116
|
+
const bType = b.getNodeType( builder );
|
|
117
|
+
|
|
118
|
+
params.push(
|
|
119
|
+
a.build( builder, type ),
|
|
120
|
+
b.build( builder, bType === 'float' ? 'int' : type )
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
} else if (
|
|
124
|
+
method === SubgroupFunctionNode.SUBGROUP_SHUFFLE_XOR ||
|
|
125
|
+
method === SubgroupFunctionNode.SUBGROUP_SHUFFLE_DOWN ||
|
|
126
|
+
method === SubgroupFunctionNode.SUBGROUP_SHUFFLE_UP
|
|
127
|
+
) {
|
|
128
|
+
|
|
129
|
+
params.push(
|
|
130
|
+
a.build( builder, type ),
|
|
131
|
+
b.build( builder, 'uint' )
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
} else {
|
|
135
|
+
|
|
136
|
+
if ( a !== null ) params.push( a.build( builder, inputType ) );
|
|
137
|
+
if ( b !== null ) params.push( b.build( builder, inputType ) );
|
|
138
|
+
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const paramsString = params.length === 0 ? '()' : `( ${params.join( ', ' )} )`;
|
|
142
|
+
|
|
143
|
+
return builder.format( `${ builder.getMethod( method, type ) }${paramsString}`, type, output );
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
serialize( data ) {
|
|
150
|
+
|
|
151
|
+
super.serialize( data );
|
|
152
|
+
|
|
153
|
+
data.method = this.method;
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
deserialize( data ) {
|
|
158
|
+
|
|
159
|
+
super.deserialize( data );
|
|
160
|
+
|
|
161
|
+
this.method = data.method;
|
|
162
|
+
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// 0 inputs
|
|
168
|
+
SubgroupFunctionNode.SUBGROUP_ELECT = 'subgroupElect';
|
|
169
|
+
|
|
170
|
+
// 1 input
|
|
171
|
+
SubgroupFunctionNode.SUBGROUP_BALLOT = 'subgroupBallot';
|
|
172
|
+
SubgroupFunctionNode.SUBGROUP_ADD = 'subgroupAdd';
|
|
173
|
+
SubgroupFunctionNode.SUBGROUP_INCLUSIVE_ADD = 'subgroupInclusiveAdd';
|
|
174
|
+
SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_AND = 'subgroupExclusiveAdd';
|
|
175
|
+
SubgroupFunctionNode.SUBGROUP_MUL = 'subgroupMul';
|
|
176
|
+
SubgroupFunctionNode.SUBGROUP_INCLUSIVE_MUL = 'subgroupInclusiveMul';
|
|
177
|
+
SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_MUL = 'subgroupExclusiveMul';
|
|
178
|
+
SubgroupFunctionNode.SUBGROUP_AND = 'subgroupAnd';
|
|
179
|
+
SubgroupFunctionNode.SUBGROUP_OR = 'subgroupOr';
|
|
180
|
+
SubgroupFunctionNode.SUBGROUP_XOR = 'subgroupXor';
|
|
181
|
+
SubgroupFunctionNode.SUBGROUP_MIN = 'subgroupMin';
|
|
182
|
+
SubgroupFunctionNode.SUBGROUP_MAX = 'subgroupMax';
|
|
183
|
+
SubgroupFunctionNode.SUBGROUP_ALL = 'subgroupAll';
|
|
184
|
+
SubgroupFunctionNode.SUBGROUP_ANY = 'subgroupAny';
|
|
185
|
+
SubgroupFunctionNode.SUBGROUP_BROADCAST_FIRST = 'subgroupBroadcastFirst';
|
|
186
|
+
SubgroupFunctionNode.QUAD_SWAP_X = 'quadSwapX';
|
|
187
|
+
SubgroupFunctionNode.QUAD_SWAP_Y = 'quadSwapY';
|
|
188
|
+
SubgroupFunctionNode.QUAD_SWAP_DIAGONAL = 'quadSwapDiagonal';
|
|
189
|
+
|
|
190
|
+
// 2 inputs
|
|
191
|
+
SubgroupFunctionNode.SUBGROUP_BROADCAST = 'subgroupBroadcast';
|
|
192
|
+
SubgroupFunctionNode.SUBGROUP_SHUFFLE = 'subgroupShuffle';
|
|
193
|
+
SubgroupFunctionNode.SUBGROUP_SHUFFLE_XOR = 'subgroupShuffleXor';
|
|
194
|
+
SubgroupFunctionNode.SUBGROUP_SHUFFLE_UP = 'subgroupShuffleUp';
|
|
195
|
+
SubgroupFunctionNode.SUBGROUP_SHUFFLE_DOWN = 'subgroupShuffleDown';
|
|
196
|
+
SubgroupFunctionNode.QUAD_BROADCAST = 'quadBroadcast';
|
|
197
|
+
|
|
198
|
+
export default SubgroupFunctionNode;
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Returns true if this invocation has the lowest subgroup_invocation_id
|
|
204
|
+
* among active invocations in the subgroup.
|
|
205
|
+
*
|
|
206
|
+
* @tsl
|
|
207
|
+
* @method
|
|
208
|
+
* @return {bool} The result of the computation.
|
|
209
|
+
*/
|
|
210
|
+
export const subgroupElect = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ELECT ).setParameterLength( 0 );
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Returns a set of bitfields where the bit corresponding to subgroup_invocation_id
|
|
214
|
+
* is 1 if pred is true for that active invocation and 0 otherwise.
|
|
215
|
+
*
|
|
216
|
+
* @tsl
|
|
217
|
+
* @method
|
|
218
|
+
* @param {bool} pred - A boolean that sets the bit corresponding to the invocations subgroup invocation id.
|
|
219
|
+
* @return {vec4<u32>}- A bitfield corresponding to the pred value of each subgroup invocation.
|
|
220
|
+
*/
|
|
221
|
+
export const subgroupBallot = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BALLOT ).setParameterLength( 1 );
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* A reduction that adds e among all active invocations and returns that result.
|
|
225
|
+
*
|
|
226
|
+
* @tsl
|
|
227
|
+
* @method
|
|
228
|
+
* @param {number} e - The value provided to the reduction by the current invocation.
|
|
229
|
+
* @return {number} The accumulated result of the reduction operation.
|
|
230
|
+
*/
|
|
231
|
+
export const subgroupAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ADD ).setParameterLength( 1 );
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* An inclusive scan returning the sum of e for all active invocations with subgroup_invocation_id less than or equal to this invocation.
|
|
235
|
+
*
|
|
236
|
+
* @tsl
|
|
237
|
+
* @method
|
|
238
|
+
* @param {number} e - The value provided to the inclusive scan by the current invocation.
|
|
239
|
+
* @return {number} The accumulated result of the inclusive scan operation.
|
|
240
|
+
*/
|
|
241
|
+
export const subgroupInclusiveAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_INCLUSIVE_ADD ).setParameterLength( 1 );
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* An exclusive scan that returns the sum of e for all active invocations with subgroup_invocation_id less than this invocation.
|
|
245
|
+
*
|
|
246
|
+
* @tsl
|
|
247
|
+
* @method
|
|
248
|
+
* @param {number} e - The value provided to the exclusive scan by the current invocation.
|
|
249
|
+
* @return {number} The accumulated result of the exclusive scan operation.
|
|
250
|
+
*/
|
|
251
|
+
export const subgroupExclusiveAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_AND ).setParameterLength( 1 );
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* A reduction that multiplies e among all active invocations and returns that result.
|
|
255
|
+
*
|
|
256
|
+
* @tsl
|
|
257
|
+
* @method
|
|
258
|
+
* @param {number} e - The value provided to the reduction by the current invocation.
|
|
259
|
+
* @return {number} The accumulated result of the reduction operation.
|
|
260
|
+
*/
|
|
261
|
+
export const subgroupMul = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_MUL ).setParameterLength( 1 );
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* An inclusive scan returning the product of e for all active invocations with subgroup_invocation_id less than or equal to this invocation.
|
|
265
|
+
*
|
|
266
|
+
* @tsl
|
|
267
|
+
* @method
|
|
268
|
+
* @param {number} e - The value provided to the inclusive scan by the current invocation.
|
|
269
|
+
* @return {number} The accumulated result of the inclusive scan operation.
|
|
270
|
+
*/
|
|
271
|
+
export const subgroupInclusiveMul = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_INCLUSIVE_MUL ).setParameterLength( 1 );
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* An exclusive scan that returns the product of e for all active invocations with subgroup_invocation_id less than this invocation.
|
|
275
|
+
*
|
|
276
|
+
* @tsl
|
|
277
|
+
* @method
|
|
278
|
+
* @param {number} e - The value provided to the exclusive scan by the current invocation.
|
|
279
|
+
* @return {number} The accumulated result of the exclusive scan operation.
|
|
280
|
+
*/
|
|
281
|
+
export const subgroupExclusiveMul = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_MUL ).setParameterLength( 1 );
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* A reduction that performs a bitwise and of e among all active invocations and returns that result.
|
|
285
|
+
*
|
|
286
|
+
* @tsl
|
|
287
|
+
* @method
|
|
288
|
+
* @param {number} e - The value provided to the reduction by the current invocation.
|
|
289
|
+
* @return {number} The result of the reduction operation.
|
|
290
|
+
*/
|
|
291
|
+
export const subgroupAnd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_AND ).setParameterLength( 1 );
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* A reduction that performs a bitwise or of e among all active invocations and returns that result.
|
|
295
|
+
*
|
|
296
|
+
* @tsl
|
|
297
|
+
* @method
|
|
298
|
+
* @param {number} e - The value provided to the reduction by the current invocation.
|
|
299
|
+
* @return {number} The result of the reduction operation.
|
|
300
|
+
*/
|
|
301
|
+
export const subgroupOr = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_OR ).setParameterLength( 1 );
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* A reduction that performs a bitwise xor of e among all active invocations and returns that result.
|
|
305
|
+
*
|
|
306
|
+
* @tsl
|
|
307
|
+
* @method
|
|
308
|
+
* @param {number} e - The value provided to the reduction by the current invocation.
|
|
309
|
+
* @return {number} The result of the reduction operation.
|
|
310
|
+
*/
|
|
311
|
+
export const subgroupXor = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_XOR ).setParameterLength( 1 );
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* A reduction that performs a min of e among all active invocations and returns that result.
|
|
315
|
+
*
|
|
316
|
+
* @tsl
|
|
317
|
+
* @method
|
|
318
|
+
* @param {number} e - The value provided to the reduction by the current invocation.
|
|
319
|
+
* @return {number} The result of the reduction operation.
|
|
320
|
+
*/
|
|
321
|
+
export const subgroupMin = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_MIN ).setParameterLength( 1 );
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* A reduction that performs a max of e among all active invocations and returns that result.
|
|
325
|
+
*
|
|
326
|
+
* @tsl
|
|
327
|
+
* @method
|
|
328
|
+
* @param {number} e - The value provided to the reduction by the current invocation.
|
|
329
|
+
* @return {number} The result of the reduction operation.
|
|
330
|
+
*/
|
|
331
|
+
export const subgroupMax = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_MAX ).setParameterLength( 1 );
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Returns true if e is true for all active invocations in the subgroup.
|
|
335
|
+
*
|
|
336
|
+
* @tsl
|
|
337
|
+
* @method
|
|
338
|
+
* @return {bool} The result of the computation.
|
|
339
|
+
*/
|
|
340
|
+
export const subgroupAll = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ALL ).setParameterLength( 0 );
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Returns true if e is true for any active invocation in the subgroup
|
|
344
|
+
*
|
|
345
|
+
* @tsl
|
|
346
|
+
* @method
|
|
347
|
+
* @return {bool} The result of the computation.
|
|
348
|
+
*/
|
|
349
|
+
export const subgroupAny = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ANY ).setParameterLength( 0 );
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* Broadcasts e from the active invocation with the lowest subgroup_invocation_id in the subgroup to all other active invocations.
|
|
353
|
+
*
|
|
354
|
+
* @tsl
|
|
355
|
+
* @method
|
|
356
|
+
* @param {number} e - The value to broadcast from the lowest subgroup invocation.
|
|
357
|
+
* @param {number} id - The subgroup invocation to broadcast from.
|
|
358
|
+
* @return {number} The broadcast value.
|
|
359
|
+
*/
|
|
360
|
+
export const subgroupBroadcastFirst = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BROADCAST_FIRST ).setParameterLength( 2 );
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* Swaps e between invocations in the quad in the X direction.
|
|
364
|
+
*
|
|
365
|
+
* @tsl
|
|
366
|
+
* @method
|
|
367
|
+
* @param {number} e - The value to swap from the current invocation.
|
|
368
|
+
* @return {number} The value received from the swap operation.
|
|
369
|
+
*/
|
|
370
|
+
export const quadSwapX = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_SWAP_X ).setParameterLength( 1 );
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Swaps e between invocations in the quad in the Y direction.
|
|
374
|
+
*
|
|
375
|
+
* @tsl
|
|
376
|
+
* @method
|
|
377
|
+
* @param {number} e - The value to swap from the current invocation.
|
|
378
|
+
* @return {number} The value received from the swap operation.
|
|
379
|
+
*/
|
|
380
|
+
export const quadSwapY = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_SWAP_Y ).setParameterLength( 1 );
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Swaps e between invocations in the quad diagonally.
|
|
384
|
+
*
|
|
385
|
+
* @tsl
|
|
386
|
+
* @method
|
|
387
|
+
* @param {number} e - The value to swap from the current invocation.
|
|
388
|
+
* @return {number} The value received from the swap operation.
|
|
389
|
+
*/
|
|
390
|
+
export const quadSwapDiagonal = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_SWAP_DIAGONAL ).setParameterLength( 1 );
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Broadcasts e from the invocation whose subgroup_invocation_id matches id, to all active invocations.
|
|
394
|
+
*
|
|
395
|
+
* @tsl
|
|
396
|
+
* @method
|
|
397
|
+
* @param {number} e - The value to broadcast from subgroup invocation 'id'.
|
|
398
|
+
* @param {number} id - The subgroup invocation to broadcast from.
|
|
399
|
+
* @return {number} The broadcast value.
|
|
400
|
+
*/
|
|
401
|
+
export const subgroupBroadcast = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BROADCAST ).setParameterLength( 2 );
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* Returns v from the active invocation whose subgroup_invocation_id matches id
|
|
405
|
+
*
|
|
406
|
+
* @tsl
|
|
407
|
+
* @method
|
|
408
|
+
* @param {number} v - The value to return from subgroup invocation id^mask.
|
|
409
|
+
* @param {number} id - The subgroup invocation which returns the value v.
|
|
410
|
+
* @return {number} The broadcast value.
|
|
411
|
+
*/
|
|
412
|
+
export const subgroupShuffle = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE ).setParameterLength( 2 );
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* Returns v from the active invocation whose subgroup_invocation_id matches subgroup_invocation_id ^ mask.
|
|
416
|
+
*
|
|
417
|
+
* @tsl
|
|
418
|
+
* @method
|
|
419
|
+
* @param {number} v - The value to return from subgroup invocation id^mask.
|
|
420
|
+
* @param {number} mask - A bitmask that determines the target invocation via a XOR operation.
|
|
421
|
+
* @return {number} The broadcast value.
|
|
422
|
+
*/
|
|
423
|
+
export const subgroupShuffleXor = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE_XOR ).setParameterLength( 2 );
|
|
424
|
+
|
|
425
|
+
/**
|
|
426
|
+
* Returns v from the active invocation whose subgroup_invocation_id matches subgroup_invocation_id - delta
|
|
427
|
+
*
|
|
428
|
+
* @tsl
|
|
429
|
+
* @method
|
|
430
|
+
* @param {number} v - The value to return from subgroup invocation id^mask.
|
|
431
|
+
* @param {number} delta - A value that offsets the current in.
|
|
432
|
+
* @return {number} The broadcast value.
|
|
433
|
+
*/
|
|
434
|
+
export const subgroupShuffleUp = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE_UP ).setParameterLength( 2 );
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* Returns v from the active invocation whose subgroup_invocation_id matches subgroup_invocation_id + delta
|
|
438
|
+
*
|
|
439
|
+
* @tsl
|
|
440
|
+
* @method
|
|
441
|
+
* @param {number} v - The value to return from subgroup invocation id^mask.
|
|
442
|
+
* @param {number} delta - A value that offsets the current subgroup invocation.
|
|
443
|
+
* @return {number} The broadcast value.
|
|
444
|
+
*/
|
|
445
|
+
export const subgroupShuffleDown = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE_DOWN ).setParameterLength( 2 );
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* Broadcasts e from the quad invocation with id equal to id.
|
|
449
|
+
*
|
|
450
|
+
* @tsl
|
|
451
|
+
* @method
|
|
452
|
+
* @param {number} e - The value to broadcast.
|
|
453
|
+
* @return {number} The broadcast value.
|
|
454
|
+
*/
|
|
455
|
+
export const quadBroadcast = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_BROADCAST ).setParameterLength( 1 );
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
2
2
|
import { nodeObject } from '../tsl/TSLCore.js';
|
|
3
3
|
import Node from '../core/Node.js';
|
|
4
|
+
import { warn } from '../../utils.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Represents an element of a 'workgroup' scoped buffer.
|
|
@@ -149,7 +150,7 @@ class WorkgroupInfoNode extends Node {
|
|
|
149
150
|
*/
|
|
150
151
|
label( name ) {
|
|
151
152
|
|
|
152
|
-
|
|
153
|
+
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
|
|
153
154
|
|
|
154
155
|
return this.setName( name );
|
|
155
156
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import LightingNode from './LightingNode.js';
|
|
2
|
-
import {
|
|
2
|
+
import { isolate } from '../core/IsolateNode.js';
|
|
3
3
|
import { roughness, clearcoatRoughness } from '../core/PropertyNode.js';
|
|
4
4
|
import { cameraViewMatrix } from '../accessors/Camera.js';
|
|
5
5
|
import { normalView, clearcoatNormalView, normalWorld } from '../accessors/Normal.js';
|
|
6
6
|
import { positionViewDirection } from '../accessors/Position.js';
|
|
7
|
-
import { float } from '../tsl/TSLBase.js';
|
|
7
|
+
import { float, pow4 } from '../tsl/TSLBase.js';
|
|
8
8
|
import { bentNormalView } from '../accessors/AccessorsUtils.js';
|
|
9
9
|
import { pmremTexture } from '../pmrem/PMREMNode.js';
|
|
10
10
|
import { materialEnvIntensity } from '../accessors/MaterialProperties.js';
|
|
@@ -77,8 +77,8 @@ class EnvironmentNode extends LightingNode {
|
|
|
77
77
|
const radiance = envNode.context( createRadianceContext( roughness, radianceNormalView ) ).mul( materialEnvIntensity );
|
|
78
78
|
const irradiance = envNode.context( createIrradianceContext( normalWorld ) ).mul( Math.PI ).mul( materialEnvIntensity );
|
|
79
79
|
|
|
80
|
-
const isolateRadiance =
|
|
81
|
-
const isolateIrradiance =
|
|
80
|
+
const isolateRadiance = isolate( radiance );
|
|
81
|
+
const isolateIrradiance = isolate( irradiance );
|
|
82
82
|
|
|
83
83
|
//
|
|
84
84
|
|
|
@@ -93,7 +93,7 @@ class EnvironmentNode extends LightingNode {
|
|
|
93
93
|
if ( clearcoatRadiance ) {
|
|
94
94
|
|
|
95
95
|
const clearcoatRadianceContext = envNode.context( createRadianceContext( clearcoatRoughness, clearcoatNormalView ) ).mul( materialEnvIntensity );
|
|
96
|
-
const isolateClearcoatRadiance =
|
|
96
|
+
const isolateClearcoatRadiance = isolate( clearcoatRadianceContext );
|
|
97
97
|
|
|
98
98
|
clearcoatRadiance.addAssign( isolateClearcoatRadiance );
|
|
99
99
|
|
|
@@ -117,7 +117,7 @@ const createRadianceContext = ( roughnessNode, normalViewNode ) => {
|
|
|
117
117
|
reflectVec = positionViewDirection.negate().reflect( normalViewNode );
|
|
118
118
|
|
|
119
119
|
// Mixing the reflection with the normal is more accurate and keeps rough objects from gathering light from behind their tangent plane.
|
|
120
|
-
reflectVec =
|
|
120
|
+
reflectVec = pow4( roughnessNode ).mix( reflectVec, normalViewNode ).normalize();
|
|
121
121
|
|
|
122
122
|
reflectVec = reflectVec.transformDirection( cameraViewMatrix );
|
|
123
123
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
import { nodeObject, property, vec3 } from '../tsl/TSLBase.js';
|
|
3
3
|
import { hashArray } from '../core/NodeUtils.js';
|
|
4
|
+
import { warn } from '../../utils.js';
|
|
4
5
|
|
|
5
6
|
const sortLights = ( lights ) => {
|
|
6
7
|
|
|
@@ -159,7 +160,7 @@ class LightsNode extends Node {
|
|
|
159
160
|
|
|
160
161
|
for ( const lightNode of this._lightNodes ) {
|
|
161
162
|
|
|
162
|
-
hash.push( lightNode.
|
|
163
|
+
hash.push( lightNode.getHash() );
|
|
163
164
|
|
|
164
165
|
}
|
|
165
166
|
|
|
@@ -224,7 +225,7 @@ class LightsNode extends Node {
|
|
|
224
225
|
|
|
225
226
|
if ( lightNodeClass === null ) {
|
|
226
227
|
|
|
227
|
-
|
|
228
|
+
warn( `LightsNode.setupNodeLights: Light node not found for ${ light.constructor.name }` );
|
|
228
229
|
continue;
|
|
229
230
|
|
|
230
231
|
}
|
|
@@ -368,8 +369,6 @@ class LightsNode extends Node {
|
|
|
368
369
|
|
|
369
370
|
}
|
|
370
371
|
|
|
371
|
-
context.material.transparent = true;
|
|
372
|
-
|
|
373
372
|
}
|
|
374
373
|
|
|
375
374
|
totalDiffuseNode.assign( totalDiffuse );
|
|
@@ -279,8 +279,14 @@ class PointShadowNode extends ShadowNode {
|
|
|
279
279
|
|
|
280
280
|
shadow.updateMatrices( light, vp );
|
|
281
281
|
|
|
282
|
+
const currentSceneName = scene.name;
|
|
283
|
+
|
|
284
|
+
scene.name = `Point Light Shadow [ ${ light.name || 'ID: ' + light.id } ] - Face ${ vp + 1 }`;
|
|
285
|
+
|
|
282
286
|
renderer.render( scene, shadow.camera );
|
|
283
287
|
|
|
288
|
+
scene.name = currentSceneName;
|
|
289
|
+
|
|
284
290
|
}
|
|
285
291
|
|
|
286
292
|
//
|
|
@@ -245,6 +245,8 @@ const linearShadowDistance = ( light ) => {
|
|
|
245
245
|
* If not, it creates a new `NodeMaterial` configured for shadow rendering and stores it
|
|
246
246
|
* in the `shadowMaterialLib` for future use.
|
|
247
247
|
*
|
|
248
|
+
* @tsl
|
|
249
|
+
* @function
|
|
248
250
|
* @param {Light} light - The light source for which the shadow material is needed.
|
|
249
251
|
* If the light is a point light, a depth node is calculated
|
|
250
252
|
* using the linear shadow distance.
|