@gnsx/three 0.185.16 → 0.186.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/build/three.cjs +10 -82600
- package/build/three.core.js +1309 -807
- package/build/three.module.js +439 -338
- package/build/three.tsl.js +74 -44
- package/build/three.webgpu.js +6036 -2184
- package/build/three.webgpu.nodes.js +6020 -2184
- package/examples/jsm/Addons.js +6 -6
- package/examples/jsm/controls/ArcballControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +44 -20
- package/examples/jsm/controls/OrbitControls.js +9 -0
- package/examples/jsm/controls/TrackballControls.js +109 -4
- package/examples/jsm/csm/CSMShadowNode.js +13 -0
- package/examples/jsm/exporters/GLTFExporter.js +23 -7
- package/examples/jsm/exporters/USDZExporter.js +2 -2
- package/examples/jsm/generators/CityGenerator.js +377 -45
- package/examples/jsm/generators/ForestGenerator.js +12 -12
- package/examples/jsm/generators/TerrainGenerator.js +49 -37
- package/examples/jsm/generators/TreeGenerator.js +70 -76
- package/examples/jsm/generators/city/BenchGenerator.js +127 -0
- package/examples/jsm/generators/city/CarGenerator.js +479 -0
- package/examples/jsm/generators/city/CityGeneratorUtils.js +31 -0
- package/examples/jsm/generators/city/HydrantGenerator.js +106 -0
- package/examples/jsm/generators/city/InstancedMeshGenerator.js +86 -0
- package/examples/jsm/generators/city/PersonGenerator.js +447 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +33 -38
- package/examples/jsm/generators/city/SkyscraperGenerator.js +448 -48
- package/examples/jsm/generators/city/StreetTreeGenerator.js +231 -0
- package/examples/jsm/generators/city/StreetlightGenerator.js +100 -0
- package/examples/jsm/generators/city/TrafficlightGenerator.js +106 -0
- package/examples/jsm/generators/city/TrashcanGenerator.js +100 -0
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +1 -1
- package/examples/jsm/gpgpu/CountingSort.js +271 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +60 -239
- package/examples/jsm/helpers/LightProbeGridHelperWebGL.js +221 -0
- package/examples/jsm/inspector/Extension.js +94 -0
- package/examples/jsm/inspector/Inspector.js +145 -41
- package/examples/jsm/inspector/RendererInspector.js +100 -52
- package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +2609 -0
- package/examples/jsm/inspector/extensions/color-grading/ColorWheel.js +352 -0
- package/examples/jsm/inspector/extensions/color-grading/CurveEditor.js +599 -0
- package/examples/jsm/inspector/extensions/color-grading/LUT3DStyle.js +1201 -0
- package/examples/jsm/inspector/extensions/color-grading/LUTMath.js +788 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/BrightnessModule.js +72 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ColorWheelModule.js +112 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ContrastModule.js +82 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/CurvesModule.js +109 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ExposureHueModule.js +110 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ExposureModule.js +73 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/HueModule.js +78 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ImportedCubeModule.js +89 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/Module.js +285 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/OutputModule.js +101 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/RendererModule.js +225 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/SatVibranceModule.js +102 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/SaturationModule.js +76 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/VibranceModule.js +76 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/WhiteBalanceModule.js +86 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +26 -31
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -0
- package/examples/jsm/inspector/tabs/Memory.js +0 -2
- package/examples/jsm/inspector/tabs/Settings.js +4 -0
- package/examples/jsm/inspector/tabs/Timeline.js +223 -171
- package/examples/jsm/inspector/tabs/Viewer.js +515 -21
- package/examples/jsm/inspector/ui/List.js +15 -9
- package/examples/jsm/inspector/ui/Profiler.js +170 -14
- package/examples/jsm/inspector/ui/Style.js +269 -23
- package/examples/jsm/inspector/ui/Tab.js +2 -0
- package/examples/jsm/inspector/ui/Values.js +14 -2
- package/examples/jsm/interactive/HTMLMesh.js +19 -3
- package/examples/jsm/lighting/LightProbeGrid.js +484 -889
- package/examples/jsm/lighting/LightProbeGridUtils.js +107 -0
- package/examples/jsm/lighting/LightProbeGridWebGL.js +841 -0
- package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +194 -0
- package/examples/jsm/lighting/vxgi/VXGINode.js +660 -0
- package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +478 -0
- package/examples/jsm/lighting/vxgi/VXGIVolume.js +1430 -0
- package/examples/jsm/lights/SunLight.js +95 -0
- package/examples/jsm/lights/SunLightNode.js +56 -0
- package/examples/jsm/lights/SunLightShadow.js +319 -0
- package/examples/jsm/lights/SunShadowNode.js +312 -0
- package/examples/jsm/loaders/3DMLoader.js +150 -49
- package/examples/jsm/loaders/3MFLoader.js +202 -1
- package/examples/jsm/loaders/FBXLoader.js +81 -5
- package/examples/jsm/loaders/GLTFGaussianSplatLoaderExtension.js +330 -0
- package/examples/jsm/loaders/GLTFLoader.js +79 -14
- package/examples/jsm/loaders/GaussianSplatPLYLoader.js +386 -0
- package/examples/jsm/loaders/KSPLATLoader.js +463 -0
- package/examples/jsm/loaders/MaterialXLoader.js +111 -1010
- package/examples/jsm/loaders/PCDLoader.js +1 -1
- package/examples/jsm/loaders/SPLATLoader.js +139 -0
- package/examples/jsm/loaders/SPZLoader.js +561 -0
- package/examples/jsm/loaders/materialx/MaterialXArchive.js +108 -0
- package/examples/jsm/loaders/materialx/MaterialXDocument.js +878 -0
- package/examples/jsm/loaders/materialx/MaterialXHextile.js +183 -0
- package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +376 -0
- package/examples/jsm/loaders/materialx/MaterialXLog.js +75 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +4 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +1021 -0
- package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +661 -0
- package/examples/jsm/loaders/materialx/MaterialXUtils.js +57 -0
- package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +997 -0
- package/examples/jsm/loaders/materialx/parse/MaterialXParser.js +28 -0
- package/examples/jsm/loaders/usd/USDAParser.js +15 -2
- package/examples/jsm/loaders/usd/USDCParser.js +1 -4
- package/examples/jsm/loaders/usd/USDComposer.js +80 -42
- package/examples/jsm/materials/WoodNodeMaterial.js +6 -108
- package/examples/jsm/misc/RollerCoaster.js +2 -2
- package/examples/jsm/misc/SculptGL.LICENSE.txt +21 -0
- package/examples/jsm/misc/Sculptor.js +1679 -0
- package/examples/jsm/misc/SculptorMesh.js +1504 -0
- package/examples/jsm/misc/SculptorTools.js +1180 -0
- package/examples/jsm/misc/SculptorUtils.js +345 -0
- package/examples/jsm/misc/TubePainter.js +28 -16
- package/examples/jsm/misc/VolumeSlice.js +24 -24
- package/examples/jsm/modifiers/SimplifyModifier.js +63 -556
- package/examples/jsm/objects/GaussianSplat.js +1039 -0
- package/examples/jsm/objects/Sky.js +66 -45
- package/examples/jsm/objects/SkyMesh.js +70 -51
- package/examples/jsm/physics/JoltPhysics.js +1 -1
- package/examples/jsm/postprocessing/AfterimagePass.js +4 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/GTAOPass.js +1 -1
- package/examples/jsm/postprocessing/OutlinePass.js +5 -5
- package/examples/jsm/postprocessing/SAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +4 -2
- package/examples/jsm/postprocessing/SavePass.js +1 -1
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +30 -13
- package/examples/jsm/renderers/CSS2DRenderer.js +29 -5
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +1 -1
- package/examples/jsm/shaders/FilmShader.js +2 -1
- package/examples/jsm/transpiler/AST.js +21 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +498 -8
- package/examples/jsm/transpiler/TSLEncoder.js +82 -10
- package/examples/jsm/transpiler/WGSLEncoder.js +33 -4
- package/examples/jsm/tsl/WebGLNodesHandler.js +29 -39
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +3 -2
- package/examples/jsm/tsl/display/BilateralBlurNode.js +5 -2
- package/examples/jsm/tsl/display/BloomNode.js +55 -30
- package/examples/jsm/tsl/display/DenoiseNode.js +21 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +24 -6
- package/examples/jsm/tsl/display/DotScreenNode.js +11 -11
- package/examples/jsm/tsl/display/FSR1Node.js +8 -4
- package/examples/jsm/tsl/display/GTAONode.js +199 -86
- package/examples/jsm/tsl/display/GaussianBlurNode.js +65 -52
- package/examples/jsm/tsl/display/GodraysNode.js +5 -2
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +2 -2
- package/examples/jsm/tsl/display/LensflareNode.js +5 -2
- package/examples/jsm/tsl/display/OITPassNode.js +352 -0
- package/examples/jsm/tsl/display/OutlineNode.js +2 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +3 -2
- package/examples/jsm/tsl/display/RGBShiftNode.js +9 -9
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +7 -4
- package/examples/jsm/tsl/display/RetroPassNode.js +1 -1
- package/examples/jsm/tsl/display/SMAANode.js +22 -61
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -4
- package/examples/jsm/tsl/display/SSAONode.js +436 -0
- package/examples/jsm/tsl/display/SSGINode.js +5 -2
- package/examples/jsm/tsl/display/SSRNode.js +7 -2
- package/examples/jsm/tsl/display/SSSNode.js +5 -2
- package/examples/jsm/tsl/display/SharpenNode.js +5 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -3
- package/examples/jsm/tsl/display/TAAUNode.js +22 -125
- package/examples/jsm/tsl/display/TRAANode.js +16 -142
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +21 -15
- package/examples/jsm/tsl/display/depthAwareBlur.js +63 -0
- package/examples/jsm/tsl/display/hashBlur.js +3 -2
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +38 -27
- package/examples/jsm/tsl/lighting/LightProbeGridNode.js +136 -0
- package/examples/jsm/tsl/math/voronoiNoise.js +112 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +4 -6
- package/examples/jsm/tsl/utils/Raymarching.js +5 -5
- package/examples/jsm/tsl/utils/SoftParticles.js +60 -0
- package/examples/jsm/tsl/utils/TAAUtils.js +195 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +14 -14
- package/examples/jsm/utils/GaussianSplatUtils.js +229 -0
- package/examples/jsm/utils/WebGLTextureUtils.js +1 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +2 -16
- package/examples/jsm/webxr/XRControllerModelFactory.js +16 -4
- package/package.json +9 -16
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +73 -43
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +1 -0
- package/src/animation/AnimationClip.js +15 -2
- package/src/animation/AnimationObjectGroup.js +18 -6
- package/src/animation/AnimationUtils.js +26 -0
- package/src/animation/KeyframeTrack.js +37 -0
- package/src/constants.js +23 -1
- package/src/core/BufferAttribute.js +3 -2
- package/src/core/BufferGeometry.js +1 -1
- package/src/core/InterleavedBuffer.js +5 -1
- package/src/core/Object3D.js +40 -12
- package/src/core/Raycaster.js +4 -0
- package/src/core/RenderTarget.js +99 -9
- package/src/core/RenderTarget3D.js +12 -8
- package/src/extras/Controls.js +0 -8
- package/src/extras/PMREMGenerator.js +99 -205
- package/src/geometries/TorusGeometry.js +1 -1
- package/src/helpers/ArrowHelper.js +2 -0
- package/src/helpers/AxesHelper.js +2 -0
- package/src/helpers/Box3Helper.js +2 -0
- package/src/helpers/BoxHelper.js +2 -0
- package/src/helpers/CameraHelper.js +2 -0
- package/src/helpers/DirectionalLightHelper.js +2 -0
- package/src/helpers/GridHelper.js +2 -0
- package/src/helpers/HemisphereLightHelper.js +2 -0
- package/src/helpers/PlaneHelper.js +2 -0
- package/src/helpers/PointLightHelper.js +2 -0
- package/src/helpers/PolarGridHelper.js +2 -0
- package/src/helpers/SkeletonHelper.js +2 -0
- package/src/helpers/SpotLightHelper.js +2 -0
- package/src/lights/Light.js +0 -10
- package/src/lights/LightShadow.js +43 -12
- package/src/lights/SpotLightShadow.js +18 -0
- package/src/loaders/BufferGeometryLoader.js +5 -0
- package/src/loaders/ImageBitmapLoader.js +3 -1
- package/src/loaders/ObjectLoader.js +8 -5
- package/src/materials/Material.js +80 -57
- package/src/materials/MeshPhysicalMaterial.js +32 -0
- package/src/materials/nodes/Line2NodeMaterial.js +17 -8
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +42 -5
- package/src/materials/nodes/NodeMaterial.js +19 -13
- package/src/materials/nodes/PointsNodeMaterial.js +2 -1
- package/src/materials/nodes/manager/NodeMaterialObserver.js +282 -55
- package/src/math/Frustum.js +9 -0
- package/src/math/FrustumArray.js +1 -1
- package/src/math/MathUtils.js +5 -3
- package/src/math/Matrix4.js +2 -9
- package/src/math/Plane.js +30 -1
- package/src/math/Quaternion.js +0 -10
- package/src/math/Ray.js +95 -45
- package/src/math/Triangle.js +0 -2
- package/src/math/Vector3.js +2 -2
- package/src/math/Vector4.js +0 -4
- package/src/math/interpolants/BezierInterpolant.js +36 -23
- package/src/nodes/Nodes.js +2 -0
- package/src/nodes/TSL.js +11 -3
- package/src/nodes/accessors/Batch.js +85 -13
- package/src/nodes/accessors/BufferAttributeNode.js +1 -1
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/Instance.js +19 -18
- package/src/nodes/accessors/MaterialNode.js +9 -0
- package/src/nodes/accessors/ModelNode.js +85 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -70
- package/src/nodes/accessors/ReferenceElementNode.js +72 -0
- package/src/nodes/accessors/ReferenceNode.js +1 -70
- package/src/nodes/accessors/Skinning.js +124 -12
- package/src/nodes/accessors/StorageTextureNode.js +7 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +51 -21
- package/src/nodes/accessors/TextureSizeNode.js +4 -2
- package/src/nodes/accessors/UniformArrayNode.js +30 -5
- package/src/nodes/code/CodeNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +12 -2
- package/src/nodes/core/ArrayNode.js +2 -2
- package/src/nodes/core/ContextNode.js +57 -4
- package/src/nodes/core/IndexNode.js +69 -4
- package/src/nodes/core/InspectorNode.js +2 -2
- package/src/nodes/core/MRTNode.js +44 -2
- package/src/nodes/core/Node.js +6 -3
- package/src/nodes/core/NodeBuilder.js +65 -50
- package/src/nodes/core/NodeFrame.js +11 -3
- package/src/nodes/core/NodeUtils.js +88 -0
- package/src/nodes/core/PropertyNode.js +8 -0
- package/src/nodes/core/StackNode.js +0 -1
- package/src/nodes/core/StructNode.js +4 -3
- package/src/nodes/core/UniformGroupNode.js +3 -2
- package/src/nodes/core/UniformNode.js +26 -12
- package/src/nodes/core/VarNode.js +0 -1
- package/src/nodes/display/BumpMapNode.js +2 -2
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/PassNode.js +76 -15
- package/src/nodes/display/ScreenNode.js +22 -65
- package/src/nodes/fog/Fog.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_GGX.js +6 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +1 -1
- package/src/nodes/functions/BSDF/DFGLUT.js +2 -1
- package/src/nodes/functions/BSDF/LTC.js +1 -1
- package/src/nodes/functions/PhongLightingModel.js +1 -1
- package/src/nodes/functions/PhysicalLightingModel.js +83 -25
- package/src/nodes/functions/ToonLightingModel.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +3 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +64 -13
- package/src/nodes/gpgpu/BarrierNode.js +13 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +20 -17
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +165 -37
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +44 -6
- package/src/nodes/lighting/EnvironmentNode.js +40 -4
- package/src/nodes/lighting/LightsNode.js +20 -4
- package/src/nodes/lighting/ShadowBaseNode.js +158 -1
- package/src/nodes/lighting/ShadowFilterNode.js +2 -106
- package/src/nodes/lighting/ShadowNode.js +22 -91
- package/src/nodes/materialx/{lib/mx_hsv.js → MaterialXColor.js} +3 -6
- package/src/nodes/materialx/{lib/mx_transform_color.js → MaterialXColorTransform.js} +3 -6
- package/src/nodes/materialx/MaterialXCore.js +37 -0
- package/src/nodes/materialx/MaterialXNodes.js +64 -72
- package/src/nodes/materialx/{lib/mx_noise.js → MaterialXNoise.js} +426 -197
- package/src/nodes/math/BitcountNode.js +24 -4
- package/src/nodes/math/MathNode.js +4 -4
- package/src/nodes/math/MathUtils.js +15 -4
- package/src/nodes/math/OperatorNode.js +2 -2
- package/src/nodes/math/PackFloatNode.js +29 -1
- package/src/nodes/math/Packed4x8IntegerNode.js +433 -0
- package/src/nodes/math/UnpackFloatNode.js +30 -2
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +31 -74
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLCore.js +1 -31
- package/src/nodes/utils/EventNode.js +75 -0
- package/src/nodes/utils/LoopNode.js +54 -13
- package/src/nodes/utils/PostProcessingUtils.js +23 -2
- package/src/nodes/utils/RTTNode.js +97 -32
- package/src/nodes/utils/ReflectorNode.js +8 -4
- package/src/nodes/utils/RotateNode.js +85 -8
- package/src/nodes/utils/SpriteUtils.js +58 -23
- package/src/objects/BatchedMesh.js +6 -0
- package/src/objects/InstancedMesh.js +1 -1
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +12 -0
- package/src/objects/Mesh.js +12 -0
- package/src/objects/Points.js +12 -0
- package/src/objects/Sprite.js +12 -0
- package/src/renderers/WebGLRenderer.js +93 -27
- package/src/renderers/common/Animation.js +12 -2
- package/src/renderers/common/Backend.js +38 -10
- package/src/renderers/common/BindGroup.js +0 -1
- package/src/renderers/common/Bindings.js +50 -4
- package/src/renderers/common/BundleGroup.js +4 -0
- package/src/renderers/common/ClippingContext.js +11 -1
- package/src/renderers/common/Color4.js +9 -0
- package/src/renderers/common/Constants.js +0 -5
- package/src/renderers/common/DirectRenderPipeline.js +233 -0
- package/src/renderers/common/Geometries.js +24 -3
- package/src/renderers/common/Info.js +3 -3
- package/src/renderers/common/InspectorBase.js +37 -8
- package/src/renderers/common/Lighting.js +11 -4
- package/src/renderers/common/Pipelines.js +6 -4
- package/src/renderers/common/QuadMesh.js +16 -2
- package/src/renderers/common/RenderContext.js +8 -0
- package/src/renderers/common/RenderList.js +53 -19
- package/src/renderers/common/RenderLists.js +58 -11
- package/src/renderers/common/RenderObject.js +14 -0
- package/src/renderers/common/RenderObjects.js +14 -9
- package/src/renderers/common/RenderPipeline.js +52 -44
- package/src/renderers/common/Renderer.js +226 -55
- package/src/renderers/common/Storage3DTexture.js +16 -0
- package/src/renderers/common/Textures.js +3 -3
- package/src/renderers/common/XRManager.js +79 -72
- package/src/renderers/common/extras/PMREMGenerator.js +76 -144
- package/src/renderers/common/nodes/NodeManager.js +144 -6
- package/src/renderers/common/nodes/NodeStorageBuffer.js +3 -1
- package/src/renderers/common/nodes/NodeUniformBuffer.js +3 -1
- package/src/renderers/shaders/DFGLUTData.js +2 -1
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +4 -2
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +48 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +53 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +20 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +20 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +61 -57
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +82 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +9 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +8 -1
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +15 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
- package/src/renderers/shaders/ShaderLib.js +1 -0
- package/src/renderers/shaders/UniformsLib.js +16 -0
- package/src/renderers/webgl/WebGLAnimation.js +2 -2
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLLights.js +74 -4
- package/src/renderers/webgl/WebGLMaterials.js +6 -0
- package/src/renderers/webgl/WebGLOutput.js +36 -24
- package/src/renderers/webgl/WebGLProgram.js +3 -0
- package/src/renderers/webgl/WebGLPrograms.js +8 -0
- package/src/renderers/webgl/WebGLRenderLists.js +6 -10
- package/src/renderers/webgl/WebGLShadowMap.js +47 -44
- package/src/renderers/webgl/WebGLTextures.js +7 -7
- package/src/renderers/webgl-fallback/WebGLBackend.js +153 -45
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +83 -29
- package/src/renderers/webgl-fallback/utils/WebGLState.js +163 -17
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +32 -5
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +11 -4
- package/src/renderers/webgpu/WebGPUBackend.js +513 -145
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +99 -20
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -12
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +24 -14
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +80 -14
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +62 -7
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +9 -3
- package/src/renderers/webgpu/utils/WebGPUUtils.js +16 -4
- package/src/renderers/webxr/WebXRManager.js +25 -2
- package/src/scenes/Scene.js +3 -3
- package/src/textures/CompressedArrayTexture.js +16 -0
- package/src/textures/Data3DTexture.js +16 -0
- package/src/textures/DataArrayTexture.js +16 -0
- package/src/textures/DepthTexture.js +3 -3
- package/src/textures/Texture.js +3 -3
- package/src/textures/{Source.js → TextureSource.js} +39 -8
- package/src/utils.js +6 -79
- package/build/three.core.min.js +0 -6
- package/build/three.module.min.js +0 -6
- package/build/three.tsl.min.js +0 -6
- package/build/three.webgpu.min.js +0 -6
- package/build/three.webgpu.nodes.min.js +0 -6
- package/examples/jsm/libs/ecsy.module.js +0 -1792
- package/examples/jsm/loaders/LottieLoader.js +0 -130
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +0 -52
|
@@ -8,7 +8,7 @@ import ParameterNode from './ParameterNode.js';
|
|
|
8
8
|
import StructType from './StructType.js';
|
|
9
9
|
import FunctionNode from '../code/FunctionNode.js';
|
|
10
10
|
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
11
|
-
import { getDataFromObject, getTypeFromLength, hashString } from './NodeUtils.js';
|
|
11
|
+
import { getDataFromObject, getTypeFromLength, getTextureType, hashString } from './NodeUtils.js';
|
|
12
12
|
import { NodeUpdateType, defaultBuildStages, shaderStages } from './constants.js';
|
|
13
13
|
|
|
14
14
|
import {
|
|
@@ -23,7 +23,7 @@ import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js';
|
|
|
23
23
|
|
|
24
24
|
import BindGroup from '../../renderers/common/BindGroup.js';
|
|
25
25
|
|
|
26
|
-
import { REVISION, IntType, UnsignedIntType, LinearFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter, NormalBlending
|
|
26
|
+
import { REVISION, IntType, UnsignedIntType, LinearFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter, NormalBlending } from '../../constants.js';
|
|
27
27
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
28
28
|
import { Color } from '../../math/Color.js';
|
|
29
29
|
import { Vector2 } from '../../math/Vector2.js';
|
|
@@ -123,6 +123,14 @@ class NodeBuilder {
|
|
|
123
123
|
*/
|
|
124
124
|
this.geometry = ( object && object.geometry ) || null;
|
|
125
125
|
|
|
126
|
+
/**
|
|
127
|
+
* The compute node, if building for compute.
|
|
128
|
+
*
|
|
129
|
+
* @type {?ComputeNode}
|
|
130
|
+
* @default null
|
|
131
|
+
*/
|
|
132
|
+
this.compute = null;
|
|
133
|
+
|
|
126
134
|
/**
|
|
127
135
|
* The current renderer.
|
|
128
136
|
*
|
|
@@ -573,50 +581,15 @@ class NodeBuilder {
|
|
|
573
581
|
*/
|
|
574
582
|
getOutputType( index = 0 ) {
|
|
575
583
|
|
|
576
|
-
let type = 'vec4';
|
|
577
|
-
|
|
578
584
|
const renderTarget = this.renderer.getRenderTarget();
|
|
579
585
|
|
|
580
586
|
if ( renderTarget !== null ) {
|
|
581
587
|
|
|
582
|
-
|
|
583
|
-
const renderTargetFormat = renderTarget.textures[ index ].format;
|
|
584
|
-
|
|
585
|
-
let typeStr = 'vec';
|
|
586
|
-
|
|
587
|
-
if ( renderTargetType === IntType ) {
|
|
588
|
-
|
|
589
|
-
typeStr = 'ivec';
|
|
590
|
-
|
|
591
|
-
} else if ( renderTargetType === UnsignedIntType ) {
|
|
592
|
-
|
|
593
|
-
typeStr = 'uvec';
|
|
594
|
-
|
|
595
|
-
}
|
|
596
|
-
|
|
597
|
-
if ( renderTargetFormat === RedFormat || renderTargetFormat === RedIntegerFormat ) {
|
|
598
|
-
|
|
599
|
-
if ( renderTargetType === IntType ) type = 'int';
|
|
600
|
-
else if ( renderTargetType === UnsignedIntType ) type = 'uint';
|
|
601
|
-
else type = 'float';
|
|
602
|
-
|
|
603
|
-
} else if ( renderTargetFormat === RGFormat || renderTargetFormat === RGIntegerFormat ) {
|
|
604
|
-
|
|
605
|
-
type = `${ typeStr }2`;
|
|
606
|
-
|
|
607
|
-
} else if ( renderTargetFormat === RGBFormat || renderTargetFormat === RGBIntegerFormat ) {
|
|
608
|
-
|
|
609
|
-
type = `${ typeStr }3`;
|
|
610
|
-
|
|
611
|
-
} else {
|
|
612
|
-
|
|
613
|
-
type = `${ typeStr }4`;
|
|
614
|
-
|
|
615
|
-
}
|
|
588
|
+
return getTextureType( renderTarget.textures[ index ] );
|
|
616
589
|
|
|
617
590
|
}
|
|
618
591
|
|
|
619
|
-
return
|
|
592
|
+
return 'vec4';
|
|
620
593
|
|
|
621
594
|
}
|
|
622
595
|
|
|
@@ -865,8 +838,8 @@ class NodeBuilder {
|
|
|
865
838
|
*/
|
|
866
839
|
addSequentialNode( node ) {
|
|
867
840
|
|
|
868
|
-
const updateBeforeType = node.
|
|
869
|
-
const updateAfterType = node.
|
|
841
|
+
const updateBeforeType = node.updateBeforeType;
|
|
842
|
+
const updateAfterType = node.updateAfterType;
|
|
870
843
|
|
|
871
844
|
if ( updateBeforeType !== NodeUpdateType.NONE || updateAfterType !== NodeUpdateType.NONE ) {
|
|
872
845
|
|
|
@@ -883,7 +856,7 @@ class NodeBuilder {
|
|
|
883
856
|
|
|
884
857
|
for ( const node of this.nodes ) {
|
|
885
858
|
|
|
886
|
-
const updateType = node.
|
|
859
|
+
const updateType = node.updateType;
|
|
887
860
|
|
|
888
861
|
if ( updateType !== NodeUpdateType.NONE ) {
|
|
889
862
|
|
|
@@ -895,8 +868,8 @@ class NodeBuilder {
|
|
|
895
868
|
|
|
896
869
|
for ( const node of this.sequentialNodes ) {
|
|
897
870
|
|
|
898
|
-
const updateBeforeType = node.
|
|
899
|
-
const updateAfterType = node.
|
|
871
|
+
const updateBeforeType = node.updateBeforeType;
|
|
872
|
+
const updateAfterType = node.updateAfterType;
|
|
900
873
|
|
|
901
874
|
if ( updateBeforeType !== NodeUpdateType.NONE ) {
|
|
902
875
|
|
|
@@ -926,6 +899,17 @@ class NodeBuilder {
|
|
|
926
899
|
|
|
927
900
|
}
|
|
928
901
|
|
|
902
|
+
/**
|
|
903
|
+
* A reference to the render pipeline.
|
|
904
|
+
*
|
|
905
|
+
* @type {RenderPipeline}
|
|
906
|
+
*/
|
|
907
|
+
get renderPipeline() {
|
|
908
|
+
|
|
909
|
+
return this.context.renderPipeline;
|
|
910
|
+
|
|
911
|
+
}
|
|
912
|
+
|
|
929
913
|
/**
|
|
930
914
|
* Whether the given texture is filtered or not.
|
|
931
915
|
*
|
|
@@ -1098,6 +1082,7 @@ class NodeBuilder {
|
|
|
1098
1082
|
delete context.getOutput;
|
|
1099
1083
|
delete context.getTextureLevel;
|
|
1100
1084
|
delete context.getAO;
|
|
1085
|
+
delete context.getGI;
|
|
1101
1086
|
delete context.getShadow;
|
|
1102
1087
|
|
|
1103
1088
|
return context;
|
|
@@ -1328,6 +1313,21 @@ class NodeBuilder {
|
|
|
1328
1313
|
|
|
1329
1314
|
}
|
|
1330
1315
|
|
|
1316
|
+
/**
|
|
1317
|
+
* Generates a texture size shader string for the given texture data.
|
|
1318
|
+
*
|
|
1319
|
+
* @abstract
|
|
1320
|
+
* @param {Texture} texture - The texture.
|
|
1321
|
+
* @param {string} textureProperty - The texture property name.
|
|
1322
|
+
* @param {string} levelSnippet - Snippet defining the mip level.
|
|
1323
|
+
* @return {string} The generated shader string.
|
|
1324
|
+
*/
|
|
1325
|
+
generateTextureSize( /* texture, textureProperty, levelSnippet */ ) {
|
|
1326
|
+
|
|
1327
|
+
warn( 'Abstract function.' );
|
|
1328
|
+
|
|
1329
|
+
}
|
|
1330
|
+
|
|
1331
1331
|
/**
|
|
1332
1332
|
* Generates the array declaration string.
|
|
1333
1333
|
*
|
|
@@ -1542,6 +1542,20 @@ class NodeBuilder {
|
|
|
1542
1542
|
|
|
1543
1543
|
}
|
|
1544
1544
|
|
|
1545
|
+
/**
|
|
1546
|
+
* Returns whether the given name is a reserved keyword of the backend's
|
|
1547
|
+
* shading language. Backends override this method to provide their
|
|
1548
|
+
* language-specific keywords.
|
|
1549
|
+
*
|
|
1550
|
+
* @param {string} name - The name to test.
|
|
1551
|
+
* @return {boolean} Whether the name is a reserved keyword or not.
|
|
1552
|
+
*/
|
|
1553
|
+
isReservedKeyword( /* name */ ) {
|
|
1554
|
+
|
|
1555
|
+
return false;
|
|
1556
|
+
|
|
1557
|
+
}
|
|
1558
|
+
|
|
1545
1559
|
/**
|
|
1546
1560
|
* Whether the given type is a vector type or not.
|
|
1547
1561
|
*
|
|
@@ -2267,6 +2281,7 @@ class NodeBuilder {
|
|
|
2267
2281
|
|
|
2268
2282
|
const shaderStage = this.shaderStage;
|
|
2269
2283
|
const declarations = this.declarations[ shaderStage ] || ( this.declarations[ shaderStage ] = {} );
|
|
2284
|
+
const checkKeywords = this.renderer.debug.diagnostics.keywords;
|
|
2270
2285
|
|
|
2271
2286
|
const baseName = node.name;
|
|
2272
2287
|
|
|
@@ -2274,9 +2289,9 @@ class NodeBuilder {
|
|
|
2274
2289
|
let property = this.getPropertyName( node );
|
|
2275
2290
|
let index = 1;
|
|
2276
2291
|
|
|
2277
|
-
// Automatically renames the property if the name is already in use.
|
|
2292
|
+
// Automatically renames the property if the name is already in use or reserved.
|
|
2278
2293
|
|
|
2279
|
-
while ( declarations[ property ] !== undefined ) {
|
|
2294
|
+
while ( ( checkKeywords && this.isReservedKeyword( name ) ) || declarations[ property ] !== undefined ) {
|
|
2280
2295
|
|
|
2281
2296
|
name = baseName + '_' + index ++;
|
|
2282
2297
|
node.name = name;
|
|
@@ -2286,7 +2301,7 @@ class NodeBuilder {
|
|
|
2286
2301
|
|
|
2287
2302
|
if ( name !== baseName ) {
|
|
2288
2303
|
|
|
2289
|
-
warn( `TSL: Declaration name '${ baseName }' of '${ node.type }' already in use. Renamed to '${ name }'.` );
|
|
2304
|
+
warn( `TSL: Declaration name '${ baseName }' of '${ node.type }' is a reserved keyword or already in use. Renamed to '${ name }'.` );
|
|
2290
2305
|
|
|
2291
2306
|
}
|
|
2292
2307
|
|
|
@@ -3104,7 +3119,7 @@ class NodeBuilder {
|
|
|
3104
3119
|
*/
|
|
3105
3120
|
prebuild() {
|
|
3106
3121
|
|
|
3107
|
-
const {
|
|
3122
|
+
const { renderer, material } = this;
|
|
3108
3123
|
|
|
3109
3124
|
// < renderer.contextNode >
|
|
3110
3125
|
|
|
@@ -3152,7 +3167,7 @@ class NodeBuilder {
|
|
|
3152
3167
|
|
|
3153
3168
|
} else {
|
|
3154
3169
|
|
|
3155
|
-
this.addFlow( 'compute',
|
|
3170
|
+
this.addFlow( 'compute', this.compute );
|
|
3156
3171
|
|
|
3157
3172
|
}
|
|
3158
3173
|
|
|
@@ -3450,7 +3465,7 @@ class NodeBuilder {
|
|
|
3450
3465
|
|
|
3451
3466
|
const mrt = this.renderer.getMRT();
|
|
3452
3467
|
|
|
3453
|
-
return ( mrt && mrt.has( 'velocity' ) ) || getDataFromObject( this.object ).useVelocity === true;
|
|
3468
|
+
return ( mrt && mrt.has( 'velocity' ) ) || ( this.object !== null && getDataFromObject( this.object ).useVelocity === true );
|
|
3454
3469
|
|
|
3455
3470
|
}
|
|
3456
3471
|
|
|
@@ -110,6 +110,14 @@ class NodeFrame {
|
|
|
110
110
|
*/
|
|
111
111
|
this.scene = null;
|
|
112
112
|
|
|
113
|
+
/**
|
|
114
|
+
* A reference to the current compute node.
|
|
115
|
+
*
|
|
116
|
+
* @type {?ComputeNode}
|
|
117
|
+
* @default null
|
|
118
|
+
*/
|
|
119
|
+
this.compute = null;
|
|
120
|
+
|
|
113
121
|
}
|
|
114
122
|
|
|
115
123
|
/**
|
|
@@ -155,7 +163,7 @@ class NodeFrame {
|
|
|
155
163
|
ProfilerService.begin( label );
|
|
156
164
|
// !WITH_GENESYS
|
|
157
165
|
|
|
158
|
-
const updateType = node.getUpdateBeforeType();
|
|
166
|
+
const updateType = node.getUpdateBeforeType( this );
|
|
159
167
|
const reference = node.updateReference( this );
|
|
160
168
|
|
|
161
169
|
if ( updateType === NodeUpdateType.FRAME ) {
|
|
@@ -221,7 +229,7 @@ class NodeFrame {
|
|
|
221
229
|
ProfilerService.begin( label );
|
|
222
230
|
// !WITH_GENESYS
|
|
223
231
|
|
|
224
|
-
const updateType = node.getUpdateAfterType();
|
|
232
|
+
const updateType = node.getUpdateAfterType( this );
|
|
225
233
|
const reference = node.updateReference( this );
|
|
226
234
|
|
|
227
235
|
if ( updateType === NodeUpdateType.FRAME ) {
|
|
@@ -274,7 +282,7 @@ class NodeFrame {
|
|
|
274
282
|
*/
|
|
275
283
|
updateNode( node ) {
|
|
276
284
|
|
|
277
|
-
const updateType = node.getUpdateType();
|
|
285
|
+
const updateType = node.getUpdateType( this );
|
|
278
286
|
const reference = node.updateReference( this );
|
|
279
287
|
|
|
280
288
|
if ( updateType === NodeUpdateType.FRAME ) {
|
|
@@ -6,6 +6,20 @@ import { Vector2 } from '../../math/Vector2.js';
|
|
|
6
6
|
import { Vector3 } from '../../math/Vector3.js';
|
|
7
7
|
import { Vector4 } from '../../math/Vector4.js';
|
|
8
8
|
|
|
9
|
+
import {
|
|
10
|
+
IntType,
|
|
11
|
+
UnsignedIntType,
|
|
12
|
+
AlphaFormat,
|
|
13
|
+
RedFormat,
|
|
14
|
+
RedIntegerFormat,
|
|
15
|
+
RGFormat,
|
|
16
|
+
RGIntegerFormat,
|
|
17
|
+
RGBFormat,
|
|
18
|
+
RGBIntegerFormat,
|
|
19
|
+
DepthFormat,
|
|
20
|
+
DepthStencilFormat
|
|
21
|
+
} from '../../constants.js';
|
|
22
|
+
|
|
9
23
|
import { error } from '../../utils.js';
|
|
10
24
|
import StackTrace from '../core/StackTrace.js';
|
|
11
25
|
|
|
@@ -276,6 +290,74 @@ export function getValueType( value ) {
|
|
|
276
290
|
|
|
277
291
|
}
|
|
278
292
|
|
|
293
|
+
/**
|
|
294
|
+
* Returns the node data type for the given texture.
|
|
295
|
+
*
|
|
296
|
+
* @private
|
|
297
|
+
* @method
|
|
298
|
+
* @param {Texture} texture - The texture.
|
|
299
|
+
* @return {string} The data type.
|
|
300
|
+
*/
|
|
301
|
+
export function getTextureType( texture ) {
|
|
302
|
+
|
|
303
|
+
if ( texture.isDepthTexture === true ) {
|
|
304
|
+
|
|
305
|
+
return 'float';
|
|
306
|
+
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
const format = texture.format;
|
|
310
|
+
|
|
311
|
+
let length;
|
|
312
|
+
|
|
313
|
+
if ( format === RedFormat || format === RedIntegerFormat || format === DepthFormat || format === DepthStencilFormat || format === AlphaFormat ) {
|
|
314
|
+
|
|
315
|
+
length = 1;
|
|
316
|
+
|
|
317
|
+
} else if ( format === RGFormat || format === RGIntegerFormat ) {
|
|
318
|
+
|
|
319
|
+
length = 2;
|
|
320
|
+
|
|
321
|
+
} else if ( format === RGBFormat || format === RGBIntegerFormat ) {
|
|
322
|
+
|
|
323
|
+
length = 3;
|
|
324
|
+
|
|
325
|
+
} else {
|
|
326
|
+
|
|
327
|
+
length = 4;
|
|
328
|
+
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
let componentType;
|
|
332
|
+
|
|
333
|
+
if ( texture.type === UnsignedIntType ) {
|
|
334
|
+
|
|
335
|
+
componentType = 'uint';
|
|
336
|
+
|
|
337
|
+
} else if ( texture.type === IntType ) {
|
|
338
|
+
|
|
339
|
+
componentType = 'int';
|
|
340
|
+
|
|
341
|
+
} else {
|
|
342
|
+
|
|
343
|
+
componentType = 'float';
|
|
344
|
+
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
if ( length === 1 ) return componentType;
|
|
348
|
+
|
|
349
|
+
let baseType = getTypeFromLength( length );
|
|
350
|
+
|
|
351
|
+
if ( componentType !== 'float' ) {
|
|
352
|
+
|
|
353
|
+
baseType = componentType[ 0 ] + baseType;
|
|
354
|
+
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
return baseType;
|
|
358
|
+
|
|
359
|
+
}
|
|
360
|
+
|
|
279
361
|
/**
|
|
280
362
|
* Returns the value/object for the given data type and parameters.
|
|
281
363
|
*
|
|
@@ -406,3 +488,9 @@ export function base64ToArrayBuffer( base64 ) {
|
|
|
406
488
|
return Uint8Array.from( atob( base64 ), c => c.charCodeAt( 0 ) ).buffer;
|
|
407
489
|
|
|
408
490
|
}
|
|
491
|
+
|
|
492
|
+
export function isArrayAsParameter( params ) {
|
|
493
|
+
|
|
494
|
+
return ( params[ 0 ] !== undefined && params[ 0 ] !== null ) && ( params[ 0 ].isNode || Object.getPrototypeOf( params[ 0 ] ) !== Object.prototype );
|
|
495
|
+
|
|
496
|
+
}
|
|
@@ -403,6 +403,14 @@ export const attenuationColor = /*@__PURE__*/ nodeImmutable( PropertyNode, 'colo
|
|
|
403
403
|
*/
|
|
404
404
|
export const dispersion = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Dispersion' );
|
|
405
405
|
|
|
406
|
+
/**
|
|
407
|
+
* TSL object that represents the shader variable `Retroreflectivity`.
|
|
408
|
+
*
|
|
409
|
+
* @tsl
|
|
410
|
+
* @type {PropertyNode<float>}
|
|
411
|
+
*/
|
|
412
|
+
export const retroreflectivity = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Retroreflectivity' );
|
|
413
|
+
|
|
406
414
|
/**
|
|
407
415
|
* TSL object that represents the shader variable `AmbientOcclusion`.
|
|
408
416
|
* If no value is assigned to this property, it defaults to a placeholder value of `1.0`.
|
|
@@ -233,7 +233,6 @@ class StackNode extends Node {
|
|
|
233
233
|
* Represents a `switch` statement in TSL.
|
|
234
234
|
*
|
|
235
235
|
* @param {any} expression - Represents the expression.
|
|
236
|
-
* @param {Function} method - TSL code which is executed if the condition evaluates to `true`.
|
|
237
236
|
* @return {StackNode} A reference to this stack node.
|
|
238
237
|
*/
|
|
239
238
|
Switch( expression ) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import StructTypeNode from './StructTypeNode.js';
|
|
3
|
-
import { nodeProxyConstructor } from '../tsl/TSLCore.js';
|
|
3
|
+
import { nodeObject, nodeProxyConstructor } from '../tsl/TSLCore.js';
|
|
4
|
+
import { isArrayAsParameter } from './NodeUtils.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* StructNode allows to create custom structures with multiple members.
|
|
@@ -103,7 +104,7 @@ export const struct = ( membersLayout, name = null ) => {
|
|
|
103
104
|
|
|
104
105
|
if ( params.length > 0 ) {
|
|
105
106
|
|
|
106
|
-
if ( params
|
|
107
|
+
if ( isArrayAsParameter( params ) ) {
|
|
107
108
|
|
|
108
109
|
values = {};
|
|
109
110
|
|
|
@@ -111,7 +112,7 @@ export const struct = ( membersLayout, name = null ) => {
|
|
|
111
112
|
|
|
112
113
|
for ( let i = 0; i < params.length; i ++ ) {
|
|
113
114
|
|
|
114
|
-
values[ names[ i ] ] = params[ i ];
|
|
115
|
+
values[ names[ i ] ] = nodeObject( params[ i ] );
|
|
115
116
|
|
|
116
117
|
}
|
|
117
118
|
|
|
@@ -50,8 +50,9 @@ class UniformGroupNode extends Node {
|
|
|
50
50
|
this.shared = shared;
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
53
|
+
* The sort key that determines the order of this group relative to other
|
|
54
|
+
* uniform groups. Groups with a lower order are placed first. Shared groups
|
|
55
|
+
* typically use a lower order so they precede regular per-object groups.
|
|
55
56
|
*
|
|
56
57
|
* @type {number}
|
|
57
58
|
* @default 1
|
|
@@ -123,6 +123,31 @@ class UniformNode extends InputNode {
|
|
|
123
123
|
|
|
124
124
|
}
|
|
125
125
|
|
|
126
|
+
/**
|
|
127
|
+
* Uniform nodes with the same hash share a single uniform. This method returns the node
|
|
128
|
+
* the shared uniform refers to which is the first node registered for the hash.
|
|
129
|
+
*
|
|
130
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
131
|
+
* @return {UniformNode} The node the shared uniform refers to.
|
|
132
|
+
*/
|
|
133
|
+
getSharedNode( builder ) {
|
|
134
|
+
|
|
135
|
+
const hash = this.getUniformHash( builder );
|
|
136
|
+
|
|
137
|
+
let sharedNode = builder.getNodeFromHash( hash );
|
|
138
|
+
|
|
139
|
+
if ( sharedNode === undefined ) {
|
|
140
|
+
|
|
141
|
+
builder.setHashNode( this, hash );
|
|
142
|
+
|
|
143
|
+
sharedNode = this;
|
|
144
|
+
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return sharedNode;
|
|
148
|
+
|
|
149
|
+
}
|
|
150
|
+
|
|
126
151
|
onUpdate( callback, updateType ) {
|
|
127
152
|
|
|
128
153
|
callback = callback.bind( this );
|
|
@@ -159,18 +184,7 @@ class UniformNode extends InputNode {
|
|
|
159
184
|
|
|
160
185
|
const type = this.getNodeType( builder );
|
|
161
186
|
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
let sharedNode = builder.getNodeFromHash( hash );
|
|
165
|
-
|
|
166
|
-
if ( sharedNode === undefined ) {
|
|
167
|
-
|
|
168
|
-
builder.setHashNode( this, hash );
|
|
169
|
-
|
|
170
|
-
sharedNode = this;
|
|
171
|
-
|
|
172
|
-
}
|
|
173
|
-
|
|
187
|
+
const sharedNode = this.getSharedNode( builder );
|
|
174
188
|
const sharedNodeType = sharedNode.getInputType( builder );
|
|
175
189
|
|
|
176
190
|
const nodeUniform = builder.getUniformFromNode( sharedNode, sharedNodeType, builder.shaderStage, this.name || builder.context.nodeName );
|
|
@@ -359,7 +359,6 @@ export const Const = ( node, name = null ) => createVar( node, name, true ).toSt
|
|
|
359
359
|
* @tsl
|
|
360
360
|
* @function
|
|
361
361
|
* @param {Node} node - The node for which a variable should be created.
|
|
362
|
-
* @param {?string} name - The name of the variable in the shader.
|
|
363
362
|
* @returns {VarNode}
|
|
364
363
|
*/
|
|
365
364
|
export const VarIntent = ( node ) => {
|
|
@@ -8,7 +8,7 @@ import { Fn, nodeProxy, float, vec2 } from '../tsl/TSLBase.js';
|
|
|
8
8
|
// Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen
|
|
9
9
|
// https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf
|
|
10
10
|
|
|
11
|
-
const dHdxy_fwd = Fn( ( { textureNode, bumpScale } ) => {
|
|
11
|
+
const dHdxy_fwd = /*@__PURE__*/ Fn( ( { textureNode, bumpScale } ) => {
|
|
12
12
|
|
|
13
13
|
// It's used to preserve the same TextureNode instance
|
|
14
14
|
const sampleTexture = ( callback ) => textureNode.isolate().context( { getUV: ( texNode ) => callback( texNode.uvNode || uv() ), forceUVContext: true } );
|
|
@@ -24,7 +24,7 @@ const dHdxy_fwd = Fn( ( { textureNode, bumpScale } ) => {
|
|
|
24
24
|
|
|
25
25
|
// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)
|
|
26
26
|
|
|
27
|
-
const perturbNormalArb = Fn( ( inputs ) => {
|
|
27
|
+
const perturbNormalArb = /*@__PURE__*/ Fn( ( inputs ) => {
|
|
28
28
|
|
|
29
29
|
const { surf_pos, surf_norm, dHdxy } = inputs;
|
|
30
30
|
|
|
@@ -151,7 +151,7 @@ export const cdl = /*@__PURE__*/ Fn( ( [
|
|
|
151
151
|
* @param {Node} stepsNode - Controls the intensity of the posterization effect. A lower number results in a more blocky appearance.
|
|
152
152
|
* @returns {Node} The posterized color.
|
|
153
153
|
*/
|
|
154
|
-
export const posterize = Fn( ( [ source, steps ] ) => {
|
|
154
|
+
export const posterize = /*@__PURE__*/ Fn( ( [ source, steps ] ) => {
|
|
155
155
|
|
|
156
156
|
return source.mul( steps ).floor().div( steps );
|
|
157
157
|
|
|
@@ -250,7 +250,7 @@ class PassNode extends TempNode {
|
|
|
250
250
|
|
|
251
251
|
if ( this.scope === PassNode.DEPTH || options.depthBuffer !== false ) {
|
|
252
252
|
|
|
253
|
-
depthTexture = new DepthTexture();
|
|
253
|
+
depthTexture = options.depthTexture || new DepthTexture();
|
|
254
254
|
depthTexture.isRenderTargetTexture = true;
|
|
255
255
|
//depthTexture.type = FloatType;
|
|
256
256
|
depthTexture.name = 'depth';
|
|
@@ -289,6 +289,40 @@ class PassNode extends TempNode {
|
|
|
289
289
|
*/
|
|
290
290
|
this.opaque = true;
|
|
291
291
|
|
|
292
|
+
this.lighting = null;
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Whether the renderer should automatically clear before rendering the pass.
|
|
296
|
+
*
|
|
297
|
+
* @type {boolean}
|
|
298
|
+
* @default true
|
|
299
|
+
*/
|
|
300
|
+
this.autoClear = options.autoClear !== undefined ? options.autoClear : true;
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Whether the color buffer should be cleared.
|
|
304
|
+
*
|
|
305
|
+
* @type {boolean}
|
|
306
|
+
* @default true
|
|
307
|
+
*/
|
|
308
|
+
this.autoClearColor = options.autoClearColor !== undefined ? options.autoClearColor : true;
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* Whether the depth buffer should be cleared.
|
|
312
|
+
*
|
|
313
|
+
* @type {boolean}
|
|
314
|
+
* @default true
|
|
315
|
+
*/
|
|
316
|
+
this.autoClearDepth = options.autoClearDepth !== undefined ? options.autoClearDepth : true;
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Whether the stencil buffer should be cleared.
|
|
320
|
+
*
|
|
321
|
+
* @type {boolean}
|
|
322
|
+
* @default true
|
|
323
|
+
*/
|
|
324
|
+
this.autoClearStencil = options.autoClearStencil !== undefined ? options.autoClearStencil : true;
|
|
325
|
+
|
|
292
326
|
/**
|
|
293
327
|
* An optional global context for the pass.
|
|
294
328
|
*
|
|
@@ -807,8 +841,12 @@ class PassNode extends TempNode {
|
|
|
807
841
|
const currentRenderTarget = renderer.getRenderTarget();
|
|
808
842
|
const currentMRT = renderer.getMRT();
|
|
809
843
|
const currentAutoClear = renderer.autoClear;
|
|
844
|
+
const currentAutoClearColor = renderer.autoClearColor;
|
|
845
|
+
const currentAutoClearDepth = renderer.autoClearDepth;
|
|
846
|
+
const currentAutoClearStencil = renderer.autoClearStencil;
|
|
810
847
|
const currentTransparent = renderer.transparent;
|
|
811
848
|
const currentOpaque = renderer.opaque;
|
|
849
|
+
const currentLighting = renderer.lighting;
|
|
812
850
|
const currentMask = camera.layers.mask;
|
|
813
851
|
const currentContextNode = renderer.contextNode;
|
|
814
852
|
const currentOverrideMaterial = scene.overrideMaterial;
|
|
@@ -836,10 +874,19 @@ class PassNode extends TempNode {
|
|
|
836
874
|
|
|
837
875
|
renderer.setRenderTarget( this.renderTarget );
|
|
838
876
|
renderer.setMRT( this._mrt );
|
|
839
|
-
renderer.autoClear =
|
|
877
|
+
renderer.autoClear = this.autoClear;
|
|
878
|
+
renderer.autoClearColor = this.autoClearColor;
|
|
879
|
+
renderer.autoClearDepth = this.autoClearDepth;
|
|
880
|
+
renderer.autoClearStencil = this.autoClearStencil;
|
|
840
881
|
renderer.transparent = this.transparent;
|
|
841
882
|
renderer.opaque = this.opaque;
|
|
842
883
|
|
|
884
|
+
if ( this.lighting !== null ) {
|
|
885
|
+
|
|
886
|
+
renderer.lighting = this.lighting;
|
|
887
|
+
|
|
888
|
+
}
|
|
889
|
+
|
|
843
890
|
if ( this.contextNode !== null ) {
|
|
844
891
|
|
|
845
892
|
if ( this._contextNodeCache === null || this._contextNodeCache.version !== this.version ) {
|
|
@@ -867,9 +914,13 @@ class PassNode extends TempNode {
|
|
|
867
914
|
renderer.setRenderTarget( currentRenderTarget );
|
|
868
915
|
renderer.setMRT( currentMRT );
|
|
869
916
|
renderer.autoClear = currentAutoClear;
|
|
917
|
+
renderer.autoClearColor = currentAutoClearColor;
|
|
918
|
+
renderer.autoClearDepth = currentAutoClearDepth;
|
|
919
|
+
renderer.autoClearStencil = currentAutoClearStencil;
|
|
870
920
|
renderer.transparent = currentTransparent;
|
|
871
921
|
renderer.opaque = currentOpaque;
|
|
872
922
|
renderer.contextNode = currentContextNode;
|
|
923
|
+
renderer.lighting = currentLighting;
|
|
873
924
|
|
|
874
925
|
camera.layers.mask = currentMask;
|
|
875
926
|
|
|
@@ -988,26 +1039,36 @@ class PassNode extends TempNode {
|
|
|
988
1039
|
*/
|
|
989
1040
|
dispose() {
|
|
990
1041
|
|
|
1042
|
+
super.dispose();
|
|
1043
|
+
|
|
991
1044
|
this.renderTarget.dispose();
|
|
992
1045
|
|
|
993
1046
|
}
|
|
994
1047
|
|
|
995
1048
|
|
|
996
|
-
|
|
1049
|
+
/**
|
|
1050
|
+
* @static
|
|
1051
|
+
* @type {'color'}
|
|
1052
|
+
* @default 'color'
|
|
1053
|
+
*/
|
|
1054
|
+
static get COLOR() {
|
|
997
1055
|
|
|
998
|
-
|
|
999
|
-
* @static
|
|
1000
|
-
* @type {'color'}
|
|
1001
|
-
* @default 'color'
|
|
1002
|
-
*/
|
|
1003
|
-
PassNode.COLOR = 'color';
|
|
1056
|
+
return 'color';
|
|
1004
1057
|
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1060
|
+
/**
|
|
1061
|
+
* @static
|
|
1062
|
+
* @type {'depth'}
|
|
1063
|
+
* @default 'depth'
|
|
1064
|
+
*/
|
|
1065
|
+
static get DEPTH() {
|
|
1066
|
+
|
|
1067
|
+
return 'depth';
|
|
1068
|
+
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
}
|
|
1011
1072
|
|
|
1012
1073
|
export default PassNode;
|
|
1013
1074
|
|