@babylonjs/core
Version:
Getting started? Play directly with the Babylon.js API using our [playground](https://playground.babylonjs.com/). It also contains a lot of samples to learn how to use it.
89 lines • 4.5 kB
JavaScript
import { TransformBlock } from "./Blocks/transformBlock.js";
import { VertexOutputBlock } from "./Blocks/Vertex/vertexOutputBlock.js";
import { FragmentOutputBlock } from "./Blocks/Fragment/fragmentOutputBlock.js";
import { InputBlock } from "./Blocks/Input/inputBlock.js";
import { GaussianSplattingBlock } from "./Blocks/GaussianSplatting/gaussianSplattingBlock.js";
import { GaussianBlock } from "./Blocks/GaussianSplatting/gaussianBlock.js";
import { SplatReaderBlock } from "./Blocks/GaussianSplatting/splatReaderBlock.js";
import { NodeMaterialModes } from "./Enums/nodeMaterialModes.js";
import { NodeMaterialSystemValues } from "./Enums/nodeMaterialSystemValues.js";
import { MultiplyBlock } from "./Blocks/multiplyBlock.js";
import { Texture } from "../Textures/texture.js";
import { Tools } from "../../Misc/tools.js";
import { SmartFilterTextureBlock } from "./Blocks/Dual/smartFilterTextureBlock.js";
import { Color4 } from "../../Maths/math.color.js";
import { AddBlock } from "./Blocks/addBlock.js";
import { SmartFilterFragmentOutputBlock } from "./Blocks/Fragment/smartFilterFragmentOutputBlock.js";
/**
* Clear the material and set it to a default state for gaussian splatting
* @param nodeMaterial node material to use
*/
export function SetToDefaultGaussianSplatting(nodeMaterial) {
nodeMaterial.clear();
nodeMaterial.editorData = null;
// reading splat datas
const splatIndex = new InputBlock("SplatIndex");
splatIndex.setAsAttribute("splatIndex");
const splatReader = new SplatReaderBlock("SplatReader");
splatIndex.connectTo(splatReader);
// transforming datas into renderable positions
const gs = new GaussianSplattingBlock("GaussianSplatting");
splatReader.connectTo(gs);
// world transformation
const worldInput = new InputBlock("World");
worldInput.setAsSystemValue(NodeMaterialSystemValues.World);
const worldPos = new TransformBlock("WorldPos");
splatReader.connectTo(worldPos);
worldInput.connectTo(worldPos);
worldPos.connectTo(gs, { output: "xyz", input: "splatPosition" });
// view and projections
const view = new InputBlock("view");
view.setAsSystemValue(NodeMaterialSystemValues.View);
const projection = new InputBlock("Projection");
projection.setAsSystemValue(NodeMaterialSystemValues.Projection);
worldInput.connectTo(gs, { input: "world" });
view.connectTo(gs, { input: "view" });
projection.connectTo(gs, { input: "projection" });
const addBlock = new AddBlock("Add SH");
// from color to gaussian color
const gaussian = new GaussianBlock("Gaussian");
splatReader.connectTo(gaussian, { input: "splatColor", output: "splatColor" });
// fragment and vertex outputs
const fragmentOutput = new FragmentOutputBlock("FragmentOutput");
gs.SH.connectTo(addBlock.left);
gaussian.rgb.connectTo(addBlock.right);
addBlock.output.connectTo(fragmentOutput.rgb);
gaussian.alpha.connectTo(fragmentOutput.a);
const vertexOutput = new VertexOutputBlock("VertexOutput");
gs.connectTo(vertexOutput);
// Add to nodes
nodeMaterial.addOutputNode(vertexOutput);
nodeMaterial.addOutputNode(fragmentOutput);
nodeMaterial._mode = NodeMaterialModes.GaussianSplatting;
}
/**
* Clear the material and set it to a default state for Smart Filter effects
* @param nodeMaterial node material to use
*/
export function SetToDefaultSFE(nodeMaterial) {
nodeMaterial.clear();
nodeMaterial.editorData = null;
const uv = new InputBlock("uv");
uv.setAsAttribute("postprocess_uv");
uv.comments = "Normalized screen position to sample our texture with.";
const currentScreen = new SmartFilterTextureBlock("Input Texture");
currentScreen.comments = "A placeholder that represents the input texture to compose.";
uv.connectTo(currentScreen);
const textureUrl = Tools.GetAssetUrl("https://assets.babylonjs.com/core/nme/currentScreenPostProcess.png");
currentScreen.texture = new Texture(textureUrl, nodeMaterial.getScene());
const color = new InputBlock("Color4");
color.value = new Color4(1, 0, 0, 1);
const multiply = new MultiplyBlock("Multiply");
color.connectTo(multiply);
currentScreen.connectTo(multiply);
const fragmentOutput = new SmartFilterFragmentOutputBlock("FragmentOutput");
multiply.connectTo(fragmentOutput);
nodeMaterial.addOutputNode(fragmentOutput);
nodeMaterial._mode = NodeMaterialModes.SFE;
}
//# sourceMappingURL=nodeMaterialDefault.js.map