@forgeax/engine-shader 0.1.24 → 0.1.25

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.
package/README.md CHANGED
@@ -22,6 +22,82 @@ second manifest or registry.
22
22
  > Runtime 只查找已发布的 content-addressed artifact;恢复沿 producer、cook
23
23
  > 与 catalog 的 owner 边界进行,不在 app 侧复制 shader artifact。
24
24
 
25
+ ## Standard Surface contract
26
+
27
+ Standard material 的作者只需要通过 `#import` 使用
28
+ [`surface_v1.wgsl`](./src/surface_v1.wgsl),并实现唯一的
29
+ `evaluate_surface(SurfaceInput) -> SurfaceData`。`SurfaceData` 是 Standard
30
+ BRDF 的输入,不是最终颜色;Engine-owned Standard pass family 负责顶点、光照、
31
+ 阴影、Forward/Deferred、G-buffer、雾和输出。内建默认值位于
32
+ [`default_standard_surface.wgsl`](./src/default_standard_surface.wgsl)。
33
+
34
+ ### Minimal authoring shape
35
+
36
+ `SurfaceData` is deliberately base-only. Its frozen field order is:
37
+
38
+ | Order | Field | Meaning |
39
+ |:--:|:--|:--|
40
+ | 1 | `baseColor: vec3<f32>` | Base reflectance color |
41
+ | 2 | `normalWS: vec3<f32>` | World-space shading normal |
42
+ | 3 | `metallic: f32` | Metallic factor |
43
+ | 4 | `roughness: f32` | Roughness factor |
44
+ | 5 | `emissive: vec3<f32>` | Emissive contribution |
45
+ | 6 | `occlusion: f32` | Ambient occlusion factor |
46
+ | 7 | `opacity: f32` | Surface opacity |
47
+ | 8 | `alphaClipThreshold: f32` | Alpha-test threshold |
48
+
49
+ ```wgsl
50
+ #import forgeax_material::surface_v1::{SurfaceInput, SurfaceData}
51
+
52
+ fn evaluate_surface(input: SurfaceInput) -> SurfaceData {
53
+ return SurfaceData(
54
+ vec3<f32>(0.45, 0.18, 0.06), input.geometricNormalWS, 0.8, 0.42,
55
+ vec3<f32>(0.0), 1.0, 1.0, 0.5,
56
+ );
57
+ }
58
+ ```
59
+
60
+ The matching TypeScript entry is also import-first: the caller names the
61
+ compiled Surface module and supplies only its parameters and values. The
62
+ Engine still owns stage entry points, bindings, BRDF composition, and pass
63
+ projection.
64
+
65
+ ```ts
66
+ import { Materials } from '@forgeax/engine-render';
67
+
68
+ const rustedIron = Materials.standard({
69
+ surfaceModule: 'game_3d::rusted_iron_surface',
70
+ parameters: [
71
+ { name: 'ironColor', type: 'color' },
72
+ { name: 'rustDark', type: 'color' },
73
+ { name: 'rustBright', type: 'color' },
74
+ { name: 'noiseScale', type: 'f32', default: 1.85 },
75
+ ],
76
+ values: {
77
+ ironColor: [0.4, 0.45, 0.47, 1],
78
+ rustDark: [0.42, 0.085, 0.018, 1],
79
+ rustBright: [0.95, 0.34, 0.055, 1],
80
+ noiseScale: 1.85,
81
+ },
82
+ });
83
+ ```
84
+
85
+ For the complete source-to-runtime example, see the
86
+ [`game-3d` rusted-iron fixture](../../templates/game-3d/README.md#import-first-surface-material-example).
87
+
88
+ > [!CAUTION]
89
+ > Surface is a base-facts function only. Do not add `clearcoat`,
90
+ > `clearcoatRoughness`, other physical-layer fields, stage entries, resource
91
+ > bindings, Engine entry points, or vertex-position mutation. Physical layers
92
+ > and pass admission remain Engine-owned.
93
+
94
+ 渐进导航:`Materials.standard()` → `moduleSlots.surface` → build-time
95
+ `#import` composition / reflection → Pack cook → runtime GUID readiness。
96
+ Surface source 不声明 stage entry、`@group/@binding` 或 vertex mutation;参数
97
+ 资源由同一 `MaterialAsset.parameters` contract 派生。编译或 cook 失败时读取
98
+ `code`、`detail`、`hint`,修复 authored source 或 producer 后重新 cook,不在
99
+ runtime 读取 raw WGSL 或创建 app-local artifact。
100
+
25
101
  > [!IMPORTANT]
26
102
  > A custom material starts as WGSL source plus one `MaterialAsset` contract. The build manifest publishes the composed module and the material cook publishes the resolved record, artifact bytes, references, and receipt. Runtime resolves those facts from the catalog; application code does not install or duplicate shader artifacts. The recovery route is always source or cook repair.
27
103
 
@@ -101,10 +177,19 @@ code-specific `detail` and `hint`:
101
177
  | `shader-module-not-found` | The published module is absent | Add it to the build source catalog and rebuild |
102
178
  | `material-specialization-not-cooked` | No runtime artifact exists for the selection | Run the cook path and publish its record |
103
179
  | `material-specialization-stale-generation` | A dependency changed after cooking | Wait for dependencies to settle and re-cook |
180
+ | `material-surface-slot-missing` | Standard pass has no `surface` module slot | Add the slot to the authored pass and re-cook |
181
+ | `material-surface-abi-mismatch` | Surface export does not match `surface_v1` | Repair `evaluate_surface` signature and re-cook |
182
+ | `material-surface-forbidden-interface` | Surface declares a stage, resource, or vertex mutation | Remove the forbidden interface and re-cook |
183
+ | `material-physical-contract-invalid` | A root physical layer is incomplete or unsupported | Repair the root parameter fragment before composing or cooking |
104
184
 
105
185
  Never hide one of these errors by creating an app-local artifact or changing a
106
186
  demo's material shape.
107
187
 
188
+ For the canonical error detail and executable recovery fields, use
189
+ [`material/errors.ts`](../types/src/material/errors.ts). The producer recovery
190
+ path is `inspect -> repair authored source -> cold-cook -> verify publication`;
191
+ runtime does not reinterpret a Surface error.
192
+
108
193
  ## Temporal-v1 accessor
109
194
 
110
195
  `forgeax_scene_temporal` is the single WGSL accessor ABI for the
@@ -178,3 +263,15 @@ layout.
178
263
  - [`@forgeax/engine-types` MaterialAsset](../types/README.md#materialasset-route)
179
264
  - [`@forgeax/engine-pack` cook contract](../pack/README.md#materialasset-cook-contract)
180
265
  - [`MaterialAsset migration`](https://github.com/ForgeaXGame/forgeax-engine-harness/blob/main/docs/material-asset-migration.md)
266
+
267
+ ## Surface authoring checklist
268
+
269
+ - [x] Import `forgeax_material::surface_v1` and return the eight-field `SurfaceData`.
270
+ - [x] Read generated material parameters through `forgeax_material::parameters`.
271
+ - [x] Keep vertex, light, BRDF, pass, binding, and output ownership in Engine modules.
272
+ - [x] Let the root parameter contract determine physical layers and pass admission.
273
+ - [ ] Add an engine entry point or resource binding to a Surface module.
274
+
275
+ The final unchecked item is intentionally forbidden. If an effect needs its own
276
+ entry points or render targets, declare an explicit full-custom material and
277
+ publish its pass/lane provenance instead of disguising it as a Standard Surface.
package/dist/index.d.ts CHANGED
@@ -16,13 +16,21 @@ export declare const BUILTIN_MATERIAL_MODULES: {
16
16
  readonly unlit: "forgeax_material::unlit";
17
17
  readonly sprite: "forgeax_material::sprite";
18
18
  };
19
+ /**
20
+ * The engine-owned Standard Surface selected by a built-in Standard material.
21
+ * Keep this explicit in the authored pass so the build-time cooker sees the
22
+ * same slot contract as Materials.standard().
23
+ */
24
+ export declare const DEFAULT_STANDARD_SURFACE_MODULE: "forgeax_material::default_standard_surface";
19
25
  /** Stable build-time module id for the temporal-v1 accessor owner. */
20
26
  export declare const SCENE_DATA_TEMPORAL_V1_SHADER_MODULE: "forgeax_scene_temporal";
21
27
  /**
22
28
  * Material modules whose shader source and parameter contract are owned by
23
29
  * the Engine. They live in the runtime ShaderRegistry, so a Pack containing
24
30
  * one of these materials carries authored values only and does not require a
25
- * project material-cook artifact.
31
+ * project material-cook artifact. A Standard pass with a project Surface slot
32
+ * is deliberately excluded: its root composition is project-owned and must
33
+ * arrive with a cooked material publication.
26
34
  */
27
35
  export declare const ENGINE_MATERIAL_MODULES: readonly ["forgeax::default-standard-pbr", "forgeax::pbr-skin", "forgeax::default-standard-pbr-skin", "forgeax::default-unlit", "forgeax::default-shadow-caster", "forgeax::sprite", "forgeax::sprite-lit", "forgeax::msdf-text", "forgeax_material::standard", "forgeax_material::unlit", "forgeax_material::sprite", "forgeax_material::sprite-lit"];
28
36
  /** Names of the zero-binding Standard reflection-probe shader helpers. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAsBA,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAoC,MAAM,uBAAuB,CAAC;AAG7F,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EACL,GAAG,EACH,iBAAiB,EACjB,sBAAsB,EACtB,EAAE,EACF,KAAK,MAAM,EACX,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,WAAW,EACX,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,wBAAwB,EACxB,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,gCAAgC,EAChC,wBAAwB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,GAC/B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,8BAA8B,EAC9B,2BAA2B,EAC3B,iCAAiC,EACjC,0BAA0B,EAC1B,0BAA0B,EAC1B,iCAAiC,EACjC,6BAA6B,EAC7B,kCAAkC,EAClC,oCAAoC,EACpC,gCAAgC,EAChC,8BAA8B,EAC9B,KAAK,4BAA4B,EACjC,6BAA6B,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,wBAAwB,EACxB,KAAK,aAAa,GACnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AACzF,eAAO,MAAM,2BAA2B,EAAG,6BAAsC,CAAC;AAClF,OAAO,EACL,4BAA4B,EAC5B,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EAClC,cAAc,EACd,cAAc,IAAI,aAAa,EAC/B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,IAAI,mBAAmB,EAChD,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,IAAI,oBAAoB,GACnD,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,KAAK,2BAA2B,EAChC,KAAK,6BAA6B,GACnC,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC;AAEX,sEAAsE;AACtE,eAAO,MAAM,oCAAoC,EAAG,wBAAiC,CAAC;AAEtF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,wVAa1B,CAAC;AAEX,0EAA0E;AAC1E,eAAO,MAAM,+BAA+B,2DAGjC,CAAC;AAEZ,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,OAAO,CAGjF;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,wBAAwB,CAAC;AA0BxE,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,mBAAmB,GAAG,aAAa,CAOnF;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,yBAAyB,UAAO,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAsBA,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAoC,MAAM,uBAAuB,CAAC;AAG7F,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EACL,GAAG,EACH,iBAAiB,EACjB,sBAAsB,EACtB,EAAE,EACF,KAAK,MAAM,EACX,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,WAAW,EACX,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,wBAAwB,EACxB,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,gCAAgC,EAChC,wBAAwB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,GAC/B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,8BAA8B,EAC9B,2BAA2B,EAC3B,iCAAiC,EACjC,0BAA0B,EAC1B,0BAA0B,EAC1B,iCAAiC,EACjC,6BAA6B,EAC7B,kCAAkC,EAClC,oCAAoC,EACpC,gCAAgC,EAChC,8BAA8B,EAC9B,KAAK,4BAA4B,EACjC,6BAA6B,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,wBAAwB,EACxB,KAAK,aAAa,GACnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AACzF,eAAO,MAAM,2BAA2B,EAAG,6BAAsC,CAAC;AAClF,OAAO,EACL,4BAA4B,EAC5B,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EAClC,cAAc,EACd,cAAc,IAAI,aAAa,EAC/B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,IAAI,mBAAmB,EAChD,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,IAAI,oBAAoB,GACnD,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,KAAK,2BAA2B,EAChC,KAAK,6BAA6B,GACnC,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,EAC1C,4CAAqD,CAAC;AAExD,sEAAsE;AACtE,eAAO,MAAM,oCAAoC,EAAG,wBAAiC,CAAC;AAEtF;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,wVAa1B,CAAC;AAEX,0EAA0E;AAC1E,eAAO,MAAM,+BAA+B,2DAGjC,CAAC;AAEZ,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,OAAO,CAWjF;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,wBAAwB,CAAC;AA0BxE,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,mBAAmB,GAAG,aAAa,CAiBnF;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,yBAAyB,UAAO,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.mjs CHANGED
@@ -33106,18 +33106,35 @@ function hashLtcTable(table) {
33106
33106
  function equalBytes(left, right) {
33107
33107
  return left.length === right.length && left.every((value, index) => value === right[index]);
33108
33108
  }
33109
+ function equalParamSchema(left, right) {
33110
+ return JSON.stringify(left.metadata?.paramSchema) === JSON.stringify(right.metadata?.paramSchema);
33111
+ }
33109
33112
  var MaterialArtifactRegistry = class {
33110
33113
  #artifacts = /* @__PURE__ */ new Map();
33111
33114
  register(artifact) {
33112
33115
  const previous = this.#artifacts.get(artifact.key);
33113
33116
  if (previous !== void 0) {
33114
- if (equalBytes(previous.bytes, artifact.bytes)) return ok(previous);
33117
+ if (equalBytes(previous.bytes, artifact.bytes)) {
33118
+ if (equalParamSchema(previous, artifact)) return ok(previous);
33119
+ return err({
33120
+ code: "material-artifact-conflict",
33121
+ expected: "one immutable parameter schema per specialization key",
33122
+ hint: "re-cook the conflicting specialization with one canonical parameter schema",
33123
+ detail: {
33124
+ key: artifact.key,
33125
+ dimension: "param-schema",
33126
+ ...previous.digest ? { existingDigest: previous.digest } : {},
33127
+ ...artifact.digest ? { incomingDigest: artifact.digest } : {}
33128
+ }
33129
+ });
33130
+ }
33115
33131
  return err({
33116
33132
  code: "material-artifact-conflict",
33117
33133
  expected: "one immutable artifact byte sequence per specialization key",
33118
33134
  hint: "re-cook the conflicting specialization and publish one artifact digest",
33119
33135
  detail: {
33120
33136
  key: artifact.key,
33137
+ dimension: "bytes",
33121
33138
  ...previous.digest ? { existingDigest: previous.digest } : {},
33122
33139
  ...artifact.digest ? { incomingDigest: artifact.digest } : {}
33123
33140
  }
@@ -33585,6 +33602,7 @@ var BUILTIN_MATERIAL_MODULES = {
33585
33602
  unlit: "forgeax_material::unlit",
33586
33603
  sprite: "forgeax_material::sprite"
33587
33604
  };
33605
+ var DEFAULT_STANDARD_SURFACE_MODULE = "forgeax_material::default_standard_surface";
33588
33606
  var SCENE_DATA_TEMPORAL_V1_SHADER_MODULE = "forgeax_scene_temporal";
33589
33607
  var ENGINE_MATERIAL_MODULES = [
33590
33608
  "forgeax::default-standard-pbr",
@@ -33609,7 +33627,9 @@ function isEngineMaterialModule(module) {
33609
33627
  }
33610
33628
  function isEngineMaterial(material) {
33611
33629
  const passes = material.passes ?? [];
33612
- return passes.length > 0 && passes.every((pass) => isEngineMaterialModule(pass.program.module));
33630
+ return passes.length > 0 && passes.every(
33631
+ (pass) => isEngineMaterialModule(pass.program.module) && (pass.program.moduleSlots?.surface === void 0 || pass.program.moduleSlots.surface === DEFAULT_STANDARD_SURFACE_MODULE)
33632
+ );
33613
33633
  }
33614
33634
  var BUILTIN_PARAMETERS = {
33615
33635
  standard: [
@@ -33634,13 +33654,21 @@ var BUILTIN_VALUES = {
33634
33654
  function createBuiltinMaterialAsset(kind) {
33635
33655
  return {
33636
33656
  kind: "material",
33637
- passes: [{ name: "forward", program: { module: BUILTIN_MATERIAL_MODULES[kind] } }],
33657
+ passes: [
33658
+ {
33659
+ name: "forward",
33660
+ program: {
33661
+ module: BUILTIN_MATERIAL_MODULES[kind],
33662
+ ...kind === "standard" ? { moduleSlots: { surface: DEFAULT_STANDARD_SURFACE_MODULE } } : {}
33663
+ }
33664
+ }
33665
+ ],
33638
33666
  parameters: BUILTIN_PARAMETERS[kind],
33639
33667
  values: BUILTIN_VALUES[kind]
33640
33668
  };
33641
33669
  }
33642
33670
  var TONEMAP_LUMINANCE_EPSILON = 1e-5;
33643
33671
 
33644
- export { BUILTIN_MATERIAL_MODULES, DEFAULT_MSDF_TEXT_PARAM_SCHEMA, DEFAULT_SPRITE_PARAM_SCHEMA, DEFAULT_STANDARD_PBR_PARAM_SCHEMA, DEFAULT_UNLIT_PARAM_SCHEMA, ENGINE_MATERIAL_MODULES, FORGEAX_RESERVED_PATH_PREFIX, LTC_SOURCE_PROVENANCE, LTC_TABLES, LTC_TABLE_HASHES, LTC_TABLE_HEIGHT, LTC_TABLE_INPUT_HASHES, LTC_TABLE_WIDTH, MaterialArtifactRegistry, RECT_AREA_LTC_SHADER_MODULE, REFLECTION_PROBE_SHADER_HELPERS, SCENE_DATA_TEMPORAL_V1_SHADER_MODULE, STANDARD_BASE_PARAM_SCHEMA, STANDARD_PBR_ALPHA_CUTOFF_DEFAULT, STANDARD_PBR_ARTIFACT_RECEIPT, STANDARD_PBR_SKIN_ARTIFACT_RECEIPT, STANDARD_PHYSICAL_LAYER_PARAM_SCHEMA, STANDARD_PIPELINE_PARAM_SCHEMA, ShaderRegistry as ShaderCatalog, ShaderError, ShaderRegistry, TONEMAP_LUMINANCE_EPSILON, TONEMAP_SHADER_MODE, createBuiltinMaterialAsset, createStandardPbrArtifactReceipt, findVariantByKey, generateLtcTables, hashLtcTable, isEngineMaterial, isEngineMaterialModule, isMaterialShaderArtifact, manifestMalformed, materialShaderNotFound, registerDefaultSpriteLit, registerDefaultStandardPbrSkin, shaderNotFound };
33672
+ export { BUILTIN_MATERIAL_MODULES, DEFAULT_MSDF_TEXT_PARAM_SCHEMA, DEFAULT_SPRITE_PARAM_SCHEMA, DEFAULT_STANDARD_PBR_PARAM_SCHEMA, DEFAULT_STANDARD_SURFACE_MODULE, DEFAULT_UNLIT_PARAM_SCHEMA, ENGINE_MATERIAL_MODULES, FORGEAX_RESERVED_PATH_PREFIX, LTC_SOURCE_PROVENANCE, LTC_TABLES, LTC_TABLE_HASHES, LTC_TABLE_HEIGHT, LTC_TABLE_INPUT_HASHES, LTC_TABLE_WIDTH, MaterialArtifactRegistry, RECT_AREA_LTC_SHADER_MODULE, REFLECTION_PROBE_SHADER_HELPERS, SCENE_DATA_TEMPORAL_V1_SHADER_MODULE, STANDARD_BASE_PARAM_SCHEMA, STANDARD_PBR_ALPHA_CUTOFF_DEFAULT, STANDARD_PBR_ARTIFACT_RECEIPT, STANDARD_PBR_SKIN_ARTIFACT_RECEIPT, STANDARD_PHYSICAL_LAYER_PARAM_SCHEMA, STANDARD_PIPELINE_PARAM_SCHEMA, ShaderRegistry as ShaderCatalog, ShaderError, ShaderRegistry, TONEMAP_LUMINANCE_EPSILON, TONEMAP_SHADER_MODE, createBuiltinMaterialAsset, createStandardPbrArtifactReceipt, findVariantByKey, generateLtcTables, hashLtcTable, isEngineMaterial, isEngineMaterialModule, isMaterialShaderArtifact, manifestMalformed, materialShaderNotFound, registerDefaultSpriteLit, registerDefaultStandardPbrSkin, shaderNotFound };
33645
33673
  //# sourceMappingURL=index.mjs.map
33646
33674
  //# sourceMappingURL=index.mjs.map