|
@@ -1,465 +1,468 @@
|
|
|
-import { DiscardBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/discardBlock';
|
|
|
-import { BonesBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/bonesBlock';
|
|
|
-import { InstancesBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/instancesBlock';
|
|
|
-import { MorphTargetsBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/morphTargetsBlock';
|
|
|
-import { ImageProcessingBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/imageProcessingBlock';
|
|
|
-import { ColorMergerBlock } from 'babylonjs/Materials/Node/Blocks/colorMergerBlock';
|
|
|
-import { VectorMergerBlock } from 'babylonjs/Materials/Node/Blocks/vectorMergerBlock';
|
|
|
-import { ColorSplitterBlock } from 'babylonjs/Materials/Node/Blocks/colorSplitterBlock';
|
|
|
-import { VectorSplitterBlock } from 'babylonjs/Materials/Node/Blocks/vectorSplitterBlock';
|
|
|
-import { RemapBlock } from 'babylonjs/Materials/Node/Blocks/remapBlock';
|
|
|
-import { TextureBlock } from 'babylonjs/Materials/Node/Blocks/Dual/textureBlock';
|
|
|
-import { ReflectionTextureBlock } from 'babylonjs/Materials/Node/Blocks/Dual/reflectionTextureBlock';
|
|
|
-import { LightBlock } from 'babylonjs/Materials/Node/Blocks/Dual/lightBlock';
|
|
|
-import { FogBlock } from 'babylonjs/Materials/Node/Blocks/Dual/fogBlock';
|
|
|
-import { VertexOutputBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/vertexOutputBlock';
|
|
|
-import { FragmentOutputBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/fragmentOutputBlock';
|
|
|
-import { NormalizeBlock } from 'babylonjs/Materials/Node/Blocks/normalizeBlock';
|
|
|
-import { AddBlock } from 'babylonjs/Materials/Node/Blocks/addBlock';
|
|
|
-import { ScaleBlock } from 'babylonjs/Materials/Node/Blocks/scaleBlock';
|
|
|
-import { TrigonometryBlock, TrigonometryBlockOperations } from 'babylonjs/Materials/Node/Blocks/trigonometryBlock';
|
|
|
-import { ClampBlock } from 'babylonjs/Materials/Node/Blocks/clampBlock';
|
|
|
-import { CrossBlock } from 'babylonjs/Materials/Node/Blocks/crossBlock';
|
|
|
-import { DotBlock } from 'babylonjs/Materials/Node/Blocks/dotBlock';
|
|
|
-import { MultiplyBlock } from 'babylonjs/Materials/Node/Blocks/multiplyBlock';
|
|
|
-import { TransformBlock } from 'babylonjs/Materials/Node/Blocks/transformBlock';
|
|
|
-import { NodeMaterialBlockConnectionPointTypes } from 'babylonjs/Materials/Node/Enums/nodeMaterialBlockConnectionPointTypes';
|
|
|
-import { FresnelBlock } from 'babylonjs/Materials/Node/Blocks/fresnelBlock';
|
|
|
-import { LerpBlock } from 'babylonjs/Materials/Node/Blocks/lerpBlock';
|
|
|
-import { NLerpBlock } from 'babylonjs/Materials/Node/Blocks/nLerpBlock';
|
|
|
-import { DivideBlock } from 'babylonjs/Materials/Node/Blocks/divideBlock';
|
|
|
-import { SubtractBlock } from 'babylonjs/Materials/Node/Blocks/subtractBlock';
|
|
|
-import { StepBlock } from 'babylonjs/Materials/Node/Blocks/stepBlock';
|
|
|
-import { SmoothStepBlock } from 'babylonjs/Materials/Node/Blocks/smoothStepBlock';
|
|
|
-import { InputBlock } from 'babylonjs/Materials/Node/Blocks/Input/inputBlock';
|
|
|
-import { NodeMaterialSystemValues } from 'babylonjs/Materials/Node/Enums/nodeMaterialSystemValues';
|
|
|
-import { AnimatedInputBlockTypes } from 'babylonjs/Materials/Node/Blocks/Input/animatedInputBlockTypes';
|
|
|
-import { OneMinusBlock } from 'babylonjs/Materials/Node/Blocks/oneMinusBlock';
|
|
|
-import { ViewDirectionBlock } from 'babylonjs/Materials/Node/Blocks/viewDirectionBlock';
|
|
|
-import { LightInformationBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/lightInformationBlock';
|
|
|
-import { MaxBlock } from 'babylonjs/Materials/Node/Blocks/maxBlock';
|
|
|
-import { MinBlock } from 'babylonjs/Materials/Node/Blocks/minBlock';
|
|
|
-import { PerturbNormalBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/perturbNormalBlock';
|
|
|
-import { LengthBlock } from 'babylonjs/Materials/Node/Blocks/lengthBlock';
|
|
|
-import { DistanceBlock } from 'babylonjs/Materials/Node/Blocks/distanceBlock';
|
|
|
-import { FrontFacingBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/frontFacingBlock';
|
|
|
-import { NegateBlock } from 'babylonjs/Materials/Node/Blocks/negateBlock';
|
|
|
-import { PowBlock } from 'babylonjs/Materials/Node/Blocks/powBlock';
|
|
|
-import { Scene } from 'babylonjs/scene';
|
|
|
-import { RandomNumberBlock } from 'babylonjs/Materials/Node/Blocks/randomNumberBlock';
|
|
|
-import { ReplaceColorBlock } from 'babylonjs/Materials/Node/Blocks/replaceColorBlock';
|
|
|
-import { PosterizeBlock } from 'babylonjs/Materials/Node/Blocks/posterizeBlock';
|
|
|
-import { ArcTan2Block } from 'babylonjs/Materials/Node/Blocks/arcTan2Block';
|
|
|
-import { ReciprocalBlock } from 'babylonjs/Materials/Node/Blocks/reciprocalBlock';
|
|
|
-import { GradientBlock } from 'babylonjs/Materials/Node/Blocks/gradientBlock';
|
|
|
-import { WaveBlock, WaveBlockKind } from 'babylonjs/Materials/Node/Blocks/waveBlock';
|
|
|
-import { NodeMaterial } from 'babylonjs/Materials/Node/nodeMaterial';
|
|
|
-import { SimplexPerlin3DBlock } from 'babylonjs/Materials/Node/Blocks/simplexPerlin3DBlock';
|
|
|
-
|
|
|
-export class BlockTools {
|
|
|
- public static GetBlockFromString(data: string, scene: Scene, nodeMaterial: NodeMaterial) {
|
|
|
- switch (data) {
|
|
|
- case "SimplexPerlin3DBlock":
|
|
|
- return new SimplexPerlin3DBlock("SimplexPerlin3DBlock");
|
|
|
- case "BonesBlock":
|
|
|
- return new BonesBlock("Bones");
|
|
|
- case "InstancesBlock":
|
|
|
- return new InstancesBlock("Instances");
|
|
|
- case "MorphTargetsBlock":
|
|
|
- return new MorphTargetsBlock("MorphTargets");
|
|
|
- case "DiscardBlock":
|
|
|
- return new DiscardBlock("Discard");
|
|
|
- case "ImageProcessingBlock":
|
|
|
- return new ImageProcessingBlock("ImageProcessing");
|
|
|
- case "ColorMergerBlock":
|
|
|
- return new ColorMergerBlock("ColorMerger");
|
|
|
- case "VectorMergerBlock":
|
|
|
- return new VectorMergerBlock("VectorMerger");
|
|
|
- case "ColorSplitterBlock":
|
|
|
- return new ColorSplitterBlock("ColorSplitter");
|
|
|
- case "VectorSplitterBlock":
|
|
|
- return new VectorSplitterBlock("VectorSplitter");
|
|
|
- case "TextureBlock":
|
|
|
- return new TextureBlock("Texture");
|
|
|
- case "ReflectionTextureBlock":
|
|
|
- return new ReflectionTextureBlock("Reflection texture");
|
|
|
- case "LightBlock":
|
|
|
- return new LightBlock("Lights");
|
|
|
- case "FogBlock":
|
|
|
- return new FogBlock("Fog");
|
|
|
- case "VertexOutputBlock":
|
|
|
- return new VertexOutputBlock("VertexOutput");
|
|
|
- case "FragmentOutputBlock":
|
|
|
- return new FragmentOutputBlock("FragmentOutput");
|
|
|
- case "AddBlock":
|
|
|
- return new AddBlock("Add");
|
|
|
- case "ClampBlock":
|
|
|
- return new ClampBlock("Clamp");
|
|
|
- case "ScaleBlock":
|
|
|
- return new ScaleBlock("Scale");
|
|
|
- case "CrossBlock":
|
|
|
- return new CrossBlock("Cross");
|
|
|
- case "DotBlock":
|
|
|
- return new DotBlock("Dot");
|
|
|
- case "PowBlock":
|
|
|
- return new PowBlock("Pow");
|
|
|
- case "MultiplyBlock":
|
|
|
- return new MultiplyBlock("Multiply");
|
|
|
- case "TransformBlock":
|
|
|
- return new TransformBlock("Transform");
|
|
|
- case "TrigonometryBlock":
|
|
|
- return new TrigonometryBlock("Trigonometry");
|
|
|
- case "RemapBlock":
|
|
|
- return new RemapBlock("Remap");
|
|
|
- case "NormalizeBlock":
|
|
|
- return new NormalizeBlock("Normalize");
|
|
|
- case "FresnelBlock":
|
|
|
- return new FresnelBlock("Fresnel");
|
|
|
- case "LerpBlock":
|
|
|
- return new LerpBlock("Lerp");
|
|
|
- case "NLerpBlock":
|
|
|
- return new NLerpBlock("NLerp");
|
|
|
- case "DivideBlock":
|
|
|
- return new DivideBlock("Divide");
|
|
|
- case "SubtractBlock":
|
|
|
- return new SubtractBlock("Subtract");
|
|
|
- case "StepBlock":
|
|
|
- return new StepBlock("Step");
|
|
|
- case "SmoothStepBlock":
|
|
|
- return new SmoothStepBlock("Smooth step");
|
|
|
- case "OneMinusBlock":
|
|
|
- return new OneMinusBlock("One minus");
|
|
|
- case "ReciprocalBlock":
|
|
|
- return new ReciprocalBlock("Reciprocal");
|
|
|
- case "ViewDirectionBlock":
|
|
|
- return new ViewDirectionBlock("View direction");
|
|
|
- case "LightInformationBlock":
|
|
|
- let lightInformationBlock = new LightInformationBlock("Light information");
|
|
|
- lightInformationBlock.light = scene.lights.length ? scene.lights[0] : null;
|
|
|
- return lightInformationBlock;
|
|
|
- case "MaxBlock":
|
|
|
- return new MaxBlock("Max");
|
|
|
- case "MinBlock":
|
|
|
- return new MinBlock("Min");
|
|
|
- case "LengthBlock":
|
|
|
- return new LengthBlock("Length");
|
|
|
- case "DistanceBlock":
|
|
|
- return new DistanceBlock("Distance");
|
|
|
- case "NegateBlock":
|
|
|
- return new NegateBlock("Negate");
|
|
|
- case "PerturbNormalBlock":
|
|
|
- return new PerturbNormalBlock("Perturb normal");
|
|
|
- case "RandomNumberBlock":
|
|
|
- return new RandomNumberBlock("Random number");
|
|
|
- case "ReplaceColorBlock":
|
|
|
- return new ReplaceColorBlock("Replace color");
|
|
|
- case "PosterizeBlock":
|
|
|
- return new PosterizeBlock("Posterize");
|
|
|
- case "ArcTan2Block":
|
|
|
- return new ArcTan2Block("ArcTan2");
|
|
|
- case "GradientBlock":
|
|
|
- return new GradientBlock("Gradient");
|
|
|
- case "FrontFacingBlock":
|
|
|
- return new FrontFacingBlock("Front facing");
|
|
|
- case "CosBlock": {
|
|
|
- let cosBlock = new TrigonometryBlock("Cos");
|
|
|
- cosBlock.operation = TrigonometryBlockOperations.Cos;
|
|
|
- return cosBlock;
|
|
|
- }
|
|
|
- case "SinBlock": {
|
|
|
- let sinBlock = new TrigonometryBlock("Sin");
|
|
|
- sinBlock.operation = TrigonometryBlockOperations.Sin;
|
|
|
- return sinBlock;
|
|
|
- }
|
|
|
- case "AbsBlock": {
|
|
|
- let absBlock = new TrigonometryBlock("Abs");
|
|
|
- absBlock.operation = TrigonometryBlockOperations.Abs;
|
|
|
- return absBlock;
|
|
|
- }
|
|
|
- case "SqrtBlock": {
|
|
|
- let sqrtBlock = new TrigonometryBlock("Sqrt");
|
|
|
- sqrtBlock.operation = TrigonometryBlockOperations.Sqrt;
|
|
|
- return sqrtBlock;
|
|
|
- }
|
|
|
- case "ArcCosBlock": {
|
|
|
- let acosBlock = new TrigonometryBlock("ArcCos");
|
|
|
- acosBlock.operation = TrigonometryBlockOperations.ArcCos;
|
|
|
- return acosBlock;
|
|
|
- }
|
|
|
- case "ArcSinBlock": {
|
|
|
- let asinBlock = new TrigonometryBlock("ArcSin");
|
|
|
- asinBlock.operation = TrigonometryBlockOperations.ArcSin;
|
|
|
- return asinBlock;
|
|
|
- }
|
|
|
- case "TanBlock": {
|
|
|
- let tanBlock = new TrigonometryBlock("Tan");
|
|
|
- tanBlock.operation = TrigonometryBlockOperations.Tan;
|
|
|
- return tanBlock;
|
|
|
- }
|
|
|
- case "ArcTanBlock": {
|
|
|
- let atanBlock = new TrigonometryBlock("ArcTan");
|
|
|
- atanBlock.operation = TrigonometryBlockOperations.ArcTan;
|
|
|
- return atanBlock;
|
|
|
- }
|
|
|
- case "FractBlock": {
|
|
|
- let fractBlock = new TrigonometryBlock("Fract");
|
|
|
- fractBlock.operation = TrigonometryBlockOperations.Fract;
|
|
|
- return fractBlock;
|
|
|
- }
|
|
|
- case "SignBlock": {
|
|
|
- let signBlock = new TrigonometryBlock("Sign");
|
|
|
- signBlock.operation = TrigonometryBlockOperations.Sign;
|
|
|
- return signBlock;
|
|
|
- }
|
|
|
- case "LogBlock": {
|
|
|
- let logBlock = new TrigonometryBlock("Log");
|
|
|
- logBlock.operation = TrigonometryBlockOperations.Log;
|
|
|
- return logBlock;
|
|
|
- }
|
|
|
- case "ExpBlock": {
|
|
|
- let expBlock = new TrigonometryBlock("Exp");
|
|
|
- expBlock.operation = TrigonometryBlockOperations.Exp;
|
|
|
- return expBlock;
|
|
|
- }
|
|
|
- case "Exp2Block": {
|
|
|
- let exp2Block = new TrigonometryBlock("Exp2");
|
|
|
- exp2Block.operation = TrigonometryBlockOperations.Exp2;
|
|
|
- return exp2Block;
|
|
|
- }
|
|
|
- case "DegreesToRadiansBlock": {
|
|
|
- let degreesToRadiansBlock = new TrigonometryBlock("Degrees to radians");
|
|
|
- degreesToRadiansBlock.operation = TrigonometryBlockOperations.Radians;
|
|
|
- return degreesToRadiansBlock;
|
|
|
- }
|
|
|
- case "RadiansToDegreesBlock": {
|
|
|
- let radiansToDegreesBlock = new TrigonometryBlock("Radians to degrees");
|
|
|
- radiansToDegreesBlock.operation = TrigonometryBlockOperations.Degrees;
|
|
|
- return radiansToDegreesBlock;
|
|
|
- }
|
|
|
- case "RoundBlock": {
|
|
|
- let roundBlock = new TrigonometryBlock("Round");
|
|
|
- roundBlock.operation = TrigonometryBlockOperations.Round;
|
|
|
- return roundBlock;
|
|
|
- }
|
|
|
- case "CeilingBlock": {
|
|
|
- let ceilingBlock = new TrigonometryBlock("Ceiling");
|
|
|
- ceilingBlock.operation = TrigonometryBlockOperations.Ceiling;
|
|
|
- return ceilingBlock;
|
|
|
- }
|
|
|
- case "FloorBlock": {
|
|
|
- let floorBlock = new TrigonometryBlock("Floor");
|
|
|
- floorBlock.operation = TrigonometryBlockOperations.Floor;
|
|
|
- return floorBlock;
|
|
|
- }
|
|
|
- case "SawToothWaveBlock": {
|
|
|
- let sawToothWaveBlock = new WaveBlock("SawTooth wave");
|
|
|
- sawToothWaveBlock.kind = WaveBlockKind.SawTooth;
|
|
|
- return sawToothWaveBlock;
|
|
|
- }
|
|
|
- case "SquareWaveBlock": {
|
|
|
- let squareWaveBlock = new WaveBlock("Square wave");
|
|
|
- squareWaveBlock.kind = WaveBlockKind.Square;
|
|
|
- return squareWaveBlock;
|
|
|
- }
|
|
|
- case "TriangleWaveBlock": {
|
|
|
- let triangleWaveBlock = new WaveBlock("Triangle wave");
|
|
|
- triangleWaveBlock.kind = WaveBlockKind.Triangle;
|
|
|
- return triangleWaveBlock;
|
|
|
- }
|
|
|
- case "WorldMatrixBlock": {
|
|
|
- let worldMatrixBlock = new InputBlock("World");
|
|
|
- worldMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.World);
|
|
|
- return worldMatrixBlock;
|
|
|
- }
|
|
|
- case "WorldViewMatrixBlock": {
|
|
|
- let worldViewMatrixBlock = new InputBlock("World x View");
|
|
|
- worldViewMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.WorldView);
|
|
|
- return worldViewMatrixBlock;
|
|
|
- }
|
|
|
- case "WorldViewProjectionMatrixBlock": {
|
|
|
- let worldViewProjectionMatrixBlock = new InputBlock("World x View x Projection");
|
|
|
- worldViewProjectionMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.WorldViewProjection);
|
|
|
- return worldViewProjectionMatrixBlock;
|
|
|
- }
|
|
|
- case "ViewMatrixBlock": {
|
|
|
- let viewMatrixBlock = new InputBlock("View");
|
|
|
- viewMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.View);
|
|
|
- return viewMatrixBlock;
|
|
|
- }
|
|
|
- case "ViewProjectionMatrixBlock": {
|
|
|
- let viewProjectionMatrixBlock = new InputBlock("View x Projection");
|
|
|
- viewProjectionMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.ViewProjection);
|
|
|
- return viewProjectionMatrixBlock;
|
|
|
- }
|
|
|
- case "ProjectionMatrixBlock": {
|
|
|
- let projectionMatrixBlock = new InputBlock("Projection");
|
|
|
- projectionMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.Projection);
|
|
|
- return projectionMatrixBlock;
|
|
|
- }
|
|
|
- case "CameraPositionBlock": {
|
|
|
- let cameraPosition = new InputBlock("Camera position");
|
|
|
- cameraPosition.setAsSystemValue(NodeMaterialSystemValues.CameraPosition);
|
|
|
- return cameraPosition;
|
|
|
- }
|
|
|
- case "FogColorBlock": {
|
|
|
- let FogColor = new InputBlock("Fog color");
|
|
|
- FogColor.setAsSystemValue(NodeMaterialSystemValues.FogColor);
|
|
|
- return FogColor;
|
|
|
- }
|
|
|
- case "PositionBlock": {
|
|
|
- let meshPosition = new InputBlock("position");
|
|
|
- meshPosition.setAsAttribute("position");
|
|
|
- return meshPosition;
|
|
|
- }
|
|
|
- case "UVBlock": {
|
|
|
- let meshUV = new InputBlock("uv");
|
|
|
- meshUV.setAsAttribute("uv");
|
|
|
- return meshUV;
|
|
|
- }
|
|
|
- case "ColorBlock": {
|
|
|
- let meshColor = new InputBlock("color");
|
|
|
- meshColor.setAsAttribute("color");
|
|
|
- return meshColor;
|
|
|
- }
|
|
|
- case "NormalBlock": {
|
|
|
- let meshNormal = new InputBlock("normal");
|
|
|
- meshNormal.setAsAttribute("normal");
|
|
|
- return meshNormal;
|
|
|
- }
|
|
|
- case "TangentBlock": {
|
|
|
- let meshTangent = new InputBlock("tangent");
|
|
|
- meshTangent.setAsAttribute("tangent");
|
|
|
- return meshTangent;
|
|
|
- }
|
|
|
- case "MatrixIndicesBlock": {
|
|
|
- let meshMatrixIndices = new InputBlock("matricesIndices");
|
|
|
- meshMatrixIndices.setAsAttribute("matricesIndices");
|
|
|
- return meshMatrixIndices;
|
|
|
- }
|
|
|
- case "MatrixWeightsBlock": {
|
|
|
- let meshMatrixWeights = new InputBlock("matricesWeights");
|
|
|
- meshMatrixWeights.setAsAttribute("matricesWeights");
|
|
|
- return meshMatrixWeights;
|
|
|
- }
|
|
|
- case "TimeBlock": {
|
|
|
- let timeBlock = new InputBlock("Time", undefined, NodeMaterialBlockConnectionPointTypes.Float);
|
|
|
- timeBlock.animationType = AnimatedInputBlockTypes.Time;
|
|
|
- return timeBlock;
|
|
|
- }
|
|
|
- case "DeltaTimeBlock": {
|
|
|
- let deltaTimeBlock = new InputBlock("Delta time");
|
|
|
- deltaTimeBlock.setAsSystemValue(NodeMaterialSystemValues.DeltaTime);
|
|
|
- return deltaTimeBlock;
|
|
|
- }
|
|
|
- case "WorldPositionBlock": {
|
|
|
- let worldPositionBlock = nodeMaterial.getInputBlockByPredicate(b => b.isAttribute && b.name === "position");
|
|
|
- if (!worldPositionBlock) {
|
|
|
- worldPositionBlock = new InputBlock("position");
|
|
|
- worldPositionBlock.setAsAttribute("position");
|
|
|
- }
|
|
|
-
|
|
|
- let worldMatrixBlock = nodeMaterial.getInputBlockByPredicate(b => b.isSystemValue && b.systemValue === NodeMaterialSystemValues.World);
|
|
|
-
|
|
|
- if (!worldMatrixBlock) {
|
|
|
- worldMatrixBlock = new InputBlock("World");
|
|
|
- worldMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.World);
|
|
|
- }
|
|
|
-
|
|
|
- let transformBlock = new TransformBlock("World position");
|
|
|
- worldPositionBlock.connectTo(transformBlock);
|
|
|
- worldMatrixBlock.connectTo(transformBlock);
|
|
|
-
|
|
|
- return transformBlock;
|
|
|
- }
|
|
|
- case "WorldNormalBlock": {
|
|
|
- let worldNormalBlock = nodeMaterial.getInputBlockByPredicate(b => b.isAttribute && b.name === "normal");
|
|
|
- if (!worldNormalBlock) {
|
|
|
- worldNormalBlock = new InputBlock("normal");
|
|
|
- worldNormalBlock.setAsAttribute("normal");
|
|
|
- }
|
|
|
-
|
|
|
- let worldMatrixBlock = nodeMaterial.getInputBlockByPredicate(b => b.isSystemValue && b.systemValue === NodeMaterialSystemValues.World);
|
|
|
-
|
|
|
- if (!worldMatrixBlock) {
|
|
|
- worldMatrixBlock = new InputBlock("World");
|
|
|
- worldMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.World);
|
|
|
- }
|
|
|
-
|
|
|
- let transformBlock = new TransformBlock("World normal");
|
|
|
- worldNormalBlock.connectTo(transformBlock);
|
|
|
- worldMatrixBlock.connectTo(transformBlock);
|
|
|
-
|
|
|
- return transformBlock;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
- public static GetColorFromConnectionNodeType(type: NodeMaterialBlockConnectionPointTypes) {
|
|
|
- let color = "Red";
|
|
|
- switch (type) {
|
|
|
- case NodeMaterialBlockConnectionPointTypes.Float:
|
|
|
- color = "#cb9e27";
|
|
|
- break;
|
|
|
- case NodeMaterialBlockConnectionPointTypes.Vector2:
|
|
|
- color = "#16bcb1";
|
|
|
- break;
|
|
|
- case NodeMaterialBlockConnectionPointTypes.Vector3:
|
|
|
- case NodeMaterialBlockConnectionPointTypes.Color3:
|
|
|
- color = "#b786cb";
|
|
|
- break;
|
|
|
- case NodeMaterialBlockConnectionPointTypes.Vector4:
|
|
|
- case NodeMaterialBlockConnectionPointTypes.Color4:
|
|
|
- color = "#be5126";
|
|
|
- break;
|
|
|
- case NodeMaterialBlockConnectionPointTypes.Matrix:
|
|
|
- color = "#591990";
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- return color;
|
|
|
- }
|
|
|
-
|
|
|
- public static GetConnectionNodeTypeFromString(type: string) {
|
|
|
- switch (type) {
|
|
|
- case "Float":
|
|
|
- return NodeMaterialBlockConnectionPointTypes.Float;
|
|
|
- case "Vector2":
|
|
|
- return NodeMaterialBlockConnectionPointTypes.Vector2;
|
|
|
- case "Vector3":
|
|
|
- return NodeMaterialBlockConnectionPointTypes.Vector3;
|
|
|
- case "Vector4":
|
|
|
- return NodeMaterialBlockConnectionPointTypes.Vector4;
|
|
|
- case "Matrix":
|
|
|
- return NodeMaterialBlockConnectionPointTypes.Matrix;
|
|
|
- case "Color3":
|
|
|
- return NodeMaterialBlockConnectionPointTypes.Color3;
|
|
|
- case "Color4":
|
|
|
- return NodeMaterialBlockConnectionPointTypes.Color4;
|
|
|
- }
|
|
|
-
|
|
|
- return NodeMaterialBlockConnectionPointTypes.AutoDetect;
|
|
|
- }
|
|
|
-
|
|
|
- public static GetStringFromConnectionNodeType(type: NodeMaterialBlockConnectionPointTypes) {
|
|
|
- switch (type){
|
|
|
- case NodeMaterialBlockConnectionPointTypes.Float:
|
|
|
- return "Float";
|
|
|
- case NodeMaterialBlockConnectionPointTypes.Vector2:
|
|
|
- return "Vector2";
|
|
|
- case NodeMaterialBlockConnectionPointTypes.Vector3:
|
|
|
- return "Vector3";
|
|
|
- case NodeMaterialBlockConnectionPointTypes.Vector4:
|
|
|
- return "Vector4";
|
|
|
- case NodeMaterialBlockConnectionPointTypes.Color3:
|
|
|
- return "Color3";
|
|
|
- case NodeMaterialBlockConnectionPointTypes.Color4:
|
|
|
- return "Color4";
|
|
|
- case NodeMaterialBlockConnectionPointTypes.Matrix:
|
|
|
- return "Matrix";
|
|
|
- }
|
|
|
-
|
|
|
- return "";
|
|
|
- }
|
|
|
+import { DiscardBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/discardBlock';
|
|
|
+import { BonesBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/bonesBlock';
|
|
|
+import { InstancesBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/instancesBlock';
|
|
|
+import { MorphTargetsBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/morphTargetsBlock';
|
|
|
+import { ImageProcessingBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/imageProcessingBlock';
|
|
|
+import { ColorMergerBlock } from 'babylonjs/Materials/Node/Blocks/colorMergerBlock';
|
|
|
+import { VectorMergerBlock } from 'babylonjs/Materials/Node/Blocks/vectorMergerBlock';
|
|
|
+import { ColorSplitterBlock } from 'babylonjs/Materials/Node/Blocks/colorSplitterBlock';
|
|
|
+import { VectorSplitterBlock } from 'babylonjs/Materials/Node/Blocks/vectorSplitterBlock';
|
|
|
+import { RemapBlock } from 'babylonjs/Materials/Node/Blocks/remapBlock';
|
|
|
+import { TextureBlock } from 'babylonjs/Materials/Node/Blocks/Dual/textureBlock';
|
|
|
+import { ReflectionTextureBlock } from 'babylonjs/Materials/Node/Blocks/Dual/reflectionTextureBlock';
|
|
|
+import { LightBlock } from 'babylonjs/Materials/Node/Blocks/Dual/lightBlock';
|
|
|
+import { FogBlock } from 'babylonjs/Materials/Node/Blocks/Dual/fogBlock';
|
|
|
+import { VertexOutputBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/vertexOutputBlock';
|
|
|
+import { FragmentOutputBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/fragmentOutputBlock';
|
|
|
+import { NormalizeBlock } from 'babylonjs/Materials/Node/Blocks/normalizeBlock';
|
|
|
+import { AddBlock } from 'babylonjs/Materials/Node/Blocks/addBlock';
|
|
|
+import { ScaleBlock } from 'babylonjs/Materials/Node/Blocks/scaleBlock';
|
|
|
+import { TrigonometryBlock, TrigonometryBlockOperations } from 'babylonjs/Materials/Node/Blocks/trigonometryBlock';
|
|
|
+import { ClampBlock } from 'babylonjs/Materials/Node/Blocks/clampBlock';
|
|
|
+import { CrossBlock } from 'babylonjs/Materials/Node/Blocks/crossBlock';
|
|
|
+import { DotBlock } from 'babylonjs/Materials/Node/Blocks/dotBlock';
|
|
|
+import { MultiplyBlock } from 'babylonjs/Materials/Node/Blocks/multiplyBlock';
|
|
|
+import { TransformBlock } from 'babylonjs/Materials/Node/Blocks/transformBlock';
|
|
|
+import { NodeMaterialBlockConnectionPointTypes } from 'babylonjs/Materials/Node/Enums/nodeMaterialBlockConnectionPointTypes';
|
|
|
+import { FresnelBlock } from 'babylonjs/Materials/Node/Blocks/fresnelBlock';
|
|
|
+import { LerpBlock } from 'babylonjs/Materials/Node/Blocks/lerpBlock';
|
|
|
+import { NLerpBlock } from 'babylonjs/Materials/Node/Blocks/nLerpBlock';
|
|
|
+import { DivideBlock } from 'babylonjs/Materials/Node/Blocks/divideBlock';
|
|
|
+import { SubtractBlock } from 'babylonjs/Materials/Node/Blocks/subtractBlock';
|
|
|
+import { StepBlock } from 'babylonjs/Materials/Node/Blocks/stepBlock';
|
|
|
+import { SmoothStepBlock } from 'babylonjs/Materials/Node/Blocks/smoothStepBlock';
|
|
|
+import { InputBlock } from 'babylonjs/Materials/Node/Blocks/Input/inputBlock';
|
|
|
+import { NodeMaterialSystemValues } from 'babylonjs/Materials/Node/Enums/nodeMaterialSystemValues';
|
|
|
+import { AnimatedInputBlockTypes } from 'babylonjs/Materials/Node/Blocks/Input/animatedInputBlockTypes';
|
|
|
+import { OneMinusBlock } from 'babylonjs/Materials/Node/Blocks/oneMinusBlock';
|
|
|
+import { ViewDirectionBlock } from 'babylonjs/Materials/Node/Blocks/viewDirectionBlock';
|
|
|
+import { LightInformationBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/lightInformationBlock';
|
|
|
+import { MaxBlock } from 'babylonjs/Materials/Node/Blocks/maxBlock';
|
|
|
+import { MinBlock } from 'babylonjs/Materials/Node/Blocks/minBlock';
|
|
|
+import { PerturbNormalBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/perturbNormalBlock';
|
|
|
+import { LengthBlock } from 'babylonjs/Materials/Node/Blocks/lengthBlock';
|
|
|
+import { DistanceBlock } from 'babylonjs/Materials/Node/Blocks/distanceBlock';
|
|
|
+import { FrontFacingBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/frontFacingBlock';
|
|
|
+import { NegateBlock } from 'babylonjs/Materials/Node/Blocks/negateBlock';
|
|
|
+import { PowBlock } from 'babylonjs/Materials/Node/Blocks/powBlock';
|
|
|
+import { Scene } from 'babylonjs/scene';
|
|
|
+import { RandomNumberBlock } from 'babylonjs/Materials/Node/Blocks/randomNumberBlock';
|
|
|
+import { ReplaceColorBlock } from 'babylonjs/Materials/Node/Blocks/replaceColorBlock';
|
|
|
+import { PosterizeBlock } from 'babylonjs/Materials/Node/Blocks/posterizeBlock';
|
|
|
+import { ArcTan2Block } from 'babylonjs/Materials/Node/Blocks/arcTan2Block';
|
|
|
+import { ReciprocalBlock } from 'babylonjs/Materials/Node/Blocks/reciprocalBlock';
|
|
|
+import { GradientBlock } from 'babylonjs/Materials/Node/Blocks/gradientBlock';
|
|
|
+import { WaveBlock, WaveBlockKind } from 'babylonjs/Materials/Node/Blocks/waveBlock';
|
|
|
+import { NodeMaterial } from 'babylonjs/Materials/Node/nodeMaterial';
|
|
|
+import { WorleyNoise3DBlock } from 'babylonjs/Materials/Node/Blocks/worleyNoise3DBlock';
|
|
|
+import { SimplexPerlin3DBlock } from 'babylonjs/Materials/Node/Blocks/simplexPerlin3DBlock';
|
|
|
+
|
|
|
+export class BlockTools {
|
|
|
+ public static GetBlockFromString(data: string, scene: Scene, nodeMaterial: NodeMaterial) {
|
|
|
+ switch (data) {
|
|
|
+ case "WorleyNoise3DBlock":
|
|
|
+ return new WorleyNoise3DBlock("WorleyNoise3D");
|
|
|
+ case "SimplexPerlin3DBlock":
|
|
|
+ return new SimplexPerlin3DBlock("SimplexPerlin3D");
|
|
|
+ case "BonesBlock":
|
|
|
+ return new BonesBlock("Bones");
|
|
|
+ case "InstancesBlock":
|
|
|
+ return new InstancesBlock("Instances");
|
|
|
+ case "MorphTargetsBlock":
|
|
|
+ return new MorphTargetsBlock("MorphTargets");
|
|
|
+ case "DiscardBlock":
|
|
|
+ return new DiscardBlock("Discard");
|
|
|
+ case "ImageProcessingBlock":
|
|
|
+ return new ImageProcessingBlock("ImageProcessing");
|
|
|
+ case "ColorMergerBlock":
|
|
|
+ return new ColorMergerBlock("ColorMerger");
|
|
|
+ case "VectorMergerBlock":
|
|
|
+ return new VectorMergerBlock("VectorMerger");
|
|
|
+ case "ColorSplitterBlock":
|
|
|
+ return new ColorSplitterBlock("ColorSplitter");
|
|
|
+ case "VectorSplitterBlock":
|
|
|
+ return new VectorSplitterBlock("VectorSplitter");
|
|
|
+ case "TextureBlock":
|
|
|
+ return new TextureBlock("Texture");
|
|
|
+ case "ReflectionTextureBlock":
|
|
|
+ return new ReflectionTextureBlock("Reflection texture");
|
|
|
+ case "LightBlock":
|
|
|
+ return new LightBlock("Lights");
|
|
|
+ case "FogBlock":
|
|
|
+ return new FogBlock("Fog");
|
|
|
+ case "VertexOutputBlock":
|
|
|
+ return new VertexOutputBlock("VertexOutput");
|
|
|
+ case "FragmentOutputBlock":
|
|
|
+ return new FragmentOutputBlock("FragmentOutput");
|
|
|
+ case "AddBlock":
|
|
|
+ return new AddBlock("Add");
|
|
|
+ case "ClampBlock":
|
|
|
+ return new ClampBlock("Clamp");
|
|
|
+ case "ScaleBlock":
|
|
|
+ return new ScaleBlock("Scale");
|
|
|
+ case "CrossBlock":
|
|
|
+ return new CrossBlock("Cross");
|
|
|
+ case "DotBlock":
|
|
|
+ return new DotBlock("Dot");
|
|
|
+ case "PowBlock":
|
|
|
+ return new PowBlock("Pow");
|
|
|
+ case "MultiplyBlock":
|
|
|
+ return new MultiplyBlock("Multiply");
|
|
|
+ case "TransformBlock":
|
|
|
+ return new TransformBlock("Transform");
|
|
|
+ case "TrigonometryBlock":
|
|
|
+ return new TrigonometryBlock("Trigonometry");
|
|
|
+ case "RemapBlock":
|
|
|
+ return new RemapBlock("Remap");
|
|
|
+ case "NormalizeBlock":
|
|
|
+ return new NormalizeBlock("Normalize");
|
|
|
+ case "FresnelBlock":
|
|
|
+ return new FresnelBlock("Fresnel");
|
|
|
+ case "LerpBlock":
|
|
|
+ return new LerpBlock("Lerp");
|
|
|
+ case "NLerpBlock":
|
|
|
+ return new NLerpBlock("NLerp");
|
|
|
+ case "DivideBlock":
|
|
|
+ return new DivideBlock("Divide");
|
|
|
+ case "SubtractBlock":
|
|
|
+ return new SubtractBlock("Subtract");
|
|
|
+ case "StepBlock":
|
|
|
+ return new StepBlock("Step");
|
|
|
+ case "SmoothStepBlock":
|
|
|
+ return new SmoothStepBlock("Smooth step");
|
|
|
+ case "OneMinusBlock":
|
|
|
+ return new OneMinusBlock("One minus");
|
|
|
+ case "ReciprocalBlock":
|
|
|
+ return new ReciprocalBlock("Reciprocal");
|
|
|
+ case "ViewDirectionBlock":
|
|
|
+ return new ViewDirectionBlock("View direction");
|
|
|
+ case "LightInformationBlock":
|
|
|
+ let lightInformationBlock = new LightInformationBlock("Light information");
|
|
|
+ lightInformationBlock.light = scene.lights.length ? scene.lights[0] : null;
|
|
|
+ return lightInformationBlock;
|
|
|
+ case "MaxBlock":
|
|
|
+ return new MaxBlock("Max");
|
|
|
+ case "MinBlock":
|
|
|
+ return new MinBlock("Min");
|
|
|
+ case "LengthBlock":
|
|
|
+ return new LengthBlock("Length");
|
|
|
+ case "DistanceBlock":
|
|
|
+ return new DistanceBlock("Distance");
|
|
|
+ case "NegateBlock":
|
|
|
+ return new NegateBlock("Negate");
|
|
|
+ case "PerturbNormalBlock":
|
|
|
+ return new PerturbNormalBlock("Perturb normal");
|
|
|
+ case "RandomNumberBlock":
|
|
|
+ return new RandomNumberBlock("Random number");
|
|
|
+ case "ReplaceColorBlock":
|
|
|
+ return new ReplaceColorBlock("Replace color");
|
|
|
+ case "PosterizeBlock":
|
|
|
+ return new PosterizeBlock("Posterize");
|
|
|
+ case "ArcTan2Block":
|
|
|
+ return new ArcTan2Block("ArcTan2");
|
|
|
+ case "GradientBlock":
|
|
|
+ return new GradientBlock("Gradient");
|
|
|
+ case "FrontFacingBlock":
|
|
|
+ return new FrontFacingBlock("Front facing");
|
|
|
+ case "CosBlock": {
|
|
|
+ let cosBlock = new TrigonometryBlock("Cos");
|
|
|
+ cosBlock.operation = TrigonometryBlockOperations.Cos;
|
|
|
+ return cosBlock;
|
|
|
+ }
|
|
|
+ case "SinBlock": {
|
|
|
+ let sinBlock = new TrigonometryBlock("Sin");
|
|
|
+ sinBlock.operation = TrigonometryBlockOperations.Sin;
|
|
|
+ return sinBlock;
|
|
|
+ }
|
|
|
+ case "AbsBlock": {
|
|
|
+ let absBlock = new TrigonometryBlock("Abs");
|
|
|
+ absBlock.operation = TrigonometryBlockOperations.Abs;
|
|
|
+ return absBlock;
|
|
|
+ }
|
|
|
+ case "SqrtBlock": {
|
|
|
+ let sqrtBlock = new TrigonometryBlock("Sqrt");
|
|
|
+ sqrtBlock.operation = TrigonometryBlockOperations.Sqrt;
|
|
|
+ return sqrtBlock;
|
|
|
+ }
|
|
|
+ case "ArcCosBlock": {
|
|
|
+ let acosBlock = new TrigonometryBlock("ArcCos");
|
|
|
+ acosBlock.operation = TrigonometryBlockOperations.ArcCos;
|
|
|
+ return acosBlock;
|
|
|
+ }
|
|
|
+ case "ArcSinBlock": {
|
|
|
+ let asinBlock = new TrigonometryBlock("ArcSin");
|
|
|
+ asinBlock.operation = TrigonometryBlockOperations.ArcSin;
|
|
|
+ return asinBlock;
|
|
|
+ }
|
|
|
+ case "TanBlock": {
|
|
|
+ let tanBlock = new TrigonometryBlock("Tan");
|
|
|
+ tanBlock.operation = TrigonometryBlockOperations.Tan;
|
|
|
+ return tanBlock;
|
|
|
+ }
|
|
|
+ case "ArcTanBlock": {
|
|
|
+ let atanBlock = new TrigonometryBlock("ArcTan");
|
|
|
+ atanBlock.operation = TrigonometryBlockOperations.ArcTan;
|
|
|
+ return atanBlock;
|
|
|
+ }
|
|
|
+ case "FractBlock": {
|
|
|
+ let fractBlock = new TrigonometryBlock("Fract");
|
|
|
+ fractBlock.operation = TrigonometryBlockOperations.Fract;
|
|
|
+ return fractBlock;
|
|
|
+ }
|
|
|
+ case "SignBlock": {
|
|
|
+ let signBlock = new TrigonometryBlock("Sign");
|
|
|
+ signBlock.operation = TrigonometryBlockOperations.Sign;
|
|
|
+ return signBlock;
|
|
|
+ }
|
|
|
+ case "LogBlock": {
|
|
|
+ let logBlock = new TrigonometryBlock("Log");
|
|
|
+ logBlock.operation = TrigonometryBlockOperations.Log;
|
|
|
+ return logBlock;
|
|
|
+ }
|
|
|
+ case "ExpBlock": {
|
|
|
+ let expBlock = new TrigonometryBlock("Exp");
|
|
|
+ expBlock.operation = TrigonometryBlockOperations.Exp;
|
|
|
+ return expBlock;
|
|
|
+ }
|
|
|
+ case "Exp2Block": {
|
|
|
+ let exp2Block = new TrigonometryBlock("Exp2");
|
|
|
+ exp2Block.operation = TrigonometryBlockOperations.Exp2;
|
|
|
+ return exp2Block;
|
|
|
+ }
|
|
|
+ case "DegreesToRadiansBlock": {
|
|
|
+ let degreesToRadiansBlock = new TrigonometryBlock("Degrees to radians");
|
|
|
+ degreesToRadiansBlock.operation = TrigonometryBlockOperations.Radians;
|
|
|
+ return degreesToRadiansBlock;
|
|
|
+ }
|
|
|
+ case "RadiansToDegreesBlock": {
|
|
|
+ let radiansToDegreesBlock = new TrigonometryBlock("Radians to degrees");
|
|
|
+ radiansToDegreesBlock.operation = TrigonometryBlockOperations.Degrees;
|
|
|
+ return radiansToDegreesBlock;
|
|
|
+ }
|
|
|
+ case "RoundBlock": {
|
|
|
+ let roundBlock = new TrigonometryBlock("Round");
|
|
|
+ roundBlock.operation = TrigonometryBlockOperations.Round;
|
|
|
+ return roundBlock;
|
|
|
+ }
|
|
|
+ case "CeilingBlock": {
|
|
|
+ let ceilingBlock = new TrigonometryBlock("Ceiling");
|
|
|
+ ceilingBlock.operation = TrigonometryBlockOperations.Ceiling;
|
|
|
+ return ceilingBlock;
|
|
|
+ }
|
|
|
+ case "FloorBlock": {
|
|
|
+ let floorBlock = new TrigonometryBlock("Floor");
|
|
|
+ floorBlock.operation = TrigonometryBlockOperations.Floor;
|
|
|
+ return floorBlock;
|
|
|
+ }
|
|
|
+ case "SawToothWaveBlock": {
|
|
|
+ let sawToothWaveBlock = new WaveBlock("SawTooth wave");
|
|
|
+ sawToothWaveBlock.kind = WaveBlockKind.SawTooth;
|
|
|
+ return sawToothWaveBlock;
|
|
|
+ }
|
|
|
+ case "SquareWaveBlock": {
|
|
|
+ let squareWaveBlock = new WaveBlock("Square wave");
|
|
|
+ squareWaveBlock.kind = WaveBlockKind.Square;
|
|
|
+ return squareWaveBlock;
|
|
|
+ }
|
|
|
+ case "TriangleWaveBlock": {
|
|
|
+ let triangleWaveBlock = new WaveBlock("Triangle wave");
|
|
|
+ triangleWaveBlock.kind = WaveBlockKind.Triangle;
|
|
|
+ return triangleWaveBlock;
|
|
|
+ }
|
|
|
+ case "WorldMatrixBlock": {
|
|
|
+ let worldMatrixBlock = new InputBlock("World");
|
|
|
+ worldMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.World);
|
|
|
+ return worldMatrixBlock;
|
|
|
+ }
|
|
|
+ case "WorldViewMatrixBlock": {
|
|
|
+ let worldViewMatrixBlock = new InputBlock("World x View");
|
|
|
+ worldViewMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.WorldView);
|
|
|
+ return worldViewMatrixBlock;
|
|
|
+ }
|
|
|
+ case "WorldViewProjectionMatrixBlock": {
|
|
|
+ let worldViewProjectionMatrixBlock = new InputBlock("World x View x Projection");
|
|
|
+ worldViewProjectionMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.WorldViewProjection);
|
|
|
+ return worldViewProjectionMatrixBlock;
|
|
|
+ }
|
|
|
+ case "ViewMatrixBlock": {
|
|
|
+ let viewMatrixBlock = new InputBlock("View");
|
|
|
+ viewMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.View);
|
|
|
+ return viewMatrixBlock;
|
|
|
+ }
|
|
|
+ case "ViewProjectionMatrixBlock": {
|
|
|
+ let viewProjectionMatrixBlock = new InputBlock("View x Projection");
|
|
|
+ viewProjectionMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.ViewProjection);
|
|
|
+ return viewProjectionMatrixBlock;
|
|
|
+ }
|
|
|
+ case "ProjectionMatrixBlock": {
|
|
|
+ let projectionMatrixBlock = new InputBlock("Projection");
|
|
|
+ projectionMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.Projection);
|
|
|
+ return projectionMatrixBlock;
|
|
|
+ }
|
|
|
+ case "CameraPositionBlock": {
|
|
|
+ let cameraPosition = new InputBlock("Camera position");
|
|
|
+ cameraPosition.setAsSystemValue(NodeMaterialSystemValues.CameraPosition);
|
|
|
+ return cameraPosition;
|
|
|
+ }
|
|
|
+ case "FogColorBlock": {
|
|
|
+ let FogColor = new InputBlock("Fog color");
|
|
|
+ FogColor.setAsSystemValue(NodeMaterialSystemValues.FogColor);
|
|
|
+ return FogColor;
|
|
|
+ }
|
|
|
+ case "PositionBlock": {
|
|
|
+ let meshPosition = new InputBlock("position");
|
|
|
+ meshPosition.setAsAttribute("position");
|
|
|
+ return meshPosition;
|
|
|
+ }
|
|
|
+ case "UVBlock": {
|
|
|
+ let meshUV = new InputBlock("uv");
|
|
|
+ meshUV.setAsAttribute("uv");
|
|
|
+ return meshUV;
|
|
|
+ }
|
|
|
+ case "ColorBlock": {
|
|
|
+ let meshColor = new InputBlock("color");
|
|
|
+ meshColor.setAsAttribute("color");
|
|
|
+ return meshColor;
|
|
|
+ }
|
|
|
+ case "NormalBlock": {
|
|
|
+ let meshNormal = new InputBlock("normal");
|
|
|
+ meshNormal.setAsAttribute("normal");
|
|
|
+ return meshNormal;
|
|
|
+ }
|
|
|
+ case "TangentBlock": {
|
|
|
+ let meshTangent = new InputBlock("tangent");
|
|
|
+ meshTangent.setAsAttribute("tangent");
|
|
|
+ return meshTangent;
|
|
|
+ }
|
|
|
+ case "MatrixIndicesBlock": {
|
|
|
+ let meshMatrixIndices = new InputBlock("matricesIndices");
|
|
|
+ meshMatrixIndices.setAsAttribute("matricesIndices");
|
|
|
+ return meshMatrixIndices;
|
|
|
+ }
|
|
|
+ case "MatrixWeightsBlock": {
|
|
|
+ let meshMatrixWeights = new InputBlock("matricesWeights");
|
|
|
+ meshMatrixWeights.setAsAttribute("matricesWeights");
|
|
|
+ return meshMatrixWeights;
|
|
|
+ }
|
|
|
+ case "TimeBlock": {
|
|
|
+ let timeBlock = new InputBlock("Time", undefined, NodeMaterialBlockConnectionPointTypes.Float);
|
|
|
+ timeBlock.animationType = AnimatedInputBlockTypes.Time;
|
|
|
+ return timeBlock;
|
|
|
+ }
|
|
|
+ case "DeltaTimeBlock": {
|
|
|
+ let deltaTimeBlock = new InputBlock("Delta time");
|
|
|
+ deltaTimeBlock.setAsSystemValue(NodeMaterialSystemValues.DeltaTime);
|
|
|
+ return deltaTimeBlock;
|
|
|
+ }
|
|
|
+ case "WorldPositionBlock": {
|
|
|
+ let worldPositionBlock = nodeMaterial.getInputBlockByPredicate(b => b.isAttribute && b.name === "position");
|
|
|
+ if (!worldPositionBlock) {
|
|
|
+ worldPositionBlock = new InputBlock("position");
|
|
|
+ worldPositionBlock.setAsAttribute("position");
|
|
|
+ }
|
|
|
+
|
|
|
+ let worldMatrixBlock = nodeMaterial.getInputBlockByPredicate(b => b.isSystemValue && b.systemValue === NodeMaterialSystemValues.World);
|
|
|
+
|
|
|
+ if (!worldMatrixBlock) {
|
|
|
+ worldMatrixBlock = new InputBlock("World");
|
|
|
+ worldMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.World);
|
|
|
+ }
|
|
|
+
|
|
|
+ let transformBlock = new TransformBlock("World position");
|
|
|
+ worldPositionBlock.connectTo(transformBlock);
|
|
|
+ worldMatrixBlock.connectTo(transformBlock);
|
|
|
+
|
|
|
+ return transformBlock;
|
|
|
+ }
|
|
|
+ case "WorldNormalBlock": {
|
|
|
+ let worldNormalBlock = nodeMaterial.getInputBlockByPredicate(b => b.isAttribute && b.name === "normal");
|
|
|
+ if (!worldNormalBlock) {
|
|
|
+ worldNormalBlock = new InputBlock("normal");
|
|
|
+ worldNormalBlock.setAsAttribute("normal");
|
|
|
+ }
|
|
|
+
|
|
|
+ let worldMatrixBlock = nodeMaterial.getInputBlockByPredicate(b => b.isSystemValue && b.systemValue === NodeMaterialSystemValues.World);
|
|
|
+
|
|
|
+ if (!worldMatrixBlock) {
|
|
|
+ worldMatrixBlock = new InputBlock("World");
|
|
|
+ worldMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.World);
|
|
|
+ }
|
|
|
+
|
|
|
+ let transformBlock = new TransformBlock("World normal");
|
|
|
+ worldNormalBlock.connectTo(transformBlock);
|
|
|
+ worldMatrixBlock.connectTo(transformBlock);
|
|
|
+
|
|
|
+ return transformBlock;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static GetColorFromConnectionNodeType(type: NodeMaterialBlockConnectionPointTypes) {
|
|
|
+ let color = "Red";
|
|
|
+ switch (type) {
|
|
|
+ case NodeMaterialBlockConnectionPointTypes.Float:
|
|
|
+ color = "#cb9e27";
|
|
|
+ break;
|
|
|
+ case NodeMaterialBlockConnectionPointTypes.Vector2:
|
|
|
+ color = "#16bcb1";
|
|
|
+ break;
|
|
|
+ case NodeMaterialBlockConnectionPointTypes.Vector3:
|
|
|
+ case NodeMaterialBlockConnectionPointTypes.Color3:
|
|
|
+ color = "#b786cb";
|
|
|
+ break;
|
|
|
+ case NodeMaterialBlockConnectionPointTypes.Vector4:
|
|
|
+ case NodeMaterialBlockConnectionPointTypes.Color4:
|
|
|
+ color = "#be5126";
|
|
|
+ break;
|
|
|
+ case NodeMaterialBlockConnectionPointTypes.Matrix:
|
|
|
+ color = "#591990";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return color;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static GetConnectionNodeTypeFromString(type: string) {
|
|
|
+ switch (type) {
|
|
|
+ case "Float":
|
|
|
+ return NodeMaterialBlockConnectionPointTypes.Float;
|
|
|
+ case "Vector2":
|
|
|
+ return NodeMaterialBlockConnectionPointTypes.Vector2;
|
|
|
+ case "Vector3":
|
|
|
+ return NodeMaterialBlockConnectionPointTypes.Vector3;
|
|
|
+ case "Vector4":
|
|
|
+ return NodeMaterialBlockConnectionPointTypes.Vector4;
|
|
|
+ case "Matrix":
|
|
|
+ return NodeMaterialBlockConnectionPointTypes.Matrix;
|
|
|
+ case "Color3":
|
|
|
+ return NodeMaterialBlockConnectionPointTypes.Color3;
|
|
|
+ case "Color4":
|
|
|
+ return NodeMaterialBlockConnectionPointTypes.Color4;
|
|
|
+ }
|
|
|
+
|
|
|
+ return NodeMaterialBlockConnectionPointTypes.AutoDetect;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static GetStringFromConnectionNodeType(type: NodeMaterialBlockConnectionPointTypes) {
|
|
|
+ switch (type){
|
|
|
+ case NodeMaterialBlockConnectionPointTypes.Float:
|
|
|
+ return "Float";
|
|
|
+ case NodeMaterialBlockConnectionPointTypes.Vector2:
|
|
|
+ return "Vector2";
|
|
|
+ case NodeMaterialBlockConnectionPointTypes.Vector3:
|
|
|
+ return "Vector3";
|
|
|
+ case NodeMaterialBlockConnectionPointTypes.Vector4:
|
|
|
+ return "Vector4";
|
|
|
+ case NodeMaterialBlockConnectionPointTypes.Color3:
|
|
|
+ return "Color3";
|
|
|
+ case NodeMaterialBlockConnectionPointTypes.Color4:
|
|
|
+ return "Color4";
|
|
|
+ case NodeMaterialBlockConnectionPointTypes.Matrix:
|
|
|
+ return "Matrix";
|
|
|
+ }
|
|
|
+
|
|
|
+ return "";
|
|
|
+ }
|
|
|
}
|