@unikia/upe-renderer 0.186.110 → 0.187.11
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/README.md +5 -7
- package/UPSTREAM.md +4 -4
- package/build/three.core.js +853 -277
- package/build/three.module.js +1098 -1280
- package/build/three.tsl.js +41938 -686
- package/build/three.webgpu.js +10604 -49055
- package/build/three.webgpu.nodes.js +9249 -5788
- package/examples/jsm/Addons.js +2 -0
- package/examples/jsm/animation/CCDIKSolver.js +17 -5
- package/examples/jsm/controls/FirstPersonControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +27 -14
- package/examples/jsm/csm/CSMShader.js +74 -3
- package/examples/jsm/curves/CurveExtras.js +4 -4
- package/examples/jsm/curves/NURBSCurve.js +14 -0
- package/examples/jsm/exporters/EXRExporter.js +673 -16
- package/examples/jsm/exporters/GLTFExporter.js +4 -4
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/OBJExporter.js +48 -5
- package/examples/jsm/exporters/PLYExporter.js +22 -11
- package/examples/jsm/generators/CityGenerator.js +3 -2
- package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
- package/examples/jsm/gpgpu/BitonicSort.js +30 -23
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
- package/examples/jsm/inspector/Extension.js +1 -1
- package/examples/jsm/inspector/Inspector.js +6 -46
- package/examples/jsm/inspector/RendererInspector.js +43 -8
- package/examples/jsm/inspector/Storage.js +49 -0
- package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
- package/examples/jsm/inspector/tabs/Parameters.js +5 -1
- package/examples/jsm/inspector/tabs/Performance.js +22 -7
- package/examples/jsm/inspector/tabs/Settings.js +1 -1
- package/examples/jsm/inspector/tabs/Timeline.js +83 -7
- package/examples/jsm/inspector/tabs/Viewer.js +25 -10
- package/examples/jsm/inspector/ui/Profiler.js +1 -1
- package/examples/jsm/inspector/ui/Style.js +21 -53
- package/examples/jsm/inspector/ui/Values.js +28 -3
- package/examples/jsm/libs/fflate.module.js +83 -56
- package/examples/jsm/libs/mikktspace.README.md +27 -0
- package/examples/jsm/libs/mikktspace.module.js +721 -109
- package/examples/jsm/lighting/ClusteredLighting.js +100 -2
- package/examples/jsm/lighting/LightMapper.js +295 -0
- package/examples/jsm/lighting/LightProbeGrid.js +242 -139
- package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
- package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
- package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
- package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
- package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
- package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
- package/examples/jsm/lights/SunLight.js +9 -4
- package/examples/jsm/lights/SunLightNode.js +3 -3
- package/examples/jsm/lines/LineMaterial.js +26 -10
- package/examples/jsm/loaders/3DMLoader.js +10 -1
- package/examples/jsm/loaders/3MFLoader.js +5 -1
- package/examples/jsm/loaders/AMFLoader.js +2 -0
- package/examples/jsm/loaders/BVHLoader.js +2 -0
- package/examples/jsm/loaders/ColladaLoader.js +8 -0
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +5 -1
- package/examples/jsm/loaders/EXRLoader.js +120 -104
- package/examples/jsm/loaders/FBXLoader.js +4 -0
- package/examples/jsm/loaders/FontLoader.js +2 -0
- package/examples/jsm/loaders/GCodeLoader.js +5 -9
- package/examples/jsm/loaders/GLTFLoader.js +112 -31
- package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
- package/examples/jsm/loaders/IESLoader.js +46 -12
- package/examples/jsm/loaders/JXLLoader.js +159 -0
- package/examples/jsm/loaders/KMZLoader.js +6 -0
- package/examples/jsm/loaders/KSPLATLoader.js +2 -0
- package/examples/jsm/loaders/KTX2Loader.js +49 -4
- package/examples/jsm/loaders/KTXLoader.js +5 -3
- package/examples/jsm/loaders/LDrawLoader.js +15 -22
- package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
- package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
- package/examples/jsm/loaders/LUTImageLoader.js +2 -0
- package/examples/jsm/loaders/LWOLoader.js +6 -0
- package/examples/jsm/loaders/MD2Loader.js +2 -0
- package/examples/jsm/loaders/MDDLoader.js +4 -0
- package/examples/jsm/loaders/MTLLoader.js +8 -0
- package/examples/jsm/loaders/MaterialXLoader.js +57 -5
- package/examples/jsm/loaders/NRRDLoader.js +4 -2
- package/examples/jsm/loaders/OBJLoader.js +10 -4
- package/examples/jsm/loaders/PCDLoader.js +6 -2
- package/examples/jsm/loaders/PDBLoader.js +5 -3
- package/examples/jsm/loaders/PLYLoader.js +39 -15
- package/examples/jsm/loaders/PVRLoader.js +2 -2
- package/examples/jsm/loaders/SPLATLoader.js +2 -0
- package/examples/jsm/loaders/SPZLoader.js +2 -0
- package/examples/jsm/loaders/STLLoader.js +3 -1
- package/examples/jsm/loaders/SVGLoader.js +27 -49
- package/examples/jsm/loaders/TDSLoader.js +4 -0
- package/examples/jsm/loaders/TGALoader.js +6 -5
- package/examples/jsm/loaders/TTFLoader.js +2 -0
- package/examples/jsm/loaders/USDLoader.js +14 -0
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
- package/examples/jsm/loaders/VOXLoader.js +3 -0
- package/examples/jsm/loaders/VRMLLoader.js +4 -0
- package/examples/jsm/loaders/VTKLoader.js +2 -0
- package/examples/jsm/loaders/XYZLoader.js +2 -0
- package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
- package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
- package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
- package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
- package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
- package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
- package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
- package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
- package/examples/jsm/loaders/usd/USDAParser.js +56 -47
- package/examples/jsm/loaders/usd/USDComposer.js +25 -30
- package/examples/jsm/math/ColorConverter.js +7 -3
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/OBB.js +3 -3
- package/examples/jsm/math/Octree.js +20 -17
- package/examples/jsm/objects/GaussianSplat.js +5 -4
- package/examples/jsm/objects/Reflector.js +5 -0
- package/examples/jsm/objects/SkyMesh.js +14 -7
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/physics/RapierPhysics.js +2 -2
- package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
- package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
- package/examples/jsm/postprocessing/BokehPass.js +1 -1
- package/examples/jsm/postprocessing/GTAOPass.js +26 -18
- package/examples/jsm/renderers/SVGRenderer.js +3 -2
- package/examples/jsm/shaders/GTAOShader.js +7 -4
- package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
- package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
- package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
- package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
- package/examples/jsm/tsl/display/BloomNode.js +3 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
- package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
- package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
- package/examples/jsm/tsl/display/FSR1Node.js +3 -3
- package/examples/jsm/tsl/display/FXAANode.js +3 -10
- package/examples/jsm/tsl/display/FilmNode.js +3 -3
- package/examples/jsm/tsl/display/GTAONode.js +33 -25
- package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
- package/examples/jsm/tsl/display/GodraysNode.js +5 -19
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
- package/examples/jsm/tsl/display/LensflareNode.js +3 -3
- package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
- package/examples/jsm/tsl/display/OITPassNode.js +0 -11
- package/examples/jsm/tsl/display/OutlineNode.js +107 -5
- package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
- package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
- package/examples/jsm/tsl/display/SMAANode.js +3 -3
- package/examples/jsm/tsl/display/SSAONode.js +6 -20
- package/examples/jsm/tsl/display/SSGINode.js +36 -29
- package/examples/jsm/tsl/display/SSRNode.js +135 -63
- package/examples/jsm/tsl/display/SSSNode.js +6 -20
- package/examples/jsm/tsl/display/SharpenNode.js +3 -3
- package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
- package/examples/jsm/tsl/display/TAAUNode.js +10 -42
- package/examples/jsm/tsl/display/TRAANode.js +11 -43
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
- package/examples/jsm/tsl/display/TransitionNode.js +3 -3
- package/examples/jsm/tsl/display/lensDirt.js +30 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
- package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
- package/examples/jsm/tsl/utils/Raymarching.js +1 -1
- package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
- package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
- package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
- package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
- package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -1
- package/examples/jsm/utils/SceneUtils.js +1 -1
- package/examples/jsm/utils/unwrapUVs.js +865 -0
- package/examples/jsm/webxr/XREstimatedLight.js +11 -4
- package/package.json +3 -3
- package/src/Three.TSL.js +2 -683
- package/src/Three.WebGPU.Nodes.js +2 -1
- package/src/Three.WebGPU.js +2 -1
- package/src/animation/AnimationAction.js +1 -1
- package/src/animation/AnimationUtils.js +1 -3
- package/src/animation/KeyframeTrack.js +19 -0
- package/src/cameras/ArrayCamera.js +12 -0
- package/src/cameras/CubeCamera.js +3 -3
- package/src/constants.js +1 -9
- package/src/core/BufferAttribute.js +57 -21
- package/src/core/BufferGeometry.js +5 -13
- package/src/core/Clock.js +1 -1
- package/src/core/InterleavedBuffer.js +28 -18
- package/src/core/InterleavedBufferAttribute.js +54 -20
- package/src/core/Object3D.js +19 -9
- package/src/core/Raycaster.js +2 -0
- package/src/core/RenderTarget.js +11 -5
- package/src/core/UniformsGroup.js +7 -3
- package/src/extras/PMREMGenerator.js +392 -685
- package/src/extras/core/Curve.js +4 -0
- package/src/extras/core/CurvePath.js +13 -0
- package/src/extras/core/ShapePath.js +1 -1
- package/src/geometries/EdgesGeometry.js +12 -10
- package/src/geometries/LatheGeometry.js +2 -0
- package/src/helpers/PolarGridHelper.js +1 -1
- package/src/lights/Light.js +11 -0
- package/src/lights/LightProbe.js +2 -0
- package/src/lights/LightShadow.js +2 -0
- package/src/loaders/AnimationLoader.js +2 -0
- package/src/loaders/AudioLoader.js +2 -0
- package/src/loaders/BufferGeometryLoader.js +2 -0
- package/src/loaders/CompressedTextureLoader.js +2 -0
- package/src/loaders/CubeTextureLoader.js +2 -0
- package/src/loaders/DataTextureLoader.js +2 -0
- package/src/loaders/FileLoader.js +2 -0
- package/src/loaders/ImageBitmapLoader.js +3 -1
- package/src/loaders/ImageLoader.js +1 -0
- package/src/loaders/Loader.js +47 -0
- package/src/loaders/MaterialLoader.js +2 -0
- package/src/loaders/ObjectLoader.js +27 -8
- package/src/loaders/TextureLoader.js +5 -3
- package/src/loaders/nodes/NodeLoader.js +2 -0
- package/src/materials/Material.js +21 -2
- package/src/materials/MeshDepthMaterial.js +1 -1
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +1 -1
- package/src/materials/MeshMatcapMaterial.js +1 -1
- package/src/materials/MeshNormalMaterial.js +1 -1
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +90 -11
- package/src/materials/MeshStandardMaterial.js +1 -1
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +32 -10
- package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
- package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
- package/src/materials/nodes/NodeMaterial.js +36 -16
- package/src/materials/nodes/NodeMaterialInstance.js +193 -0
- package/src/materials/nodes/NodeMaterials.js +1 -0
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
- package/src/math/Box3.js +2 -2
- package/src/math/Color.js +8 -8
- package/src/math/ColorManagement.js +2 -21
- package/src/math/FrustumArray.js +12 -0
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +2 -4
- package/src/math/MathUtils.js +33 -46
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +1 -1
- package/src/math/Matrix4.js +1 -1
- package/src/math/Triangle.js +2 -1
- package/src/math/Vector2.js +1 -1
- package/src/math/Vector3.js +1 -1
- package/src/math/Vector4.js +1 -1
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/TSL.js +2 -0
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/Batch.js +29 -23
- package/src/nodes/accessors/BufferAttributeNode.js +21 -1
- package/src/nodes/accessors/BuiltinNode.js +6 -0
- package/src/nodes/accessors/Camera.js +100 -93
- package/src/nodes/accessors/ClippingNode.js +17 -6
- package/src/nodes/accessors/CubeTextureNode.js +12 -24
- package/src/nodes/accessors/Instance.js +198 -160
- package/src/nodes/accessors/Lights.js +19 -6
- package/src/nodes/accessors/MaterialNode.js +33 -4
- package/src/nodes/accessors/Morph.js +81 -22
- package/src/nodes/accessors/Normal.js +0 -42
- package/src/nodes/accessors/Object3DNode.js +6 -0
- package/src/nodes/accessors/PointUVNode.js +6 -0
- package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
- package/src/nodes/accessors/ReferenceNode.js +6 -0
- package/src/nodes/accessors/Skinning.js +57 -52
- package/src/nodes/accessors/StorageBufferNode.js +3 -12
- package/src/nodes/accessors/TextureBicubic.js +30 -27
- package/src/nodes/accessors/TextureNode.js +164 -78
- package/src/nodes/accessors/TextureSizeNode.js +6 -0
- package/src/nodes/accessors/UniformArrayNode.js +8 -15
- package/src/nodes/accessors/VelocityNode.js +13 -8
- package/src/nodes/code/CodeNode.js +6 -0
- package/src/nodes/code/ExpressionNode.js +6 -0
- package/src/nodes/code/FunctionCallNode.js +3 -3
- package/src/nodes/code/FunctionNode.js +15 -13
- package/src/nodes/core/ArrayNode.js +3 -3
- package/src/nodes/core/AssignNode.js +10 -9
- package/src/nodes/core/AttributeNode.js +39 -0
- package/src/nodes/core/BypassNode.js +6 -0
- package/src/nodes/core/ConstNode.js +31 -1
- package/src/nodes/core/ContextNode.js +11 -6
- package/src/nodes/core/IndexNode.js +6 -0
- package/src/nodes/core/InputNode.js +6 -0
- package/src/nodes/core/InspectorNode.js +17 -31
- package/src/nodes/core/IsolateNode.js +8 -0
- package/src/nodes/core/Node.js +367 -67
- package/src/nodes/core/NodeBuilder.js +664 -222
- package/src/nodes/core/NodeUtils.js +25 -0
- package/src/nodes/core/NodeVar.js +10 -1
- package/src/nodes/core/OutputStructNode.js +6 -0
- package/src/nodes/core/OverrideContextNode.js +38 -37
- package/src/nodes/core/PropertyNode.js +14 -0
- package/src/nodes/core/StackNode.js +33 -21
- package/src/nodes/core/StructNode.js +6 -0
- package/src/nodes/core/StructTypeNode.js +6 -0
- package/src/nodes/core/SubBuildNode.js +8 -0
- package/src/nodes/core/TempNode.js +10 -35
- package/src/nodes/core/UniformGroupNode.js +6 -0
- package/src/nodes/core/VarNode.js +43 -135
- package/src/nodes/core/VaryingNode.js +33 -2
- package/src/nodes/display/BlendModes.js +5 -40
- package/src/nodes/display/BumpMapNode.js +17 -7
- package/src/nodes/display/ColorAdjustment.js +22 -10
- package/src/nodes/display/ColorSpaceFunctions.js +2 -14
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +6 -0
- package/src/nodes/display/NormalMapNode.js +3 -3
- package/src/nodes/display/PassNode.js +75 -16
- package/src/nodes/display/RenderOutputNode.js +22 -5
- package/src/nodes/display/ScreenNode.js +6 -0
- package/src/nodes/display/ToneMappingFunctions.js +9 -51
- package/src/nodes/display/ToneMappingNode.js +3 -3
- package/src/nodes/display/ToonOutlinePassNode.js +66 -2
- package/src/nodes/display/ViewportDepthNode.js +34 -4
- package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
- package/src/nodes/functions/BSDF/D_GGX.js +1 -8
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
- package/src/nodes/functions/BSDF/LTC.js +20 -47
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
- package/src/nodes/functions/PhysicalLightingModel.js +84 -51
- package/src/nodes/functions/VolumetricLightingModel.js +1 -1
- package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
- package/src/nodes/functions/material/getRoughness.js +3 -1
- package/src/nodes/geometry/RangeNode.js +52 -69
- package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
- package/src/nodes/gpgpu/BarrierNode.js +6 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
- package/src/nodes/gpgpu/ComputeNode.js +6 -0
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
- package/src/nodes/lighting/AnalyticLightNode.js +7 -14
- package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
- package/src/nodes/lighting/EnvironmentNode.js +58 -8
- package/src/nodes/lighting/IESSpotLightNode.js +19 -4
- package/src/nodes/lighting/LightProbeNode.js +2 -1
- package/src/nodes/lighting/LightUtils.js +2 -2
- package/src/nodes/lighting/LightingNode.js +6 -0
- package/src/nodes/lighting/LightsNode.js +26 -32
- package/src/nodes/lighting/PointShadowNode.js +92 -48
- package/src/nodes/lighting/ProjectorLightNode.js +1 -1
- package/src/nodes/lighting/RectAreaLightNode.js +13 -14
- package/src/nodes/lighting/ShadowBaseNode.js +9 -17
- package/src/nodes/lighting/ShadowFilterNode.js +26 -3
- package/src/nodes/lighting/ShadowNode.js +13 -11
- package/src/nodes/materialx/MaterialXColor.js +2 -14
- package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
- package/src/nodes/materialx/MaterialXNodes.js +8 -11
- package/src/nodes/materialx/MaterialXNoise.js +195 -454
- package/src/nodes/math/BitcastNode.js +5 -5
- package/src/nodes/math/BitcountNode.js +18 -46
- package/src/nodes/math/ConditionalNode.js +92 -22
- package/src/nodes/math/Hash.js +1 -1
- package/src/nodes/math/MathNode.js +86 -64
- package/src/nodes/math/MathUtils.js +2 -2
- package/src/nodes/math/OperatorNode.js +42 -59
- package/src/nodes/math/PackFloatNode.js +9 -9
- package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
- package/src/nodes/math/TriNoise3D.js +3 -23
- package/src/nodes/math/UnpackFloatNode.js +9 -9
- package/src/nodes/pmrem/PMREMNode.js +38 -75
- package/src/nodes/pmrem/PMREMUtils.js +108 -272
- package/src/nodes/procedural/Checker.js +1 -1
- package/src/nodes/tsl/TSLCore.js +199 -74
- package/src/nodes/utils/ArrayElementNode.js +19 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +2 -2
- package/src/nodes/utils/EventNode.js +6 -0
- package/src/nodes/utils/FlipNode.js +3 -3
- package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +14 -9
- package/src/nodes/utils/MemberNode.js +18 -0
- package/src/nodes/utils/PostProcessingUtils.js +20 -25
- package/src/nodes/utils/RTTNode.js +2 -0
- package/src/nodes/utils/ReflectorNode.js +24 -0
- package/src/nodes/utils/RotateNode.js +3 -3
- package/src/nodes/utils/SampleNode.js +6 -0
- package/src/nodes/utils/SetNode.js +3 -3
- package/src/nodes/utils/SplitNode.js +6 -0
- package/src/nodes/utils/UVUtils.js +2 -2
- package/src/objects/BatchedMesh.js +146 -15
- package/src/objects/InstancedMesh.js +12 -4
- package/src/objects/Line.js +20 -0
- package/src/objects/Mesh.js +8 -0
- package/src/objects/Points.js +20 -0
- package/src/objects/Skeleton.js +26 -0
- package/src/objects/SkinnedMesh.js +3 -3
- package/src/objects/Sprite.js +10 -0
- package/src/renderers/WebGLRenderer.js +104 -70
- package/src/renderers/common/Animation.js +5 -1
- package/src/renderers/common/Attributes.js +67 -57
- package/src/renderers/common/Backend.js +78 -3
- package/src/renderers/common/BindGroup.js +11 -0
- package/src/renderers/common/Binding.js +0 -11
- package/src/renderers/common/Bindings.js +116 -10
- package/src/renderers/common/Buffer.js +1 -1
- package/src/renderers/common/ClippingContext.js +12 -1
- package/src/renderers/common/ComputePipeline.js +17 -1
- package/src/renderers/common/DirectRenderPipeline.js +7 -3
- package/src/renderers/common/Geometries.js +170 -132
- package/src/renderers/common/Info.js +1 -1
- package/src/renderers/common/InspectorBase.js +5 -5
- package/src/renderers/common/Lighting.js +59 -0
- package/src/renderers/common/Pipelines.js +26 -12
- package/src/renderers/common/ProgrammableStage.js +1 -17
- package/src/renderers/common/RenderContext.js +21 -0
- package/src/renderers/common/RenderContexts.js +13 -4
- package/src/renderers/common/RenderObject.js +111 -35
- package/src/renderers/common/RenderObjects.js +37 -19
- package/src/renderers/common/Renderer.js +537 -295
- package/src/renderers/common/RendererUtils.js +15 -0
- package/src/renderers/common/StandardDrawingPipeline.js +343 -0
- package/src/renderers/common/Storage3DTexture.js +11 -0
- package/src/renderers/common/StorageArrayTexture.js +10 -0
- package/src/renderers/common/StorageTexture.js +0 -9
- package/src/renderers/common/Textures.js +144 -37
- package/src/renderers/common/UniformsGroup.js +19 -0
- package/src/renderers/common/XRManager.js +10 -91
- package/src/renderers/common/extras/PMREMGenerator.js +298 -576
- package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
- package/src/renderers/common/nodes/NodeLibrary.js +11 -35
- package/src/renderers/common/nodes/NodeManager.js +80 -31
- package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
- package/src/renderers/common/nodes/NodeSampler.js +14 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
- package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
- package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk.js +0 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
- package/src/renderers/shaders/ShaderLib.js +3 -0
- package/src/renderers/shaders/UniformsLib.js +4 -5
- package/src/renderers/webgl/WebGLBackground.js +3 -3
- package/src/renderers/webgl/WebGLBindingStates.js +4 -2
- package/src/renderers/webgl/WebGLCapabilities.js +7 -1
- package/src/renderers/webgl/WebGLEnvironments.js +2 -2
- package/src/renderers/webgl/WebGLGeometries.js +42 -14
- package/src/renderers/webgl/WebGLMaterials.js +15 -2
- package/src/renderers/webgl/WebGLOutput.js +37 -1
- package/src/renderers/webgl/WebGLProgram.js +13 -54
- package/src/renderers/webgl/WebGLPrograms.js +22 -8
- package/src/renderers/webgl/WebGLRenderStates.js +11 -8
- package/src/renderers/webgl/WebGLShadowMap.js +6 -4
- package/src/renderers/webgl/WebGLState.js +10 -6
- package/src/renderers/webgl/WebGLTextures.js +129 -77
- package/src/renderers/webgl/WebGLUniforms.js +44 -6
- package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
- package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
- package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
- package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
- package/src/renderers/webgpu/WebGPUBackend.js +140 -82
- package/src/renderers/webgpu/WebGPURenderer.js +1 -1
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
- package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
- package/src/renderers/webxr/WebXRController.js +3 -3
- package/src/renderers/webxr/WebXRManager.js +5 -90
- package/src/scenes/Scene.js +4 -4
- package/src/textures/CompressedTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -2
- package/src/textures/FramebufferTexture.js +11 -0
- package/src/textures/Texture.js +29 -1
- package/src/textures/TextureSource.js +1 -1
- package/src/upe.js +1 -1
- package/src/utils.js +4 -4
- package/examples/jsm/libs/surfaceNet.js +0 -201
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
|
+
import { nodeProxyAssignable } from '../tsl/TSLCore.js';
|
|
3
3
|
/**
|
|
4
4
|
* This node represents an operation that reinterprets the bit representation of a value
|
|
5
5
|
* in one type as a value in another type.
|
|
6
6
|
*
|
|
7
|
-
* @augments
|
|
7
|
+
* @augments Node
|
|
8
8
|
*/
|
|
9
|
-
class BitcastNode extends
|
|
9
|
+
class BitcastNode extends Node {
|
|
10
10
|
|
|
11
11
|
static get type() {
|
|
12
12
|
|
|
@@ -113,7 +113,7 @@ export default BitcastNode;
|
|
|
113
113
|
* @param {string} y - The new type.
|
|
114
114
|
* @returns {Node}
|
|
115
115
|
*/
|
|
116
|
-
export const bitcast = /*@__PURE__*/
|
|
116
|
+
export const bitcast = /*@__PURE__*/ nodeProxyAssignable( BitcastNode ).setParameterLength( 2 );
|
|
117
117
|
|
|
118
118
|
/**
|
|
119
119
|
* Bitcasts a float or a vector of floats to a corresponding integer type with the same element size.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { float, Fn, If,
|
|
1
|
+
import { float, Fn, If, nodeProxyAssignable, uint, int, uvec2, uvec3, uvec4, ivec2, ivec3, ivec4 } from '../tsl/TSLCore.js';
|
|
2
2
|
import { bitcast, floatBitsToUint } from './BitcastNode.js';
|
|
3
3
|
import MathNode, { negate } from './MathNode.js';
|
|
4
4
|
|
|
@@ -120,11 +120,10 @@ class BitcountNode extends MathNode {
|
|
|
120
120
|
* Creates and registers a reusable GLSL function that emulates the behavior of countTrailingZeros.
|
|
121
121
|
*
|
|
122
122
|
* @private
|
|
123
|
-
* @param {string} method - The name of the function to create.
|
|
124
123
|
* @param {string} elementType - The type of the input value.
|
|
125
124
|
* @returns {Function} - The generated function
|
|
126
125
|
*/
|
|
127
|
-
_createTrailingZerosBaseLayout(
|
|
126
|
+
_createTrailingZerosBaseLayout( elementType ) {
|
|
128
127
|
|
|
129
128
|
const outputConvertNode = this._returnDataNode( elementType );
|
|
130
129
|
|
|
@@ -132,7 +131,7 @@ class BitcountNode extends MathNode {
|
|
|
132
131
|
|
|
133
132
|
If( value.equal( uint( 0 ) ), () => {
|
|
134
133
|
|
|
135
|
-
return
|
|
134
|
+
return outputConvertNode( 32 );
|
|
136
135
|
|
|
137
136
|
} );
|
|
138
137
|
|
|
@@ -147,13 +146,7 @@ class BitcountNode extends MathNode {
|
|
|
147
146
|
|
|
148
147
|
return outputConvertNode( numTrailingZeros );
|
|
149
148
|
|
|
150
|
-
} )
|
|
151
|
-
name: method,
|
|
152
|
-
type: elementType,
|
|
153
|
-
inputs: [
|
|
154
|
-
{ name: 'value', type: elementType }
|
|
155
|
-
]
|
|
156
|
-
} );
|
|
149
|
+
}, { value: elementType, return: elementType } );
|
|
157
150
|
|
|
158
151
|
return fnDef;
|
|
159
152
|
|
|
@@ -163,11 +156,10 @@ class BitcountNode extends MathNode {
|
|
|
163
156
|
* Creates and registers a reusable GLSL function that emulates the behavior of countLeadingZeros.
|
|
164
157
|
*
|
|
165
158
|
* @private
|
|
166
|
-
* @param {string} method - The name of the function to create.
|
|
167
159
|
* @param {string} elementType - The type of the input value.
|
|
168
160
|
* @returns {Function} - The generated function
|
|
169
161
|
*/
|
|
170
|
-
_createLeadingZerosBaseLayout(
|
|
162
|
+
_createLeadingZerosBaseLayout( elementType ) {
|
|
171
163
|
|
|
172
164
|
const outputConvertNode = this._returnDataNode( elementType );
|
|
173
165
|
|
|
@@ -175,7 +167,7 @@ class BitcountNode extends MathNode {
|
|
|
175
167
|
|
|
176
168
|
If( value.equal( uint( 0 ) ), () => {
|
|
177
169
|
|
|
178
|
-
return
|
|
170
|
+
return outputConvertNode( 32 );
|
|
179
171
|
|
|
180
172
|
} );
|
|
181
173
|
|
|
@@ -219,13 +211,7 @@ class BitcountNode extends MathNode {
|
|
|
219
211
|
|
|
220
212
|
return outputConvertNode( n );
|
|
221
213
|
|
|
222
|
-
} )
|
|
223
|
-
name: method,
|
|
224
|
-
type: elementType,
|
|
225
|
-
inputs: [
|
|
226
|
-
{ name: 'value', type: elementType }
|
|
227
|
-
]
|
|
228
|
-
} );
|
|
214
|
+
}, { value: elementType, return: elementType } );
|
|
229
215
|
|
|
230
216
|
return fnDef;
|
|
231
217
|
|
|
@@ -235,11 +221,10 @@ class BitcountNode extends MathNode {
|
|
|
235
221
|
* Creates and registers a reusable GLSL function that emulates the behavior of countOneBits.
|
|
236
222
|
*
|
|
237
223
|
* @private
|
|
238
|
-
* @param {string} method - The name of the function to create.
|
|
239
224
|
* @param {string} elementType - The type of the input value.
|
|
240
225
|
* @returns {Function} - The generated function
|
|
241
226
|
*/
|
|
242
|
-
_createOneBitsBaseLayout(
|
|
227
|
+
_createOneBitsBaseLayout( elementType ) {
|
|
243
228
|
|
|
244
229
|
const outputConvertNode = this._returnDataNode( elementType );
|
|
245
230
|
|
|
@@ -256,13 +241,7 @@ class BitcountNode extends MathNode {
|
|
|
256
241
|
|
|
257
242
|
return outputConvertNode( numBits );
|
|
258
243
|
|
|
259
|
-
} )
|
|
260
|
-
name: method,
|
|
261
|
-
type: elementType,
|
|
262
|
-
inputs: [
|
|
263
|
-
{ name: 'value', type: elementType }
|
|
264
|
-
]
|
|
265
|
-
} );
|
|
244
|
+
}, { value: elementType, return: elementType } );
|
|
266
245
|
|
|
267
246
|
return fnDef;
|
|
268
247
|
|
|
@@ -273,13 +252,12 @@ class BitcountNode extends MathNode {
|
|
|
273
252
|
* including considerations for component-wise bitcounts on vector type inputs.
|
|
274
253
|
*
|
|
275
254
|
* @private
|
|
276
|
-
* @param {string} method - The name of the function to create.
|
|
277
255
|
* @param {string} inputType - The type of the input value.
|
|
278
256
|
* @param {number} typeLength - The vec length of the input value.
|
|
279
257
|
* @param {Function} baseFn - The base function that operates on an individual component of the vector.
|
|
280
258
|
* @returns {Function} - The alias function for the specified bitcount method.
|
|
281
259
|
*/
|
|
282
|
-
_createMainLayout(
|
|
260
|
+
_createMainLayout( inputType, typeLength, baseFn ) {
|
|
283
261
|
|
|
284
262
|
const outputConvertNode = this._returnDataNode( inputType );
|
|
285
263
|
|
|
@@ -306,13 +284,7 @@ class BitcountNode extends MathNode {
|
|
|
306
284
|
|
|
307
285
|
}
|
|
308
286
|
|
|
309
|
-
} )
|
|
310
|
-
name: method,
|
|
311
|
-
type: inputType,
|
|
312
|
-
inputs: [
|
|
313
|
-
{ name: 'value', type: inputType }
|
|
314
|
-
]
|
|
315
|
-
} );
|
|
287
|
+
}, { value: inputType, return: inputType } );
|
|
316
288
|
|
|
317
289
|
return fnDef;
|
|
318
290
|
|
|
@@ -348,21 +320,21 @@ class BitcountNode extends MathNode {
|
|
|
348
320
|
|
|
349
321
|
case BitcountNode.COUNT_LEADING_ZEROS: {
|
|
350
322
|
|
|
351
|
-
baseFn = this._createLeadingZerosBaseLayout(
|
|
323
|
+
baseFn = this._createLeadingZerosBaseLayout( elementType );
|
|
352
324
|
break;
|
|
353
325
|
|
|
354
326
|
}
|
|
355
327
|
|
|
356
328
|
case BitcountNode.COUNT_TRAILING_ZEROS: {
|
|
357
329
|
|
|
358
|
-
baseFn = this._createTrailingZerosBaseLayout(
|
|
330
|
+
baseFn = this._createTrailingZerosBaseLayout( elementType );
|
|
359
331
|
break;
|
|
360
332
|
|
|
361
333
|
}
|
|
362
334
|
|
|
363
335
|
case BitcountNode.COUNT_ONE_BITS: {
|
|
364
336
|
|
|
365
|
-
baseFn = this._createOneBitsBaseLayout(
|
|
337
|
+
baseFn = this._createOneBitsBaseLayout( elementType );
|
|
366
338
|
break;
|
|
367
339
|
|
|
368
340
|
}
|
|
@@ -377,7 +349,7 @@ class BitcountNode extends MathNode {
|
|
|
377
349
|
|
|
378
350
|
if ( fn === undefined ) {
|
|
379
351
|
|
|
380
|
-
fn = this._createMainLayout(
|
|
352
|
+
fn = this._createMainLayout( inputType, typeLength, baseFn );
|
|
381
353
|
registeredBitcountFunctions[ newMethod ] = fn;
|
|
382
354
|
|
|
383
355
|
}
|
|
@@ -427,7 +399,7 @@ export default BitcountNode;
|
|
|
427
399
|
* @param {Node | number} x - The input value.
|
|
428
400
|
* @returns {Node}
|
|
429
401
|
*/
|
|
430
|
-
export const countTrailingZeros = /*@__PURE__*/
|
|
402
|
+
export const countTrailingZeros = /*@__PURE__*/ nodeProxyAssignable( BitcountNode, BitcountNode.COUNT_TRAILING_ZEROS ).setParameterLength( 1 );
|
|
431
403
|
|
|
432
404
|
/**
|
|
433
405
|
* Finds the number of consecutive 0 bits starting from the most significant bit of the input value.
|
|
@@ -439,7 +411,7 @@ export const countTrailingZeros = /*@__PURE__*/ nodeProxyIntent( BitcountNode, B
|
|
|
439
411
|
* @param {Node | number} x - The input value.
|
|
440
412
|
* @returns {Node}
|
|
441
413
|
*/
|
|
442
|
-
export const countLeadingZeros = /*@__PURE__*/
|
|
414
|
+
export const countLeadingZeros = /*@__PURE__*/ nodeProxyAssignable( BitcountNode, BitcountNode.COUNT_LEADING_ZEROS ).setParameterLength( 1 );
|
|
443
415
|
|
|
444
416
|
/**
|
|
445
417
|
* Finds the number of '1' bits set in the input value
|
|
@@ -450,4 +422,4 @@ export const countLeadingZeros = /*@__PURE__*/ nodeProxyIntent( BitcountNode, Bi
|
|
|
450
422
|
* @function
|
|
451
423
|
* @returns {Node}
|
|
452
424
|
*/
|
|
453
|
-
export const countOneBits = /*@__PURE__*/
|
|
425
|
+
export const countOneBits = /*@__PURE__*/ nodeProxyAssignable( BitcountNode, BitcountNode.COUNT_ONE_BITS ).setParameterLength( 1 );
|
|
@@ -2,6 +2,7 @@ import Node from '../core/Node.js';
|
|
|
2
2
|
import { property } from '../core/PropertyNode.js';
|
|
3
3
|
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
4
4
|
import { warn } from '../../utils.js';
|
|
5
|
+
import NodeError from '../core/NodeError.js';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Represents a logical `if/else` statement. Can be used as an alternative
|
|
@@ -14,6 +15,19 @@ import { warn } from '../../utils.js';
|
|
|
14
15
|
* velocity = position.greaterThanEqual( limit ).select( velocity.negate(), velocity );
|
|
15
16
|
* ```
|
|
16
17
|
*
|
|
18
|
+
* When the condition is itself a vector (e.g. the `bvec4` produced by
|
|
19
|
+
* `someVec4.greaterThanEqual( someOtherVec4 )`), `select()` resolves
|
|
20
|
+
* per-component - each output lane picks independently based on its own
|
|
21
|
+
* condition component, the same way WGSL's native `select()` and GLSL's
|
|
22
|
+
* `mix( x, y, bvecN )` do - rather than picking one branch for the whole
|
|
23
|
+
* vector. The condition and values are converted to the largest vector width,
|
|
24
|
+
* with the condition converted to boolean components. Scalar values are broadcast.
|
|
25
|
+
*
|
|
26
|
+
* ```js
|
|
27
|
+
* // per-component: each channel picks independently
|
|
28
|
+
* const clamped = value.greaterThan( vec3( 1.0 ) ).select( vec3( 1.0 ), value );
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
17
31
|
* @augments Node
|
|
18
32
|
*/
|
|
19
33
|
class ConditionalNode extends Node {
|
|
@@ -59,6 +73,12 @@ class ConditionalNode extends Node {
|
|
|
59
73
|
|
|
60
74
|
}
|
|
61
75
|
|
|
76
|
+
isCacheable( /*builder*/ ) {
|
|
77
|
+
|
|
78
|
+
return false;
|
|
79
|
+
|
|
80
|
+
}
|
|
81
|
+
|
|
62
82
|
/**
|
|
63
83
|
* This method is overwritten since the node type is inferred from the if/else
|
|
64
84
|
* nodes.
|
|
@@ -68,7 +88,7 @@ class ConditionalNode extends Node {
|
|
|
68
88
|
*/
|
|
69
89
|
generateNodeType( builder ) {
|
|
70
90
|
|
|
71
|
-
const { ifNode, elseNode } = builder.getNodeProperties( this );
|
|
91
|
+
const { condNode, ifNode, elseNode } = builder.getNodeProperties( this );
|
|
72
92
|
|
|
73
93
|
if ( ifNode === undefined ) {
|
|
74
94
|
|
|
@@ -80,45 +100,40 @@ class ConditionalNode extends Node {
|
|
|
80
100
|
|
|
81
101
|
}
|
|
82
102
|
|
|
83
|
-
|
|
103
|
+
let type = ifNode.getNodeType( builder );
|
|
84
104
|
|
|
85
105
|
if ( elseNode !== null ) {
|
|
86
106
|
|
|
87
107
|
const elseType = elseNode.getNodeType( builder );
|
|
88
108
|
|
|
89
|
-
if ( builder.getTypeLength( elseType ) > builder.getTypeLength(
|
|
109
|
+
if ( builder.getTypeLength( elseType ) > builder.getTypeLength( type ) ) {
|
|
90
110
|
|
|
91
|
-
|
|
111
|
+
type = elseType;
|
|
92
112
|
|
|
93
113
|
}
|
|
94
114
|
|
|
95
115
|
}
|
|
96
116
|
|
|
97
|
-
|
|
117
|
+
const condLength = builder.getTypeLength( condNode.getNodeType( builder ) );
|
|
98
118
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
setup( builder ) {
|
|
119
|
+
if ( condLength > 1 && ! builder.isReference( type ) && ( builder.getTypeLength( type ) === 1 || builder.isVector( builder.getVectorType( type ) ) ) ) {
|
|
102
120
|
|
|
103
|
-
|
|
104
|
-
const ifNode = this.ifNode.isolate();
|
|
105
|
-
const elseNode = this.elseNode ? this.elseNode.isolate() : null;
|
|
121
|
+
type = builder.getTypeFromLength( Math.max( condLength, builder.getTypeLength( type ) ), builder.getComponentType( type ) );
|
|
106
122
|
|
|
107
|
-
|
|
123
|
+
}
|
|
108
124
|
|
|
109
|
-
|
|
125
|
+
return type;
|
|
110
126
|
|
|
111
|
-
|
|
112
|
-
if ( elseNode !== null ) builder.getDataFromNode( elseNode ).parentNodeBlock = currentNodeBlock;
|
|
127
|
+
}
|
|
113
128
|
|
|
114
|
-
|
|
129
|
+
setup( builder ) {
|
|
115
130
|
|
|
116
|
-
const
|
|
131
|
+
const { condNode, ifNode, elseNode } = this;
|
|
117
132
|
|
|
118
133
|
const properties = builder.getNodeProperties( this );
|
|
119
134
|
properties.condNode = condNode;
|
|
120
|
-
properties.ifNode =
|
|
121
|
-
properties.elseNode = elseNode
|
|
135
|
+
properties.ifNode = ifNode;
|
|
136
|
+
properties.elseNode = elseNode;
|
|
122
137
|
|
|
123
138
|
}
|
|
124
139
|
|
|
@@ -128,9 +143,9 @@ class ConditionalNode extends Node {
|
|
|
128
143
|
|
|
129
144
|
const nodeData = builder.getDataFromNode( this );
|
|
130
145
|
|
|
131
|
-
if ( nodeData.
|
|
146
|
+
if ( nodeData.propertyName !== undefined ) {
|
|
132
147
|
|
|
133
|
-
return nodeData.
|
|
148
|
+
return builder.format( nodeData.propertyName, type, output );
|
|
134
149
|
|
|
135
150
|
}
|
|
136
151
|
|
|
@@ -140,7 +155,48 @@ class ConditionalNode extends Node {
|
|
|
140
155
|
const needsOutput = output !== 'void';
|
|
141
156
|
const nodeProperty = needsOutput ? property( type ).build( builder ) : '';
|
|
142
157
|
|
|
143
|
-
nodeData.
|
|
158
|
+
nodeData.propertyName = nodeProperty;
|
|
159
|
+
|
|
160
|
+
// A vector condition selects per-component - see getVectorSelect().
|
|
161
|
+
const condType = condNode.getNodeType( builder );
|
|
162
|
+
const condLength = builder.getTypeLength( condType );
|
|
163
|
+
|
|
164
|
+
if ( condLength > 1 ) {
|
|
165
|
+
|
|
166
|
+
const vectorType = builder.getVectorType( type );
|
|
167
|
+
|
|
168
|
+
if ( builder.isReference( type ) || ! builder.isVector( vectorType ) ) {
|
|
169
|
+
|
|
170
|
+
throw new NodeError( `TSL: select() with a vector condition ("${ condType }") requires scalar or vector values, received "${ type }".`, this.stackTrace );
|
|
171
|
+
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// No "else": unselected lanes fall back to the type's zero value.
|
|
175
|
+
let elseSnippet;
|
|
176
|
+
|
|
177
|
+
if ( elseNode !== null ) {
|
|
178
|
+
|
|
179
|
+
elseSnippet = elseNode.build( builder, type );
|
|
180
|
+
|
|
181
|
+
} else {
|
|
182
|
+
|
|
183
|
+
elseSnippet = builder.generateConst( type );
|
|
184
|
+
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const boolType = builder.changeComponentType( type, 'bool' );
|
|
188
|
+
const condSnippet = condNode.build( builder, boolType );
|
|
189
|
+
const ifSnippet = ifNode.build( builder, type );
|
|
190
|
+
|
|
191
|
+
const mathSnippet = builder.getVectorSelect( condSnippet, ifSnippet, elseSnippet, type );
|
|
192
|
+
|
|
193
|
+
if ( ! needsOutput ) return '';
|
|
194
|
+
|
|
195
|
+
builder.addFlowCode( `\n${ builder.tab }${ nodeProperty } = ${ mathSnippet };\n\n` );
|
|
196
|
+
|
|
197
|
+
return builder.format( nodeProperty, type, output );
|
|
198
|
+
|
|
199
|
+
}
|
|
144
200
|
|
|
145
201
|
const nodeSnippet = condNode.build( builder, 'bool' );
|
|
146
202
|
const isUniformFlow = builder.context.uniformFlow;
|
|
@@ -160,8 +216,18 @@ class ConditionalNode extends Node {
|
|
|
160
216
|
|
|
161
217
|
builder.addFlowCode( `\n${ builder.tab }if ( ${ nodeSnippet } ) {\n\n` ).addFlowTab();
|
|
162
218
|
|
|
219
|
+
// An immutable condition, i.e. a constant, is the guard of the blocks: blocks of the same parent and guard run together.
|
|
220
|
+
const condData = builder.getDataFromNode( condNode );
|
|
221
|
+
const guard = condData.propertyName === nodeSnippet && condData.assign !== true ? nodeSnippet : undefined;
|
|
222
|
+
|
|
223
|
+
const flowBlock = builder.flowBlock;
|
|
224
|
+
|
|
225
|
+
builder.flowBlock = { parent: flowBlock, guard };
|
|
226
|
+
|
|
163
227
|
let ifSnippet = ifNode.build( builder, type );
|
|
164
228
|
|
|
229
|
+
builder.flowBlock = flowBlock;
|
|
230
|
+
|
|
165
231
|
if ( ifSnippet ) {
|
|
166
232
|
|
|
167
233
|
if ( needsOutput ) {
|
|
@@ -190,8 +256,12 @@ class ConditionalNode extends Node {
|
|
|
190
256
|
|
|
191
257
|
builder.addFlowCode( ' else {\n\n' ).addFlowTab();
|
|
192
258
|
|
|
259
|
+
builder.flowBlock = { parent: flowBlock, guard: guard !== undefined ? '!' + guard : undefined };
|
|
260
|
+
|
|
193
261
|
let elseSnippet = elseNode.build( builder, type );
|
|
194
262
|
|
|
263
|
+
builder.flowBlock = flowBlock;
|
|
264
|
+
|
|
195
265
|
if ( elseSnippet ) {
|
|
196
266
|
|
|
197
267
|
if ( needsOutput ) {
|
package/src/nodes/math/Hash.js
CHANGED