@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,3 +1,9 @@
|
|
|
1
|
+
import {
|
|
2
|
+
RepeatWrapping,
|
|
3
|
+
ClampToEdgeWrapping,
|
|
4
|
+
MirroredRepeatWrapping,
|
|
5
|
+
} from 'three/webgpu';
|
|
6
|
+
|
|
1
7
|
import {
|
|
2
8
|
bool,
|
|
3
9
|
element,
|
|
@@ -6,6 +12,12 @@ import {
|
|
|
6
12
|
} from 'three/tsl';
|
|
7
13
|
|
|
8
14
|
const BOOLEAN_OPERATOR_OPS = new Set( [ '&&', '||', '^^', '!', '==', '!=', '<', '>', '<=', '>=' ] );
|
|
15
|
+
const TEXTURE_ADDRESS_MODE_WRAPPING = {
|
|
16
|
+
constant: ClampToEdgeWrapping,
|
|
17
|
+
clamp: ClampToEdgeWrapping,
|
|
18
|
+
periodic: RepeatWrapping,
|
|
19
|
+
mirror: MirroredRepeatWrapping,
|
|
20
|
+
};
|
|
9
21
|
|
|
10
22
|
function normalizeSpaceName( value, fallback = 'world' ) {
|
|
11
23
|
|
|
@@ -48,10 +60,23 @@ function toVec3Channels( input ) {
|
|
|
48
60
|
|
|
49
61
|
}
|
|
50
62
|
|
|
63
|
+
// Normalizes a raw `*addressmode` attribute value, defaulting to `'periodic'`
|
|
64
|
+
// when unset and returning `null` when the value isn't a recognized mode.
|
|
65
|
+
function resolveTextureAddressMode( value ) {
|
|
66
|
+
|
|
67
|
+
if ( typeof value !== 'string' || value === '' ) return 'periodic';
|
|
68
|
+
|
|
69
|
+
const mode = value.trim().toLowerCase();
|
|
70
|
+
return mode in TEXTURE_ADDRESS_MODE_WRAPPING ? mode : null;
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
51
74
|
export {
|
|
52
75
|
getComponentCountForType,
|
|
53
76
|
isBooleanNode,
|
|
54
77
|
normalizeSpaceName,
|
|
78
|
+
resolveTextureAddressMode,
|
|
79
|
+
TEXTURE_ADDRESS_MODE_WRAPPING,
|
|
55
80
|
toBooleanNode,
|
|
56
81
|
toVec3Channels,
|
|
57
82
|
};
|
|
@@ -7,7 +7,6 @@ import {
|
|
|
7
7
|
mul,
|
|
8
8
|
normalMap,
|
|
9
9
|
texture,
|
|
10
|
-
uv,
|
|
11
10
|
vec2,
|
|
12
11
|
vec3,
|
|
13
12
|
vec4,
|
|
@@ -54,32 +53,13 @@ const register = ( registry, categories, handler ) => {
|
|
|
54
53
|
|
|
55
54
|
};
|
|
56
55
|
|
|
57
|
-
const UV_FALLBACK_CATEGORIES = new Set( [ 'checkerboard', 'noise2d', 'fractal2d', 'cellnoise2d', 'worleynoise2d', 'unifiednoise2d', 'heighttonormal' ] );
|
|
58
56
|
const SCALAR_TYPES = new Set( [ 'boolean', 'integer', 'float' ] );
|
|
59
57
|
const THREE_COMPONENT_TYPES = new Set( [ 'vector2', 'vector3', 'vector4', 'color3', 'color4' ] );
|
|
60
|
-
const TEXTURE_ADDRESS_MODES = new Set( [ 'constant', 'clamp', 'periodic', 'mirror' ] );
|
|
61
58
|
const SWITCH_MIN_INDEX = 1;
|
|
62
59
|
const SWITCH_MAX_INDEX = 10;
|
|
63
60
|
|
|
64
|
-
const getDefaultUvNode = ( compileContext ) => compileContext.mxToBottomLeftUvSpace( uv( 0 ) );
|
|
65
|
-
|
|
66
61
|
const toBooleanMaskNode = ( node ) => toBooleanNode( node ).select( float( 1 ), float( 0 ) );
|
|
67
62
|
|
|
68
|
-
const getTextureAddressMode = ( nodeX, inputName ) => {
|
|
69
|
-
|
|
70
|
-
const value = nodeX.getInputValueByName( inputName );
|
|
71
|
-
if ( value === null || value === undefined || value === '' ) return 'periodic';
|
|
72
|
-
|
|
73
|
-
const mode = value.trim().toLowerCase();
|
|
74
|
-
return TEXTURE_ADDRESS_MODES.has( mode ) ? mode : 'periodic';
|
|
75
|
-
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
const getTextureAddressModes = ( nodeX ) => ( {
|
|
79
|
-
u: getTextureAddressMode( nodeX, 'uaddressmode' ),
|
|
80
|
-
v: getTextureAddressMode( nodeX, 'vaddressmode' ),
|
|
81
|
-
} );
|
|
82
|
-
|
|
83
63
|
const getZeroNodeForType = ( type ) => {
|
|
84
64
|
|
|
85
65
|
if ( type === 'vector2' ) return vec2( 0, 0 );
|
|
@@ -98,13 +78,13 @@ const toTextureDefaultNode = ( node, type ) => {
|
|
|
98
78
|
|
|
99
79
|
};
|
|
100
80
|
|
|
101
|
-
const getTextureInputs = ( nodeX
|
|
81
|
+
const getTextureInputs = ( nodeX ) => {
|
|
102
82
|
|
|
103
83
|
const file = nodeX.getChildByName( 'file' );
|
|
104
|
-
const uvNode = nodeX.getNodeByName( 'texcoord' )
|
|
84
|
+
const uvNode = nodeX.getNodeByName( 'texcoord' );
|
|
105
85
|
const textureFile = file ? file.getTexture() : null;
|
|
106
|
-
const defaultNode = nodeX.getNodeByName( 'default' )
|
|
107
|
-
const addressModes = getTextureAddressModes(
|
|
86
|
+
const defaultNode = nodeX.getNodeByName( 'default' );
|
|
87
|
+
const addressModes = nodeX.getTextureAddressModes();
|
|
108
88
|
return { file, uvNode, textureFile, defaultNode, addressModes };
|
|
109
89
|
|
|
110
90
|
};
|
|
@@ -153,7 +133,7 @@ const compileConvertNode = ( nodeX ) => {
|
|
|
153
133
|
|
|
154
134
|
const input = nodeX.getNodeByName( 'in' );
|
|
155
135
|
const inputElement = nodeX.getChildByName( 'in' );
|
|
156
|
-
const inputType = inputElement ? inputElement.type :
|
|
136
|
+
const inputType = inputElement && inputElement.type ? inputElement.type : nodeX.getNodeDefInputType( 'in' );
|
|
157
137
|
const nodeClass = nodeX.getClassFromType( nodeX.type ) || float;
|
|
158
138
|
|
|
159
139
|
if ( nodeX.type === 'boolean' ) {
|
|
@@ -198,11 +178,11 @@ const compileConstantNode = ( nodeX ) => nodeX.getNodeByName( 'value' );
|
|
|
198
178
|
const compileArtisticIorNode = ( nodeX, out ) => {
|
|
199
179
|
|
|
200
180
|
const reflectivity = clamp(
|
|
201
|
-
nodeX.getNodeByName( 'reflectivity' )
|
|
181
|
+
nodeX.getNodeByName( 'reflectivity' ),
|
|
202
182
|
vec3( 0, 0, 0 ),
|
|
203
183
|
vec3( 0.99, 0.99, 0.99 ),
|
|
204
184
|
);
|
|
205
|
-
const edgeColor = nodeX.getNodeByName( 'edge_color' )
|
|
185
|
+
const edgeColor = nodeX.getNodeByName( 'edge_color' );
|
|
206
186
|
const one = vec3( 1, 1, 1 );
|
|
207
187
|
const nMin = div( sub( one, reflectivity ), add( one, reflectivity ) );
|
|
208
188
|
const nMax = div( add( one, sqrt( reflectivity ) ), sub( one, sqrt( reflectivity ) ) );
|
|
@@ -227,11 +207,10 @@ const compileArtisticIorNode = ( nodeX, out ) => {
|
|
|
227
207
|
const compileBooleanConditionalNode = ( nodeX ) => {
|
|
228
208
|
|
|
229
209
|
if ( nodeX.type !== 'boolean' ) return null;
|
|
210
|
+
if ( nodeX.element !== 'ifgreater' && nodeX.element !== 'ifgreatereq' && nodeX.element !== 'ifequal' ) return null;
|
|
230
211
|
|
|
231
|
-
const
|
|
232
|
-
const
|
|
233
|
-
const value1 = nodeX.getNodeByName( 'value1' ) || value1Default;
|
|
234
|
-
const value2 = nodeX.getNodeByName( 'value2' ) || value2Default;
|
|
212
|
+
const value1 = nodeX.getNodeByName( 'value1' );
|
|
213
|
+
const value2 = nodeX.getNodeByName( 'value2' );
|
|
235
214
|
|
|
236
215
|
if ( nodeX.element === 'ifgreater' ) return value1.greaterThan( value2 );
|
|
237
216
|
if ( nodeX.element === 'ifgreatereq' ) return value1.greaterThanEqual( value2 );
|
|
@@ -243,16 +222,16 @@ const compileBooleanConditionalNode = ( nodeX ) => {
|
|
|
243
222
|
|
|
244
223
|
const compileClampNode = ( nodeX ) => {
|
|
245
224
|
|
|
246
|
-
const inNode = nodeX.getNodeByName( 'in' )
|
|
247
|
-
const low = nodeX.getNodeByName( 'low' )
|
|
248
|
-
const high = nodeX.getNodeByName( 'high' )
|
|
225
|
+
const inNode = nodeX.getNodeByName( 'in' );
|
|
226
|
+
const low = nodeX.getNodeByName( 'low' );
|
|
227
|
+
const high = nodeX.getNodeByName( 'high' );
|
|
249
228
|
return min( max( inNode, low ), high );
|
|
250
229
|
|
|
251
230
|
};
|
|
252
231
|
|
|
253
232
|
const compileNormalizeNode = ( nodeX ) => {
|
|
254
233
|
|
|
255
|
-
const inNode = nodeX.getNodeByName( 'in' )
|
|
234
|
+
const inNode = nodeX.getNodeByName( 'in' );
|
|
256
235
|
const zeroNode = getZeroNodeForType( nodeX.type );
|
|
257
236
|
const lengthSquared = dot( inNode, inNode );
|
|
258
237
|
const safeLengthSquared = max( lengthSquared, float( 1e-8 ) );
|
|
@@ -263,11 +242,11 @@ const compileNormalizeNode = ( nodeX ) => {
|
|
|
263
242
|
|
|
264
243
|
const compileRemapNode = ( nodeX ) => {
|
|
265
244
|
|
|
266
|
-
const inNode = nodeX.getNodeByName( 'in' )
|
|
267
|
-
const inLow = nodeX.getNodeByName( 'inlow' )
|
|
268
|
-
const inHigh = nodeX.getNodeByName( 'inhigh' )
|
|
269
|
-
const outLow = nodeX.getNodeByName( 'outlow' )
|
|
270
|
-
const outHigh = nodeX.getNodeByName( 'outhigh' )
|
|
245
|
+
const inNode = nodeX.getNodeByName( 'in' );
|
|
246
|
+
const inLow = nodeX.getNodeByName( 'inlow' );
|
|
247
|
+
const inHigh = nodeX.getNodeByName( 'inhigh' );
|
|
248
|
+
const outLow = nodeX.getNodeByName( 'outlow' );
|
|
249
|
+
const outHigh = nodeX.getNodeByName( 'outhigh' );
|
|
271
250
|
const denominator = sub( inHigh, inLow );
|
|
272
251
|
const isDegenerate = abs( denominator ).lessThan( float( 1e-8 ) );
|
|
273
252
|
const safeDenominator = isDegenerate.select( float( 1 ), denominator );
|
|
@@ -281,13 +260,13 @@ const compileRemapNode = ( nodeX ) => {
|
|
|
281
260
|
|
|
282
261
|
const compileRangeNode = ( nodeX ) => {
|
|
283
262
|
|
|
284
|
-
const inNode = nodeX.getNodeByName( 'in' )
|
|
285
|
-
const inLow = nodeX.getNodeByName( 'inlow' )
|
|
286
|
-
const inHigh = nodeX.getNodeByName( 'inhigh' )
|
|
287
|
-
const outLow = nodeX.getNodeByName( 'outlow' )
|
|
288
|
-
const outHigh = nodeX.getNodeByName( 'outhigh' )
|
|
289
|
-
const gamma = nodeX.getNodeByName( 'gamma' )
|
|
290
|
-
const doClamp = nodeX.getNodeByName( 'doclamp' )
|
|
263
|
+
const inNode = nodeX.getNodeByName( 'in' );
|
|
264
|
+
const inLow = nodeX.getNodeByName( 'inlow' );
|
|
265
|
+
const inHigh = nodeX.getNodeByName( 'inhigh' );
|
|
266
|
+
const outLow = nodeX.getNodeByName( 'outlow' );
|
|
267
|
+
const outHigh = nodeX.getNodeByName( 'outhigh' );
|
|
268
|
+
const gamma = nodeX.getNodeByName( 'gamma' );
|
|
269
|
+
const doClamp = nodeX.getNodeByName( 'doclamp' );
|
|
291
270
|
|
|
292
271
|
const denominator = sub( inHigh, inLow );
|
|
293
272
|
const isDegenerate = abs( denominator ).lessThan( float( 1e-8 ) );
|
|
@@ -305,13 +284,12 @@ const compileRangeNode = ( nodeX ) => {
|
|
|
305
284
|
|
|
306
285
|
};
|
|
307
286
|
|
|
308
|
-
const getSwitchBranchNode = ( nodeX, index ) => nodeX.getNodeByName( `in${index}` )
|
|
287
|
+
const getSwitchBranchNode = ( nodeX, index ) => nodeX.getNodeByName( `in${index}` );
|
|
309
288
|
|
|
310
289
|
const compileSwitchNode = ( nodeX ) => {
|
|
311
290
|
|
|
312
291
|
const fallbackNode = getSwitchBranchNode( nodeX, SWITCH_MIN_INDEX );
|
|
313
|
-
const
|
|
314
|
-
const switchIndex = add( floor( float( whichInput === undefined || whichInput === null ? 0 : whichInput ) ), 1 );
|
|
292
|
+
const switchIndex = add( floor( float( nodeX.getNodeByName( 'which' ) ) ), 1 );
|
|
315
293
|
const whichNode = clamp(
|
|
316
294
|
float( switchIndex ),
|
|
317
295
|
float( SWITCH_MIN_INDEX ),
|
|
@@ -332,8 +310,7 @@ const compileSwitchNode = ( nodeX ) => {
|
|
|
332
310
|
|
|
333
311
|
const compileSpaceInputNode = ( nodeX, objectNode, worldNode ) => {
|
|
334
312
|
|
|
335
|
-
const
|
|
336
|
-
const space = normalizeSpaceName( rawSpace, 'object' );
|
|
313
|
+
const space = normalizeSpaceName( nodeX.getNodeByName( 'space' ), 'object' );
|
|
337
314
|
return space === 'world' ? worldNode : objectNode;
|
|
338
315
|
|
|
339
316
|
};
|
|
@@ -344,7 +321,7 @@ const compileTexcoordNode = ( nodeX, compileContext ) => {
|
|
|
344
321
|
|
|
345
322
|
const indexNode = nodeX.getChildByName( 'index' );
|
|
346
323
|
const index = indexNode ? parseInt( indexNode.value, 10 ) : 0;
|
|
347
|
-
return compileContext.
|
|
324
|
+
return compileContext.getTexcoordNode( index );
|
|
348
325
|
|
|
349
326
|
};
|
|
350
327
|
|
|
@@ -358,7 +335,7 @@ const compileGeomColorNode = ( nodeX ) => {
|
|
|
358
335
|
|
|
359
336
|
const compileImageLikeNode = ( nodeX, compileContext ) => {
|
|
360
337
|
|
|
361
|
-
const { file, uvNode, textureFile, defaultNode, addressModes } = getTextureInputs( nodeX
|
|
338
|
+
const { file, uvNode, textureFile, defaultNode, addressModes } = getTextureInputs( nodeX );
|
|
362
339
|
const textureDefault = toTextureDefaultNode( defaultNode, nodeX.type );
|
|
363
340
|
const node = sampleTexture( textureFile, uvNode, compileContext, textureDefault, addressModes, textureDefault );
|
|
364
341
|
return applyTextureColorSpace( node, file );
|
|
@@ -367,7 +344,7 @@ const compileImageLikeNode = ( nodeX, compileContext ) => {
|
|
|
367
344
|
|
|
368
345
|
const compileTiledImageNode = ( nodeX, compileContext ) => {
|
|
369
346
|
|
|
370
|
-
const { file, uvNode, textureFile, defaultNode, addressModes } = getTextureInputs( nodeX
|
|
347
|
+
const { file, uvNode, textureFile, defaultNode, addressModes } = getTextureInputs( nodeX );
|
|
371
348
|
const textureDefault = toTextureDefaultNode( defaultNode, nodeX.type );
|
|
372
349
|
if ( ! textureFile ) {
|
|
373
350
|
|
|
@@ -383,10 +360,52 @@ const compileTiledImageNode = ( nodeX, compileContext ) => {
|
|
|
383
360
|
|
|
384
361
|
};
|
|
385
362
|
|
|
363
|
+
const compileTriplanarProjectionNode = ( nodeX, compileContext ) => {
|
|
364
|
+
|
|
365
|
+
const position = nodeX.getNodeByName( 'position' );
|
|
366
|
+
const normal = nodeX.getNodeByName( 'normal' );
|
|
367
|
+
const upAxis = nodeX.getNodeByName( 'upaxis' );
|
|
368
|
+
const blend = nodeX.getNodeByName( 'blend' );
|
|
369
|
+
const defaultNode = nodeX.getNodeByName( 'default' );
|
|
370
|
+
const textureDefault = toTextureDefaultNode( defaultNode, nodeX.type );
|
|
371
|
+
|
|
372
|
+
const x = element( position, 0 );
|
|
373
|
+
const y = element( position, 1 );
|
|
374
|
+
const z = element( position, 2 );
|
|
375
|
+
const xUp = upAxis.equal( int( 0 ) );
|
|
376
|
+
const zUp = upAxis.equal( int( 2 ) );
|
|
377
|
+
const texcoords = {
|
|
378
|
+
filex: zUp.select( vec2( y, z ), vec2( z, y ) ),
|
|
379
|
+
filey: xUp.select( vec2( z, x ), vec2( x, z ) ),
|
|
380
|
+
filez: xUp.select( vec2( mul( y, - 1 ), x ), vec2( x, y ) ),
|
|
381
|
+
};
|
|
382
|
+
|
|
383
|
+
// color4 and vector4 keep the alpha of the textures.
|
|
384
|
+
const fourChannels = nodeX.type === 'color4' || nodeX.type === 'vector4';
|
|
385
|
+
const samples = Object.entries( texcoords ).map( ( [ fileInput, texcoord ] ) => {
|
|
386
|
+
|
|
387
|
+
const file = nodeX.getChildByName( fileInput );
|
|
388
|
+
const textureFile = file && file.getValue() !== '' ? file.getTexture() : null;
|
|
389
|
+
const sample = applyTextureColorSpace( sampleTexture( textureFile, texcoord, compileContext, textureDefault ), file );
|
|
390
|
+
return fourChannels ? sample : toVec3Channels( sample );
|
|
391
|
+
|
|
392
|
+
} );
|
|
393
|
+
|
|
394
|
+
const absNormal = abs( normalize( normal ) );
|
|
395
|
+
const weights = pow( div( absNormal, dot( absNormal, vec3( 1, 1, 1 ) ) ), div( 1, clamp( blend, float( 0.03 ), float( 1 ) ) ) );
|
|
396
|
+
const normalizedWeights = div( weights, dot( weights, vec3( 1, 1, 1 ) ) );
|
|
397
|
+
|
|
398
|
+
return add(
|
|
399
|
+
add( mul( samples[ 0 ], element( normalizedWeights, 0 ) ), mul( samples[ 1 ], element( normalizedWeights, 1 ) ) ),
|
|
400
|
+
mul( samples[ 2 ], element( normalizedWeights, 2 ) ),
|
|
401
|
+
);
|
|
402
|
+
|
|
403
|
+
};
|
|
404
|
+
|
|
386
405
|
const compileHexTiledNormalMapNode = ( nodeX, compileContext, sampleNode ) => {
|
|
387
406
|
|
|
388
407
|
const normalMapNodeElement = compileContext.nodeLibrary.normalmap;
|
|
389
|
-
const strengthNode = nodeX.getNodeByName( 'strength' )
|
|
408
|
+
const strengthNode = nodeX.getNodeByName( 'strength' );
|
|
390
409
|
|
|
391
410
|
if ( ! normalMapNodeElement || typeof normalMapNodeElement.nodeFunc !== 'function' ) {
|
|
392
411
|
|
|
@@ -420,6 +439,32 @@ const compileHexTiledNormalMapNode = ( nodeX, compileContext, sampleNode ) => {
|
|
|
420
439
|
|
|
421
440
|
};
|
|
422
441
|
|
|
442
|
+
const getHextileLuminanceWeights = ( nodeX, c0, c1, c2 ) => {
|
|
443
|
+
|
|
444
|
+
const falloffContrast = nodeX.getNodeByName( 'falloffcontrast' );
|
|
445
|
+
let lumaCoeffs = nodeX.getNodeByName( 'lumacoeffs' );
|
|
446
|
+
const lumaCoeffsInput = nodeX.getChildByName( 'lumacoeffs' );
|
|
447
|
+
if ( lumaCoeffsInput && lumaCoeffsInput.isConst ) {
|
|
448
|
+
|
|
449
|
+
const lumaCoeffValues = lumaCoeffsInput.getVector();
|
|
450
|
+
if ( lumaCoeffValues.length === 3 ) {
|
|
451
|
+
|
|
452
|
+
// Treat luminance coefficients as raw numeric values, not display colors.
|
|
453
|
+
lumaCoeffs = vec3( lumaCoeffValues[ 0 ], lumaCoeffValues[ 1 ], lumaCoeffValues[ 2 ] );
|
|
454
|
+
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
const falloffContrastWeight = mul( falloffContrast, 0.5 );
|
|
460
|
+
return mix(
|
|
461
|
+
vec3( 1, 1, 1 ),
|
|
462
|
+
vec3( dot( c0, lumaCoeffs ), dot( c1, lumaCoeffs ), dot( c2, lumaCoeffs ) ),
|
|
463
|
+
vec3( falloffContrastWeight, falloffContrastWeight, falloffContrastWeight ),
|
|
464
|
+
);
|
|
465
|
+
|
|
466
|
+
};
|
|
467
|
+
|
|
423
468
|
const compileHexTiledTextureNode = ( nodeX, compileContext, category ) => {
|
|
424
469
|
|
|
425
470
|
const file = nodeX.getChildByName( 'file' );
|
|
@@ -432,7 +477,7 @@ const compileHexTiledTextureNode = ( nodeX, compileContext, category ) => {
|
|
|
432
477
|
);
|
|
433
478
|
if ( category === 'hextilednormalmap' ) {
|
|
434
479
|
|
|
435
|
-
return normalize( nodeX.getNodeByName( 'normal' )
|
|
480
|
+
return normalize( nodeX.getNodeByName( 'normal' ) );
|
|
436
481
|
|
|
437
482
|
}
|
|
438
483
|
|
|
@@ -445,7 +490,7 @@ const compileHexTiledTextureNode = ( nodeX, compileContext, category ) => {
|
|
|
445
490
|
|
|
446
491
|
if ( category === 'hextilednormalmap' ) {
|
|
447
492
|
|
|
448
|
-
return normalize( nodeX.getNodeByName( 'normal' )
|
|
493
|
+
return normalize( nodeX.getNodeByName( 'normal' ) );
|
|
449
494
|
|
|
450
495
|
}
|
|
451
496
|
|
|
@@ -453,29 +498,15 @@ const compileHexTiledTextureNode = ( nodeX, compileContext, category ) => {
|
|
|
453
498
|
|
|
454
499
|
}
|
|
455
500
|
|
|
456
|
-
const uvNode = nodeX.getNodeByName( 'texcoord' )
|
|
457
|
-
const tiling = nodeX.getNodeByName( 'tiling' )
|
|
458
|
-
const rotation = nodeX.getNodeByName( 'rotation' )
|
|
459
|
-
const rotationRange = nodeX.getNodeByName( 'rotationrange' )
|
|
460
|
-
const scale = nodeX.getNodeByName( 'scale' )
|
|
461
|
-
const scaleRange = nodeX.getNodeByName( 'scalerange' )
|
|
462
|
-
const offset = nodeX.getNodeByName( 'offset' )
|
|
463
|
-
const offsetRange = nodeX.getNodeByName( 'offsetrange' )
|
|
464
|
-
const falloff = nodeX.getNodeByName( 'falloff' )
|
|
465
|
-
const falloffContrast = nodeX.getNodeByName( 'falloffcontrast' ) || float( 0.5 );
|
|
466
|
-
let lumaCoeffs = nodeX.getNodeByName( 'lumacoeffs' ) || vec3( 0.2722287, 0.6740818, 0.0536895 );
|
|
467
|
-
const lumaCoeffsInput = nodeX.getChildByName( 'lumacoeffs' );
|
|
468
|
-
if ( lumaCoeffsInput && lumaCoeffsInput.isConst ) {
|
|
469
|
-
|
|
470
|
-
const lumaCoeffValues = lumaCoeffsInput.getVector();
|
|
471
|
-
if ( lumaCoeffValues.length === 3 ) {
|
|
472
|
-
|
|
473
|
-
// Treat luminance coefficients as raw numeric values, not display colors.
|
|
474
|
-
lumaCoeffs = vec3( lumaCoeffValues[ 0 ], lumaCoeffValues[ 1 ], lumaCoeffValues[ 2 ] );
|
|
475
|
-
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
}
|
|
501
|
+
const uvNode = nodeX.getNodeByName( 'texcoord' );
|
|
502
|
+
const tiling = nodeX.getNodeByName( 'tiling' );
|
|
503
|
+
const rotation = nodeX.getNodeByName( 'rotation' );
|
|
504
|
+
const rotationRange = nodeX.getNodeByName( 'rotationrange' );
|
|
505
|
+
const scale = nodeX.getNodeByName( 'scale' );
|
|
506
|
+
const scaleRange = nodeX.getNodeByName( 'scalerange' );
|
|
507
|
+
const offset = nodeX.getNodeByName( 'offset' );
|
|
508
|
+
const offsetRange = nodeX.getNodeByName( 'offsetrange' );
|
|
509
|
+
const falloff = nodeX.getNodeByName( 'falloff' );
|
|
479
510
|
|
|
480
511
|
const transformedUv = compileContext.mxFromBottomLeftUvSpace( mul( uvNode, tiling ) );
|
|
481
512
|
const tileData = compileContext.mxHextileCoord( transformedUv, rotation, rotationRange, scale, scaleRange, offset, offsetRange );
|
|
@@ -508,12 +539,8 @@ const compileHexTiledTextureNode = ( nodeX, compileContext, category ) => {
|
|
|
508
539
|
const c0 = toVec3Channels( sample0 );
|
|
509
540
|
const c1 = toVec3Channels( sample1 );
|
|
510
541
|
const c2 = toVec3Channels( sample2 );
|
|
511
|
-
|
|
512
|
-
const cw =
|
|
513
|
-
vec3( 1, 1, 1 ),
|
|
514
|
-
vec3( dot( c0, lumaCoeffs ), dot( c1, lumaCoeffs ), dot( c2, lumaCoeffs ) ),
|
|
515
|
-
vec3( falloffContrastWeight, falloffContrastWeight, falloffContrastWeight ),
|
|
516
|
-
);
|
|
542
|
+
// hextilednormalmap blends with unit weights, as in MaterialX
|
|
543
|
+
const cw = category === 'hextilednormalmap' ? vec3( 1, 1, 1 ) : getHextileLuminanceWeights( nodeX, c0, c1, c2 );
|
|
517
544
|
const blendWeights = compileContext.mxHextileComputeBlendWeights( cw, tileData.weights, falloff );
|
|
518
545
|
const alphaWeights = compileContext.mxHextileComputeBlendWeights( vec3( 1, 1, 1 ), tileData.weights, falloff );
|
|
519
546
|
const blendedRgb = add( add( mul( element( blendWeights, 0 ), c0 ), mul( element( blendWeights, 1 ), c1 ) ), mul( element( blendWeights, 2 ), c2 ) );
|
|
@@ -550,17 +577,17 @@ const compileHexTiledTextureNode = ( nodeX, compileContext, category ) => {
|
|
|
550
577
|
|
|
551
578
|
const compileGltfTextureNode = ( nodeX, compileContext, category ) => {
|
|
552
579
|
|
|
553
|
-
const { file, uvNode, textureFile, addressModes } = getTextureInputs( nodeX
|
|
580
|
+
const { file, uvNode, textureFile, addressModes } = getTextureInputs( nodeX );
|
|
554
581
|
let transformedUv = uvNode;
|
|
555
582
|
const place2d = compileContext.nodeLibrary.place2d;
|
|
556
583
|
|
|
557
584
|
if ( place2d ) {
|
|
558
585
|
|
|
559
|
-
const pivot = nodeX.getNodeByName( 'pivot' )
|
|
560
|
-
const scale = nodeX.getNodeByName( 'scale' )
|
|
561
|
-
const rotate = nodeX.getNodeByName( 'rotate' )
|
|
562
|
-
const offset = nodeX.getNodeByName( 'offset' )
|
|
563
|
-
const operationorder = nodeX.getNodeByName( 'operationorder' )
|
|
586
|
+
const pivot = nodeX.getNodeByName( 'pivot' );
|
|
587
|
+
const scale = nodeX.getNodeByName( 'scale' );
|
|
588
|
+
const rotate = nodeX.getNodeByName( 'rotate' );
|
|
589
|
+
const offset = nodeX.getNodeByName( 'offset' );
|
|
590
|
+
const operationorder = nodeX.getNodeByName( 'operationorder' );
|
|
564
591
|
transformedUv = place2d.nodeFunc(
|
|
565
592
|
uvNode,
|
|
566
593
|
pivot,
|
|
@@ -595,12 +622,12 @@ const compileGltfTextureNode = ( nodeX, compileContext, category ) => {
|
|
|
595
622
|
|
|
596
623
|
if ( category === 'gltf_normalmap' ) {
|
|
597
624
|
|
|
598
|
-
const normalScale = nodeX.getNodeByName( 'scale' )
|
|
625
|
+
const normalScale = nodeX.getNodeByName( 'scale' );
|
|
599
626
|
return normalMap( node, normalScale );
|
|
600
627
|
|
|
601
628
|
}
|
|
602
629
|
|
|
603
|
-
const factor = nodeX.getNodeByName( 'factor' );
|
|
630
|
+
const factor = nodeX.declaresInput( 'factor' ) ? nodeX.getNodeByName( 'factor' ) : null;
|
|
604
631
|
|
|
605
632
|
if ( factor ) {
|
|
606
633
|
|
|
@@ -620,16 +647,16 @@ const compileGltfTextureNode = ( nodeX, compileContext, category ) => {
|
|
|
620
647
|
|
|
621
648
|
const compileGltfColorImageNode = ( nodeX, out, compileContext ) => {
|
|
622
649
|
|
|
623
|
-
const { file, uvNode, textureFile, addressModes } = getTextureInputs( nodeX
|
|
650
|
+
const { file, uvNode, textureFile, addressModes } = getTextureInputs( nodeX );
|
|
624
651
|
let transformedUv = uvNode;
|
|
625
652
|
const place2d = compileContext.nodeLibrary.place2d;
|
|
626
653
|
|
|
627
654
|
if ( place2d ) {
|
|
628
655
|
|
|
629
|
-
const pivot = nodeX.getNodeByName( 'pivot' )
|
|
630
|
-
const scale = nodeX.getNodeByName( 'scale' )
|
|
631
|
-
const rotate = nodeX.getNodeByName( 'rotate' )
|
|
632
|
-
const offset = nodeX.getNodeByName( 'offset' )
|
|
656
|
+
const pivot = nodeX.getNodeByName( 'pivot' );
|
|
657
|
+
const scale = nodeX.getNodeByName( 'scale' );
|
|
658
|
+
const rotate = nodeX.getNodeByName( 'rotate' );
|
|
659
|
+
const offset = nodeX.getNodeByName( 'offset' );
|
|
633
660
|
// Match MaterialX's ND_gltf_colorimage graph implementation, which wires gltf_image with operationorder=0.
|
|
634
661
|
const operationorder = int( 0 );
|
|
635
662
|
transformedUv = place2d.nodeFunc(
|
|
@@ -643,12 +670,12 @@ const compileGltfColorImageNode = ( nodeX, out, compileContext ) => {
|
|
|
643
670
|
|
|
644
671
|
}
|
|
645
672
|
|
|
646
|
-
const defaultInput = nodeX.getNodeByName( 'default' )
|
|
673
|
+
const defaultInput = nodeX.getNodeByName( 'default' );
|
|
647
674
|
const fallback = vec4( defaultInput );
|
|
648
675
|
const sampled = sampleTexture( textureFile, transformedUv, compileContext, fallback, addressModes, fallback );
|
|
649
676
|
const converted = applyTextureColorSpace( sampled, file );
|
|
650
|
-
const color = nodeX.getNodeByName( 'color' )
|
|
651
|
-
const geomcolor = nodeX.getNodeByName( 'geomcolor' )
|
|
677
|
+
const color = nodeX.getNodeByName( 'color' );
|
|
678
|
+
const geomcolor = nodeX.getNodeByName( 'geomcolor' );
|
|
652
679
|
const modulated = mul( mul( converted, color ), geomcolor );
|
|
653
680
|
|
|
654
681
|
if ( out === 'outa' ) {
|
|
@@ -663,12 +690,12 @@ const compileGltfColorImageNode = ( nodeX, out, compileContext ) => {
|
|
|
663
690
|
|
|
664
691
|
const compileGltfAnisotropyImageNode = ( nodeX, out, compileContext ) => {
|
|
665
692
|
|
|
666
|
-
const { uvNode, textureFile, addressModes } = getTextureInputs( nodeX
|
|
667
|
-
const defaultInput = nodeX.getNodeByName( 'default' )
|
|
693
|
+
const { uvNode, textureFile, addressModes } = getTextureInputs( nodeX );
|
|
694
|
+
const defaultInput = nodeX.getNodeByName( 'default' );
|
|
668
695
|
const fallback = vec4( element( defaultInput, 0 ), element( defaultInput, 1 ), element( defaultInput, 2 ), 1 );
|
|
669
696
|
const sampled = sampleTexture( textureFile, uvNode, compileContext, fallback, addressModes, fallback );
|
|
670
|
-
const anisotropyStrengthFactor = nodeX.getNodeByName( 'anisotropy_strength' )
|
|
671
|
-
const anisotropyRotationFactor = nodeX.getNodeByName( 'anisotropy_rotation' )
|
|
697
|
+
const anisotropyStrengthFactor = nodeX.getNodeByName( 'anisotropy_strength' );
|
|
698
|
+
const anisotropyRotationFactor = nodeX.getNodeByName( 'anisotropy_rotation' );
|
|
672
699
|
const encodedDirection = vec2( sub( mul( element( sampled, 0 ), 2 ), 1 ), sub( mul( element( sampled, 1 ), 2 ), 1 ) );
|
|
673
700
|
const textureRotation = mx_atan2( element( encodedDirection, 1 ), element( encodedDirection, 0 ) );
|
|
674
701
|
const anisotropyStrengthOut = clamp( mul( anisotropyStrengthFactor, element( sampled, 2 ) ), 0, 1 );
|
|
@@ -686,40 +713,37 @@ const compileGltfAnisotropyImageNode = ( nodeX, out, compileContext ) => {
|
|
|
686
713
|
|
|
687
714
|
const compileGltfIridescenceThicknessNode = ( nodeX, compileContext ) => {
|
|
688
715
|
|
|
689
|
-
const { uvNode, textureFile, addressModes } = getTextureInputs( nodeX
|
|
716
|
+
const { uvNode, textureFile, addressModes } = getTextureInputs( nodeX );
|
|
690
717
|
const fallback = vec4( 0, 0, 0, 1 );
|
|
691
718
|
const sampled = sampleTexture( textureFile, uvNode, compileContext, fallback, addressModes, fallback );
|
|
692
719
|
const sampledThickness = element( sampled, 0 );
|
|
693
|
-
const thicknessMin = nodeX.getNodeByName( 'thicknessMin' )
|
|
694
|
-
const thicknessMax = nodeX.getNodeByName( 'thicknessMax' )
|
|
720
|
+
const thicknessMin = nodeX.getNodeByName( 'thicknessMin' );
|
|
721
|
+
const thicknessMax = nodeX.getNodeByName( 'thicknessMax' );
|
|
695
722
|
return add( thicknessMin, mul( sampledThickness, sub( thicknessMax, thicknessMin ) ) );
|
|
696
723
|
|
|
697
724
|
};
|
|
698
725
|
|
|
699
|
-
const compileTransformMatrixNode = ( nodeX
|
|
726
|
+
const compileTransformMatrixNode = ( nodeX ) => {
|
|
700
727
|
|
|
701
|
-
const
|
|
702
|
-
const
|
|
703
|
-
const
|
|
704
|
-
|
|
705
|
-
( nodeDefName === 'ND_transformmatrix_vector2M3' || nodeDefName === 'ND_transformmatrix_vector3'
|
|
706
|
-
? mat3( ...compileContext.IDENTITY_MAT3_VALUES )
|
|
707
|
-
: mat4( ...compileContext.IDENTITY_MAT4_VALUES ) );
|
|
728
|
+
const inputType = nodeX.getNodeDefInputType( 'in' );
|
|
729
|
+
const matrixType = nodeX.getNodeDefInputType( 'mat' );
|
|
730
|
+
const inNode = nodeX.getNodeByName( 'in' );
|
|
731
|
+
const matrixNode = nodeX.getNodeByName( 'mat' );
|
|
708
732
|
|
|
709
|
-
if (
|
|
733
|
+
if ( inputType === 'vector2' ) {
|
|
710
734
|
|
|
711
735
|
const transformed = mul( matrixNode, vec3( element( inNode, 0 ), element( inNode, 1 ), 1 ) );
|
|
712
736
|
return vec2( element( transformed, 0 ), element( transformed, 1 ) );
|
|
713
737
|
|
|
714
738
|
}
|
|
715
739
|
|
|
716
|
-
if (
|
|
740
|
+
if ( inputType === 'vector3' && matrixType === 'matrix33' ) {
|
|
717
741
|
|
|
718
742
|
return mul( matrixNode, vec3( element( inNode, 0 ), element( inNode, 1 ), element( inNode, 2 ) ) );
|
|
719
743
|
|
|
720
744
|
}
|
|
721
745
|
|
|
722
|
-
if (
|
|
746
|
+
if ( inputType === 'vector3' ) {
|
|
723
747
|
|
|
724
748
|
const transformed = mul( matrixNode, vec4( element( inNode, 0 ), element( inNode, 1 ), element( inNode, 2 ), 1 ) );
|
|
725
749
|
return vec3( element( transformed, 0 ), element( transformed, 1 ), element( transformed, 2 ) );
|
|
@@ -734,25 +758,25 @@ const compileCreateMatrixNode = ( nodeX ) => {
|
|
|
734
758
|
|
|
735
759
|
if ( nodeX.type === 'matrix44' ) {
|
|
736
760
|
|
|
737
|
-
const vector3Input = nodeX.
|
|
738
|
-
const toVec4Input = ( name,
|
|
761
|
+
const vector3Input = nodeX.getNodeDefInputType( 'in1' ) === 'vector3';
|
|
762
|
+
const toVec4Input = ( name, w ) => {
|
|
739
763
|
|
|
740
|
-
const input = nodeX.getNodeByName( name )
|
|
764
|
+
const input = nodeX.getNodeByName( name );
|
|
741
765
|
return vector3Input ? vec4( element( input, 0 ), element( input, 1 ), element( input, 2 ), w ) : input;
|
|
742
766
|
|
|
743
767
|
};
|
|
744
768
|
|
|
745
|
-
const in1 = toVec4Input( 'in1',
|
|
746
|
-
const in2 = toVec4Input( 'in2',
|
|
747
|
-
const in3 = toVec4Input( 'in3',
|
|
748
|
-
const in4 = toVec4Input( 'in4',
|
|
769
|
+
const in1 = toVec4Input( 'in1', 0 );
|
|
770
|
+
const in2 = toVec4Input( 'in2', 0 );
|
|
771
|
+
const in3 = toVec4Input( 'in3', 0 );
|
|
772
|
+
const in4 = toVec4Input( 'in4', 1 );
|
|
749
773
|
return mat4( in1, in2, in3, in4 );
|
|
750
774
|
|
|
751
775
|
}
|
|
752
776
|
|
|
753
|
-
const in1 = nodeX.getNodeByName( 'in1' )
|
|
754
|
-
const in2 = nodeX.getNodeByName( 'in2' )
|
|
755
|
-
const in3 = nodeX.getNodeByName( 'in3' )
|
|
777
|
+
const in1 = nodeX.getNodeByName( 'in1' );
|
|
778
|
+
const in2 = nodeX.getNodeByName( 'in2' );
|
|
779
|
+
const in3 = nodeX.getNodeByName( 'in3' );
|
|
756
780
|
return mat3( in1, in2, in3 );
|
|
757
781
|
|
|
758
782
|
};
|
|
@@ -887,14 +911,11 @@ const compileInvertMatrixNode = ( nodeX, compileContext ) => {
|
|
|
887
911
|
const inNode = nodeX.getNodeByName( 'in' );
|
|
888
912
|
if ( isMatrixType ) {
|
|
889
913
|
|
|
890
|
-
|
|
891
|
-
const fallback = size === 3 ? mat3( ...compileContext.IDENTITY_MAT3_VALUES ) : mat4( ...compileContext.IDENTITY_MAT4_VALUES );
|
|
892
|
-
const matrixNode = inNode === undefined || inNode === null ? fallback : inNode;
|
|
893
|
-
return size === 3 ? compileInvertMatrix3Node( matrixNode ) : compileInvertMatrix4Node( matrixNode );
|
|
914
|
+
return matrixType === 'matrix33' ? compileInvertMatrix3Node( inNode ) : compileInvertMatrix4Node( inNode );
|
|
894
915
|
|
|
895
916
|
}
|
|
896
917
|
|
|
897
|
-
return inNode
|
|
918
|
+
return inNode;
|
|
898
919
|
|
|
899
920
|
};
|
|
900
921
|
|
|
@@ -916,6 +937,7 @@ function createMaterialXCompileRegistry() {
|
|
|
916
937
|
register( registry, [ 'geomcolor' ], ( nodeX ) => compileGeomColorNode( nodeX ) );
|
|
917
938
|
register( registry, [ 'tiledimage' ], ( nodeX, out, compileContext ) => compileTiledImageNode( nodeX, compileContext ) );
|
|
918
939
|
register( registry, [ 'image' ], ( nodeX, out, compileContext ) => compileImageLikeNode( nodeX, compileContext ) );
|
|
940
|
+
register( registry, [ 'triplanarprojection' ], ( nodeX, out, compileContext ) => compileTriplanarProjectionNode( nodeX, compileContext ) );
|
|
919
941
|
register( registry, [ 'hextiledimage', 'hextilednormalmap' ], ( nodeX, out, compileContext ) =>
|
|
920
942
|
compileHexTiledTextureNode( nodeX, compileContext, nodeX.element ) );
|
|
921
943
|
register( registry, [ 'gltf_image', 'gltf_normalmap' ], ( nodeX, out, compileContext ) =>
|
|
@@ -926,7 +948,7 @@ function createMaterialXCompileRegistry() {
|
|
|
926
948
|
register( registry, [ 'gltf_iridescence_thickness' ], ( nodeX, out, compileContext ) =>
|
|
927
949
|
compileGltfIridescenceThicknessNode( nodeX, compileContext ) );
|
|
928
950
|
register( registry, [ 'switch' ], ( nodeX ) => compileSwitchNode( nodeX ) );
|
|
929
|
-
register( registry, [ 'transformmatrix' ],
|
|
951
|
+
register( registry, [ 'transformmatrix' ], compileTransformMatrixNode );
|
|
930
952
|
register( registry, [ 'creatematrix' ], ( nodeX ) => compileCreateMatrixNode( nodeX ) );
|
|
931
953
|
register( registry, [ 'invertmatrix' ], ( nodeX, out, compileContext ) => compileInvertMatrixNode( nodeX, compileContext ) );
|
|
932
954
|
return registry;
|
|
@@ -959,31 +981,11 @@ function compileNodeFromRegistry( nodeX, out, compileContext ) {
|
|
|
959
981
|
const args = nodeX.getNodesByNames( ...nodeElement.params );
|
|
960
982
|
for ( let i = 0; i < nodeElement.params.length; i += 1 ) {
|
|
961
983
|
|
|
962
|
-
if ( args[ i ] !== undefined && args[ i ] !== null )
|
|
963
|
-
|
|
964
|
-
continue;
|
|
965
|
-
|
|
966
|
-
}
|
|
967
|
-
|
|
968
|
-
const paramName = nodeElement.params[ i ];
|
|
969
|
-
if ( paramName === 'texcoord' && UV_FALLBACK_CATEGORIES.has( nodeX.element ) ) {
|
|
970
|
-
|
|
971
|
-
args[ i ] = getDefaultUvNode( compileContext );
|
|
972
|
-
continue;
|
|
973
|
-
|
|
974
|
-
}
|
|
975
|
-
|
|
976
|
-
const defaultValue = nodeElement.defaults ? nodeElement.defaults[ paramName ] : undefined;
|
|
977
|
-
if ( defaultValue !== undefined ) {
|
|
978
|
-
|
|
979
|
-
args[ i ] = typeof defaultValue === 'function' ? defaultValue() : float( defaultValue );
|
|
980
|
-
continue;
|
|
981
|
-
|
|
982
|
-
}
|
|
984
|
+
if ( args[ i ] !== undefined && args[ i ] !== null ) continue;
|
|
983
985
|
|
|
984
986
|
nodeX.materialX.log.add(
|
|
985
987
|
MaterialXLogCodes.INVALID_VALUE,
|
|
986
|
-
`Missing input "${
|
|
988
|
+
`Missing input "${nodeElement.params[ i ]}" for node "${nodeX.name || nodeX.element}" (${nodeX.element}) and no nodedef default. Using fallback 0.`,
|
|
987
989
|
nodeX.name,
|
|
988
990
|
);
|
|
989
991
|
args[ i ] = float( 0 );
|