@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
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { error } from '../../utils.js';
|
|
1
2
|
import Node from '../core/Node.js';
|
|
2
3
|
import { nodeProxy } from '../tsl/TSLCore.js';
|
|
3
4
|
|
|
@@ -35,15 +36,23 @@ class BarrierNode extends Node {
|
|
|
35
36
|
generate( builder ) {
|
|
36
37
|
|
|
37
38
|
const { scope } = this;
|
|
38
|
-
const { renderer } = builder;
|
|
39
|
+
const { renderer, shaderStage } = builder;
|
|
40
|
+
|
|
41
|
+
const barrierMethod = `${scope}Barrier`;
|
|
42
|
+
|
|
43
|
+
if ( shaderStage !== 'compute' ) {
|
|
44
|
+
|
|
45
|
+
error( `TSL: "${barrierMethod}" is not supported in the ${shaderStage} stage and can only be executed in compute.` );
|
|
46
|
+
|
|
47
|
+
}
|
|
39
48
|
|
|
40
49
|
if ( renderer.backend.isWebGLBackend === true ) {
|
|
41
50
|
|
|
42
|
-
builder.addFlowCode( `\t// ${
|
|
51
|
+
builder.addFlowCode( `\t// ${barrierMethod}() \n` );
|
|
43
52
|
|
|
44
53
|
} else {
|
|
45
54
|
|
|
46
|
-
builder.addLineFlowCode( `${
|
|
55
|
+
builder.addLineFlowCode( `${barrierMethod}()`, this );
|
|
47
56
|
|
|
48
57
|
}
|
|
49
58
|
|
|
@@ -61,7 +70,7 @@ export default BarrierNode;
|
|
|
61
70
|
* @param {string} scope - The scope defines the behavior of the node..
|
|
62
71
|
* @returns {BarrierNode}
|
|
63
72
|
*/
|
|
64
|
-
const barrier = nodeProxy( BarrierNode );
|
|
73
|
+
const barrier = /*@__PURE__*/ nodeProxy( BarrierNode );
|
|
65
74
|
|
|
66
75
|
/**
|
|
67
76
|
* TSL function for creating a workgroup barrier. All compute shader
|
|
@@ -110,7 +110,7 @@ class ComputeBuiltinNode extends Node {
|
|
|
110
110
|
|
|
111
111
|
} else {
|
|
112
112
|
|
|
113
|
-
warn( `
|
|
113
|
+
warn( `TSL: Compute built-in value "${builtinName}" can not be accessed in the ${builder.shaderStage} stage` );
|
|
114
114
|
return builder.generateConst( nodeType );
|
|
115
115
|
|
|
116
116
|
}
|
|
@@ -84,15 +84,6 @@ class ComputeNode extends Node {
|
|
|
84
84
|
*/
|
|
85
85
|
this.name = '';
|
|
86
86
|
|
|
87
|
-
/**
|
|
88
|
-
* The `updateBeforeType` is set to `NodeUpdateType.OBJECT` since {@link ComputeNode#updateBefore}
|
|
89
|
-
* is executed once per object by default.
|
|
90
|
-
*
|
|
91
|
-
* @type {string}
|
|
92
|
-
* @default 'object'
|
|
93
|
-
*/
|
|
94
|
-
this.updateBeforeType = NodeUpdateType.OBJECT;
|
|
95
|
-
|
|
96
87
|
/**
|
|
97
88
|
* A callback executed when the compute node finishes initialization.
|
|
98
89
|
*
|
|
@@ -108,14 +99,14 @@ class ComputeNode extends Node {
|
|
|
108
99
|
*/
|
|
109
100
|
this.countNode = null;
|
|
110
101
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
this.
|
|
102
|
+
/**
|
|
103
|
+
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node computes
|
|
104
|
+
* once per frame.
|
|
105
|
+
*
|
|
106
|
+
* @type {string}
|
|
107
|
+
* @default 'frame'
|
|
108
|
+
*/
|
|
109
|
+
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
119
110
|
|
|
120
111
|
}
|
|
121
112
|
|
|
@@ -162,6 +153,18 @@ class ComputeNode extends Node {
|
|
|
162
153
|
|
|
163
154
|
}
|
|
164
155
|
|
|
156
|
+
/**
|
|
157
|
+
* Returns the update type of {@link Node#updateBefore}.
|
|
158
|
+
*
|
|
159
|
+
* @param {NodeFrame} [frame] - The current node frame.
|
|
160
|
+
* @return {NodeUpdateType} The update type.
|
|
161
|
+
*/
|
|
162
|
+
getUpdateBeforeType( frame ) {
|
|
163
|
+
|
|
164
|
+
return frame.compute !== this ? this.updateBeforeType : NodeUpdateType.NONE;
|
|
165
|
+
|
|
166
|
+
}
|
|
167
|
+
|
|
165
168
|
/**
|
|
166
169
|
* The method execute the compute for this node.
|
|
167
170
|
*
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { error } from '../../utils.js';
|
|
1
2
|
import TempNode from '../core/TempNode.js';
|
|
2
3
|
import { nodeProxyIntent } from '../tsl/TSLCore.js';
|
|
3
4
|
|
|
@@ -99,6 +100,12 @@ class SubgroupFunctionNode extends TempNode {
|
|
|
99
100
|
|
|
100
101
|
const method = this.method;
|
|
101
102
|
|
|
103
|
+
if ( builder.shaderStage === 'vertex' ) {
|
|
104
|
+
|
|
105
|
+
error( `TSL: "${this.method}" is not supported in the vertex shader stage.` );
|
|
106
|
+
|
|
107
|
+
}
|
|
108
|
+
|
|
102
109
|
const type = this.getNodeType( builder );
|
|
103
110
|
const inputType = this.getInputType( builder );
|
|
104
111
|
|
|
@@ -162,42 +169,162 @@ class SubgroupFunctionNode extends TempNode {
|
|
|
162
169
|
|
|
163
170
|
}
|
|
164
171
|
|
|
165
|
-
|
|
172
|
+
// 0 inputs
|
|
173
|
+
static get SUBGROUP_ELECT() {
|
|
166
174
|
|
|
167
|
-
|
|
168
|
-
SubgroupFunctionNode.SUBGROUP_ELECT = 'subgroupElect';
|
|
169
|
-
|
|
170
|
-
// 1 input
|
|
171
|
-
SubgroupFunctionNode.SUBGROUP_BALLOT = 'subgroupBallot';
|
|
172
|
-
SubgroupFunctionNode.SUBGROUP_ADD = 'subgroupAdd';
|
|
173
|
-
SubgroupFunctionNode.SUBGROUP_INCLUSIVE_ADD = 'subgroupInclusiveAdd';
|
|
174
|
-
SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_AND = 'subgroupExclusiveAdd';
|
|
175
|
-
SubgroupFunctionNode.SUBGROUP_MUL = 'subgroupMul';
|
|
176
|
-
SubgroupFunctionNode.SUBGROUP_INCLUSIVE_MUL = 'subgroupInclusiveMul';
|
|
177
|
-
SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_MUL = 'subgroupExclusiveMul';
|
|
178
|
-
SubgroupFunctionNode.SUBGROUP_AND = 'subgroupAnd';
|
|
179
|
-
SubgroupFunctionNode.SUBGROUP_OR = 'subgroupOr';
|
|
180
|
-
SubgroupFunctionNode.SUBGROUP_XOR = 'subgroupXor';
|
|
181
|
-
SubgroupFunctionNode.SUBGROUP_MIN = 'subgroupMin';
|
|
182
|
-
SubgroupFunctionNode.SUBGROUP_MAX = 'subgroupMax';
|
|
183
|
-
SubgroupFunctionNode.SUBGROUP_ALL = 'subgroupAll';
|
|
184
|
-
SubgroupFunctionNode.SUBGROUP_ANY = 'subgroupAny';
|
|
185
|
-
SubgroupFunctionNode.SUBGROUP_BROADCAST_FIRST = 'subgroupBroadcastFirst';
|
|
186
|
-
SubgroupFunctionNode.QUAD_SWAP_X = 'quadSwapX';
|
|
187
|
-
SubgroupFunctionNode.QUAD_SWAP_Y = 'quadSwapY';
|
|
188
|
-
SubgroupFunctionNode.QUAD_SWAP_DIAGONAL = 'quadSwapDiagonal';
|
|
189
|
-
|
|
190
|
-
// 2 inputs
|
|
191
|
-
SubgroupFunctionNode.SUBGROUP_BROADCAST = 'subgroupBroadcast';
|
|
192
|
-
SubgroupFunctionNode.SUBGROUP_SHUFFLE = 'subgroupShuffle';
|
|
193
|
-
SubgroupFunctionNode.SUBGROUP_SHUFFLE_XOR = 'subgroupShuffleXor';
|
|
194
|
-
SubgroupFunctionNode.SUBGROUP_SHUFFLE_UP = 'subgroupShuffleUp';
|
|
195
|
-
SubgroupFunctionNode.SUBGROUP_SHUFFLE_DOWN = 'subgroupShuffleDown';
|
|
196
|
-
SubgroupFunctionNode.QUAD_BROADCAST = 'quadBroadcast';
|
|
175
|
+
return 'subgroupElect';
|
|
197
176
|
|
|
198
|
-
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// 1 input
|
|
180
|
+
static get SUBGROUP_BALLOT() {
|
|
181
|
+
|
|
182
|
+
return 'subgroupBallot';
|
|
183
|
+
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
static get SUBGROUP_ADD() {
|
|
187
|
+
|
|
188
|
+
return 'subgroupAdd';
|
|
189
|
+
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
static get SUBGROUP_INCLUSIVE_ADD() {
|
|
193
|
+
|
|
194
|
+
return 'subgroupInclusiveAdd';
|
|
195
|
+
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
static get SUBGROUP_EXCLUSIVE_ADD() {
|
|
199
|
+
|
|
200
|
+
return 'subgroupExclusiveAdd';
|
|
201
|
+
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
static get SUBGROUP_MUL() {
|
|
205
|
+
|
|
206
|
+
return 'subgroupMul';
|
|
207
|
+
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
static get SUBGROUP_INCLUSIVE_MUL() {
|
|
211
|
+
|
|
212
|
+
return 'subgroupInclusiveMul';
|
|
213
|
+
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
static get SUBGROUP_EXCLUSIVE_MUL() {
|
|
217
|
+
|
|
218
|
+
return 'subgroupExclusiveMul';
|
|
219
|
+
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
static get SUBGROUP_AND() {
|
|
223
|
+
|
|
224
|
+
return 'subgroupAnd';
|
|
225
|
+
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
static get SUBGROUP_OR() {
|
|
229
|
+
|
|
230
|
+
return 'subgroupOr';
|
|
231
|
+
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
static get SUBGROUP_XOR() {
|
|
235
|
+
|
|
236
|
+
return 'subgroupXor';
|
|
237
|
+
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
static get SUBGROUP_MIN() {
|
|
241
|
+
|
|
242
|
+
return 'subgroupMin';
|
|
243
|
+
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
static get SUBGROUP_MAX() {
|
|
247
|
+
|
|
248
|
+
return 'subgroupMax';
|
|
199
249
|
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
static get SUBGROUP_ALL() {
|
|
253
|
+
|
|
254
|
+
return 'subgroupAll';
|
|
255
|
+
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
static get SUBGROUP_ANY() {
|
|
259
|
+
|
|
260
|
+
return 'subgroupAny';
|
|
261
|
+
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
static get SUBGROUP_BROADCAST_FIRST() {
|
|
265
|
+
|
|
266
|
+
return 'subgroupBroadcastFirst';
|
|
267
|
+
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
static get QUAD_SWAP_X() {
|
|
200
271
|
|
|
272
|
+
return 'quadSwapX';
|
|
273
|
+
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
static get QUAD_SWAP_Y() {
|
|
277
|
+
|
|
278
|
+
return 'quadSwapY';
|
|
279
|
+
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
static get QUAD_SWAP_DIAGONAL() {
|
|
283
|
+
|
|
284
|
+
return 'quadSwapDiagonal';
|
|
285
|
+
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// 2 inputs
|
|
289
|
+
static get SUBGROUP_BROADCAST() {
|
|
290
|
+
|
|
291
|
+
return 'subgroupBroadcast';
|
|
292
|
+
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
static get SUBGROUP_SHUFFLE() {
|
|
296
|
+
|
|
297
|
+
return 'subgroupShuffle';
|
|
298
|
+
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
static get SUBGROUP_SHUFFLE_XOR() {
|
|
302
|
+
|
|
303
|
+
return 'subgroupShuffleXor';
|
|
304
|
+
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
static get SUBGROUP_SHUFFLE_UP() {
|
|
308
|
+
|
|
309
|
+
return 'subgroupShuffleUp';
|
|
310
|
+
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
static get SUBGROUP_SHUFFLE_DOWN() {
|
|
314
|
+
|
|
315
|
+
return 'subgroupShuffleDown';
|
|
316
|
+
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
static get QUAD_BROADCAST() {
|
|
320
|
+
|
|
321
|
+
return 'quadBroadcast';
|
|
322
|
+
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
export default SubgroupFunctionNode;
|
|
201
328
|
|
|
202
329
|
/**
|
|
203
330
|
* Returns true if this invocation has the lowest subgroup_invocation_id
|
|
@@ -248,7 +375,7 @@ export const subgroupInclusiveAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunct
|
|
|
248
375
|
* @param {number} e - The value provided to the exclusive scan by the current invocation.
|
|
249
376
|
* @return {number} The accumulated result of the exclusive scan operation.
|
|
250
377
|
*/
|
|
251
|
-
export const subgroupExclusiveAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.
|
|
378
|
+
export const subgroupExclusiveAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_ADD ).setParameterLength( 1 );
|
|
252
379
|
|
|
253
380
|
/**
|
|
254
381
|
* A reduction that multiplies e among all active invocations and returns that result.
|
|
@@ -335,18 +462,20 @@ export const subgroupMax = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode,
|
|
|
335
462
|
*
|
|
336
463
|
* @tsl
|
|
337
464
|
* @method
|
|
465
|
+
* @param {boolean} e - The predicate provided by the current invocation.
|
|
338
466
|
* @return {bool} The result of the computation.
|
|
339
467
|
*/
|
|
340
|
-
export const subgroupAll = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ALL ).setParameterLength(
|
|
468
|
+
export const subgroupAll = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ALL ).setParameterLength( 1 );
|
|
341
469
|
|
|
342
470
|
/**
|
|
343
471
|
* Returns true if e is true for any active invocation in the subgroup
|
|
344
472
|
*
|
|
345
473
|
* @tsl
|
|
346
474
|
* @method
|
|
475
|
+
* @param {boolean} e - The predicate provided by the current invocation.
|
|
347
476
|
* @return {bool} The result of the computation.
|
|
348
477
|
*/
|
|
349
|
-
export const subgroupAny = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ANY ).setParameterLength(
|
|
478
|
+
export const subgroupAny = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ANY ).setParameterLength( 1 );
|
|
350
479
|
|
|
351
480
|
/**
|
|
352
481
|
* Broadcasts e from the active invocation with the lowest subgroup_invocation_id in the subgroup to all other active invocations.
|
|
@@ -354,10 +483,9 @@ export const subgroupAny = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode,
|
|
|
354
483
|
* @tsl
|
|
355
484
|
* @method
|
|
356
485
|
* @param {number} e - The value to broadcast from the lowest subgroup invocation.
|
|
357
|
-
* @param {number} id - The subgroup invocation to broadcast from.
|
|
358
486
|
* @return {number} The broadcast value.
|
|
359
487
|
*/
|
|
360
|
-
export const subgroupBroadcastFirst = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BROADCAST_FIRST ).setParameterLength(
|
|
488
|
+
export const subgroupBroadcastFirst = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BROADCAST_FIRST ).setParameterLength( 1 );
|
|
361
489
|
|
|
362
490
|
/**
|
|
363
491
|
* Swaps e between invocations in the quad in the X direction.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
2
2
|
import Node from '../core/Node.js';
|
|
3
|
-
import { warn } from '../../utils.js';
|
|
3
|
+
import { error, warn } from '../../utils.js';
|
|
4
4
|
import StackTrace from '../core/StackTrace.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -69,9 +69,9 @@ class WorkgroupInfoElementNode extends ArrayElementNode {
|
|
|
69
69
|
class WorkgroupInfoNode extends Node {
|
|
70
70
|
|
|
71
71
|
/**
|
|
72
|
-
* Constructs a new
|
|
72
|
+
* Constructs a new workgroup info node.
|
|
73
73
|
*
|
|
74
|
-
* @param {string} scope -
|
|
74
|
+
* @param {string} scope - The address space the buffer is scoped to. Currently only `'Workgroup'` is used.
|
|
75
75
|
* @param {string} bufferType - The data type of a 'workgroup' scoped buffer element.
|
|
76
76
|
* @param {number} [bufferCount=0] - The number of elements in the buffer.
|
|
77
77
|
*/
|
|
@@ -94,6 +94,14 @@ class WorkgroupInfoNode extends Node {
|
|
|
94
94
|
*/
|
|
95
95
|
this.bufferCount = bufferCount;
|
|
96
96
|
|
|
97
|
+
/**
|
|
98
|
+
* Whether the node is atomic or not.
|
|
99
|
+
*
|
|
100
|
+
* @type {boolean}
|
|
101
|
+
* @default false
|
|
102
|
+
*/
|
|
103
|
+
this.isAtomic = false;
|
|
104
|
+
|
|
97
105
|
/**
|
|
98
106
|
* This flag can be used for type testing.
|
|
99
107
|
*
|
|
@@ -111,7 +119,7 @@ class WorkgroupInfoNode extends Node {
|
|
|
111
119
|
this.elementType = bufferType;
|
|
112
120
|
|
|
113
121
|
/**
|
|
114
|
-
*
|
|
122
|
+
* The address space the buffer is scoped to. Currently only `'Workgroup'` is used.
|
|
115
123
|
*
|
|
116
124
|
* @type {string}
|
|
117
125
|
*/
|
|
@@ -170,6 +178,31 @@ class WorkgroupInfoNode extends Node {
|
|
|
170
178
|
|
|
171
179
|
}
|
|
172
180
|
|
|
181
|
+
/**
|
|
182
|
+
* Defines whether the node is atomic or not.
|
|
183
|
+
*
|
|
184
|
+
* @param {boolean} value - The atomic flag.
|
|
185
|
+
* @return {WorkgroupInfoNode} A reference to this node.
|
|
186
|
+
*/
|
|
187
|
+
setAtomic( value ) {
|
|
188
|
+
|
|
189
|
+
this.isAtomic = value;
|
|
190
|
+
|
|
191
|
+
return this;
|
|
192
|
+
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Convenience method for making this node atomic.
|
|
197
|
+
*
|
|
198
|
+
* @return {WorkgroupInfoNode} A reference to this node.
|
|
199
|
+
*/
|
|
200
|
+
toAtomic() {
|
|
201
|
+
|
|
202
|
+
return this.setAtomic( true );
|
|
203
|
+
|
|
204
|
+
}
|
|
205
|
+
|
|
173
206
|
|
|
174
207
|
/**
|
|
175
208
|
* The data type of the array buffer.
|
|
@@ -209,9 +242,15 @@ class WorkgroupInfoNode extends Node {
|
|
|
209
242
|
|
|
210
243
|
generate( builder ) {
|
|
211
244
|
|
|
245
|
+
if ( builder.shaderStage !== 'compute' ) {
|
|
246
|
+
|
|
247
|
+
error( 'TSL: "workgroupArray()" can only be executed within the compute shader stage' );
|
|
248
|
+
|
|
249
|
+
}
|
|
250
|
+
|
|
212
251
|
const name = ( this.name !== '' ) ? this.name : `${this.scope}Array_${this.id}`;
|
|
213
252
|
|
|
214
|
-
return builder.getScopedArray( name, this.scope.toLowerCase(), this.bufferType, this.bufferCount );
|
|
253
|
+
return builder.getScopedArray( name, this.scope.toLowerCase(), this.bufferType, this.bufferCount, this.isAtomic );
|
|
215
254
|
|
|
216
255
|
}
|
|
217
256
|
|
|
@@ -231,4 +270,3 @@ export default WorkgroupInfoNode;
|
|
|
231
270
|
*/
|
|
232
271
|
export const workgroupArray = ( type, count ) => new WorkgroupInfoNode( 'Workgroup', type, count );
|
|
233
272
|
|
|
234
|
-
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import LightingNode from './LightingNode.js';
|
|
2
2
|
import { isolate } from '../core/IsolateNode.js';
|
|
3
|
-
import { roughness, clearcoatRoughness } from '../core/PropertyNode.js';
|
|
3
|
+
import { roughness, clearcoatRoughness, retroreflectivity } from '../core/PropertyNode.js';
|
|
4
4
|
import { cameraWorldMatrix } from '../accessors/Camera.js';
|
|
5
5
|
import { normalView, clearcoatNormalView, normalWorld } from '../accessors/Normal.js';
|
|
6
6
|
import { positionViewDirection } from '../accessors/Position.js';
|
|
@@ -76,15 +76,23 @@ class EnvironmentNode extends LightingNode {
|
|
|
76
76
|
const useAnisotropy = material.useAnisotropy === true || material.anisotropy > 0;
|
|
77
77
|
const radianceNormalView = useAnisotropy ? bentNormalView : normalView;
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
let radiance = isolate( envNode.context( createRadianceContext( roughness, radianceNormalView ) ).mul( materialEnvIntensity ) );
|
|
80
|
+
|
|
81
|
+
if ( material.useRetroreflection === true || material.retroreflectivity > 0 ) {
|
|
82
|
+
|
|
83
|
+
const retroRadiance = isolate( envNode.context( createRetroRadianceContext( roughness, radianceNormalView ) ).mul( materialEnvIntensity ) );
|
|
84
|
+
|
|
85
|
+
radiance = retroreflectivity.clamp().mix( radiance, retroRadiance );
|
|
86
|
+
|
|
87
|
+
}
|
|
88
|
+
|
|
80
89
|
const irradiance = envNode.context( createIrradianceContext( normalWorld ) ).mul( Math.PI ).mul( materialEnvIntensity );
|
|
81
90
|
|
|
82
|
-
const isolateRadiance = isolate( radiance );
|
|
83
91
|
const isolateIrradiance = isolate( irradiance );
|
|
84
92
|
|
|
85
93
|
//
|
|
86
94
|
|
|
87
|
-
builder.context.radiance.addAssign(
|
|
95
|
+
builder.context.radiance.addAssign( radiance );
|
|
88
96
|
|
|
89
97
|
builder.context.iblIrradiance.addAssign( isolateIrradiance );
|
|
90
98
|
|
|
@@ -160,6 +168,34 @@ const createRadianceContext = ( roughnessNode, normalViewNode ) => {
|
|
|
160
168
|
|
|
161
169
|
};
|
|
162
170
|
|
|
171
|
+
const createRetroRadianceContext = ( roughnessNode, normalViewNode ) => {
|
|
172
|
+
|
|
173
|
+
let retroVec = null;
|
|
174
|
+
|
|
175
|
+
return {
|
|
176
|
+
getUV: () => {
|
|
177
|
+
|
|
178
|
+
if ( retroVec === null ) {
|
|
179
|
+
|
|
180
|
+
// The retroreflective lobe returns light toward its source, so the environment is sampled along the view direction
|
|
181
|
+
retroVec = pow4( roughnessNode ).mix( positionViewDirection, normalViewNode ).normalize();
|
|
182
|
+
|
|
183
|
+
retroVec = retroVec.transformDirection( cameraWorldMatrix );
|
|
184
|
+
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return retroVec;
|
|
188
|
+
|
|
189
|
+
},
|
|
190
|
+
getTextureLevel: () => {
|
|
191
|
+
|
|
192
|
+
return roughnessNode;
|
|
193
|
+
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
};
|
|
198
|
+
|
|
163
199
|
const createIrradianceContext = ( normalWorldNode ) => {
|
|
164
200
|
|
|
165
201
|
return {
|
|
@@ -169,11 +169,11 @@ class LightsNode extends Node {
|
|
|
169
169
|
*/
|
|
170
170
|
customCacheKey() {
|
|
171
171
|
|
|
172
|
-
const
|
|
172
|
+
const builtinLights = this.getBuiltinLights();
|
|
173
173
|
|
|
174
|
-
for ( let i = 0; i <
|
|
174
|
+
for ( let i = 0; i < builtinLights.length; i ++ ) {
|
|
175
175
|
|
|
176
|
-
const light =
|
|
176
|
+
const light = builtinLights[ i ];
|
|
177
177
|
|
|
178
178
|
_hashData.push( light.id );
|
|
179
179
|
_hashData.push( light.castShadow ? 1 : 0 );
|
|
@@ -276,7 +276,9 @@ class LightsNode extends Node {
|
|
|
276
276
|
const previousLightNodes = nodeData.lightNodes || null;
|
|
277
277
|
const materialLightings = builder.context.materialLightings;
|
|
278
278
|
|
|
279
|
-
const
|
|
279
|
+
const builtinLights = this.getBuiltinLights();
|
|
280
|
+
|
|
281
|
+
const lights = sortLights( [ ...materialLightings, ...builtinLights ] );
|
|
280
282
|
const nodeLibrary = builder.renderer.library;
|
|
281
283
|
|
|
282
284
|
for ( const light of lights ) {
|
|
@@ -553,6 +555,20 @@ class LightsNode extends Node {
|
|
|
553
555
|
|
|
554
556
|
}
|
|
555
557
|
|
|
558
|
+
/**
|
|
559
|
+
* Returns an array of the scene's lights.
|
|
560
|
+
*
|
|
561
|
+
* The light variations are shader-dependent;
|
|
562
|
+
* if this array changes, the shader needs to be recreated.
|
|
563
|
+
*
|
|
564
|
+
* @return {Array<Light>} The scene's lights.
|
|
565
|
+
*/
|
|
566
|
+
getBuiltinLights() {
|
|
567
|
+
|
|
568
|
+
return this._lights;
|
|
569
|
+
|
|
570
|
+
}
|
|
571
|
+
|
|
556
572
|
/**
|
|
557
573
|
* Whether the scene has lights or not.
|
|
558
574
|
*
|