blockTools.ts 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. import { AlphaTestBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/alphaTestBlock';
  2. import { BonesBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/bonesBlock';
  3. import { InstancesBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/instancesBlock';
  4. import { MorphTargetsBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/morphTargetsBlock';
  5. import { ImageProcessingBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/imageProcessingBlock';
  6. import { ColorMergerBlock } from 'babylonjs/Materials/Node/Blocks/colorMergerBlock';
  7. import { VectorMergerBlock } from 'babylonjs/Materials/Node/Blocks/vectorMergerBlock';
  8. import { ColorSplitterBlock } from 'babylonjs/Materials/Node/Blocks/colorSplitterBlock';
  9. import { VectorSplitterBlock } from 'babylonjs/Materials/Node/Blocks/vectorSplitterBlock';
  10. import { RemapBlock } from 'babylonjs/Materials/Node/Blocks/remapBlock';
  11. import { TextureBlock } from 'babylonjs/Materials/Node/Blocks/Dual/textureBlock';
  12. import { ReflectionTextureBlock } from 'babylonjs/Materials/Node/Blocks/Dual/reflectionTextureBlock';
  13. import { LightBlock } from 'babylonjs/Materials/Node/Blocks/Dual/lightBlock';
  14. import { FogBlock } from 'babylonjs/Materials/Node/Blocks/Dual/fogBlock';
  15. import { VertexOutputBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/vertexOutputBlock';
  16. import { FragmentOutputBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/fragmentOutputBlock';
  17. import { NormalizeBlock } from 'babylonjs/Materials/Node/Blocks/normalizeBlock';
  18. import { AddBlock } from 'babylonjs/Materials/Node/Blocks/addBlock';
  19. import { ScaleBlock } from 'babylonjs/Materials/Node/Blocks/scaleBlock';
  20. import { TrigonometryBlock, TrigonometryBlockOperations } from 'babylonjs/Materials/Node/Blocks/trigonometryBlock';
  21. import { ClampBlock } from 'babylonjs/Materials/Node/Blocks/clampBlock';
  22. import { CrossBlock } from 'babylonjs/Materials/Node/Blocks/crossBlock';
  23. import { DotBlock } from 'babylonjs/Materials/Node/Blocks/dotBlock';
  24. import { MultiplyBlock } from 'babylonjs/Materials/Node/Blocks/multiplyBlock';
  25. import { TransformBlock } from 'babylonjs/Materials/Node/Blocks/transformBlock';
  26. import { NodeMaterialBlockConnectionPointTypes } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPointTypes';
  27. import { FresnelBlock } from 'babylonjs/Materials/Node/Blocks/fresnelBlock';
  28. import { LerpBlock } from 'babylonjs/Materials/Node/Blocks/lerpBlock';
  29. import { DivideBlock } from 'babylonjs/Materials/Node/Blocks/divideBlock';
  30. import { SubtractBlock } from 'babylonjs/Materials/Node/Blocks/subtractBlock';
  31. import { StepBlock } from 'babylonjs/Materials/Node/Blocks/stepBlock';
  32. import { InputBlock } from 'babylonjs/Materials/Node/Blocks/Input/inputBlock';
  33. import { NodeMaterialSystemValues } from 'babylonjs/Materials/Node/nodeMaterialSystemValues';
  34. import { AnimatedInputBlockTypes } from 'babylonjs/Materials/Node/Blocks/Input/animatedInputBlockTypes';
  35. import { OneMinusBlock } from 'babylonjs/Materials/Node/Blocks/oneMinusBlock';
  36. import { ViewDirectionBlock } from 'babylonjs/Materials/Node/Blocks/viewDirectionBlock';
  37. import { LightInformationBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/lightInformationBlock';
  38. import { MaxBlock } from 'babylonjs/Materials/Node/Blocks/maxBlock';
  39. import { MinBlock } from 'babylonjs/Materials/Node/Blocks/minBlock';
  40. import { PerturbNormalBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/perturbNormalBlock';
  41. export class BlockTools {
  42. public static GetBlockFromString(data: string) {
  43. switch (data) {
  44. case "BonesBlock":
  45. return new BonesBlock("Bones");
  46. case "InstancesBlock":
  47. return new InstancesBlock("Instances");
  48. case "MorphTargetsBlock":
  49. return new MorphTargetsBlock("MorphTargets");
  50. case "AlphaTestBlock":
  51. return new AlphaTestBlock("AlphaTest");
  52. case "ImageProcessingBlock":
  53. return new ImageProcessingBlock("ImageProcessing");
  54. case "ColorMergerBlock":
  55. return new ColorMergerBlock("ColorMerger");
  56. case "VectorMergerBlock":
  57. return new VectorMergerBlock("VectorMerger");
  58. case "ColorSplitterBlock":
  59. return new ColorSplitterBlock("ColorSplitter");
  60. case "VectorSplitterBlock":
  61. return new VectorSplitterBlock("VectorSplitter");
  62. case "TextureBlock":
  63. return new TextureBlock("Texture");
  64. case "ReflectionTextureBlock":
  65. return new ReflectionTextureBlock("Texture");
  66. case "LightBlock":
  67. return new LightBlock("Lights");
  68. case "FogBlock":
  69. return new FogBlock("Fog");
  70. case "VertexOutputBlock":
  71. return new VertexOutputBlock("VertexOutput");
  72. case "FragmentOutputBlock":
  73. return new FragmentOutputBlock("FragmentOutput");
  74. case "AddBlock":
  75. return new AddBlock("Add");
  76. case "ClampBlock":
  77. return new ClampBlock("Clamp");
  78. case "ScaleBlock":
  79. return new ScaleBlock("Scale");
  80. case "CrossBlock":
  81. return new CrossBlock("Dot");
  82. case "DotBlock":
  83. return new DotBlock("Dot");
  84. case "MultiplyBlock":
  85. return new MultiplyBlock("Multiply");
  86. case "TransformBlock":
  87. return new TransformBlock("Transform");
  88. case "TrigonometryBlock":
  89. return new TrigonometryBlock("Trigonometry");
  90. case "RemapBlock":
  91. return new RemapBlock("Remap");
  92. case "NormalizeBlock":
  93. return new NormalizeBlock("Normalize");
  94. case "FresnelBlock":
  95. return new FresnelBlock("Fresnel");
  96. case "LerpBlock":
  97. return new LerpBlock("Lerp");
  98. case "DivideBlock":
  99. return new DivideBlock("Divide");
  100. case "SubtractBlock":
  101. return new SubtractBlock("Subtract");
  102. case "StepBlock":
  103. return new StepBlock("Step");
  104. case "OneMinusBlock":
  105. return new OneMinusBlock("One minus");
  106. case "ViewDirectionBlock":
  107. return new ViewDirectionBlock("View direction");
  108. case "LightInformationBlock":
  109. return new LightInformationBlock("Light information");
  110. case "MaxBlock":
  111. return new MaxBlock("Max");
  112. case "MinBlock":
  113. return new MinBlock("Min");
  114. case "PerturbNormalBlock":
  115. return new PerturbNormalBlock("Perturb normal");
  116. case "CosBlock": {
  117. let cosBlock = new TrigonometryBlock("Cos");
  118. cosBlock.operation = TrigonometryBlockOperations.Cos;
  119. return cosBlock;
  120. }
  121. case "SinBlock": {
  122. let sinBlock = new TrigonometryBlock("Sin");
  123. sinBlock.operation = TrigonometryBlockOperations.Sin;
  124. return sinBlock;
  125. }
  126. case "AbsBlock": {
  127. let absBlock = new TrigonometryBlock("Abs");
  128. absBlock.operation = TrigonometryBlockOperations.Abs;
  129. return absBlock;
  130. }
  131. case "ExpBlock": {
  132. let expBlock = new TrigonometryBlock("Exp");
  133. expBlock.operation = TrigonometryBlockOperations.Exp;
  134. return expBlock;
  135. }
  136. case "Exp2Block": {
  137. let exp2Block = new TrigonometryBlock("Exp2");
  138. exp2Block.operation = TrigonometryBlockOperations.Exp2;
  139. return exp2Block;
  140. }
  141. case "RoundBlock": {
  142. let roundBlock = new TrigonometryBlock("Round");
  143. roundBlock.operation = TrigonometryBlockOperations.Round;
  144. return roundBlock;
  145. }
  146. case "CeilingBlock": {
  147. let ceilingBlock = new TrigonometryBlock("Ceiling");
  148. ceilingBlock.operation = TrigonometryBlockOperations.Ceiling;
  149. return ceilingBlock;
  150. }
  151. case "FloorBlock": {
  152. let floorBlock = new TrigonometryBlock("Floor");
  153. floorBlock.operation = TrigonometryBlockOperations.Floor;
  154. return floorBlock;
  155. }
  156. case "WorldMatrixBlock": {
  157. let worldMatrixBlock = new InputBlock("World");
  158. worldMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.World);
  159. return worldMatrixBlock;
  160. }
  161. case "WorldViewMatrixBlock": {
  162. let worldViewMatrixBlock = new InputBlock("World x View");
  163. worldViewMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.WorldView);
  164. return worldViewMatrixBlock;
  165. }
  166. case "WorldViewProjectionMatrixBlock": {
  167. let worldViewProjectionMatrixBlock = new InputBlock("World x View x Projection");
  168. worldViewProjectionMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.WorldViewProjection);
  169. return worldViewProjectionMatrixBlock;
  170. }
  171. case "ViewMatrixBlock": {
  172. let viewMatrixBlock = new InputBlock("View");
  173. viewMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.View);
  174. return viewMatrixBlock;
  175. }
  176. case "ViewProjectionMatrixBlock": {
  177. let viewProjectionMatrixBlock = new InputBlock("View x Projection");
  178. viewProjectionMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.ViewProjection);
  179. return viewProjectionMatrixBlock;
  180. }
  181. case "ProjectionMatrixBlock": {
  182. let projectionMatrixBlock = new InputBlock("Projection");
  183. projectionMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.Projection);
  184. return projectionMatrixBlock;
  185. }
  186. case "CameraPositionBlock": {
  187. let cameraPosition = new InputBlock("Camera position");
  188. cameraPosition.setAsSystemValue(NodeMaterialSystemValues.CameraPosition);
  189. return cameraPosition;
  190. }
  191. case "FogColorBlock": {
  192. let FogColor = new InputBlock("Fog color");
  193. FogColor.setAsSystemValue(NodeMaterialSystemValues.FogColor);
  194. return FogColor;
  195. }
  196. case "PositionBlock": {
  197. let meshPosition = new InputBlock("position");
  198. meshPosition.setAsAttribute("position");
  199. return meshPosition;
  200. }
  201. case "UVBlock": {
  202. let meshUV = new InputBlock("uv");
  203. meshUV.setAsAttribute("uv");
  204. return meshUV;
  205. }
  206. case "ColorBlock": {
  207. let meshColor = new InputBlock("color");
  208. meshColor.setAsAttribute("color");
  209. return meshColor;
  210. }
  211. case "NormalBlock": {
  212. let meshNormal = new InputBlock("normal");
  213. meshNormal.setAsAttribute("normal");
  214. return meshNormal;
  215. }
  216. case "TangentBlock": {
  217. let meshTangent = new InputBlock("tangent");
  218. meshTangent.setAsAttribute("tangent");
  219. return meshTangent;
  220. }
  221. case "MatrixIndicesBlock": {
  222. let meshMatrixIndices = new InputBlock("matricesIndices");
  223. meshMatrixIndices.setAsAttribute("matricesIndices");
  224. return meshMatrixIndices;
  225. }
  226. case "MatrixWeightsBlock": {
  227. let meshMatrixWeights = new InputBlock("matricesWeights");
  228. meshMatrixWeights.setAsAttribute("matricesWeights");
  229. return meshMatrixWeights;
  230. }
  231. case "TimeBlock": {
  232. let timeBlock = new InputBlock("Time", undefined, NodeMaterialBlockConnectionPointTypes.Float);
  233. timeBlock.animationType = AnimatedInputBlockTypes.Time;
  234. return timeBlock;
  235. }
  236. }
  237. return null;
  238. }
  239. public static GetColorFromConnectionNodeType(type: NodeMaterialBlockConnectionPointTypes) {
  240. let color = "Red";
  241. switch (type) {
  242. case NodeMaterialBlockConnectionPointTypes.Float:
  243. color = "#ca9e27";
  244. break;
  245. case NodeMaterialBlockConnectionPointTypes.Vector2:
  246. color = "#16bcb1";
  247. break;
  248. case NodeMaterialBlockConnectionPointTypes.Vector3:
  249. case NodeMaterialBlockConnectionPointTypes.Color3:
  250. color = "#b786cb";
  251. break;
  252. case NodeMaterialBlockConnectionPointTypes.Vector4:
  253. case NodeMaterialBlockConnectionPointTypes.Color4:
  254. color = "#be5126";
  255. break;
  256. case NodeMaterialBlockConnectionPointTypes.Matrix:
  257. color = "#591990";
  258. break;
  259. }
  260. return color;
  261. }
  262. public static GetConnectionNodeTypeFromString(type: string) {
  263. switch (type) {
  264. case "Float":
  265. return NodeMaterialBlockConnectionPointTypes.Float;
  266. case "Vector2":
  267. return NodeMaterialBlockConnectionPointTypes.Vector2;
  268. case "Vector3":
  269. return NodeMaterialBlockConnectionPointTypes.Vector3;
  270. case "Vector4":
  271. return NodeMaterialBlockConnectionPointTypes.Vector4;
  272. case "Matrix":
  273. return NodeMaterialBlockConnectionPointTypes.Matrix;
  274. case "Color3":
  275. return NodeMaterialBlockConnectionPointTypes.Color3;
  276. case "Color4":
  277. return NodeMaterialBlockConnectionPointTypes.Color4;
  278. }
  279. return NodeMaterialBlockConnectionPointTypes.AutoDetect;
  280. }
  281. public static GetStringFromConnectionNodeType(type: NodeMaterialBlockConnectionPointTypes) {
  282. switch (type){
  283. case NodeMaterialBlockConnectionPointTypes.Float:
  284. return "Float";
  285. case NodeMaterialBlockConnectionPointTypes.Vector2:
  286. return "Vector2";
  287. case NodeMaterialBlockConnectionPointTypes.Vector3:
  288. return "Vector3";
  289. case NodeMaterialBlockConnectionPointTypes.Vector4:
  290. return "Vector4";
  291. case NodeMaterialBlockConnectionPointTypes.Color3:
  292. return "Color3";
  293. case NodeMaterialBlockConnectionPointTypes.Color4:
  294. return "Color4";
  295. case NodeMaterialBlockConnectionPointTypes.Matrix:
  296. return "Matrix";
  297. }
  298. return "";
  299. }
  300. }