super-three 0.181.0 → 0.184.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +34 -2
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +687 -48
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -24
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -68
- package/src/nodes/TSL.js +7 -7
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +2 -3
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +29 -14
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +17 -5
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
import BRDF_Lambert from './BSDF/BRDF_Lambert.js';
|
|
2
2
|
import BRDF_GGX from './BSDF/BRDF_GGX.js';
|
|
3
3
|
import BRDF_GGX_Multiscatter from './BSDF/BRDF_GGX_Multiscatter.js';
|
|
4
|
-
import
|
|
4
|
+
import DFGLUT from './BSDF/DFGLUT.js';
|
|
5
5
|
import EnvironmentBRDF from './BSDF/EnvironmentBRDF.js';
|
|
6
6
|
import F_Schlick from './BSDF/F_Schlick.js';
|
|
7
7
|
import Schlick_to_F0 from './BSDF/Schlick_to_F0.js';
|
|
8
8
|
import BRDF_Sheen from './BSDF/BRDF_Sheen.js';
|
|
9
9
|
import { LTC_Evaluate, LTC_Uv } from './BSDF/LTC.js';
|
|
10
10
|
import LightingModel from '../core/LightingModel.js';
|
|
11
|
-
import { diffuseColor, specularColor, specularF90, roughness, clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, ior, thickness, transmission, attenuationDistance, attenuationColor, dispersion } from '../core/PropertyNode.js';
|
|
11
|
+
import { diffuseColor, diffuseContribution, specularColor, specularColorBlended, specularF90, roughness, metalness, clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, ior, thickness, transmission, attenuationDistance, attenuationColor, dispersion } from '../core/PropertyNode.js';
|
|
12
12
|
import { normalView, clearcoatNormalView, normalWorld } from '../accessors/Normal.js';
|
|
13
13
|
import { positionViewDirection, positionView, positionWorld } from '../accessors/Position.js';
|
|
14
14
|
import { Fn, float, vec2, vec3, vec4, mat3, If } from '../tsl/TSLBase.js';
|
|
15
|
-
import { select } from '../math/ConditionalNode.js';
|
|
16
15
|
import { mix, normalize, refract, length, clamp, log2, log, exp, smoothstep } from '../math/MathNode.js';
|
|
17
16
|
import { div } from '../math/OperatorNode.js';
|
|
18
17
|
import { cameraPosition, cameraProjectionMatrix, cameraViewMatrix } from '../accessors/Camera.js';
|
|
19
18
|
import { modelWorldMatrix } from '../accessors/ModelNode.js';
|
|
20
19
|
import { screenSize } from '../display/ScreenNode.js';
|
|
21
|
-
import { viewportMipTexture } from '../display/ViewportTextureNode.js';
|
|
20
|
+
import { viewportMipTexture, viewportOpaqueMipTexture } from '../display/ViewportTextureNode.js';
|
|
22
21
|
import { textureBicubicLevel } from '../accessors/TextureBicubic.js';
|
|
23
22
|
import { Loop } from '../utils/LoopNode.js';
|
|
24
23
|
import { BackSide } from '../../constants.js';
|
|
@@ -70,7 +69,7 @@ const applyIorToRoughness = /*@__PURE__*/ Fn( ( [ roughness, ior ] ) => {
|
|
|
70
69
|
} );
|
|
71
70
|
|
|
72
71
|
const viewportBackSideTexture = /*@__PURE__*/ viewportMipTexture();
|
|
73
|
-
const viewportFrontSideTexture = /*@__PURE__*/
|
|
72
|
+
const viewportFrontSideTexture = /*@__PURE__*/ viewportOpaqueMipTexture();
|
|
74
73
|
|
|
75
74
|
const getTransmissionSample = /*@__PURE__*/ Fn( ( [ fragCoord, roughness, ior ], { material } ) => {
|
|
76
75
|
|
|
@@ -313,29 +312,19 @@ const evalIridescence = /*@__PURE__*/ Fn( ( { outsideIOR, eta2, cosTheta1, thinF
|
|
|
313
312
|
//
|
|
314
313
|
|
|
315
314
|
// This is a curve-fit approximation to the "Charlie sheen" BRDF integrated over the hemisphere from
|
|
316
|
-
// Estevez and Kulla 2017, "Production Friendly Microfacet Sheen BRDF".
|
|
317
|
-
// in the Sheen section of https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing
|
|
315
|
+
// Estevez and Kulla 2017, "Production Friendly Microfacet Sheen BRDF".
|
|
318
316
|
const IBLSheenBRDF = /*@__PURE__*/ Fn( ( { normal, viewDir, roughness } ) => {
|
|
319
317
|
|
|
320
318
|
const dotNV = normal.dot( viewDir ).saturate();
|
|
319
|
+
const r2 = roughness.mul( roughness );
|
|
320
|
+
const rInv = roughness.add( 0.1 ).reciprocal();
|
|
321
321
|
|
|
322
|
-
const
|
|
322
|
+
const a = float( - 1.9362 ).add( roughness.mul( 1.0678 ) ).add( r2.mul( 0.4573 ) ).sub( rInv.mul( 0.8469 ) );
|
|
323
|
+
const b = float( - 0.6014 ).add( roughness.mul( 0.5538 ) ).sub( r2.mul( 0.4670 ) ).sub( rInv.mul( 0.1255 ) );
|
|
323
324
|
|
|
324
|
-
const
|
|
325
|
-
roughness.lessThan( 0.25 ),
|
|
326
|
-
float( - 339.2 ).mul( r2 ).add( float( 161.4 ).mul( roughness ) ).sub( 25.9 ),
|
|
327
|
-
float( - 8.48 ).mul( r2 ).add( float( 14.3 ).mul( roughness ) ).sub( 9.95 )
|
|
328
|
-
);
|
|
329
|
-
|
|
330
|
-
const b = select(
|
|
331
|
-
roughness.lessThan( 0.25 ),
|
|
332
|
-
float( 44.0 ).mul( r2 ).sub( float( 23.7 ).mul( roughness ) ).add( 3.26 ),
|
|
333
|
-
float( 1.97 ).mul( r2 ).sub( float( 3.27 ).mul( roughness ) ).add( 0.72 )
|
|
334
|
-
);
|
|
335
|
-
|
|
336
|
-
const DG = select( roughness.lessThan( 0.25 ), 0.0, float( 0.1 ).mul( roughness ).sub( 0.025 ) ).add( a.mul( dotNV ).add( b ).exp() );
|
|
325
|
+
const DG = a.mul( dotNV ).add( b ).exp();
|
|
337
326
|
|
|
338
|
-
return DG.
|
|
327
|
+
return DG.saturate();
|
|
339
328
|
|
|
340
329
|
} );
|
|
341
330
|
|
|
@@ -468,6 +457,22 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
468
457
|
*/
|
|
469
458
|
this.iridescenceF0 = null;
|
|
470
459
|
|
|
460
|
+
/**
|
|
461
|
+
* The iridescence F0 dielectric.
|
|
462
|
+
*
|
|
463
|
+
* @type {?Node}
|
|
464
|
+
* @default null
|
|
465
|
+
*/
|
|
466
|
+
this.iridescenceF0Dielectric = null;
|
|
467
|
+
|
|
468
|
+
/**
|
|
469
|
+
* The iridescence F0 metallic.
|
|
470
|
+
*
|
|
471
|
+
* @type {?Node}
|
|
472
|
+
* @default null
|
|
473
|
+
*/
|
|
474
|
+
this.iridescenceF0Metallic = null;
|
|
475
|
+
|
|
471
476
|
}
|
|
472
477
|
|
|
473
478
|
/**
|
|
@@ -497,7 +502,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
497
502
|
|
|
498
503
|
const dotNVi = normalView.dot( positionViewDirection ).clamp();
|
|
499
504
|
|
|
500
|
-
|
|
505
|
+
const iridescenceFresnelDielectric = evalIridescence( {
|
|
501
506
|
outsideIOR: float( 1.0 ),
|
|
502
507
|
eta2: iridescenceIOR,
|
|
503
508
|
cosTheta1: dotNVi,
|
|
@@ -505,7 +510,20 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
505
510
|
baseF0: specularColor
|
|
506
511
|
} );
|
|
507
512
|
|
|
508
|
-
|
|
513
|
+
const iridescenceFresnelMetallic = evalIridescence( {
|
|
514
|
+
outsideIOR: float( 1.0 ),
|
|
515
|
+
eta2: iridescenceIOR,
|
|
516
|
+
cosTheta1: dotNVi,
|
|
517
|
+
thinFilmThickness: iridescenceThickness,
|
|
518
|
+
baseF0: diffuseColor.rgb
|
|
519
|
+
} );
|
|
520
|
+
|
|
521
|
+
this.iridescenceFresnel = mix( iridescenceFresnelDielectric, iridescenceFresnelMetallic, metalness );
|
|
522
|
+
|
|
523
|
+
this.iridescenceF0Dielectric = Schlick_to_F0( { f: iridescenceFresnelDielectric, f90: 1.0, dotVH: dotNVi } );
|
|
524
|
+
this.iridescenceF0Metallic = Schlick_to_F0( { f: iridescenceFresnelMetallic, f90: 1.0, dotVH: dotNVi } );
|
|
525
|
+
|
|
526
|
+
this.iridescenceF0 = mix( this.iridescenceF0Dielectric, this.iridescenceF0Metallic, metalness );
|
|
509
527
|
|
|
510
528
|
}
|
|
511
529
|
|
|
@@ -521,8 +539,8 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
521
539
|
n,
|
|
522
540
|
v,
|
|
523
541
|
roughness,
|
|
524
|
-
|
|
525
|
-
|
|
542
|
+
diffuseContribution,
|
|
543
|
+
specularColorBlended,
|
|
526
544
|
specularF90, // specularF90
|
|
527
545
|
position, // positionWorld
|
|
528
546
|
modelWorldMatrix, // modelMatrix
|
|
@@ -549,13 +567,13 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
549
567
|
// Approximates multi-scattering in order to preserve energy.
|
|
550
568
|
// http://www.jcgt.org/published/0008/01/03/
|
|
551
569
|
|
|
552
|
-
computeMultiscattering( singleScatter, multiScatter, specularF90 ) {
|
|
570
|
+
computeMultiscattering( singleScatter, multiScatter, specularF90, f0, iridescenceF0 = null ) {
|
|
553
571
|
|
|
554
572
|
const dotNV = normalView.dot( positionViewDirection ).clamp(); // @ TODO: Move to core dotNV
|
|
555
573
|
|
|
556
|
-
const fab =
|
|
574
|
+
const fab = DFGLUT( { roughness, dotNV } );
|
|
557
575
|
|
|
558
|
-
const Fr =
|
|
576
|
+
const Fr = iridescenceF0 ? iridescence.mix( f0, iridescenceF0 ) : f0;
|
|
559
577
|
|
|
560
578
|
const FssEss = Fr.mul( fab.x ).add( specularF90.mul( fab.y ) );
|
|
561
579
|
|
|
@@ -579,12 +597,19 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
579
597
|
direct( { lightDirection, lightColor, reflectedLight }, /* builder */ ) {
|
|
580
598
|
|
|
581
599
|
const dotNL = normalView.dot( lightDirection ).clamp();
|
|
582
|
-
const irradiance = dotNL.mul( lightColor );
|
|
600
|
+
const irradiance = dotNL.mul( lightColor ).toVar();
|
|
583
601
|
|
|
584
602
|
if ( this.sheen === true ) {
|
|
585
603
|
|
|
586
604
|
this.sheenSpecularDirect.addAssign( irradiance.mul( BRDF_Sheen( { lightDirection } ) ) );
|
|
587
605
|
|
|
606
|
+
const sheenAlbedoV = IBLSheenBRDF( { normal: normalView, viewDir: positionViewDirection, roughness: sheenRoughness } );
|
|
607
|
+
const sheenAlbedoL = IBLSheenBRDF( { normal: normalView, viewDir: lightDirection, roughness: sheenRoughness } );
|
|
608
|
+
|
|
609
|
+
const sheenEnergyComp = sheen.r.max( sheen.g ).max( sheen.b ).mul( sheenAlbedoV.max( sheenAlbedoL ) ).oneMinus();
|
|
610
|
+
|
|
611
|
+
irradiance.mulAssign( sheenEnergyComp );
|
|
612
|
+
|
|
588
613
|
}
|
|
589
614
|
|
|
590
615
|
if ( this.clearcoat === true ) {
|
|
@@ -596,9 +621,9 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
596
621
|
|
|
597
622
|
}
|
|
598
623
|
|
|
599
|
-
reflectedLight.directDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor:
|
|
624
|
+
reflectedLight.directDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor: diffuseContribution } ) ) );
|
|
600
625
|
|
|
601
|
-
reflectedLight.directSpecular.addAssign( irradiance.mul( BRDF_GGX_Multiscatter( { lightDirection, f0:
|
|
626
|
+
reflectedLight.directSpecular.addAssign( irradiance.mul( BRDF_GGX_Multiscatter( { lightDirection, f0: specularColorBlended, f90: 1, roughness, f: this.iridescenceFresnel, USE_IRIDESCENCE: this.iridescence, USE_ANISOTROPY: this.anisotropy } ) ) );
|
|
602
627
|
|
|
603
628
|
}
|
|
604
629
|
|
|
@@ -633,11 +658,33 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
633
658
|
|
|
634
659
|
// LTC Fresnel Approximation by Stephen Hill
|
|
635
660
|
// http://blog.selfshadow.com/publications/s2016-advances/s2016_ltc_fresnel.pdf
|
|
636
|
-
const fresnel =
|
|
661
|
+
const fresnel = specularColorBlended.mul( t2.x ).add( specularF90.sub( specularColorBlended ).mul( t2.y ) ).toVar();
|
|
637
662
|
|
|
638
663
|
reflectedLight.directSpecular.addAssign( lightColor.mul( fresnel ).mul( LTC_Evaluate( { N, V, P, mInv, p0, p1, p2, p3 } ) ) );
|
|
639
664
|
|
|
640
|
-
reflectedLight.directDiffuse.addAssign( lightColor.mul(
|
|
665
|
+
reflectedLight.directDiffuse.addAssign( lightColor.mul( diffuseContribution ).mul( LTC_Evaluate( { N, V, P, mInv: mat3( 1, 0, 0, 0, 1, 0, 0, 0, 1 ), p0, p1, p2, p3 } ) ) );
|
|
666
|
+
|
|
667
|
+
if ( this.clearcoat === true ) {
|
|
668
|
+
|
|
669
|
+
const Ncc = clearcoatNormalView;
|
|
670
|
+
|
|
671
|
+
const uvClearcoat = LTC_Uv( { N: Ncc, V, roughness: clearcoatRoughness } );
|
|
672
|
+
|
|
673
|
+
const t1Clearcoat = ltc_1.sample( uvClearcoat );
|
|
674
|
+
const t2Clearcoat = ltc_2.sample( uvClearcoat );
|
|
675
|
+
|
|
676
|
+
const mInvClearcoat = mat3(
|
|
677
|
+
vec3( t1Clearcoat.x, 0, t1Clearcoat.y ),
|
|
678
|
+
vec3( 0, 1, 0 ),
|
|
679
|
+
vec3( t1Clearcoat.z, 0, t1Clearcoat.w )
|
|
680
|
+
);
|
|
681
|
+
|
|
682
|
+
// LTC Fresnel Approximation for clearcoat
|
|
683
|
+
const fresnelClearcoat = clearcoatF0.mul( t2Clearcoat.x ).add( clearcoatF90.sub( clearcoatF0 ).mul( t2Clearcoat.y ) );
|
|
684
|
+
|
|
685
|
+
this.clearcoatSpecularDirect.addAssign( lightColor.mul( fresnelClearcoat ).mul( LTC_Evaluate( { N: Ncc, V, P, mInv: mInvClearcoat, p0, p1, p2, p3 } ) ) );
|
|
686
|
+
|
|
687
|
+
}
|
|
641
688
|
|
|
642
689
|
}
|
|
643
690
|
|
|
@@ -663,7 +710,19 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
663
710
|
|
|
664
711
|
const { irradiance, reflectedLight } = builder.context;
|
|
665
712
|
|
|
666
|
-
|
|
713
|
+
const diffuse = irradiance.mul( BRDF_Lambert( { diffuseColor: diffuseContribution } ) ).toVar();
|
|
714
|
+
|
|
715
|
+
if ( this.sheen === true ) {
|
|
716
|
+
|
|
717
|
+
const sheenAlbedo = IBLSheenBRDF( { normal: normalView, viewDir: positionViewDirection, roughness: sheenRoughness } );
|
|
718
|
+
|
|
719
|
+
const sheenEnergyComp = sheen.r.max( sheen.g ).max( sheen.b ).mul( sheenAlbedo ).oneMinus();
|
|
720
|
+
|
|
721
|
+
diffuse.mulAssign( sheenEnergyComp );
|
|
722
|
+
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
reflectedLight.indirectDiffuse.addAssign( diffuse );
|
|
667
726
|
|
|
668
727
|
}
|
|
669
728
|
|
|
@@ -705,21 +764,44 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
705
764
|
}
|
|
706
765
|
|
|
707
766
|
// Both indirect specular and indirect diffuse light accumulate here
|
|
767
|
+
// Compute multiscattering separately for dielectric and metallic, then mix
|
|
768
|
+
|
|
769
|
+
const singleScatteringDielectric = vec3().toVar( 'singleScatteringDielectric' );
|
|
770
|
+
const multiScatteringDielectric = vec3().toVar( 'multiScatteringDielectric' );
|
|
771
|
+
const singleScatteringMetallic = vec3().toVar( 'singleScatteringMetallic' );
|
|
772
|
+
const multiScatteringMetallic = vec3().toVar( 'multiScatteringMetallic' );
|
|
773
|
+
|
|
774
|
+
this.computeMultiscattering( singleScatteringDielectric, multiScatteringDielectric, specularF90, specularColor, this.iridescenceF0Dielectric );
|
|
775
|
+
this.computeMultiscattering( singleScatteringMetallic, multiScatteringMetallic, specularF90, diffuseColor.rgb, this.iridescenceF0Metallic );
|
|
776
|
+
|
|
777
|
+
// Mix based on metalness
|
|
778
|
+
const singleScattering = mix( singleScatteringDielectric, singleScatteringMetallic, metalness );
|
|
779
|
+
const multiScattering = mix( multiScatteringDielectric, multiScatteringMetallic, metalness );
|
|
780
|
+
|
|
781
|
+
// Diffuse energy conservation uses dielectric path
|
|
782
|
+
const totalScatteringDielectric = singleScatteringDielectric.add( multiScatteringDielectric );
|
|
783
|
+
|
|
784
|
+
const diffuse = diffuseContribution.mul( totalScatteringDielectric.oneMinus() );
|
|
708
785
|
|
|
709
|
-
const singleScattering = vec3().toVar( 'singleScattering' );
|
|
710
|
-
const multiScattering = vec3().toVar( 'multiScattering' );
|
|
711
786
|
const cosineWeightedIrradiance = iblIrradiance.mul( 1 / Math.PI );
|
|
712
787
|
|
|
713
|
-
|
|
788
|
+
const indirectSpecular = radiance.mul( singleScattering ).add( multiScattering.mul( cosineWeightedIrradiance ) ).toVar();
|
|
789
|
+
const indirectDiffuse = diffuse.mul( cosineWeightedIrradiance ).toVar();
|
|
790
|
+
|
|
791
|
+
if ( this.sheen === true ) {
|
|
714
792
|
|
|
715
|
-
|
|
793
|
+
const sheenAlbedo = IBLSheenBRDF( { normal: normalView, viewDir: positionViewDirection, roughness: sheenRoughness } );
|
|
716
794
|
|
|
717
|
-
|
|
795
|
+
const sheenEnergyComp = sheen.r.max( sheen.g ).max( sheen.b ).mul( sheenAlbedo ).oneMinus();
|
|
796
|
+
|
|
797
|
+
indirectSpecular.mulAssign( sheenEnergyComp );
|
|
798
|
+
indirectDiffuse.mulAssign( sheenEnergyComp );
|
|
799
|
+
|
|
800
|
+
}
|
|
718
801
|
|
|
719
|
-
reflectedLight.indirectSpecular.addAssign(
|
|
720
|
-
reflectedLight.indirectSpecular.addAssign( multiScattering.mul( cosineWeightedIrradiance ) );
|
|
802
|
+
reflectedLight.indirectSpecular.addAssign( indirectSpecular );
|
|
721
803
|
|
|
722
|
-
reflectedLight.indirectDiffuse.addAssign(
|
|
804
|
+
reflectedLight.indirectDiffuse.addAssign( indirectDiffuse );
|
|
723
805
|
|
|
724
806
|
}
|
|
725
807
|
|
|
@@ -783,8 +865,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
783
865
|
|
|
784
866
|
if ( this.sheen === true ) {
|
|
785
867
|
|
|
786
|
-
const
|
|
787
|
-
const sheenLight = outgoingLight.mul( sheenEnergyComp ).add( this.sheenSpecularDirect, this.sheenSpecularIndirect );
|
|
868
|
+
const sheenLight = outgoingLight.add( this.sheenSpecularDirect, this.sheenSpecularIndirect.mul( 1.0 / Math.PI ) );
|
|
788
869
|
|
|
789
870
|
outgoingLight.assign( sheenLight );
|
|
790
871
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
|
+
import NodeError from '../core/NodeError.js';
|
|
2
3
|
import { getValueType } from '../core/NodeUtils.js';
|
|
3
4
|
import { buffer } from '../accessors/BufferNode.js';
|
|
4
5
|
import { instancedBufferAttribute } from '../accessors/BufferAttributeNode.js';
|
|
@@ -83,7 +84,7 @@ class RangeNode extends Node {
|
|
|
83
84
|
* @param {NodeBuilder} builder - The current node builder.
|
|
84
85
|
* @return {string} The node type.
|
|
85
86
|
*/
|
|
86
|
-
|
|
87
|
+
generateNodeType( builder ) {
|
|
87
88
|
|
|
88
89
|
return builder.object.count > 1 ? builder.getTypeFromLength( this.getVectorLength( builder ) ) : 'float';
|
|
89
90
|
|
|
@@ -111,7 +112,7 @@ class RangeNode extends Node {
|
|
|
111
112
|
|
|
112
113
|
if ( output === null ) {
|
|
113
114
|
|
|
114
|
-
throw new
|
|
115
|
+
throw new NodeError( 'THREE.TSL: No "ConstNode" found in node graph.', this.stackTrace );
|
|
115
116
|
|
|
116
117
|
}
|
|
117
118
|
|
|
@@ -167,8 +168,9 @@ class RangeNode extends Node {
|
|
|
167
168
|
}
|
|
168
169
|
|
|
169
170
|
const nodeType = this.getNodeType( builder );
|
|
171
|
+
const uniformBufferSize = object.count * 4 * 4; // count * 4 components * 4 bytes (float)
|
|
170
172
|
|
|
171
|
-
if (
|
|
173
|
+
if ( uniformBufferSize <= builder.getUniformBufferLimit() ) {
|
|
172
174
|
|
|
173
175
|
output = buffer( array, 'vec4', object.count ).element( instanceIndex ).convert( nodeType );
|
|
174
176
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
|
-
import { nodeObject } from '../tsl/TSLBase.js';
|
|
3
2
|
import { warn } from '../../utils.js';
|
|
4
3
|
|
|
5
4
|
/**
|
|
@@ -56,7 +55,7 @@ class ComputeBuiltinNode extends Node {
|
|
|
56
55
|
* @param {NodeBuilder} builder - The current node builder.
|
|
57
56
|
* @return {string} The node type.
|
|
58
57
|
*/
|
|
59
|
-
|
|
58
|
+
generateNodeType( /*builder*/ ) {
|
|
60
59
|
|
|
61
60
|
return this.nodeType;
|
|
62
61
|
|
|
@@ -149,7 +148,7 @@ export default ComputeBuiltinNode;
|
|
|
149
148
|
* @param {string} nodeType - The node type.
|
|
150
149
|
* @returns {ComputeBuiltinNode}
|
|
151
150
|
*/
|
|
152
|
-
const computeBuiltin = ( name, nodeType ) =>
|
|
151
|
+
const computeBuiltin = ( name, nodeType ) => new ComputeBuiltinNode( name, nodeType );
|
|
153
152
|
|
|
154
153
|
/**
|
|
155
154
|
* Represents the number of workgroups dispatched by the compute shader.
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
|
+
import { instanceIndex } from '../core/IndexNode.js';
|
|
3
|
+
import StackTrace from '../core/StackTrace.js';
|
|
4
|
+
import { uniform } from '../core/UniformNode.js';
|
|
2
5
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
6
|
import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
|
|
4
7
|
import { warn, error } from '../../utils.js';
|
|
5
8
|
|
|
6
9
|
/**
|
|
7
|
-
*
|
|
10
|
+
* Represents a compute shader node.
|
|
8
11
|
*
|
|
9
12
|
* @augments Node
|
|
10
13
|
*/
|
|
@@ -19,8 +22,8 @@ class ComputeNode extends Node {
|
|
|
19
22
|
/**
|
|
20
23
|
* Constructs a new compute node.
|
|
21
24
|
*
|
|
22
|
-
* @param {Node} computeNode -
|
|
23
|
-
* @param {Array<number>} workgroupSize -
|
|
25
|
+
* @param {Node} computeNode - The node that defines the compute shader logic.
|
|
26
|
+
* @param {Array<number>} workgroupSize - An array defining the X, Y, and Z dimensions of the workgroup for compute shader execution.
|
|
24
27
|
*/
|
|
25
28
|
constructor( computeNode, workgroupSize ) {
|
|
26
29
|
|
|
@@ -36,15 +39,14 @@ class ComputeNode extends Node {
|
|
|
36
39
|
this.isComputeNode = true;
|
|
37
40
|
|
|
38
41
|
/**
|
|
39
|
-
*
|
|
42
|
+
* The node that defines the compute shader logic.
|
|
40
43
|
*
|
|
41
44
|
* @type {Node}
|
|
42
45
|
*/
|
|
43
46
|
this.computeNode = computeNode;
|
|
44
47
|
|
|
45
|
-
|
|
46
48
|
/**
|
|
47
|
-
*
|
|
49
|
+
* An array defining the X, Y, and Z dimensions of the workgroup for compute shader execution.
|
|
48
50
|
*
|
|
49
51
|
* @type {Array<number>}
|
|
50
52
|
* @default [ 64 ]
|
|
@@ -52,14 +54,23 @@ class ComputeNode extends Node {
|
|
|
52
54
|
this.workgroupSize = workgroupSize;
|
|
53
55
|
|
|
54
56
|
/**
|
|
55
|
-
*
|
|
57
|
+
* The total number of threads (invocations) to execute. If it is a number, it will be used
|
|
58
|
+
* to automatically generate bounds checking against `instanceIndex`.
|
|
56
59
|
*
|
|
57
60
|
* @type {number|Array<number>}
|
|
58
61
|
*/
|
|
59
62
|
this.count = null;
|
|
60
63
|
|
|
61
64
|
/**
|
|
62
|
-
*
|
|
65
|
+
* The dispatch size for workgroups on X, Y, and Z axes.
|
|
66
|
+
* Used directly if `count` is not provided.
|
|
67
|
+
*
|
|
68
|
+
* @type {number|Array<number>}
|
|
69
|
+
*/
|
|
70
|
+
this.dispatchSize = null;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* The version of the node.
|
|
63
74
|
*
|
|
64
75
|
* @type {number}
|
|
65
76
|
*/
|
|
@@ -83,36 +94,19 @@ class ComputeNode extends Node {
|
|
|
83
94
|
this.updateBeforeType = NodeUpdateType.OBJECT;
|
|
84
95
|
|
|
85
96
|
/**
|
|
86
|
-
*
|
|
97
|
+
* A callback executed when the compute node finishes initialization.
|
|
87
98
|
*
|
|
88
99
|
* @type {?Function}
|
|
89
100
|
*/
|
|
90
101
|
this.onInitFunction = null;
|
|
91
102
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
*/
|
|
100
|
-
setCount( count ) {
|
|
101
|
-
|
|
102
|
-
this.count = count;
|
|
103
|
-
|
|
104
|
-
return this;
|
|
105
|
-
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* TODO
|
|
110
|
-
*
|
|
111
|
-
* @return {number|Array<number>}
|
|
112
|
-
*/
|
|
113
|
-
getCount() {
|
|
114
|
-
|
|
115
|
-
return this.count;
|
|
103
|
+
/**
|
|
104
|
+
* A uniform node holding the dispatch count for bounds checking.
|
|
105
|
+
* Created automatically when `count` is a number.
|
|
106
|
+
*
|
|
107
|
+
* @type {?UniformNode}
|
|
108
|
+
*/
|
|
109
|
+
this.countNode = null;
|
|
116
110
|
|
|
117
111
|
}
|
|
118
112
|
|
|
@@ -148,16 +142,16 @@ class ComputeNode extends Node {
|
|
|
148
142
|
*/
|
|
149
143
|
label( name ) {
|
|
150
144
|
|
|
151
|
-
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
|
|
145
|
+
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.', new StackTrace() ); // @deprecated r179
|
|
152
146
|
|
|
153
147
|
return this.setName( name );
|
|
154
148
|
|
|
155
149
|
}
|
|
156
150
|
|
|
157
151
|
/**
|
|
158
|
-
*
|
|
152
|
+
* Sets the callback to run during initialization.
|
|
159
153
|
*
|
|
160
|
-
* @param {Function} callback -
|
|
154
|
+
* @param {Function} callback - The callback function.
|
|
161
155
|
* @return {ComputeNode} A reference to this node.
|
|
162
156
|
*/
|
|
163
157
|
onInit( callback ) {
|
|
@@ -181,6 +175,12 @@ class ComputeNode extends Node {
|
|
|
181
175
|
|
|
182
176
|
setup( builder ) {
|
|
183
177
|
|
|
178
|
+
if ( this.count !== null && this.countNode === null ) {
|
|
179
|
+
|
|
180
|
+
this.countNode = uniform( this.count, 'uint' ).onObjectUpdate( () => this.count );
|
|
181
|
+
|
|
182
|
+
}
|
|
183
|
+
|
|
184
184
|
const result = this.computeNode.build( builder );
|
|
185
185
|
|
|
186
186
|
if ( result ) {
|
|
@@ -210,6 +210,16 @@ class ComputeNode extends Node {
|
|
|
210
210
|
|
|
211
211
|
}
|
|
212
212
|
|
|
213
|
+
if ( this.count !== null && builder.allowEarlyReturns === true ) {
|
|
214
|
+
|
|
215
|
+
const countSnippet = this.countNode.build( builder, 'uint' );
|
|
216
|
+
const indexSnippet = instanceIndex.build( builder, 'uint' );
|
|
217
|
+
|
|
218
|
+
builder.flow.code = `${ builder.tab }if ( ${ indexSnippet } >= ${ countSnippet } ) { return; }\n\n${ builder.flow.code }`;
|
|
219
|
+
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
|
|
213
223
|
} else {
|
|
214
224
|
|
|
215
225
|
const properties = builder.getNodeProperties( this );
|
|
@@ -234,15 +244,15 @@ export default ComputeNode;
|
|
|
234
244
|
*
|
|
235
245
|
* @tsl
|
|
236
246
|
* @function
|
|
237
|
-
* @param {Node} node -
|
|
238
|
-
* @param {Array<number>} [workgroupSize=[64]] -
|
|
239
|
-
* @returns {
|
|
247
|
+
* @param {Node} node - The TSL logic for the compute shader.
|
|
248
|
+
* @param {Array<number>} [workgroupSize=[64]] - The workgroup size.
|
|
249
|
+
* @returns {ComputeNode}
|
|
240
250
|
*/
|
|
241
251
|
export const computeKernel = ( node, workgroupSize = [ 64 ] ) => {
|
|
242
252
|
|
|
243
253
|
if ( workgroupSize.length === 0 || workgroupSize.length > 3 ) {
|
|
244
254
|
|
|
245
|
-
error( 'TSL: compute() workgroupSize must have 1, 2, or 3 elements' );
|
|
255
|
+
error( 'TSL: compute() workgroupSize must have 1, 2, or 3 elements', new StackTrace() );
|
|
246
256
|
|
|
247
257
|
}
|
|
248
258
|
|
|
@@ -252,7 +262,7 @@ export const computeKernel = ( node, workgroupSize = [ 64 ] ) => {
|
|
|
252
262
|
|
|
253
263
|
if ( typeof val !== 'number' || val <= 0 || ! Number.isInteger( val ) ) {
|
|
254
264
|
|
|
255
|
-
error( `TSL: compute() workgroupSize element at index [ ${ i } ] must be a positive integer
|
|
265
|
+
error( `TSL: compute() workgroupSize element at index [ ${ i } ] must be a positive integer`, new StackTrace() );
|
|
256
266
|
|
|
257
267
|
}
|
|
258
268
|
|
|
@@ -264,7 +274,7 @@ export const computeKernel = ( node, workgroupSize = [ 64 ] ) => {
|
|
|
264
274
|
|
|
265
275
|
//
|
|
266
276
|
|
|
267
|
-
return
|
|
277
|
+
return new ComputeNode( nodeObject( node ), workgroupSize );
|
|
268
278
|
|
|
269
279
|
};
|
|
270
280
|
|
|
@@ -273,12 +283,28 @@ export const computeKernel = ( node, workgroupSize = [ 64 ] ) => {
|
|
|
273
283
|
*
|
|
274
284
|
* @tsl
|
|
275
285
|
* @function
|
|
276
|
-
* @param {Node} node -
|
|
277
|
-
* @param {number|Array<number>} count -
|
|
278
|
-
* @param {Array<number>} [workgroupSize=[64]] -
|
|
279
|
-
* @returns {
|
|
280
|
-
|
|
281
|
-
export const compute = ( node, count, workgroupSize ) =>
|
|
286
|
+
* @param {Node} node - The TSL logic for the compute shader.
|
|
287
|
+
* @param {number|Array<number>} count - The compute count or dispatch size.
|
|
288
|
+
* @param {Array<number>} [workgroupSize=[64]] - The workgroup size.
|
|
289
|
+
* @returns {ComputeNode}
|
|
290
|
+
, */
|
|
291
|
+
export const compute = ( node, count, workgroupSize ) => {
|
|
292
|
+
|
|
293
|
+
const computeNode = computeKernel( node, workgroupSize );
|
|
294
|
+
|
|
295
|
+
if ( typeof count === 'number' ) {
|
|
296
|
+
|
|
297
|
+
computeNode.count = count;
|
|
298
|
+
|
|
299
|
+
} else {
|
|
300
|
+
|
|
301
|
+
computeNode.dispatchSize = count;
|
|
302
|
+
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
return computeNode;
|
|
306
|
+
|
|
307
|
+
};
|
|
282
308
|
|
|
283
309
|
addMethodChaining( 'compute', compute );
|
|
284
310
|
addMethodChaining( 'computeKernel', computeKernel );
|
|
@@ -35,7 +35,7 @@ class SubgroupFunctionNode extends TempNode {
|
|
|
35
35
|
/**
|
|
36
36
|
* The subgroup/wave intrinsic method to construct.
|
|
37
37
|
*
|
|
38
|
-
* @type {
|
|
38
|
+
* @type {string}
|
|
39
39
|
*/
|
|
40
40
|
this.method = method;
|
|
41
41
|
|
|
@@ -75,7 +75,7 @@ class SubgroupFunctionNode extends TempNode {
|
|
|
75
75
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
generateNodeType( builder ) {
|
|
79
79
|
|
|
80
80
|
const method = this.method;
|
|
81
81
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
2
|
-
import { nodeObject } from '../tsl/TSLCore.js';
|
|
3
2
|
import Node from '../core/Node.js';
|
|
4
3
|
import { warn } from '../../utils.js';
|
|
4
|
+
import StackTrace from '../core/StackTrace.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Represents an element of a 'workgroup' scoped buffer.
|
|
@@ -150,7 +150,7 @@ class WorkgroupInfoNode extends Node {
|
|
|
150
150
|
*/
|
|
151
151
|
label( name ) {
|
|
152
152
|
|
|
153
|
-
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
|
|
153
|
+
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.', new StackTrace() ); // @deprecated r179
|
|
154
154
|
|
|
155
155
|
return this.setName( name );
|
|
156
156
|
|
|
@@ -203,7 +203,7 @@ class WorkgroupInfoNode extends Node {
|
|
|
203
203
|
*/
|
|
204
204
|
element( indexNode ) {
|
|
205
205
|
|
|
206
|
-
return
|
|
206
|
+
return new WorkgroupInfoElementNode( this, indexNode );
|
|
207
207
|
|
|
208
208
|
}
|
|
209
209
|
|
|
@@ -229,6 +229,6 @@ export default WorkgroupInfoNode;
|
|
|
229
229
|
* @param {number} [count=0] - The number of elements in the buffer.
|
|
230
230
|
* @returns {WorkgroupInfoNode}
|
|
231
231
|
*/
|
|
232
|
-
export const workgroupArray = ( type, count ) =>
|
|
232
|
+
export const workgroupArray = ( type, count ) => new WorkgroupInfoNode( 'Workgroup', type, count );
|
|
233
233
|
|
|
234
234
|
|