@plastic-software/three 0.167.3 → 0.174.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 +1 -1
- package/build/three.cjs +36277 -24023
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46743
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50670
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/points.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GLSLNodeParser, NodeBuilder, TextureNode, vectorComponents } from '../../../nodes/Nodes.js';
|
|
2
2
|
|
|
3
3
|
import NodeUniformBuffer from '../../common/nodes/NodeUniformBuffer.js';
|
|
4
4
|
import NodeUniformsGroup from '../../common/nodes/NodeUniformsGroup.js';
|
|
5
5
|
|
|
6
6
|
import { NodeSampledTexture, NodeSampledCubeTexture, NodeSampledTexture3D } from '../../common/nodes/NodeSampledTexture.js';
|
|
7
7
|
|
|
8
|
-
import { ByteType, ShortType, RGBAIntegerFormat, RGBIntegerFormat, RedIntegerFormat, RGIntegerFormat, UnsignedByteType, UnsignedIntType, UnsignedShortType, RedFormat, RGFormat, IntType, RGBFormat, RGBAFormat, FloatType } from '../../../constants.js';
|
|
8
|
+
import { NoColorSpace, ByteType, ShortType, RGBAIntegerFormat, RGBIntegerFormat, RedIntegerFormat, RGIntegerFormat, UnsignedByteType, UnsignedIntType, UnsignedShortType, RedFormat, RGFormat, IntType, RGBFormat, RGBAFormat, FloatType } from '../../../constants.js';
|
|
9
9
|
import { DataTexture } from '../../../textures/DataTexture.js';
|
|
10
10
|
|
|
11
11
|
const glslMethods = {
|
|
12
|
-
[ MathNode.ATAN2 ]: 'atan',
|
|
13
12
|
textureDimensions: 'textureSize',
|
|
14
13
|
equals: 'equal'
|
|
15
14
|
};
|
|
@@ -46,34 +45,109 @@ precision highp isampler2DArray;
|
|
|
46
45
|
precision lowp sampler2DShadow;
|
|
47
46
|
`;
|
|
48
47
|
|
|
48
|
+
/**
|
|
49
|
+
* A node builder targeting GLSL.
|
|
50
|
+
*
|
|
51
|
+
* This module generates GLSL shader code from node materials and also
|
|
52
|
+
* generates the respective bindings and vertex buffer definitions. These
|
|
53
|
+
* data are later used by the renderer to create render and compute pipelines
|
|
54
|
+
* for render objects.
|
|
55
|
+
*
|
|
56
|
+
* @augments NodeBuilder
|
|
57
|
+
*/
|
|
49
58
|
class GLSLNodeBuilder extends NodeBuilder {
|
|
50
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Constructs a new GLSL node builder renderer.
|
|
62
|
+
*
|
|
63
|
+
* @param {Object3D} object - The 3D object.
|
|
64
|
+
* @param {Renderer} renderer - The renderer.
|
|
65
|
+
*/
|
|
51
66
|
constructor( object, renderer ) {
|
|
52
67
|
|
|
53
68
|
super( object, renderer, new GLSLNodeParser() );
|
|
54
69
|
|
|
70
|
+
/**
|
|
71
|
+
* A dictionary holds for each shader stage ('vertex', 'fragment', 'compute')
|
|
72
|
+
* another dictionary which manages UBOs per group ('render','frame','object').
|
|
73
|
+
*
|
|
74
|
+
* @type {Object<string,Object<string,NodeUniformsGroup>>}
|
|
75
|
+
*/
|
|
55
76
|
this.uniformGroups = {};
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* An array that holds objects defining the varying and attribute data in
|
|
80
|
+
* context of Transform Feedback.
|
|
81
|
+
*
|
|
82
|
+
* @type {Object<string,Map<string,Object>>}
|
|
83
|
+
*/
|
|
56
84
|
this.transforms = [];
|
|
57
|
-
this.extensions = {};
|
|
58
85
|
|
|
59
|
-
|
|
86
|
+
/**
|
|
87
|
+
* A dictionary that holds for each shader stage a Map of used extensions.
|
|
88
|
+
*
|
|
89
|
+
* @type {Object<string,Map<string,Object>>}
|
|
90
|
+
*/
|
|
91
|
+
this.extensions = {};
|
|
60
92
|
|
|
93
|
+
/**
|
|
94
|
+
* A dictionary that holds for each shader stage an Array of used builtins.
|
|
95
|
+
*
|
|
96
|
+
* @type {Object<string,Array<string>>}
|
|
97
|
+
*/
|
|
98
|
+
this.builtins = { vertex: [], fragment: [], compute: [] };
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Whether comparison in shader code are generated with methods or not.
|
|
102
|
+
*
|
|
103
|
+
* @type {boolean}
|
|
104
|
+
* @default true
|
|
105
|
+
*/
|
|
61
106
|
this.useComparisonMethod = true;
|
|
62
107
|
|
|
63
108
|
}
|
|
64
109
|
|
|
110
|
+
/**
|
|
111
|
+
* Checks if the given texture requires a manual conversion to the working color space.
|
|
112
|
+
*
|
|
113
|
+
* @param {Texture} texture - The texture to check.
|
|
114
|
+
* @return {boolean} Whether the given texture requires a conversion to working color space or not.
|
|
115
|
+
*/
|
|
116
|
+
needsToWorkingColorSpace( texture ) {
|
|
117
|
+
|
|
118
|
+
return texture.isVideoTexture === true && texture.colorSpace !== NoColorSpace;
|
|
119
|
+
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Returns the native shader method name for a given generic name.
|
|
124
|
+
*
|
|
125
|
+
* @param {string} method - The method name to resolve.
|
|
126
|
+
* @return {string} The resolved GLSL method name.
|
|
127
|
+
*/
|
|
65
128
|
getMethod( method ) {
|
|
66
129
|
|
|
67
130
|
return glslMethods[ method ] || method;
|
|
68
131
|
|
|
69
132
|
}
|
|
70
133
|
|
|
134
|
+
/**
|
|
135
|
+
* Returns the output struct name. Not relevant for GLSL.
|
|
136
|
+
*
|
|
137
|
+
* @return {string}
|
|
138
|
+
*/
|
|
71
139
|
getOutputStructName() {
|
|
72
140
|
|
|
73
141
|
return '';
|
|
74
142
|
|
|
75
143
|
}
|
|
76
144
|
|
|
145
|
+
/**
|
|
146
|
+
* Builds the given shader node.
|
|
147
|
+
*
|
|
148
|
+
* @param {ShaderNodeInternal} shaderNode - The shader node.
|
|
149
|
+
* @return {string} The GLSL function code.
|
|
150
|
+
*/
|
|
77
151
|
buildFunctionCode( shaderNode ) {
|
|
78
152
|
|
|
79
153
|
const layout = shaderNode.layout;
|
|
@@ -104,6 +178,12 @@ ${ flowData.code }
|
|
|
104
178
|
|
|
105
179
|
}
|
|
106
180
|
|
|
181
|
+
/**
|
|
182
|
+
* Setups the Pixel Buffer Object (PBO) for the given storage
|
|
183
|
+
* buffer node.
|
|
184
|
+
*
|
|
185
|
+
* @param {StorageBufferNode} storageBufferNode - The storage buffer node.
|
|
186
|
+
*/
|
|
107
187
|
setupPBO( storageBufferNode ) {
|
|
108
188
|
|
|
109
189
|
const attribute = storageBufferNode.value;
|
|
@@ -119,7 +199,6 @@ ${ flowData.code }
|
|
|
119
199
|
|
|
120
200
|
let format = isInteger ? RedIntegerFormat : RedFormat;
|
|
121
201
|
|
|
122
|
-
|
|
123
202
|
if ( itemSize === 2 ) {
|
|
124
203
|
|
|
125
204
|
format = isInteger ? RGIntegerFormat : RGFormat;
|
|
@@ -173,6 +252,13 @@ ${ flowData.code }
|
|
|
173
252
|
|
|
174
253
|
}
|
|
175
254
|
|
|
255
|
+
/**
|
|
256
|
+
* Returns a GLSL snippet that represents the property name of the given node.
|
|
257
|
+
*
|
|
258
|
+
* @param {Node} node - The node.
|
|
259
|
+
* @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
|
|
260
|
+
* @return {string} The property name.
|
|
261
|
+
*/
|
|
176
262
|
getPropertyName( node, shaderStage = this.shaderStage ) {
|
|
177
263
|
|
|
178
264
|
if ( node.isNodeUniform && node.node.isTextureNode !== true && node.node.isBufferNode !== true ) {
|
|
@@ -185,6 +271,13 @@ ${ flowData.code }
|
|
|
185
271
|
|
|
186
272
|
}
|
|
187
273
|
|
|
274
|
+
/**
|
|
275
|
+
* Setups the Pixel Buffer Object (PBO) for the given storage
|
|
276
|
+
* buffer node.
|
|
277
|
+
*
|
|
278
|
+
* @param {StorageArrayElementNode} storageArrayElementNode - The storage array element node.
|
|
279
|
+
* @return {string} The property name.
|
|
280
|
+
*/
|
|
188
281
|
generatePBO( storageArrayElementNode ) {
|
|
189
282
|
|
|
190
283
|
const { node, indexNode } = storageArrayElementNode;
|
|
@@ -197,11 +290,10 @@ ${ flowData.code }
|
|
|
197
290
|
|
|
198
291
|
}
|
|
199
292
|
|
|
200
|
-
|
|
201
293
|
const nodeUniform = this.getUniformFromNode( attribute.pboNode, 'texture', this.shaderStage, this.context.label );
|
|
202
294
|
const textureName = this.getPropertyName( nodeUniform );
|
|
203
295
|
|
|
204
|
-
|
|
296
|
+
this.increaseUsage( indexNode ); // force cache generate to be used as index in x,y
|
|
205
297
|
const indexSnippet = indexNode.build( this, 'uint' );
|
|
206
298
|
|
|
207
299
|
const elementNodeData = this.getDataFromNode( storageArrayElementNode );
|
|
@@ -228,7 +320,7 @@ ${ flowData.code }
|
|
|
228
320
|
|
|
229
321
|
this.getVarFromNode( node, propertySizeName, 'uint' );
|
|
230
322
|
|
|
231
|
-
this.addLineFlowCode( `${ propertySizeName } = uint( textureSize( ${ textureName }, 0 ).x )
|
|
323
|
+
this.addLineFlowCode( `${ propertySizeName } = uint( textureSize( ${ textureName }, 0 ).x )`, storageArrayElementNode );
|
|
232
324
|
|
|
233
325
|
bufferNodeData.propertySizeName = propertySizeName;
|
|
234
326
|
|
|
@@ -258,7 +350,7 @@ ${ flowData.code }
|
|
|
258
350
|
|
|
259
351
|
}
|
|
260
352
|
|
|
261
|
-
this.addLineFlowCode( `${ propertyName } = ${prefix}(${ snippet })${channel}
|
|
353
|
+
this.addLineFlowCode( `${ propertyName } = ${prefix}(${ snippet })${channel}`, storageArrayElementNode );
|
|
262
354
|
|
|
263
355
|
elementNodeData.propertyName = propertyName;
|
|
264
356
|
|
|
@@ -268,6 +360,16 @@ ${ flowData.code }
|
|
|
268
360
|
|
|
269
361
|
}
|
|
270
362
|
|
|
363
|
+
/**
|
|
364
|
+
* Generates the GLSL snippet that reads a single texel from a texture without sampling or filtering.
|
|
365
|
+
*
|
|
366
|
+
* @param {Texture} texture - The texture.
|
|
367
|
+
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
368
|
+
* @param {string} uvIndexSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
369
|
+
* @param {?string} depthSnippet - A GLSL snippet that represents the 0-based texture array index to sample.
|
|
370
|
+
* @param {string} [levelSnippet='0u'] - A GLSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
371
|
+
* @return {string} The GLSL snippet.
|
|
372
|
+
*/
|
|
271
373
|
generateTextureLoad( texture, textureProperty, uvIndexSnippet, depthSnippet, levelSnippet = '0' ) {
|
|
272
374
|
|
|
273
375
|
if ( depthSnippet ) {
|
|
@@ -282,6 +384,15 @@ ${ flowData.code }
|
|
|
282
384
|
|
|
283
385
|
}
|
|
284
386
|
|
|
387
|
+
/**
|
|
388
|
+
* Generates the GLSL snippet for sampling/loading the given texture.
|
|
389
|
+
*
|
|
390
|
+
* @param {Texture} texture - The texture.
|
|
391
|
+
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
392
|
+
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
393
|
+
* @param {?string} depthSnippet - A GLSL snippet that represents the 0-based texture array index to sample.
|
|
394
|
+
* @return {string} The GLSL snippet.
|
|
395
|
+
*/
|
|
285
396
|
generateTexture( texture, textureProperty, uvSnippet, depthSnippet ) {
|
|
286
397
|
|
|
287
398
|
if ( texture.isDepthTexture ) {
|
|
@@ -298,24 +409,63 @@ ${ flowData.code }
|
|
|
298
409
|
|
|
299
410
|
}
|
|
300
411
|
|
|
412
|
+
/**
|
|
413
|
+
* Generates the GLSL snippet when sampling textures with explicit mip level.
|
|
414
|
+
*
|
|
415
|
+
* @param {Texture} texture - The texture.
|
|
416
|
+
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
417
|
+
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
418
|
+
* @param {string} levelSnippet - A GLSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
419
|
+
* @return {string} The GLSL snippet.
|
|
420
|
+
*/
|
|
301
421
|
generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet ) {
|
|
302
422
|
|
|
303
423
|
return `textureLod( ${ textureProperty }, ${ uvSnippet }, ${ levelSnippet } )`;
|
|
304
424
|
|
|
305
425
|
}
|
|
306
426
|
|
|
427
|
+
/**
|
|
428
|
+
* Generates the GLSL snippet when sampling textures with a bias to the mip level.
|
|
429
|
+
*
|
|
430
|
+
* @param {Texture} texture - The texture.
|
|
431
|
+
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
432
|
+
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
433
|
+
* @param {string} biasSnippet - A GLSL snippet that represents the bias to apply to the mip level before sampling.
|
|
434
|
+
* @return {string} The GLSL snippet.
|
|
435
|
+
*/
|
|
307
436
|
generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet ) {
|
|
308
437
|
|
|
309
438
|
return `texture( ${ textureProperty }, ${ uvSnippet }, ${ biasSnippet } )`;
|
|
310
439
|
|
|
311
440
|
}
|
|
312
441
|
|
|
442
|
+
/**
|
|
443
|
+
* Generates the GLSL snippet for sampling/loading the given texture using explicit gradients.
|
|
444
|
+
*
|
|
445
|
+
* @param {Texture} texture - The texture.
|
|
446
|
+
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
447
|
+
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
448
|
+
* @param {Array<string>} gradSnippet - An array holding both gradient GLSL snippets.
|
|
449
|
+
* @return {string} The GLSL snippet.
|
|
450
|
+
*/
|
|
313
451
|
generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet ) {
|
|
314
452
|
|
|
315
453
|
return `textureGrad( ${ textureProperty }, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] } )`;
|
|
316
454
|
|
|
317
455
|
}
|
|
318
456
|
|
|
457
|
+
/**
|
|
458
|
+
* Generates the GLSL snippet for sampling a depth texture and comparing the sampled depth values
|
|
459
|
+
* against a reference value.
|
|
460
|
+
*
|
|
461
|
+
* @param {Texture} texture - The texture.
|
|
462
|
+
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
463
|
+
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
464
|
+
* @param {string} compareSnippet - A GLSL snippet that represents the reference value.
|
|
465
|
+
* @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
|
|
466
|
+
* @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
|
|
467
|
+
* @return {string} The GLSL snippet.
|
|
468
|
+
*/
|
|
319
469
|
generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
320
470
|
|
|
321
471
|
if ( shaderStage === 'fragment' ) {
|
|
@@ -330,6 +480,12 @@ ${ flowData.code }
|
|
|
330
480
|
|
|
331
481
|
}
|
|
332
482
|
|
|
483
|
+
/**
|
|
484
|
+
* Returns the variables of the given shader stage as a GLSL string.
|
|
485
|
+
*
|
|
486
|
+
* @param {string} shaderStage - The shader stage.
|
|
487
|
+
* @return {string} The GLSL snippet that defines the variables.
|
|
488
|
+
*/
|
|
333
489
|
getVars( shaderStage ) {
|
|
334
490
|
|
|
335
491
|
const snippets = [];
|
|
@@ -340,7 +496,7 @@ ${ flowData.code }
|
|
|
340
496
|
|
|
341
497
|
for ( const variable of vars ) {
|
|
342
498
|
|
|
343
|
-
snippets.push( `${ this.getVar( variable.type, variable.name ) };` );
|
|
499
|
+
snippets.push( `${ this.getVar( variable.type, variable.name, variable.count ) };` );
|
|
344
500
|
|
|
345
501
|
}
|
|
346
502
|
|
|
@@ -350,6 +506,12 @@ ${ flowData.code }
|
|
|
350
506
|
|
|
351
507
|
}
|
|
352
508
|
|
|
509
|
+
/**
|
|
510
|
+
* Returns the uniforms of the given shader stage as a GLSL string.
|
|
511
|
+
*
|
|
512
|
+
* @param {string} shaderStage - The shader stage.
|
|
513
|
+
* @return {string} The GLSL snippet that defines the uniforms.
|
|
514
|
+
*/
|
|
353
515
|
getUniforms( shaderStage ) {
|
|
354
516
|
|
|
355
517
|
const uniforms = this.uniforms[ shaderStage ];
|
|
@@ -362,14 +524,13 @@ ${ flowData.code }
|
|
|
362
524
|
let snippet = null;
|
|
363
525
|
let group = false;
|
|
364
526
|
|
|
365
|
-
if ( uniform.type === 'texture' ) {
|
|
527
|
+
if ( uniform.type === 'texture' || uniform.type === 'texture3D' ) {
|
|
366
528
|
|
|
367
529
|
const texture = uniform.node.value;
|
|
368
530
|
|
|
369
531
|
let typePrefix = '';
|
|
370
532
|
|
|
371
|
-
if ( texture.isDataTexture === true ) {
|
|
372
|
-
|
|
533
|
+
if ( texture.isDataTexture === true || texture.isData3DTexture === true ) {
|
|
373
534
|
|
|
374
535
|
if ( texture.type === UnsignedIntType ) {
|
|
375
536
|
|
|
@@ -383,11 +544,15 @@ ${ flowData.code }
|
|
|
383
544
|
|
|
384
545
|
}
|
|
385
546
|
|
|
386
|
-
if (
|
|
547
|
+
if ( uniform.type === 'texture3D' ) {
|
|
548
|
+
|
|
549
|
+
snippet = `${typePrefix}sampler3D ${ uniform.name };`;
|
|
550
|
+
|
|
551
|
+
} else if ( texture.compareFunction ) {
|
|
387
552
|
|
|
388
553
|
snippet = `sampler2DShadow ${ uniform.name };`;
|
|
389
554
|
|
|
390
|
-
} else if ( texture.isDataArrayTexture === true ) {
|
|
555
|
+
} else if ( texture.isDataArrayTexture === true || texture.isCompressedArrayTexture === true ) {
|
|
391
556
|
|
|
392
557
|
snippet = `${typePrefix}sampler2DArray ${ uniform.name };`;
|
|
393
558
|
|
|
@@ -401,10 +566,6 @@ ${ flowData.code }
|
|
|
401
566
|
|
|
402
567
|
snippet = `samplerCube ${ uniform.name };`;
|
|
403
568
|
|
|
404
|
-
} else if ( uniform.type === 'texture3D' ) {
|
|
405
|
-
|
|
406
|
-
snippet = `sampler3D ${ uniform.name };`;
|
|
407
|
-
|
|
408
569
|
} else if ( uniform.type === 'buffer' ) {
|
|
409
570
|
|
|
410
571
|
const bufferNode = uniform.node;
|
|
@@ -467,6 +628,12 @@ ${ flowData.code }
|
|
|
467
628
|
|
|
468
629
|
}
|
|
469
630
|
|
|
631
|
+
/**
|
|
632
|
+
* Returns the type for a given buffer attribute.
|
|
633
|
+
*
|
|
634
|
+
* @param {BufferAttribute} attribute - The buffer attribute.
|
|
635
|
+
* @return {string} The type.
|
|
636
|
+
*/
|
|
470
637
|
getTypeFromAttribute( attribute ) {
|
|
471
638
|
|
|
472
639
|
let nodeType = super.getTypeFromAttribute( attribute );
|
|
@@ -491,6 +658,12 @@ ${ flowData.code }
|
|
|
491
658
|
|
|
492
659
|
}
|
|
493
660
|
|
|
661
|
+
/**
|
|
662
|
+
* Returns the shader attributes of the given shader stage as a GLSL string.
|
|
663
|
+
*
|
|
664
|
+
* @param {string} shaderStage - The shader stage.
|
|
665
|
+
* @return {string} The GLSL snippet that defines the shader attributes.
|
|
666
|
+
*/
|
|
494
667
|
getAttributes( shaderStage ) {
|
|
495
668
|
|
|
496
669
|
let snippet = '';
|
|
@@ -513,15 +686,19 @@ ${ flowData.code }
|
|
|
513
686
|
|
|
514
687
|
}
|
|
515
688
|
|
|
689
|
+
/**
|
|
690
|
+
* Returns the members of the given struct type node as a GLSL string.
|
|
691
|
+
*
|
|
692
|
+
* @param {StructTypeNode} struct - The struct type node.
|
|
693
|
+
* @return {string} The GLSL snippet that defines the struct members.
|
|
694
|
+
*/
|
|
516
695
|
getStructMembers( struct ) {
|
|
517
696
|
|
|
518
697
|
const snippets = [];
|
|
519
|
-
const members = struct.getMemberTypes();
|
|
520
698
|
|
|
521
|
-
for (
|
|
699
|
+
for ( const member of struct.members ) {
|
|
522
700
|
|
|
523
|
-
|
|
524
|
-
snippets.push( `layout( location = ${i} ) out ${ member} m${i};` );
|
|
701
|
+
snippets.push( `\t${ member.type } ${ member.name };` );
|
|
525
702
|
|
|
526
703
|
}
|
|
527
704
|
|
|
@@ -529,33 +706,57 @@ ${ flowData.code }
|
|
|
529
706
|
|
|
530
707
|
}
|
|
531
708
|
|
|
709
|
+
/**
|
|
710
|
+
* Returns the structs of the given shader stage as a GLSL string.
|
|
711
|
+
*
|
|
712
|
+
* @param {string} shaderStage - The shader stage.
|
|
713
|
+
* @return {string} The GLSL snippet that defines the structs.
|
|
714
|
+
*/
|
|
532
715
|
getStructs( shaderStage ) {
|
|
533
716
|
|
|
534
717
|
const snippets = [];
|
|
535
718
|
const structs = this.structs[ shaderStage ];
|
|
536
719
|
|
|
537
|
-
|
|
720
|
+
const outputSnippet = [];
|
|
538
721
|
|
|
539
|
-
|
|
722
|
+
for ( const struct of structs ) {
|
|
540
723
|
|
|
541
|
-
|
|
724
|
+
if ( struct.output ) {
|
|
725
|
+
|
|
726
|
+
for ( const member of struct.members ) {
|
|
727
|
+
|
|
728
|
+
outputSnippet.push( `layout( location = ${ member.index } ) out ${ member.type } ${ member.name };` );
|
|
542
729
|
|
|
543
|
-
|
|
730
|
+
}
|
|
544
731
|
|
|
545
|
-
|
|
732
|
+
} else {
|
|
546
733
|
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
734
|
+
let snippet = 'struct ' + struct.name + ' {\n';
|
|
735
|
+
snippet += this.getStructMembers( struct );
|
|
736
|
+
snippet += '\n};\n';
|
|
550
737
|
|
|
551
|
-
|
|
738
|
+
snippets.push( snippet );
|
|
739
|
+
|
|
740
|
+
}
|
|
552
741
|
|
|
553
742
|
}
|
|
554
743
|
|
|
555
|
-
|
|
744
|
+
if ( outputSnippet.length === 0 ) {
|
|
745
|
+
|
|
746
|
+
outputSnippet.push( 'layout( location = 0 ) out vec4 fragColor;' );
|
|
747
|
+
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
return '\n' + outputSnippet.join( '\n' ) + '\n\n' + snippets.join( '\n' );
|
|
556
751
|
|
|
557
752
|
}
|
|
558
753
|
|
|
754
|
+
/**
|
|
755
|
+
* Returns the varyings of the given shader stage as a GLSL string.
|
|
756
|
+
*
|
|
757
|
+
* @param {string} shaderStage - The shader stage.
|
|
758
|
+
* @return {string} The GLSL snippet that defines the varyings.
|
|
759
|
+
*/
|
|
559
760
|
getVaryings( shaderStage ) {
|
|
560
761
|
|
|
561
762
|
let snippet = '';
|
|
@@ -567,10 +768,20 @@ ${ flowData.code }
|
|
|
567
768
|
for ( const varying of varyings ) {
|
|
568
769
|
|
|
569
770
|
if ( shaderStage === 'compute' ) varying.needsInterpolation = true;
|
|
570
|
-
const type = varying.type;
|
|
571
|
-
const flat = type.includes( 'int' ) || type.includes( 'uv' ) || type.includes( 'iv' ) ? 'flat ' : '';
|
|
572
771
|
|
|
573
|
-
|
|
772
|
+
const type = this.getType( varying.type );
|
|
773
|
+
|
|
774
|
+
if ( varying.needsInterpolation ) {
|
|
775
|
+
|
|
776
|
+
const flat = type.includes( 'int' ) || type.includes( 'uv' ) || type.includes( 'iv' ) ? 'flat ' : '';
|
|
777
|
+
|
|
778
|
+
snippet += `${flat} out ${type} ${varying.name};\n`;
|
|
779
|
+
|
|
780
|
+
} else {
|
|
781
|
+
|
|
782
|
+
snippet += `${type} ${varying.name};\n`; // generate variable (no varying required)
|
|
783
|
+
|
|
784
|
+
}
|
|
574
785
|
|
|
575
786
|
}
|
|
576
787
|
|
|
@@ -580,7 +791,7 @@ ${ flowData.code }
|
|
|
580
791
|
|
|
581
792
|
if ( varying.needsInterpolation ) {
|
|
582
793
|
|
|
583
|
-
const type = varying.type;
|
|
794
|
+
const type = this.getType( varying.type );
|
|
584
795
|
const flat = type.includes( 'int' ) || type.includes( 'uv' ) || type.includes( 'iv' ) ? 'flat ' : '';
|
|
585
796
|
|
|
586
797
|
snippet += `${flat}in ${type} ${varying.name};\n`;
|
|
@@ -591,22 +802,58 @@ ${ flowData.code }
|
|
|
591
802
|
|
|
592
803
|
}
|
|
593
804
|
|
|
805
|
+
for ( const builtin of this.builtins[ shaderStage ] ) {
|
|
806
|
+
|
|
807
|
+
snippet += `${builtin};\n`;
|
|
808
|
+
|
|
809
|
+
}
|
|
810
|
+
|
|
594
811
|
return snippet;
|
|
595
812
|
|
|
596
813
|
}
|
|
597
814
|
|
|
815
|
+
/**
|
|
816
|
+
* Returns the vertex index builtin.
|
|
817
|
+
*
|
|
818
|
+
* @return {string} The vertex index.
|
|
819
|
+
*/
|
|
598
820
|
getVertexIndex() {
|
|
599
821
|
|
|
600
822
|
return 'uint( gl_VertexID )';
|
|
601
823
|
|
|
602
824
|
}
|
|
603
825
|
|
|
826
|
+
/**
|
|
827
|
+
* Returns the instance index builtin.
|
|
828
|
+
*
|
|
829
|
+
* @return {string} The instance index.
|
|
830
|
+
*/
|
|
604
831
|
getInstanceIndex() {
|
|
605
832
|
|
|
606
833
|
return 'uint( gl_InstanceID )';
|
|
607
834
|
|
|
608
835
|
}
|
|
609
836
|
|
|
837
|
+
/**
|
|
838
|
+
* Returns the invocation local index builtin.
|
|
839
|
+
*
|
|
840
|
+
* @return {string} The invocation local index.
|
|
841
|
+
*/
|
|
842
|
+
getInvocationLocalIndex() {
|
|
843
|
+
|
|
844
|
+
const workgroupSize = this.object.workgroupSize;
|
|
845
|
+
|
|
846
|
+
const size = workgroupSize.reduce( ( acc, curr ) => acc * curr, 1 );
|
|
847
|
+
|
|
848
|
+
return `uint( gl_InstanceID ) % ${size}u`;
|
|
849
|
+
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
/**
|
|
853
|
+
* Returns the draw index builtin.
|
|
854
|
+
*
|
|
855
|
+
* @return {?string} The drawIndex shader string. Returns `null` if `WEBGL_multi_draw` isn't supported by the device.
|
|
856
|
+
*/
|
|
610
857
|
getDrawIndex() {
|
|
611
858
|
|
|
612
859
|
const extensions = this.renderer.backend.extensions;
|
|
@@ -621,24 +868,46 @@ ${ flowData.code }
|
|
|
621
868
|
|
|
622
869
|
}
|
|
623
870
|
|
|
871
|
+
/**
|
|
872
|
+
* Returns the front facing builtin.
|
|
873
|
+
*
|
|
874
|
+
* @return {string} The front facing builtin.
|
|
875
|
+
*/
|
|
624
876
|
getFrontFacing() {
|
|
625
877
|
|
|
626
878
|
return 'gl_FrontFacing';
|
|
627
879
|
|
|
628
880
|
}
|
|
629
881
|
|
|
882
|
+
/**
|
|
883
|
+
* Returns the frag coord builtin.
|
|
884
|
+
*
|
|
885
|
+
* @return {string} The frag coord builtin.
|
|
886
|
+
*/
|
|
630
887
|
getFragCoord() {
|
|
631
888
|
|
|
632
|
-
return 'gl_FragCoord';
|
|
889
|
+
return 'gl_FragCoord.xy';
|
|
633
890
|
|
|
634
891
|
}
|
|
635
892
|
|
|
893
|
+
/**
|
|
894
|
+
* Returns the frag depth builtin.
|
|
895
|
+
*
|
|
896
|
+
* @return {string} The frag depth builtin.
|
|
897
|
+
*/
|
|
636
898
|
getFragDepth() {
|
|
637
899
|
|
|
638
900
|
return 'gl_FragDepth';
|
|
639
901
|
|
|
640
902
|
}
|
|
641
903
|
|
|
904
|
+
/**
|
|
905
|
+
* Enables the given extension.
|
|
906
|
+
*
|
|
907
|
+
* @param {string} name - The extension name.
|
|
908
|
+
* @param {string} behavior - The extension behavior.
|
|
909
|
+
* @param {string} [shaderStage=this.shaderStage] - The shader stage.
|
|
910
|
+
*/
|
|
642
911
|
enableExtension( name, behavior, shaderStage = this.shaderStage ) {
|
|
643
912
|
|
|
644
913
|
const map = this.extensions[ shaderStage ] || ( this.extensions[ shaderStage ] = new Map() );
|
|
@@ -654,6 +923,12 @@ ${ flowData.code }
|
|
|
654
923
|
|
|
655
924
|
}
|
|
656
925
|
|
|
926
|
+
/**
|
|
927
|
+
* Returns the enabled extensions of the given shader stage as a GLSL string.
|
|
928
|
+
*
|
|
929
|
+
* @param {string} shaderStage - The shader stage.
|
|
930
|
+
* @return {string} The GLSL snippet that defines the enabled extensions.
|
|
931
|
+
*/
|
|
657
932
|
getExtensions( shaderStage ) {
|
|
658
933
|
|
|
659
934
|
const snippets = [];
|
|
@@ -665,7 +940,7 @@ ${ flowData.code }
|
|
|
665
940
|
|
|
666
941
|
if ( isBatchedMesh && ext.has( 'WEBGL_multi_draw' ) ) {
|
|
667
942
|
|
|
668
|
-
this.enableExtension( 'GL_ANGLE_multi_draw', 'require' );
|
|
943
|
+
this.enableExtension( 'GL_ANGLE_multi_draw', 'require', shaderStage );
|
|
669
944
|
|
|
670
945
|
}
|
|
671
946
|
|
|
@@ -687,24 +962,53 @@ ${ flowData.code }
|
|
|
687
962
|
|
|
688
963
|
}
|
|
689
964
|
|
|
965
|
+
/**
|
|
966
|
+
* Returns the clip distances builtin.
|
|
967
|
+
*
|
|
968
|
+
* @return {string} The clip distances builtin.
|
|
969
|
+
*/
|
|
970
|
+
getClipDistance() {
|
|
971
|
+
|
|
972
|
+
return 'gl_ClipDistance';
|
|
973
|
+
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
/**
|
|
977
|
+
* Whether the requested feature is available or not.
|
|
978
|
+
*
|
|
979
|
+
* @param {string} name - The requested feature.
|
|
980
|
+
* @return {boolean} Whether the requested feature is supported or not.
|
|
981
|
+
*/
|
|
690
982
|
isAvailable( name ) {
|
|
691
983
|
|
|
692
984
|
let result = supports[ name ];
|
|
693
985
|
|
|
694
986
|
if ( result === undefined ) {
|
|
695
987
|
|
|
696
|
-
|
|
988
|
+
let extensionName;
|
|
697
989
|
|
|
698
|
-
|
|
990
|
+
result = false;
|
|
699
991
|
|
|
700
|
-
|
|
992
|
+
switch ( name ) {
|
|
701
993
|
|
|
702
|
-
|
|
703
|
-
|
|
994
|
+
case 'float32Filterable':
|
|
995
|
+
extensionName = 'OES_texture_float_linear';
|
|
996
|
+
break;
|
|
704
997
|
|
|
705
|
-
|
|
998
|
+
case 'clipDistance':
|
|
999
|
+
extensionName = 'WEBGL_clip_cull_distance';
|
|
1000
|
+
break;
|
|
1001
|
+
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
if ( extensionName !== undefined ) {
|
|
706
1005
|
|
|
707
|
-
|
|
1006
|
+
const extensions = this.renderer.backend.extensions;
|
|
1007
|
+
|
|
1008
|
+
if ( extensions.has( extensionName ) ) {
|
|
1009
|
+
|
|
1010
|
+
extensions.get( extensionName );
|
|
1011
|
+
result = true;
|
|
708
1012
|
|
|
709
1013
|
}
|
|
710
1014
|
|
|
@@ -718,18 +1022,48 @@ ${ flowData.code }
|
|
|
718
1022
|
|
|
719
1023
|
}
|
|
720
1024
|
|
|
1025
|
+
/**
|
|
1026
|
+
* Whether to flip texture data along its vertical axis or not.
|
|
1027
|
+
*
|
|
1028
|
+
* @return {boolean} Returns always `true` in context of GLSL.
|
|
1029
|
+
*/
|
|
721
1030
|
isFlipY() {
|
|
722
1031
|
|
|
723
1032
|
return true;
|
|
724
1033
|
|
|
725
1034
|
}
|
|
726
1035
|
|
|
1036
|
+
/**
|
|
1037
|
+
* Enables hardware clipping.
|
|
1038
|
+
*
|
|
1039
|
+
* @param {string} planeCount - The clipping plane count.
|
|
1040
|
+
*/
|
|
1041
|
+
enableHardwareClipping( planeCount ) {
|
|
1042
|
+
|
|
1043
|
+
this.enableExtension( 'GL_ANGLE_clip_cull_distance', 'require' );
|
|
1044
|
+
|
|
1045
|
+
this.builtins[ 'vertex' ].push( `out float gl_ClipDistance[ ${ planeCount } ]` );
|
|
1046
|
+
|
|
1047
|
+
}
|
|
1048
|
+
|
|
1049
|
+
/**
|
|
1050
|
+
* Registers a transform in context of Transform Feedback.
|
|
1051
|
+
*
|
|
1052
|
+
* @param {string} varyingName - The varying name.
|
|
1053
|
+
* @param {AttributeNode} attributeNode - The attribute node.
|
|
1054
|
+
*/
|
|
727
1055
|
registerTransform( varyingName, attributeNode ) {
|
|
728
1056
|
|
|
729
1057
|
this.transforms.push( { varyingName, attributeNode } );
|
|
730
1058
|
|
|
731
1059
|
}
|
|
732
1060
|
|
|
1061
|
+
/**
|
|
1062
|
+
* Returns the transforms of the given shader stage as a GLSL string.
|
|
1063
|
+
*
|
|
1064
|
+
* @param {string} shaderStage - The shader stage.
|
|
1065
|
+
* @return {string} The GLSL snippet that defines the transforms.
|
|
1066
|
+
*/
|
|
733
1067
|
getTransforms( /* shaderStage */ ) {
|
|
734
1068
|
|
|
735
1069
|
const transforms = this.transforms;
|
|
@@ -750,6 +1084,14 @@ ${ flowData.code }
|
|
|
750
1084
|
|
|
751
1085
|
}
|
|
752
1086
|
|
|
1087
|
+
/**
|
|
1088
|
+
* Returns a GLSL struct based on the given name and variables.
|
|
1089
|
+
*
|
|
1090
|
+
* @private
|
|
1091
|
+
* @param {string} name - The struct name.
|
|
1092
|
+
* @param {string} vars - The struct variables.
|
|
1093
|
+
* @return {string} The GLSL snippet representing a struct.
|
|
1094
|
+
*/
|
|
753
1095
|
_getGLSLUniformStruct( name, vars ) {
|
|
754
1096
|
|
|
755
1097
|
return `
|
|
@@ -759,11 +1101,20 @@ ${vars}
|
|
|
759
1101
|
|
|
760
1102
|
}
|
|
761
1103
|
|
|
1104
|
+
/**
|
|
1105
|
+
* Returns a GLSL vertex shader based on the given shader data.
|
|
1106
|
+
*
|
|
1107
|
+
* @private
|
|
1108
|
+
* @param {Object} shaderData - The shader data.
|
|
1109
|
+
* @return {string} The vertex shader.
|
|
1110
|
+
*/
|
|
762
1111
|
_getGLSLVertexCode( shaderData ) {
|
|
763
1112
|
|
|
764
1113
|
return `#version 300 es
|
|
765
1114
|
|
|
766
|
-
|
|
1115
|
+
${ this.getSignature() }
|
|
1116
|
+
|
|
1117
|
+
// extensions
|
|
767
1118
|
${shaderData.extensions}
|
|
768
1119
|
|
|
769
1120
|
// precision
|
|
@@ -799,6 +1150,13 @@ void main() {
|
|
|
799
1150
|
|
|
800
1151
|
}
|
|
801
1152
|
|
|
1153
|
+
/**
|
|
1154
|
+
* Returns a GLSL fragment shader based on the given shader data.
|
|
1155
|
+
*
|
|
1156
|
+
* @private
|
|
1157
|
+
* @param {Object} shaderData - The shader data.
|
|
1158
|
+
* @return {string} The vertex shader.
|
|
1159
|
+
*/
|
|
802
1160
|
_getGLSLFragmentCode( shaderData ) {
|
|
803
1161
|
|
|
804
1162
|
return `#version 300 es
|
|
@@ -817,6 +1175,7 @@ ${shaderData.varyings}
|
|
|
817
1175
|
// codes
|
|
818
1176
|
${shaderData.codes}
|
|
819
1177
|
|
|
1178
|
+
// structs
|
|
820
1179
|
${shaderData.structs}
|
|
821
1180
|
|
|
822
1181
|
void main() {
|
|
@@ -832,10 +1191,15 @@ void main() {
|
|
|
832
1191
|
|
|
833
1192
|
}
|
|
834
1193
|
|
|
1194
|
+
/**
|
|
1195
|
+
* Controls the code build of the shader stages.
|
|
1196
|
+
*/
|
|
835
1197
|
buildCode() {
|
|
836
1198
|
|
|
837
1199
|
const shadersData = this.material !== null ? { fragment: {}, vertex: {} } : { compute: {} };
|
|
838
1200
|
|
|
1201
|
+
this.sortBindingGroups();
|
|
1202
|
+
|
|
839
1203
|
for ( const shaderStage in shadersData ) {
|
|
840
1204
|
|
|
841
1205
|
let flow = '// code\n\n';
|
|
@@ -910,6 +1274,19 @@ void main() {
|
|
|
910
1274
|
|
|
911
1275
|
}
|
|
912
1276
|
|
|
1277
|
+
/**
|
|
1278
|
+
* This method is one of the more important ones since it's responsible
|
|
1279
|
+
* for generating a matching binding instance for the given uniform node.
|
|
1280
|
+
*
|
|
1281
|
+
* These bindings are later used in the renderer to create bind groups
|
|
1282
|
+
* and layouts.
|
|
1283
|
+
*
|
|
1284
|
+
* @param {UniformNode} node - The uniform node.
|
|
1285
|
+
* @param {string} type - The node data type.
|
|
1286
|
+
* @param {string} shaderStage - The shader stage.
|
|
1287
|
+
* @param {?string} [name=null] - An optional uniform name.
|
|
1288
|
+
* @return {NodeUniform} The node uniform object.
|
|
1289
|
+
*/
|
|
913
1290
|
getUniformFromNode( node, type, shaderStage, name = null ) {
|
|
914
1291
|
|
|
915
1292
|
const uniformNode = super.getUniformFromNode( node, type, shaderStage, name );
|