@zephyr3d/scene 0.9.0 → 0.9.1
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/dist/app/scriptregistry.js +143 -143
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +13 -26
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/pbrmr.js +1 -11
- package/dist/material/pbrmr.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,69 +2,69 @@ import { textToBase64 } from '@zephyr3d/base';
|
|
|
2
2
|
import { init, parse } from '../node_modules/es-module-lexer/dist/lexer.js';
|
|
3
3
|
import { getApp } from './api.js';
|
|
4
4
|
|
|
5
|
-
/**
|
|
6
|
-
* Converts JavaScript source to a data URL tied to a logical module id.
|
|
7
|
-
*
|
|
8
|
-
* @param js - The JavaScript source code to embed.
|
|
9
|
-
* @param id - Logical module identifier (used only for sourceURL tagging).
|
|
10
|
-
* @returns A `data:text/javascript;base64,...` URL with an encoded `#id` suffix.
|
|
11
|
-
* @internal
|
|
5
|
+
/**
|
|
6
|
+
* Converts JavaScript source to a data URL tied to a logical module id.
|
|
7
|
+
*
|
|
8
|
+
* @param js - The JavaScript source code to embed.
|
|
9
|
+
* @param id - Logical module identifier (used only for sourceURL tagging).
|
|
10
|
+
* @returns A `data:text/javascript;base64,...` URL with an encoded `#id` suffix.
|
|
11
|
+
* @internal
|
|
12
12
|
*/ function toDataUrl(js, id) {
|
|
13
13
|
const b64 = textToBase64(js);
|
|
14
14
|
return `data:text/javascript;base64,${b64}#${encodeURIComponent(String(id))}`;
|
|
15
15
|
}
|
|
16
|
-
/**
|
|
17
|
-
* Checks whether a specifier is an absolute HTTP(S) URL.
|
|
18
|
-
* @internal
|
|
16
|
+
/**
|
|
17
|
+
* Checks whether a specifier is an absolute HTTP(S) URL.
|
|
18
|
+
* @internal
|
|
19
19
|
*/ function isAbsoluteUrl(spec) {
|
|
20
20
|
return /^https?:\/\//i.test(spec);
|
|
21
21
|
}
|
|
22
|
-
/**
|
|
23
|
-
* Checks whether a specifier is a special URL (data: or blob:).
|
|
24
|
-
* @internal
|
|
22
|
+
/**
|
|
23
|
+
* Checks whether a specifier is a special URL (data: or blob:).
|
|
24
|
+
* @internal
|
|
25
25
|
*/ function isSpecialUrl(spec) {
|
|
26
26
|
return /^(data|blob):/i.test(spec);
|
|
27
27
|
}
|
|
28
|
-
/**
|
|
29
|
-
* Checks whether a specifier is a bare module (not starting with ./, ../, /, or #/).
|
|
30
|
-
* @internal
|
|
28
|
+
/**
|
|
29
|
+
* Checks whether a specifier is a bare module (not starting with ./, ../, /, or #/).
|
|
30
|
+
* @internal
|
|
31
31
|
*/ function isBareModule(spec) {
|
|
32
32
|
return !spec.startsWith('./') && !spec.startsWith('../') && !spec.startsWith('/') && !spec.startsWith('#/');
|
|
33
33
|
}
|
|
34
|
-
/**
|
|
35
|
-
* Resolves, builds, and serves runtime modules using a VFS.
|
|
36
|
-
*
|
|
37
|
-
* Responsibilities:
|
|
38
|
-
* - Resolve logical module IDs to physical paths or URLs.
|
|
39
|
-
* - In editor mode, rewrite import specifiers and serve modules as data URLs after transpile.
|
|
40
|
-
* - Transpile TypeScript to JavaScript on the fly (requires `window.ts` TypeScript runtime).
|
|
41
|
-
* - Gather static and dynamic import dependencies for tooling.
|
|
42
|
-
*
|
|
43
|
-
* Modes:
|
|
44
|
-
* - Editor mode (`editorMode === true`): modules are rewritten to data URLs after transpile/build.
|
|
45
|
-
* - Runtime mode (`editorMode === false`): returns .js URLs directly (with .ts -\> .js mapping).
|
|
46
|
-
*
|
|
47
|
-
* Caching:
|
|
48
|
-
* - Built modules are memoized in `_built` map keyed by logical ID.
|
|
49
|
-
*
|
|
50
|
-
* @public
|
|
34
|
+
/**
|
|
35
|
+
* Resolves, builds, and serves runtime modules using a VFS.
|
|
36
|
+
*
|
|
37
|
+
* Responsibilities:
|
|
38
|
+
* - Resolve logical module IDs to physical paths or URLs.
|
|
39
|
+
* - In editor mode, rewrite import specifiers and serve modules as data URLs after transpile.
|
|
40
|
+
* - Transpile TypeScript to JavaScript on the fly (requires `window.ts` TypeScript runtime).
|
|
41
|
+
* - Gather static and dynamic import dependencies for tooling.
|
|
42
|
+
*
|
|
43
|
+
* Modes:
|
|
44
|
+
* - Editor mode (`editorMode === true`): modules are rewritten to data URLs after transpile/build.
|
|
45
|
+
* - Runtime mode (`editorMode === false`): returns .js URLs directly (with .ts -\> .js mapping).
|
|
46
|
+
*
|
|
47
|
+
* Caching:
|
|
48
|
+
* - Built modules are memoized in `_built` map keyed by logical ID.
|
|
49
|
+
*
|
|
50
|
+
* @public
|
|
51
51
|
*/ class ScriptRegistry {
|
|
52
52
|
_vfs;
|
|
53
53
|
_scriptsRoot;
|
|
54
54
|
_built;
|
|
55
|
-
/**
|
|
56
|
-
* @param vfs - The virtual file system for existence checks, reads, and path ops.
|
|
57
|
-
* @param scriptsRoot - Root directory for script resolution (used with `#/` specifiers).
|
|
58
|
-
* @param editorMode - Whether to build modules to data URLs and rewrite imports.
|
|
55
|
+
/**
|
|
56
|
+
* @param vfs - The virtual file system for existence checks, reads, and path ops.
|
|
57
|
+
* @param scriptsRoot - Root directory for script resolution (used with `#/` specifiers).
|
|
58
|
+
* @param editorMode - Whether to build modules to data URLs and rewrite imports.
|
|
59
59
|
*/ constructor(vfs, scriptsRoot){
|
|
60
60
|
this._vfs = vfs;
|
|
61
61
|
this._scriptsRoot = scriptsRoot;
|
|
62
62
|
this._built = new Map();
|
|
63
63
|
}
|
|
64
|
-
/**
|
|
65
|
-
* The active virtual file system.
|
|
66
|
-
*
|
|
67
|
-
* Assigning a new VFS clears the build cache.
|
|
64
|
+
/**
|
|
65
|
+
* The active virtual file system.
|
|
66
|
+
*
|
|
67
|
+
* Assigning a new VFS clears the build cache.
|
|
68
68
|
*/ get VFS() {
|
|
69
69
|
return this._vfs;
|
|
70
70
|
}
|
|
@@ -74,23 +74,23 @@ import { getApp } from './api.js';
|
|
|
74
74
|
this._built.clear();
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
|
-
/**
|
|
78
|
-
* The root path used by `#/` specifiers.
|
|
77
|
+
/**
|
|
78
|
+
* The root path used by `#/` specifiers.
|
|
79
79
|
*/ get scriptsRoot() {
|
|
80
80
|
return this._scriptsRoot;
|
|
81
81
|
}
|
|
82
82
|
set scriptsRoot(path) {
|
|
83
83
|
this._scriptsRoot = path;
|
|
84
84
|
}
|
|
85
|
-
/**
|
|
86
|
-
* Fetches raw source for a logical module id by probing known extensions.
|
|
87
|
-
*
|
|
88
|
-
* Search order:
|
|
89
|
-
* - If `id` already ends with `.ts` or `.js` and is a file -\> return it.
|
|
90
|
-
* - Else try `.id.ts`, then `.id.js`.
|
|
91
|
-
*
|
|
92
|
-
* @param id - Logical module identifier (absolute or logical path-like).
|
|
93
|
-
* @returns Source code, resolved path, and type (`'js' | 'ts'`), or `undefined` if not found.
|
|
85
|
+
/**
|
|
86
|
+
* Fetches raw source for a logical module id by probing known extensions.
|
|
87
|
+
*
|
|
88
|
+
* Search order:
|
|
89
|
+
* - If `id` already ends with `.ts` or `.js` and is a file -\> return it.
|
|
90
|
+
* - Else try `.id.ts`, then `.id.js`.
|
|
91
|
+
*
|
|
92
|
+
* @param id - Logical module identifier (absolute or logical path-like).
|
|
93
|
+
* @returns Source code, resolved path, and type (`'js' | 'ts'`), or `undefined` if not found.
|
|
94
94
|
*/ async fetchSource(id) {
|
|
95
95
|
let type = null;
|
|
96
96
|
let pathWithExt = '';
|
|
@@ -139,18 +139,18 @@ import { getApp } from './api.js';
|
|
|
139
139
|
};
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
|
-
/**
|
|
143
|
-
* Resolves a module entry to a URL suitable for dynamic import.
|
|
144
|
-
*
|
|
145
|
-
* Behavior:
|
|
146
|
-
* - In editor mode, builds the module to a data URL.
|
|
147
|
-
* - Otherwise, returns `.js` URL directly:
|
|
148
|
-
* - If `id` ends with `.js`: return as-is.
|
|
149
|
-
* - If `id` ends with `.ts`: map to `.js` (assumes pre-built file exists).
|
|
150
|
-
* - Else: append `.js`.
|
|
151
|
-
*
|
|
152
|
-
* @param entryId - Entry module identifier (logical or path-like).
|
|
153
|
-
* @returns A URL string that can be used in `import(...)`.
|
|
142
|
+
/**
|
|
143
|
+
* Resolves a module entry to a URL suitable for dynamic import.
|
|
144
|
+
*
|
|
145
|
+
* Behavior:
|
|
146
|
+
* - In editor mode, builds the module to a data URL.
|
|
147
|
+
* - Otherwise, returns `.js` URL directly:
|
|
148
|
+
* - If `id` ends with `.js`: return as-is.
|
|
149
|
+
* - If `id` ends with `.ts`: map to `.js` (assumes pre-built file exists).
|
|
150
|
+
* - Else: append `.js`.
|
|
151
|
+
*
|
|
152
|
+
* @param entryId - Entry module identifier (logical or path-like).
|
|
153
|
+
* @returns A URL string that can be used in `import(...)`.
|
|
154
154
|
*/ async resolveRuntimeUrl(entryId) {
|
|
155
155
|
const id = await this.resolveLogicalId(entryId);
|
|
156
156
|
if (id.startsWith('/assets/@builtins/')) {
|
|
@@ -158,15 +158,15 @@ import { getApp } from './api.js';
|
|
|
158
158
|
}
|
|
159
159
|
return getApp().editorMode !== 'none' ? await this.build(String(id)) : id.endsWith('.js') ? id : id.endsWith('.ts') ? `${id.slice(0, -3)}.js` : `${id}.js`;
|
|
160
160
|
}
|
|
161
|
-
/**
|
|
162
|
-
* Recursively gathers direct static and dynamic import dependencies for a module.
|
|
163
|
-
*
|
|
164
|
-
* Only relative specifiers (`./` or `../`) are followed. Absolute, special, and bare
|
|
165
|
-
* module specifiers are ignored here.
|
|
166
|
-
*
|
|
167
|
-
* @param entryId - The starting (possibly relative) specifier from `fromId`.
|
|
168
|
-
* @param fromId - The logical id of the module containing `entryId`.
|
|
169
|
-
* @param dependencies - Output map of `resolvedSourcePath -\> file contents`.
|
|
161
|
+
/**
|
|
162
|
+
* Recursively gathers direct static and dynamic import dependencies for a module.
|
|
163
|
+
*
|
|
164
|
+
* Only relative specifiers (`./` or `../`) are followed. Absolute, special, and bare
|
|
165
|
+
* module specifiers are ignored here.
|
|
166
|
+
*
|
|
167
|
+
* @param entryId - The starting (possibly relative) specifier from `fromId`.
|
|
168
|
+
* @param fromId - The logical id of the module containing `entryId`.
|
|
169
|
+
* @param dependencies - Output map of `resolvedSourcePath -\> file contents`.
|
|
170
170
|
*/ async getDependencies(entryId, fromId, dependencies) {
|
|
171
171
|
const reStatic = /\b(?:import|export)\s+[^"']*?from\s+(['"])([^'"]+)\1/g;
|
|
172
172
|
const reDynamic = /\bimport\s*\(\s*(['"])([^'"]+)\1\s*\)/g;
|
|
@@ -194,18 +194,18 @@ import { getApp } from './api.js';
|
|
|
194
194
|
await gather(code, reStatic);
|
|
195
195
|
await gather(code, reDynamic);
|
|
196
196
|
}
|
|
197
|
-
/**
|
|
198
|
-
* Builds a logical module id into a data URL (editor mode pipeline).
|
|
199
|
-
*
|
|
200
|
-
* Steps:
|
|
201
|
-
* - Resolve source path (.ts/.js) via {@link ScriptRegistry.resolveSourcePath}.
|
|
202
|
-
* - Read source code.
|
|
203
|
-
* - Rewrite import specifiers via {@link ScriptRegistry.rewriteImports}.
|
|
204
|
-
* - Transpile TypeScript if needed via {@link ScriptRegistry.transpile}.
|
|
205
|
-
* - Convert to `data:` URL and memoize in `_built`.
|
|
206
|
-
*
|
|
207
|
-
* @param id - Logical module id to build.
|
|
208
|
-
* @returns Data URL string for dynamic import, or empty string if not found.
|
|
197
|
+
/**
|
|
198
|
+
* Builds a logical module id into a data URL (editor mode pipeline).
|
|
199
|
+
*
|
|
200
|
+
* Steps:
|
|
201
|
+
* - Resolve source path (.ts/.js) via {@link ScriptRegistry.resolveSourcePath}.
|
|
202
|
+
* - Read source code.
|
|
203
|
+
* - Rewrite import specifiers via {@link ScriptRegistry.rewriteImports}.
|
|
204
|
+
* - Transpile TypeScript if needed via {@link ScriptRegistry.transpile}.
|
|
205
|
+
* - Convert to `data:` URL and memoize in `_built`.
|
|
206
|
+
*
|
|
207
|
+
* @param id - Logical module id to build.
|
|
208
|
+
* @returns Data URL string for dynamic import, or empty string if not found.
|
|
209
209
|
*/ async build(id) {
|
|
210
210
|
const key = String(id);
|
|
211
211
|
const cached = this._built.get(key);
|
|
@@ -225,19 +225,19 @@ import { getApp } from './api.js';
|
|
|
225
225
|
this._built.set(key, url);
|
|
226
226
|
return url;
|
|
227
227
|
}
|
|
228
|
-
/**
|
|
229
|
-
* Transpiles code to JavaScript and appends sourceURL/sourceMap hints.
|
|
230
|
-
*
|
|
231
|
-
* Behavior:
|
|
232
|
-
* - For `'js'`, returns code with `//# sourceURL=logicalId`.
|
|
233
|
-
* - For `'ts'`, requires `window.ts` (TypeScript compiler) to be present and
|
|
234
|
-
* transpiles to ES2015/ESNext module with inline source maps.
|
|
235
|
-
*
|
|
236
|
-
* @param code - Source code to transpile.
|
|
237
|
-
* @param _id - Logical module id (used for fileName/sourceURL).
|
|
238
|
-
* @param type - Source type (`'js' | 'ts'`).
|
|
239
|
-
* @returns Transpiled JavaScript source.
|
|
240
|
-
* @throws If TypeScript runtime is not found for TS input.
|
|
228
|
+
/**
|
|
229
|
+
* Transpiles code to JavaScript and appends sourceURL/sourceMap hints.
|
|
230
|
+
*
|
|
231
|
+
* Behavior:
|
|
232
|
+
* - For `'js'`, returns code with `//# sourceURL=logicalId`.
|
|
233
|
+
* - For `'ts'`, requires `window.ts` (TypeScript compiler) to be present and
|
|
234
|
+
* transpiles to ES2015/ESNext module with inline source maps.
|
|
235
|
+
*
|
|
236
|
+
* @param code - Source code to transpile.
|
|
237
|
+
* @param _id - Logical module id (used for fileName/sourceURL).
|
|
238
|
+
* @param type - Source type (`'js' | 'ts'`).
|
|
239
|
+
* @returns Transpiled JavaScript source.
|
|
240
|
+
* @throws If TypeScript runtime is not found for TS input.
|
|
241
241
|
*/ async transpile(code, _id, type) {
|
|
242
242
|
const logicalId = String(_id);
|
|
243
243
|
if (type === 'js') {
|
|
@@ -266,26 +266,26 @@ import { getApp } from './api.js';
|
|
|
266
266
|
out += `\n//# sourceURL=${logicalId}`;
|
|
267
267
|
return out;
|
|
268
268
|
}
|
|
269
|
-
/**
|
|
270
|
-
* Rewrites ESM import specifiers in `code` into runtime-loadable URLs.
|
|
271
|
-
*
|
|
272
|
-
* Parsing:
|
|
273
|
-
* - Uses `es-module-lexer` to find import spans; sorts them ascending by start.
|
|
274
|
-
*
|
|
275
|
-
* Replacement rules:
|
|
276
|
-
* - Skip invalid spans or ones without quoted specifiers.
|
|
277
|
-
* - If spec is absolute URL, special URL (data:, blob:), or bare module:
|
|
278
|
-
* - If it starts with `@zephyr3d/`, keep as-is (external).
|
|
279
|
-
* - Otherwise resolve to a logical id and attempt to `build` it (if available).
|
|
280
|
-
* - Else (relative spec), resolve from `fromId` and `build` recursively.
|
|
281
|
-
*
|
|
282
|
-
* Output:
|
|
283
|
-
* - Directly writes the replacement specifier without re-adding quotes,
|
|
284
|
-
* so replacements must themselves be quoted or be valid URLs/data URLs.
|
|
285
|
-
*
|
|
286
|
-
* @param code - Module source code to transform.
|
|
287
|
-
* @param fromId - The logical id of the current module (resolution base for relatives).
|
|
288
|
-
* @returns Transformed source with rewritten import specifiers.
|
|
269
|
+
/**
|
|
270
|
+
* Rewrites ESM import specifiers in `code` into runtime-loadable URLs.
|
|
271
|
+
*
|
|
272
|
+
* Parsing:
|
|
273
|
+
* - Uses `es-module-lexer` to find import spans; sorts them ascending by start.
|
|
274
|
+
*
|
|
275
|
+
* Replacement rules:
|
|
276
|
+
* - Skip invalid spans or ones without quoted specifiers.
|
|
277
|
+
* - If spec is absolute URL, special URL (data:, blob:), or bare module:
|
|
278
|
+
* - If it starts with `@zephyr3d/`, keep as-is (external).
|
|
279
|
+
* - Otherwise resolve to a logical id and attempt to `build` it (if available).
|
|
280
|
+
* - Else (relative spec), resolve from `fromId` and `build` recursively.
|
|
281
|
+
*
|
|
282
|
+
* Output:
|
|
283
|
+
* - Directly writes the replacement specifier without re-adding quotes,
|
|
284
|
+
* so replacements must themselves be quoted or be valid URLs/data URLs.
|
|
285
|
+
*
|
|
286
|
+
* @param code - Module source code to transform.
|
|
287
|
+
* @param fromId - The logical id of the current module (resolution base for relatives).
|
|
288
|
+
* @returns Transformed source with rewritten import specifiers.
|
|
289
289
|
*/ async rewriteImports(code, fromId) {
|
|
290
290
|
await init;
|
|
291
291
|
const [imports] = parse(code);
|
|
@@ -331,21 +331,21 @@ import { getApp } from './api.js';
|
|
|
331
331
|
out += code.slice(last);
|
|
332
332
|
return out;
|
|
333
333
|
}
|
|
334
|
-
/**
|
|
335
|
-
* Resolves a specifier to a logical id suitable for further processing.
|
|
336
|
-
*
|
|
337
|
-
* Resolution rules:
|
|
338
|
-
* - `#/path`: resolved against `scriptsRoot` via VFS join/normalize.
|
|
339
|
-
* - `./` or `../`: resolved relative to `fromId` directory (requires `fromId`).
|
|
340
|
-
* - `/absolute`: treated as absolute from root (normalized).
|
|
341
|
-
* - Bare module in editor mode: if `/deps.lock.json` exists and contains an entry,
|
|
342
|
-
* map to the dependency's `entry` path; otherwise return as-is.
|
|
343
|
-
* - Else (non-editor bare module): return `spec` unchanged (external).
|
|
344
|
-
*
|
|
345
|
-
* @param spec - Import specifier string.
|
|
346
|
-
* @param fromId - Optional base logical id used for relative resolution.
|
|
347
|
-
* @returns A normalized logical id or an external specifier string.
|
|
348
|
-
* @throws If a relative import is provided without `fromId`.
|
|
334
|
+
/**
|
|
335
|
+
* Resolves a specifier to a logical id suitable for further processing.
|
|
336
|
+
*
|
|
337
|
+
* Resolution rules:
|
|
338
|
+
* - `#/path`: resolved against `scriptsRoot` via VFS join/normalize.
|
|
339
|
+
* - `./` or `../`: resolved relative to `fromId` directory (requires `fromId`).
|
|
340
|
+
* - `/absolute`: treated as absolute from root (normalized).
|
|
341
|
+
* - Bare module in editor mode: if `/deps.lock.json` exists and contains an entry,
|
|
342
|
+
* map to the dependency's `entry` path; otherwise return as-is.
|
|
343
|
+
* - Else (non-editor bare module): return `spec` unchanged (external).
|
|
344
|
+
*
|
|
345
|
+
* @param spec - Import specifier string.
|
|
346
|
+
* @param fromId - Optional base logical id used for relative resolution.
|
|
347
|
+
* @returns A normalized logical id or an external specifier string.
|
|
348
|
+
* @throws If a relative import is provided without `fromId`.
|
|
349
349
|
*/ async resolveLogicalId(spec, fromId) {
|
|
350
350
|
if (spec.startsWith('#/')) {
|
|
351
351
|
return this._vfs.normalizePath(this._vfs.join(this._scriptsRoot, spec.slice(2)));
|
|
@@ -373,16 +373,16 @@ import { getApp } from './api.js';
|
|
|
373
373
|
}
|
|
374
374
|
return spec;
|
|
375
375
|
}
|
|
376
|
-
/**
|
|
377
|
-
* Resolves a logical id to a concrete source path and type by probing extensions.
|
|
378
|
-
*
|
|
379
|
-
* Rules:
|
|
380
|
-
* - If `logicalId` ends with `.ts` or `.js`/`.mjs` and is a file, return it.
|
|
381
|
-
* - Else probe `logicalId.ts`, `logicalId.js`, `logicalId.mjs` in that order.
|
|
382
|
-
* - Maps `.mjs` to type `'js'`.
|
|
383
|
-
*
|
|
384
|
-
* @param logicalId - The normalized logical module id (path-like).
|
|
385
|
-
* @returns `{ type, path }` or `null` if not found.
|
|
376
|
+
/**
|
|
377
|
+
* Resolves a logical id to a concrete source path and type by probing extensions.
|
|
378
|
+
*
|
|
379
|
+
* Rules:
|
|
380
|
+
* - If `logicalId` ends with `.ts` or `.js`/`.mjs` and is a file, return it.
|
|
381
|
+
* - Else probe `logicalId.ts`, `logicalId.js`, `logicalId.mjs` in that order.
|
|
382
|
+
* - Maps `.mjs` to type `'js'`.
|
|
383
|
+
*
|
|
384
|
+
* @param logicalId - The normalized logical module id (path-like).
|
|
385
|
+
* @returns `{ type, path }` or `null` if not found.
|
|
386
386
|
*/ async resolveSourcePath(logicalId) {
|
|
387
387
|
let type = null;
|
|
388
388
|
let pathWithExt = '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scriptregistry.js","sources":["../../src/app/scriptregistry.ts"],"sourcesContent":["import type * as TS from 'typescript';\nimport type { Nullable, VFS } from '@zephyr3d/base';\nimport { textToBase64 } from '@zephyr3d/base';\nimport { init, parse } from 'es-module-lexer';\nimport { getApp } from './api';\n\n/**\n * Converts JavaScript source to a data URL tied to a logical module id.\n *\n * @param js - The JavaScript source code to embed.\n * @param id - Logical module identifier (used only for sourceURL tagging).\n * @returns A `data:text/javascript;base64,...` URL with an encoded `#id` suffix.\n * @internal\n */\nfunction toDataUrl(js: string, id: string) {\n const b64 = textToBase64(js);\n return `data:text/javascript;base64,${b64}#${encodeURIComponent(String(id))}`;\n}\n\n/**\n * Checks whether a specifier is an absolute HTTP(S) URL.\n * @internal\n */\nfunction isAbsoluteUrl(spec: string) {\n return /^https?:\\/\\//i.test(spec);\n}\n\n/**\n * Checks whether a specifier is a special URL (data: or blob:).\n * @internal\n */\nfunction isSpecialUrl(spec: string) {\n return /^(data|blob):/i.test(spec);\n}\n\n/**\n * Checks whether a specifier is a bare module (not starting with ./, ../, /, or #/).\n * @internal\n */\nfunction isBareModule(spec: string) {\n return !spec.startsWith('./') && !spec.startsWith('../') && !spec.startsWith('/') && !spec.startsWith('#/');\n}\n\n/**\n * Resolves, builds, and serves runtime modules using a VFS.\n *\n * Responsibilities:\n * - Resolve logical module IDs to physical paths or URLs.\n * - In editor mode, rewrite import specifiers and serve modules as data URLs after transpile.\n * - Transpile TypeScript to JavaScript on the fly (requires `window.ts` TypeScript runtime).\n * - Gather static and dynamic import dependencies for tooling.\n *\n * Modes:\n * - Editor mode (`editorMode === true`): modules are rewritten to data URLs after transpile/build.\n * - Runtime mode (`editorMode === false`): returns .js URLs directly (with .ts -\\> .js mapping).\n *\n * Caching:\n * - Built modules are memoized in `_built` map keyed by logical ID.\n *\n * @public\n */\nexport class ScriptRegistry {\n private _vfs: VFS;\n private _scriptsRoot: string;\n private _built: Map<string, string>; // logicalId -> dataURL\n\n /**\n * @param vfs - The virtual file system for existence checks, reads, and path ops.\n * @param scriptsRoot - Root directory for script resolution (used with `#/` specifiers).\n * @param editorMode - Whether to build modules to data URLs and rewrite imports.\n */\n constructor(vfs: VFS, scriptsRoot: string) {\n this._vfs = vfs;\n this._scriptsRoot = scriptsRoot;\n this._built = new Map();\n }\n\n /**\n * The active virtual file system.\n *\n * Assigning a new VFS clears the build cache.\n */\n get VFS() {\n return this._vfs;\n }\n set VFS(vfs: VFS) {\n if (vfs !== this._vfs) {\n this._vfs = vfs;\n this._built.clear();\n }\n }\n\n /**\n * The root path used by `#/` specifiers.\n */\n get scriptsRoot() {\n return this._scriptsRoot;\n }\n set scriptsRoot(path: string) {\n this._scriptsRoot = path;\n }\n\n /**\n * Fetches raw source for a logical module id by probing known extensions.\n *\n * Search order:\n * - If `id` already ends with `.ts` or `.js` and is a file -\\> return it.\n * - Else try `.id.ts`, then `.id.js`.\n *\n * @param id - Logical module identifier (absolute or logical path-like).\n * @returns Source code, resolved path, and type (`'js' | 'ts'`), or `undefined` if not found.\n */\n protected async fetchSource(id: string) {\n let type: Nullable<'js' | 'ts'> = null;\n let pathWithExt = '';\n if (id.endsWith('.ts')) {\n pathWithExt = id;\n type = 'ts';\n } else if (id.endsWith('.js')) {\n pathWithExt = id;\n type = 'js';\n }\n if (type) {\n const exists = await this._vfs.exists(pathWithExt);\n if (!exists) {\n type = null;\n }\n const stat = await this._vfs.stat(pathWithExt);\n if (stat.isDirectory) {\n type = null;\n }\n }\n const types = ['ts', 'js'] as const;\n if (!type) {\n for (const t of types) {\n pathWithExt = `${id}.${t}`;\n const exists = await this._vfs.exists(pathWithExt);\n if (exists) {\n const stats = await this._vfs.stat(pathWithExt);\n if (stats.isFile) {\n type = t;\n break;\n }\n }\n }\n }\n if (type) {\n const code = (await this._vfs.readFile(pathWithExt, { encoding: 'utf8' })) as string;\n return { code, type, path: pathWithExt };\n }\n }\n\n /**\n * Resolves a module entry to a URL suitable for dynamic import.\n *\n * Behavior:\n * - In editor mode, builds the module to a data URL.\n * - Otherwise, returns `.js` URL directly:\n * - If `id` ends with `.js`: return as-is.\n * - If `id` ends with `.ts`: map to `.js` (assumes pre-built file exists).\n * - Else: append `.js`.\n *\n * @param entryId - Entry module identifier (logical or path-like).\n * @returns A URL string that can be used in `import(...)`.\n */\n async resolveRuntimeUrl(entryId: string) {\n const id = await this.resolveLogicalId(entryId);\n if (id.startsWith('/assets/@builtins/')) {\n return await this.build(String(id));\n }\n return getApp().editorMode !== 'none'\n ? await this.build(String(id))\n : id.endsWith('.js')\n ? id\n : id.endsWith('.ts')\n ? `${id.slice(0, -3)}.js`\n : `${id}.js`;\n }\n\n /**\n * Recursively gathers direct static and dynamic import dependencies for a module.\n *\n * Only relative specifiers (`./` or `../`) are followed. Absolute, special, and bare\n * module specifiers are ignored here.\n *\n * @param entryId - The starting (possibly relative) specifier from `fromId`.\n * @param fromId - The logical id of the module containing `entryId`.\n * @param dependencies - Output map of `resolvedSourcePath -\\> file contents`.\n */\n async getDependencies(entryId: string, fromId: string, dependencies: Record<string, string>) {\n const reStatic = /\\b(?:import|export)\\s+[^\"']*?from\\s+(['\"])([^'\"]+)\\1/g;\n const reDynamic = /\\bimport\\s*\\(\\s*(['\"])([^'\"]+)\\1\\s*\\)/g;\n\n const normalizedId = await this.resolveLogicalId(entryId, fromId);\n const srcPath = await this.resolveSourcePath(normalizedId);\n if (!srcPath || dependencies[srcPath.path] !== undefined) {\n return;\n }\n const code = (await this._vfs.readFile(srcPath.path, { encoding: 'utf8' })) as string;\n dependencies[srcPath.path] = code;\n\n const gather = async (input: string, re: RegExp) => {\n for (;;) {\n const m = re.exec(input);\n if (!m) {\n break;\n }\n\n const spec = m[2];\n\n if (spec.startsWith('./') || spec.startsWith('../')) {\n await this.getDependencies(spec, normalizedId, dependencies);\n }\n }\n };\n\n await gather(code, reStatic);\n await gather(code, reDynamic);\n }\n\n /**\n * Builds a logical module id into a data URL (editor mode pipeline).\n *\n * Steps:\n * - Resolve source path (.ts/.js) via {@link ScriptRegistry.resolveSourcePath}.\n * - Read source code.\n * - Rewrite import specifiers via {@link ScriptRegistry.rewriteImports}.\n * - Transpile TypeScript if needed via {@link ScriptRegistry.transpile}.\n * - Convert to `data:` URL and memoize in `_built`.\n *\n * @param id - Logical module id to build.\n * @returns Data URL string for dynamic import, or empty string if not found.\n */\n private async build(id: string) {\n const key = String(id);\n const cached = this._built.get(key);\n if (cached) {\n return cached;\n }\n\n const srcPath = await this.resolveSourcePath(key);\n if (!srcPath) {\n return '';\n }\n const code = (await this._vfs.readFile(srcPath.path, { encoding: 'utf8' })) as string;\n\n const rewritten = await this.rewriteImports(code, key);\n const js = await this.transpile(rewritten, key, srcPath.type);\n const url = toDataUrl(js, key);\n this._built.set(key, url);\n return url;\n }\n\n /**\n * Transpiles code to JavaScript and appends sourceURL/sourceMap hints.\n *\n * Behavior:\n * - For `'js'`, returns code with `//# sourceURL=logicalId`.\n * - For `'ts'`, requires `window.ts` (TypeScript compiler) to be present and\n * transpiles to ES2015/ESNext module with inline source maps.\n *\n * @param code - Source code to transpile.\n * @param _id - Logical module id (used for fileName/sourceURL).\n * @param type - Source type (`'js' | 'ts'`).\n * @returns Transpiled JavaScript source.\n * @throws If TypeScript runtime is not found for TS input.\n */\n private async transpile(code: string, _id: string, type: 'js' | 'ts') {\n const logicalId = String(_id);\n\n if (type === 'js') {\n return `${code}\\n//# sourceURL=${logicalId}`;\n }\n\n const ts = (window as any).ts as typeof TS;\n if (!ts) {\n throw new Error('TypeScript runtime (window.ts) not found. Load typescript.js first.');\n }\n\n const res = ts.transpileModule(code, {\n compilerOptions: {\n target: ts.ScriptTarget.ES2015,\n module: ts.ModuleKind.ESNext,\n sourceMap: true,\n inlineSources: true,\n experimentalDecorators: true,\n useDefineForClassFields: false\n },\n fileName: logicalId\n });\n\n let out = res.outputText || '';\n if (res.sourceMapText) {\n const mapBase64 = btoa(unescape(encodeURIComponent(res.sourceMapText)));\n out += `\\n//# sourceMappingURL=data:application/json;base64,${mapBase64}`;\n }\n out += `\\n//# sourceURL=${logicalId}`;\n return out;\n }\n\n /**\n * Rewrites ESM import specifiers in `code` into runtime-loadable URLs.\n *\n * Parsing:\n * - Uses `es-module-lexer` to find import spans; sorts them ascending by start.\n *\n * Replacement rules:\n * - Skip invalid spans or ones without quoted specifiers.\n * - If spec is absolute URL, special URL (data:, blob:), or bare module:\n * - If it starts with `@zephyr3d/`, keep as-is (external).\n * - Otherwise resolve to a logical id and attempt to `build` it (if available).\n * - Else (relative spec), resolve from `fromId` and `build` recursively.\n *\n * Output:\n * - Directly writes the replacement specifier without re-adding quotes,\n * so replacements must themselves be quoted or be valid URLs/data URLs.\n *\n * @param code - Module source code to transform.\n * @param fromId - The logical id of the current module (resolution base for relatives).\n * @returns Transformed source with rewritten import specifiers.\n */\n private async rewriteImports(code: string, fromId: string) {\n await init;\n const [imports] = parse(code);\n const list = [...imports].sort((a, b) => (a.s || 0) - (b.s || 0));\n let out = '';\n let last = 0;\n\n for (const im of list) {\n // Skip import.meta entries reported by es-module-lexer.\n // Their \"specifier\" span points to the whole \"import.meta\" expression,\n // which must remain untouched.\n if (im.d === -2) {\n continue;\n }\n // must have quotes\n const hasQuote = im.ss != null && im.se != null;\n if (!hasQuote || im.se <= im.ss) {\n continue;\n }\n // must have contents\n if (im.e <= im.s) {\n continue;\n }\n // append [last, s)\n out += code.slice(last, im.s);\n\n const spec = code.slice(im.s, im.e); // original spec\n let replacement = spec;\n if (isAbsoluteUrl(spec) || isSpecialUrl(spec) || isBareModule(spec)) {\n if (spec.startsWith('@zephyr3d/')) {\n replacement = spec;\n } else {\n const depId = await this.resolveLogicalId(spec);\n replacement = await this.build(depId); // try build as dependence\n }\n } else {\n const depId = await this.resolveLogicalId(spec, String(fromId));\n replacement = await this.build(depId); // recursively build as dataURL\n }\n out += replacement; // 不加引号\n last = im.e;\n }\n out += code.slice(last);\n return out;\n }\n\n /**\n * Resolves a specifier to a logical id suitable for further processing.\n *\n * Resolution rules:\n * - `#/path`: resolved against `scriptsRoot` via VFS join/normalize.\n * - `./` or `../`: resolved relative to `fromId` directory (requires `fromId`).\n * - `/absolute`: treated as absolute from root (normalized).\n * - Bare module in editor mode: if `/deps.lock.json` exists and contains an entry,\n * map to the dependency's `entry` path; otherwise return as-is.\n * - Else (non-editor bare module): return `spec` unchanged (external).\n *\n * @param spec - Import specifier string.\n * @param fromId - Optional base logical id used for relative resolution.\n * @returns A normalized logical id or an external specifier string.\n * @throws If a relative import is provided without `fromId`.\n */\n async resolveLogicalId(spec: string, fromId?: string) {\n if (spec.startsWith('#/')) {\n return this._vfs.normalizePath(this._vfs.join(this._scriptsRoot, spec.slice(2)));\n } else if (spec.startsWith('./') || spec.startsWith('../')) {\n if (!fromId) {\n throw new Error(`Relative import \"${spec}\" requires fromId`);\n }\n return this._vfs.normalizePath(\n this._vfs.join(this._vfs.dirname(this._vfs.normalizePath(fromId)), spec)\n );\n } else if (spec.startsWith('/')) {\n return spec.replace(/^\\/+/, '/');\n } else if (getApp().editorMode !== 'none') {\n const libRoot = '/';\n // naked module, checking if it is a installed module in editor mode\n let depsLockPath = this._vfs.normalizePath(this._vfs.join(libRoot, 'libs/deps.lock.json'));\n let depsExists = await this._vfs.exists(depsLockPath);\n if (depsExists) {\n const content = (await this._vfs.readFile(depsLockPath, { encoding: 'utf8' })) as string;\n const depsInfo = JSON.parse(content) as { dependencies: Record<string, { entry: string }> };\n if (depsInfo?.dependencies[spec]) {\n return this._vfs.normalizePath(this._vfs.join(libRoot, depsInfo.dependencies[spec].entry));\n }\n }\n }\n return spec;\n }\n\n /**\n * Resolves a logical id to a concrete source path and type by probing extensions.\n *\n * Rules:\n * - If `logicalId` ends with `.ts` or `.js`/`.mjs` and is a file, return it.\n * - Else probe `logicalId.ts`, `logicalId.js`, `logicalId.mjs` in that order.\n * - Maps `.mjs` to type `'js'`.\n *\n * @param logicalId - The normalized logical module id (path-like).\n * @returns `{ type, path }` or `null` if not found.\n */\n async resolveSourcePath(logicalId: string) {\n let type: Nullable<'js' | 'ts'> = null;\n let pathWithExt = '';\n if (logicalId.endsWith('.ts')) {\n pathWithExt = logicalId;\n type = 'ts';\n } else if (logicalId.endsWith('.js') || logicalId.endsWith('.mjs')) {\n pathWithExt = logicalId;\n type = 'js';\n }\n if (type) {\n const exists = await this._vfs.exists(pathWithExt);\n if (!exists) {\n type = null;\n }\n const stat = await this._vfs.stat(pathWithExt);\n if (stat.isDirectory) {\n type = null;\n }\n }\n const types = ['ts', 'js', 'mjs'] as const;\n if (!type) {\n for (const t of types) {\n pathWithExt = `${logicalId}.${t}`;\n const exists = await this._vfs.exists(pathWithExt);\n if (exists) {\n const stats = await this._vfs.stat(pathWithExt);\n if (stats.isFile) {\n type = t === 'ts' ? 'ts' : 'js';\n break;\n }\n }\n }\n }\n return type ? { type, path: pathWithExt } : null;\n }\n}\n"],"names":["toDataUrl","js","id","b64","textToBase64","encodeURIComponent","String","isAbsoluteUrl","spec","test","isSpecialUrl","isBareModule","startsWith","ScriptRegistry","_vfs","_scriptsRoot","_built","vfs","scriptsRoot","Map","VFS","clear","path","fetchSource","type","pathWithExt","endsWith","exists","stat","isDirectory","types","t","stats","isFile","code","readFile","encoding","resolveRuntimeUrl","entryId","resolveLogicalId","build","getApp","editorMode","slice","getDependencies","fromId","dependencies","reStatic","reDynamic","normalizedId","srcPath","resolveSourcePath","undefined","gather","input","re","m","exec","key","cached","get","rewritten","rewriteImports","transpile","url","set","_id","logicalId","ts","window","Error","res","transpileModule","compilerOptions","target","ScriptTarget","ES2015","module","ModuleKind","ESNext","sourceMap","inlineSources","experimentalDecorators","useDefineForClassFields","fileName","out","outputText","sourceMapText","mapBase64","btoa","unescape","init","imports","parse","list","sort","a","b","s","last","im","d","hasQuote","ss","se","e","replacement","depId","normalizePath","join","dirname","replace","libRoot","depsLockPath","depsExists","content","depsInfo","JSON","entry"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scriptregistry.js","sources":["../../src/app/scriptregistry.ts"],"sourcesContent":["import type * as TS from 'typescript';\r\nimport type { Nullable, VFS } from '@zephyr3d/base';\r\nimport { textToBase64 } from '@zephyr3d/base';\r\nimport { init, parse } from 'es-module-lexer';\r\nimport { getApp } from './api';\r\n\r\n/**\r\n * Converts JavaScript source to a data URL tied to a logical module id.\r\n *\r\n * @param js - The JavaScript source code to embed.\r\n * @param id - Logical module identifier (used only for sourceURL tagging).\r\n * @returns A `data:text/javascript;base64,...` URL with an encoded `#id` suffix.\r\n * @internal\r\n */\r\nfunction toDataUrl(js: string, id: string) {\r\n const b64 = textToBase64(js);\r\n return `data:text/javascript;base64,${b64}#${encodeURIComponent(String(id))}`;\r\n}\r\n\r\n/**\r\n * Checks whether a specifier is an absolute HTTP(S) URL.\r\n * @internal\r\n */\r\nfunction isAbsoluteUrl(spec: string) {\r\n return /^https?:\\/\\//i.test(spec);\r\n}\r\n\r\n/**\r\n * Checks whether a specifier is a special URL (data: or blob:).\r\n * @internal\r\n */\r\nfunction isSpecialUrl(spec: string) {\r\n return /^(data|blob):/i.test(spec);\r\n}\r\n\r\n/**\r\n * Checks whether a specifier is a bare module (not starting with ./, ../, /, or #/).\r\n * @internal\r\n */\r\nfunction isBareModule(spec: string) {\r\n return !spec.startsWith('./') && !spec.startsWith('../') && !spec.startsWith('/') && !spec.startsWith('#/');\r\n}\r\n\r\n/**\r\n * Resolves, builds, and serves runtime modules using a VFS.\r\n *\r\n * Responsibilities:\r\n * - Resolve logical module IDs to physical paths or URLs.\r\n * - In editor mode, rewrite import specifiers and serve modules as data URLs after transpile.\r\n * - Transpile TypeScript to JavaScript on the fly (requires `window.ts` TypeScript runtime).\r\n * - Gather static and dynamic import dependencies for tooling.\r\n *\r\n * Modes:\r\n * - Editor mode (`editorMode === true`): modules are rewritten to data URLs after transpile/build.\r\n * - Runtime mode (`editorMode === false`): returns .js URLs directly (with .ts -\\> .js mapping).\r\n *\r\n * Caching:\r\n * - Built modules are memoized in `_built` map keyed by logical ID.\r\n *\r\n * @public\r\n */\r\nexport class ScriptRegistry {\r\n private _vfs: VFS;\r\n private _scriptsRoot: string;\r\n private _built: Map<string, string>; // logicalId -> dataURL\r\n\r\n /**\r\n * @param vfs - The virtual file system for existence checks, reads, and path ops.\r\n * @param scriptsRoot - Root directory for script resolution (used with `#/` specifiers).\r\n * @param editorMode - Whether to build modules to data URLs and rewrite imports.\r\n */\r\n constructor(vfs: VFS, scriptsRoot: string) {\r\n this._vfs = vfs;\r\n this._scriptsRoot = scriptsRoot;\r\n this._built = new Map();\r\n }\r\n\r\n /**\r\n * The active virtual file system.\r\n *\r\n * Assigning a new VFS clears the build cache.\r\n */\r\n get VFS() {\r\n return this._vfs;\r\n }\r\n set VFS(vfs: VFS) {\r\n if (vfs !== this._vfs) {\r\n this._vfs = vfs;\r\n this._built.clear();\r\n }\r\n }\r\n\r\n /**\r\n * The root path used by `#/` specifiers.\r\n */\r\n get scriptsRoot() {\r\n return this._scriptsRoot;\r\n }\r\n set scriptsRoot(path: string) {\r\n this._scriptsRoot = path;\r\n }\r\n\r\n /**\r\n * Fetches raw source for a logical module id by probing known extensions.\r\n *\r\n * Search order:\r\n * - If `id` already ends with `.ts` or `.js` and is a file -\\> return it.\r\n * - Else try `.id.ts`, then `.id.js`.\r\n *\r\n * @param id - Logical module identifier (absolute or logical path-like).\r\n * @returns Source code, resolved path, and type (`'js' | 'ts'`), or `undefined` if not found.\r\n */\r\n protected async fetchSource(id: string) {\r\n let type: Nullable<'js' | 'ts'> = null;\r\n let pathWithExt = '';\r\n if (id.endsWith('.ts')) {\r\n pathWithExt = id;\r\n type = 'ts';\r\n } else if (id.endsWith('.js')) {\r\n pathWithExt = id;\r\n type = 'js';\r\n }\r\n if (type) {\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (!exists) {\r\n type = null;\r\n }\r\n const stat = await this._vfs.stat(pathWithExt);\r\n if (stat.isDirectory) {\r\n type = null;\r\n }\r\n }\r\n const types = ['ts', 'js'] as const;\r\n if (!type) {\r\n for (const t of types) {\r\n pathWithExt = `${id}.${t}`;\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (exists) {\r\n const stats = await this._vfs.stat(pathWithExt);\r\n if (stats.isFile) {\r\n type = t;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (type) {\r\n const code = (await this._vfs.readFile(pathWithExt, { encoding: 'utf8' })) as string;\r\n return { code, type, path: pathWithExt };\r\n }\r\n }\r\n\r\n /**\r\n * Resolves a module entry to a URL suitable for dynamic import.\r\n *\r\n * Behavior:\r\n * - In editor mode, builds the module to a data URL.\r\n * - Otherwise, returns `.js` URL directly:\r\n * - If `id` ends with `.js`: return as-is.\r\n * - If `id` ends with `.ts`: map to `.js` (assumes pre-built file exists).\r\n * - Else: append `.js`.\r\n *\r\n * @param entryId - Entry module identifier (logical or path-like).\r\n * @returns A URL string that can be used in `import(...)`.\r\n */\r\n async resolveRuntimeUrl(entryId: string) {\r\n const id = await this.resolveLogicalId(entryId);\r\n if (id.startsWith('/assets/@builtins/')) {\r\n return await this.build(String(id));\r\n }\r\n return getApp().editorMode !== 'none'\r\n ? await this.build(String(id))\r\n : id.endsWith('.js')\r\n ? id\r\n : id.endsWith('.ts')\r\n ? `${id.slice(0, -3)}.js`\r\n : `${id}.js`;\r\n }\r\n\r\n /**\r\n * Recursively gathers direct static and dynamic import dependencies for a module.\r\n *\r\n * Only relative specifiers (`./` or `../`) are followed. Absolute, special, and bare\r\n * module specifiers are ignored here.\r\n *\r\n * @param entryId - The starting (possibly relative) specifier from `fromId`.\r\n * @param fromId - The logical id of the module containing `entryId`.\r\n * @param dependencies - Output map of `resolvedSourcePath -\\> file contents`.\r\n */\r\n async getDependencies(entryId: string, fromId: string, dependencies: Record<string, string>) {\r\n const reStatic = /\\b(?:import|export)\\s+[^\"']*?from\\s+(['\"])([^'\"]+)\\1/g;\r\n const reDynamic = /\\bimport\\s*\\(\\s*(['\"])([^'\"]+)\\1\\s*\\)/g;\r\n\r\n const normalizedId = await this.resolveLogicalId(entryId, fromId);\r\n const srcPath = await this.resolveSourcePath(normalizedId);\r\n if (!srcPath || dependencies[srcPath.path] !== undefined) {\r\n return;\r\n }\r\n const code = (await this._vfs.readFile(srcPath.path, { encoding: 'utf8' })) as string;\r\n dependencies[srcPath.path] = code;\r\n\r\n const gather = async (input: string, re: RegExp) => {\r\n for (;;) {\r\n const m = re.exec(input);\r\n if (!m) {\r\n break;\r\n }\r\n\r\n const spec = m[2];\r\n\r\n if (spec.startsWith('./') || spec.startsWith('../')) {\r\n await this.getDependencies(spec, normalizedId, dependencies);\r\n }\r\n }\r\n };\r\n\r\n await gather(code, reStatic);\r\n await gather(code, reDynamic);\r\n }\r\n\r\n /**\r\n * Builds a logical module id into a data URL (editor mode pipeline).\r\n *\r\n * Steps:\r\n * - Resolve source path (.ts/.js) via {@link ScriptRegistry.resolveSourcePath}.\r\n * - Read source code.\r\n * - Rewrite import specifiers via {@link ScriptRegistry.rewriteImports}.\r\n * - Transpile TypeScript if needed via {@link ScriptRegistry.transpile}.\r\n * - Convert to `data:` URL and memoize in `_built`.\r\n *\r\n * @param id - Logical module id to build.\r\n * @returns Data URL string for dynamic import, or empty string if not found.\r\n */\r\n private async build(id: string) {\r\n const key = String(id);\r\n const cached = this._built.get(key);\r\n if (cached) {\r\n return cached;\r\n }\r\n\r\n const srcPath = await this.resolveSourcePath(key);\r\n if (!srcPath) {\r\n return '';\r\n }\r\n const code = (await this._vfs.readFile(srcPath.path, { encoding: 'utf8' })) as string;\r\n\r\n const rewritten = await this.rewriteImports(code, key);\r\n const js = await this.transpile(rewritten, key, srcPath.type);\r\n const url = toDataUrl(js, key);\r\n this._built.set(key, url);\r\n return url;\r\n }\r\n\r\n /**\r\n * Transpiles code to JavaScript and appends sourceURL/sourceMap hints.\r\n *\r\n * Behavior:\r\n * - For `'js'`, returns code with `//# sourceURL=logicalId`.\r\n * - For `'ts'`, requires `window.ts` (TypeScript compiler) to be present and\r\n * transpiles to ES2015/ESNext module with inline source maps.\r\n *\r\n * @param code - Source code to transpile.\r\n * @param _id - Logical module id (used for fileName/sourceURL).\r\n * @param type - Source type (`'js' | 'ts'`).\r\n * @returns Transpiled JavaScript source.\r\n * @throws If TypeScript runtime is not found for TS input.\r\n */\r\n private async transpile(code: string, _id: string, type: 'js' | 'ts') {\r\n const logicalId = String(_id);\r\n\r\n if (type === 'js') {\r\n return `${code}\\n//# sourceURL=${logicalId}`;\r\n }\r\n\r\n const ts = (window as any).ts as typeof TS;\r\n if (!ts) {\r\n throw new Error('TypeScript runtime (window.ts) not found. Load typescript.js first.');\r\n }\r\n\r\n const res = ts.transpileModule(code, {\r\n compilerOptions: {\r\n target: ts.ScriptTarget.ES2015,\r\n module: ts.ModuleKind.ESNext,\r\n sourceMap: true,\r\n inlineSources: true,\r\n experimentalDecorators: true,\r\n useDefineForClassFields: false\r\n },\r\n fileName: logicalId\r\n });\r\n\r\n let out = res.outputText || '';\r\n if (res.sourceMapText) {\r\n const mapBase64 = btoa(unescape(encodeURIComponent(res.sourceMapText)));\r\n out += `\\n//# sourceMappingURL=data:application/json;base64,${mapBase64}`;\r\n }\r\n out += `\\n//# sourceURL=${logicalId}`;\r\n return out;\r\n }\r\n\r\n /**\r\n * Rewrites ESM import specifiers in `code` into runtime-loadable URLs.\r\n *\r\n * Parsing:\r\n * - Uses `es-module-lexer` to find import spans; sorts them ascending by start.\r\n *\r\n * Replacement rules:\r\n * - Skip invalid spans or ones without quoted specifiers.\r\n * - If spec is absolute URL, special URL (data:, blob:), or bare module:\r\n * - If it starts with `@zephyr3d/`, keep as-is (external).\r\n * - Otherwise resolve to a logical id and attempt to `build` it (if available).\r\n * - Else (relative spec), resolve from `fromId` and `build` recursively.\r\n *\r\n * Output:\r\n * - Directly writes the replacement specifier without re-adding quotes,\r\n * so replacements must themselves be quoted or be valid URLs/data URLs.\r\n *\r\n * @param code - Module source code to transform.\r\n * @param fromId - The logical id of the current module (resolution base for relatives).\r\n * @returns Transformed source with rewritten import specifiers.\r\n */\r\n private async rewriteImports(code: string, fromId: string) {\r\n await init;\r\n const [imports] = parse(code);\r\n const list = [...imports].sort((a, b) => (a.s || 0) - (b.s || 0));\r\n let out = '';\r\n let last = 0;\r\n\r\n for (const im of list) {\r\n // Skip import.meta entries reported by es-module-lexer.\r\n // Their \"specifier\" span points to the whole \"import.meta\" expression,\r\n // which must remain untouched.\r\n if (im.d === -2) {\r\n continue;\r\n }\r\n // must have quotes\r\n const hasQuote = im.ss != null && im.se != null;\r\n if (!hasQuote || im.se <= im.ss) {\r\n continue;\r\n }\r\n // must have contents\r\n if (im.e <= im.s) {\r\n continue;\r\n }\r\n // append [last, s)\r\n out += code.slice(last, im.s);\r\n\r\n const spec = code.slice(im.s, im.e); // original spec\r\n let replacement = spec;\r\n if (isAbsoluteUrl(spec) || isSpecialUrl(spec) || isBareModule(spec)) {\r\n if (spec.startsWith('@zephyr3d/')) {\r\n replacement = spec;\r\n } else {\r\n const depId = await this.resolveLogicalId(spec);\r\n replacement = await this.build(depId); // try build as dependence\r\n }\r\n } else {\r\n const depId = await this.resolveLogicalId(spec, String(fromId));\r\n replacement = await this.build(depId); // recursively build as dataURL\r\n }\r\n out += replacement; // 不加引号\r\n last = im.e;\r\n }\r\n out += code.slice(last);\r\n return out;\r\n }\r\n\r\n /**\r\n * Resolves a specifier to a logical id suitable for further processing.\r\n *\r\n * Resolution rules:\r\n * - `#/path`: resolved against `scriptsRoot` via VFS join/normalize.\r\n * - `./` or `../`: resolved relative to `fromId` directory (requires `fromId`).\r\n * - `/absolute`: treated as absolute from root (normalized).\r\n * - Bare module in editor mode: if `/deps.lock.json` exists and contains an entry,\r\n * map to the dependency's `entry` path; otherwise return as-is.\r\n * - Else (non-editor bare module): return `spec` unchanged (external).\r\n *\r\n * @param spec - Import specifier string.\r\n * @param fromId - Optional base logical id used for relative resolution.\r\n * @returns A normalized logical id or an external specifier string.\r\n * @throws If a relative import is provided without `fromId`.\r\n */\r\n async resolveLogicalId(spec: string, fromId?: string) {\r\n if (spec.startsWith('#/')) {\r\n return this._vfs.normalizePath(this._vfs.join(this._scriptsRoot, spec.slice(2)));\r\n } else if (spec.startsWith('./') || spec.startsWith('../')) {\r\n if (!fromId) {\r\n throw new Error(`Relative import \"${spec}\" requires fromId`);\r\n }\r\n return this._vfs.normalizePath(\r\n this._vfs.join(this._vfs.dirname(this._vfs.normalizePath(fromId)), spec)\r\n );\r\n } else if (spec.startsWith('/')) {\r\n return spec.replace(/^\\/+/, '/');\r\n } else if (getApp().editorMode !== 'none') {\r\n const libRoot = '/';\r\n // naked module, checking if it is a installed module in editor mode\r\n let depsLockPath = this._vfs.normalizePath(this._vfs.join(libRoot, 'libs/deps.lock.json'));\r\n let depsExists = await this._vfs.exists(depsLockPath);\r\n if (depsExists) {\r\n const content = (await this._vfs.readFile(depsLockPath, { encoding: 'utf8' })) as string;\r\n const depsInfo = JSON.parse(content) as { dependencies: Record<string, { entry: string }> };\r\n if (depsInfo?.dependencies[spec]) {\r\n return this._vfs.normalizePath(this._vfs.join(libRoot, depsInfo.dependencies[spec].entry));\r\n }\r\n }\r\n }\r\n return spec;\r\n }\r\n\r\n /**\r\n * Resolves a logical id to a concrete source path and type by probing extensions.\r\n *\r\n * Rules:\r\n * - If `logicalId` ends with `.ts` or `.js`/`.mjs` and is a file, return it.\r\n * - Else probe `logicalId.ts`, `logicalId.js`, `logicalId.mjs` in that order.\r\n * - Maps `.mjs` to type `'js'`.\r\n *\r\n * @param logicalId - The normalized logical module id (path-like).\r\n * @returns `{ type, path }` or `null` if not found.\r\n */\r\n async resolveSourcePath(logicalId: string) {\r\n let type: Nullable<'js' | 'ts'> = null;\r\n let pathWithExt = '';\r\n if (logicalId.endsWith('.ts')) {\r\n pathWithExt = logicalId;\r\n type = 'ts';\r\n } else if (logicalId.endsWith('.js') || logicalId.endsWith('.mjs')) {\r\n pathWithExt = logicalId;\r\n type = 'js';\r\n }\r\n if (type) {\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (!exists) {\r\n type = null;\r\n }\r\n const stat = await this._vfs.stat(pathWithExt);\r\n if (stat.isDirectory) {\r\n type = null;\r\n }\r\n }\r\n const types = ['ts', 'js', 'mjs'] as const;\r\n if (!type) {\r\n for (const t of types) {\r\n pathWithExt = `${logicalId}.${t}`;\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (exists) {\r\n const stats = await this._vfs.stat(pathWithExt);\r\n if (stats.isFile) {\r\n type = t === 'ts' ? 'ts' : 'js';\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return type ? { type, path: pathWithExt } : null;\r\n }\r\n}\r\n"],"names":["toDataUrl","js","id","b64","textToBase64","encodeURIComponent","String","isAbsoluteUrl","spec","test","isSpecialUrl","isBareModule","startsWith","ScriptRegistry","_vfs","_scriptsRoot","_built","vfs","scriptsRoot","Map","VFS","clear","path","fetchSource","type","pathWithExt","endsWith","exists","stat","isDirectory","types","t","stats","isFile","code","readFile","encoding","resolveRuntimeUrl","entryId","resolveLogicalId","build","getApp","editorMode","slice","getDependencies","fromId","dependencies","reStatic","reDynamic","normalizedId","srcPath","resolveSourcePath","undefined","gather","input","re","m","exec","key","cached","get","rewritten","rewriteImports","transpile","url","set","_id","logicalId","ts","window","Error","res","transpileModule","compilerOptions","target","ScriptTarget","ES2015","module","ModuleKind","ESNext","sourceMap","inlineSources","experimentalDecorators","useDefineForClassFields","fileName","out","outputText","sourceMapText","mapBase64","btoa","unescape","init","imports","parse","list","sort","a","b","s","last","im","d","hasQuote","ss","se","e","replacement","depId","normalizePath","join","dirname","replace","libRoot","depsLockPath","depsExists","content","depsInfo","JSON","entry"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { mixinPBRCommon } from '../pbr/common.js';
|
|
|
4
4
|
import { Vector4, Vector2 } from '@zephyr3d/base';
|
|
5
5
|
import { mixinLight } from '../lit.js';
|
|
6
6
|
import { ShaderHelper } from '../../shader/helper.js';
|
|
7
|
-
import {
|
|
7
|
+
import { RENDER_PASS_TYPE_LIGHT, LIGHT_TYPE_RECT, LIGHT_TYPE_POINT, MaterialVaryingFlags } from '../../../values.js';
|
|
8
8
|
|
|
9
9
|
const PBR_REFLECTION_MODE = {
|
|
10
10
|
none: 0,
|
|
@@ -25,10 +25,6 @@ const PBR_REFLECTION_MODE = {
|
|
|
25
25
|
const METALLIC_UNIFORM = S.defineInstanceUniform('metallic', 'float', 'Metallic');
|
|
26
26
|
const ROUGHNESS_UNIFORM = S.defineInstanceUniform('roughness', 'float', 'Roughness');
|
|
27
27
|
const SPECULAR_FACTOR_UNFORM = S.defineInstanceUniform('specularFactor', 'rgba', 'SpecularFactor');
|
|
28
|
-
const REFLECTION_MODE_UNIFORM = S.defineInstanceUniform('reflectionMode', 'float', 'ReflectionMode');
|
|
29
|
-
const ANISOTROPY_UNIFORM = S.defineInstanceUniform('anisotropy', 'float', 'Anisotropy');
|
|
30
|
-
const ANISOTROPY_DIRECTION_UNIFORM = S.defineInstanceUniform('anisotropyDirection', 'float', 'AnisotropyDirection');
|
|
31
|
-
const ANISOTROPY_DIRECTION_SCALE_BIAS_UNIFORM = S.defineInstanceUniform('anisotropyDirectionScaleBias', 'vec2', 'AnisotropyDirectionScaleBias');
|
|
32
28
|
return class extends S {
|
|
33
29
|
static pbrMetallicRoughnessMixed = true;
|
|
34
30
|
_metallic;
|
|
@@ -88,7 +84,6 @@ const PBR_REFLECTION_MODE = {
|
|
|
88
84
|
directLighting(scope, lightDir, lightColor, normal, viewVec, commonData, diffuseScale, specularScale, sourceRadiusFactor, outColor) {
|
|
89
85
|
const pb = scope.$builder;
|
|
90
86
|
const that = this;
|
|
91
|
-
const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);
|
|
92
87
|
const funcName = 'Z_PBRMR_DirectLighting';
|
|
93
88
|
pb.func(funcName, [
|
|
94
89
|
pb.vec3('L'),
|
|
@@ -101,10 +96,10 @@ const PBR_REFLECTION_MODE = {
|
|
|
101
96
|
pb.float('sourceRadiusFactor'),
|
|
102
97
|
pb.vec3('outColor').inout()
|
|
103
98
|
], function() {
|
|
104
|
-
this.$l.reflectionMode =
|
|
105
|
-
this.$l.anisotropy =
|
|
106
|
-
this.$l.anisotropyDirection =
|
|
107
|
-
this.$l.anisotropyDirectionScaleBias =
|
|
99
|
+
this.$l.reflectionMode = this.zReflectionMode;
|
|
100
|
+
this.$l.anisotropy = this.zAnisotropy;
|
|
101
|
+
this.$l.anisotropyDirection = this.zAnisotropyDirection;
|
|
102
|
+
this.$l.anisotropyDirectionScaleBias = this.zAnisotropyDirectionScaleBias;
|
|
108
103
|
this.$l.H = pb.normalize(pb.add(this.viewVec, this.L));
|
|
109
104
|
this.$l.NoH = pb.clamp(pb.dot(this.normal, this.H), 0, 1);
|
|
110
105
|
this.$l.NoL = pb.clamp(pb.dot(this.normal, this.L), 0, 1);
|
|
@@ -230,8 +225,7 @@ const PBR_REFLECTION_MODE = {
|
|
|
230
225
|
}
|
|
231
226
|
}
|
|
232
227
|
calculateAnisotropyDirectionScaleBias(scope) {
|
|
233
|
-
|
|
234
|
-
return instancing ? scope.$inputs.zAnisotropyDirectionScaleBias : scope.zAnisotropyDirectionScaleBias;
|
|
228
|
+
return scope.zAnisotropyDirectionScaleBias;
|
|
235
229
|
}
|
|
236
230
|
PBRLight(scope, worldPos, normal, viewVec, albedo, TBN, outRoughness) {
|
|
237
231
|
const pb = scope.$builder;
|
|
@@ -289,10 +283,6 @@ const PBR_REFLECTION_MODE = {
|
|
|
289
283
|
scope.$outputs.zMetallic = this.getInstancedUniform(scope, METALLIC_UNIFORM);
|
|
290
284
|
scope.$outputs.zRoughness = this.getInstancedUniform(scope, ROUGHNESS_UNIFORM);
|
|
291
285
|
scope.$outputs.zSpecularFactor = this.getInstancedUniform(scope, SPECULAR_FACTOR_UNFORM);
|
|
292
|
-
scope.$outputs.zReflectionMode = this.getInstancedUniform(scope, REFLECTION_MODE_UNIFORM);
|
|
293
|
-
scope.$outputs.zAnisotropy = this.getInstancedUniform(scope, ANISOTROPY_UNIFORM);
|
|
294
|
-
scope.$outputs.zAnisotropyDirection = this.getInstancedUniform(scope, ANISOTROPY_DIRECTION_UNIFORM);
|
|
295
|
-
scope.$outputs.zAnisotropyDirectionScaleBias = this.getInstancedUniform(scope, ANISOTROPY_DIRECTION_SCALE_BIAS_UNIFORM);
|
|
296
286
|
}
|
|
297
287
|
}
|
|
298
288
|
fragmentShader(scope) {
|
|
@@ -303,11 +293,11 @@ const PBR_REFLECTION_MODE = {
|
|
|
303
293
|
scope.zMetallic = pb.float().uniform(2);
|
|
304
294
|
scope.zRoughness = pb.float().uniform(2);
|
|
305
295
|
scope.zSpecularFactor = pb.vec4().uniform(2);
|
|
306
|
-
scope.zReflectionMode = pb.float().uniform(2);
|
|
307
|
-
scope.zAnisotropy = pb.float().uniform(2);
|
|
308
|
-
scope.zAnisotropyDirection = pb.float().uniform(2);
|
|
309
|
-
scope.zAnisotropyDirectionScaleBias = pb.vec2().uniform(2);
|
|
310
296
|
}
|
|
297
|
+
scope.zReflectionMode = pb.float().uniform(2);
|
|
298
|
+
scope.zAnisotropy = pb.float().uniform(2);
|
|
299
|
+
scope.zAnisotropyDirection = pb.float().uniform(2);
|
|
300
|
+
scope.zAnisotropyDirectionScaleBias = pb.vec2().uniform(2);
|
|
311
301
|
}
|
|
312
302
|
}
|
|
313
303
|
applyUniformValues(bindGroup, ctx, pass) {
|
|
@@ -368,16 +358,13 @@ const PBR_REFLECTION_MODE = {
|
|
|
368
358
|
super.calculateCommonData(scope, albedo, normal, viewVec, TBN, data);
|
|
369
359
|
}
|
|
370
360
|
calculateReflectionMode(scope) {
|
|
371
|
-
|
|
372
|
-
return instancing ? scope.$inputs.zReflectionMode : scope.zReflectionMode;
|
|
361
|
+
return scope.zReflectionMode;
|
|
373
362
|
}
|
|
374
363
|
calculateAnisotropy(scope) {
|
|
375
|
-
|
|
376
|
-
return instancing ? scope.$inputs.zAnisotropy : scope.zAnisotropy;
|
|
364
|
+
return scope.zAnisotropy;
|
|
377
365
|
}
|
|
378
366
|
calculateAnisotropyDirection(scope) {
|
|
379
|
-
|
|
380
|
-
return instancing ? scope.$inputs.zAnisotropyDirection : scope.zAnisotropyDirection;
|
|
367
|
+
return scope.zAnisotropyDirection;
|
|
381
368
|
}
|
|
382
369
|
};
|
|
383
370
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pbrmetallicroughness.js","sources":["../../../../src/material/mixins/lightmodel/pbrmetallicroughness.ts"],"sourcesContent":["import type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport type { MeshMaterial } from '../../meshmaterial';\r\nimport { applyMaterialMixins } from '../../meshmaterial';\r\nimport type { TextureMixinInstanceTypes } from '../texture';\r\nimport { mixinTextureProps } from '../texture';\r\nimport type { IMixinPBRCommon } from '../pbr/common';\r\nimport { mixinPBRCommon } from '../pbr/common';\r\nimport type { DrawContext } from '../../../render';\r\nimport type { Immutable } from '@zephyr3d/base';\r\nimport { Vector2, Vector4 } from '@zephyr3d/base';\r\nimport type { IMixinLight } from '../lit';\r\nimport { mixinLight } from '../lit';\r\nimport { ShaderHelper } from '../../shader/helper';\r\nimport {\r\n LIGHT_TYPE_POINT,\r\n LIGHT_TYPE_RECT,\r\n MaterialVaryingFlags,\r\n RENDER_PASS_TYPE_LIGHT\r\n} from '../../../values';\r\n\r\nexport type PBRReflectionMode = 'none' | 'ggx' | 'anisotropic' | 'glint';\r\n\r\nconst PBR_REFLECTION_MODE: Record<PBRReflectionMode, number> = {\r\n none: 0,\r\n ggx: 1,\r\n anisotropic: 2,\r\n glint: 3\r\n};\r\n\r\n/**\r\n * Interface for PBRMetallicRoughness lighting model mixin\r\n * @public\r\n */\r\nexport type IMixinPBRMetallicRoughness = {\r\n metallic: number;\r\n roughness: number;\r\n specularFactor: Vector4;\r\n reflectionMode: PBRReflectionMode;\r\n anisotropy: number;\r\n anisotropyDirection: number;\r\n anisotropyDirectionScaleBias: Vector2;\r\n PBRLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n TBN: PBShaderExp,\r\n outRoughness?: PBShaderExp\r\n ): PBShaderExp;\r\n calculateMetallic(scope: PBInsideFunctionScope, albedo: PBShaderExp, normal: PBShaderExp): PBShaderExp;\r\n calculateRoughness(scope: PBInsideFunctionScope, albedo: PBShaderExp, normal: PBShaderExp): PBShaderExp;\r\n calculateSpecularFactor(\r\n scope: PBInsideFunctionScope,\r\n albedo: PBShaderExp,\r\n normal: PBShaderExp\r\n ): PBShaderExp;\r\n calculateCommonData(\r\n scope: PBInsideFunctionScope,\r\n albedo: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n TBN: PBShaderExp,\r\n data: PBShaderExp\r\n ): void;\r\n} & IMixinPBRCommon &\r\n IMixinLight &\r\n TextureMixinInstanceTypes<\r\n ['metallicRoughness', 'occlusion', 'specular', 'specularColor', 'anisotropyDirection']\r\n >;\r\n\r\n/**\r\n * PBRMetallicRoughness lighting model mixin\r\n * @param BaseCls - Class to mix in\r\n * @returns Mixed class\r\n * @public\r\n */\r\nexport function mixinPBRMetallicRoughness<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).pbrMetallicRoughnessMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinPBRMetallicRoughness };\r\n }\r\n const S = applyMaterialMixins(\r\n BaseCls,\r\n mixinPBRCommon,\r\n mixinLight,\r\n mixinTextureProps('metallicRoughness'),\r\n mixinTextureProps('specular'),\r\n mixinTextureProps('specularColor'),\r\n mixinTextureProps('anisotropyDirection')\r\n );\r\n const METALLIC_UNIFORM = S.defineInstanceUniform('metallic', 'float', 'Metallic');\r\n const ROUGHNESS_UNIFORM = S.defineInstanceUniform('roughness', 'float', 'Roughness');\r\n const SPECULAR_FACTOR_UNFORM = S.defineInstanceUniform('specularFactor', 'rgba', 'SpecularFactor');\r\n const REFLECTION_MODE_UNIFORM = S.defineInstanceUniform('reflectionMode', 'float', 'ReflectionMode');\r\n const ANISOTROPY_UNIFORM = S.defineInstanceUniform('anisotropy', 'float', 'Anisotropy');\r\n const ANISOTROPY_DIRECTION_UNIFORM = S.defineInstanceUniform(\r\n 'anisotropyDirection',\r\n 'float',\r\n 'AnisotropyDirection'\r\n );\r\n const ANISOTROPY_DIRECTION_SCALE_BIAS_UNIFORM = S.defineInstanceUniform(\r\n 'anisotropyDirectionScaleBias',\r\n 'vec2',\r\n 'AnisotropyDirectionScaleBias'\r\n );\r\n\r\n return class extends S {\r\n static readonly pbrMetallicRoughnessMixed = true;\r\n private _metallic: number;\r\n private _roughness: number;\r\n private readonly _specularFactor: Vector4;\r\n private _reflectionMode: PBRReflectionMode;\r\n private _anisotropy: number;\r\n private _anisotropyDirection: number;\r\n private readonly _anisotropyDirectionScaleBias: Vector2;\r\n constructor() {\r\n super();\r\n this._metallic = 1;\r\n this._roughness = 1;\r\n this._specularFactor = Vector4.one();\r\n this._reflectionMode = 'ggx';\r\n this._anisotropy = 0.75;\r\n this._anisotropyDirection = 0;\r\n this._anisotropyDirectionScaleBias = new Vector2(1, 0);\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.metallic = other.metallic;\r\n this.roughness = other.roughness;\r\n this.specularFactor = other.specularFactor;\r\n this.reflectionMode = other.reflectionMode;\r\n this.anisotropy = other.anisotropy;\r\n this.anisotropyDirection = other.anisotropyDirection;\r\n this.anisotropyDirectionScaleBias = other.anisotropyDirectionScaleBias;\r\n }\r\n get metallic() {\r\n return this._metallic;\r\n }\r\n set metallic(val) {\r\n if (val !== this._metallic) {\r\n this._metallic = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get roughness() {\r\n return this._roughness;\r\n }\r\n set roughness(val) {\r\n if (val !== this._roughness) {\r\n this._roughness = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get specularFactor(): Immutable<Vector4> {\r\n return this._specularFactor;\r\n }\r\n set specularFactor(val: Immutable<Vector4>) {\r\n if (!val.equalsTo(this._specularFactor)) {\r\n this._specularFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n directLighting(\r\n scope: PBInsideFunctionScope,\r\n lightDir: PBShaderExp,\r\n lightColor: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n commonData: PBShaderExp,\r\n diffuseScale: PBShaderExp,\r\n specularScale: PBShaderExp,\r\n sourceRadiusFactor: PBShaderExp,\r\n outColor: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this as any;\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n const funcName = 'Z_PBRMR_DirectLighting';\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('L'),\r\n pb.vec3('lightColor'),\r\n pb.vec3('normal'),\r\n pb.vec3('viewVec'),\r\n that.getCommonDatasStruct(scope)('data'),\r\n pb.float('diffuseScale'),\r\n pb.float('specularScale'),\r\n pb.float('sourceRadiusFactor'),\r\n pb.vec3('outColor').inout()\r\n ],\r\n function () {\r\n this.$l.reflectionMode = instancing ? this.$inputs.zReflectionMode : this.zReflectionMode;\r\n this.$l.anisotropy = instancing ? this.$inputs.zAnisotropy : this.zAnisotropy;\r\n this.$l.anisotropyDirection = instancing\r\n ? this.$inputs.zAnisotropyDirection\r\n : this.zAnisotropyDirection;\r\n this.$l.anisotropyDirectionScaleBias = instancing\r\n ? this.$inputs.zAnisotropyDirectionScaleBias\r\n : this.zAnisotropyDirectionScaleBias;\r\n this.$l.H = pb.normalize(pb.add(this.viewVec, this.L));\r\n this.$l.NoH = pb.clamp(pb.dot(this.normal, this.H), 0, 1);\r\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.L), 0, 1);\r\n this.$l.NoV = pb.clamp(pb.dot(this.normal, this.viewVec), 0, 1);\r\n this.$if(pb.greaterThan(this.NoL, 0), function () {\r\n this.$l.VoH = pb.clamp(pb.dot(this.viewVec, this.H), 0, 1);\r\n this.$l.schlickFresnel = that.fresnelSchlick(this, this.VoH, this.data.f0.rgb, this.data.f90);\r\n if (that.iridescence) {\r\n this.$l.F = pb.mix(\r\n this.schlickFresnel,\r\n this.data.iridescenceFresnel,\r\n this.data.iridescenceFactor.x\r\n );\r\n } else {\r\n this.$l.F = this.schlickFresnel;\r\n }\r\n this.$l.specularRoughness = pb.clamp(pb.add(this.data.roughness, this.sourceRadiusFactor), 0, 1);\r\n this.$l.alphaRoughness = pb.mul(this.specularRoughness, this.specularRoughness);\r\n this.$l.Dggx = that.distributionGGX(this, this.NoH, this.alphaRoughness);\r\n this.$l.D = this.Dggx;\r\n this.$if(pb.equal(this.reflectionMode, PBR_REFLECTION_MODE.anisotropic), function () {\r\n this.$l.dirAngle = pb.mul(this.anisotropyDirection, Math.PI / 180);\r\n if (that.anisotropyDirectionTexture) {\r\n this.$l.dirSample = that.sampleAnisotropyDirectionTexture(this);\r\n this.$l.dirAngle = pb.mul(\r\n pb.add(\r\n pb.mul(this.dirSample.r, this.anisotropyDirectionScaleBias.x),\r\n this.anisotropyDirectionScaleBias.y\r\n ),\r\n Math.PI / 180\r\n );\r\n }\r\n this.$l.anisoAngle = this.dirAngle;\r\n this.$l.up = pb.vec3(0, 1, 0);\r\n this.$l.t0 = pb.normalize(pb.cross(this.up, this.normal));\r\n this.$if(pb.lessThan(pb.length(this.t0), 0.001), function () {\r\n this.t0 = pb.normalize(pb.cross(pb.vec3(1, 0, 0), this.normal));\r\n });\r\n this.$l.b0 = pb.normalize(pb.cross(this.normal, this.t0));\r\n this.$l.tangent = pb.normalize(\r\n pb.add(pb.mul(this.t0, pb.cos(this.anisoAngle)), pb.mul(this.b0, pb.sin(this.anisoAngle)))\r\n );\r\n this.$l.bitangent = pb.normalize(pb.cross(this.normal, this.tangent));\r\n this.$l.ToH = pb.dot(this.tangent, this.H);\r\n this.$l.BoH = pb.dot(this.bitangent, this.H);\r\n this.$l.at = pb.max(pb.mul(this.alphaRoughness, pb.add(1, this.anisotropy)), 0.0001);\r\n this.$l.ab = pb.max(pb.mul(this.alphaRoughness, pb.sub(1, this.anisotropy)), 0.0001);\r\n this.$l.anisoDenom = pb.mul(\r\n Math.PI,\r\n this.at,\r\n this.ab,\r\n pb.pow(\r\n pb.add(\r\n pb.div(pb.mul(this.ToH, this.ToH), pb.mul(this.at, this.at)),\r\n pb.div(pb.mul(this.BoH, this.BoH), pb.mul(this.ab, this.ab)),\r\n pb.mul(this.NoH, this.NoH)\r\n ),\r\n 2\r\n )\r\n );\r\n this.D = pb.div(1, pb.max(this.anisoDenom, 0.0001));\r\n }).$elseif(pb.equal(this.reflectionMode, PBR_REFLECTION_MODE.glint), function () {\r\n this.$l.glintNoise = pb.fract(\r\n pb.mul(\r\n pb.sin(pb.add(pb.dot(this.H, pb.vec3(127.1, 311.7, 74.7)), pb.mul(this.NoH, 43.1))),\r\n 43758.5453\r\n )\r\n );\r\n this.$l.glintMask = pb.smoothStep(0.97, 1, this.glintNoise);\r\n this.D = pb.mul(this.Dggx, pb.add(1, pb.mul(this.glintMask, 8)));\r\n });\r\n this.$l.V = that.visGGX(this, this.NoV, this.NoL, this.alphaRoughness);\r\n this.$l.specular = pb.mul(\r\n this.lightColor,\r\n this.D,\r\n this.V,\r\n this.F,\r\n this.data.specularWeight,\r\n this.specularScale\r\n );\r\n if (that.sheen) {\r\n this.specular = pb.mul(this.specular, this.data.sheenAlbedoScaling);\r\n }\r\n this.$if(pb.equal(this.reflectionMode, PBR_REFLECTION_MODE.none), function () {\r\n this.specular = pb.vec3(0);\r\n });\r\n this.outColor = pb.add(this.outColor, this.specular);\r\n if (that.iridescence) {\r\n this.$l.iridescenceFresnelMax = pb.vec3(\r\n pb.max(\r\n pb.max(this.data.iridescenceFresnel.r, this.data.iridescenceFresnel.g),\r\n this.data.iridescenceFresnel.b\r\n )\r\n );\r\n this.F = pb.mix(this.schlickFresnel, this.iridescenceFresnelMax, this.data.iridescenceFactor.x);\r\n }\r\n this.$l.diffuseBRDF = pb.mul(\r\n pb.sub(pb.vec3(1), pb.mul(this.F, this.data.specularWeight)),\r\n pb.div(this.data.diffuse.rgb, Math.PI)\r\n );\r\n this.$l.diffuse = pb.mul(\r\n this.lightColor,\r\n pb.max(this.diffuseBRDF, pb.vec3(0)),\r\n this.diffuseScale\r\n );\r\n if (that.transmission && that.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n this.$l.transmissionRay = that.getVolumeTransmissionRay(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.data.thicknessFactor,\r\n this.data.f0.a\r\n );\r\n this.$l.pointToLight = pb.normalize(pb.sub(this.L, this.transmissionRay));\r\n this.$l.transmittedLight = pb.mul(\r\n this.lightColor,\r\n that.getPunctualRadianceTransmission(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.pointToLight,\r\n this.alphaRoughness,\r\n this.data.f0.rgb,\r\n this.data.f90.rgb,\r\n this.data.diffuse.rgb,\r\n this.data.f0.a\r\n )\r\n );\r\n this.transmittedLight = that.applyVolumeAttenuation(\r\n this,\r\n this.transmittedLight,\r\n pb.length(this.transmissionRay),\r\n this.data.attenuationColor,\r\n this.data.attenuationDistance\r\n );\r\n this.diffuse = pb.mix(this.diffuse, this.transmittedLight, this.data.transmissionFactor);\r\n }\r\n if (that.sheen) {\r\n this.diffuse = pb.mul(this.diffuse, this.data.sheenAlbedoScaling);\r\n }\r\n this.outColor = pb.add(this.outColor, this.diffuse);\r\n if (that.sheen) {\r\n this.$l.sheenD = that.D_Charlie(this, this.NoH, this.data.sheenRoughness);\r\n this.$l.sheenV = that.V_Ashikhmin(this, this.NoL, this.NoV);\r\n this.outColor = pb.add(\r\n this.outColor,\r\n pb.mul(this.lightColor, this.data.sheenColor, this.sheenD, this.sheenV)\r\n );\r\n }\r\n if (that.clearcoat) {\r\n this.alphaRoughness = pb.mul(this.data.ccFactor.y, this.data.ccFactor.y);\r\n this.NoH = pb.clamp(pb.dot(this.data.ccNormal, this.H), 0, 1);\r\n this.NoL = pb.clamp(pb.dot(this.data.ccNormal, this.L), 0, 1);\r\n this.ccF0 = pb.vec3(pb.pow(pb.div(pb.sub(this.data.f0.a, 1), pb.add(this.data.f0.a, 1)), 2));\r\n this.F = that.fresnelSchlick(this, this.VoH, this.ccF0, pb.vec3(1));\r\n this.D = that.distributionGGX(this, this.NoH, this.alphaRoughness);\r\n this.V = that.visGGX(this, this.data.ccNoV, this.NoL, this.alphaRoughness);\r\n this.outColor = pb.add(this.outColor, pb.mul(this.D, this.V, this.F, this.data.ccFactor.x));\r\n }\r\n });\r\n }\r\n );\r\n scope.$g[funcName](\r\n lightDir,\r\n lightColor,\r\n normal,\r\n viewVec,\r\n commonData,\r\n diffuseScale,\r\n specularScale,\r\n sourceRadiusFactor,\r\n outColor\r\n );\r\n }\r\n get reflectionMode() {\r\n return this._reflectionMode;\r\n }\r\n set reflectionMode(val: PBRReflectionMode) {\r\n if (val !== this._reflectionMode) {\r\n this._reflectionMode = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get anisotropy() {\r\n return this._anisotropy;\r\n }\r\n set anisotropy(val) {\r\n const clamped = Math.max(-0.95, Math.min(0.95, val));\r\n if (clamped !== this._anisotropy) {\r\n this._anisotropy = clamped;\r\n this.uniformChanged();\r\n }\r\n }\r\n get anisotropyDirection() {\r\n return this._anisotropyDirection;\r\n }\r\n set anisotropyDirection(val) {\r\n if (val !== this._anisotropyDirection) {\r\n this._anisotropyDirection = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get anisotropyDirectionScaleBias(): Immutable<Vector2> {\r\n return this._anisotropyDirectionScaleBias;\r\n }\r\n set anisotropyDirectionScaleBias(val: Immutable<Vector2>) {\r\n if (!val.equalsTo(this._anisotropyDirectionScaleBias)) {\r\n this._anisotropyDirectionScaleBias.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n calculateAnisotropyDirectionScaleBias(scope: PBInsideFunctionScope) {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (\r\n instancing ? scope.$inputs.zAnisotropyDirectionScaleBias : scope.zAnisotropyDirectionScaleBias\r\n ) as PBShaderExp;\r\n }\r\n PBRLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n TBN: PBShaderExp,\r\n outRoughness?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_PBRMetallicRoughnessLight';\r\n const that = this;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('normal'),\r\n pb.mat3('TBN'),\r\n pb.vec3('viewVec'),\r\n pb.vec4('albedo'),\r\n ...(outRoughness ? [pb.vec4('outRoughness').out()] : [])\r\n ],\r\n function () {\r\n this.$l.pbrData = that.getCommonData(this, this.albedo, this.normal, this.viewVec, this.TBN);\r\n this.$l.lightingColor = pb.vec3(0);\r\n this.$l.emissiveColor = that.calculateEmissiveColor(this);\r\n if (outRoughness) {\r\n that.indirectLighting(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.lightingColor,\r\n this.outRoughness\r\n );\r\n } else {\r\n that.indirectLighting(this, this.normal, this.viewVec, this.pbrData, this.lightingColor);\r\n }\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, extra, shadow) {\r\n this.$if(pb.equal(type, LIGHT_TYPE_RECT), function () {\r\n that.directRectLight(\r\n this,\r\n this.worldPos,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n posRange,\r\n dirCutoff,\r\n extra,\r\n colorIntensity,\r\n this.lightingColor\r\n );\r\n }).$else(function () {\r\n this.$l.diffuse = pb.vec3();\r\n this.$l.specular = pb.vec3();\r\n this.$l.diffuseScale = pb.float(1);\r\n this.$l.specularScale = pb.float(1);\r\n this.$l.sourceRadiusFactor = pb.float(0);\r\n this.$if(pb.equal(type, LIGHT_TYPE_POINT), function () {\r\n this.diffuseScale = extra.x;\r\n this.specularScale = extra.y;\r\n this.sourceRadiusFactor = pb.div(\r\n extra.z,\r\n pb.max(pb.distance(posRange.xyz, this.worldPos), 0.0001)\r\n );\r\n });\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);\r\n this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten, this.NoL);\r\n if (shadow) {\r\n this.lightColor = pb.mul(\r\n this.lightColor,\r\n that.calculateShadow(this, this.worldPos, this.NoL)\r\n );\r\n }\r\n that.directLighting(\r\n this,\r\n this.lightDir,\r\n this.lightColor,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.diffuseScale,\r\n this.specularScale,\r\n this.sourceRadiusFactor,\r\n this.lightingColor\r\n );\r\n });\r\n });\r\n this.$return(pb.add(this.lightingColor, this.emissiveColor));\r\n }\r\n );\r\n return (\r\n outRoughness\r\n ? pb.getGlobalScope()[funcName](worldPos, normal, TBN, viewVec, albedo, outRoughness)\r\n : pb.getGlobalScope()[funcName](worldPos, normal, TBN, viewVec, albedo)\r\n ) as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n if (this.needFragmentColor() && this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {\r\n scope.$outputs.zMetallic = this.getInstancedUniform(scope, METALLIC_UNIFORM);\r\n scope.$outputs.zRoughness = this.getInstancedUniform(scope, ROUGHNESS_UNIFORM);\r\n scope.$outputs.zSpecularFactor = this.getInstancedUniform(scope, SPECULAR_FACTOR_UNFORM);\r\n scope.$outputs.zReflectionMode = this.getInstancedUniform(scope, REFLECTION_MODE_UNIFORM);\r\n scope.$outputs.zAnisotropy = this.getInstancedUniform(scope, ANISOTROPY_UNIFORM);\r\n scope.$outputs.zAnisotropyDirection = this.getInstancedUniform(scope, ANISOTROPY_DIRECTION_UNIFORM);\r\n scope.$outputs.zAnisotropyDirectionScaleBias = this.getInstancedUniform(\r\n scope,\r\n ANISOTROPY_DIRECTION_SCALE_BIAS_UNIFORM\r\n );\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n if (this.needFragmentColor()) {\r\n const pb = scope.$builder;\r\n if (!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n scope.zMetallic = pb.float().uniform(2);\r\n scope.zRoughness = pb.float().uniform(2);\r\n scope.zSpecularFactor = pb.vec4().uniform(2);\r\n scope.zReflectionMode = pb.float().uniform(2);\r\n scope.zAnisotropy = pb.float().uniform(2);\r\n scope.zAnisotropyDirection = pb.float().uniform(2);\r\n scope.zAnisotropyDirectionScaleBias = pb.vec2().uniform(2);\r\n }\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColor(ctx)) {\r\n if (!(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n bindGroup.setValue('zMetallic', this._metallic);\r\n bindGroup.setValue('zRoughness', this._roughness);\r\n bindGroup.setValue('zSpecularFactor', this._specularFactor);\r\n bindGroup.setValue('zReflectionMode', PBR_REFLECTION_MODE[this._reflectionMode]);\r\n bindGroup.setValue('zAnisotropy', this._anisotropy);\r\n bindGroup.setValue('zAnisotropyDirection', this._anisotropyDirection);\r\n bindGroup.setValue('zAnisotropyDirectionScaleBias', this._anisotropyDirectionScaleBias);\r\n }\r\n }\r\n }\r\n calculateMetallic(scope: PBInsideFunctionScope, _albedo: PBShaderExp, _normal: PBShaderExp) {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zMetallic : scope.zMetallic) as PBShaderExp;\r\n }\r\n calculateRoughness(scope: PBInsideFunctionScope, _albedo: PBShaderExp, _normal: PBShaderExp) {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zRoughness : scope.zRoughness) as PBShaderExp;\r\n }\r\n calculateSpecularFactor(scope: PBInsideFunctionScope, _albedo: PBShaderExp, _normal: PBShaderExp) {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSpecularFactor : scope.zSpecularFactor) as PBShaderExp;\r\n }\r\n calculateCommonData(\r\n scope: PBInsideFunctionScope,\r\n albedo: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n TBN: PBShaderExp,\r\n data: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const metallic = this.calculateMetallic(scope, albedo, normal);\r\n const roughness = this.calculateRoughness(scope, albedo, normal);\r\n const specularFactor = this.calculateSpecularFactor(scope, albedo, normal);\r\n const reflectionMode = this.calculateReflectionMode(scope) as PBShaderExp;\r\n if (this.metallicRoughnessTexture) {\r\n scope.$l.metallicRoughnessSample = this.sampleMetallicRoughnessTexture(scope);\r\n data.metallic = pb.mul(metallic, scope.metallicRoughnessSample.z);\r\n data.roughness = pb.mul(roughness, scope.metallicRoughnessSample.y);\r\n } else {\r\n data.metallic = metallic;\r\n data.roughness = roughness;\r\n }\r\n data.roughness = pb.mul(data.roughness, ShaderHelper.getCameraRoughnessFactor(scope));\r\n if (this.specularColorTexture) {\r\n scope.$l.specularColor = pb.mul(specularFactor.rgb, this.sampleSpecularColorTexture(scope).rgb);\r\n } else {\r\n scope.$l.specularColor = specularFactor.rgb;\r\n }\r\n if (this.specularTexture) {\r\n data.specularWeight = pb.mul(specularFactor.a, this.sampleSpecularTexture(scope).a);\r\n } else {\r\n data.specularWeight = specularFactor.a;\r\n }\r\n data.specularWeight = pb.mul(\r\n data.specularWeight,\r\n pb.float(pb.notEqual(reflectionMode, PBR_REFLECTION_MODE.none))\r\n );\r\n data.f0 = pb.vec4(\r\n pb.mix(\r\n pb.min(pb.mul(this.getF0(scope).rgb, scope.specularColor), pb.vec3(1)),\r\n albedo.rgb,\r\n data.metallic\r\n ),\r\n this.getF0(scope).a\r\n );\r\n data.f90 = pb.vec3(1);\r\n data.diffuse = pb.vec4(pb.mix(albedo.rgb, pb.vec3(0), data.metallic), albedo.a);\r\n super.calculateCommonData(scope, albedo, normal, viewVec, TBN, data);\r\n }\r\n calculateReflectionMode(scope: PBInsideFunctionScope) {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zReflectionMode : scope.zReflectionMode) as PBShaderExp;\r\n }\r\n calculateAnisotropy(scope: PBInsideFunctionScope) {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zAnisotropy : scope.zAnisotropy) as PBShaderExp;\r\n }\r\n calculateAnisotropyDirection(scope: PBInsideFunctionScope) {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zAnisotropyDirection : scope.zAnisotropyDirection) as PBShaderExp;\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinPBRMetallicRoughness };\r\n}\r\n"],"names":["PBR_REFLECTION_MODE","none","ggx","anisotropic","glint","mixinPBRMetallicRoughness","BaseCls","pbrMetallicRoughnessMixed","S","applyMaterialMixins","mixinPBRCommon","mixinLight","mixinTextureProps","METALLIC_UNIFORM","defineInstanceUniform","ROUGHNESS_UNIFORM","SPECULAR_FACTOR_UNFORM","REFLECTION_MODE_UNIFORM","ANISOTROPY_UNIFORM","ANISOTROPY_DIRECTION_UNIFORM","ANISOTROPY_DIRECTION_SCALE_BIAS_UNIFORM","_metallic","_roughness","_specularFactor","_reflectionMode","_anisotropy","_anisotropyDirection","_anisotropyDirectionScaleBias","Vector4","one","Vector2","copyFrom","other","metallic","roughness","specularFactor","reflectionMode","anisotropy","anisotropyDirection","anisotropyDirectionScaleBias","val","uniformChanged","equalsTo","set","directLighting","scope","lightDir","lightColor","normal","viewVec","commonData","diffuseScale","specularScale","sourceRadiusFactor","outColor","pb","$builder","that","instancing","drawContext","materialFlags","MaterialVaryingFlags","INSTANCING","funcName","func","vec3","getCommonDatasStruct","float","inout","$l","$inputs","zReflectionMode","zAnisotropy","zAnisotropyDirection","zAnisotropyDirectionScaleBias","H","normalize","add","L","NoH","clamp","dot","NoL","NoV","$if","greaterThan","VoH","schlickFresnel","fresnelSchlick","data","f0","rgb","f90","iridescence","F","mix","iridescenceFresnel","iridescenceFactor","x","specularRoughness","alphaRoughness","mul","Dggx","distributionGGX","D","equal","dirAngle","Math","PI","anisotropyDirectionTexture","dirSample","sampleAnisotropyDirectionTexture","r","y","anisoAngle","up","t0","cross","lessThan","length","b0","tangent","cos","sin","bitangent","ToH","BoH","at","max","ab","sub","anisoDenom","pow","div","$elseif","glintNoise","fract","glintMask","smoothStep","V","visGGX","specular","specularWeight","sheen","sheenAlbedoScaling","iridescenceFresnelMax","g","b","diffuseBRDF","diffuse","transmission","renderPass","type","RENDER_PASS_TYPE_LIGHT","transmissionRay","getVolumeTransmissionRay","thicknessFactor","a","pointToLight","transmittedLight","getPunctualRadianceTransmission","applyVolumeAttenuation","attenuationColor","attenuationDistance","transmissionFactor","sheenD","D_Charlie","sheenRoughness","sheenV","V_Ashikhmin","sheenColor","clearcoat","ccFactor","ccNormal","ccF0","ccNoV","$g","clamped","min","calculateAnisotropyDirectionScaleBias","PBRLight","worldPos","albedo","TBN","outRoughness","mat3","vec4","out","pbrData","getCommonData","lightingColor","emissiveColor","calculateEmissiveColor","indirectLighting","forEachLight","posRange","dirCutoff","colorIntensity","extra","shadow","LIGHT_TYPE_RECT","directRectLight","$else","LIGHT_TYPE_POINT","z","distance","xyz","lightAtten","calculateLightAttenuation","calculateLightDirection","calculateShadow","$return","getGlobalScope","vertexShader","needFragmentColor","$outputs","zMetallic","getInstancedUniform","zRoughness","zSpecularFactor","fragmentShader","uniform","vec2","applyUniformValues","bindGroup","ctx","pass","setValue","calculateMetallic","_albedo","_normal","calculateRoughness","calculateSpecularFactor","calculateCommonData","calculateReflectionMode","metallicRoughnessTexture","metallicRoughnessSample","sampleMetallicRoughnessTexture","ShaderHelper","getCameraRoughnessFactor","specularColorTexture","specularColor","sampleSpecularColorTexture","specularTexture","sampleSpecularTexture","notEqual","getF0","calculateAnisotropy","calculateAnisotropyDirection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pbrmetallicroughness.js","sources":["../../../../src/material/mixins/lightmodel/pbrmetallicroughness.ts"],"sourcesContent":["import type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport type { MeshMaterial } from '../../meshmaterial';\r\nimport { applyMaterialMixins } from '../../meshmaterial';\r\nimport type { TextureMixinInstanceTypes } from '../texture';\r\nimport { mixinTextureProps } from '../texture';\r\nimport type { IMixinPBRCommon } from '../pbr/common';\r\nimport { mixinPBRCommon } from '../pbr/common';\r\nimport type { DrawContext } from '../../../render';\r\nimport type { Immutable } from '@zephyr3d/base';\r\nimport { Vector2, Vector4 } from '@zephyr3d/base';\r\nimport type { IMixinLight } from '../lit';\r\nimport { mixinLight } from '../lit';\r\nimport { ShaderHelper } from '../../shader/helper';\r\nimport {\r\n LIGHT_TYPE_POINT,\r\n LIGHT_TYPE_RECT,\r\n MaterialVaryingFlags,\r\n RENDER_PASS_TYPE_LIGHT\r\n} from '../../../values';\r\n\r\nexport type PBRReflectionMode = 'none' | 'ggx' | 'anisotropic' | 'glint';\r\n\r\nconst PBR_REFLECTION_MODE: Record<PBRReflectionMode, number> = {\r\n none: 0,\r\n ggx: 1,\r\n anisotropic: 2,\r\n glint: 3\r\n};\r\n\r\n/**\r\n * Interface for PBRMetallicRoughness lighting model mixin\r\n * @public\r\n */\r\nexport type IMixinPBRMetallicRoughness = {\r\n metallic: number;\r\n roughness: number;\r\n specularFactor: Vector4;\r\n reflectionMode: PBRReflectionMode;\r\n anisotropy: number;\r\n anisotropyDirection: number;\r\n anisotropyDirectionScaleBias: Vector2;\r\n PBRLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n TBN: PBShaderExp,\r\n outRoughness?: PBShaderExp\r\n ): PBShaderExp;\r\n calculateMetallic(scope: PBInsideFunctionScope, albedo: PBShaderExp, normal: PBShaderExp): PBShaderExp;\r\n calculateRoughness(scope: PBInsideFunctionScope, albedo: PBShaderExp, normal: PBShaderExp): PBShaderExp;\r\n calculateSpecularFactor(\r\n scope: PBInsideFunctionScope,\r\n albedo: PBShaderExp,\r\n normal: PBShaderExp\r\n ): PBShaderExp;\r\n calculateCommonData(\r\n scope: PBInsideFunctionScope,\r\n albedo: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n TBN: PBShaderExp,\r\n data: PBShaderExp\r\n ): void;\r\n} & IMixinPBRCommon &\r\n IMixinLight &\r\n TextureMixinInstanceTypes<\r\n ['metallicRoughness', 'occlusion', 'specular', 'specularColor', 'anisotropyDirection']\r\n >;\r\n\r\n/**\r\n * PBRMetallicRoughness lighting model mixin\r\n * @param BaseCls - Class to mix in\r\n * @returns Mixed class\r\n * @public\r\n */\r\nexport function mixinPBRMetallicRoughness<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).pbrMetallicRoughnessMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinPBRMetallicRoughness };\r\n }\r\n const S = applyMaterialMixins(\r\n BaseCls,\r\n mixinPBRCommon,\r\n mixinLight,\r\n mixinTextureProps('metallicRoughness'),\r\n mixinTextureProps('specular'),\r\n mixinTextureProps('specularColor'),\r\n mixinTextureProps('anisotropyDirection')\r\n );\r\n const METALLIC_UNIFORM = S.defineInstanceUniform('metallic', 'float', 'Metallic');\r\n const ROUGHNESS_UNIFORM = S.defineInstanceUniform('roughness', 'float', 'Roughness');\r\n const SPECULAR_FACTOR_UNFORM = S.defineInstanceUniform('specularFactor', 'rgba', 'SpecularFactor');\r\n\r\n return class extends S {\r\n static readonly pbrMetallicRoughnessMixed = true;\r\n private _metallic: number;\r\n private _roughness: number;\r\n private readonly _specularFactor: Vector4;\r\n private _reflectionMode: PBRReflectionMode;\r\n private _anisotropy: number;\r\n private _anisotropyDirection: number;\r\n private readonly _anisotropyDirectionScaleBias: Vector2;\r\n constructor() {\r\n super();\r\n this._metallic = 1;\r\n this._roughness = 1;\r\n this._specularFactor = Vector4.one();\r\n this._reflectionMode = 'ggx';\r\n this._anisotropy = 0.75;\r\n this._anisotropyDirection = 0;\r\n this._anisotropyDirectionScaleBias = new Vector2(1, 0);\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.metallic = other.metallic;\r\n this.roughness = other.roughness;\r\n this.specularFactor = other.specularFactor;\r\n this.reflectionMode = other.reflectionMode;\r\n this.anisotropy = other.anisotropy;\r\n this.anisotropyDirection = other.anisotropyDirection;\r\n this.anisotropyDirectionScaleBias = other.anisotropyDirectionScaleBias;\r\n }\r\n get metallic() {\r\n return this._metallic;\r\n }\r\n set metallic(val) {\r\n if (val !== this._metallic) {\r\n this._metallic = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get roughness() {\r\n return this._roughness;\r\n }\r\n set roughness(val) {\r\n if (val !== this._roughness) {\r\n this._roughness = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get specularFactor(): Immutable<Vector4> {\r\n return this._specularFactor;\r\n }\r\n set specularFactor(val: Immutable<Vector4>) {\r\n if (!val.equalsTo(this._specularFactor)) {\r\n this._specularFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n directLighting(\r\n scope: PBInsideFunctionScope,\r\n lightDir: PBShaderExp,\r\n lightColor: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n commonData: PBShaderExp,\r\n diffuseScale: PBShaderExp,\r\n specularScale: PBShaderExp,\r\n sourceRadiusFactor: PBShaderExp,\r\n outColor: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this as any;\r\n const funcName = 'Z_PBRMR_DirectLighting';\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('L'),\r\n pb.vec3('lightColor'),\r\n pb.vec3('normal'),\r\n pb.vec3('viewVec'),\r\n that.getCommonDatasStruct(scope)('data'),\r\n pb.float('diffuseScale'),\r\n pb.float('specularScale'),\r\n pb.float('sourceRadiusFactor'),\r\n pb.vec3('outColor').inout()\r\n ],\r\n function () {\r\n this.$l.reflectionMode = this.zReflectionMode;\r\n this.$l.anisotropy = this.zAnisotropy;\r\n this.$l.anisotropyDirection = this.zAnisotropyDirection;\r\n this.$l.anisotropyDirectionScaleBias = this.zAnisotropyDirectionScaleBias;\r\n this.$l.H = pb.normalize(pb.add(this.viewVec, this.L));\r\n this.$l.NoH = pb.clamp(pb.dot(this.normal, this.H), 0, 1);\r\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.L), 0, 1);\r\n this.$l.NoV = pb.clamp(pb.dot(this.normal, this.viewVec), 0, 1);\r\n this.$if(pb.greaterThan(this.NoL, 0), function () {\r\n this.$l.VoH = pb.clamp(pb.dot(this.viewVec, this.H), 0, 1);\r\n this.$l.schlickFresnel = that.fresnelSchlick(this, this.VoH, this.data.f0.rgb, this.data.f90);\r\n if (that.iridescence) {\r\n this.$l.F = pb.mix(\r\n this.schlickFresnel,\r\n this.data.iridescenceFresnel,\r\n this.data.iridescenceFactor.x\r\n );\r\n } else {\r\n this.$l.F = this.schlickFresnel;\r\n }\r\n this.$l.specularRoughness = pb.clamp(pb.add(this.data.roughness, this.sourceRadiusFactor), 0, 1);\r\n this.$l.alphaRoughness = pb.mul(this.specularRoughness, this.specularRoughness);\r\n this.$l.Dggx = that.distributionGGX(this, this.NoH, this.alphaRoughness);\r\n this.$l.D = this.Dggx;\r\n this.$if(pb.equal(this.reflectionMode, PBR_REFLECTION_MODE.anisotropic), function () {\r\n this.$l.dirAngle = pb.mul(this.anisotropyDirection, Math.PI / 180);\r\n if (that.anisotropyDirectionTexture) {\r\n this.$l.dirSample = that.sampleAnisotropyDirectionTexture(this);\r\n this.$l.dirAngle = pb.mul(\r\n pb.add(\r\n pb.mul(this.dirSample.r, this.anisotropyDirectionScaleBias.x),\r\n this.anisotropyDirectionScaleBias.y\r\n ),\r\n Math.PI / 180\r\n );\r\n }\r\n this.$l.anisoAngle = this.dirAngle;\r\n this.$l.up = pb.vec3(0, 1, 0);\r\n this.$l.t0 = pb.normalize(pb.cross(this.up, this.normal));\r\n this.$if(pb.lessThan(pb.length(this.t0), 0.001), function () {\r\n this.t0 = pb.normalize(pb.cross(pb.vec3(1, 0, 0), this.normal));\r\n });\r\n this.$l.b0 = pb.normalize(pb.cross(this.normal, this.t0));\r\n this.$l.tangent = pb.normalize(\r\n pb.add(pb.mul(this.t0, pb.cos(this.anisoAngle)), pb.mul(this.b0, pb.sin(this.anisoAngle)))\r\n );\r\n this.$l.bitangent = pb.normalize(pb.cross(this.normal, this.tangent));\r\n this.$l.ToH = pb.dot(this.tangent, this.H);\r\n this.$l.BoH = pb.dot(this.bitangent, this.H);\r\n this.$l.at = pb.max(pb.mul(this.alphaRoughness, pb.add(1, this.anisotropy)), 0.0001);\r\n this.$l.ab = pb.max(pb.mul(this.alphaRoughness, pb.sub(1, this.anisotropy)), 0.0001);\r\n this.$l.anisoDenom = pb.mul(\r\n Math.PI,\r\n this.at,\r\n this.ab,\r\n pb.pow(\r\n pb.add(\r\n pb.div(pb.mul(this.ToH, this.ToH), pb.mul(this.at, this.at)),\r\n pb.div(pb.mul(this.BoH, this.BoH), pb.mul(this.ab, this.ab)),\r\n pb.mul(this.NoH, this.NoH)\r\n ),\r\n 2\r\n )\r\n );\r\n this.D = pb.div(1, pb.max(this.anisoDenom, 0.0001));\r\n }).$elseif(pb.equal(this.reflectionMode, PBR_REFLECTION_MODE.glint), function () {\r\n this.$l.glintNoise = pb.fract(\r\n pb.mul(\r\n pb.sin(pb.add(pb.dot(this.H, pb.vec3(127.1, 311.7, 74.7)), pb.mul(this.NoH, 43.1))),\r\n 43758.5453\r\n )\r\n );\r\n this.$l.glintMask = pb.smoothStep(0.97, 1, this.glintNoise);\r\n this.D = pb.mul(this.Dggx, pb.add(1, pb.mul(this.glintMask, 8)));\r\n });\r\n this.$l.V = that.visGGX(this, this.NoV, this.NoL, this.alphaRoughness);\r\n this.$l.specular = pb.mul(\r\n this.lightColor,\r\n this.D,\r\n this.V,\r\n this.F,\r\n this.data.specularWeight,\r\n this.specularScale\r\n );\r\n if (that.sheen) {\r\n this.specular = pb.mul(this.specular, this.data.sheenAlbedoScaling);\r\n }\r\n this.$if(pb.equal(this.reflectionMode, PBR_REFLECTION_MODE.none), function () {\r\n this.specular = pb.vec3(0);\r\n });\r\n this.outColor = pb.add(this.outColor, this.specular);\r\n if (that.iridescence) {\r\n this.$l.iridescenceFresnelMax = pb.vec3(\r\n pb.max(\r\n pb.max(this.data.iridescenceFresnel.r, this.data.iridescenceFresnel.g),\r\n this.data.iridescenceFresnel.b\r\n )\r\n );\r\n this.F = pb.mix(this.schlickFresnel, this.iridescenceFresnelMax, this.data.iridescenceFactor.x);\r\n }\r\n this.$l.diffuseBRDF = pb.mul(\r\n pb.sub(pb.vec3(1), pb.mul(this.F, this.data.specularWeight)),\r\n pb.div(this.data.diffuse.rgb, Math.PI)\r\n );\r\n this.$l.diffuse = pb.mul(\r\n this.lightColor,\r\n pb.max(this.diffuseBRDF, pb.vec3(0)),\r\n this.diffuseScale\r\n );\r\n if (that.transmission && that.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n this.$l.transmissionRay = that.getVolumeTransmissionRay(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.data.thicknessFactor,\r\n this.data.f0.a\r\n );\r\n this.$l.pointToLight = pb.normalize(pb.sub(this.L, this.transmissionRay));\r\n this.$l.transmittedLight = pb.mul(\r\n this.lightColor,\r\n that.getPunctualRadianceTransmission(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.pointToLight,\r\n this.alphaRoughness,\r\n this.data.f0.rgb,\r\n this.data.f90.rgb,\r\n this.data.diffuse.rgb,\r\n this.data.f0.a\r\n )\r\n );\r\n this.transmittedLight = that.applyVolumeAttenuation(\r\n this,\r\n this.transmittedLight,\r\n pb.length(this.transmissionRay),\r\n this.data.attenuationColor,\r\n this.data.attenuationDistance\r\n );\r\n this.diffuse = pb.mix(this.diffuse, this.transmittedLight, this.data.transmissionFactor);\r\n }\r\n if (that.sheen) {\r\n this.diffuse = pb.mul(this.diffuse, this.data.sheenAlbedoScaling);\r\n }\r\n this.outColor = pb.add(this.outColor, this.diffuse);\r\n if (that.sheen) {\r\n this.$l.sheenD = that.D_Charlie(this, this.NoH, this.data.sheenRoughness);\r\n this.$l.sheenV = that.V_Ashikhmin(this, this.NoL, this.NoV);\r\n this.outColor = pb.add(\r\n this.outColor,\r\n pb.mul(this.lightColor, this.data.sheenColor, this.sheenD, this.sheenV)\r\n );\r\n }\r\n if (that.clearcoat) {\r\n this.alphaRoughness = pb.mul(this.data.ccFactor.y, this.data.ccFactor.y);\r\n this.NoH = pb.clamp(pb.dot(this.data.ccNormal, this.H), 0, 1);\r\n this.NoL = pb.clamp(pb.dot(this.data.ccNormal, this.L), 0, 1);\r\n this.ccF0 = pb.vec3(pb.pow(pb.div(pb.sub(this.data.f0.a, 1), pb.add(this.data.f0.a, 1)), 2));\r\n this.F = that.fresnelSchlick(this, this.VoH, this.ccF0, pb.vec3(1));\r\n this.D = that.distributionGGX(this, this.NoH, this.alphaRoughness);\r\n this.V = that.visGGX(this, this.data.ccNoV, this.NoL, this.alphaRoughness);\r\n this.outColor = pb.add(this.outColor, pb.mul(this.D, this.V, this.F, this.data.ccFactor.x));\r\n }\r\n });\r\n }\r\n );\r\n scope.$g[funcName](\r\n lightDir,\r\n lightColor,\r\n normal,\r\n viewVec,\r\n commonData,\r\n diffuseScale,\r\n specularScale,\r\n sourceRadiusFactor,\r\n outColor\r\n );\r\n }\r\n get reflectionMode() {\r\n return this._reflectionMode;\r\n }\r\n set reflectionMode(val: PBRReflectionMode) {\r\n if (val !== this._reflectionMode) {\r\n this._reflectionMode = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get anisotropy() {\r\n return this._anisotropy;\r\n }\r\n set anisotropy(val) {\r\n const clamped = Math.max(-0.95, Math.min(0.95, val));\r\n if (clamped !== this._anisotropy) {\r\n this._anisotropy = clamped;\r\n this.uniformChanged();\r\n }\r\n }\r\n get anisotropyDirection() {\r\n return this._anisotropyDirection;\r\n }\r\n set anisotropyDirection(val) {\r\n if (val !== this._anisotropyDirection) {\r\n this._anisotropyDirection = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get anisotropyDirectionScaleBias(): Immutable<Vector2> {\r\n return this._anisotropyDirectionScaleBias;\r\n }\r\n set anisotropyDirectionScaleBias(val: Immutable<Vector2>) {\r\n if (!val.equalsTo(this._anisotropyDirectionScaleBias)) {\r\n this._anisotropyDirectionScaleBias.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n calculateAnisotropyDirectionScaleBias(scope: PBInsideFunctionScope) {\r\n return scope.zAnisotropyDirectionScaleBias as PBShaderExp;\r\n }\r\n PBRLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n TBN: PBShaderExp,\r\n outRoughness?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_PBRMetallicRoughnessLight';\r\n const that = this;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('normal'),\r\n pb.mat3('TBN'),\r\n pb.vec3('viewVec'),\r\n pb.vec4('albedo'),\r\n ...(outRoughness ? [pb.vec4('outRoughness').out()] : [])\r\n ],\r\n function () {\r\n this.$l.pbrData = that.getCommonData(this, this.albedo, this.normal, this.viewVec, this.TBN);\r\n this.$l.lightingColor = pb.vec3(0);\r\n this.$l.emissiveColor = that.calculateEmissiveColor(this);\r\n if (outRoughness) {\r\n that.indirectLighting(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.lightingColor,\r\n this.outRoughness\r\n );\r\n } else {\r\n that.indirectLighting(this, this.normal, this.viewVec, this.pbrData, this.lightingColor);\r\n }\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, extra, shadow) {\r\n this.$if(pb.equal(type, LIGHT_TYPE_RECT), function () {\r\n that.directRectLight(\r\n this,\r\n this.worldPos,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n posRange,\r\n dirCutoff,\r\n extra,\r\n colorIntensity,\r\n this.lightingColor\r\n );\r\n }).$else(function () {\r\n this.$l.diffuse = pb.vec3();\r\n this.$l.specular = pb.vec3();\r\n this.$l.diffuseScale = pb.float(1);\r\n this.$l.specularScale = pb.float(1);\r\n this.$l.sourceRadiusFactor = pb.float(0);\r\n this.$if(pb.equal(type, LIGHT_TYPE_POINT), function () {\r\n this.diffuseScale = extra.x;\r\n this.specularScale = extra.y;\r\n this.sourceRadiusFactor = pb.div(\r\n extra.z,\r\n pb.max(pb.distance(posRange.xyz, this.worldPos), 0.0001)\r\n );\r\n });\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);\r\n this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten, this.NoL);\r\n if (shadow) {\r\n this.lightColor = pb.mul(\r\n this.lightColor,\r\n that.calculateShadow(this, this.worldPos, this.NoL)\r\n );\r\n }\r\n that.directLighting(\r\n this,\r\n this.lightDir,\r\n this.lightColor,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.diffuseScale,\r\n this.specularScale,\r\n this.sourceRadiusFactor,\r\n this.lightingColor\r\n );\r\n });\r\n });\r\n this.$return(pb.add(this.lightingColor, this.emissiveColor));\r\n }\r\n );\r\n return (\r\n outRoughness\r\n ? pb.getGlobalScope()[funcName](worldPos, normal, TBN, viewVec, albedo, outRoughness)\r\n : pb.getGlobalScope()[funcName](worldPos, normal, TBN, viewVec, albedo)\r\n ) as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n if (this.needFragmentColor() && this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {\r\n scope.$outputs.zMetallic = this.getInstancedUniform(scope, METALLIC_UNIFORM);\r\n scope.$outputs.zRoughness = this.getInstancedUniform(scope, ROUGHNESS_UNIFORM);\r\n scope.$outputs.zSpecularFactor = this.getInstancedUniform(scope, SPECULAR_FACTOR_UNFORM);\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n if (this.needFragmentColor()) {\r\n const pb = scope.$builder;\r\n if (!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n scope.zMetallic = pb.float().uniform(2);\r\n scope.zRoughness = pb.float().uniform(2);\r\n scope.zSpecularFactor = pb.vec4().uniform(2);\r\n }\r\n scope.zReflectionMode = pb.float().uniform(2);\r\n scope.zAnisotropy = pb.float().uniform(2);\r\n scope.zAnisotropyDirection = pb.float().uniform(2);\r\n scope.zAnisotropyDirectionScaleBias = pb.vec2().uniform(2);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColor(ctx)) {\r\n if (!(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n bindGroup.setValue('zMetallic', this._metallic);\r\n bindGroup.setValue('zRoughness', this._roughness);\r\n bindGroup.setValue('zSpecularFactor', this._specularFactor);\r\n bindGroup.setValue('zReflectionMode', PBR_REFLECTION_MODE[this._reflectionMode]);\r\n bindGroup.setValue('zAnisotropy', this._anisotropy);\r\n bindGroup.setValue('zAnisotropyDirection', this._anisotropyDirection);\r\n bindGroup.setValue('zAnisotropyDirectionScaleBias', this._anisotropyDirectionScaleBias);\r\n }\r\n }\r\n }\r\n calculateMetallic(scope: PBInsideFunctionScope, _albedo: PBShaderExp, _normal: PBShaderExp) {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zMetallic : scope.zMetallic) as PBShaderExp;\r\n }\r\n calculateRoughness(scope: PBInsideFunctionScope, _albedo: PBShaderExp, _normal: PBShaderExp) {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zRoughness : scope.zRoughness) as PBShaderExp;\r\n }\r\n calculateSpecularFactor(scope: PBInsideFunctionScope, _albedo: PBShaderExp, _normal: PBShaderExp) {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSpecularFactor : scope.zSpecularFactor) as PBShaderExp;\r\n }\r\n calculateCommonData(\r\n scope: PBInsideFunctionScope,\r\n albedo: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n TBN: PBShaderExp,\r\n data: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const metallic = this.calculateMetallic(scope, albedo, normal);\r\n const roughness = this.calculateRoughness(scope, albedo, normal);\r\n const specularFactor = this.calculateSpecularFactor(scope, albedo, normal);\r\n const reflectionMode = this.calculateReflectionMode(scope) as PBShaderExp;\r\n if (this.metallicRoughnessTexture) {\r\n scope.$l.metallicRoughnessSample = this.sampleMetallicRoughnessTexture(scope);\r\n data.metallic = pb.mul(metallic, scope.metallicRoughnessSample.z);\r\n data.roughness = pb.mul(roughness, scope.metallicRoughnessSample.y);\r\n } else {\r\n data.metallic = metallic;\r\n data.roughness = roughness;\r\n }\r\n data.roughness = pb.mul(data.roughness, ShaderHelper.getCameraRoughnessFactor(scope));\r\n if (this.specularColorTexture) {\r\n scope.$l.specularColor = pb.mul(specularFactor.rgb, this.sampleSpecularColorTexture(scope).rgb);\r\n } else {\r\n scope.$l.specularColor = specularFactor.rgb;\r\n }\r\n if (this.specularTexture) {\r\n data.specularWeight = pb.mul(specularFactor.a, this.sampleSpecularTexture(scope).a);\r\n } else {\r\n data.specularWeight = specularFactor.a;\r\n }\r\n data.specularWeight = pb.mul(\r\n data.specularWeight,\r\n pb.float(pb.notEqual(reflectionMode, PBR_REFLECTION_MODE.none))\r\n );\r\n data.f0 = pb.vec4(\r\n pb.mix(\r\n pb.min(pb.mul(this.getF0(scope).rgb, scope.specularColor), pb.vec3(1)),\r\n albedo.rgb,\r\n data.metallic\r\n ),\r\n this.getF0(scope).a\r\n );\r\n data.f90 = pb.vec3(1);\r\n data.diffuse = pb.vec4(pb.mix(albedo.rgb, pb.vec3(0), data.metallic), albedo.a);\r\n super.calculateCommonData(scope, albedo, normal, viewVec, TBN, data);\r\n }\r\n calculateReflectionMode(scope: PBInsideFunctionScope) {\r\n return scope.zReflectionMode as PBShaderExp;\r\n }\r\n calculateAnisotropy(scope: PBInsideFunctionScope) {\r\n return scope.zAnisotropy as PBShaderExp;\r\n }\r\n calculateAnisotropyDirection(scope: PBInsideFunctionScope) {\r\n return scope.zAnisotropyDirection as PBShaderExp;\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinPBRMetallicRoughness };\r\n}\r\n"],"names":["PBR_REFLECTION_MODE","none","ggx","anisotropic","glint","mixinPBRMetallicRoughness","BaseCls","pbrMetallicRoughnessMixed","S","applyMaterialMixins","mixinPBRCommon","mixinLight","mixinTextureProps","METALLIC_UNIFORM","defineInstanceUniform","ROUGHNESS_UNIFORM","SPECULAR_FACTOR_UNFORM","_metallic","_roughness","_specularFactor","_reflectionMode","_anisotropy","_anisotropyDirection","_anisotropyDirectionScaleBias","Vector4","one","Vector2","copyFrom","other","metallic","roughness","specularFactor","reflectionMode","anisotropy","anisotropyDirection","anisotropyDirectionScaleBias","val","uniformChanged","equalsTo","set","directLighting","scope","lightDir","lightColor","normal","viewVec","commonData","diffuseScale","specularScale","sourceRadiusFactor","outColor","pb","$builder","that","funcName","func","vec3","getCommonDatasStruct","float","inout","$l","zReflectionMode","zAnisotropy","zAnisotropyDirection","zAnisotropyDirectionScaleBias","H","normalize","add","L","NoH","clamp","dot","NoL","NoV","$if","greaterThan","VoH","schlickFresnel","fresnelSchlick","data","f0","rgb","f90","iridescence","F","mix","iridescenceFresnel","iridescenceFactor","x","specularRoughness","alphaRoughness","mul","Dggx","distributionGGX","D","equal","dirAngle","Math","PI","anisotropyDirectionTexture","dirSample","sampleAnisotropyDirectionTexture","r","y","anisoAngle","up","t0","cross","lessThan","length","b0","tangent","cos","sin","bitangent","ToH","BoH","at","max","ab","sub","anisoDenom","pow","div","$elseif","glintNoise","fract","glintMask","smoothStep","V","visGGX","specular","specularWeight","sheen","sheenAlbedoScaling","iridescenceFresnelMax","g","b","diffuseBRDF","diffuse","transmission","drawContext","renderPass","type","RENDER_PASS_TYPE_LIGHT","transmissionRay","getVolumeTransmissionRay","thicknessFactor","a","pointToLight","transmittedLight","getPunctualRadianceTransmission","applyVolumeAttenuation","attenuationColor","attenuationDistance","transmissionFactor","sheenD","D_Charlie","sheenRoughness","sheenV","V_Ashikhmin","sheenColor","clearcoat","ccFactor","ccNormal","ccF0","ccNoV","$g","clamped","min","calculateAnisotropyDirectionScaleBias","PBRLight","worldPos","albedo","TBN","outRoughness","mat3","vec4","out","pbrData","getCommonData","lightingColor","emissiveColor","calculateEmissiveColor","indirectLighting","forEachLight","posRange","dirCutoff","colorIntensity","extra","shadow","LIGHT_TYPE_RECT","directRectLight","$else","LIGHT_TYPE_POINT","z","distance","xyz","lightAtten","calculateLightAttenuation","calculateLightDirection","calculateShadow","$return","getGlobalScope","vertexShader","needFragmentColor","materialFlags","MaterialVaryingFlags","INSTANCING","$outputs","zMetallic","getInstancedUniform","zRoughness","zSpecularFactor","fragmentShader","uniform","vec2","applyUniformValues","bindGroup","ctx","pass","setValue","calculateMetallic","_albedo","_normal","instancing","$inputs","calculateRoughness","calculateSpecularFactor","calculateCommonData","calculateReflectionMode","metallicRoughnessTexture","metallicRoughnessSample","sampleMetallicRoughnessTexture","ShaderHelper","getCameraRoughnessFactor","specularColorTexture","specularColor","sampleSpecularColorTexture","specularTexture","sampleSpecularTexture","notEqual","getF0","calculateAnisotropy","calculateAnisotropyDirection"],"mappings":"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"}
|
package/dist/material/pbrmr.js
CHANGED
|
@@ -13,10 +13,6 @@ import { Vector3 } from '@zephyr3d/base';
|
|
|
13
13
|
/** @internal */ static FEATURE_VERTEX_NORMAL = this.defineFeature();
|
|
14
14
|
/** @internal */ static FEATURE_VERTEX_TANGENT = this.defineFeature();
|
|
15
15
|
/** @internal */ static FEATURE_SUBSURFACE_SCATTERING = this.defineFeature();
|
|
16
|
-
/** @internal */ static SUBSURFACE_COLOR_UNIFORM = this.defineInstanceUniform('subsurfaceColor', 'rgb', 'SubsurfaceColor');
|
|
17
|
-
/** @internal */ static SUBSURFACE_SCALE_UNIFORM = this.defineInstanceUniform('subsurfaceScale', 'float', 'SubsurfaceScale');
|
|
18
|
-
/** @internal */ static SUBSURFACE_POWER_UNIFORM = this.defineInstanceUniform('subsurfacePower', 'float', 'SubsurfacePower');
|
|
19
|
-
/** @internal */ static SUBSURFACE_INTENSITY_UNIFORM = this.defineInstanceUniform('subsurfaceIntensity', 'float', 'SubsurfaceIntensity');
|
|
20
16
|
_subsurfaceColor;
|
|
21
17
|
_subsurfaceScale;
|
|
22
18
|
_subsurfacePower;
|
|
@@ -143,17 +139,11 @@ import { Vector3 } from '@zephyr3d/base';
|
|
|
143
139
|
scope.$outputs.wBinormal = pb.mul(pb.cross(scope.$outputs.wNorm, scope.$outputs.wTangent), scope.oTangent.w);
|
|
144
140
|
}
|
|
145
141
|
}
|
|
146
|
-
if (this.subsurfaceScattering && this.needFragmentColor() && this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {
|
|
147
|
-
scope.$outputs.zSubsurfaceColor = this.getInstancedUniform(scope, PBRMetallicRoughnessMaterial.SUBSURFACE_COLOR_UNIFORM);
|
|
148
|
-
scope.$outputs.zSubsurfaceScale = this.getInstancedUniform(scope, PBRMetallicRoughnessMaterial.SUBSURFACE_SCALE_UNIFORM);
|
|
149
|
-
scope.$outputs.zSubsurfacePower = this.getInstancedUniform(scope, PBRMetallicRoughnessMaterial.SUBSURFACE_POWER_UNIFORM);
|
|
150
|
-
scope.$outputs.zSubsurfaceIntensity = this.getInstancedUniform(scope, PBRMetallicRoughnessMaterial.SUBSURFACE_INTENSITY_UNIFORM);
|
|
151
|
-
}
|
|
152
142
|
}
|
|
153
143
|
fragmentShader(scope) {
|
|
154
144
|
super.fragmentShader(scope);
|
|
155
145
|
const pb = scope.$builder;
|
|
156
|
-
if (this.subsurfaceScattering && this.needFragmentColor() && this.drawContext.renderPass.type === RENDER_PASS_TYPE_LIGHT
|
|
146
|
+
if (this.subsurfaceScattering && this.needFragmentColor() && this.drawContext.renderPass.type === RENDER_PASS_TYPE_LIGHT) {
|
|
157
147
|
scope.zSubsurfaceColor = pb.vec3().uniform(2);
|
|
158
148
|
scope.zSubsurfaceScale = pb.float().uniform(2);
|
|
159
149
|
scope.zSubsurfacePower = pb.float().uniform(2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pbrmr.js","sources":["../../src/material/pbrmr.ts"],"sourcesContent":["import { MeshMaterial, applyMaterialMixins } from './meshmaterial';\r\nimport { mixinVertexColor } from './mixins/vertexcolor';\r\nimport type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { mixinPBRMetallicRoughness } from './mixins/lightmodel/pbrmetallicroughness';\r\nimport { mixinTextureProps } from './mixins/texture';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport { MaterialVaryingFlags, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport type { Clonable, Immutable } from '@zephyr3d/base';\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport type { DrawContext } from '../render';\r\n\r\n/**\r\n * PBRMetallicRoughnessMaterial class\r\n * @public\r\n */\r\nexport class PBRMetallicRoughnessMaterial\r\n extends applyMaterialMixins(\r\n MeshMaterial,\r\n mixinPBRMetallicRoughness,\r\n mixinVertexColor,\r\n mixinTextureProps('subsurface')\r\n )\r\n implements Clonable<PBRMetallicRoughnessMaterial>\r\n{\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_NORMAL = this.defineFeature();\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_TANGENT = this.defineFeature();\r\n /** @internal */\r\n private static readonly FEATURE_SUBSURFACE_SCATTERING = this.defineFeature();\r\n /** @internal */\r\n private static readonly SUBSURFACE_COLOR_UNIFORM = this.defineInstanceUniform(\r\n 'subsurfaceColor',\r\n 'rgb',\r\n 'SubsurfaceColor'\r\n );\r\n /** @internal */\r\n private static readonly SUBSURFACE_SCALE_UNIFORM = this.defineInstanceUniform(\r\n 'subsurfaceScale',\r\n 'float',\r\n 'SubsurfaceScale'\r\n );\r\n /** @internal */\r\n private static readonly SUBSURFACE_POWER_UNIFORM = this.defineInstanceUniform(\r\n 'subsurfacePower',\r\n 'float',\r\n 'SubsurfacePower'\r\n );\r\n /** @internal */\r\n private static readonly SUBSURFACE_INTENSITY_UNIFORM = this.defineInstanceUniform(\r\n 'subsurfaceIntensity',\r\n 'float',\r\n 'SubsurfaceIntensity'\r\n );\r\n private readonly _subsurfaceColor: Vector3;\r\n private _subsurfaceScale: number;\r\n private _subsurfacePower: number;\r\n private _subsurfaceIntensity: number;\r\n /**\r\n * Creates an instance of PBRMetallicRoughnessMaterial class\r\n */\r\n constructor() {\r\n super();\r\n this._subsurfaceColor = new Vector3(1, 0.3, 0.2);\r\n this._subsurfaceScale = 0.5;\r\n this._subsurfacePower = 1.5;\r\n this._subsurfaceIntensity = 0.5;\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, true);\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_SUBSURFACE_SCATTERING, false);\r\n this.transmission = false;\r\n this.transmissionFactor = 0.2;\r\n this.thicknessFactor = 0.35;\r\n this.attenuationColor = new Vector3(1, 0.5, 0.4);\r\n this.attenuationDistance = 0.6;\r\n }\r\n clone() {\r\n const other = new PBRMetallicRoughnessMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.vertexNormal = other.vertexNormal;\r\n this.vertexTangent = other.vertexTangent;\r\n this.subsurfaceScattering = other.subsurfaceScattering;\r\n this.subsurfaceColor = other.subsurfaceColor;\r\n this.subsurfaceScale = other.subsurfaceScale;\r\n this.subsurfacePower = other.subsurfacePower;\r\n this.subsurfaceIntensity = other.subsurfaceIntensity;\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexNormal() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL);\r\n }\r\n set vertexNormal(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, !!val);\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexTangent() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_TANGENT);\r\n }\r\n set vertexTangent(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_TANGENT, !!val);\r\n }\r\n /** true if subsurface scattering is enabled */\r\n get subsurfaceScattering() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_SUBSURFACE_SCATTERING);\r\n }\r\n set subsurfaceScattering(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_SUBSURFACE_SCATTERING, !!val);\r\n }\r\n /** subsurface scattering color tint */\r\n get subsurfaceColor(): Immutable<Vector3> {\r\n return this._subsurfaceColor;\r\n }\r\n set subsurfaceColor(val: Immutable<Vector3>) {\r\n if (!val.equalsTo(this._subsurfaceColor)) {\r\n this._subsurfaceColor.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n /** wrap factor for the scattering profile */\r\n get subsurfaceScale() {\r\n return this._subsurfaceScale;\r\n }\r\n set subsurfaceScale(val: number) {\r\n if (val !== this._subsurfaceScale) {\r\n this._subsurfaceScale = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** profile exponent for the scattering profile */\r\n get subsurfacePower() {\r\n return this._subsurfacePower;\r\n }\r\n set subsurfacePower(val: number) {\r\n if (val !== this._subsurfacePower) {\r\n this._subsurfacePower = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** final intensity of scattering contribution */\r\n get subsurfaceIntensity() {\r\n return this._subsurfaceIntensity;\r\n }\r\n set subsurfaceIntensity(val: number) {\r\n if (val !== this._subsurfaceIntensity) {\r\n this._subsurfaceIntensity = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n private getSubsurfaceColor(scope: PBInsideFunctionScope): PBShaderExp {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSubsurfaceColor : scope.zSubsurfaceColor) as PBShaderExp;\r\n }\r\n private getSubsurfaceScale(scope: PBInsideFunctionScope): PBShaderExp {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSubsurfaceScale : scope.zSubsurfaceScale) as PBShaderExp;\r\n }\r\n private getSubsurfacePower(scope: PBInsideFunctionScope): PBShaderExp {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSubsurfacePower : scope.zSubsurfacePower) as PBShaderExp;\r\n }\r\n private getSubsurfaceIntensity(scope: PBInsideFunctionScope): PBShaderExp {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSubsurfaceIntensity : scope.zSubsurfaceIntensity) as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n const worldMatrix = ShaderHelper.getWorldMatrix(scope);\r\n scope.$l.oPos = ShaderHelper.resolveVertexPosition(scope);\r\n scope.$outputs.worldPos = pb.mul(worldMatrix, pb.vec4(scope.oPos, 1)).xyz;\r\n scope.$l.csPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1));\r\n ShaderHelper.setClipSpacePosition(scope, scope.csPos);\r\n if (this.transmission) {\r\n scope.$outputs.screenUV = pb.add(pb.mul(pb.div(scope.csPos.xy, scope.csPos.w), 0.5), pb.vec2(0.5));\r\n scope.$outputs.modelScale = pb.vec3(\r\n pb.length(worldMatrix[0].xyz),\r\n pb.length(worldMatrix[1].xyz),\r\n pb.length(worldMatrix[2].xyz)\r\n );\r\n }\r\n if (this.vertexNormal) {\r\n scope.$l.oNorm = ShaderHelper.resolveVertexNormal(scope);\r\n scope.$outputs.wNorm = pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oNorm, 0)).xyz;\r\n if (this.vertexTangent) {\r\n scope.$l.oTangent = ShaderHelper.resolveVertexTangent(scope);\r\n scope.$outputs.wTangent = pb.mul(\r\n ShaderHelper.getNormalMatrix(scope),\r\n pb.vec4(scope.oTangent.xyz, 0)\r\n ).xyz;\r\n scope.$outputs.wBinormal = pb.mul(\r\n pb.cross(scope.$outputs.wNorm, scope.$outputs.wTangent),\r\n scope.oTangent.w\r\n );\r\n }\r\n }\r\n if (\r\n this.subsurfaceScattering &&\r\n this.needFragmentColor() &&\r\n this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING\r\n ) {\r\n scope.$outputs.zSubsurfaceColor = this.getInstancedUniform(\r\n scope,\r\n PBRMetallicRoughnessMaterial.SUBSURFACE_COLOR_UNIFORM\r\n );\r\n scope.$outputs.zSubsurfaceScale = this.getInstancedUniform(\r\n scope,\r\n PBRMetallicRoughnessMaterial.SUBSURFACE_SCALE_UNIFORM\r\n );\r\n scope.$outputs.zSubsurfacePower = this.getInstancedUniform(\r\n scope,\r\n PBRMetallicRoughnessMaterial.SUBSURFACE_POWER_UNIFORM\r\n );\r\n scope.$outputs.zSubsurfaceIntensity = this.getInstancedUniform(\r\n scope,\r\n PBRMetallicRoughnessMaterial.SUBSURFACE_INTENSITY_UNIFORM\r\n );\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n if (\r\n this.subsurfaceScattering &&\r\n this.needFragmentColor() &&\r\n this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT &&\r\n !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)\r\n ) {\r\n scope.zSubsurfaceColor = pb.vec3().uniform(2);\r\n scope.zSubsurfaceScale = pb.float().uniform(2);\r\n scope.zSubsurfacePower = pb.float().uniform(2);\r\n scope.zSubsurfaceIntensity = pb.float().uniform(2);\r\n }\r\n if (this.needFragmentColor()) {\r\n scope.$l.albedo = this.calculateAlbedoColor(scope);\r\n if (this.vertexColor) {\r\n scope.albedo = pb.mul(scope.albedo, this.getVertexColor(scope));\r\n }\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.$inputs.wNorm,\r\n scope.$inputs.wTangent,\r\n scope.$inputs.wBinormal\r\n );\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {\r\n scope.$l.outRoughness = pb.vec4();\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness\r\n );\r\n if (this.subsurfaceScattering) {\r\n scope.$l.NoV = pb.clamp(pb.dot(scope.normalInfo.normal, scope.viewVec), 0, 1);\r\n scope.$l.wrapNdotV = pb.clamp(\r\n pb.div(\r\n pb.add(pb.sub(1, scope.NoV), this.getSubsurfaceScale(scope)),\r\n pb.add(1, this.getSubsurfaceScale(scope))\r\n ),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssFactor = pb.mul(\r\n pb.pow(scope.wrapNdotV, this.getSubsurfacePower(scope)),\r\n this.getSubsurfaceIntensity(scope)\r\n );\r\n if (this.subsurfaceTexture) {\r\n scope.sssFactor = pb.mul(scope.sssFactor, this.sampleSubsurfaceTexture(scope).r);\r\n }\r\n scope.litColor = pb.add(\r\n scope.litColor,\r\n pb.mul(scope.albedo.rgb, this.getSubsurfaceColor(scope), scope.sssFactor)\r\n );\r\n }\r\n /*\r\n scope.outRoughness = pb.vec4(\r\n pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)),\r\n scope.outRoughness.a\r\n );\r\n */\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(scope.litColor, scope.albedo.a),\r\n scope.outRoughness,\r\n pb.vec4(pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)), 1)\r\n );\r\n } else {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN\r\n );\r\n if (this.subsurfaceScattering) {\r\n scope.$l.NoV = pb.clamp(pb.dot(scope.normalInfo.normal, scope.viewVec), 0, 1);\r\n scope.$l.wrapNdotV = pb.clamp(\r\n pb.div(\r\n pb.add(pb.sub(1, scope.NoV), this.getSubsurfaceScale(scope)),\r\n pb.add(1, this.getSubsurfaceScale(scope))\r\n ),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssFactor = pb.mul(\r\n pb.pow(scope.wrapNdotV, this.getSubsurfacePower(scope)),\r\n this.getSubsurfaceIntensity(scope)\r\n );\r\n if (this.subsurfaceTexture) {\r\n scope.sssFactor = pb.mul(scope.sssFactor, this.sampleSubsurfaceTexture(scope).r);\r\n }\r\n scope.litColor = pb.add(\r\n scope.litColor,\r\n pb.mul(scope.albedo.rgb, this.getSubsurfaceColor(scope), scope.sssFactor)\r\n );\r\n }\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, pb.vec4(scope.litColor, scope.albedo.a));\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.albedo);\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (\r\n this.subsurfaceScattering &&\r\n this.needFragmentColor(ctx) &&\r\n ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT &&\r\n !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)\r\n ) {\r\n bindGroup.setValue('zSubsurfaceColor', this._subsurfaceColor);\r\n bindGroup.setValue('zSubsurfaceScale', this._subsurfaceScale);\r\n bindGroup.setValue('zSubsurfacePower', this._subsurfacePower);\r\n bindGroup.setValue('zSubsurfaceIntensity', this._subsurfaceIntensity);\r\n }\r\n }\r\n}\r\n"],"names":["PBRMetallicRoughnessMaterial","applyMaterialMixins","MeshMaterial","mixinPBRMetallicRoughness","mixinVertexColor","mixinTextureProps","FEATURE_VERTEX_NORMAL","defineFeature","FEATURE_VERTEX_TANGENT","FEATURE_SUBSURFACE_SCATTERING","SUBSURFACE_COLOR_UNIFORM","defineInstanceUniform","SUBSURFACE_SCALE_UNIFORM","SUBSURFACE_POWER_UNIFORM","SUBSURFACE_INTENSITY_UNIFORM","_subsurfaceColor","_subsurfaceScale","_subsurfacePower","_subsurfaceIntensity","Vector3","useFeature","transmission","transmissionFactor","thicknessFactor","attenuationColor","attenuationDistance","clone","other","copyFrom","vertexNormal","vertexTangent","subsurfaceScattering","subsurfaceColor","subsurfaceScale","subsurfacePower","subsurfaceIntensity","featureUsed","val","equalsTo","set","uniformChanged","getSubsurfaceColor","scope","instancing","drawContext","materialFlags","MaterialVaryingFlags","INSTANCING","$inputs","zSubsurfaceColor","getSubsurfaceScale","zSubsurfaceScale","getSubsurfacePower","zSubsurfacePower","getSubsurfaceIntensity","zSubsurfaceIntensity","vertexShader","pb","$builder","worldMatrix","ShaderHelper","getWorldMatrix","$l","oPos","resolveVertexPosition","$outputs","worldPos","mul","vec4","xyz","csPos","getViewProjectionMatrix","setClipSpacePosition","screenUV","add","div","xy","w","vec2","modelScale","vec3","length","oNorm","resolveVertexNormal","wNorm","getNormalMatrix","oTangent","resolveVertexTangent","wTangent","wBinormal","cross","needFragmentColor","getInstancedUniform","fragmentShader","renderPass","type","RENDER_PASS_TYPE_LIGHT","uniform","float","albedo","calculateAlbedoColor","vertexColor","getVertexColor","normalInfo","calculateNormalAndTBN","viewVec","calculateViewVector","SSR_STORE_ROUGHNESS","outRoughness","litColor","PBRLight","normal","TBN","NoV","clamp","dot","wrapNdotV","sub","sssFactor","pow","subsurfaceTexture","sampleSubsurfaceTexture","r","rgb","outputFragmentColor","a","applyUniformValues","bindGroup","ctx","pass","setValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pbrmr.js","sources":["../../src/material/pbrmr.ts"],"sourcesContent":["import { MeshMaterial, applyMaterialMixins } from './meshmaterial';\r\nimport { mixinVertexColor } from './mixins/vertexcolor';\r\nimport type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { mixinPBRMetallicRoughness } from './mixins/lightmodel/pbrmetallicroughness';\r\nimport { mixinTextureProps } from './mixins/texture';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport { MaterialVaryingFlags, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport type { Clonable, Immutable } from '@zephyr3d/base';\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport type { DrawContext } from '../render';\r\n\r\n/**\r\n * PBRMetallicRoughnessMaterial class\r\n * @public\r\n */\r\nexport class PBRMetallicRoughnessMaterial\r\n extends applyMaterialMixins(\r\n MeshMaterial,\r\n mixinPBRMetallicRoughness,\r\n mixinVertexColor,\r\n mixinTextureProps('subsurface')\r\n )\r\n implements Clonable<PBRMetallicRoughnessMaterial>\r\n{\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_NORMAL = this.defineFeature();\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_TANGENT = this.defineFeature();\r\n /** @internal */\r\n private static readonly FEATURE_SUBSURFACE_SCATTERING = this.defineFeature();\r\n private readonly _subsurfaceColor: Vector3;\r\n private _subsurfaceScale: number;\r\n private _subsurfacePower: number;\r\n private _subsurfaceIntensity: number;\r\n /**\r\n * Creates an instance of PBRMetallicRoughnessMaterial class\r\n */\r\n constructor() {\r\n super();\r\n this._subsurfaceColor = new Vector3(1, 0.3, 0.2);\r\n this._subsurfaceScale = 0.5;\r\n this._subsurfacePower = 1.5;\r\n this._subsurfaceIntensity = 0.5;\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, true);\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_SUBSURFACE_SCATTERING, false);\r\n this.transmission = false;\r\n this.transmissionFactor = 0.2;\r\n this.thicknessFactor = 0.35;\r\n this.attenuationColor = new Vector3(1, 0.5, 0.4);\r\n this.attenuationDistance = 0.6;\r\n }\r\n clone() {\r\n const other = new PBRMetallicRoughnessMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.vertexNormal = other.vertexNormal;\r\n this.vertexTangent = other.vertexTangent;\r\n this.subsurfaceScattering = other.subsurfaceScattering;\r\n this.subsurfaceColor = other.subsurfaceColor;\r\n this.subsurfaceScale = other.subsurfaceScale;\r\n this.subsurfacePower = other.subsurfacePower;\r\n this.subsurfaceIntensity = other.subsurfaceIntensity;\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexNormal() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL);\r\n }\r\n set vertexNormal(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, !!val);\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexTangent() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_TANGENT);\r\n }\r\n set vertexTangent(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_TANGENT, !!val);\r\n }\r\n /** true if subsurface scattering is enabled */\r\n get subsurfaceScattering() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_SUBSURFACE_SCATTERING);\r\n }\r\n set subsurfaceScattering(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_SUBSURFACE_SCATTERING, !!val);\r\n }\r\n /** subsurface scattering color tint */\r\n get subsurfaceColor(): Immutable<Vector3> {\r\n return this._subsurfaceColor;\r\n }\r\n set subsurfaceColor(val: Immutable<Vector3>) {\r\n if (!val.equalsTo(this._subsurfaceColor)) {\r\n this._subsurfaceColor.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n /** wrap factor for the scattering profile */\r\n get subsurfaceScale() {\r\n return this._subsurfaceScale;\r\n }\r\n set subsurfaceScale(val: number) {\r\n if (val !== this._subsurfaceScale) {\r\n this._subsurfaceScale = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** profile exponent for the scattering profile */\r\n get subsurfacePower() {\r\n return this._subsurfacePower;\r\n }\r\n set subsurfacePower(val: number) {\r\n if (val !== this._subsurfacePower) {\r\n this._subsurfacePower = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** final intensity of scattering contribution */\r\n get subsurfaceIntensity() {\r\n return this._subsurfaceIntensity;\r\n }\r\n set subsurfaceIntensity(val: number) {\r\n if (val !== this._subsurfaceIntensity) {\r\n this._subsurfaceIntensity = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n private getSubsurfaceColor(scope: PBInsideFunctionScope): PBShaderExp {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSubsurfaceColor : scope.zSubsurfaceColor) as PBShaderExp;\r\n }\r\n private getSubsurfaceScale(scope: PBInsideFunctionScope): PBShaderExp {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSubsurfaceScale : scope.zSubsurfaceScale) as PBShaderExp;\r\n }\r\n private getSubsurfacePower(scope: PBInsideFunctionScope): PBShaderExp {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSubsurfacePower : scope.zSubsurfacePower) as PBShaderExp;\r\n }\r\n private getSubsurfaceIntensity(scope: PBInsideFunctionScope): PBShaderExp {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSubsurfaceIntensity : scope.zSubsurfaceIntensity) as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n const worldMatrix = ShaderHelper.getWorldMatrix(scope);\r\n scope.$l.oPos = ShaderHelper.resolveVertexPosition(scope);\r\n scope.$outputs.worldPos = pb.mul(worldMatrix, pb.vec4(scope.oPos, 1)).xyz;\r\n scope.$l.csPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1));\r\n ShaderHelper.setClipSpacePosition(scope, scope.csPos);\r\n if (this.transmission) {\r\n scope.$outputs.screenUV = pb.add(pb.mul(pb.div(scope.csPos.xy, scope.csPos.w), 0.5), pb.vec2(0.5));\r\n scope.$outputs.modelScale = pb.vec3(\r\n pb.length(worldMatrix[0].xyz),\r\n pb.length(worldMatrix[1].xyz),\r\n pb.length(worldMatrix[2].xyz)\r\n );\r\n }\r\n if (this.vertexNormal) {\r\n scope.$l.oNorm = ShaderHelper.resolveVertexNormal(scope);\r\n scope.$outputs.wNorm = pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oNorm, 0)).xyz;\r\n if (this.vertexTangent) {\r\n scope.$l.oTangent = ShaderHelper.resolveVertexTangent(scope);\r\n scope.$outputs.wTangent = pb.mul(\r\n ShaderHelper.getNormalMatrix(scope),\r\n pb.vec4(scope.oTangent.xyz, 0)\r\n ).xyz;\r\n scope.$outputs.wBinormal = pb.mul(\r\n pb.cross(scope.$outputs.wNorm, scope.$outputs.wTangent),\r\n scope.oTangent.w\r\n );\r\n }\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n if (\r\n this.subsurfaceScattering &&\r\n this.needFragmentColor() &&\r\n this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT\r\n ) {\r\n scope.zSubsurfaceColor = pb.vec3().uniform(2);\r\n scope.zSubsurfaceScale = pb.float().uniform(2);\r\n scope.zSubsurfacePower = pb.float().uniform(2);\r\n scope.zSubsurfaceIntensity = pb.float().uniform(2);\r\n }\r\n if (this.needFragmentColor()) {\r\n scope.$l.albedo = this.calculateAlbedoColor(scope);\r\n if (this.vertexColor) {\r\n scope.albedo = pb.mul(scope.albedo, this.getVertexColor(scope));\r\n }\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.$inputs.wNorm,\r\n scope.$inputs.wTangent,\r\n scope.$inputs.wBinormal\r\n );\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {\r\n scope.$l.outRoughness = pb.vec4();\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness\r\n );\r\n if (this.subsurfaceScattering) {\r\n scope.$l.NoV = pb.clamp(pb.dot(scope.normalInfo.normal, scope.viewVec), 0, 1);\r\n scope.$l.wrapNdotV = pb.clamp(\r\n pb.div(\r\n pb.add(pb.sub(1, scope.NoV), this.getSubsurfaceScale(scope)),\r\n pb.add(1, this.getSubsurfaceScale(scope))\r\n ),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssFactor = pb.mul(\r\n pb.pow(scope.wrapNdotV, this.getSubsurfacePower(scope)),\r\n this.getSubsurfaceIntensity(scope)\r\n );\r\n if (this.subsurfaceTexture) {\r\n scope.sssFactor = pb.mul(scope.sssFactor, this.sampleSubsurfaceTexture(scope).r);\r\n }\r\n scope.litColor = pb.add(\r\n scope.litColor,\r\n pb.mul(scope.albedo.rgb, this.getSubsurfaceColor(scope), scope.sssFactor)\r\n );\r\n }\r\n /*\r\n scope.outRoughness = pb.vec4(\r\n pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)),\r\n scope.outRoughness.a\r\n );\r\n */\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(scope.litColor, scope.albedo.a),\r\n scope.outRoughness,\r\n pb.vec4(pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)), 1)\r\n );\r\n } else {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN\r\n );\r\n if (this.subsurfaceScattering) {\r\n scope.$l.NoV = pb.clamp(pb.dot(scope.normalInfo.normal, scope.viewVec), 0, 1);\r\n scope.$l.wrapNdotV = pb.clamp(\r\n pb.div(\r\n pb.add(pb.sub(1, scope.NoV), this.getSubsurfaceScale(scope)),\r\n pb.add(1, this.getSubsurfaceScale(scope))\r\n ),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssFactor = pb.mul(\r\n pb.pow(scope.wrapNdotV, this.getSubsurfacePower(scope)),\r\n this.getSubsurfaceIntensity(scope)\r\n );\r\n if (this.subsurfaceTexture) {\r\n scope.sssFactor = pb.mul(scope.sssFactor, this.sampleSubsurfaceTexture(scope).r);\r\n }\r\n scope.litColor = pb.add(\r\n scope.litColor,\r\n pb.mul(scope.albedo.rgb, this.getSubsurfaceColor(scope), scope.sssFactor)\r\n );\r\n }\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, pb.vec4(scope.litColor, scope.albedo.a));\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.albedo);\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (\r\n this.subsurfaceScattering &&\r\n this.needFragmentColor(ctx) &&\r\n ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT &&\r\n !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)\r\n ) {\r\n bindGroup.setValue('zSubsurfaceColor', this._subsurfaceColor);\r\n bindGroup.setValue('zSubsurfaceScale', this._subsurfaceScale);\r\n bindGroup.setValue('zSubsurfacePower', this._subsurfacePower);\r\n bindGroup.setValue('zSubsurfaceIntensity', this._subsurfaceIntensity);\r\n }\r\n }\r\n}\r\n"],"names":["PBRMetallicRoughnessMaterial","applyMaterialMixins","MeshMaterial","mixinPBRMetallicRoughness","mixinVertexColor","mixinTextureProps","FEATURE_VERTEX_NORMAL","defineFeature","FEATURE_VERTEX_TANGENT","FEATURE_SUBSURFACE_SCATTERING","_subsurfaceColor","_subsurfaceScale","_subsurfacePower","_subsurfaceIntensity","Vector3","useFeature","transmission","transmissionFactor","thicknessFactor","attenuationColor","attenuationDistance","clone","other","copyFrom","vertexNormal","vertexTangent","subsurfaceScattering","subsurfaceColor","subsurfaceScale","subsurfacePower","subsurfaceIntensity","featureUsed","val","equalsTo","set","uniformChanged","getSubsurfaceColor","scope","instancing","drawContext","materialFlags","MaterialVaryingFlags","INSTANCING","$inputs","zSubsurfaceColor","getSubsurfaceScale","zSubsurfaceScale","getSubsurfacePower","zSubsurfacePower","getSubsurfaceIntensity","zSubsurfaceIntensity","vertexShader","pb","$builder","worldMatrix","ShaderHelper","getWorldMatrix","$l","oPos","resolveVertexPosition","$outputs","worldPos","mul","vec4","xyz","csPos","getViewProjectionMatrix","setClipSpacePosition","screenUV","add","div","xy","w","vec2","modelScale","vec3","length","oNorm","resolveVertexNormal","wNorm","getNormalMatrix","oTangent","resolveVertexTangent","wTangent","wBinormal","cross","fragmentShader","needFragmentColor","renderPass","type","RENDER_PASS_TYPE_LIGHT","uniform","float","albedo","calculateAlbedoColor","vertexColor","getVertexColor","normalInfo","calculateNormalAndTBN","viewVec","calculateViewVector","SSR_STORE_ROUGHNESS","outRoughness","litColor","PBRLight","normal","TBN","NoV","clamp","dot","wrapNdotV","sub","sssFactor","pow","subsurfaceTexture","sampleSubsurfaceTexture","r","rgb","outputFragmentColor","a","applyUniformValues","bindGroup","ctx","pass","setValue"],"mappings":"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"}
|