blockTools.ts 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512
  1. import { DiscardBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/discardBlock';
  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/Enums/nodeMaterialBlockConnectionPointTypes';
  27. import { FresnelBlock } from 'babylonjs/Materials/Node/Blocks/fresnelBlock';
  28. import { LerpBlock } from 'babylonjs/Materials/Node/Blocks/lerpBlock';
  29. import { NLerpBlock } from 'babylonjs/Materials/Node/Blocks/nLerpBlock';
  30. import { DivideBlock } from 'babylonjs/Materials/Node/Blocks/divideBlock';
  31. import { SubtractBlock } from 'babylonjs/Materials/Node/Blocks/subtractBlock';
  32. import { StepBlock } from 'babylonjs/Materials/Node/Blocks/stepBlock';
  33. import { SmoothStepBlock } from 'babylonjs/Materials/Node/Blocks/smoothStepBlock';
  34. import { InputBlock } from 'babylonjs/Materials/Node/Blocks/Input/inputBlock';
  35. import { NodeMaterialSystemValues } from 'babylonjs/Materials/Node/Enums/nodeMaterialSystemValues';
  36. import { AnimatedInputBlockTypes } from 'babylonjs/Materials/Node/Blocks/Input/animatedInputBlockTypes';
  37. import { OneMinusBlock } from 'babylonjs/Materials/Node/Blocks/oneMinusBlock';
  38. import { ViewDirectionBlock } from 'babylonjs/Materials/Node/Blocks/viewDirectionBlock';
  39. import { LightInformationBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/lightInformationBlock';
  40. import { MaxBlock } from 'babylonjs/Materials/Node/Blocks/maxBlock';
  41. import { MinBlock } from 'babylonjs/Materials/Node/Blocks/minBlock';
  42. import { PerturbNormalBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/perturbNormalBlock';
  43. import { LengthBlock } from 'babylonjs/Materials/Node/Blocks/lengthBlock';
  44. import { DistanceBlock } from 'babylonjs/Materials/Node/Blocks/distanceBlock';
  45. import { FrontFacingBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/frontFacingBlock';
  46. import { NegateBlock } from 'babylonjs/Materials/Node/Blocks/negateBlock';
  47. import { PowBlock } from 'babylonjs/Materials/Node/Blocks/powBlock';
  48. import { Scene } from 'babylonjs/scene';
  49. import { RandomNumberBlock } from 'babylonjs/Materials/Node/Blocks/randomNumberBlock';
  50. import { ReplaceColorBlock } from 'babylonjs/Materials/Node/Blocks/replaceColorBlock';
  51. import { PosterizeBlock } from 'babylonjs/Materials/Node/Blocks/posterizeBlock';
  52. import { ArcTan2Block } from 'babylonjs/Materials/Node/Blocks/arcTan2Block';
  53. import { ReciprocalBlock } from 'babylonjs/Materials/Node/Blocks/reciprocalBlock';
  54. import { GradientBlock } from 'babylonjs/Materials/Node/Blocks/gradientBlock';
  55. import { WaveBlock, WaveBlockKind } from 'babylonjs/Materials/Node/Blocks/waveBlock';
  56. import { NodeMaterial } from 'babylonjs/Materials/Node/nodeMaterial';
  57. import { WorleyNoise3DBlock } from 'babylonjs/Materials/Node/Blocks/worleyNoise3DBlock';
  58. import { SimplexPerlin3DBlock } from 'babylonjs/Materials/Node/Blocks/simplexPerlin3DBlock';
  59. import { NormalBlendBlock } from 'babylonjs/Materials/Node/Blocks/normalBlendBlock';
  60. import { Rotate2dBlock } from 'babylonjs/Materials/Node/Blocks/rotate2dBlock';
  61. import { DerivativeBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/derivativeBlock';
  62. import { RefractBlock } from 'babylonjs/Materials/Node/Blocks/refractBlock';
  63. import { ReflectBlock } from 'babylonjs/Materials/Node/Blocks/reflectBlock';
  64. import { DesaturateBlock } from 'babylonjs/Materials/Node/Blocks/desaturateBlock';
  65. import { PBRMetallicRoughnessBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/pbrMetallicRoughnessBlock';
  66. import { SheenBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/sheenBlock';
  67. export class BlockTools {
  68. public static GetBlockFromString(data: string, scene: Scene, nodeMaterial: NodeMaterial) {
  69. switch (data) {
  70. case "DesaturateBlock":
  71. return new DesaturateBlock("Desaturate");
  72. case "RefractBlock":
  73. return new RefractBlock("Refract");
  74. case "ReflectBlock":
  75. return new ReflectBlock("Reflect");
  76. case "DerivativeBlock":
  77. return new DerivativeBlock("Derivative");
  78. case "Rotate2dBlock":
  79. return new Rotate2dBlock("Rotate2d");
  80. case "NormalBlendBlock":
  81. return new NormalBlendBlock("NormalBlend");
  82. case "WorleyNoise3DBlock":
  83. return new WorleyNoise3DBlock("WorleyNoise3D");
  84. case "SimplexPerlin3DBlock":
  85. return new SimplexPerlin3DBlock("SimplexPerlin3D");
  86. case "BonesBlock":
  87. return new BonesBlock("Bones");
  88. case "InstancesBlock":
  89. return new InstancesBlock("Instances");
  90. case "MorphTargetsBlock":
  91. return new MorphTargetsBlock("MorphTargets");
  92. case "DiscardBlock":
  93. return new DiscardBlock("Discard");
  94. case "ImageProcessingBlock":
  95. return new ImageProcessingBlock("ImageProcessing");
  96. case "ColorMergerBlock":
  97. return new ColorMergerBlock("ColorMerger");
  98. case "VectorMergerBlock":
  99. return new VectorMergerBlock("VectorMerger");
  100. case "ColorSplitterBlock":
  101. return new ColorSplitterBlock("ColorSplitter");
  102. case "VectorSplitterBlock":
  103. return new VectorSplitterBlock("VectorSplitter");
  104. case "TextureBlock":
  105. return new TextureBlock("Texture");
  106. case "ReflectionTextureBlock":
  107. return new ReflectionTextureBlock("Reflection texture");
  108. case "LightBlock":
  109. return new LightBlock("Lights");
  110. case "FogBlock":
  111. return new FogBlock("Fog");
  112. case "VertexOutputBlock":
  113. return new VertexOutputBlock("VertexOutput");
  114. case "FragmentOutputBlock":
  115. return new FragmentOutputBlock("FragmentOutput");
  116. case "AddBlock":
  117. return new AddBlock("Add");
  118. case "ClampBlock":
  119. return new ClampBlock("Clamp");
  120. case "ScaleBlock":
  121. return new ScaleBlock("Scale");
  122. case "CrossBlock":
  123. return new CrossBlock("Cross");
  124. case "DotBlock":
  125. return new DotBlock("Dot");
  126. case "PowBlock":
  127. return new PowBlock("Pow");
  128. case "MultiplyBlock":
  129. return new MultiplyBlock("Multiply");
  130. case "TransformBlock":
  131. return new TransformBlock("Transform");
  132. case "TrigonometryBlock":
  133. return new TrigonometryBlock("Trigonometry");
  134. case "RemapBlock":
  135. return new RemapBlock("Remap");
  136. case "NormalizeBlock":
  137. return new NormalizeBlock("Normalize");
  138. case "FresnelBlock":
  139. return new FresnelBlock("Fresnel");
  140. case "LerpBlock":
  141. return new LerpBlock("Lerp");
  142. case "NLerpBlock":
  143. return new NLerpBlock("NLerp");
  144. case "DivideBlock":
  145. return new DivideBlock("Divide");
  146. case "SubtractBlock":
  147. return new SubtractBlock("Subtract");
  148. case "StepBlock":
  149. return new StepBlock("Step");
  150. case "SmoothStepBlock":
  151. return new SmoothStepBlock("Smooth step");
  152. case "OneMinusBlock":
  153. return new OneMinusBlock("One minus");
  154. case "ReciprocalBlock":
  155. return new ReciprocalBlock("Reciprocal");
  156. case "ViewDirectionBlock":
  157. return new ViewDirectionBlock("View direction");
  158. case "LightInformationBlock":
  159. let lightInformationBlock = new LightInformationBlock("Light information");
  160. lightInformationBlock.light = scene.lights.length ? scene.lights[0] : null;
  161. return lightInformationBlock;
  162. case "MaxBlock":
  163. return new MaxBlock("Max");
  164. case "MinBlock":
  165. return new MinBlock("Min");
  166. case "LengthBlock":
  167. return new LengthBlock("Length");
  168. case "DistanceBlock":
  169. return new DistanceBlock("Distance");
  170. case "NegateBlock":
  171. return new NegateBlock("Negate");
  172. case "PerturbNormalBlock":
  173. return new PerturbNormalBlock("Perturb normal");
  174. case "RandomNumberBlock":
  175. return new RandomNumberBlock("Random number");
  176. case "ReplaceColorBlock":
  177. return new ReplaceColorBlock("Replace color");
  178. case "PosterizeBlock":
  179. return new PosterizeBlock("Posterize");
  180. case "ArcTan2Block":
  181. return new ArcTan2Block("ArcTan2");
  182. case "GradientBlock":
  183. return new GradientBlock("Gradient");
  184. case "FrontFacingBlock":
  185. return new FrontFacingBlock("Front facing");
  186. case "CosBlock": {
  187. let cosBlock = new TrigonometryBlock("Cos");
  188. cosBlock.operation = TrigonometryBlockOperations.Cos;
  189. return cosBlock;
  190. }
  191. case "SinBlock": {
  192. let sinBlock = new TrigonometryBlock("Sin");
  193. sinBlock.operation = TrigonometryBlockOperations.Sin;
  194. return sinBlock;
  195. }
  196. case "AbsBlock": {
  197. let absBlock = new TrigonometryBlock("Abs");
  198. absBlock.operation = TrigonometryBlockOperations.Abs;
  199. return absBlock;
  200. }
  201. case "SqrtBlock": {
  202. let sqrtBlock = new TrigonometryBlock("Sqrt");
  203. sqrtBlock.operation = TrigonometryBlockOperations.Sqrt;
  204. return sqrtBlock;
  205. }
  206. case "ArcCosBlock": {
  207. let acosBlock = new TrigonometryBlock("ArcCos");
  208. acosBlock.operation = TrigonometryBlockOperations.ArcCos;
  209. return acosBlock;
  210. }
  211. case "ArcSinBlock": {
  212. let asinBlock = new TrigonometryBlock("ArcSin");
  213. asinBlock.operation = TrigonometryBlockOperations.ArcSin;
  214. return asinBlock;
  215. }
  216. case "TanBlock": {
  217. let tanBlock = new TrigonometryBlock("Tan");
  218. tanBlock.operation = TrigonometryBlockOperations.Tan;
  219. return tanBlock;
  220. }
  221. case "ArcTanBlock": {
  222. let atanBlock = new TrigonometryBlock("ArcTan");
  223. atanBlock.operation = TrigonometryBlockOperations.ArcTan;
  224. return atanBlock;
  225. }
  226. case "FractBlock": {
  227. let fractBlock = new TrigonometryBlock("Fract");
  228. fractBlock.operation = TrigonometryBlockOperations.Fract;
  229. return fractBlock;
  230. }
  231. case "SignBlock": {
  232. let signBlock = new TrigonometryBlock("Sign");
  233. signBlock.operation = TrigonometryBlockOperations.Sign;
  234. return signBlock;
  235. }
  236. case "LogBlock": {
  237. let logBlock = new TrigonometryBlock("Log");
  238. logBlock.operation = TrigonometryBlockOperations.Log;
  239. return logBlock;
  240. }
  241. case "ExpBlock": {
  242. let expBlock = new TrigonometryBlock("Exp");
  243. expBlock.operation = TrigonometryBlockOperations.Exp;
  244. return expBlock;
  245. }
  246. case "Exp2Block": {
  247. let exp2Block = new TrigonometryBlock("Exp2");
  248. exp2Block.operation = TrigonometryBlockOperations.Exp2;
  249. return exp2Block;
  250. }
  251. case "DegreesToRadiansBlock": {
  252. let degreesToRadiansBlock = new TrigonometryBlock("Degrees to radians");
  253. degreesToRadiansBlock.operation = TrigonometryBlockOperations.Radians;
  254. return degreesToRadiansBlock;
  255. }
  256. case "RadiansToDegreesBlock": {
  257. let radiansToDegreesBlock = new TrigonometryBlock("Radians to degrees");
  258. radiansToDegreesBlock.operation = TrigonometryBlockOperations.Degrees;
  259. return radiansToDegreesBlock;
  260. }
  261. case "RoundBlock": {
  262. let roundBlock = new TrigonometryBlock("Round");
  263. roundBlock.operation = TrigonometryBlockOperations.Round;
  264. return roundBlock;
  265. }
  266. case "CeilingBlock": {
  267. let ceilingBlock = new TrigonometryBlock("Ceiling");
  268. ceilingBlock.operation = TrigonometryBlockOperations.Ceiling;
  269. return ceilingBlock;
  270. }
  271. case "FloorBlock": {
  272. let floorBlock = new TrigonometryBlock("Floor");
  273. floorBlock.operation = TrigonometryBlockOperations.Floor;
  274. return floorBlock;
  275. }
  276. case "SawToothWaveBlock": {
  277. let sawToothWaveBlock = new WaveBlock("SawTooth wave");
  278. sawToothWaveBlock.kind = WaveBlockKind.SawTooth;
  279. return sawToothWaveBlock;
  280. }
  281. case "SquareWaveBlock": {
  282. let squareWaveBlock = new WaveBlock("Square wave");
  283. squareWaveBlock.kind = WaveBlockKind.Square;
  284. return squareWaveBlock;
  285. }
  286. case "TriangleWaveBlock": {
  287. let triangleWaveBlock = new WaveBlock("Triangle wave");
  288. triangleWaveBlock.kind = WaveBlockKind.Triangle;
  289. return triangleWaveBlock;
  290. }
  291. case "WorldMatrixBlock": {
  292. let worldMatrixBlock = new InputBlock("World");
  293. worldMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.World);
  294. return worldMatrixBlock;
  295. }
  296. case "WorldViewMatrixBlock": {
  297. let worldViewMatrixBlock = new InputBlock("World x View");
  298. worldViewMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.WorldView);
  299. return worldViewMatrixBlock;
  300. }
  301. case "WorldViewProjectionMatrixBlock": {
  302. let worldViewProjectionMatrixBlock = new InputBlock("World x View x Projection");
  303. worldViewProjectionMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.WorldViewProjection);
  304. return worldViewProjectionMatrixBlock;
  305. }
  306. case "ViewMatrixBlock": {
  307. let viewMatrixBlock = new InputBlock("View");
  308. viewMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.View);
  309. return viewMatrixBlock;
  310. }
  311. case "ViewProjectionMatrixBlock": {
  312. let viewProjectionMatrixBlock = new InputBlock("View x Projection");
  313. viewProjectionMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.ViewProjection);
  314. return viewProjectionMatrixBlock;
  315. }
  316. case "ProjectionMatrixBlock": {
  317. let projectionMatrixBlock = new InputBlock("Projection");
  318. projectionMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.Projection);
  319. return projectionMatrixBlock;
  320. }
  321. case "CameraPositionBlock": {
  322. let cameraPosition = new InputBlock("Camera position");
  323. cameraPosition.setAsSystemValue(NodeMaterialSystemValues.CameraPosition);
  324. return cameraPosition;
  325. }
  326. case "FogColorBlock": {
  327. let FogColor = new InputBlock("Fog color");
  328. FogColor.setAsSystemValue(NodeMaterialSystemValues.FogColor);
  329. return FogColor;
  330. }
  331. case "PositionBlock": {
  332. let meshPosition = new InputBlock("position");
  333. meshPosition.setAsAttribute("position");
  334. return meshPosition;
  335. }
  336. case "UVBlock": {
  337. let meshUV = new InputBlock("uv");
  338. meshUV.setAsAttribute("uv");
  339. return meshUV;
  340. }
  341. case "ColorBlock": {
  342. let meshColor = new InputBlock("color");
  343. meshColor.setAsAttribute("color");
  344. return meshColor;
  345. }
  346. case "NormalBlock": {
  347. let meshNormal = new InputBlock("normal");
  348. meshNormal.setAsAttribute("normal");
  349. return meshNormal;
  350. }
  351. case "TangentBlock": {
  352. let meshTangent = new InputBlock("tangent");
  353. meshTangent.setAsAttribute("tangent");
  354. return meshTangent;
  355. }
  356. case "MatrixIndicesBlock": {
  357. let meshMatrixIndices = new InputBlock("matricesIndices");
  358. meshMatrixIndices.setAsAttribute("matricesIndices");
  359. return meshMatrixIndices;
  360. }
  361. case "MatrixWeightsBlock": {
  362. let meshMatrixWeights = new InputBlock("matricesWeights");
  363. meshMatrixWeights.setAsAttribute("matricesWeights");
  364. return meshMatrixWeights;
  365. }
  366. case "TimeBlock": {
  367. let timeBlock = new InputBlock("Time", undefined, NodeMaterialBlockConnectionPointTypes.Float);
  368. timeBlock.animationType = AnimatedInputBlockTypes.Time;
  369. return timeBlock;
  370. }
  371. case "DeltaTimeBlock": {
  372. let deltaTimeBlock = new InputBlock("Delta time");
  373. deltaTimeBlock.setAsSystemValue(NodeMaterialSystemValues.DeltaTime);
  374. return deltaTimeBlock;
  375. }
  376. case "WorldPositionBlock": {
  377. let worldPositionBlock = nodeMaterial.getInputBlockByPredicate(b => b.isAttribute && b.name === "position");
  378. if (!worldPositionBlock) {
  379. worldPositionBlock = new InputBlock("position");
  380. worldPositionBlock.setAsAttribute("position");
  381. }
  382. let worldMatrixBlock = nodeMaterial.getInputBlockByPredicate(b => b.isSystemValue && b.systemValue === NodeMaterialSystemValues.World);
  383. if (!worldMatrixBlock) {
  384. worldMatrixBlock = new InputBlock("World");
  385. worldMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.World);
  386. }
  387. let transformBlock = new TransformBlock("World position");
  388. worldPositionBlock.connectTo(transformBlock);
  389. worldMatrixBlock.connectTo(transformBlock);
  390. return transformBlock;
  391. }
  392. case "WorldNormalBlock": {
  393. let worldNormalBlock = nodeMaterial.getInputBlockByPredicate(b => b.isAttribute && b.name === "normal");
  394. if (!worldNormalBlock) {
  395. worldNormalBlock = new InputBlock("normal");
  396. worldNormalBlock.setAsAttribute("normal");
  397. }
  398. let worldMatrixBlock = nodeMaterial.getInputBlockByPredicate(b => b.isSystemValue && b.systemValue === NodeMaterialSystemValues.World);
  399. if (!worldMatrixBlock) {
  400. worldMatrixBlock = new InputBlock("World");
  401. worldMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.World);
  402. }
  403. let transformBlock = new TransformBlock("World normal");
  404. worldNormalBlock.connectTo(transformBlock);
  405. worldMatrixBlock.connectTo(transformBlock);
  406. return transformBlock;
  407. }
  408. case "WorldTangentBlock": {
  409. let worldTangentBlock = nodeMaterial.getInputBlockByPredicate(b => b.isAttribute && b.name === "tangent");
  410. if (!worldTangentBlock) {
  411. worldTangentBlock = new InputBlock("tangent");
  412. worldTangentBlock.setAsAttribute("tangent");
  413. }
  414. let worldMatrixBlock = nodeMaterial.getInputBlockByPredicate(b => b.isSystemValue && b.systemValue === NodeMaterialSystemValues.World);
  415. if (!worldMatrixBlock) {
  416. worldMatrixBlock = new InputBlock("World");
  417. worldMatrixBlock.setAsSystemValue(NodeMaterialSystemValues.World);
  418. }
  419. let transformBlock = new TransformBlock("World tangent");
  420. worldTangentBlock.connectTo(transformBlock);
  421. worldMatrixBlock.connectTo(transformBlock);
  422. return transformBlock;
  423. }
  424. case "PBRMetallicRoughnessBlock":
  425. return new PBRMetallicRoughnessBlock("PBRMetallicRoughness");
  426. case "SheenBlock":
  427. return new SheenBlock("Sheen");
  428. }
  429. return null;
  430. }
  431. public static GetColorFromConnectionNodeType(type: NodeMaterialBlockConnectionPointTypes) {
  432. let color = "#880000";
  433. switch (type) {
  434. case NodeMaterialBlockConnectionPointTypes.Float:
  435. color = "#cb9e27";
  436. break;
  437. case NodeMaterialBlockConnectionPointTypes.Vector2:
  438. color = "#16bcb1";
  439. break;
  440. case NodeMaterialBlockConnectionPointTypes.Vector3:
  441. case NodeMaterialBlockConnectionPointTypes.Color3:
  442. color = "#b786cb";
  443. break;
  444. case NodeMaterialBlockConnectionPointTypes.Vector4:
  445. case NodeMaterialBlockConnectionPointTypes.Color4:
  446. color = "#be5126";
  447. break;
  448. case NodeMaterialBlockConnectionPointTypes.Matrix:
  449. color = "#591990";
  450. break;
  451. }
  452. return color;
  453. }
  454. public static GetConnectionNodeTypeFromString(type: string) {
  455. switch (type) {
  456. case "Float":
  457. return NodeMaterialBlockConnectionPointTypes.Float;
  458. case "Vector2":
  459. return NodeMaterialBlockConnectionPointTypes.Vector2;
  460. case "Vector3":
  461. return NodeMaterialBlockConnectionPointTypes.Vector3;
  462. case "Vector4":
  463. return NodeMaterialBlockConnectionPointTypes.Vector4;
  464. case "Matrix":
  465. return NodeMaterialBlockConnectionPointTypes.Matrix;
  466. case "Color3":
  467. return NodeMaterialBlockConnectionPointTypes.Color3;
  468. case "Color4":
  469. return NodeMaterialBlockConnectionPointTypes.Color4;
  470. }
  471. return NodeMaterialBlockConnectionPointTypes.AutoDetect;
  472. }
  473. public static GetStringFromConnectionNodeType(type: NodeMaterialBlockConnectionPointTypes) {
  474. switch (type){
  475. case NodeMaterialBlockConnectionPointTypes.Float:
  476. return "Float";
  477. case NodeMaterialBlockConnectionPointTypes.Vector2:
  478. return "Vector2";
  479. case NodeMaterialBlockConnectionPointTypes.Vector3:
  480. return "Vector3";
  481. case NodeMaterialBlockConnectionPointTypes.Vector4:
  482. return "Vector4";
  483. case NodeMaterialBlockConnectionPointTypes.Color3:
  484. return "Color3";
  485. case NodeMaterialBlockConnectionPointTypes.Color4:
  486. return "Color4";
  487. case NodeMaterialBlockConnectionPointTypes.Matrix:
  488. return "Matrix";
  489. }
  490. return "";
  491. }
  492. }