super-three 0.181.0 → 0.184.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +34 -2
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +687 -48
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -24
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -68
- package/src/nodes/TSL.js +7 -7
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +2 -3
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +29 -14
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +17 -5
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -10,8 +10,8 @@ import { DataTexture } from '../../../textures/DataTexture.js';
|
|
|
10
10
|
import { error } from '../../../utils.js';
|
|
11
11
|
|
|
12
12
|
const glslPolyfills = {
|
|
13
|
-
bitcast_int_uint: new CodeNode( /* glsl */'uint
|
|
14
|
-
bitcast_uint_int: new CodeNode( /* glsl */'uint
|
|
13
|
+
bitcast_int_uint: new CodeNode( /* glsl */'uint tsl_bitcast_int_to_uint ( int x ) { return floatBitsToUint( intBitsToFloat ( x ) ); }' ),
|
|
14
|
+
bitcast_uint_int: new CodeNode( /* glsl */'uint tsl_bitcast_uint_to_int ( uint x ) { return floatBitsToInt( uintBitsToFloat ( x ) ); }' )
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
const glslMethods = {
|
|
@@ -22,7 +22,13 @@ const glslMethods = {
|
|
|
22
22
|
bitcast_uint_float: 'uintBitsToFloat',
|
|
23
23
|
bitcast_float_uint: 'floatBitsToUint',
|
|
24
24
|
bitcast_uint_int: 'tsl_bitcast_uint_to_int',
|
|
25
|
-
bitcast_int_uint: 'tsl_bitcast_int_to_uint'
|
|
25
|
+
bitcast_int_uint: 'tsl_bitcast_int_to_uint',
|
|
26
|
+
floatpack_snorm_2x16: 'packSnorm2x16',
|
|
27
|
+
floatpack_unorm_2x16: 'packUnorm2x16',
|
|
28
|
+
floatpack_float16_2x16: 'packHalf2x16',
|
|
29
|
+
floatunpack_snorm_2x16: 'unpackSnorm2x16',
|
|
30
|
+
floatunpack_unorm_2x16: 'unpackUnorm2x16',
|
|
31
|
+
floatunpack_float16_2x16: 'unpackHalf2x16'
|
|
26
32
|
};
|
|
27
33
|
|
|
28
34
|
const precisionLib = {
|
|
@@ -63,9 +69,9 @@ precision highp isampler3D;
|
|
|
63
69
|
precision highp isamplerCube;
|
|
64
70
|
precision highp isampler2DArray;
|
|
65
71
|
|
|
66
|
-
precision
|
|
67
|
-
precision
|
|
68
|
-
precision
|
|
72
|
+
precision highp sampler2DShadow;
|
|
73
|
+
precision highp sampler2DArrayShadow;
|
|
74
|
+
precision highp samplerCubeShadow;
|
|
69
75
|
`;
|
|
70
76
|
|
|
71
77
|
/**
|
|
@@ -184,6 +190,30 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
184
190
|
|
|
185
191
|
}
|
|
186
192
|
|
|
193
|
+
/**
|
|
194
|
+
* Returns the float packing method name for a given numeric encoding.
|
|
195
|
+
*
|
|
196
|
+
* @param {string} encoding - The numeric encoding that describes how the float values are mapped to the integer range.
|
|
197
|
+
* @returns {string} The resolved GLSL float packing method name.
|
|
198
|
+
*/
|
|
199
|
+
getFloatPackingMethod( encoding ) {
|
|
200
|
+
|
|
201
|
+
return this.getMethod( `floatpack_${ encoding }_2x16` );
|
|
202
|
+
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Returns the float unpacking method name for a given numeric encoding.
|
|
207
|
+
*
|
|
208
|
+
* @param {string} encoding - The numeric encoding that describes how the integer values are mapped to the float range.
|
|
209
|
+
* @returns {string} The resolved GLSL float unpacking method name.
|
|
210
|
+
*/
|
|
211
|
+
getFloatUnpackingMethod( encoding ) {
|
|
212
|
+
|
|
213
|
+
return this.getMethod( `floatunpack_${ encoding }_2x16` );
|
|
214
|
+
|
|
215
|
+
}
|
|
216
|
+
|
|
187
217
|
/**
|
|
188
218
|
* Returns the native snippet for a ternary operation.
|
|
189
219
|
*
|
|
@@ -330,7 +360,7 @@ ${ flowData.code }
|
|
|
330
360
|
|
|
331
361
|
if ( node.isNodeUniform && node.node.isTextureNode !== true && node.node.isBufferNode !== true ) {
|
|
332
362
|
|
|
333
|
-
return
|
|
363
|
+
return node.name;
|
|
334
364
|
|
|
335
365
|
}
|
|
336
366
|
|
|
@@ -448,11 +478,11 @@ ${ flowData.code }
|
|
|
448
478
|
|
|
449
479
|
if ( offsetSnippet ) {
|
|
450
480
|
|
|
451
|
-
snippet = `texelFetchOffset( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), ${ levelSnippet }, ${ offsetSnippet } )`;
|
|
481
|
+
snippet = `texelFetchOffset( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), int( ${ levelSnippet } ), ${ offsetSnippet } )`;
|
|
452
482
|
|
|
453
483
|
} else {
|
|
454
484
|
|
|
455
|
-
snippet = `texelFetch( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), ${ levelSnippet } )`;
|
|
485
|
+
snippet = `texelFetch( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), int( ${ levelSnippet } ) )`;
|
|
456
486
|
|
|
457
487
|
}
|
|
458
488
|
|
|
@@ -460,11 +490,11 @@ ${ flowData.code }
|
|
|
460
490
|
|
|
461
491
|
if ( offsetSnippet ) {
|
|
462
492
|
|
|
463
|
-
snippet = `texelFetchOffset( ${ textureProperty }, ${ uvIndexSnippet }, ${ levelSnippet }, ${ offsetSnippet } )`;
|
|
493
|
+
snippet = `texelFetchOffset( ${ textureProperty }, ${ uvIndexSnippet }, int( ${ levelSnippet } ), ${ offsetSnippet } )`;
|
|
464
494
|
|
|
465
495
|
} else {
|
|
466
496
|
|
|
467
|
-
snippet = `texelFetch( ${ textureProperty }, ${ uvIndexSnippet }, ${ levelSnippet } )`;
|
|
497
|
+
snippet = `texelFetch( ${ textureProperty }, ${ uvIndexSnippet }, int( ${ levelSnippet } ) )`;
|
|
468
498
|
|
|
469
499
|
}
|
|
470
500
|
|
|
@@ -515,10 +545,13 @@ ${ flowData.code }
|
|
|
515
545
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
516
546
|
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
517
547
|
* @param {string} levelSnippet - A GLSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
548
|
+
* @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
|
|
518
549
|
* @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
519
550
|
* @return {string} The GLSL snippet.
|
|
520
551
|
*/
|
|
521
|
-
generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, offsetSnippet ) {
|
|
552
|
+
generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet ) {
|
|
553
|
+
|
|
554
|
+
if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
|
|
522
555
|
|
|
523
556
|
if ( offsetSnippet ) {
|
|
524
557
|
|
|
@@ -537,10 +570,13 @@ ${ flowData.code }
|
|
|
537
570
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
538
571
|
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
539
572
|
* @param {string} biasSnippet - A GLSL snippet that represents the bias to apply to the mip level before sampling.
|
|
573
|
+
* @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
|
|
540
574
|
* @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
541
575
|
* @return {string} The GLSL snippet.
|
|
542
576
|
*/
|
|
543
|
-
generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, offsetSnippet ) {
|
|
577
|
+
generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, offsetSnippet ) {
|
|
578
|
+
|
|
579
|
+
if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
|
|
544
580
|
|
|
545
581
|
if ( offsetSnippet ) {
|
|
546
582
|
|
|
@@ -559,10 +595,13 @@ ${ flowData.code }
|
|
|
559
595
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
560
596
|
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
561
597
|
* @param {Array<string>} gradSnippet - An array holding both gradient GLSL snippets.
|
|
598
|
+
* @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
|
|
562
599
|
* @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
563
600
|
* @return {string} The GLSL snippet.
|
|
564
601
|
*/
|
|
565
|
-
generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, offsetSnippet ) {
|
|
602
|
+
generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, offsetSnippet ) {
|
|
603
|
+
|
|
604
|
+
if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
|
|
566
605
|
|
|
567
606
|
if ( offsetSnippet ) {
|
|
568
607
|
|
|
@@ -591,6 +630,13 @@ ${ flowData.code }
|
|
|
591
630
|
|
|
592
631
|
if ( shaderStage === 'fragment' ) {
|
|
593
632
|
|
|
633
|
+
// Cube shadow maps use vec4(direction, compareValue)
|
|
634
|
+
if ( texture.isCubeTexture ) {
|
|
635
|
+
|
|
636
|
+
return `texture( ${ textureProperty }, vec4( ${ uvSnippet }, ${ compareSnippet } ) )`;
|
|
637
|
+
|
|
638
|
+
}
|
|
639
|
+
|
|
594
640
|
if ( depthSnippet ) {
|
|
595
641
|
|
|
596
642
|
if ( offsetSnippet ) {
|
|
@@ -619,32 +665,6 @@ ${ flowData.code }
|
|
|
619
665
|
|
|
620
666
|
}
|
|
621
667
|
|
|
622
|
-
/**
|
|
623
|
-
* Returns the variables of the given shader stage as a GLSL string.
|
|
624
|
-
*
|
|
625
|
-
* @param {string} shaderStage - The shader stage.
|
|
626
|
-
* @return {string} The GLSL snippet that defines the variables.
|
|
627
|
-
*/
|
|
628
|
-
getVars( shaderStage ) {
|
|
629
|
-
|
|
630
|
-
const snippets = [];
|
|
631
|
-
|
|
632
|
-
const vars = this.vars[ shaderStage ];
|
|
633
|
-
|
|
634
|
-
if ( vars !== undefined ) {
|
|
635
|
-
|
|
636
|
-
for ( const variable of vars ) {
|
|
637
|
-
|
|
638
|
-
snippets.push( `${ this.getVar( variable.type, variable.name, variable.count ) };` );
|
|
639
|
-
|
|
640
|
-
}
|
|
641
|
-
|
|
642
|
-
}
|
|
643
|
-
|
|
644
|
-
return snippets.join( '\n\t' );
|
|
645
|
-
|
|
646
|
-
}
|
|
647
|
-
|
|
648
668
|
/**
|
|
649
669
|
* Returns the uniforms of the given shader stage as a GLSL string.
|
|
650
670
|
*
|
|
@@ -713,6 +733,20 @@ ${ flowData.code }
|
|
|
713
733
|
|
|
714
734
|
snippet = `samplerCube ${ uniform.name };`;
|
|
715
735
|
|
|
736
|
+
} else if ( uniform.type === 'cubeDepthTexture' ) {
|
|
737
|
+
|
|
738
|
+
const texture = uniform.node.value;
|
|
739
|
+
|
|
740
|
+
if ( texture.compareFunction ) {
|
|
741
|
+
|
|
742
|
+
snippet = `samplerCubeShadow ${ uniform.name };`;
|
|
743
|
+
|
|
744
|
+
} else {
|
|
745
|
+
|
|
746
|
+
snippet = `samplerCube ${ uniform.name };`;
|
|
747
|
+
|
|
748
|
+
}
|
|
749
|
+
|
|
716
750
|
} else if ( uniform.type === 'buffer' ) {
|
|
717
751
|
|
|
718
752
|
const bufferNode = uniform.node;
|
|
@@ -724,32 +758,56 @@ ${ flowData.code }
|
|
|
724
758
|
|
|
725
759
|
} else {
|
|
726
760
|
|
|
727
|
-
const
|
|
761
|
+
const groupName = uniform.groupNode.name;
|
|
728
762
|
|
|
729
|
-
|
|
763
|
+
// Check if this group has already been processed
|
|
764
|
+
if ( uniformGroups[ groupName ] === undefined ) {
|
|
730
765
|
|
|
731
|
-
|
|
766
|
+
// Get the shared uniform group that contains uniforms from all stages
|
|
767
|
+
const sharedUniformGroup = this.uniformGroups[ groupName ];
|
|
732
768
|
|
|
733
|
-
|
|
769
|
+
if ( sharedUniformGroup !== undefined ) {
|
|
770
|
+
|
|
771
|
+
// Generate snippets for ALL uniforms in this shared group
|
|
772
|
+
const snippets = [];
|
|
773
|
+
|
|
774
|
+
for ( const sharedUniform of sharedUniformGroup.uniforms ) {
|
|
775
|
+
|
|
776
|
+
const type = sharedUniform.getType();
|
|
777
|
+
const vectorType = this.getVectorType( type );
|
|
778
|
+
const precision = sharedUniform.nodeUniform.node.precision;
|
|
779
|
+
|
|
780
|
+
let uniformSnippet = `${ vectorType } ${ sharedUniform.name };`;
|
|
781
|
+
|
|
782
|
+
if ( precision !== null ) {
|
|
783
|
+
|
|
784
|
+
uniformSnippet = precisionLib[ precision ] + ' ' + uniformSnippet;
|
|
785
|
+
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
snippets.push( '\t' + uniformSnippet );
|
|
789
|
+
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
uniformGroups[ groupName ] = snippets;
|
|
734
793
|
|
|
735
|
-
|
|
794
|
+
}
|
|
736
795
|
|
|
737
|
-
|
|
796
|
+
}
|
|
738
797
|
|
|
739
|
-
|
|
798
|
+
group = true;
|
|
740
799
|
|
|
741
800
|
}
|
|
742
801
|
|
|
743
|
-
if ( group ) {
|
|
802
|
+
if ( ! group ) {
|
|
744
803
|
|
|
745
|
-
|
|
804
|
+
const precision = uniform.node.precision;
|
|
746
805
|
|
|
747
|
-
|
|
748
|
-
const groupSnippets = uniformGroups[ groupName ] || ( uniformGroups[ groupName ] = [] );
|
|
806
|
+
if ( precision !== null ) {
|
|
749
807
|
|
|
750
|
-
|
|
808
|
+
snippet = precisionLib[ precision ] + ' ' + snippet;
|
|
751
809
|
|
|
752
|
-
|
|
810
|
+
}
|
|
753
811
|
|
|
754
812
|
snippet = 'uniform ' + snippet;
|
|
755
813
|
|
|
@@ -765,7 +823,7 @@ ${ flowData.code }
|
|
|
765
823
|
|
|
766
824
|
const groupSnippets = uniformGroups[ name ];
|
|
767
825
|
|
|
768
|
-
output += this._getGLSLUniformStruct(
|
|
826
|
+
output += this._getGLSLUniformStruct( name, groupSnippets.join( '\n' ) ) + '\n';
|
|
769
827
|
|
|
770
828
|
}
|
|
771
829
|
|
|
@@ -1061,9 +1119,11 @@ ${ flowData.code }
|
|
|
1061
1119
|
|
|
1062
1120
|
return 'uint( gl_DrawID )';
|
|
1063
1121
|
|
|
1064
|
-
}
|
|
1122
|
+
} else {
|
|
1123
|
+
|
|
1124
|
+
return 'nodeUniformDrawId'; // fallback to uniform
|
|
1065
1125
|
|
|
1066
|
-
|
|
1126
|
+
}
|
|
1067
1127
|
|
|
1068
1128
|
}
|
|
1069
1129
|
|
|
@@ -1339,14 +1399,14 @@ ${shaderData.varyings}
|
|
|
1339
1399
|
// attributes
|
|
1340
1400
|
${shaderData.attributes}
|
|
1341
1401
|
|
|
1402
|
+
// vars
|
|
1403
|
+
${shaderData.vars}
|
|
1404
|
+
|
|
1342
1405
|
// codes
|
|
1343
1406
|
${shaderData.codes}
|
|
1344
1407
|
|
|
1345
1408
|
void main() {
|
|
1346
1409
|
|
|
1347
|
-
// vars
|
|
1348
|
-
${shaderData.vars}
|
|
1349
|
-
|
|
1350
1410
|
// transforms
|
|
1351
1411
|
${shaderData.transforms}
|
|
1352
1412
|
|
|
@@ -1388,14 +1448,14 @@ ${shaderData.uniforms}
|
|
|
1388
1448
|
// varyings
|
|
1389
1449
|
${shaderData.varyings}
|
|
1390
1450
|
|
|
1451
|
+
// vars
|
|
1452
|
+
${shaderData.vars}
|
|
1453
|
+
|
|
1391
1454
|
// codes
|
|
1392
1455
|
${shaderData.codes}
|
|
1393
1456
|
|
|
1394
1457
|
void main() {
|
|
1395
1458
|
|
|
1396
|
-
// vars
|
|
1397
|
-
${shaderData.vars}
|
|
1398
|
-
|
|
1399
1459
|
// flow
|
|
1400
1460
|
${shaderData.flow}
|
|
1401
1461
|
|
|
@@ -1466,12 +1526,26 @@ void main() {
|
|
|
1466
1526
|
stageData.uniforms = this.getUniforms( shaderStage );
|
|
1467
1527
|
stageData.attributes = this.getAttributes( shaderStage );
|
|
1468
1528
|
stageData.varyings = this.getVaryings( shaderStage );
|
|
1469
|
-
stageData.vars = this.getVars( shaderStage );
|
|
1529
|
+
stageData.vars = this.getVars( shaderStage, true );
|
|
1470
1530
|
stageData.structs = this.getStructs( shaderStage );
|
|
1471
1531
|
stageData.codes = this.getCodes( shaderStage );
|
|
1472
1532
|
stageData.transforms = this.getTransforms( shaderStage );
|
|
1473
1533
|
stageData.flow = flow;
|
|
1474
1534
|
|
|
1535
|
+
// fallbacks
|
|
1536
|
+
|
|
1537
|
+
if ( shaderStage === 'vertex' ) {
|
|
1538
|
+
|
|
1539
|
+
const ext = this.renderer.backend.extensions;
|
|
1540
|
+
|
|
1541
|
+
if ( this.object.isBatchedMesh && ext.has( 'WEBGL_multi_draw' ) === false ) {
|
|
1542
|
+
|
|
1543
|
+
stageData.uniforms += '\nuniform uint nodeUniformDrawId;\n';
|
|
1544
|
+
|
|
1545
|
+
}
|
|
1546
|
+
|
|
1547
|
+
}
|
|
1548
|
+
|
|
1475
1549
|
}
|
|
1476
1550
|
|
|
1477
1551
|
if ( this.material !== null ) {
|
|
@@ -1519,7 +1593,7 @@ void main() {
|
|
|
1519
1593
|
uniformGPU = new NodeSampledTexture( uniformNode.name, uniformNode.node, group );
|
|
1520
1594
|
bindings.push( uniformGPU );
|
|
1521
1595
|
|
|
1522
|
-
} else if ( type === 'cubeTexture' ) {
|
|
1596
|
+
} else if ( type === 'cubeTexture' || type === 'cubeDepthTexture' ) {
|
|
1523
1597
|
|
|
1524
1598
|
uniformGPU = new NodeSampledCubeTexture( uniformNode.name, uniformNode.node, group );
|
|
1525
1599
|
bindings.push( uniformGPU );
|
|
@@ -1531,11 +1605,22 @@ void main() {
|
|
|
1531
1605
|
|
|
1532
1606
|
} else if ( type === 'buffer' ) {
|
|
1533
1607
|
|
|
1534
|
-
node.name = `NodeBuffer_${ node.id }`;
|
|
1535
1608
|
uniformNode.name = `buffer${ node.id }`;
|
|
1536
1609
|
|
|
1537
|
-
const
|
|
1538
|
-
|
|
1610
|
+
const sharedData = this.getSharedDataFromNode( node );
|
|
1611
|
+
|
|
1612
|
+
let buffer = sharedData.buffer;
|
|
1613
|
+
|
|
1614
|
+
if ( buffer === undefined ) {
|
|
1615
|
+
|
|
1616
|
+
node.name = `NodeBuffer_${ node.id }`;
|
|
1617
|
+
|
|
1618
|
+
buffer = new NodeUniformBuffer( node, group );
|
|
1619
|
+
buffer.name = node.name;
|
|
1620
|
+
|
|
1621
|
+
sharedData.buffer = buffer;
|
|
1622
|
+
|
|
1623
|
+
}
|
|
1539
1624
|
|
|
1540
1625
|
bindings.push( buffer );
|
|
1541
1626
|
|
|
@@ -1543,24 +1628,38 @@ void main() {
|
|
|
1543
1628
|
|
|
1544
1629
|
} else {
|
|
1545
1630
|
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
let uniformsGroup = uniformsStage[ groupName ];
|
|
1631
|
+
let uniformsGroup = this.uniformGroups[ groupName ];
|
|
1549
1632
|
|
|
1550
1633
|
if ( uniformsGroup === undefined ) {
|
|
1551
1634
|
|
|
1552
|
-
uniformsGroup = new NodeUniformsGroup(
|
|
1553
|
-
//uniformsGroup.setVisibility( gpuShaderStageLib[ shaderStage ] );
|
|
1635
|
+
uniformsGroup = new NodeUniformsGroup( groupName, group );
|
|
1554
1636
|
|
|
1555
|
-
|
|
1637
|
+
this.uniformGroups[ groupName ] = uniformsGroup;
|
|
1556
1638
|
|
|
1557
1639
|
bindings.push( uniformsGroup );
|
|
1558
1640
|
|
|
1641
|
+
} else {
|
|
1642
|
+
|
|
1643
|
+
// Add to bindings for this stage if not already present
|
|
1644
|
+
if ( bindings.indexOf( uniformsGroup ) === - 1 ) {
|
|
1645
|
+
|
|
1646
|
+
bindings.push( uniformsGroup );
|
|
1647
|
+
|
|
1648
|
+
}
|
|
1649
|
+
|
|
1559
1650
|
}
|
|
1560
1651
|
|
|
1561
1652
|
uniformGPU = this.getNodeUniform( uniformNode, type );
|
|
1562
1653
|
|
|
1563
|
-
|
|
1654
|
+
// Only add uniform if not already present in the group (check by name to avoid duplicates across stages)
|
|
1655
|
+
const uniformName = uniformGPU.name;
|
|
1656
|
+
const alreadyExists = uniformsGroup.uniforms.some( u => u.name === uniformName );
|
|
1657
|
+
|
|
1658
|
+
if ( ! alreadyExists ) {
|
|
1659
|
+
|
|
1660
|
+
uniformsGroup.addUniform( uniformGPU );
|
|
1661
|
+
|
|
1662
|
+
}
|
|
1564
1663
|
|
|
1565
1664
|
}
|
|
1566
1665
|
|
|
@@ -254,47 +254,81 @@ class WebGLAttributeUtils {
|
|
|
254
254
|
|
|
255
255
|
/**
|
|
256
256
|
* This method performs a readback operation by moving buffer data from
|
|
257
|
-
* a storage buffer attribute from the GPU to the CPU.
|
|
257
|
+
* a storage buffer attribute from the GPU to the CPU. ReadbackBuffer can
|
|
258
|
+
* be used to retain and reuse handles to the intermediate buffers and prevent
|
|
259
|
+
* new allocation.
|
|
258
260
|
*
|
|
259
261
|
* @async
|
|
260
|
-
* @param {
|
|
261
|
-
* @
|
|
262
|
+
* @param {BufferAttribute} attribute - The storage buffer attribute to read frm.
|
|
263
|
+
* @param {ReadbackBuffer|ArrayBuffer} target - The storage buffer attribute.
|
|
264
|
+
* @param {number} offset - The storage buffer attribute.
|
|
265
|
+
* @param {number} count - The offset from which to start reading the
|
|
266
|
+
* @return {Promise<ArrayBuffer|ReadbackBuffer>} A promise that resolves with the buffer data when the data are ready.
|
|
262
267
|
*/
|
|
263
|
-
async getArrayBufferAsync( attribute ) {
|
|
268
|
+
async getArrayBufferAsync( attribute, target = null, offset = 0, count = - 1 ) {
|
|
264
269
|
|
|
265
270
|
const backend = this.backend;
|
|
266
271
|
const { gl } = backend;
|
|
267
272
|
|
|
268
273
|
const bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute;
|
|
269
|
-
const
|
|
274
|
+
const attributeInfo = backend.get( bufferAttribute );
|
|
275
|
+
const { bufferGPU } = attributeInfo;
|
|
270
276
|
|
|
271
|
-
const
|
|
272
|
-
const byteLength = array.byteLength;
|
|
277
|
+
const byteLength = count === - 1 ? attributeInfo.byteLength - offset : count;
|
|
273
278
|
|
|
274
|
-
|
|
279
|
+
// read the data back
|
|
280
|
+
let dstBuffer;
|
|
281
|
+
if ( target === null ) {
|
|
275
282
|
|
|
276
|
-
|
|
283
|
+
dstBuffer = new Uint8Array( new ArrayBuffer( byteLength ) );
|
|
277
284
|
|
|
278
|
-
|
|
279
|
-
gl.bufferData( gl.COPY_WRITE_BUFFER, byteLength, gl.STREAM_READ );
|
|
285
|
+
} else if ( target.isReadbackBuffer ) {
|
|
280
286
|
|
|
281
|
-
|
|
287
|
+
if ( target._mapped === true ) {
|
|
282
288
|
|
|
283
|
-
|
|
289
|
+
throw new Error( 'WebGPURenderer: ReadbackBuffer must be released before being used again.' );
|
|
284
290
|
|
|
285
|
-
|
|
291
|
+
}
|
|
286
292
|
|
|
287
|
-
|
|
288
|
-
|
|
293
|
+
const releaseCallback = () => {
|
|
294
|
+
|
|
295
|
+
target.buffer = null;
|
|
296
|
+
target._mapped = false;
|
|
297
|
+
target.removeEventListener( 'release', releaseCallback );
|
|
298
|
+
target.removeEventListener( 'dispose', releaseCallback );
|
|
299
|
+
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
target.addEventListener( 'release', releaseCallback );
|
|
303
|
+
target.addEventListener( 'dispose', releaseCallback );
|
|
304
|
+
|
|
305
|
+
// WebGL has no concept of a "mapped" data buffer so we create a new buffer, instead.
|
|
306
|
+
dstBuffer = new Uint8Array( new ArrayBuffer( byteLength ) );
|
|
307
|
+
target.buffer = dstBuffer.buffer;
|
|
308
|
+
|
|
309
|
+
} else {
|
|
289
310
|
|
|
290
|
-
|
|
311
|
+
dstBuffer = new Uint8Array( target );
|
|
291
312
|
|
|
292
|
-
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// Ensure the buffer is bound before reading
|
|
316
|
+
gl.bindBuffer( gl.COPY_READ_BUFFER, bufferGPU );
|
|
317
|
+
gl.getBufferSubData( gl.COPY_READ_BUFFER, offset, dstBuffer );
|
|
293
318
|
|
|
294
319
|
gl.bindBuffer( gl.COPY_READ_BUFFER, null );
|
|
295
320
|
gl.bindBuffer( gl.COPY_WRITE_BUFFER, null );
|
|
296
321
|
|
|
297
|
-
return
|
|
322
|
+
// return the appropriate type
|
|
323
|
+
if ( target && target.isReadbackBuffer ) {
|
|
324
|
+
|
|
325
|
+
return target;
|
|
326
|
+
|
|
327
|
+
} else {
|
|
328
|
+
|
|
329
|
+
return dstBuffer.buffer;
|
|
330
|
+
|
|
331
|
+
}
|
|
298
332
|
|
|
299
333
|
}
|
|
300
334
|
|
|
@@ -27,6 +27,14 @@ class WebGLCapabilities {
|
|
|
27
27
|
*/
|
|
28
28
|
this.maxAnisotropy = null;
|
|
29
29
|
|
|
30
|
+
/**
|
|
31
|
+
* This value holds the cached max uniform block size value.
|
|
32
|
+
*
|
|
33
|
+
* @type {?number}
|
|
34
|
+
* @default null
|
|
35
|
+
*/
|
|
36
|
+
this.maxUniformBlockSize = null;
|
|
37
|
+
|
|
30
38
|
}
|
|
31
39
|
|
|
32
40
|
/**
|
|
@@ -59,6 +67,23 @@ class WebGLCapabilities {
|
|
|
59
67
|
|
|
60
68
|
}
|
|
61
69
|
|
|
70
|
+
/**
|
|
71
|
+
* Returns the maximum number of bytes available for uniform buffers.
|
|
72
|
+
*
|
|
73
|
+
* @return {number} The maximum number of bytes available for uniform buffers.
|
|
74
|
+
*/
|
|
75
|
+
getUniformBufferLimit() {
|
|
76
|
+
|
|
77
|
+
if ( this.maxUniformBlockSize !== null ) return this.maxUniformBlockSize;
|
|
78
|
+
|
|
79
|
+
const gl = this.backend.gl;
|
|
80
|
+
|
|
81
|
+
this.maxUniformBlockSize = gl.getParameter( gl.MAX_UNIFORM_BLOCK_SIZE );
|
|
82
|
+
|
|
83
|
+
return this.maxUniformBlockSize;
|
|
84
|
+
|
|
85
|
+
}
|
|
86
|
+
|
|
62
87
|
}
|
|
63
88
|
|
|
64
89
|
export default WebGLCapabilities;
|