@babylonjs/core 8.6.1 → 8.6.2

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.
Files changed (119) hide show
  1. package/Collisions/gpuPicker.d.ts +1 -0
  2. package/Collisions/gpuPicker.js +14 -9
  3. package/Collisions/gpuPicker.js.map +1 -1
  4. package/Engines/abstractEngine.js +2 -2
  5. package/Engines/abstractEngine.js.map +1 -1
  6. package/Engines/constants.d.ts +12 -0
  7. package/Engines/constants.js +12 -0
  8. package/Engines/constants.js.map +1 -1
  9. package/Engines/webgpuEngine.js +5 -0
  10. package/Engines/webgpuEngine.js.map +1 -1
  11. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.d.ts +6 -0
  12. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.js +4 -1
  13. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.js.map +1 -1
  14. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.d.ts +5 -0
  15. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +23 -0
  16. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  17. package/Materials/Node/Blocks/PBR/reflectionBlock.js +6 -0
  18. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  19. package/Materials/PBR/pbrBaseMaterial.d.ts +24 -4
  20. package/Materials/PBR/pbrBaseMaterial.js +83 -8
  21. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  22. package/Materials/PBR/pbrMaterial.d.ts +17 -1
  23. package/Materials/PBR/pbrMaterial.js +21 -0
  24. package/Materials/PBR/pbrMaterial.js.map +1 -1
  25. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +5 -0
  26. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -1
  27. package/Materials/Textures/baseTexture.d.ts +8 -0
  28. package/Materials/Textures/baseTexture.js +7 -0
  29. package/Materials/Textures/baseTexture.js.map +1 -1
  30. package/Materials/materialFlags.d.ts +6 -0
  31. package/Materials/materialFlags.js +14 -0
  32. package/Materials/materialFlags.js.map +1 -1
  33. package/Misc/assetsManager.js +13 -23
  34. package/Misc/assetsManager.js.map +1 -1
  35. package/Misc/minMaxReducer.d.ts +1 -0
  36. package/Misc/minMaxReducer.js +3 -2
  37. package/Misc/minMaxReducer.js.map +1 -1
  38. package/Offline/database.js +25 -6
  39. package/Offline/database.js.map +1 -1
  40. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +1 -1
  41. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
  42. package/Rendering/iblCdfGenerator.d.ts +12 -0
  43. package/Rendering/iblCdfGenerator.js +67 -3
  44. package/Rendering/iblCdfGenerator.js.map +1 -1
  45. package/Rendering/iblCdfGeneratorSceneComponent.js +4 -0
  46. package/Rendering/iblCdfGeneratorSceneComponent.js.map +1 -1
  47. package/Rendering/index.d.ts +2 -0
  48. package/Rendering/index.js +2 -0
  49. package/Rendering/index.js.map +1 -1
  50. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +29 -9
  51. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  52. package/Shaders/ShadersInclude/lightFragment.js +4 -3
  53. package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
  54. package/Shaders/ShadersInclude/pbrBRDFFunctions.js +21 -0
  55. package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  56. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +2 -2
  57. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  58. package/Shaders/ShadersInclude/pbrBlockReflection.js +22 -1
  59. package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
  60. package/Shaders/ShadersInclude/pbrBlockReflectivity.js +11 -2
  61. package/Shaders/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
  62. package/Shaders/ShadersInclude/pbrBlockSubSurface.js +1 -1
  63. package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  64. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +16 -3
  65. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  66. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js +4 -4
  67. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
  68. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +8 -2
  69. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
  70. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +2 -1
  71. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  72. package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
  73. package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  74. package/Shaders/ShadersInclude/pbrVertexDeclaration.js +6 -2
  75. package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
  76. package/Shaders/hdrIrradianceFiltering.fragment.js +1 -1
  77. package/Shaders/hdrIrradianceFiltering.fragment.js.map +1 -1
  78. package/Shaders/iblDominantDirection.fragment.d.ts +9 -0
  79. package/Shaders/iblDominantDirection.fragment.js +22 -0
  80. package/Shaders/iblDominantDirection.fragment.js.map +1 -0
  81. package/Shaders/pbr.fragment.js +17 -3
  82. package/Shaders/pbr.fragment.js.map +1 -1
  83. package/Shaders/pbr.vertex.js +8 -2
  84. package/Shaders/pbr.vertex.js.map +1 -1
  85. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +28 -8
  86. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  87. package/ShadersWGSL/ShadersInclude/lightFragment.js +6 -5
  88. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  89. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js +21 -0
  90. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  91. package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.js +2 -2
  92. package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  93. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +23 -1
  94. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -1
  95. package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js +11 -1
  96. package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
  97. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js +1 -1
  98. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  99. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +19 -3
  100. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  101. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js +4 -1
  102. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
  103. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js +2 -1
  104. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  105. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js +1 -1
  106. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  107. package/ShadersWGSL/hdrIrradianceFiltering.fragment.js +1 -1
  108. package/ShadersWGSL/hdrIrradianceFiltering.fragment.js.map +1 -1
  109. package/ShadersWGSL/iblDominantDirection.fragment.d.ts +9 -0
  110. package/ShadersWGSL/iblDominantDirection.fragment.js +22 -0
  111. package/ShadersWGSL/iblDominantDirection.fragment.js.map +1 -0
  112. package/ShadersWGSL/minmaxRedux.fragment.d.ts +5 -0
  113. package/ShadersWGSL/minmaxRedux.fragment.js +32 -0
  114. package/ShadersWGSL/minmaxRedux.fragment.js.map +1 -0
  115. package/ShadersWGSL/pbr.fragment.js +19 -5
  116. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  117. package/ShadersWGSL/pbr.vertex.js +8 -2
  118. package/ShadersWGSL/pbr.vertex.js.map +1 -1
  119. package/package.json +1 -1
@@ -14,6 +14,12 @@ export interface IFlowGraphForLoopBlockConfiguration extends IFlowGraphBlockConf
14
14
  * if not set will default to 0
15
15
  */
16
16
  initialIndex?: FlowGraphNumber;
17
+ /**
18
+ * If set to true, the index of the case will be incremented when the loop is done.
19
+ * This will result that the index will equal endIndex when the loop finished its work.
20
+ * This is the default behavior in glTF interactivity
21
+ */
22
+ incrementIndexWhenLoopDone?: boolean;
17
23
  }
18
24
  /**
19
25
  * Block that executes an action in a loop.
@@ -28,10 +28,13 @@ export class FlowGraphForLoopBlock extends FlowGraphExecutionBlockWithOutSignal
28
28
  this.index.setValue(new FlowGraphInteger(i), context);
29
29
  this.executionFlow._activateSignal(context);
30
30
  endIndex = getNumericValue(this.endIndex.getValue(context));
31
- if (i > FlowGraphForLoopBlock.MaxLoopIterations) {
31
+ if (i > FlowGraphForLoopBlock.MaxLoopIterations * step) {
32
32
  break;
33
33
  }
34
34
  }
35
+ if (this.config?.incrementIndexWhenLoopDone) {
36
+ this.index.setValue(new FlowGraphInteger(getNumericValue(this.index.getValue(context)) + step), context);
37
+ }
35
38
  this.completed._activateSignal(context);
36
39
  }
37
40
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"flowGraphForLoopBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oCAAoC,EAAE,yDAA4D;AAE3G,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACpG,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAI3D,OAAO,EAAE,eAAe,EAAE,0BAA6B;AACvD,OAAO,EAAE,gBAAgB,EAAE,iDAAoD;AAY/E;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,oCAAoC;IAiC3E,YAAmB,MAA4C;QAC3D,KAAK,CAAC,MAAM,CAAC,CAAC;QAEd,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QAE9D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,wBAAwB,EAAE,IAAI,gBAAgB,CAAC,eAAe,CAAC,MAAM,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1I,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAEzD,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACI,QAAQ,CAAC,OAAyB;QACrC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACtD,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC5C,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,GAAG,qBAAqB,CAAC,iBAAiB,EAAE,CAAC;gBAC9C,MAAM;YACV,CAAC;QACL,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACa,YAAY;QACxB,iEAAmC;IACvC,CAAC;;AAtED;;;GAGG;AACW,uCAAiB,GAAG,IAAI,CAAC;AAoE3C,aAAa,4DAA8B,qBAAqB,CAAC,CAAC","sourcesContent":["import type { FlowGraphSignalConnection } from \"../../../flowGraphSignalConnection\";\r\nimport type { FlowGraphDataConnection } from \"../../../flowGraphDataConnection\";\r\nimport { FlowGraphExecutionBlockWithOutSignal } from \"core/FlowGraph/flowGraphExecutionBlockWithOutSignal\";\r\nimport type { FlowGraphContext } from \"../../../flowGraphContext\";\r\nimport { RichTypeAny, RichTypeFlowGraphInteger, RichTypeNumber } from \"../../../flowGraphRichTypes\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { IFlowGraphBlockConfiguration } from \"../../../flowGraphBlock\";\r\nimport { FlowGraphBlockNames } from \"../../flowGraphBlockNames\";\r\nimport type { FlowGraphNumber } from \"core/FlowGraph/utils\";\r\nimport { getNumericValue } from \"core/FlowGraph/utils\";\r\nimport { FlowGraphInteger } from \"core/FlowGraph/CustomTypes/flowGraphInteger\";\r\n\r\n/**\r\n * Configuration for the For Loop block.\r\n */\r\nexport interface IFlowGraphForLoopBlockConfiguration extends IFlowGraphBlockConfiguration {\r\n /**\r\n * The initial index of the loop.\r\n * if not set will default to 0\r\n */\r\n initialIndex?: FlowGraphNumber;\r\n}\r\n/**\r\n * Block that executes an action in a loop.\r\n */\r\nexport class FlowGraphForLoopBlock extends FlowGraphExecutionBlockWithOutSignal {\r\n /**\r\n * The maximum number of iterations allowed for the loop.\r\n * If the loop exceeds this number, it will stop. This number is configurable to avoid infinite loops.\r\n */\r\n public static MaxLoopIterations = 1000;\r\n /**\r\n * Input connection: The start index of the loop.\r\n */\r\n public readonly startIndex: FlowGraphDataConnection<FlowGraphNumber>;\r\n /**\r\n * Input connection: The end index of the loop.\r\n */\r\n public readonly endIndex: FlowGraphDataConnection<FlowGraphNumber>;\r\n /**\r\n * Input connection: The step of the loop.\r\n */\r\n public readonly step: FlowGraphDataConnection<number>;\r\n /**\r\n * Output connection: The current index of the loop.\r\n */\r\n public readonly index: FlowGraphDataConnection<FlowGraphInteger>;\r\n /**\r\n * Output connection: The signal that is activated when the loop body is executed.\r\n */\r\n public readonly executionFlow: FlowGraphSignalConnection;\r\n\r\n /**\r\n * Output connection: The completed signal. Triggered when condition is false.\r\n * No out signal is available.\r\n */\r\n public readonly completed: FlowGraphSignalConnection;\r\n\r\n public constructor(config?: IFlowGraphForLoopBlockConfiguration) {\r\n super(config);\r\n\r\n this.startIndex = this.registerDataInput(\"startIndex\", RichTypeAny, 0);\r\n this.endIndex = this.registerDataInput(\"endIndex\", RichTypeAny);\r\n this.step = this.registerDataInput(\"step\", RichTypeNumber, 1);\r\n\r\n this.index = this.registerDataOutput(\"index\", RichTypeFlowGraphInteger, new FlowGraphInteger(getNumericValue(config?.initialIndex ?? 0)));\r\n this.executionFlow = this._registerSignalOutput(\"executionFlow\");\r\n this.completed = this._registerSignalOutput(\"completed\");\r\n\r\n this._unregisterSignalOutput(\"out\");\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _execute(context: FlowGraphContext): void {\r\n const index = getNumericValue(this.startIndex.getValue(context));\r\n const step = this.step.getValue(context);\r\n let endIndex = getNumericValue(this.endIndex.getValue(context));\r\n for (let i = index; i < endIndex; i += step) {\r\n this.index.setValue(new FlowGraphInteger(i), context);\r\n this.executionFlow._activateSignal(context);\r\n endIndex = getNumericValue(this.endIndex.getValue(context));\r\n if (i > FlowGraphForLoopBlock.MaxLoopIterations) {\r\n break;\r\n }\r\n }\r\n\r\n this.completed._activateSignal(context);\r\n }\r\n\r\n /**\r\n * @returns class name of the block.\r\n */\r\n public override getClassName(): string {\r\n return FlowGraphBlockNames.ForLoop;\r\n }\r\n}\r\nRegisterClass(FlowGraphBlockNames.ForLoop, FlowGraphForLoopBlock);\r\n"]}
1
+ {"version":3,"file":"flowGraphForLoopBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oCAAoC,EAAE,yDAA4D;AAE3G,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACpG,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAI3D,OAAO,EAAE,eAAe,EAAE,0BAA6B;AACvD,OAAO,EAAE,gBAAgB,EAAE,iDAAoD;AAmB/E;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,oCAAoC;IAiC3E,YAAmB,MAA4C;QAC3D,KAAK,CAAC,MAAM,CAAC,CAAC;QAEd,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QAE9D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,wBAAwB,EAAE,IAAI,gBAAgB,CAAC,eAAe,CAAC,MAAM,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1I,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAEzD,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACI,QAAQ,CAAC,OAAyB;QACrC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACtD,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC5C,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,GAAG,qBAAqB,CAAC,iBAAiB,GAAG,IAAI,EAAE,CAAC;gBACrD,MAAM;YACV,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,0BAA0B,EAAE,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7G,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACa,YAAY;QACxB,iEAAmC;IACvC,CAAC;;AA1ED;;;GAGG;AACW,uCAAiB,GAAG,IAAI,CAAC;AAwE3C,aAAa,4DAA8B,qBAAqB,CAAC,CAAC","sourcesContent":["import type { FlowGraphSignalConnection } from \"../../../flowGraphSignalConnection\";\r\nimport type { FlowGraphDataConnection } from \"../../../flowGraphDataConnection\";\r\nimport { FlowGraphExecutionBlockWithOutSignal } from \"core/FlowGraph/flowGraphExecutionBlockWithOutSignal\";\r\nimport type { FlowGraphContext } from \"../../../flowGraphContext\";\r\nimport { RichTypeAny, RichTypeFlowGraphInteger, RichTypeNumber } from \"../../../flowGraphRichTypes\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { IFlowGraphBlockConfiguration } from \"../../../flowGraphBlock\";\r\nimport { FlowGraphBlockNames } from \"../../flowGraphBlockNames\";\r\nimport type { FlowGraphNumber } from \"core/FlowGraph/utils\";\r\nimport { getNumericValue } from \"core/FlowGraph/utils\";\r\nimport { FlowGraphInteger } from \"core/FlowGraph/CustomTypes/flowGraphInteger\";\r\n\r\n/**\r\n * Configuration for the For Loop block.\r\n */\r\nexport interface IFlowGraphForLoopBlockConfiguration extends IFlowGraphBlockConfiguration {\r\n /**\r\n * The initial index of the loop.\r\n * if not set will default to 0\r\n */\r\n initialIndex?: FlowGraphNumber;\r\n\r\n /**\r\n * If set to true, the index of the case will be incremented when the loop is done.\r\n * This will result that the index will equal endIndex when the loop finished its work.\r\n * This is the default behavior in glTF interactivity\r\n */\r\n incrementIndexWhenLoopDone?: boolean;\r\n}\r\n/**\r\n * Block that executes an action in a loop.\r\n */\r\nexport class FlowGraphForLoopBlock extends FlowGraphExecutionBlockWithOutSignal {\r\n /**\r\n * The maximum number of iterations allowed for the loop.\r\n * If the loop exceeds this number, it will stop. This number is configurable to avoid infinite loops.\r\n */\r\n public static MaxLoopIterations = 1000;\r\n /**\r\n * Input connection: The start index of the loop.\r\n */\r\n public readonly startIndex: FlowGraphDataConnection<FlowGraphNumber>;\r\n /**\r\n * Input connection: The end index of the loop.\r\n */\r\n public readonly endIndex: FlowGraphDataConnection<FlowGraphNumber>;\r\n /**\r\n * Input connection: The step of the loop.\r\n */\r\n public readonly step: FlowGraphDataConnection<number>;\r\n /**\r\n * Output connection: The current index of the loop.\r\n */\r\n public readonly index: FlowGraphDataConnection<FlowGraphInteger>;\r\n /**\r\n * Output connection: The signal that is activated when the loop body is executed.\r\n */\r\n public readonly executionFlow: FlowGraphSignalConnection;\r\n\r\n /**\r\n * Output connection: The completed signal. Triggered when condition is false.\r\n * No out signal is available.\r\n */\r\n public readonly completed: FlowGraphSignalConnection;\r\n\r\n public constructor(config?: IFlowGraphForLoopBlockConfiguration) {\r\n super(config);\r\n\r\n this.startIndex = this.registerDataInput(\"startIndex\", RichTypeAny, 0);\r\n this.endIndex = this.registerDataInput(\"endIndex\", RichTypeAny);\r\n this.step = this.registerDataInput(\"step\", RichTypeNumber, 1);\r\n\r\n this.index = this.registerDataOutput(\"index\", RichTypeFlowGraphInteger, new FlowGraphInteger(getNumericValue(config?.initialIndex ?? 0)));\r\n this.executionFlow = this._registerSignalOutput(\"executionFlow\");\r\n this.completed = this._registerSignalOutput(\"completed\");\r\n\r\n this._unregisterSignalOutput(\"out\");\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _execute(context: FlowGraphContext): void {\r\n const index = getNumericValue(this.startIndex.getValue(context));\r\n const step = this.step.getValue(context);\r\n let endIndex = getNumericValue(this.endIndex.getValue(context));\r\n for (let i = index; i < endIndex; i += step) {\r\n this.index.setValue(new FlowGraphInteger(i), context);\r\n this.executionFlow._activateSignal(context);\r\n endIndex = getNumericValue(this.endIndex.getValue(context));\r\n if (i > FlowGraphForLoopBlock.MaxLoopIterations * step) {\r\n break;\r\n }\r\n }\r\n\r\n if (this.config?.incrementIndexWhenLoopDone) {\r\n this.index.setValue(new FlowGraphInteger(getNumericValue(this.index.getValue(context)) + step), context);\r\n }\r\n\r\n this.completed._activateSignal(context);\r\n }\r\n\r\n /**\r\n * @returns class name of the block.\r\n */\r\n public override getClassName(): string {\r\n return FlowGraphBlockNames.ForLoop;\r\n }\r\n}\r\nRegisterClass(FlowGraphBlockNames.ForLoop, FlowGraphForLoopBlock);\r\n"]}
@@ -28,6 +28,7 @@ export declare class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
28
28
  private _metallicReflectanceColor;
29
29
  private _metallicF0Factor;
30
30
  private _vMetallicReflectanceFactorsName;
31
+ private _baseDiffuseRoughnessName;
31
32
  /**
32
33
  * Create a new ReflectionBlock
33
34
  * @param name defines the block name
@@ -89,6 +90,10 @@ export declare class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
89
90
  * Quality switch for realtime filtering
90
91
  */
91
92
  realTimeFilteringQuality: number;
93
+ /**
94
+ * Base Diffuse Model
95
+ */
96
+ baseDiffuseModel: number;
92
97
  /**
93
98
  * Defines if the material uses energy conservation.
94
99
  */
@@ -120,6 +120,10 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
120
120
  * Quality switch for realtime filtering
121
121
  */
122
122
  this.realTimeFilteringQuality = 8;
123
+ /**
124
+ * Base Diffuse Model
125
+ */
126
+ this.baseDiffuseModel = 0;
123
127
  /**
124
128
  * Defines if the material uses energy conservation.
125
129
  */
@@ -512,6 +516,7 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
512
516
  else {
513
517
  defines.setValue("NUM_SAMPLES", "" + this.realTimeFilteringQuality, true);
514
518
  }
519
+ defines.setValue("BASE_DIFFUSE_MODEL", this.baseDiffuseModel, true);
515
520
  // Advanced
516
521
  defines.setValue("BRDF_V_HEIGHT_CORRELATED", true);
517
522
  defines.setValue("MS_BRDF_ENERGY_CONSERVATION", this.useEnergyConservation, true);
@@ -707,6 +712,8 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
707
712
  const aoIntensity = "1.";
708
713
  this._vMetallicReflectanceFactorsName = state._getFreeVariableName("vMetallicReflectanceFactors");
709
714
  state._emitUniformFromString(this._vMetallicReflectanceFactorsName, NodeMaterialBlockConnectionPointTypes.Vector4);
715
+ this._baseDiffuseRoughnessName = state._getFreeVariableName("baseDiffuseRoughness");
716
+ state._emitUniformFromString(this._baseDiffuseRoughnessName, NodeMaterialBlockConnectionPointTypes.Float);
710
717
  code += `${state._declareLocalVar("baseColor", NodeMaterialBlockConnectionPointTypes.Vector3)} = surfaceAlbedo;
711
718
  ${isWebGPU ? "let" : `vec4${state.fSuffix}`} vReflectivityColor = vec4${state.fSuffix}(${this.metallic.associatedVariableName}, ${this.roughness.associatedVariableName}, ${this.indexOfRefraction.associatedVariableName || "1.5"}, 1.0);
712
719
  reflectivityOut = reflectivityBlock(
@@ -714,6 +721,11 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
714
721
  #ifdef METALLICWORKFLOW
715
722
  , surfaceAlbedo
716
723
  , ${(isWebGPU ? "uniforms." : "") + this._vMetallicReflectanceFactorsName}
724
+ #endif
725
+ , ${(isWebGPU ? "uniforms." : "") + this._baseDiffuseRoughnessName}
726
+ #ifdef BASE_DIFFUSE_ROUGHNESS
727
+ , 0.
728
+ , vec2${state.fSuffix}(0., 0.)
717
729
  #endif
718
730
  #ifdef REFLECTIVITY
719
731
  , vec3${state.fSuffix}(0., 0., ${aoIntensity})
@@ -729,6 +741,7 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
729
741
 
730
742
  ${state._declareLocalVar("microSurface", NodeMaterialBlockConnectionPointTypes.Float)} = reflectivityOut.microSurface;
731
743
  ${state._declareLocalVar("roughness", NodeMaterialBlockConnectionPointTypes.Float)} = reflectivityOut.roughness;
744
+ ${state._declareLocalVar("diffuseRoughness", NodeMaterialBlockConnectionPointTypes.Float)} = reflectivityOut.diffuseRoughness;
732
745
 
733
746
  #ifdef METALLICWORKFLOW
734
747
  surfaceAlbedo = reflectivityOut.surfaceAlbedo;
@@ -1194,6 +1207,16 @@ __decorate([
1194
1207
  ],
1195
1208
  })
1196
1209
  ], PBRMetallicRoughnessBlock.prototype, "realTimeFilteringQuality", void 0);
1210
+ __decorate([
1211
+ editableInPropertyPage("Diffuse Model", 4 /* PropertyTypeForEdition.List */, "RENDERING", {
1212
+ notifiers: { update: true },
1213
+ options: [
1214
+ { label: "Lambert", value: 2 },
1215
+ { label: "Burley", value: 1 },
1216
+ { label: "Oren-Nayar", value: 0 },
1217
+ ],
1218
+ })
1219
+ ], PBRMetallicRoughnessBlock.prototype, "baseDiffuseModel", void 0);
1197
1220
  __decorate([
1198
1221
  editableInPropertyPage("Energy Conservation", 0 /* PropertyTypeForEdition.Boolean */, "ADVANCED", { notifiers: { update: true } })
1199
1222
  ], PBRMetallicRoughnessBlock.prototype, "useEnergyConservation", void 0);