@xviewer.js/postprocessing 1.0.0-alpha.6 → 1.0.0-alpha.7
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/main.js +38 -37
- package/dist/main.js.map +1 -1
- package/dist/module.js +38 -37
- package/dist/module.js.map +1 -1
- package/package.json +2 -2
- package/types/EffectComposerPlugin.d.ts +0 -1
- package/types/getVelocityDepthNormalPass.d.ts +3 -0
- package/types/index.d.ts +1 -1
package/dist/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sources":["../src/EffectComposerPlugin.ts","../../../node_modules/.pnpm/tslib@2.6.2/node_modules/tslib/tslib.es6.mjs","../src/PassPlugin.ts","../src/ToneMappingPlugin.ts","../src/BloomPlugin.ts","../src/FXAAPlugin.ts","../src/SMAAPlugin.ts","../src/MSAAPlugin.ts","../src/realism-effects/temporal-reproject/utils/QuasirandomGenerator.js","../src/realism-effects/taa/TAAUtils.js","../src/realism-effects/ssgi/utils/Utils.js","../src/realism-effects/temporal-reproject/material/TemporalReprojectMaterial.js","../src/realism-effects/utils/SceneUtils.js","../src/realism-effects/temporal-reproject/TemporalReprojectPass.js","../src/realism-effects/traa/TRAAEffect.js","../src/realism-effects/ssgi/pass/CubeToEquirectEnvPass.js","../src/realism-effects/utils/blue_noise_rgba.png","../src/realism-effects/utils/BlueNoiseUtils.js","../src/realism-effects/gbuffer/material/GBufferMaterial.js","../src/realism-effects/gbuffer/GBufferPass.js","../src/realism-effects/ssgi/utils/EquirectHdrInfoUniform.js","../src/realism-effects/ssgi/material/SSGIMaterial.js","../src/realism-effects/ssgi/pass/SSGIPass.js","../src/realism-effects/temporal-reproject/material/VelocityDepthNormalMaterial.js","../src/realism-effects/gbuffer/utils/GBufferUtils.js","../src/realism-effects/temporal-reproject/pass/VelocityDepthNormalPass.js","../src/realism-effects/denoise/pass/DenoiserComposePass.js","../src/realism-effects/denoise/pass/PoissonDenoisePass.js","../src/realism-effects/denoise/Denoiser.js","../src/realism-effects/gbuffer/debug/GBufferDebugPass.js","../src/realism-effects/ssgi/SSGIOptions.js","../src/realism-effects/ssgi/SSGIEffect.js","../src/realism-effects/motion-blur/MotionBlurEffect.js","../src/realism-effects/ao/AOEffect.js","../src/getVelocityDepthNormalPass.ts","../src/TRAAPlugin.ts","../src/MotionBlurPlugin.ts"],"sourcesContent":["import { Plugin, Viewer } from \"@xviewer.js/core\";\nimport { EffectComposer, EffectPass, Pass, RenderPass } from \"postprocessing\";\nimport { HalfFloatType } from \"three\";\n\nexport class EffectComposerPlugin extends Plugin {\n\n static Instance(viewer: Viewer) {\n return viewer.getPlugin(EffectComposerPlugin, true);\n }\n\n get multisampling() {\n return this._composer.multisampling;\n }\n set multisampling(v: number) {\n this._composer.multisampling = v;\n }\n\n private _composer: EffectComposer;\n private _renderPass: RenderPass;\n private _outputPass: EffectPass;\n\n constructor(props: ConstructorParameters<typeof EffectComposer>[1]) {\n super();\n this.install = () => {\n const { renderer, scene, camera } = this.viewer;\n\n this._renderPass = new RenderPass(scene, camera);\n this._outputPass = new EffectPass(camera);\n\n this._composer = new EffectComposer(renderer, Object.assign({ frameBufferType: HalfFloatType }, props));\n this._composer.addPass(this._renderPass);\n this._composer.addPass(this._outputPass);\n\n this.viewer._onResize = (width: number, height: number) => this._composer.setSize(width, height);\n this.viewer._onRender = (dt: number) => this._composer.render(dt);\n }\n this.uninstall = () => {\n this._composer.dispose();\n }\n }\n\n getPass<T extends Pass>(constructor: (new (...args) => T) | Function) {\n return this._composer.passes.find(v => v.constructor === constructor) as T;\n }\n\n addPass<T extends Pass>(pass: T) {\n this._composer.addPass(pass, this._composer.passes.length - 1);\n this._checkOutputPass();\n return pass;\n }\n\n removePass(pass: Pass) {\n this._composer.removePass(pass);\n this._checkOutputPass();\n }\n\n activePass(pass: Pass, v: boolean) {\n pass.enabled = v;\n this._checkOutputPass();\n return pass;\n }\n\n private _checkOutputPass() {\n const count = this._composer.passes.filter(v => v.enabled && v.name !== \"VelocityDepthNormalPass\" && v !== this._outputPass).length;\n this._outputPass.enabled = this._composer.multisampling > 0 && count === 1;\n this._setRenderToScreen();\n }\n\n private _setRenderToScreen() {\n const passes = this._composer.passes;\n for (let k = 0, i = passes.length; i--;) {\n let pass = passes[i];\n if (pass.enabled && pass.name !== \"VelocityDepthNormalPass\" && k === 0) {\n k = i;\n }\n pass.renderToScreen = k === i;\n }\n }\n\n}","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","import { Plugin, property } from \"@xviewer.js/core\";\nimport { Pass } from \"postprocessing\";\nimport { EffectComposerPlugin } from \"./EffectComposerPlugin\";\n\nexport class PassPlugin<T extends Pass> extends Plugin {\n\n @property\n get enable() {\n return this.pass.enabled;\n }\n set enable(v: boolean) {\n this.setEnable(v);\n }\n\n get composer() {\n return EffectComposerPlugin.Instance(this.viewer);\n }\n\n pass: T;\n\n setEnable(v: boolean) {\n this.composer.activePass(this.pass, v);\n }\n\n}","import { property } from \"@xviewer.js/core\";\nimport { EffectPass, ToneMappingEffect, ToneMappingMode } from \"postprocessing\";\nimport { PassPlugin } from \"./PassPlugin\";\n\nexport class ToneMappingPlugin extends PassPlugin<EffectPass> {\n\n @property({ value: ToneMappingMode })\n get mode() {\n return this.effect.mode;\n }\n\n set mode(v: ToneMappingMode) {\n this.effect.mode = v;\n }\n\n effect: ToneMappingEffect;\n\n constructor(props: ConstructorParameters<typeof ToneMappingEffect>[0]) {\n super();\n this.install = () => {\n this.effect = new ToneMappingEffect(props);\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, this.effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n}","import { property } from \"@xviewer.js/core\";\nimport { BlendFunction, BloomEffect, EffectPass } from \"postprocessing\";\nimport { PassPlugin } from \"./PassPlugin\";\n\nexport class BloomPlugin extends PassPlugin<EffectPass> {\n\n @property({ min: 0, max: 2, step: 0.01 })\n get intensity() {\n return this.effect.intensity;\n }\n set intensity(v: number) {\n this.effect.intensity = v;\n }\n\n @property({ min: 0, max: 10, step: 0.01 })\n get luminanceThreshold() {\n return this.effect.luminanceMaterial.threshold;\n }\n set luminanceThreshold(v: number) {\n this.effect.luminanceMaterial.threshold = v;\n }\n\n @property({ min: 0, max: 10, step: 0.01 })\n get luminanceSmoothing() {\n return this.effect.luminanceMaterial.smoothing;\n }\n set luminanceSmoothing(v: number) {\n this.effect.luminanceMaterial.smoothing = v;\n }\n\n effect: BloomEffect;\n\n constructor(props?: ConstructorParameters<typeof BloomEffect>[0]) {\n super();\n this.install = () => {\n this.effect = new BloomEffect({ blendFunction: BlendFunction.ADD, ...props });\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, this.effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n\n}","import { EffectPass, FXAAEffect } from \"postprocessing\";\nimport { PassPlugin } from \"./PassPlugin\";\n\nexport class FXAAPlugin extends PassPlugin<EffectPass> {\n\n constructor() {\n super();\n this.install = () => {\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, new FXAAEffect()));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n}","import { property } from \"@xviewer.js/core\";\nimport { EdgeDetectionMode, EffectPass, PredicationMode, SMAAEffect, SMAAPreset } from \"postprocessing\";\nimport { PassPlugin } from \"./PassPlugin\";\n\nexport class SMAAPlugin extends PassPlugin<EffectPass> {\n private _preset: SMAAPreset = SMAAPreset.MEDIUM;\n\n @property({ value: SMAAPreset })\n get preset() {\n return this._preset;\n }\n set preset(v: SMAAPreset) {\n if (this._preset !==v) {\n this._preset = v;\n this.effect.applyPreset(v);\n }\n }\n\n @property({ value: EdgeDetectionMode })\n get edgeDetectionMode() {\n return this.effect.edgeDetectionMaterial.edgeDetectionMode;\n }\n set edgeDetectionMode(v: EdgeDetectionMode) {\n this.effect.edgeDetectionMaterial.edgeDetectionMode = v;\n }\n\n @property({ value: PredicationMode })\n get predicationMode() {\n return this.effect.edgeDetectionMaterial.predicationMode;\n }\n set predicationMode(v: PredicationMode) {\n this.effect.edgeDetectionMaterial.predicationMode = v;\n }\n\n effect: SMAAEffect;\n\n constructor(props: ConstructorParameters<typeof SMAAEffect>[0] = {}) {\n super();\n this.install = () => {\n this.effect = new SMAAEffect(props);\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, this.effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n}","import { Plugin, property } from \"@xviewer.js/core\";\nimport { EffectComposerPlugin } from \"./EffectComposerPlugin\";\n\nexport class MSAAPlugin extends Plugin {\n\n @property\n get enable() {\n return this.composer.multisampling > 0;\n }\n set enable(v: boolean) {\n this.composer.multisampling = v ? this._maxSamples : 0;\n }\n\n get composer() {\n return EffectComposerPlugin.Instance(this.viewer);\n }\n\n private _maxSamples: number = 4;\n\n constructor() {\n super();\n this.install = () => {\n const { renderer } = this.viewer;\n this._maxSamples = Math.min(4, renderer.capabilities.maxSamples);\n this.composer.multisampling = this._maxSamples;\n }\n this.uninstall = () => {\n this.composer.multisampling = 0;\n }\n }\n}","// from: https://news.ycombinator.com/item?id=17876741\n// reference: http://extremelearning.com.au/unreasonable-effectiveness-of-quasirandom-sequences/\n\n// eslint-disable-next-line no-unused-vars\nconst harmoniousNumber = (n = 2, value = 0, depth = 100) => {\n\tif (depth === 0) return value\n\n\treturn (1 + harmoniousNumber(n, value, depth - 1)) ** (1 / n)\n}\n\nconst g = 1.32471795724474602596090885447809 // Plastic number\nconst a1 = 1.0 / g\nconst a2 = 1.0 / (g * g)\nconst base = 1.1127756842787055 // harmoniousNumber(7), yields better coverage compared to using 0.5\n\nexport const generateR2 = count => {\n\tconst points = []\n\n\tfor (let n = 0; n < count; n++) {\n\t\tpoints.push([(base + a1 * n) % 1, (base + a2 * n) % 1])\n\t}\n\n\treturn points\n}\n\nexport const getR2Index = n => {\n\treturn [(base + a1 * n) % 1, (base + a2 * n) % 1]\n}\n\nexport const getR3Index = n => {\n\tconst g = 1.2207440846057596\n\tconst a1 = 1.0 / g\n\tconst a2 = 1.0 / (g * g)\n\tconst a3 = 1.0 / (g * g * g)\n\n\treturn [(base + a1 * n) % 1, (base + a2 * n) % 1, (base + a3 * n) % 1]\n}\n\nexport const generateR3 = count => {\n\tconst g = 1.32471795724474602596090885447809 // Plastic number\n\tconst a1 = 1.0 / g\n\tconst a2 = 1.0 / (g * g)\n\tconst a3 = 1.0 / (g * g * g)\n\tconst base = 1.1127756842787055 // harmoniousNumber(7), yields better coverage compared to using 0.5\n\n\tconst points = []\n\n\tfor (let n = 0; n < count; n++) {\n\t\tpoints.push([(base + a1 * n) % 1, (base + a2 * n) % 1, (base + a3 * n) % 1])\n\t}\n\n\treturn points\n}\n","import { generateR2 } from \"../temporal-reproject/utils/QuasirandomGenerator\"\n\nexport const r2Sequence = generateR2(256).map(([a, b]) => [a - 0.5, b - 0.5])\n\nexport function jitter(width, height, camera, frame, jitterScale = 1) {\n\tconst [x, y] = r2Sequence[frame % r2Sequence.length]\n\n\tif (camera.setViewOffset) {\n\t\tcamera.setViewOffset(width, height, x * jitterScale, y * jitterScale, width, height)\n\t}\n}\n","import { ShaderChunk, ShaderLib, UniformsUtils, Vector4 } from \"three\"\n\nexport const generateCubeUVSize = parameters => {\n\tconst imageHeight = parameters.envMapCubeUVHeight\n\n\tif (imageHeight === null) return null\n\n\tconst maxMip = Math.log2(imageHeight) - 2\n\n\tconst texelHeight = 1.0 / imageHeight\n\n\tconst texelWidth = 1.0 / (3 * Math.max(Math.pow(2, maxMip), 7 * 16))\n\n\treturn { texelWidth, texelHeight, maxMip }\n}\n\nexport const setupEnvMap = (ssgiMaterial, envMap, envMapCubeUVHeight) => {\n\tssgiMaterial.uniforms.envMap.value = envMap\n\n\tconst envMapCubeUVSize = generateCubeUVSize({ envMapCubeUVHeight })\n\n\tssgiMaterial.defines.ENVMAP_TYPE_CUBE_UV = \"\"\n\tssgiMaterial.defines.CUBEUV_TEXEL_WIDTH = envMapCubeUVSize.texelWidth\n\tssgiMaterial.defines.CUBEUV_TEXEL_HEIGHT = envMapCubeUVSize.texelHeight\n\tssgiMaterial.defines.CUBEUV_MAX_MIP = envMapCubeUVSize.maxMip + \".0\"\n\n\tssgiMaterial.needsUpdate = true\n}\n\nexport const getMaxMipLevel = texture => {\n\tconst { width, height } = texture.image\n\n\treturn Math.floor(Math.log2(Math.max(width, height))) + 1\n}\n\nexport const createGlobalDisableIblRadianceUniform = () => {\n\tif (!ShaderChunk.envmap_physical_pars_fragment.includes(\"iblRadianceDisabled\")) {\n\t\tShaderChunk.envmap_physical_pars_fragment = ShaderChunk.envmap_physical_pars_fragment.replace(\n\t\t\t\"vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\",\n\t\t\t/* glsl */ `\n\t\tuniform bool iblRadianceDisabled;\n\t\n\t\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t if(iblRadianceDisabled) return vec3(0.);\n\t\t`\n\t\t)\n\t}\n\n\tif (\"iblRadianceDisabled\" in ShaderLib.physical.uniforms) return ShaderLib.physical.uniforms[\"iblRadianceDisabled\"]\n\n\tconst globalIblRadianceDisabledUniform = {\n\t\tvalue: false\n\t}\n\n\tShaderLib.physical.uniforms.iblRadianceDisabled = globalIblRadianceDisabledUniform\n\n\tconst { clone } = UniformsUtils\n\tUniformsUtils.clone = uniforms => {\n\t\tconst result = clone(uniforms)\n\n\t\tif (\"iblRadianceDisabled\" in uniforms) {\n\t\t\tresult.iblRadianceDisabled = globalIblRadianceDisabledUniform\n\t\t}\n\n\t\treturn result\n\t}\n\n\treturn globalIblRadianceDisabledUniform\n}\n\n// source: https://github.com/mrdoob/three.js/blob/b9bc47ab1978022ab0947a9bce1b1209769b8d91/src/renderers/webgl/WebGLProgram.js#L228\n// Unroll Loops\n\nconst unrollLoopPattern =\n\t/#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g\n\nexport function unrollLoops(string) {\n\treturn string.replace(unrollLoopPattern, loopReplacer)\n}\n\nfunction loopReplacer(match, start, end, snippet) {\n\tlet string = \"\"\n\n\tfor (let i = parseInt(start); i < parseInt(end); i++) {\n\t\tstring += snippet.replace(/\\[\\s*i\\s*\\]/g, \"[ \" + i + \" ]\").replace(/UNROLLED_LOOP_INDEX/g, i)\n\t}\n\n\treturn string\n}\n\n//\n\nexport const splitIntoGroupsOfVector4 = arr => {\n\tconst result = []\n\tfor (let i = 0; i < arr.length; i += 4) {\n\t\tresult.push(new Vector4(...arr.slice(i, i + 4)))\n\t}\n\n\treturn result\n}\n\n// this function generates a Vogel distribution for a given number of samples\n// source: https://www.shadertoy.com/view/4t2SDh\nexport const generateVogelDistribution = (numSamples, scale = 1) => {\n\tconst samples = []\n\tconst goldenAngle = Math.PI * (3 - Math.sqrt(5))\n\n\tfor (let i = 0; i < numSamples; i++) {\n\t\tconst t = i / numSamples\n\t\tconst r = Math.sqrt(t)\n\t\tconst theta = i * goldenAngle\n\n\t\tconst x = r * Math.cos(theta)\n\t\tconst y = r * Math.sin(theta)\n\n\t\tsamples.push({ x, y })\n\t}\n\n\treturn samples\n}\n","/* eslint-disable camelcase */\nimport { GLSL3, Matrix4, NoBlending } from \"three\"\nimport { Vector3 } from \"three\"\nimport { ShaderMaterial, Uniform, Vector2 } from \"three\"\nimport vertexShader from \"../../utils/shader/basic.vert\"\nimport fragmentShader from \"../shader/temporal_reproject.frag\"\nimport reproject from \"../shader/reproject.frag\"\nimport gbuffer_packing from \"../../gbuffer/shader/gbuffer_packing.glsl\"\nimport { unrollLoops } from \"../../ssgi/utils/Utils\"\n\nexport class TemporalReprojectMaterial extends ShaderMaterial {\n\tconstructor(textureCount = 1) {\n\t\tlet finalFragmentShader = fragmentShader\n\t\t\t.replace(\"#include <reproject>\", reproject)\n\t\t\t.replace(\"#include <gbuffer_packing>\", gbuffer_packing)\n\n\t\tlet definitions = \"\"\n\t\tfor (let i = 0; i < textureCount; i++) {\n\t\t\tdefinitions += /* glsl */ `\n\t\t\t\tuniform sampler2D accumulatedTexture${i};\n\n\t\t\t\tlayout(location = ${i}) out vec4 gOutput${i};\n\t\t\t`\n\t\t}\n\n\t\tfinalFragmentShader = definitions + finalFragmentShader.replaceAll(\"textureCount\", textureCount)\n\t\tfinalFragmentShader = unrollLoops(finalFragmentShader)\n\n\t\tconst matches2 = finalFragmentShader.matchAll(/accumulatedTexture\\[\\s*[0-9]+\\s*]/g)\n\n\t\tfor (const [key] of matches2) {\n\t\t\tconst number = key.replace(/[^0-9]/g, \"\")\n\t\t\tfinalFragmentShader = finalFragmentShader.replace(key, \"accumulatedTexture\" + number)\n\t\t}\n\n\t\tconst matches3 = finalFragmentShader.matchAll(/gOutput\\[\\s*[0-9]+\\s*]/g)\n\n\t\tfor (const [key] of matches3) {\n\t\t\tconst number = key.replace(/[^0-9]/g, \"\")\n\t\t\tfinalFragmentShader = finalFragmentShader.replace(key, \"gOutput\" + number)\n\t\t}\n\n\t\tsuper({\n\t\t\ttype: \"TemporalReprojectMaterial\",\n\t\t\tuniforms: {\n\t\t\t\tinputTexture: new Uniform(null),\n\t\t\t\tvelocityTexture: new Uniform(null),\n\t\t\t\tdepthTexture: new Uniform(null),\n\t\t\t\tlastVelocityTexture: new Uniform(null),\n\t\t\t\tneighborhoodClampIntensity: new Uniform(0),\n\t\t\t\tfullAccumulate: new Uniform(false),\n\t\t\t\tkeepData: new Uniform(1),\n\t\t\t\tdelta: new Uniform(0),\n\t\t\t\tinvTexSize: new Uniform(new Vector2()),\n\t\t\t\tprojectionMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprojectionMatrixInverse: new Uniform(new Matrix4()),\n\t\t\t\tcameraMatrixWorld: new Uniform(new Matrix4()),\n\t\t\t\tviewMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprevViewMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprevCameraMatrixWorld: new Uniform(new Matrix4()),\n\t\t\t\tprevProjectionMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprevProjectionMatrixInverse: new Uniform(new Matrix4()),\n\t\t\t\tcameraPos: new Uniform(new Vector3()),\n\t\t\t\tprevCameraPos: new Uniform(new Vector3()),\n\t\t\t\tcameraNear: new Uniform(0),\n\t\t\t\tcameraFar: new Uniform(0),\n\t\t\t\tmaxBlend: new Uniform(0)\n\t\t\t},\n\t\t\tvertexShader,\n\t\t\tfragmentShader: finalFragmentShader,\n\t\t\tblending: NoBlending,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t\ttoneMapped: false,\n\t\t\tglslVersion: GLSL3\n\t\t})\n\n\t\tfor (let i = 0; i < textureCount; i++) {\n\t\t\tthis.uniforms[\"inputTexture\" + i] = new Uniform(null)\n\t\t\tthis.uniforms[\"accumulatedTexture\" + i] = new Uniform(null)\n\t\t}\n\t}\n}\n","export const isGroundProjectedEnv = c => {\n\treturn c.material.fragmentShader?.includes(\n\t\t\"float intersection2 = diskIntersectWithBackFaceCulling( camPos, p, h, vec3( 0.0, 1.0, 0.0 ), radius );\"\n\t)\n}\n\nexport const isChildMaterialRenderable = (c, material = c.material) => {\n\treturn (\n\t\tmaterial.visible &&\n\t\tmaterial.depthWrite &&\n\t\tmaterial.depthTest &&\n\t\t(!material.transparent || material.opacity > 0) &&\n\t\t!isGroundProjectedEnv(c)\n\t)\n}\n\nexport const didCameraMove = (camera, lastCameraPosition, lastCameraQuaternion) => {\n\tif (camera.position.distanceToSquared(lastCameraPosition) > 0.000001) {\n\t\treturn true\n\t}\n\n\tif (camera.quaternion.angleTo(lastCameraQuaternion) > 0.001) {\n\t\treturn true\n\t}\n\n\treturn false\n}\n\nexport const getVisibleChildren = object => {\n\tconst queue = [object]\n\tconst objects = []\n\n\twhile (queue.length !== 0) {\n\t\tconst mesh = queue.shift()\n\t\tif (mesh.material) objects.push(mesh)\n\n\t\tfor (const c of mesh.children) {\n\t\t\tif (c.visible) queue.push(c)\n\t\t}\n\t}\n\n\treturn objects\n}\n","import { Pass } from \"postprocessing\"\nimport {\n\tClock,\n\tFramebufferTexture,\n\tLinearFilter,\n\tMatrix4,\n\tNearestFilter,\n\tQuaternion,\n\tVector2,\n\tVector3,\n\tWebGLRenderTarget\n} from \"three\"\nimport { jitter } from \"../taa/TAAUtils\"\nimport { TemporalReprojectMaterial } from \"./material/TemporalReprojectMaterial\"\nimport { didCameraMove } from \"../utils/SceneUtils\"\n\nexport const defaultTemporalReprojectPassOptions = {\n\tdilation: false,\n\tfullAccumulate: false,\n\tneighborhoodClamp: false,\n\tneighborhoodClampRadius: 1,\n\tneighborhoodClampIntensity: 1,\n\tmaxBlend: 1,\n\tlogTransform: false,\n\tdepthDistance: 2,\n\tworldDistance: 4,\n\treprojectSpecular: false,\n\trenderTarget: null,\n\tcopyTextures: true,\n\tconfidencePower: 0.75,\n\tinputType: \"diffuse\"\n}\n\nconst tmpProjectionMatrix = new Matrix4()\nconst tmpProjectionMatrixInverse = new Matrix4()\nconst tmpVec2 = new Vector2()\n\nexport class TemporalReprojectPass extends Pass {\n\tneedsSwap = false\n\n\toverrideAccumulatedTextures = []\n\tclock = new Clock()\n\tr2Sequence = []\n\tframe = 0\n\tlastCameraTransform = {\n\t\tposition: new Vector3(),\n\t\tquaternion: new Quaternion()\n\t}\n\n\tconstructor(\n\t\tscene,\n\t\tcamera,\n\t\tvelocityDepthNormalPass,\n\t\ttexture,\n\t\ttextureCount,\n\t\toptions = defaultTemporalReprojectPassOptions\n\t) {\n\t\tsuper(\"TemporalReprojectPass\")\n\n\t\tthis._scene = scene\n\t\tthis._camera = camera\n\t\tthis.textureCount = textureCount\n\t\toptions = { ...defaultTemporalReprojectPassOptions, ...options }\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\tcount: textureCount,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: texture.type,\n\t\t\tdepthBuffer: false\n\t\t})\n\n\t\tthis.renderTarget.textures.forEach(\n\t\t\t(texture, index) => (texture.name = \"TemporalReprojectPass.accumulatedTexture\" + index)\n\t\t)\n\n\t\tthis.fullscreenMaterial = new TemporalReprojectMaterial(textureCount)\n\t\tthis.fullscreenMaterial.defines.textureCount = textureCount\n\n\t\tif (options.dilation) this.fullscreenMaterial.defines.dilation = \"\"\n\t\tif (options.neighborhoodClamp) this.fullscreenMaterial.defines.neighborhoodClamp = \"\"\n\t\tif (options.logTransform) this.fullscreenMaterial.defines.logTransform = \"\"\n\t\tif (camera.isPerspectiveCamera) this.fullscreenMaterial.defines.PERSPECTIVE_CAMERA = \"\"\n\t\tthis.fullscreenMaterial.defines.neighborhoodClampRadius = parseInt(options.neighborhoodClampRadius)\n\n\t\tthis.fullscreenMaterial.defines.depthDistance = options.depthDistance.toPrecision(5)\n\t\tthis.fullscreenMaterial.defines.worldDistance = options.worldDistance.toPrecision(5)\n\n\t\tthis.fullscreenMaterial.uniforms.fullAccumulate.value = options.fullAccumulate\n\t\tthis.fullscreenMaterial.uniforms.neighborhoodClampIntensity.value = options.neighborhoodClampIntensity\n\t\tthis.fullscreenMaterial.uniforms.maxBlend.value = options.maxBlend\n\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrix.value = camera.projectionMatrix.clone()\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrixInverse.value = camera.projectionMatrixInverse.clone()\n\t\tthis.fullscreenMaterial.uniforms.cameraMatrixWorld.value = camera.matrixWorld\n\t\tthis.fullscreenMaterial.uniforms.viewMatrix.value = camera.matrixWorldInverse\n\t\tthis.fullscreenMaterial.uniforms.cameraPos.value = camera.position\n\n\t\tthis.fullscreenMaterial.uniforms.prevViewMatrix.value = camera.matrixWorldInverse.clone()\n\t\tthis.fullscreenMaterial.uniforms.prevCameraMatrixWorld.value = camera.matrixWorld.clone()\n\t\tthis.fullscreenMaterial.uniforms.prevProjectionMatrix.value = camera.projectionMatrix.clone()\n\t\tthis.fullscreenMaterial.uniforms.prevProjectionMatrixInverse.value = camera.projectionMatrixInverse.clone()\n\n\t\tthis.fullscreenMaterial.uniforms.velocityTexture.value = velocityDepthNormalPass.renderTarget.texture\n\t\tthis.fullscreenMaterial.uniforms.depthTexture.value = velocityDepthNormalPass.depthTexture\n\n\t\tthis.fullscreenMaterial.defines.inputType =\n\t\t\t[\"diffuseSpecular\", \"diffuse\", \"specular\"].indexOf(options.inputType) ?? 1\n\n\t\tfor (const opt of [\"reprojectSpecular\", \"neighborhoodClamp\"]) {\n\t\t\tlet value = options[opt]\n\n\t\t\tif (typeof value !== \"array\") value = Array(textureCount).fill(value)\n\n\t\t\tthis.fullscreenMaterial.defines[opt] = /* glsl */ `bool[](${value.join(\", \")})`\n\t\t}\n\n\t\tthis.fullscreenMaterial.defines.confidencePower = options.confidencePower.toPrecision(5)\n\n\t\tthis.options = options\n\t\tthis.velocityDepthNormalPass = velocityDepthNormalPass\n\n\t\tthis.fullscreenMaterial.uniforms.inputTexture.value = texture\n\t}\n\n\tsetInputTexture(texture) {\n\t\tthis.fullscreenMaterial.uniforms.inputTexture.value = texture\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.renderTarget.dispose()\n\t\tthis.fullscreenMaterial.dispose()\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width, height)\n\n\t\tthis.fullscreenMaterial.uniforms.invTexSize.value.set(1 / width, 1 / height)\n\n\t\tthis.framebufferTexture?.dispose()\n\n\t\tconst inputTexture = this.fullscreenMaterial.uniforms.inputTexture.value\n\n\t\tthis.framebufferTexture = new FramebufferTexture(width, height, inputTexture.format)\n\t\tthis.framebufferTexture.type = inputTexture.type\n\t\tthis.framebufferTexture.minFilter = LinearFilter\n\t\tthis.framebufferTexture.magFilter = LinearFilter\n\n\t\tthis.framebufferTexture.needsUpdate = true\n\n\t\tfor (let i = 0; i < this.textureCount; i++) {\n\t\t\tconst accumulatedTexture = this.overrideAccumulatedTextures[i] ?? this.framebufferTexture\n\t\t\tthis.fullscreenMaterial.uniforms[\"accumulatedTexture\" + i].value = accumulatedTexture\n\t\t}\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture;\n\t}\n\n\treset() {\n\t\tthis.fullscreenMaterial.uniforms.keepData.value = 0\n\t}\n\n\trender(renderer) {\n\t\tthis.frame = (this.frame + 1) % 4096\n\n\t\tconst delta = Math.min(1 / 10, this.clock.getDelta())\n\t\tthis.fullscreenMaterial.uniforms.delta.value = delta\n\n\t\ttmpProjectionMatrix.copy(this._camera.projectionMatrix)\n\t\ttmpProjectionMatrixInverse.copy(this._camera.projectionMatrixInverse)\n\n\t\tif (this._camera.view) this._camera.view.enabled = false\n\t\tthis._camera.updateProjectionMatrix()\n\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrix.value.copy(this._camera.projectionMatrix)\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrixInverse.value.copy(this._camera.projectionMatrixInverse)\n\t\tthis.fullscreenMaterial.uniforms.lastVelocityTexture.value = this.velocityDepthNormalPass.lastVelocityTexture\n\n\t\tthis.fullscreenMaterial.uniforms.fullAccumulate.value =\n\t\t\tthis.options.fullAccumulate &&\n\t\t\t!didCameraMove(this._camera, this.lastCameraTransform.position, this.lastCameraTransform.quaternion)\n\n\t\tthis.lastCameraTransform.position.copy(this._camera.position)\n\t\tthis.lastCameraTransform.quaternion.copy(this._camera.quaternion)\n\n\t\tif (this._camera.view) this._camera.view.enabled = true\n\t\tthis._camera.projectionMatrix.copy(tmpProjectionMatrix)\n\t\tthis._camera.projectionMatrixInverse.copy(tmpProjectionMatrixInverse)\n\n\t\tthis.fullscreenMaterial.uniforms.cameraNear.value = this._camera.near\n\t\tthis.fullscreenMaterial.uniforms.cameraFar.value = this._camera.far\n\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.render(this.scene, this.camera)\n\n\t\tthis.fullscreenMaterial.uniforms.keepData.value = 1\n\n\t\tif (this.overrideAccumulatedTextures.length === 0) {\n\t\t\tthis.framebufferTexture.needsUpdate = true\n\t\t\trenderer.copyFramebufferToTexture(tmpVec2, this.framebufferTexture)\n\t\t}\n\n\t\t// save last transformations\n\t\tthis.fullscreenMaterial.uniforms.prevCameraMatrixWorld.value.copy(this._camera.matrixWorld)\n\t\tthis.fullscreenMaterial.uniforms.prevViewMatrix.value.copy(this._camera.matrixWorldInverse)\n\n\t\tthis.fullscreenMaterial.uniforms.prevProjectionMatrix.value.copy(\n\t\t\tthis.fullscreenMaterial.uniforms.projectionMatrix.value\n\t\t)\n\t\tthis.fullscreenMaterial.uniforms.prevProjectionMatrixInverse.value.copy(\n\t\t\tthis.fullscreenMaterial.uniforms.projectionMatrixInverse.value\n\t\t)\n\n\t\tthis.fullscreenMaterial.uniforms.prevCameraPos.value.copy(this._camera.position)\n\t}\n\n\tjitter(jitterScale = 1) {\n\t\tthis.unjitter()\n\n\t\tjitter(this.renderTarget.width, this.renderTarget.height, this._camera, this.frame, jitterScale)\n\t}\n\n\tunjitter() {\n\t\tif (this._camera.clearViewOffset) this._camera.clearViewOffset()\n\t}\n}\n","import { Effect } from \"postprocessing\"\nimport { Uniform } from \"three\"\nimport {\n\tTemporalReprojectPass,\n\tdefaultTemporalReprojectPassOptions\n} from \"../temporal-reproject/TemporalReprojectPass.js\"\n// eslint-disable-next-line camelcase\nimport traa_compose from \"./shader/traa_compose.frag\"\n\nexport class TRAAEffect extends Effect {\n\tconstructor(scene, camera, velocityDepthNormalPass, options = defaultTemporalReprojectPassOptions) {\n\t\tsuper(\"TRAAEffect\", traa_compose, {\n\t\t\ttype: \"FinalTRAAEffectMaterial\",\n\t\t\tuniforms: new Map([[\"accumulatedTexture\", new Uniform(null)]])\n\t\t})\n\n\t\tthis._scene = scene\n\t\tthis._camera = camera\n\t\tthis.velocityDepthNormalPass = velocityDepthNormalPass\n\n\t\toptions = {\n\t\t\t...options,\n\t\t\t...{\n\t\t\t\tmaxBlend: 0.9,\n\t\t\t\tneighborhoodClamp: true,\n\t\t\t\tneighborhoodClampIntensity: 1,\n\t\t\t\tneighborhoodClampRadius: 1,\n\t\t\t\tlogTransform: true,\n\t\t\t\tconfidencePower: 4\n\t\t\t}\n\t\t}\n\n\t\tthis.options = { ...defaultTemporalReprojectPassOptions, ...options }\n\n\t\tthis.setSize(options.width, options.height)\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.temporalReprojectPass?.setSize(width, height)\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.temporalReprojectPass.dispose()\n\t}\n\n\treset() {\n\t\tthis.temporalReprojectPass.reset()\n\t}\n\n\tupdate(renderer, inputBuffer) {\n\t\tif (!this.temporalReprojectPass) {\n\t\t\tthis.temporalReprojectPass = new TemporalReprojectPass(\n\t\t\t\tthis._scene,\n\t\t\t\tthis._camera,\n\t\t\t\tthis.velocityDepthNormalPass,\n\t\t\t\tinputBuffer.texture,\n\t\t\t\t1,\n\t\t\t\tthis.options\n\t\t\t)\n\t\t\tthis.temporalReprojectPass.setSize(inputBuffer.width, inputBuffer.height)\n\n\t\t\tthis.uniforms.get(\"accumulatedTexture\").value = this.temporalReprojectPass.texture\n\t\t}\n\n\t\tthis.temporalReprojectPass.setInputTexture(inputBuffer.texture);\n\n\t\tthis.temporalReprojectPass.unjitter()\n\t\tthis.unjitteredProjectionMatrix = this._camera.projectionMatrix.clone()\n\n\t\tthis._camera.projectionMatrix.copy(this.unjitteredProjectionMatrix)\n\n\t\tthis.temporalReprojectPass.jitter()\n\n\t\tthis.temporalReprojectPass.render(renderer)\n\t}\n}\n\nTRAAEffect.DefaultOptions = defaultTemporalReprojectPassOptions\n","import { Pass } from \"postprocessing\"\nimport {\n\tClampToEdgeWrapping,\n\tDataTexture,\n\tEquirectangularReflectionMapping,\n\tFloatType,\n\tLinearMipMapLinearFilter,\n\tNoBlending,\n\tRGBAFormat,\n\tShaderMaterial,\n\tWebGLRenderTarget\n} from \"three\"\nimport basicVertexShader from \"../../utils/shader/basic.vert\"\n\nexport class CubeToEquirectEnvPass extends Pass {\n\tconstructor() {\n\t\tsuper(\"CubeToEquirectEnvPass\")\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, { depthBuffer: false, type: FloatType })\n\n\t\tthis.fullscreenMaterial = new ShaderMaterial({\n\t\t\tfragmentShader: /* glsl */ `\n varying vec2 vUv;\n\t\t\tuniform samplerCube cubeMap;\n\n\t\t\t#define M_PI 3.1415926535897932384626433832795\n\t\t\t\n\t\t\t// source: https://github.com/spite/CubemapToEquirectangular/blob/master/src/CubemapToEquirectangular.js\n void main() {\n\t\t\t\tfloat longitude = vUv.x * 2. * M_PI - M_PI + M_PI / 2.;\n\t\t\t\tfloat latitude = vUv.y * M_PI;\n\n\t\t\t\tvec3 dir = vec3(\n\t\t\t\t\t- sin( longitude ) * sin( latitude ),\n\t\t\t\t\tcos( latitude ),\n\t\t\t\t\t- cos( longitude ) * sin( latitude )\n\t\t\t\t);\n\n\t\t\t\tdir.y = -dir.y;\n\n\t\t\t\tgl_FragColor = textureCube( cubeMap, dir );\n }\n `,\n\t\t\tvertexShader: basicVertexShader,\n\t\t\tuniforms: {\n\t\t\t\tcubeMap: { value: null }\n\t\t\t},\n\t\t\tblending: NoBlending,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t\ttoneMapped: false\n\t\t})\n\t}\n\n\tdispose() {\n\t\tthis.renderTarget.dispose()\n\t}\n\n\tgenerateEquirectEnvMap(renderer, cubeMap, width = null, height = null, maxWidth = 4096) {\n\t\tif (width === null && height === null) {\n\t\t\tconst w = cubeMap.source.data[0].width\n\t\t\tconst widthEquirect = 2 ** Math.ceil(Math.log2(2 * w * 3 ** 0.5))\n\t\t\tconst heightEquirect = 2 ** Math.ceil(Math.log2(w * 3 ** 0.5))\n\n\t\t\twidth = widthEquirect\n\t\t\theight = heightEquirect\n\t\t}\n\n\t\tif (width > maxWidth) {\n\t\t\twidth = maxWidth\n\t\t\theight = maxWidth / 2\n\t\t}\n\n\t\tthis.renderTarget.setSize(width, height)\n\t\tthis.fullscreenMaterial.uniforms.cubeMap.value = cubeMap\n\n\t\tconst { renderTarget } = this\n\n\t\trenderer.setRenderTarget(renderTarget)\n\t\trenderer.render(this.scene, this.camera)\n\n\t\t// Create a new Float32Array to store the pixel data\n\t\tconst pixelBuffer = new Float32Array(width * height * 4)\n\t\trenderer.readRenderTargetPixels(renderTarget, 0, 0, width, height, pixelBuffer)\n\n\t\t// Create a new data texture\n\t\tconst equirectEnvMap = new DataTexture(pixelBuffer, width, height, RGBAFormat, FloatType)\n\n\t\t// Set texture options\n\t\tequirectEnvMap.wrapS = ClampToEdgeWrapping\n\t\tequirectEnvMap.wrapT = ClampToEdgeWrapping\n\t\tequirectEnvMap.minFilter = LinearMipMapLinearFilter\n\t\tequirectEnvMap.magFilter = LinearMipMapLinearFilter\n\t\tequirectEnvMap.needsUpdate = true\n\n\t\tequirectEnvMap.mapping = EquirectangularReflectionMapping\n\n\t\treturn equirectEnvMap\n\t}\n}\n","var img = \"data:image/png;base64,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\";\n export default img;","/* eslint-disable camelcase */\nimport { NearestFilter, NoColorSpace, RepeatWrapping, TextureLoader, Vector2 } from \"three\"\nimport blueNoiseImage from \"./blue_noise_rgba.png\"\nimport blue_noise from \"../utils/shader/blue_noise.glsl\"\n\nconst blueNoiseSize = 128\nconst highestSignedInt = 0x7fffffff\n\nconst blueNoiseTexture = new TextureLoader().load(blueNoiseImage, () => {\n\tblueNoiseTexture.minFilter = NearestFilter\n\tblueNoiseTexture.magFilter = NearestFilter\n\tblueNoiseTexture.wrapS = RepeatWrapping\n\tblueNoiseTexture.wrapT = RepeatWrapping\n\tblueNoiseTexture.colorSpace = NoColorSpace\n})\n\nexport const setupBlueNoise = fragmentShader => {\n\tlet blueNoiseIndex = 0\n\tconst startIndex = Math.floor(Math.random() * highestSignedInt)\n\n\tconst uniforms = {\n\t\tblueNoiseTexture: { value: blueNoiseTexture },\n\t\tblueNoiseSize: { value: new Vector2(blueNoiseSize, blueNoiseSize) },\n\t\tblueNoiseIndex: {\n\t\t\tget value() {\n\t\t\t\tblueNoiseIndex = (startIndex + blueNoiseIndex + 1) % highestSignedInt\n\t\t\t\treturn blueNoiseIndex\n\t\t\t},\n\t\t\tset value(v) {\n\t\t\t\tblueNoiseIndex = v\n\t\t\t}\n\t\t}\n\t}\n\n\tfragmentShader = fragmentShader.replace(\"uniform vec2 resolution;\", \"uniform vec2 resolution;\\n\" + blue_noise)\n\n\treturn { uniforms, fragmentShader }\n}\n\nexport const useBlueNoise = material => {\n\tconst { fragmentShader, uniforms } = setupBlueNoise(material.fragmentShader)\n\tmaterial.fragmentShader = fragmentShader\n\tmaterial.uniforms = { ...material.uniforms, ...uniforms }\n\n\tmaterial.needsUpdate = true\n}\n","/* eslint-disable camelcase */\nimport { MeshPhysicalMaterial, Vector2 } from \"three\"\nimport gbuffer_packing from \"../shader/gbuffer_packing.glsl\"\nimport { setupBlueNoise } from \"../../utils/BlueNoiseUtils\"\n\nclass GBufferMaterial extends MeshPhysicalMaterial {\n\tonBeforeCompile(shader) {\n\t\tthis.uniforms = shader.uniforms\n\n\t\tshader.uniforms.resolution = { value: new Vector2(1, 1) }\n\t\tshader.uniforms.cameraNotMovedFrames = { value: 0 }\n\n\t\t// delete all includes that have the pattern \"#include <lights_something>\"\n\t\tshader.vertexShader = shader.vertexShader.replace(/#include <lights_.*>/g, \"\")\n\t\tshader.fragmentShader = shader.fragmentShader.replace(/#include <lights_.*>/g, \"\")\n\n\t\t// delete all includes that have the pattern \"#include <alpha...>\"\n\t\tshader.vertexShader = shader.vertexShader.replace(/#include <alpha.*>/g, \"\")\n\t\tshader.fragmentShader = shader.fragmentShader.replace(/#include <alpha.*>/g, \"\")\n\n\t\t// delete all includes that have the pattern \"#include <aomap...>\"\n\t\tshader.vertexShader = shader.vertexShader.replace(/#include <aomap.*>/g, \"\")\n\t\tshader.fragmentShader = shader.fragmentShader.replace(/#include <aomap.*>/g, \"\")\n\n\t\t// delete all includes that have the pattern \"#include <lightmap...>\"\n\t\tshader.vertexShader = shader.vertexShader.replace(/#include <lightmap.*>/g, \"\")\n\t\tshader.fragmentShader = shader.fragmentShader.replace(/#include <lightmap.*>/g, \"\")\n\n\t\t// delete all includes that have the pattern \"#include <alphahash...>\"\n\t\tshader.vertexShader = shader.vertexShader.replace(/#include <alphahash.*>/g, \"\")\n\t\tshader.fragmentShader = shader.fragmentShader.replace(/#include <alphahash.*>/g, \"\")\n\n\t\t// delete all includes that have the pattern \"#include <alphatest...>\"\n\t\tshader.vertexShader = shader.vertexShader.replace(/#include <alphatest.*>/g, \"\")\n\t\tshader.fragmentShader = shader.fragmentShader.replace(/#include <alphatest.*>/g, \"\")\n\n\t\t// remove opaque_fragment include\n\t\tshader.fragmentShader = shader.fragmentShader.replace(\"#include <opaque_fragment>\", \"\")\n\n\t\t// remove colorspace_fragment include\n\t\tshader.fragmentShader = shader.fragmentShader.replace(\"#include <colorspace_fragment>\", \"\")\n\n\t\t// delete the fog_fragment include\n\t\tshader.fragmentShader = shader.fragmentShader.replace(\"#include <fog_fragment>\", \"\")\n\n\t\tshader.fragmentShader = shader.fragmentShader\n\t\t\t.replace(\n\t\t\t\t\"void main() {\",\n\t\t\t\t/* glsl */ `\n\t\t\t#define vUv gl_FragCoord.xy\n uniform vec2 resolution;\n uniform float cameraNotMovedFrames;\n\n ${gbuffer_packing}\n\n void main() {\n\t\t\t\t\tfloat a = opacity;\n\n\t\t\t\t\t#ifdef USE_ALPHAMAP\n\t\t\t\t\t\ta *= texture2D( alphaMap, vAlphaMapUv ).g;\n\t\t\t\t\t#endif\n\n\t\t\t\t\tif (cameraNotMovedFrames == 0.) {\n\t\t\t\t\t\tif(a < 0.5) {\n\t\t\t\t\t\t\tdiscard;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ta = 1.;\n\t\t\t\t\t} else if (a != 1.) {\n\t\t\t\t\t\tfloat aStep = a > 0.5 ? 1. : 0.;\n\t\t\t\t\t\ta = mix(a, aStep, (1. / (cameraNotMovedFrames * 0.1 + 1.)));\n\n\t\t\t\t\t\tvec4 noise = blueNoise();\n\t\t\t\t\t\tif (noise.x > a) {\n\t\t\t\t\t\t\tdiscard;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n `\n\t\t\t)\n\t\t\t.replace(\n\t\t\t\t\"#include <dithering_fragment>\",\n\t\t\t\t/* glsl */ `\n #include <dithering_fragment>\n\n vec3 worldNormal = normalize((vec4(normal, 1.) * viewMatrix).xyz);\n\n vec4 gBuffer = packGBuffer(diffuseColor, worldNormal, roughnessFactor, metalnessFactor, totalEmissiveRadiance);\n\n gl_FragColor = gBuffer;`\n\t\t\t)\n\n\t\tconst { uniforms, fragmentShader } = setupBlueNoise(shader.fragmentShader)\n\t\tshader.uniforms = { ...shader.uniforms, ...uniforms }\n\t\tshader.fragmentShader = fragmentShader\n\t}\n}\n\nconst gBufferMaterial = new GBufferMaterial()\n\nexport function createGBufferMaterial(originalMaterial) {\n\tconst material = gBufferMaterial.clone()\n\n\tcopyAllPropsToGBufferMaterial(originalMaterial, material)\n\n\treturn material\n}\n\nlet props = Object.keys(gBufferMaterial)\n\n// delete the ones that start with \"_\"\nprops = props.filter(\n\tkey => !key.startsWith(\"_\") && !key.startsWith(\"is\") && key !== \"uuid\" && key !== \"type\" && key !== \"transparent\"\n)\n\n// this function attempts to copy all the props from the original material to the new GBufferMaterial\nfunction copyAllPropsToGBufferMaterial(originalMaterial, gBufferMaterial) {\n\tfor (const key of props) {\n\t\tif (originalMaterial[key] !== undefined) {\n\t\t\tgBufferMaterial[key] = originalMaterial[key]\n\t\t}\n\t}\n}\n\nconst propsPrimitive = props.filter(\n\tkey => typeof gBufferMaterial[key] === \"string\" || typeof gBufferMaterial[key] === \"number\"\n)\n\nexport function copyPropsToGBufferMaterial(originalMaterial, gBufferMaterial) {\n\tfor (const prop of propsPrimitive) {\n\t\tgBufferMaterial[prop] = originalMaterial[prop]\n\t}\n}\n","import { Pass } from \"postprocessing\"\nimport { Color, DepthTexture, FloatType, NearestFilter, Quaternion, Vector3, WebGLRenderTarget } from \"three\"\nimport { didCameraMove, getVisibleChildren, isChildMaterialRenderable } from \"../utils/SceneUtils.js\"\nimport { copyPropsToGBufferMaterial, createGBufferMaterial } from \"./material/GBufferMaterial.js\"\n\nconst backgroundColor = new Color(0)\n\nexport class GBufferPass extends Pass {\n\tframe = 21483\n\tcachedMaterials = new WeakMap()\n\tvisibleMeshes = []\n\tlastCameraPosition = new Vector3()\n\tlastCameraQuaternion = new Quaternion()\n\n\tconstructor(scene, camera) {\n\t\tsuper(\"GBufferPass\")\n\n\t\tthis._scene = scene\n\t\tthis._camera = camera\n\n\t\tthis.initGBufferRenderTarget()\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture\n\t}\n\n\tget depthTexture() {\n\t\treturn this.renderTarget.depthTexture\n\t}\n\n\tinitGBufferRenderTarget() {\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\ttype: FloatType,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\tdepthBuffer: true\n\t\t})\n\n\t\tthis.renderTarget.texture.name = \"GBufferPass.Texture\"\n\n\t\tthis.renderTarget.depthTexture = new DepthTexture(1, 1)\n\t\tthis.renderTarget.depthTexture.type = FloatType\n\t\tthis.renderTarget.depthTexture.name = \"GBufferPass.DepthTexture\"\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width, height)\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\t\tthis.renderTarget.dispose()\n\t}\n\n\tsetGBufferMaterialInScene() {\n\t\tthis.visibleMeshes = getVisibleChildren(this._scene)\n\n\t\tconst cameraMoved = didCameraMove(this._camera, this.lastCameraPosition, this.lastCameraQuaternion)\n\n\t\tfor (const c of this.visibleMeshes) {\n\t\t\tconst originalMaterial = c.material\n\n\t\t\tlet [cachedOriginalMaterial, gBufferMaterial] = this.cachedMaterials.get(c) || []\n\n\t\t\t// init a new material if the original material changed or if the cached material is missing\n\t\t\tif (originalMaterial !== cachedOriginalMaterial) {\n\t\t\t\tif (gBufferMaterial) gBufferMaterial.dispose()\n\n\t\t\t\tgBufferMaterial = createGBufferMaterial(originalMaterial)\n\n\t\t\t\tthis.cachedMaterials.set(c, [originalMaterial, gBufferMaterial])\n\t\t\t}\n\n\t\t\t// gBufferMaterial.uniforms.resolution.value.set(this.renderTarget.width, this.renderTarget.height)\n\t\t\t// gBufferMaterial.uniforms.frame.value = this.frame\n\n\t\t\tif (gBufferMaterial.uniforms) {\n\t\t\t\tgBufferMaterial.uniforms.cameraNotMovedFrames.value = cameraMoved\n\t\t\t\t\t? 0\n\t\t\t\t\t: (gBufferMaterial.uniforms.cameraNotMovedFrames.value + 1) % 0xffff\n\t\t\t}\n\n\t\t\tc.visible = isChildMaterialRenderable(c, originalMaterial)\n\n\t\t\tcopyPropsToGBufferMaterial(originalMaterial, gBufferMaterial)\n\n\t\t\tc.material = gBufferMaterial\n\t\t}\n\t}\n\n\tunsetGBufferMaterialInScene() {\n\t\tfor (const c of this.visibleMeshes) {\n\t\t\tconst [originalMaterial] = this.cachedMaterials.get(c)\n\n\t\t\tc.material = originalMaterial\n\t\t}\n\t}\n\n\trender(renderer) {\n\t\tthis.frame = (this.frame + 1) % 4096\n\n\t\tconst { background } = this._scene\n\n\t\tthis._scene.background = backgroundColor\n\n\t\tthis.setGBufferMaterialInScene()\n\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.render(this._scene, this._camera)\n\n\t\tthis.unsetGBufferMaterialInScene()\n\n\t\t// reset state\n\t\tthis.lastCameraPosition.copy(this._camera.position)\n\t\tthis.lastCameraQuaternion.copy(this._camera.quaternion)\n\n\t\tthis._scene.background = background\n\t}\n}\n","// source: https://github.com/gkjohnson/three-gpu-pathtracer/blob/main/src/uniforms/EquirectHdrInfoUniform.js\n\nimport { DataTexture, FloatType, NearestFilter, RGBAFormat, RedFormat, RepeatWrapping, Vector2 } from \"three\"\n\nconst workerOnMessage = ({ data: { width, height, isFloatType, flipY, data } }) => {\n\t// from: https://github.com/mrdoob/three.js/blob/dev/src/extras/DataUtils.js\n\n\t// importing modules doesn't seem to work for workers that were generated through createObjectURL() for some reason\n\n\tconst _tables = /* @__PURE__*/ _generateTables()\n\n\tfunction _generateTables() {\n\t\t// float32 to float16 helpers\n\n\t\tconst buffer = new ArrayBuffer(4)\n\t\tconst floatView = new Float32Array(buffer)\n\t\tconst uint32View = new Uint32Array(buffer)\n\n\t\tconst baseTable = new Uint32Array(512)\n\t\tconst shiftTable = new Uint32Array(512)\n\n\t\tfor (let i = 0; i < 256; ++i) {\n\t\t\tconst e = i - 127\n\n\t\t\t// very small number (0, -0)\n\n\t\t\tif (e < -27) {\n\t\t\t\tbaseTable[i] = 0x0000\n\t\t\t\tbaseTable[i | 0x100] = 0x8000\n\t\t\t\tshiftTable[i] = 24\n\t\t\t\tshiftTable[i | 0x100] = 24\n\n\t\t\t\t// small number (denorm)\n\t\t\t} else if (e < -14) {\n\t\t\t\tbaseTable[i] = 0x0400 >> (-e - 14)\n\t\t\t\tbaseTable[i | 0x100] = (0x0400 >> (-e - 14)) | 0x8000\n\t\t\t\tshiftTable[i] = -e - 1\n\t\t\t\tshiftTable[i | 0x100] = -e - 1\n\n\t\t\t\t// normal number\n\t\t\t} else if (e <= 15) {\n\t\t\t\tbaseTable[i] = (e + 15) << 10\n\t\t\t\tbaseTable[i | 0x100] = ((e + 15) << 10) | 0x8000\n\t\t\t\tshiftTable[i] = 13\n\t\t\t\tshiftTable[i | 0x100] = 13\n\n\t\t\t\t// large number (Infinity, -Infinity)\n\t\t\t} else if (e < 128) {\n\t\t\t\tbaseTable[i] = 0x7c00\n\t\t\t\tbaseTable[i | 0x100] = 0xfc00\n\t\t\t\tshiftTable[i] = 24\n\t\t\t\tshiftTable[i | 0x100] = 24\n\n\t\t\t\t// stay (NaN, Infinity, -Infinity)\n\t\t\t} else {\n\t\t\t\tbaseTable[i] = 0x7c00\n\t\t\t\tbaseTable[i | 0x100] = 0xfc00\n\t\t\t\tshiftTable[i] = 13\n\t\t\t\tshiftTable[i | 0x100] = 13\n\t\t\t}\n\t\t}\n\n\t\t// float16 to float32 helpers\n\n\t\tconst mantissaTable = new Uint32Array(2048)\n\t\tconst exponentTable = new Uint32Array(64)\n\t\tconst offsetTable = new Uint32Array(64)\n\n\t\tfor (let i = 1; i < 1024; ++i) {\n\t\t\tlet m = i << 13 // zero pad mantissa bits\n\t\t\tlet e = 0 // zero exponent\n\n\t\t\t// normalized\n\t\t\twhile ((m & 0x00800000) === 0) {\n\t\t\t\tm <<= 1\n\t\t\t\te -= 0x00800000 // decrement exponent\n\t\t\t}\n\n\t\t\tm &= ~0x00800000 // clear leading 1 bit\n\t\t\te += 0x38800000 // adjust bias\n\n\t\t\tmantissaTable[i] = m | e\n\t\t}\n\n\t\tfor (let i = 1024; i < 2048; ++i) {\n\t\t\tmantissaTable[i] = 0x38000000 + ((i - 1024) << 13)\n\t\t}\n\n\t\tfor (let i = 1; i < 31; ++i) {\n\t\t\texponentTable[i] = i << 23\n\t\t}\n\n\t\texponentTable[31] = 0x47800000\n\t\texponentTable[32] = 0x80000000\n\n\t\tfor (let i = 33; i < 63; ++i) {\n\t\t\texponentTable[i] = 0x80000000 + ((i - 32) << 23)\n\t\t}\n\n\t\texponentTable[63] = 0xc7800000\n\n\t\tfor (let i = 1; i < 64; ++i) {\n\t\t\tif (i !== 32) {\n\t\t\t\toffsetTable[i] = 1024\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tfloatView: floatView,\n\t\t\tuint32View: uint32View,\n\t\t\tbaseTable: baseTable,\n\t\t\tshiftTable: shiftTable,\n\t\t\tmantissaTable: mantissaTable,\n\t\t\texponentTable: exponentTable,\n\t\t\toffsetTable: offsetTable\n\t\t}\n\t}\n\n\tfunction fromHalfFloat(val) {\n\t\tconst m = val >> 10\n\t\t_tables.uint32View[0] = _tables.mantissaTable[_tables.offsetTable[m] + (val & 0x3ff)] + _tables.exponentTable[m]\n\t\treturn _tables.floatView[0]\n\t}\n\n\tfunction colorToLuminance(r, g, b) {\n\t\t// https://en.wikipedia.org/wiki/Relative_luminance\n\t\treturn 0.2126 * r + 0.7152 * g + 0.0722 * b\n\t}\n\n\tconst binarySearchFindClosestIndexOf = (array, targetValue, offset = 0, count = array.length) => {\n\t\tlet lower = offset\n\t\tlet upper = offset + count - 1\n\n\t\twhile (lower < upper) {\n\t\t\tconst mid = (lower + upper) >> 1\n\n\t\t\t// check if the middle array value is above or below the target and shift\n\t\t\t// which half of the array we're looking at\n\t\t\tif (array[mid] < targetValue) {\n\t\t\t\tlower = mid + 1\n\t\t\t} else {\n\t\t\t\tupper = mid\n\t\t\t}\n\t\t}\n\n\t\treturn lower - offset\n\t}\n\n\tconst gatherData = (data, width, height, flipY, marginalDataArray, conditionalDataArray) => {\n\t\t// \"conditional\" = \"pixel relative to row pixels sum\"\n\t\t// \"marginal\" = \"row relative to row sum\"\n\n\t\t// remove any y flipping for cdf computation\n\t\tif (flipY) {\n\t\t\tfor (let y = 0, h = height - 1; y <= h; y++) {\n\t\t\t\tfor (let x = 0, w = width * 4; x < w; x += 4) {\n\t\t\t\t\tconst newY = h - y\n\t\t\t\t\tconst ogIndex = y * w + x\n\t\t\t\t\tconst newIndex = newY * w + x\n\t\t\t\t\tdata[newIndex] = data[ogIndex]\n\t\t\t\t\tdata[newIndex + 1] = data[ogIndex + 1]\n\t\t\t\t\tdata[newIndex + 2] = data[ogIndex + 2]\n\t\t\t\t\tdata[newIndex + 3] = data[ogIndex + 3]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// track the importance of any given pixel in the image by tracking its weight relative to other pixels in the image\n\t\tconst pdfConditional = new Float32Array(width * height)\n\t\tconst cdfConditional = new Float32Array(width * height)\n\n\t\tconst pdfMarginal = new Float32Array(height)\n\t\tconst cdfMarginal = new Float32Array(height)\n\n\t\tlet totalSumValue = 0.0\n\t\tlet cumulativeWeightMarginal = 0.0\n\t\tfor (let y = 0; y < height; y++) {\n\t\t\tlet cumulativeRowWeight = 0.0\n\t\t\tfor (let x = 0; x < width; x++) {\n\t\t\t\tconst i = y * width + x\n\t\t\t\tconst r = data[4 * i + 0]\n\t\t\t\tconst g = data[4 * i + 1]\n\t\t\t\tconst b = data[4 * i + 2]\n\n\t\t\t\t// the probability of the pixel being selected in this row is the\n\t\t\t\t// scale of the luminance relative to the rest of the pixels.\n\t\t\t\t// TODO: this should also account for the solid angle of the pixel when sampling\n\t\t\t\tconst weight = colorToLuminance(r, g, b)\n\t\t\t\tcumulativeRowWeight += weight\n\t\t\t\ttotalSumValue += weight\n\n\t\t\t\tpdfConditional[i] = weight\n\t\t\t\tcdfConditional[i] = cumulativeRowWeight\n\t\t\t}\n\n\t\t\t// can happen if the row is all black\n\t\t\tif (cumulativeRowWeight !== 0) {\n\t\t\t\t// scale the pdf and cdf to [0.0, 1.0]\n\t\t\t\tfor (let i = y * width, l = y * width + width; i < l; i++) {\n\t\t\t\t\tpdfConditional[i] /= cumulativeRowWeight\n\t\t\t\t\tcdfConditional[i] /= cumulativeRowWeight\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcumulativeWeightMarginal += cumulativeRowWeight\n\n\t\t\t// compute the marginal pdf and cdf along the height of the map.\n\t\t\tpdfMarginal[y] = cumulativeRowWeight\n\t\t\tcdfMarginal[y] = cumulativeWeightMarginal\n\t\t}\n\n\t\t// can happen if the texture is all black\n\t\tif (cumulativeWeightMarginal !== 0) {\n\t\t\t// scale the marginal pdf and cdf to [0.0, 1.0]\n\t\t\tfor (let i = 0, l = pdfMarginal.length; i < l; i++) {\n\t\t\t\tpdfMarginal[i] /= cumulativeWeightMarginal\n\t\t\t\tcdfMarginal[i] /= cumulativeWeightMarginal\n\t\t\t}\n\t\t}\n\n\t\t// compute a sorted index of distributions and the probabilities along them for both\n\t\t// the marginal and conditional data. These will be used to sample with a random number\n\t\t// to retrieve a uv value to sample in the environment map.\n\t\t// These values continually increase so it's okay to interpolate between them.\n\n\t\t// we add a half texel offset so we're sampling the center of the pixel\n\t\tfor (let i = 0; i < height; i++) {\n\t\t\tconst dist = (i + 1) / height\n\t\t\tconst row = binarySearchFindClosestIndexOf(cdfMarginal, dist)\n\n\t\t\tmarginalDataArray[i] = (row + 0.5) / height\n\t\t}\n\n\t\tfor (let y = 0; y < height; y++) {\n\t\t\tfor (let x = 0; x < width; x++) {\n\t\t\t\tconst i = y * width + x\n\t\t\t\tconst dist = (x + 1) / width\n\t\t\t\tconst col = binarySearchFindClosestIndexOf(cdfConditional, dist, y * width, width)\n\n\t\t\t\tconditionalDataArray[i] = (col + 0.5) / width\n\t\t\t}\n\t\t}\n\n\t\treturn totalSumValue\n\t}\n\n\tif (!isFloatType) {\n\t\tconst newData = new Float32Array(data.length)\n\n\t\t// eslint-disable-next-line guard-for-in\n\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\tnewData[i] = fromHalfFloat(data[i])\n\t\t}\n\n\t\tdata = newData\n\t}\n\n\tconst marginalDataArray = new Float32Array(height)\n\tconst conditionalDataArray = new Float32Array(width * height)\n\n\tconst totalSumValue = gatherData(data, width, height, flipY, marginalDataArray, conditionalDataArray)\n\n\tpostMessage({ totalSumValue, marginalDataArray, conditionalDataArray })\n}\n\nconst blob = new Blob([\"onmessage = \" + workerOnMessage], { type: \"application/javascript\" })\nconst workerUrl = URL.createObjectURL(blob)\n\nexport class EquirectHdrInfoUniform {\n\tconstructor() {\n\t\t// we use NearestFilter instead of LinearFilter because on many recent Apple devices filtering from such a texture does not work\n\n\t\t// Default to a white texture and associated weights so we don't\n\t\t// just render black initially.\n\t\tconst whiteTex = new DataTexture(new Float32Array([1, 1, 1, 1]), 1, 1)\n\t\twhiteTex.type = FloatType\n\t\twhiteTex.format = RGBAFormat\n\t\twhiteTex.minFilter = NearestFilter\n\t\twhiteTex.magFilter = NearestFilter\n\t\twhiteTex.wrapS = RepeatWrapping\n\t\twhiteTex.wrapT = RepeatWrapping\n\t\twhiteTex.generateMipmaps = false\n\t\twhiteTex.needsUpdate = true\n\n\t\t// Stores a map of [0, 1] value -> cumulative importance row & pdf\n\t\t// used to sampling a random value to a relevant row to sample from\n\t\tconst marginalWeights = new DataTexture(new Float32Array([0, 1]), 1, 2)\n\t\tmarginalWeights.type = FloatType\n\t\tmarginalWeights.format = RedFormat\n\t\tmarginalWeights.minFilter = NearestFilter\n\t\tmarginalWeights.magFilter = NearestFilter\n\t\tmarginalWeights.generateMipmaps = false\n\t\tmarginalWeights.needsUpdate = true\n\n\t\t// Stores a map of [0, 1] value -> cumulative importance column & pdf\n\t\t// used to sampling a random value to a relevant pixel to sample from\n\t\tconst conditionalWeights = new DataTexture(new Float32Array([0, 0, 1, 1]), 2, 2)\n\t\tconditionalWeights.type = FloatType\n\t\tconditionalWeights.format = RedFormat\n\t\tconditionalWeights.minFilter = NearestFilter\n\t\tconditionalWeights.magFilter = NearestFilter\n\t\tconditionalWeights.generateMipmaps = false\n\t\tconditionalWeights.needsUpdate = true\n\n\t\tthis.map = whiteTex\n\t\tthis.marginalWeights = marginalWeights\n\t\tthis.conditionalWeights = conditionalWeights\n\n\t\t// the total sum value is separated into two values to work around low precision\n\t\t// storage of floating values in structs\n\t\tthis.totalSumWhole = 1\n\t\tthis.totalSumDecimal = 0\n\n\t\tthis.size = new Vector2()\n\t}\n\n\tdispose() {\n\t\tthis.marginalWeights.dispose()\n\t\tthis.conditionalWeights.dispose()\n\t\tthis.map.dispose()\n\t}\n\n\tupdateFrom(map) {\n\t\tmap = map.clone()\n\t\tconst { width, height, data } = map.image\n\t\tconst { type } = map\n\n\t\tthis.size.set(width, height)\n\n\t\treturn new Promise(resolve => {\n\t\t\tthis.worker?.terminate()\n\n\t\t\tthis.worker = new Worker(workerUrl)\n\n\t\t\tthis.worker.postMessage({ width, height, isFloatType: type === FloatType, flipY: map.flipY, data })\n\t\t\tthis.worker.onmessage = ({ data: { totalSumValue, marginalDataArray, conditionalDataArray } }) => {\n\t\t\t\tthis.dispose()\n\n\t\t\t\tconst { marginalWeights, conditionalWeights } = this\n\t\t\t\tmarginalWeights.image = { width: height, height: 1, data: marginalDataArray }\n\t\t\t\tmarginalWeights.needsUpdate = true\n\n\t\t\t\tconditionalWeights.image = { width, height, data: conditionalDataArray }\n\t\t\t\tconditionalWeights.needsUpdate = true\n\n\t\t\t\tconst totalSumWhole = ~~totalSumValue\n\t\t\t\tconst totalSumDecimal = totalSumValue - totalSumWhole\n\t\t\t\tthis.totalSumWhole = totalSumWhole\n\t\t\t\tthis.totalSumDecimal = totalSumDecimal\n\n\t\t\t\tthis.map = map\n\n\t\t\t\tthis.worker = null\n\n\t\t\t\tresolve(map)\n\t\t\t}\n\t\t})\n\t}\n}\n","/* eslint-disable camelcase */\nimport { Color, Matrix4, NoBlending, ShaderMaterial, Uniform, Vector2, Vector3 } from \"three\"\nimport vertexShader from \"../../utils/shader/basic.vert\"\nimport fragmentShader from \"../shader/ssgi.frag\"\nimport ssgi_utils from \"../shader/ssgi_utils.frag\"\nimport { useBlueNoise } from \"../../utils/BlueNoiseUtils\"\nimport gbuffer_packing from \"../../gbuffer/shader/gbuffer_packing.glsl\"\nimport { EquirectHdrInfoUniform } from \"../utils/EquirectHdrInfoUniform\"\n\nexport class SSGIMaterial extends ShaderMaterial {\n\tconstructor() {\n\t\tsuper({\n\t\t\ttype: \"SSGIMaterial\",\n\n\t\t\tuniforms: {\n\t\t\t\taccumulatedTexture: new Uniform(null),\n\t\t\t\tgBufferTexture: new Uniform(null),\n\t\t\t\tdepthTexture: new Uniform(null),\n\t\t\t\tvelocityTexture: new Uniform(null),\n\t\t\t\tdirectLightTexture: new Uniform(null),\n\t\t\t\tblueNoiseTexture: new Uniform(null),\n\t\t\t\tprojectionMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprojectionMatrixInverse: new Uniform(new Matrix4()),\n\t\t\t\tcameraMatrixWorld: new Uniform(new Matrix4()),\n\t\t\t\tviewMatrix: new Uniform(new Matrix4()),\n\t\t\t\tcameraNear: new Uniform(0),\n\t\t\t\tcameraFar: new Uniform(0),\n\t\t\t\tnearMulFar: new Uniform(0),\n\t\t\t\tnearMinusFar: new Uniform(0),\n\t\t\t\tfarMinusNear: new Uniform(0),\n\t\t\t\trayDistance: new Uniform(0),\n\t\t\t\tthickness: new Uniform(0),\n\t\t\t\tframe: new Uniform(0),\n\t\t\t\tenvBlur: new Uniform(0),\n\t\t\t\tmaxEnvMapMipLevel: new Uniform(0),\n\t\t\t\tenvMapInfo: { value: new EquirectHdrInfoUniform() },\n\t\t\t\tenvMapPosition: new Uniform(new Vector3()),\n\t\t\t\tenvMapSize: new Uniform(new Vector3()),\n\t\t\t\tbackgroundColor: new Uniform(new Color()),\n\t\t\t\tresolution: new Uniform(new Vector2()),\n\t\t\t\tblueNoiseRepeat: new Uniform(new Vector2())\n\t\t\t},\n\n\t\t\tdefines: {\n\t\t\t\tsteps: 20,\n\t\t\t\trefineSteps: 5,\n\t\t\t\tCUBEUV_TEXEL_WIDTH: 0,\n\t\t\t\tCUBEUV_TEXEL_HEIGHT: 0,\n\t\t\t\tCUBEUV_MAX_MIP: 0,\n\t\t\t\tvWorldPosition: \"worldPos\"\n\t\t\t},\n\n\t\t\tfragmentShader: fragmentShader\n\t\t\t\t.replace(\"#include <ssgi_utils>\", ssgi_utils)\n\t\t\t\t.replace(\"#include <gbuffer_packing>\", gbuffer_packing),\n\t\t\tvertexShader,\n\n\t\t\tblending: NoBlending,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t\ttoneMapped: false\n\t\t})\n\n\t\tuseBlueNoise(this)\n\t}\n}\n","import { Pass } from \"postprocessing\"\nimport { Color, FloatType, NearestFilter, WebGLRenderTarget } from \"three\"\nimport { GBufferPass } from \"../../gbuffer/GBufferPass.js\"\nimport { SSGIMaterial } from \"../material/SSGIMaterial.js\"\n\nconst blackColor = new Color(0)\nexport class SSGIPass extends Pass {\n\tdefaultFragmentShader = \"\"\n\tframe = 21483\n\n\tconstructor(ssgiEffect, options) {\n\t\tsuper(\"SSGIPass\")\n\n\t\tthis.ssgiEffect = ssgiEffect\n\t\tthis._scene = ssgiEffect._scene\n\t\tthis._camera = ssgiEffect._camera\n\n\t\tthis.fullscreenMaterial = new SSGIMaterial()\n\t\tthis.defaultFragmentShader = this.fullscreenMaterial.fragmentShader\n\n\t\t// const { mode } = options\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\ttype: FloatType,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\tdepthBuffer: false\n\t\t})\n\n\t\tthis.renderTarget.texture.name = \"SSGIPass.Texture\"\n\n\t\t// set up basic uniforms that we don't have to update\n\t\tthis.fullscreenMaterial.uniforms.cameraMatrixWorld.value = this._camera.matrixWorld\n\t\tthis.fullscreenMaterial.uniforms.viewMatrix.value = this._camera.matrixWorldInverse\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrix.value = this._camera.projectionMatrix\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrixInverse.value = this._camera.projectionMatrixInverse\n\n\t\tif (ssgiEffect._camera.isPerspectiveCamera) this.fullscreenMaterial.defines.PERSPECTIVE_CAMERA = \"\"\n\n\t\tthis.fullscreenMaterial.defines.mode = [\"ssgi\", \"ssr\"].indexOf(options.mode)\n\n\t\tthis.gBufferPass = new GBufferPass(this._scene, this._camera)\n\n\t\tthis.fullscreenMaterial.uniforms.gBufferTexture.value = this.gBufferPass.texture\n\t\tthis.fullscreenMaterial.uniforms.depthTexture.value = this.gBufferPass.depthTexture\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width * this.ssgiEffect.resolutionScale, height * this.ssgiEffect.resolutionScale)\n\t\tthis.gBufferPass.setSize(width, height)\n\n\t\tthis.fullscreenMaterial.uniforms.resolution.value.set(this.renderTarget.width, this.renderTarget.height)\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.renderTarget.dispose()\n\t\tthis.renderTarget.dispose()\n\n\t\tthis.fullscreenMaterial.dispose()\n\t}\n\n\trender(renderer) {\n\t\tthis.frame = (this.frame + 1) % 4096\n\n\t\tconst { mask } = this._camera.layers\n\t\tconst hasSelection = this.ssgiEffect.selection.size > 0\n\n\t\tthis._camera.layers.set(hasSelection ? this.ssgiEffect.selection.layer : 0)\n\n\t\t// render G-Buffers\n\t\tthis.gBufferPass.render(renderer)\n\n\t\tthis._camera.layers.mask = mask\n\n\t\t// update uniforms\n\t\tthis.fullscreenMaterial.uniforms.frame.value = this.frame\n\t\tthis.fullscreenMaterial.uniforms.cameraNear.value = this._camera.near\n\t\tthis.fullscreenMaterial.uniforms.cameraFar.value = this._camera.far\n\t\tthis.fullscreenMaterial.uniforms.nearMinusFar.value = this._camera.near - this._camera.far\n\t\tthis.fullscreenMaterial.uniforms.farMinusNear.value = this._camera.far - this._camera.near\n\t\tthis.fullscreenMaterial.uniforms.nearMulFar.value = this._camera.near * this._camera.far\n\t\tthis.fullscreenMaterial.uniforms.accumulatedTexture.value = this.ssgiEffect.denoiser.texture\n\t\tthis.fullscreenMaterial.uniforms.velocityTexture.value = this.ssgiEffect.velocityTexture\n\t\tconst bgColor = this._scene.background instanceof Color ? this._scene.background : blackColor\n\t\tthis.fullscreenMaterial.uniforms.backgroundColor.value.copy(bgColor)\n\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.render(this.scene, this.camera)\n\t}\n}\n","// this shader is from: https://github.com/gkjohnson/threejs-sandbox\n/* eslint-disable camelcase */\n\nimport { Matrix3, Matrix4, ShaderChunk, ShaderMaterial, UniformsUtils, Vector2 } from \"three\"\n\n// Modified ShaderChunk.skinning_pars_vertex to handle\n// a second set of bone information from the previous frame\nconst prev_skinning_pars_vertex = /* glsl */ `\n\t\t#ifdef USE_SKINNING\n\t\t#ifdef BONE_TEXTURE\n\t\t\tuniform sampler2D prevBoneTexture;\n\t\t\tmat4 getPrevBoneMatrix( const in float i ) {\n\t\t\t\tfloat j = i * 4.0;\n\t\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\t\ty = dy * ( y + 0.5 );\n\t\t\t\tvec4 v1 = textureLod( prevBoneTexture, vec2( dx * ( x + 0.5 ), y ), 0. );\n\t\t\t\tvec4 v2 = textureLod( prevBoneTexture, vec2( dx * ( x + 1.5 ), y ), 0. );\n\t\t\t\tvec4 v3 = textureLod( prevBoneTexture, vec2( dx * ( x + 2.5 ), y ), 0. );\n\t\t\t\tvec4 v4 = textureLod( prevBoneTexture, vec2( dx * ( x + 3.5 ), y ), 0. );\n\t\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\t\treturn bone;\n\t\t\t}\n\t\t#else\n\t\t\tuniform mat4 prevBoneMatrices[ MAX_BONES ];\n\t\t\tmat4 getPrevBoneMatrix( const in float i ) {\n\t\t\t\tmat4 bone = prevBoneMatrices[ int(i) ];\n\t\t\t\treturn bone;\n\t\t\t}\n\t\t#endif\n\t\t#endif\n`\n\nexport const velocity_vertex_pars = /* glsl */ `\n#define MAX_BONES 64\n \n${ShaderChunk.skinning_pars_vertex}\n${prev_skinning_pars_vertex}\n\nuniform mat4 velocityMatrix;\nuniform mat4 prevVelocityMatrix;\nvarying vec4 prevPosition;\nvarying vec4 newPosition;\n\nvarying vec2 vHighPrecisionZW;\n`\n\n// Returns the body of the vertex shader for the velocity buffer\nexport const velocity_vertex_main = /* glsl */ `\n// Get the current vertex position\ntransformed = vec3( position );\n${ShaderChunk.skinning_vertex}\nnewPosition = velocityMatrix * vec4( transformed, 1.0 );\n\n// Get the previous vertex position\ntransformed = vec3( position );\n${ShaderChunk.skinbase_vertex.replace(/mat4 /g, \"\").replace(/getBoneMatrix/g, \"getPrevBoneMatrix\")}\n${ShaderChunk.skinning_vertex.replace(/vec4 /g, \"\")}\nprevPosition = prevVelocityMatrix * vec4( transformed, 1.0 );\n\ngl_Position = newPosition;\n\nvHighPrecisionZW = gl_Position.zw;\n`\n\nexport const velocity_fragment_pars = /* glsl */ `\nvarying vec4 prevPosition;\nvarying vec4 newPosition;\n\nvarying vec2 vHighPrecisionZW;\n`\n\nexport const velocity_fragment_main = /* glsl */ `\nvec2 pos0 = (prevPosition.xy / prevPosition.w) * 0.5 + 0.5;\nvec2 pos1 = (newPosition.xy / newPosition.w) * 0.5 + 0.5;\n\nvec2 vel = pos1 - pos0;\n\nfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\ngl_FragColor = vec4(vel.x, vel.y, 0., 0.);\n`\n\nexport const velocity_uniforms = {\n\tprevVelocityMatrix: { value: new Matrix4() },\n\tvelocityMatrix: { value: new Matrix4() },\n\tprevBoneTexture: { value: null },\n\tboneTexture: { value: null },\n\tnormalMap: { value: null },\n\tnormalScale: { value: new Vector2(1, 1) },\n\tuvTransform: { value: new Matrix3() }\n}\n\nexport class VelocityDepthNormalMaterial extends ShaderMaterial {\n\tconstructor(camera) {\n\t\tsuper({\n\t\t\tuniforms: {\n\t\t\t\t...UniformsUtils.clone(velocity_uniforms),\n\t\t\t\t...{\n\t\t\t\t\tcameraMatrixWorld: { value: camera.matrixWorld }\n\t\t\t\t}\n\t\t\t},\n\t\t\tvertexShader: /* glsl */ `\n\t\t\t\t\t#include <common>\n\t\t\t\t\t#include <uv_pars_vertex>\n\t\t\t\t\t#include <displacementmap_pars_vertex>\n\t\t\t\t\t#include <normal_pars_vertex>\n\t\t\t\t\t#include <morphtarget_pars_vertex>\n\t\t\t\t\t#include <logdepthbuf_pars_vertex>\n\t\t\t\t\t#include <clipping_planes_pars_vertex>\n\n\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t\tvarying vec3 vViewPosition;\n\t\t\t\t\t\n ${velocity_vertex_pars}\n \n void main() {\n\t\t\t\t\t\tvec3 transformed;\n\n\t\t\t\t\t\t#include <uv_vertex>\n\n\t\t\t\t\t\t#include <skinbase_vertex>\n\t\t\t\t\t\t#include <beginnormal_vertex>\n\t\t\t\t\t\t#include <skinnormal_vertex>\n\t\t\t\t\t\t#include <defaultnormal_vertex>\n\n\t\t\t\t\t\t#include <morphnormal_vertex>\n\t\t\t\t\t\t#include <normal_vertex>\n\t\t\t\t\t\t#include <morphtarget_vertex>\n\t\t\t\t\t\t#include <displacementmap_vertex>\n\t\t\t\t\t\t#include <project_vertex>\n\t\t\t\t\t\t#include <logdepthbuf_vertex>\n\t\t\t\t\t\t#include <clipping_planes_vertex>\n\n\t\t\t\t\t\t${velocity_vertex_main}\n\n\t\t\t\t\t\tvViewPosition = - mvPosition.xyz;\n\n\t\t\t\t\t\tvUv = uv;\n\n }`,\n\t\t\tfragmentShader: /* glsl */ `\n\t\t\t\t\tprecision highp float;\n\t\t\t\t\tuniform mat4 cameraMatrixWorld;\n\n\t\t\t\t\tvarying vec3 vViewPosition;\n\n\t\t\t\t\t${velocity_fragment_pars}\n\t\t\t\t\t#include <packing>\n\n\t\t\t\t\t#include <uv_pars_fragment>\n\t\t\t\t\t#include <normal_pars_fragment>\n\t\t\t\t\t#include <normalmap_pars_fragment>\n\n\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t\t// source: https://knarkowicz.wordpress.com/2014/04/16/octahedron-normal-vector-encoding/\n\t\t\t\t\tvec2 OctWrap( vec2 v ) {\n\t\t\t\t\t\tvec2 w = 1.0 - abs( v.yx );\n\t\t\t\t\t\tif (v.x < 0.0) w.x = -w.x;\n\t\t\t\t\t\tif (v.y < 0.0) w.y = -w.y;\n\t\t\t\t\t\treturn w;\n\t\t\t\t\t}\n\n\t\t\t\t\tvec2 encodeOctWrap(vec3 n) {\n\t\t\t\t\t\tn /= (abs(n.x) + abs(n.y) + abs(n.z));\n\t\t\t\t\t\tn.xy = n.z > 0.0 ? n.xy : OctWrap(n.xy);\n\t\t\t\t\t\tn.xy = n.xy * 0.5 + 0.5;\n\t\t\t\t\t\treturn n.xy;\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat packNormal(vec3 normal) {\n\t\t\t\t\t\treturn uintBitsToFloat(packHalf2x16(encodeOctWrap(normal)));\n\t\t\t\t\t}\n\n void main() {\n\t\t\t\t\t\t#define vNormalMapUv vUv\n\n\t\t\t\t\t\t#include <normal_fragment_begin>\n \t#include <normal_fragment_maps>\n\n\t\t\t\t\t\t${velocity_fragment_main}\n\t\t\t\t\t\tvec3 worldNormal = normalize((cameraMatrixWorld * vec4(normal, 0.)).xyz);\n\t\t\t\t\t\tgl_FragColor.b = packNormal(worldNormal);\n\t\t\t\t\t\tgl_FragColor.a = fragCoordZ;\n }`\n\t\t})\n\t}\n}\n","const materialProps = [\n\t\"vertexTangent\",\n\t\"vertexColors\",\n\t\"vertexAlphas\",\n\t\"vertexUvs\",\n\t\"uvsVertexOnly\",\n\t\"supportsVertexTextures\",\n\t\"instancing\",\n\t\"instancingColor\",\n\t\"side\",\n\t\"flatShading\",\n\t\"skinning\",\n\t\"doubleSided\",\n\t\"flipSided\"\n]\n\nexport const copyNecessaryProps = (originalMaterial, newMaterial) => {\n\tfor (const props of materialProps) newMaterial[props] = originalMaterial[props]\n}\n\nexport const keepMaterialMapUpdated = (mrtMaterial, originalMaterial, prop, define, useKey) => {\n\tif (useKey) {\n\t\tif (originalMaterial[prop] !== mrtMaterial[prop]) {\n\t\t\tmrtMaterial[prop] = originalMaterial[prop]\n\t\t\tmrtMaterial.uniforms[prop].value = originalMaterial[prop]\n\n\t\t\tif (originalMaterial[prop]) {\n\t\t\t\tmrtMaterial.defines[define] = \"\"\n\t\t\t} else {\n\t\t\t\tdelete mrtMaterial.defines[define]\n\t\t\t}\n\n\t\t\tmrtMaterial.needsUpdate = true\n\t\t}\n\t} else if (mrtMaterial[prop] !== undefined) {\n\t\tmrtMaterial[prop] = undefined\n\t\tmrtMaterial.uniforms[prop].value = undefined\n\t\tdelete mrtMaterial.defines[define]\n\t\tmrtMaterial.needsUpdate = true\n\t}\n}\n\nexport const getVisibleChildren = object => {\n\tconst queue = [object]\n\tconst objects = []\n\n\twhile (queue.length !== 0) {\n\t\tconst mesh = queue.shift()\n\t\tif (mesh.material) objects.push(mesh)\n\n\t\tfor (const c of mesh.children) {\n\t\t\tif (c.visible) queue.push(c)\n\t\t}\n\t}\n\n\treturn objects\n}\n","import { Pass } from \"postprocessing\"\nimport {\n\tColor,\n\tDataTexture,\n\tDepthTexture,\n\tFramebufferTexture,\n\tHalfFloatType,\n\tMatrix4,\n\tNearestFilter,\n\tRGBAFormat,\n\tVector2,\n\tWebGLRenderTarget\n} from \"three\"\nimport { VelocityDepthNormalMaterial } from \"../material/VelocityDepthNormalMaterial.js\"\nimport { copyNecessaryProps, keepMaterialMapUpdated } from \"../../gbuffer/utils/GBufferUtils.js\"\nimport { getVisibleChildren } from \"../../utils/SceneUtils.js\"\nimport { isChildMaterialRenderable } from \"../../utils/SceneUtils.js\"\n\nconst backgroundColor = new Color(0)\nconst zeroVec2 = new Vector2()\nconst tmpProjectionMatrix = new Matrix4()\nconst tmpProjectionMatrixInverse = new Matrix4()\n\nconst saveBoneTexture = (object, floatType) => {\n\tlet boneTexture = object.material.uniforms.prevBoneTexture.value\n\n\tif (boneTexture && boneTexture.image.width === object.skeleton.boneTexture.width) {\n\t\tboneTexture = object.material.uniforms.prevBoneTexture.value\n\t\tboneTexture.image.data.set(object.skeleton.boneTexture.image.data)\n\t} else {\n\t\tboneTexture?.dispose()\n\n\t\tconst boneMatrices = object.skeleton.boneTexture.image.data.slice()\n\t\tconst size = object.skeleton.boneTexture.image.width\n\n\t\tboneTexture = new DataTexture(boneMatrices, size, size, RGBAFormat, floatType)\n\t\tobject.material.uniforms.prevBoneTexture.value = boneTexture\n\n\t\tboneTexture.needsUpdate = true\n\t}\n}\n\nconst updateVelocityDepthNormalMaterialBeforeRender = (c, camera) => {\n\tif (c.skeleton?.boneTexture) {\n\t\tc.material.uniforms.boneTexture.value = c.skeleton.boneTexture\n\n\t\tif (!(\"USE_SKINNING\" in c.material.defines)) {\n\t\t\tc.material.defines.USE_SKINNING = \"\"\n\t\t\tc.material.defines.BONE_TEXTURE = \"\"\n\n\t\t\tc.material.needsUpdate = true\n\t\t}\n\t}\n\n\tc.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, c.matrixWorld)\n\n\tc.material.uniforms.velocityMatrix.value.multiplyMatrices(camera.projectionMatrix, c.modelViewMatrix)\n}\n\nconst updateVelocityDepthNormalMaterialAfterRender = (c, camera, floatType) => {\n\tc.material.uniforms.prevVelocityMatrix.value.multiplyMatrices(camera.projectionMatrix, c.modelViewMatrix)\n\n\tif (c.skeleton?.boneTexture) saveBoneTexture(c, floatType)\n}\n\nexport class VelocityDepthNormalPass extends Pass {\n\tcachedMaterials = new WeakMap()\n\tvisibleMeshes = []\n\tneedsSwap = false\n\n\tconstructor(scene, camera, floatType = HalfFloatType) {\n\t\tsuper(\"VelocityDepthNormalPass\")\n\n\t\tthis._scene = scene\n\t\tthis._camera = camera\n\t\tthis._floatType = floatType\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\ttype: floatType,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter\n\t\t})\n\n\t\tthis.renderTarget.texture.name = \"VelocityDepthNormalPass.Texture\"\n\n\t\tthis.renderTarget.depthTexture = new DepthTexture(1, 1)\n\t\tthis.renderTarget.depthTexture.type = floatType;\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture\n\t}\n\n\tsetVelocityDepthNormalMaterialInScene() {\n\t\tthis.visibleMeshes = getVisibleChildren(this._scene)\n\n\t\tfor (const c of this.visibleMeshes) {\n\t\t\tconst originalMaterial = c.material\n\n\t\t\tlet [cachedOriginalMaterial, velocityDepthNormalMaterial] = this.cachedMaterials.get(c) || []\n\n\t\t\tif (originalMaterial !== cachedOriginalMaterial) {\n\t\t\t\tvelocityDepthNormalMaterial = new VelocityDepthNormalMaterial(this._camera)\n\n\t\t\t\tcopyNecessaryProps(originalMaterial, velocityDepthNormalMaterial)\n\n\t\t\t\tc.material = velocityDepthNormalMaterial\n\n\t\t\t\tif (c.skeleton?.boneTexture) saveBoneTexture(c, this._floatType);\n\n\t\t\t\tthis.cachedMaterials.set(c, [originalMaterial, velocityDepthNormalMaterial])\n\t\t\t}\n\n\t\t\tc.material = velocityDepthNormalMaterial\n\n\t\t\tc.visible = isChildMaterialRenderable(c, originalMaterial)\n\n\t\t\tkeepMaterialMapUpdated(\n\t\t\t\tvelocityDepthNormalMaterial,\n\t\t\t\toriginalMaterial,\n\t\t\t\t\"normalMap\",\n\t\t\t\t\"USE_NORMALMAP_TANGENTSPACE\",\n\t\t\t\ttrue\n\t\t\t)\n\t\t\tvelocityDepthNormalMaterial.uniforms.normalMap.value = originalMaterial.normalMap\n\n\t\t\tconst map =\n\t\t\t\toriginalMaterial.map ||\n\t\t\t\toriginalMaterial.normalMap ||\n\t\t\t\toriginalMaterial.roughnessMap ||\n\t\t\t\toriginalMaterial.metalnessMap\n\n\t\t\tif (map) velocityDepthNormalMaterial.uniforms.uvTransform.value = map.matrix\n\n\t\t\tupdateVelocityDepthNormalMaterialBeforeRender(c, this._camera)\n\t\t}\n\t}\n\n\tunsetVelocityDepthNormalMaterialInScene() {\n\t\tfor (const c of this.visibleMeshes) {\n\t\t\tc.visible = true\n\n\t\t\tupdateVelocityDepthNormalMaterialAfterRender(c, this._camera, this._floatType)\n\n\t\t\tc.material = this.cachedMaterials.get(c)[0]\n\t\t}\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width, height)\n\n\t\tthis.lastVelocityTexture?.dispose()\n\n\t\tthis.lastVelocityTexture = new FramebufferTexture(width, height, RGBAFormat)\n\t\tthis.lastVelocityTexture.type = this._floatType;\n\t\tthis.lastVelocityTexture.minFilter = NearestFilter\n\t\tthis.lastVelocityTexture.magFilter = NearestFilter\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.renderTarget.dispose()\n\t}\n\n\trender(renderer) {\n\t\ttmpProjectionMatrix.copy(this._camera.projectionMatrix)\n\t\ttmpProjectionMatrixInverse.copy(this._camera.projectionMatrixInverse)\n\n\t\tif (this._camera.view) this._camera.view.enabled = false\n\t\tthis._camera.updateProjectionMatrix()\n\n\t\t// in case a RenderPass is not being used, so we need to update the camera's world matrix manually\n\t\tthis._camera.updateMatrixWorld()\n\n\t\tthis.setVelocityDepthNormalMaterialInScene()\n\n\t\tconst { background } = this._scene\n\n\t\tthis._scene.background = backgroundColor\n\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.copyFramebufferToTexture(zeroVec2, this.lastVelocityTexture)\n\n\t\trenderer.render(this._scene, this._camera)\n\n\t\tthis._scene.background = background\n\n\t\tthis.unsetVelocityDepthNormalMaterialInScene()\n\n\t\tif (this._camera.view) this._camera.view.enabled = true\n\t\tthis._camera.projectionMatrix.copy(tmpProjectionMatrix)\n\t\tthis._camera.projectionMatrixInverse.copy(tmpProjectionMatrixInverse)\n\t}\n}\n","/* eslint-disable camelcase */\nimport { Pass } from \"postprocessing\"\nimport { FloatType, NearestFilter, NoBlending, ShaderMaterial, WebGLRenderTarget } from \"three\"\nimport gbuffer_packing from \"../../gbuffer/shader/gbuffer_packing.glsl\"\nimport basicVertexShader from \"../../utils/shader/basic.vert\"\nimport ssgi_poisson_compose_functions from \"../shader/denoiser_compose_functions.glsl\"\n\nexport class DenoiserComposePass extends Pass {\n\tconstructor(camera, textures, gBufferTexture, depthTexture, options = {}) {\n\t\tsuper(\"DenoiserComposePass\")\n\n\t\tthis._camera = camera\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\tdepthBuffer: false,\n\t\t\ttype: FloatType,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter\n\t\t})\n\n\t\tthis.renderTarget.texture.name = \"DenoiserComposePass.Texture\"\n\n\t\tlet diffuseGiTexture\n\t\tlet specularGiTexture\n\n\t\tif (options.inputType === \"diffuseSpecular\") {\n\t\t\tdiffuseGiTexture = textures[0]\n\t\t\tspecularGiTexture = textures[1]\n\t\t} else if (options.inputType === \"diffuse\") {\n\t\t\tdiffuseGiTexture = textures[0]\n\t\t} else if (options.inputType === \"specular\") {\n\t\t\tspecularGiTexture = textures[0]\n\t\t}\n\n\t\tthis.fullscreenMaterial = new ShaderMaterial({\n\t\t\tfragmentShader: /* glsl */ `\n varying vec2 vUv;\n uniform sampler2D sceneTexture;\n uniform highp sampler2D depthTexture;\n uniform sampler2D diffuseGiTexture;\n uniform sampler2D specularGiTexture;\n uniform mat4 cameraMatrixWorld;\n uniform mat4 projectionMatrix;\n uniform mat4 projectionMatrixInverse;\n\t\t\tuniform float cameraNear;\n\t\t\tuniform float cameraFar;\n\n #include <common>\n #include <packing>\n\n\t\t\t#define TYPE_DIFFUSE_SPECULAR 0\n\t\t\t#define TYPE_DIFFUSE 1\n\t\t\t#define TYPE_SPECULAR 2\n\n ${gbuffer_packing}\n ${ssgi_poisson_compose_functions}\n\n void main() {\n float depth = textureLod(depthTexture, vUv, 0.).r;\n\n\t\t\t\tif(depth == 1. && fwidth(depth) == 0.){\n\t\t\t\t\tdiscard;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// on Android there's a bug where using \"vec3 normal = unpackNormal(textureLod(velocityTexture, vUv, 0.).b);\" instead of\n\t\t\t\t// \"vec3 normal = unpackNormal(velocity.b);\" causes the normal to be distorted (possibly due to packHalf2x16 function)\n\n Material mat = getMaterial(gBufferTexture, vUv);\n\n vec3 viewNormal = (vec4(mat.normal, 0.) * cameraMatrixWorld).xyz;\n\n\t\t\t\tfloat viewZ = -getViewZ(depth);\n\n // view-space position of the current texel\n\t\t\t\tvec3 viewPos = getViewPosition(viewZ);\n vec3 viewDir = normalize(viewPos);\n\n vec4 diffuseGi = textureLod(diffuseGiTexture, vUv, 0.);\n vec4 specularGi = textureLod(specularGiTexture, vUv, 0.);\n\n vec3 gi = constructGlobalIllumination(diffuseGi.rgb, specularGi.rgb, viewDir, viewNormal, mat.diffuse.rgb, mat.emissive, mat.roughness, mat.metalness);\n\n\t\t\t\tgl_FragColor = vec4(gi, 1.);\n }\n `,\n\t\t\tvertexShader: basicVertexShader,\n\t\t\tuniforms: {\n\t\t\t\tsceneTexture: { value: null },\n\t\t\t\tviewMatrix: { value: camera.matrixWorldInverse },\n\t\t\t\tcameraMatrixWorld: { value: camera.matrixWorld },\n\t\t\t\tprojectionMatrix: { value: camera.projectionMatrix },\n\t\t\t\tprojectionMatrixInverse: { value: camera.projectionMatrixInverse },\n\t\t\t\tcameraNear: { value: camera.near },\n\t\t\t\tcameraFar: { value: camera.far },\n\t\t\t\tgBufferTexture: { value: gBufferTexture },\n\t\t\t\tdepthTexture: { value: depthTexture },\n\t\t\t\tdiffuseGiTexture: { value: diffuseGiTexture },\n\t\t\t\tspecularGiTexture: { value: specularGiTexture }\n\t\t\t},\n\t\t\tdefines: {\n\t\t\t\tinputType: [\"diffuseSpecular\", \"diffuse\", \"specular\"].indexOf(options.inputType) ?? 0\n\t\t\t},\n\t\t\tblending: NoBlending,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t\ttoneMapped: false\n\t\t})\n\n\t\tif (camera.isPerspectiveCamera) this.fullscreenMaterial.defines.PERSPECTIVE_CAMERA = \"\"\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture\n\t}\n\n\tdispose() {\n\t\tthis.renderTarget.dispose()\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width, height)\n\t}\n\n\tsetSceneTexture(texture) {\n\t\tthis.fullscreenMaterial.uniforms.sceneTexture.value = texture\n\t}\n\n\trender(renderer) {\n\t\tthis.fullscreenMaterial.uniforms.cameraNear.value = this._camera.near\n\t\tthis.fullscreenMaterial.uniforms.cameraFar.value = this._camera.far\n\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.render(this.scene, this.camera)\n\t}\n}\n","/* eslint-disable camelcase */\nimport { Pass } from \"postprocessing\"\nimport { GLSL3, HalfFloatType, ShaderMaterial, Vector2, WebGLMultipleRenderTargets } from \"three\"\n// eslint-disable-next-line camelcase\n\nimport gbuffer_packing from \"../../gbuffer/shader/gbuffer_packing.glsl\"\nimport vertexShader from \"../../utils/shader/basic.vert\"\n\nimport { GBufferPass } from \"../../gbuffer/GBufferPass\"\nimport { unrollLoops } from \"../../ssgi/utils/Utils\"\nimport { useBlueNoise } from \"../../utils/BlueNoiseUtils\"\nimport fragmentShader from \"../shader/poisson_denoise.frag\"\n\nconst finalFragmentShader = fragmentShader.replace(\"#include <gbuffer_packing>\", gbuffer_packing)\n\nconst defaultPoissonBlurOptions = {\n\titerations: 1,\n\tradius: 3,\n\tphi: 0.5,\n\tlumaPhi: 5,\n\tdepthPhi: 2,\n\tnormalPhi: 3.25,\n\tinputType: \"diffuseSpecular\" // can be \"diffuseSpecular\", \"diffuse\" or \"specular\"\n}\n\nexport class PoissonDenoisePass extends Pass {\n\titerations = defaultPoissonBlurOptions.iterations\n\tindex = 0\n\n\tconstructor(camera, textures, options = defaultPoissonBlurOptions) {\n\t\tsuper(\"PoissonBlurPass\")\n\n\t\toptions = { ...defaultPoissonBlurOptions, ...options }\n\n\t\tthis.textures = textures\n\n\t\tlet isTextureSpecular = [false, true]\n\t\tif (options.inputType === \"diffuse\") isTextureSpecular = [false, false]\n\t\tif (options.inputType === \"specular\") isTextureSpecular = [true, true]\n\n\t\tconst textureCount = options.inputType === \"diffuseSpecular\" ? 2 : 1\n\n\t\tconst fragmentShader = unrollLoops(finalFragmentShader.replaceAll(\"textureCount\", textureCount))\n\n\t\tthis.fullscreenMaterial = new ShaderMaterial({\n\t\t\tfragmentShader,\n\t\t\tvertexShader,\n\t\t\tuniforms: {\n\t\t\t\tdepthTexture: { value: null },\n\t\t\t\tinputTexture: { value: textures[0] },\n\t\t\t\tinputTexture2: { value: textures[1] },\n\t\t\t\tgBufferTexture: { value: null },\n\t\t\t\tnormalTexture: { value: null },\n\t\t\t\tprojectionMatrix: { value: camera.projectionMatrix },\n\t\t\t\tprojectionMatrixInverse: { value: camera.projectionMatrixInverse },\n\t\t\t\tcameraMatrixWorld: { value: camera.matrixWorld },\n\t\t\t\tviewMatrix: { value: camera.matrixWorldInverse },\n\t\t\t\tradius: { value: defaultPoissonBlurOptions.radius },\n\t\t\t\tphi: { value: defaultPoissonBlurOptions.phi },\n\t\t\t\tlumaPhi: { value: defaultPoissonBlurOptions.lumaPhi },\n\t\t\t\tdepthPhi: { value: defaultPoissonBlurOptions.depthPhi },\n\t\t\t\tnormalPhi: { value: defaultPoissonBlurOptions.normalPhi },\n\t\t\t\troughnessPhi: { value: defaultPoissonBlurOptions.roughnessPhi },\n\t\t\t\tspecularPhi: { value: defaultPoissonBlurOptions.specularPhi },\n\t\t\t\tresolution: { value: new Vector2() }\n\t\t\t},\n\t\t\tdefines: {\n\t\t\t\tisTextureSpecular: \"bool[2](\" + isTextureSpecular.join(\",\") + \")\"\n\t\t\t},\n\t\t\tglslVersion: GLSL3\n\t\t})\n\n\t\tuseBlueNoise(this.fullscreenMaterial)\n\n\t\tconst renderTargetOptions = {\n\t\t\ttype: HalfFloatType, // using HalfFloatType as FloatType with bilinear filtering isn't supported on some Apple devices\n\t\t\tdepthBuffer: false\n\t\t}\n\n\t\tthis.renderTargetA = new WebGLMultipleRenderTargets(1, 1, textureCount, renderTargetOptions)\n\t\tthis.renderTargetB = new WebGLMultipleRenderTargets(1, 1, textureCount, renderTargetOptions)\n\n\t\t// give the textures of renderTargetA and renderTargetB names\n\t\tthis.renderTargetB.texture[0].name = \"PoissonDenoisePass.\" + (isTextureSpecular[0] ? \"specular\" : \"diffuse\")\n\n\t\tif (textureCount > 1) {\n\t\t\tthis.renderTargetB.texture[1].name = \"PoissonDenoisePass.\" + (isTextureSpecular[1] ? \"specular\" : \"diffuse\")\n\t\t}\n\n\t\tconst { uniforms } = this.fullscreenMaterial\n\n\t\tuniforms[\"depthPhi\"].value = options.depthPhi\n\t\tuniforms[\"normalPhi\"].value = options.normalPhi\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTargetA.setSize(width, height)\n\t\tthis.renderTargetB.setSize(width, height)\n\n\t\tthis.fullscreenMaterial.uniforms.resolution.value.set(width, height)\n\t}\n\n\tget texture() {\n\t\treturn this.renderTargetB.texture\n\t}\n\n\t// can either be a GBufferPass or a VelocityDepthNormalPass\n\tsetGBufferPass(gBufferPass) {\n\t\tif (gBufferPass instanceof GBufferPass) {\n\t\t\tthis.fullscreenMaterial.uniforms.gBufferTexture.value = gBufferPass.texture\n\t\t\tthis.fullscreenMaterial.defines.GBUFFER_TEXTURE = \"\"\n\t\t} else {\n\t\t\tthis.fullscreenMaterial.uniforms.normalTexture.value = gBufferPass.texture\n\t\t}\n\n\t\tthis.fullscreenMaterial.uniforms.depthTexture.value = gBufferPass.renderTarget.depthTexture\n\t}\n\n\tsetnNormalTexture(texture) {\n\t\tthis.fullscreenMaterial.uniforms.normalTexture.value = texture\n\t}\n\n\tsetDepthTexture(texture) {\n\t\tthis.fullscreenMaterial.uniforms.depthTexture.value = texture\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.renderTargetA.dispose()\n\t\tthis.renderTargetB.dispose()\n\t\tthis.fullscreenMaterial.dispose()\n\t}\n\n\trender(renderer) {\n\t\tfor (let i = 0; i < 2 * this.iterations; i++) {\n\t\t\tconst horizontal = i % 2 === 0\n\t\t\tconst inputRenderTarget = horizontal ? this.renderTargetB : this.renderTargetA\n\n\t\t\tthis.fullscreenMaterial.uniforms[\"inputTexture\"].value = i === 0 ? this.textures[0] : inputRenderTarget.texture[0]\n\t\t\tthis.fullscreenMaterial.uniforms[\"inputTexture2\"].value =\n\t\t\t\ti === 0 ? this.textures[1] : inputRenderTarget.texture[1]\n\n\t\t\tconst renderTarget = horizontal ? this.renderTargetA : this.renderTargetB\n\n\t\t\trenderer.setRenderTarget(renderTarget)\n\t\t\trenderer.render(this.scene, this.camera)\n\t\t}\n\t}\n}\n\nPoissonDenoisePass.DefaultOptions = defaultPoissonBlurOptions\n","import { TemporalReprojectPass } from \"../temporal-reproject/TemporalReprojectPass\"\nimport { VelocityDepthNormalPass } from \"../temporal-reproject/pass/VelocityDepthNormalPass\"\nimport { DenoiserComposePass } from \"./pass/DenoiserComposePass\"\nimport { PoissonDenoisePass } from \"./pass/PoissonDenoisePass\"\n\nconst defaultDenosierOptions = {\n\tdenoiseMode: \"full\", // can be \"full\" | \"full_temporal\" | \"denoised\" | \"temporal\"\n\tinputType: \"diffuseSpecular\", // can be \"diffuseSpecular\" | \"diffuse\" | \"specular\"\n\tgBufferPass: null,\n\tvelocityDepthNormalPass: null\n}\n\n// a spatio-temporal denoiser\n// temporal: temporal reprojection to reproject previous frames\n// spatial: poisson denoiser to denoise the current frame recurrently\nexport default class Denoiser {\n\tconstructor(scene, camera, texture, options = defaultDenosierOptions) {\n\t\toptions = { ...defaultDenosierOptions, ...options }\n\t\tthis.options = options\n\n\t\tthis.velocityDepthNormalPass = options.velocityDepthNormalPass ?? new VelocityDepthNormalPass(scene, camera)\n\t\tthis.isOwnVelocityDepthNormalPass = !options.velocityDepthNormalPass\n\n\t\tconst textureCount = options.inputType === \"diffuseSpecular\" ? 2 : 1\n\n\t\tthis.temporalReprojectPass = new TemporalReprojectPass(\n\t\t\tscene,\n\t\t\tcamera,\n\t\t\tthis.velocityDepthNormalPass,\n\t\t\ttexture,\n\t\t\ttextureCount,\n\t\t\t{\n\t\t\t\tfullAccumulate: true,\n\n\t\t\t\tlogTransform: true,\n\t\t\t\tcopyTextures: !options.denoise,\n\t\t\t\treprojectSpecular: [false, true],\n\t\t\t\tneighborhoodClamp: [true, true],\n\t\t\t\tneighborhoodClampRadius: 2,\n\t\t\t\tneighborhoodClampIntensity: 0.5,\n\t\t\t\t...options\n\t\t\t}\n\t\t)\n\n\t\tconst textures = this.temporalReprojectPass.renderTarget.texture.slice(0, textureCount)\n\n\t\tif (this.options.denoiseMode === \"full\" || this.options.denoiseMode === \"denoised\") {\n\t\t\tthis.denoisePass = new PoissonDenoisePass(camera, textures, options)\n\t\t\tthis.denoisePass.setGBufferPass(options.gBufferPass ?? this.velocityDepthNormalPass)\n\n\t\t\tthis.temporalReprojectPass.overrideAccumulatedTextures = this.denoisePass.renderTargetB.texture\n\t\t}\n\n\t\tconst composerInputTextures = this.denoisePass?.texture ?? textures\n\n\t\tif (options.denoiseMode.startsWith(\"full\")) {\n\t\t\tthis.denoiserComposePass = new DenoiserComposePass(\n\t\t\t\tcamera,\n\t\t\t\tcomposerInputTextures,\n\t\t\t\toptions.gBufferPass.texture,\n\t\t\t\toptions.gBufferPass.renderTarget.depthTexture,\n\t\t\t\toptions\n\t\t\t)\n\t\t}\n\t}\n\n\tget texture() {\n\t\tswitch (this.options.denoiseMode) {\n\t\t\tcase \"full\":\n\t\t\tcase \"full_temporal\":\n\t\t\t\treturn this.denoiserComposePass.texture\n\t\t\tcase \"denoised\":\n\t\t\t\treturn this.denoisePass.texture\n\t\t\tcase \"temporal\":\n\t\t\t\treturn this.temporalReprojectPass.texture\n\t\t}\n\t}\n\n\treset() {\n\t\tthis.temporalReprojectPass.reset()\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.velocityDepthNormalPass.setSize(width, height)\n\t\tthis.temporalReprojectPass.setSize(width, height)\n\t\tthis.denoisePass?.setSize(width, height)\n\t\tthis.denoiserComposePass?.setSize(width, height)\n\t}\n\n\tdispose() {\n\t\tthis.velocityDepthNormalPass.dispose()\n\t\tthis.temporalReprojectPass.dispose()\n\t\tthis.denoisePass?.dispose()\n\t\tthis.denoiserComposePass?.dispose()\n\t}\n\n\trender(renderer, inputBuffer = null) {\n\t\tif (this.isOwnVelocityDepthNormalPass) this.velocityDepthNormalPass.render(renderer)\n\t\tthis.temporalReprojectPass.render(renderer)\n\n\t\tif (this.options.inputType !== \"diffuseSpecular\") {\n\t\t\tthis.denoiserComposePass?.setSceneTexture(inputBuffer.texture)\n\t\t}\n\n\t\tthis.denoisePass?.render(renderer)\n\t\tthis.denoiserComposePass?.render(renderer)\n\t}\n}\n","/* eslint-disable camelcase */\nimport { Pass } from \"postprocessing\"\nimport { FloatType, NearestFilter, NoBlending, ShaderMaterial, WebGLRenderTarget } from \"three\"\nimport basicVertexShader from \"../../utils/shader/basic.vert\"\nimport gbuffer_packing from \"../shader/gbuffer_packing.glsl\"\n\nexport class GBufferDebugPass extends Pass {\n\tconstructor(gBufferTexture) {\n\t\tsuper(\"GBufferDebugPass\")\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\tdepthBuffer: false,\n\t\t\ttype: FloatType,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter\n\t\t})\n\n\t\tthis.renderTarget.texture.name = \"GBufferDebugPass.Texture\"\n\n\t\tthis.fullscreenMaterial = new ShaderMaterial({\n\t\t\tfragmentShader: /* glsl */ `\n varying vec2 vUv;\n uniform highp sampler2D depthTexture;\n\t\t\tuniform int mode;\n\n #include <common>\n #include <packing>\n\n ${gbuffer_packing}\n\n void main() {\n highp float depth = textureLod(depthTexture, vUv, 0.).r;\n\n\t\t\t\tif(depth == 0.){\n\t\t\t\t\tgl_FragColor = vec4(0.);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n Material mat = getMaterial(gBufferTexture, vUv);\n\n if (mode == 0) {\n gl_FragColor = vec4(mat.diffuse.rgb, 1.);\n } else if (mode == 1) {\n gl_FragColor = vec4(mat.diffuse.aaa, 1.);\n } else if (mode == 2) {\n gl_FragColor = vec4(mat.normal, 1.);\n } else if (mode == 3) {\n gl_FragColor = vec4(vec3(mat.roughness), 1.);\n } else if (mode == 4) {\n gl_FragColor = vec4(vec3(mat.metalness), 1.);\n } else {\n gl_FragColor = vec4(mat.emissive, 1.);\n }\n }\n `,\n\t\t\tvertexShader: basicVertexShader,\n\t\t\tuniforms: {\n\t\t\t\tgBufferTexture: { value: gBufferTexture },\n\t\t\t\tmode: { value: 0 }\n\t\t\t},\n\t\t\tblending: NoBlending,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t\ttoneMapped: false\n\t\t})\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture\n\t}\n\n\tdispose() {\n\t\tthis.renderTarget.dispose()\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width, height)\n\t}\n\n\trender(renderer) {\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.render(this.scene, this.camera)\n\t}\n}\n","/* eslint-disable max-len */\n/**\n * Options of the SSGI effect\n * @typedef {Object} SSGIOptions\n * @property {Number} [distance] maximum distance a SSGI ray can travel to find what it reflects\n * @property {Number} [thickness] maximum depth difference between a ray and the particular depth at its screen position before refining with binary search; higher values will result in better performance\n * @property {Number} [envBlur] higher values will result in lower mipmaps being sampled which will cause less noise but also less detail regarding environment lighting\n * @property {Number} [importanceSampling] whether to use importance sampling for the environment map\n * @property {Number} [denoiseIterations] how many times the denoise filter runs, more iterations will denoise the frame better but need more performance\n * @property {Number} [radius] the radius of the denoiser, higher values will result in less noise on less detailled surfaces but more noise on detailled surfaces\n * @property {Number} [depthPhi] depth factor of the denoiser, higher values will use neighboring areas with different depth values more resulting in less noise but loss of details\n * @property {Number} [normalPhi] normals factor of the denoiser, higher values will use neighboring areas with different normals more resulting in less noise but loss of details and sharpness\n * @property {Number} [roughnessPhi] roughness factor of the denoiser setting how much the denoiser should only apply the blur to rougher surfaces, a value of 0 means the denoiser will blur mirror-like surfaces the same as rough surfaces\n * @property {Number} [specularPhi] specular factor of the denoiser setting how much the denoiser will blur specular reflections\n * @property {Number} [lumaPhi] luminance factor of the denoiser setting how aggressive the denoiser is on areas with different luminance\n * @property {Number} [steps] number of steps a SSGI ray can maximally do to find an object it intersected (and thus reflects)\n * @property {Number} [refineSteps] once we had our ray intersect something, we need to find the exact point in space it intersected and thus it reflects; this can be done through binary search with the given number of maximum steps\n * @property {boolean} [missedRays] if there should still be SSGI for rays for which a reflecting point couldn't be found; enabling this will result in stretched looking SSGI which can look good or bad depending on the angle\n * @property {Number} [resolutionScale] resolution of the SSGI effect, a resolution of 0.5 means the effect will be rendered at half resolution\n */\n\n/**\n * The options of the SSGI effect\n * @type {SSGIOptions}\n */\nexport const defaultSSGIOptions = {\n\tmode: \"ssgi\",\n\tdistance: 10,\n\tthickness: 10,\n\tdenoiseIterations: 1,\n\tdenoiseKernel: 2,\n\tdenoiseDiffuse: 10,\n\tdenoiseSpecular: 10,\n\tradius: 3,\n\tphi: 0.5,\n\tlumaPhi: 5,\n\tdepthPhi: 2,\n\tnormalPhi: 50,\n\troughnessPhi: 50,\n\tspecularPhi: 50,\n\tenvBlur: 0.5,\n\timportanceSampling: true,\n\tsteps: 20,\n\trefineSteps: 5,\n\tresolutionScale: 1,\n\tmissedRays: false,\n\toutputTexture: null\n}\n","import { Effect, RenderPass, Selection } from \"postprocessing\"\nimport {\n\tColor,\n\tFloatType,\n\tLinearFilter,\n\tLinearMipMapLinearFilter,\n\tSRGBColorSpace,\n\tShaderChunk,\n\tUniform,\n\tWebGLRenderTarget\n} from \"three\"\nimport { CubeToEquirectEnvPass } from \"./pass/CubeToEquirectEnvPass.js\"\nimport { SSGIPass } from \"./pass/SSGIPass.js\"\n/* eslint-disable camelcase */\nimport Denoiser from \"../denoise/Denoiser.js\"\nimport { GBufferDebugPass } from \"../gbuffer/debug/GBufferDebugPass.js\"\nimport { getVisibleChildren } from \"../gbuffer/utils/GBufferUtils.js\"\nimport { isChildMaterialRenderable } from \"../utils/SceneUtils.js\"\nimport { defaultSSGIOptions } from \"./SSGIOptions\"\nimport ssgi_compose from \"./shader/ssgi_compose.frag\"\nimport { createGlobalDisableIblRadianceUniform, getMaxMipLevel } from \"./utils/Utils.js\"\n\nconst { render } = RenderPass.prototype\n\nconst globalIblRadianceDisabledUniform = createGlobalDisableIblRadianceUniform()\n\nexport class SSGIEffect extends Effect {\n\tselection = new Selection()\n\tisUsingRenderPass = true\n\n\tconstructor(composer, scene, camera, options) {\n\t\toptions = { ...defaultSSGIOptions, ...options }\n\n\t\tlet fragmentShader = ssgi_compose.replace(\n\t\t\t\"#include <fog_pars_fragment>\",\n\t\t\tShaderChunk.fog_pars_fragment.replace(\"varying\", \"\")\n\t\t)\n\n\t\t// delete the line starting with gl_FragColor using a regex\n\t\tfragmentShader = fragmentShader.replace(\n\t\t\t\"#include <fog_fragment>\",\n\t\t\tShaderChunk.fog_fragment.replace(/.*gl_FragColor.*/g, \"\")\n\t\t)\n\n\t\tconst defines = new Map()\n\t\tif (scene.fog) defines.set(\"USE_FOG\", \"\")\n\t\tif (scene.fog?.isFogExp2) defines.set(\"FOG_EXP2\", \"\")\n\n\t\tsuper(\"SSGIEffect\", fragmentShader, {\n\t\t\ttype: \"FinalSSGIMaterial\",\n\t\t\tuniforms: new Map([\n\t\t\t\t[\"inputTexture\", new Uniform(null)],\n\t\t\t\t[\"sceneTexture\", new Uniform(null)],\n\t\t\t\t[\"depthTexture\", new Uniform(null)],\n\t\t\t\t[\"isDebug\", new Uniform(false)],\n\t\t\t\t[\"fogColor\", new Uniform(new Color())],\n\t\t\t\t[\"fogNear\", new Uniform(0)],\n\t\t\t\t[\"fogFar\", new Uniform(0)],\n\t\t\t\t[\"fogDensity\", new Uniform(0)],\n\t\t\t\t[\"cameraNear\", new Uniform(0)],\n\t\t\t\t[\"cameraFar\", new Uniform(0)]\n\t\t\t]),\n\t\t\tdefines: new Map([[\"PERSPECTIVE_CAMERA\", camera.isPerspectiveCamera ? \"1\" : \"0\"], ...defines])\n\t\t})\n\n\t\tthis._scene = scene\n\t\tthis._camera = camera\n\t\tthis.composer = composer\n\n\t\tif (options.mode === \"ssr\") {\n\t\t\toptions.reprojectSpecular = true\n\t\t\toptions.neighborhoodClamp = true\n\t\t\toptions.inputType = \"specular\"\n\t\t} else if (options.mode === \"ssgi\") {\n\t\t\toptions.reprojectSpecular = [false, true]\n\t\t\toptions.neighborhoodClamp = [false, true]\n\t\t}\n\n\t\tif (typeof options.preset === \"string\") {\n\t\t\tswitch (options.preset) {\n\t\t\t\tcase \"low\":\n\t\t\t\t\toptions.steps = 10\n\t\t\t\t\toptions.refineSteps = 2\n\t\t\t\t\toptions.denoiseMode = \"full_temporal\"\n\t\t\t\t\tbreak\n\n\t\t\t\tcase \"medium\":\n\t\t\t\t\toptions.steps = 20\n\t\t\t\t\toptions.refineSteps = 4\n\t\t\t\t\toptions.denoiseMode = \"full\"\n\t\t\t\t\tbreak\n\n\t\t\t\tcase \"medium\":\n\t\t\t\t\toptions.steps = 40\n\t\t\t\t\toptions.refineSteps = 4\n\t\t\t\t\toptions.denoiseMode = \"full\"\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tthis.ssgiPass = new SSGIPass(this, options)\n\t\tthis.denoiser = new Denoiser(scene, camera, this.ssgiPass.texture, {\n\t\t\tgBufferPass: this.ssgiPass.gBufferPass,\n\t\t\tvelocityDepthNormalPass: options.velocityDepthNormalPass,\n\t\t\t...options\n\t\t})\n\n\t\tthis.lastSize = {\n\t\t\twidth: options.width,\n\t\t\theight: options.height,\n\t\t\tresolutionScale: options.resolutionScale\n\t\t}\n\n\t\tthis.sceneRenderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\tcolorSpace: SRGBColorSpace\n\t\t})\n\n\t\tthis.renderPass = new RenderPass(this._scene, this._camera)\n\t\tthis.renderPass.renderToScreen = false\n\n\t\tthis.setSize(options.width, options.height)\n\n\t\tconst th = this\n\t\tconst ssgiRenderPass = this.renderPass\n\t\t// eslint-disable-next-line space-before-function-paren\n\t\tRenderPass.prototype.render = function (...args) {\n\t\t\tif (this !== ssgiRenderPass) {\n\t\t\t\tconst wasUsingRenderPass = th.isUsingRenderPass\n\t\t\t\tth.isUsingRenderPass = true\n\n\t\t\t\tif (wasUsingRenderPass != th.isUsingRenderPass) th.updateUsingRenderPass()\n\t\t\t}\n\n\t\t\trender.call(this, ...args)\n\t\t}\n\n\t\tthis.makeOptionsReactive(options)\n\n\t\tthis.outputTexture = this.denoiser.texture\n\t\t// this.outputTexture = this.denoiser.denoisePass.textures[1]\n\t}\n\n\tupdateUsingRenderPass() {\n\t\tif (this.isUsingRenderPass) {\n\t\t\tthis.ssgiPass.fullscreenMaterial.defines.useDirectLight = \"\"\n\t\t} else {\n\t\t\tdelete this.ssgiPass.fullscreenMaterial.defines.useDirectLight\n\t\t}\n\n\t\tthis.ssgiPass.fullscreenMaterial.needsUpdate = true\n\t}\n\n\treset() {\n\t\tthis.denoiser.reset()\n\t}\n\n\tmakeOptionsReactive(options) {\n\t\tlet needsUpdate = false\n\n\t\tconst ssgiPassFullscreenMaterialUniforms = this.ssgiPass.fullscreenMaterial.uniforms\n\t\tconst ssgiPassFullscreenMaterialUniformsKeys = Object.keys(ssgiPassFullscreenMaterialUniforms)\n\n\t\tfor (const key of Object.keys(options)) {\n\t\t\tObject.defineProperty(this, key, {\n\t\t\t\tget() {\n\t\t\t\t\treturn options[key]\n\t\t\t\t},\n\t\t\t\tset(value) {\n\t\t\t\t\tif (options[key] === value && needsUpdate) return\n\n\t\t\t\t\toptions[key] = value\n\n\t\t\t\t\tswitch (key) {\n\t\t\t\t\t\t// denoiser\n\t\t\t\t\t\tcase \"denoiseIterations\":\n\t\t\t\t\t\t\tif (this.denoiser.denoisePass) this.denoiser.denoisePass.iterations = value\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"radius\":\n\t\t\t\t\t\tcase \"phi\":\n\t\t\t\t\t\tcase \"lumaPhi\":\n\t\t\t\t\t\tcase \"depthPhi\":\n\t\t\t\t\t\tcase \"normalPhi\":\n\t\t\t\t\t\tcase \"roughnessPhi\":\n\t\t\t\t\t\tcase \"specularPhi\":\n\t\t\t\t\t\t\tif (this.denoiser.denoisePass?.fullscreenMaterial.uniforms[key]) {\n\t\t\t\t\t\t\t\tthis.denoiser.denoisePass.fullscreenMaterial.uniforms[key].value = value\n\t\t\t\t\t\t\t\tthis.reset()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"denoiseIterations\":\n\t\t\t\t\t\tcase \"radius\":\n\t\t\t\t\t\t\tif (this.denoiser.denoisePass) this.denoiser.denoisePass[key] = value\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\t// SSGI\n\t\t\t\t\t\tcase \"resolutionScale\":\n\t\t\t\t\t\t\tthis.setSize(this.lastSize.width, this.lastSize.height)\n\t\t\t\t\t\t\tthis.reset()\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"steps\":\n\t\t\t\t\t\tcase \"refineSteps\":\n\t\t\t\t\t\t\tthis.ssgiPass.fullscreenMaterial.defines[key] = parseInt(value)\n\t\t\t\t\t\t\tthis.ssgiPass.fullscreenMaterial.needsUpdate = needsUpdate\n\t\t\t\t\t\t\tthis.reset()\n\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"importanceSampling\":\n\t\t\t\t\t\tcase \"missedRays\":\n\t\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\t\tthis.ssgiPass.fullscreenMaterial.defines[key] = \"\"\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdelete this.ssgiPass.fullscreenMaterial.defines[key]\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.ssgiPass.fullscreenMaterial.needsUpdate = needsUpdate\n\t\t\t\t\t\t\tthis.reset()\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"distance\":\n\t\t\t\t\t\t\tssgiPassFullscreenMaterialUniforms.rayDistance.value = value\n\t\t\t\t\t\t\tthis.reset()\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"outputTexture\":\n\t\t\t\t\t\t\tif (!this.outputTexture) {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (typeof value === \"string\") {\n\t\t\t\t\t\t\t\tif (this.gBufferDebugPass === undefined) {\n\t\t\t\t\t\t\t\t\tthis.gBufferDebugPass = new GBufferDebugPass(this.ssgiPass.gBufferPass.texture)\n\t\t\t\t\t\t\t\t\tthis.gBufferDebugPass.setSize(this.lastSize.width, this.lastSize.height)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst modes = [\"diffuse\", \"alpha\", \"normal\", \"roughness\", \"metalness\", \"emissive\"]\n\t\t\t\t\t\t\t\tconst mode = modes.indexOf(value)\n\t\t\t\t\t\t\t\tthis.gBufferDebugPass.fullscreenMaterial.uniforms.mode.value = mode\n\n\t\t\t\t\t\t\t\tthis.outputTexture = this.gBufferDebugPass.texture\n\t\t\t\t\t\t\t} else if (this.gBufferDebugPass !== undefined && this.outputTexture !== this.gBufferDebugPass.texture) {\n\t\t\t\t\t\t\t\tthis.gBufferDebugPass.dispose()\n\t\t\t\t\t\t\t\tdelete this.gBufferDebugPass\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.uniforms.get(\"isDebug\").value = this.outputTexture !== this.denoiser.texture\n\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\t// must be a uniform\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif (ssgiPassFullscreenMaterialUniformsKeys.includes(key)) {\n\t\t\t\t\t\t\t\tssgiPassFullscreenMaterialUniforms[key].value = value\n\t\t\t\t\t\t\t\tthis.reset()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// apply all uniforms and defines\n\t\t\tthis[key] = options[key]\n\t\t}\n\n\t\tneedsUpdate = true\n\t}\n\n\tinitialize(renderer, ...args) {\n\t\tsuper.initialize(renderer, ...args)\n\t\tthis.ssgiPass.initialize(renderer, ...args)\n\t}\n\n\tsetSize(width, height, force = false) {\n\t\tif (width === undefined && height === undefined) return\n\t\tif (\n\t\t\t!force &&\n\t\t\twidth === this.lastSize.width &&\n\t\t\theight === this.lastSize.height &&\n\t\t\tthis.resolutionScale === this.lastSize.resolutionScale\n\t\t) {\n\t\t\treturn\n\t\t}\n\n\t\tthis.ssgiPass.setSize(width, height)\n\t\tthis.denoiser.setSize(width, height)\n\t\tthis.gBufferDebugPass?.setSize(width, height)\n\t\tthis.sceneRenderTarget.setSize(width, height)\n\t\tthis.cubeToEquirectEnvPass?.setSize(width, height)\n\n\t\tthis.lastSize = {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tresolutionScale: this.resolutionScale\n\t\t}\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.ssgiPass.dispose()\n\t\tthis.denoiser.dispose()\n\t\tthis.cubeToEquirectEnvPass?.dispose()\n\n\t\tRenderPass.prototype.render = render\n\t}\n\n\tkeepEnvMapUpdated(renderer) {\n\t\tconst ssgiMaterial = this.ssgiPass.fullscreenMaterial\n\n\t\tlet environment = this._scene.environment\n\n\t\tif (environment) {\n\t\t\tif (ssgiMaterial.uniforms.envMapInfo.value.mapUuid !== environment.uuid) {\n\t\t\t\t// if the environment is a cube texture, convert it to an equirectangular texture so we can sample it in the SSGI pass and use MIS\n\t\t\t\tif (environment.isCubeTexture) {\n\t\t\t\t\tif (!this.cubeToEquirectEnvPass) this.cubeToEquirectEnvPass = new CubeToEquirectEnvPass()\n\n\t\t\t\t\tenvironment = this.cubeToEquirectEnvPass.generateEquirectEnvMap(renderer, environment)\n\t\t\t\t\tenvironment.uuid = this._scene.environment.uuid\n\t\t\t\t}\n\n\t\t\t\tif (!environment.generateMipmaps) {\n\t\t\t\t\tenvironment.generateMipmaps = true\n\t\t\t\t\tenvironment.minFilter = LinearMipMapLinearFilter\n\t\t\t\t\tenvironment.magFilter = LinearFilter\n\t\t\t\t\tenvironment.needsUpdate = true\n\t\t\t\t}\n\n\t\t\t\tif (environment.type === FloatType) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\"SSGI: Environment map is FloatType, this causes the environment map to be black in the SSGI pass for many modern Apple devices. Please use HalfFloatType instead.\"\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tssgiMaterial.uniforms.envMapInfo.value.mapUuid = environment.uuid\n\n\t\t\t\tconst maxEnvMapMipLevel = getMaxMipLevel(environment)\n\t\t\t\tssgiMaterial.uniforms.maxEnvMapMipLevel.value = maxEnvMapMipLevel\n\n\t\t\t\tssgiMaterial.uniforms.envMapInfo.value.map = environment\n\n\t\t\t\tssgiMaterial.defines.USE_ENVMAP = \"\"\n\t\t\t\tdelete ssgiMaterial.defines.importanceSampling\n\n\t\t\t\tif (this.importanceSampling) {\n\t\t\t\t\tssgiMaterial.uniforms.envMapInfo.value.updateFrom(environment, renderer).then(() => {\n\t\t\t\t\t\tssgiMaterial.defines.importanceSampling = \"\"\n\t\t\t\t\t\tssgiMaterial.needsUpdate = true\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tssgiMaterial.uniforms.envMapInfo.value.map = environment\n\t\t\t\t}\n\n\t\t\t\tthis.reset()\n\n\t\t\t\tssgiMaterial.needsUpdate = true\n\t\t\t}\n\t\t} else if (\"USE_ENVMAP\" in ssgiMaterial.defines) {\n\t\t\tdelete ssgiMaterial.defines.USE_ENVMAP\n\t\t\tdelete ssgiMaterial.defines.importanceSampling\n\n\t\t\tssgiMaterial.needsUpdate = true\n\t\t}\n\t}\n\n\tget depthTexture() {\n\t\treturn this.ssgiPass.gBufferPass.depthTexture\n\t}\n\n\tupdate(renderer, inputBuffer) {\n\t\tthis.keepEnvMapUpdated(renderer)\n\n\t\tconst sceneBuffer = this.isUsingRenderPass ? inputBuffer : this.sceneRenderTarget\n\n\t\tconst hideMeshes = []\n\n\t\tif (!this.isUsingRenderPass) {\n\t\t\tconst children = []\n\n\t\t\tfor (const c of getVisibleChildren(this._scene)) {\n\t\t\t\tif (c.isScene) return\n\n\t\t\t\tc.visible = !isChildMaterialRenderable(c)\n\n\t\t\t\tc.visible ? hideMeshes.push(c) : children.push(c)\n\t\t\t}\n\n\t\t\tthis.renderPass.render(renderer, this.sceneRenderTarget)\n\n\t\t\tfor (const c of children) c.visible = true\n\t\t\tfor (const c of hideMeshes) c.visible = false\n\t\t}\n\n\t\tthis.ssgiPass.fullscreenMaterial.uniforms.directLightTexture.value = sceneBuffer.texture\n\n\t\tthis.ssgiPass.render(renderer)\n\t\tthis.gBufferDebugPass?.render(renderer)\n\t\tthis.denoiser.render(renderer, inputBuffer)\n\n\t\tthis.uniforms.get(\"inputTexture\").value = this.outputTexture[0] ?? this.outputTexture\n\t\tthis.uniforms.get(\"sceneTexture\").value = sceneBuffer.texture\n\t\tthis.uniforms.get(\"depthTexture\").value = this.ssgiPass.gBufferPass.depthTexture\n\n\t\t// update the fog uniforms\n\t\tif (this._scene.fog) {\n\t\t\tthis.uniforms.get(\"fogColor\").value = this._scene.fog.color\n\t\t\tthis.uniforms.get(\"fogNear\").value = this._scene.fog.near\n\t\t\tthis.uniforms.get(\"fogFar\").value = this._scene.fog.far\n\t\t\tthis.uniforms.get(\"fogDensity\").value = this._scene.fog.density\n\n\t\t\tthis.uniforms.get(\"cameraNear\").value = this._camera.near\n\t\t\tthis.uniforms.get(\"cameraFar\").value = this._camera.far\n\t\t}\n\n\t\tfor (const c of hideMeshes) c.visible = true\n\n\t\tglobalIblRadianceDisabledUniform.value = true\n\n\t\tcancelAnimationFrame(this.rAF2)\n\t\tcancelAnimationFrame(this.rAF)\n\t\tcancelAnimationFrame(this.usingRenderPassRAF)\n\n\t\tthis.rAF = requestAnimationFrame(() => {\n\t\t\tthis.rAF2 = requestAnimationFrame(() => {\n\t\t\t\tglobalIblRadianceDisabledUniform.value = false\n\t\t\t})\n\t\t})\n\t\tthis.usingRenderPassRAF = requestAnimationFrame(() => {\n\t\t\tconst wasUsingRenderPass = this.isUsingRenderPass\n\t\t\tthis.isUsingRenderPass = false\n\n\t\t\tif (wasUsingRenderPass != this.isUsingRenderPass) this.updateUsingRenderPass()\n\t\t})\n\t}\n}\n\nSSGIEffect.DefaultOptions = defaultSSGIOptions\n","/* eslint-disable camelcase */\n\nimport { Effect } from \"postprocessing\"\nimport { NoColorSpace, NearestFilter, RepeatWrapping, TextureLoader, Uniform, Vector2 } from \"three\"\nimport motion_blur from \"./shader/motion_blur.frag\"\n\nimport blueNoiseImage from \"./../utils/blue_noise_rgba.png\"\nimport { setupBlueNoise } from \"../utils/BlueNoiseUtils\"\n\n// https://www.nvidia.com/docs/io/8230/gdc2003_openglshadertricks.pdf\n// http://john-chapman-graphics.blogspot.com/2013/01/per-object-motion-blur.html\n// reference code: https://github.com/gkjohnson/threejs-sandbox/blob/master/motionBlurPass/src/CompositeShader.js\n\nconst defaultOptions = { intensity: 1, jitter: 1, samples: 16 }\n\nexport class MotionBlurEffect extends Effect {\n\tpointsIndex = 0\n\n\tconstructor(velocityPass, options = defaultOptions) {\n\t\toptions = { ...defaultOptions, ...options }\n\n\t\tconst { fragmentShader, uniforms } = setupBlueNoise(motion_blur)\n\n\t\t// convert the uniforms from type { uniform: value,... } to type [\"uniform\", value,...]\n\t\tconst formattedUniforms = []\n\t\tfor (const key of Object.keys(uniforms)) {\n\t\t\tformattedUniforms.push([key, uniforms[key]])\n\t\t}\n\n\t\tsuper(\"MotionBlurEffect\", fragmentShader, {\n\t\t\ttype: \"MotionBlurMaterial\",\n\t\t\tuniforms: new Map([\n\t\t\t\t...formattedUniforms,\n\t\t\t\t[\"inputTexture\", new Uniform(null)],\n\t\t\t\t[\"velocityTexture\", new Uniform(velocityPass.texture)],\n\t\t\t\t[\"resolution\", new Uniform(new Vector2())],\n\t\t\t\t[\"intensity\", new Uniform(1)],\n\t\t\t\t[\"jitter\", new Uniform(1)],\n\t\t\t\t[\"frame\", new Uniform(0)],\n\t\t\t\t[\"deltaTime\", new Uniform(0)]\n\t\t\t]),\n\t\t\tdefines: new Map([\n\t\t\t\t[\"samples\", options.samples.toFixed(0)],\n\t\t\t\t[\"samplesFloat\", options.samples.toFixed(0) + \".0\"]\n\t\t\t])\n\t\t})\n\n\t\tthis.makeOptionsReactive(options)\n\t}\n\n\tmakeOptionsReactive(options) {\n\t\tfor (const key of Object.keys(options)) {\n\t\t\tObject.defineProperty(this, key, {\n\t\t\t\tget() {\n\t\t\t\t\treturn options[key]\n\t\t\t\t},\n\t\t\t\tset(value) {\n\t\t\t\t\toptions[key] = value\n\n\t\t\t\t\tswitch (key) {\n\t\t\t\t\t\tcase \"intensity\":\n\t\t\t\t\t\tcase \"jitter\":\n\t\t\t\t\t\t\tthis.uniforms.get(key).value = value\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tthis[key] = options[key]\n\t\t}\n\t}\n\n\tinitialize(renderer, ...args) {\n\t\tsuper.initialize(renderer, ...args)\n\n\t\tnew TextureLoader().load(blueNoiseImage, blueNoiseTexture => {\n\t\t\tblueNoiseTexture.minFilter = NearestFilter\n\t\t\tblueNoiseTexture.magFilter = NearestFilter\n\t\t\tblueNoiseTexture.wrapS = RepeatWrapping\n\t\t\tblueNoiseTexture.wrapT = RepeatWrapping\n\t\t\tblueNoiseTexture.colorSpace = NoColorSpace\n\n\t\t\tthis.uniforms.get(\"blueNoiseTexture\").value = blueNoiseTexture\n\t\t})\n\t}\n\n\tupdate(renderer, inputBuffer, deltaTime) {\n\t\tthis.uniforms.get(\"inputTexture\").value = inputBuffer.texture\n\t\tthis.uniforms.get(\"deltaTime\").value = Math.max(1 / 1000, deltaTime)\n\n\t\tconst frame = renderer.info.render.frame % 4096\n\t\tthis.uniforms.get(\"frame\").value = frame\n\n\t\tthis.uniforms.get(\"resolution\").value.set(window.innerWidth, window.innerHeight)\n\n\t\tconst noiseTexture = this.uniforms.get(\"blueNoiseTexture\").value\n\t\tif (noiseTexture && noiseTexture.source.data) {\n\t\t\tconst { width, height } = noiseTexture.source.data\n\n\t\t\tthis.uniforms.get(\"blueNoiseSize\").value.set(width, height)\n\t\t}\n\t}\n}\n","import { Effect, NormalPass } from \"postprocessing\"\nimport { Color, Uniform } from \"three\"\nimport { PoissonDenoisePass } from \"../denoise/pass/PoissonDenoisePass\"\n// eslint-disable-next-line camelcase\nimport ao_compose from \"./shader/ao_compose.frag\"\nimport { TRAAEffect } from \"../traa/TRAAEffect\"\n\nconst defaultAOOptions = {\n\tresolutionScale: 1,\n\tspp: 8,\n\tdistance: 2,\n\tdistancePower: 1,\n\tpower: 2,\n\tbias: 40,\n\tthickness: 0.075,\n\tcolor: new Color(\"black\"),\n\tuseNormalPass: false,\n\tvelocityDepthNormalPass: null,\n\tnormalTexture: null,\n\t...PoissonDenoisePass.DefaultOptions\n}\n\nclass AOEffect extends Effect {\n\tlastSize = { width: 0, height: 0, resolutionScale: 0 }\n\n\tconstructor(composer, camera, scene, aoPass, options = defaultAOOptions) {\n\t\tsuper(\"AOEffect\", ao_compose, {\n\t\t\ttype: \"FinalAOMaterial\",\n\t\t\tuniforms: new Map([\n\t\t\t\t[\"inputTexture\", new Uniform(null)],\n\t\t\t\t[\"depthTexture\", new Uniform(null)],\n\t\t\t\t[\"power\", new Uniform(0)],\n\t\t\t\t[\"color\", new Uniform(new Color(\"black\"))]\n\t\t\t])\n\t\t})\n\n\t\tthis.composer = composer\n\t\tthis.aoPass = aoPass\n\t\toptions = { ...defaultAOOptions, ...options }\n\n\t\t// set up depth texture\n\t\tif (!composer.depthTexture) composer.createDepthTexture()\n\n\t\tthis.aoPass.fullscreenMaterial.uniforms.depthTexture.value = composer.depthTexture\n\t\tthis.uniforms.get(\"depthTexture\").value = composer.depthTexture\n\n\t\t// set up optional normal texture\n\t\tif (options.useNormalPass || options.normalTexture) {\n\t\t\tif (options.useNormalPass) this.normalPass = new NormalPass(scene, camera)\n\n\t\t\tconst normalTexture = options.normalTexture ?? this.normalPass.texture\n\n\t\t\tthis.aoPass.fullscreenMaterial.uniforms.normalTexture.value = normalTexture\n\t\t\tthis.aoPass.fullscreenMaterial.defines.useNormalTexture = \"\"\n\t\t}\n\n\t\tthis.PoissonDenoisePass = new PoissonDenoisePass(camera, this.aoPass.texture, composer.depthTexture, {\n\t\t\tnormalInRgb: true\n\t\t})\n\n\t\tthis.makeOptionsReactive(options)\n\t}\n\n\tmakeOptionsReactive(options) {\n\t\tfor (const key of Object.keys(options)) {\n\t\t\tObject.defineProperty(this, key, {\n\t\t\t\tget() {\n\t\t\t\t\treturn options[key]\n\t\t\t\t},\n\t\t\t\tset(value) {\n\t\t\t\t\tif (value === null || value === undefined) return\n\n\t\t\t\t\toptions[key] = value\n\n\t\t\t\t\tswitch (key) {\n\t\t\t\t\t\tcase \"spp\":\n\t\t\t\t\t\t\tthis.aoPass.fullscreenMaterial.defines.spp = value.toFixed(0)\n\n\t\t\t\t\t\t\tthis.aoPass.fullscreenMaterial.needsUpdate = true\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"distance\":\n\t\t\t\t\t\t\tthis.aoPass.fullscreenMaterial.uniforms.aoDistance.value = value\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"resolutionScale\":\n\t\t\t\t\t\t\tthis.setSize(this.lastSize.width, this.lastSize.height)\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"power\":\n\t\t\t\t\t\t\tthis.uniforms.get(\"power\").value = value\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"color\":\n\t\t\t\t\t\t\tthis.uniforms.get(\"color\").value.copy(new Color(value))\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\t// denoiser\n\t\t\t\t\t\tcase \"iterations\":\n\t\t\t\t\t\tcase \"radius\":\n\t\t\t\t\t\tcase \"rings\":\n\t\t\t\t\t\tcase \"samples\":\n\t\t\t\t\t\t\tthis.PoissonDenoisePass[key] = value\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"lumaPhi\":\n\t\t\t\t\t\tcase \"depthPhi\":\n\t\t\t\t\t\tcase \"normalPhi\":\n\t\t\t\t\t\t\tthis.PoissonDenoisePass.fullscreenMaterial.uniforms[key].value = Math.max(value, 0.0001)\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif (key in this.aoPass.fullscreenMaterial.uniforms) {\n\t\t\t\t\t\t\t\tthis.aoPass.fullscreenMaterial.uniforms[key].value = value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tconfigurable: true\n\t\t\t})\n\n\t\t\t// apply all uniforms and defines\n\t\t\tthis[key] = options[key]\n\t\t}\n\t}\n\n\tsetSize(width, height) {\n\t\tif (width === undefined || height === undefined) return\n\t\tif (\n\t\t\twidth === this.lastSize.width &&\n\t\t\theight === this.lastSize.height &&\n\t\t\tthis.resolutionScale === this.lastSize.resolutionScale\n\t\t) {\n\t\t\treturn\n\t\t}\n\n\t\tthis.normalPass?.setSize(width, height)\n\t\tthis.aoPass.setSize(width * this.resolutionScale, height * this.resolutionScale)\n\n\t\tthis.PoissonDenoisePass.setSize(width, height)\n\n\t\tthis.lastSize = {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tresolutionScale: this.resolutionScale\n\t\t}\n\t}\n\n\tget texture() {\n\t\tif (this.iterations > 0) {\n\t\t\treturn this.PoissonDenoisePass.texture\n\t\t}\n\n\t\treturn this.aoPass.texture\n\t}\n\n\tupdate(renderer) {\n\t\t// check if TRAA is being used so we can animate the noise\n\t\tconst hasTRAA = this.composer.passes.some(pass => {\n\t\t\treturn pass.enabled && !pass.skipRendering && pass.effects?.some(effect => effect instanceof TRAAEffect)\n\t\t})\n\n\t\t// set animated noise depending on TRAA\n\t\tif (hasTRAA && !(\"animatedNoise\" in this.aoPass.fullscreenMaterial.defines)) {\n\t\t\tthis.aoPass.fullscreenMaterial.defines.animatedNoise = \"\"\n\t\t\tthis.aoPass.fullscreenMaterial.needsUpdate = true\n\t\t} else if (!hasTRAA && \"animatedNoise\" in this.aoPass.fullscreenMaterial.defines) {\n\t\t\tdelete this.aoPass.fullscreenMaterial.defines.animatedNoise\n\t\t\tthis.aoPass.fullscreenMaterial.needsUpdate = true\n\t\t}\n\n\t\tthis.uniforms.get(\"inputTexture\").value = this.texture\n\n\t\tthis.normalPass?.render(renderer)\n\t\tthis.aoPass.render(renderer)\n\n\t\tthis.PoissonDenoisePass.render(renderer)\n\t}\n}\n\nAOEffect.DefaultOptions = defaultAOOptions\n\nexport { AOEffect }\n","import { Viewer } from \"@xviewer.js/core\";\nimport { VelocityDepthNormalPass } from \"./realism-effects\";\nimport { EffectComposerPlugin } from \"./EffectComposerPlugin\";\n\nexport function getVelocityDepthNormalPass(viewer: Viewer, autoAdd: boolean = true) {\n const composer = EffectComposerPlugin.Instance(viewer);\n let vdnPass = composer.getPass(VelocityDepthNormalPass);\n if (vdnPass === undefined && autoAdd) {\n vdnPass = composer.addPass(new VelocityDepthNormalPass(viewer.scene, viewer.camera));\n }\n return vdnPass;\n}","import { EffectPass } from \"postprocessing\";\nimport { TRAAEffect } from \"./realism-effects\";\nimport { PassPlugin } from \"./PassPlugin\";\nimport { getVelocityDepthNormalPass } from \"./getVelocityDepthNormalPass\";\n\nexport class TRAAPlugin extends PassPlugin<EffectPass> {\n private _effect: TRAAEffect;\n\n constructor(props: {\n dilation?: boolean,\n fullAccumulate?: boolean,\n neighborhoodClamp?: boolean,\n neighborhoodClampRadius?: number,\n neighborhoodClampIntensity?: number,\n } = {}) {\n super();\n this.install = () => {\n const { scene, camera } = this.viewer;\n this._effect = new TRAAEffect(scene, camera, getVelocityDepthNormalPass(this.viewer), props);\n this.pass = this.composer.addPass(new EffectPass(camera, this._effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n\n}","import { EffectPass } from \"postprocessing\";\nimport { MotionBlurEffect } from \"./realism-effects\";\nimport { PassPlugin } from \"./PassPlugin\";\nimport { getVelocityDepthNormalPass } from \"./getVelocityDepthNormalPass\";\n\nexport class MotionBlurPlugin extends PassPlugin<EffectPass> {\n\n constructor() {\n super();\n this.install = () => {\n const effect = new MotionBlurEffect(getVelocityDepthNormalPass(this.viewer));\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n\n}"],"names":["EffectComposerPlugin","Plugin","Instance","viewer","getPlugin","multisampling","_composer","v","getPass","constructor","passes","find","addPass","pass","length","_checkOutputPass","removePass","activePass","enabled","count","filter","name","_outputPass","_setRenderToScreen","k","i","renderToScreen","props","install","renderer","scene","camera","_renderPass","RenderPass","EffectPass","EffectComposer","Object","assign","frameBufferType","HalfFloatType","_onResize","width","height","setSize","_onRender","dt","render","uninstall","dispose","PassPlugin","enable","setEnable","composer","property","ToneMappingPlugin","mode","effect","ToneMappingEffect","value","ToneMappingMode","BloomPlugin","intensity","luminanceThreshold","luminanceMaterial","threshold","luminanceSmoothing","smoothing","BloomEffect","blendFunction","BlendFunction","ADD","min","max","step","FXAAPlugin","FXAAEffect","SMAAPlugin","preset","_preset","applyPreset","edgeDetectionMode","edgeDetectionMaterial","predicationMode","SMAAPreset","MEDIUM","SMAAEffect","EdgeDetectionMode","PredicationMode","MSAAPlugin","_maxSamples","Math","capabilities","maxSamples","g","a1","a2","base","generateR2","points","n","push","r2Sequence","map","a","b","jitter","frame","jitterScale","x","y","setViewOffset","getMaxMipLevel","texture","image","floor","log2","createGlobalDisableIblRadianceUniform","ShaderChunk","envmap_physical_pars_fragment","includes","replace","ShaderLib","physical","uniforms","globalIblRadianceDisabledUniform","iblRadianceDisabled","clone","UniformsUtils","result","unrollLoopPattern","unrollLoops","string","loopReplacer","match","start","end","snippet","parseInt","TemporalReprojectMaterial","ShaderMaterial","textureCount","finalFragmentShader","fragmentShader","reproject","gbuffer_packing","definitions","replaceAll","matches2","matchAll","key","number","matches3","type","inputTexture","Uniform","velocityTexture","depthTexture","lastVelocityTexture","neighborhoodClampIntensity","fullAccumulate","keepData","delta","invTexSize","Vector2","projectionMatrix","Matrix4","projectionMatrixInverse","cameraMatrixWorld","viewMatrix","prevViewMatrix","prevCameraMatrixWorld","prevProjectionMatrix","prevProjectionMatrixInverse","cameraPos","Vector3","prevCameraPos","cameraNear","cameraFar","maxBlend","vertexShader","blending","NoBlending","depthWrite","depthTest","toneMapped","glslVersion","GLSL3","isGroundProjectedEnv","c","material","isChildMaterialRenderable","visible","transparent","opacity","didCameraMove","lastCameraPosition","lastCameraQuaternion","position","distanceToSquared","quaternion","angleTo","getVisibleChildren","object","queue","objects","mesh","shift","children","defaultTemporalReprojectPassOptions","dilation","neighborhoodClamp","neighborhoodClampRadius","logTransform","depthDistance","worldDistance","reprojectSpecular","renderTarget","copyTextures","confidencePower","inputType","tmpProjectionMatrix","tmpProjectionMatrixInverse","tmpVec2","TemporalReprojectPass","Pass","setInputTexture","fullscreenMaterial","set","framebufferTexture","FramebufferTexture","format","minFilter","LinearFilter","magFilter","needsUpdate","accumulatedTexture","overrideAccumulatedTextures","reset","clock","getDelta","copy","_camera","view","updateProjectionMatrix","velocityDepthNormalPass","options","lastCameraTransform","near","far","setRenderTarget","copyFramebufferToTexture","matrixWorld","matrixWorldInverse","unjitter","clearViewOffset","needsSwap","Clock","Quaternion","_scene","WebGLRenderTarget","NearestFilter","depthBuffer","textures","forEach","index","defines","isPerspectiveCamera","PERSPECTIVE_CAMERA","toPrecision","indexOf","opt","Array","fill","join","TRAAEffect","Effect","temporalReprojectPass","update","inputBuffer","get","unjitteredProjectionMatrix","traa_compose","Map","DefaultOptions","CubeToEquirectEnvPass","generateEquirectEnvMap","cubeMap","maxWidth","w","source","data","widthEquirect","ceil","heightEquirect","pixelBuffer","Float32Array","readRenderTargetPixels","equirectEnvMap","DataTexture","RGBAFormat","FloatType","wrapS","ClampToEdgeWrapping","wrapT","LinearMipMapLinearFilter","mapping","EquirectangularReflectionMapping","basicVertexShader","blueNoiseSize","highestSignedInt","blueNoiseTexture","TextureLoader","load","blueNoiseImage","RepeatWrapping","colorSpace","NoColorSpace","setupBlueNoise","blueNoiseIndex","startIndex","random","blue_noise","useBlueNoise","GBufferMaterial","MeshPhysicalMaterial","onBeforeCompile","shader","resolution","cameraNotMovedFrames","gBufferMaterial","createGBufferMaterial","originalMaterial","copyAllPropsToGBufferMaterial","keys","startsWith","undefined","propsPrimitive","copyPropsToGBufferMaterial","prop","backgroundColor","Color","GBufferPass","initGBufferRenderTarget","DepthTexture","setGBufferMaterialInScene","visibleMeshes","cameraMoved","cachedOriginalMaterial","cachedMaterials","unsetGBufferMaterialInScene","background","WeakMap","workerOnMessage","isFloatType","flipY","_tables","_generateTables","buffer","ArrayBuffer","floatView","uint32View","Uint32Array","baseTable","shiftTable","e","mantissaTable","exponentTable","offsetTable","m","fromHalfFloat","val","colorToLuminance","r","binarySearchFindClosestIndexOf","array","targetValue","offset","lower","upper","mid","gatherData","marginalDataArray","conditionalDataArray","h","newY","ogIndex","newIndex","pdfConditional","cdfConditional","pdfMarginal","cdfMarginal","totalSumValue","cumulativeWeightMarginal","cumulativeRowWeight","weight","l","dist","row","col","newData","postMessage","blob","Blob","workerUrl","URL","createObjectURL","EquirectHdrInfoUniform","marginalWeights","conditionalWeights","updateFrom","size","Promise","resolve","worker","terminate","Worker","onmessage","totalSumWhole","totalSumDecimal","whiteTex","generateMipmaps","RedFormat","SSGIMaterial","gBufferTexture","directLightTexture","nearMulFar","nearMinusFar","farMinusNear","rayDistance","thickness","envBlur","maxEnvMapMipLevel","envMapInfo","envMapPosition","envMapSize","blueNoiseRepeat","steps","refineSteps","CUBEUV_TEXEL_WIDTH","CUBEUV_TEXEL_HEIGHT","CUBEUV_MAX_MIP","vWorldPosition","ssgi_utils","blackColor","SSGIPass","ssgiEffect","resolutionScale","gBufferPass","mask","layers","hasSelection","selection","layer","denoiser","bgColor","defaultFragmentShader","prev_skinning_pars_vertex","velocity_vertex_pars","skinning_pars_vertex","velocity_vertex_main","skinning_vertex","skinbase_vertex","velocity_fragment_pars","velocity_fragment_main","velocity_uniforms","prevVelocityMatrix","velocityMatrix","prevBoneTexture","boneTexture","normalMap","normalScale","uvTransform","Matrix3","VelocityDepthNormalMaterial","materialProps","copyNecessaryProps","newMaterial","keepMaterialMapUpdated","mrtMaterial","define","useKey","zeroVec2","saveBoneTexture","floatType","skeleton","boneMatrices","slice","updateVelocityDepthNormalMaterialBeforeRender","USE_SKINNING","BONE_TEXTURE","modelViewMatrix","multiplyMatrices","updateVelocityDepthNormalMaterialAfterRender","VelocityDepthNormalPass","setVelocityDepthNormalMaterialInScene","velocityDepthNormalMaterial","_floatType","roughnessMap","metalnessMap","matrix","unsetVelocityDepthNormalMaterialInScene","updateMatrixWorld","DenoiserComposePass","setSceneTexture","sceneTexture","diffuseGiTexture","specularGiTexture","ssgi_poisson_compose_functions","defaultPoissonBlurOptions","iterations","radius","phi","lumaPhi","depthPhi","normalPhi","PoissonDenoisePass","renderTargetA","renderTargetB","setGBufferPass","GBUFFER_TEXTURE","normalTexture","setnNormalTexture","setDepthTexture","horizontal","inputRenderTarget","isTextureSpecular","inputTexture2","roughnessPhi","specularPhi","renderTargetOptions","WebGLMultipleRenderTargets","defaultDenosierOptions","denoiseMode","Denoiser","denoiserComposePass","denoisePass","isOwnVelocityDepthNormalPass","denoise","composerInputTextures","GBufferDebugPass","defaultSSGIOptions","distance","denoiseIterations","denoiseKernel","denoiseDiffuse","denoiseSpecular","importanceSampling","missedRays","outputTexture","prototype","SSGIEffect","updateUsingRenderPass","isUsingRenderPass","ssgiPass","useDirectLight","makeOptionsReactive","ssgiPassFullscreenMaterialUniforms","ssgiPassFullscreenMaterialUniformsKeys","defineProperty","lastSize","gBufferDebugPass","modes","initialize","args","force","sceneRenderTarget","cubeToEquirectEnvPass","keepEnvMapUpdated","ssgiMaterial","environment","mapUuid","uuid","isCubeTexture","console","warn","USE_ENVMAP","then","sceneBuffer","hideMeshes","isScene","renderPass","fog","color","density","cancelAnimationFrame","rAF2","rAF","usingRenderPassRAF","requestAnimationFrame","wasUsingRenderPass","ssgi_compose","fog_pars_fragment","fog_fragment","isFogExp2","Selection","SRGBColorSpace","th","ssgiRenderPass","call","defaultOptions","samples","MotionBlurEffect","deltaTime","info","window","innerWidth","innerHeight","noiseTexture","velocityPass","motion_blur","formattedUniforms","toFixed","pointsIndex","defaultAOOptions","spp","distancePower","power","bias","useNormalPass","AOEffect","aoPass","aoDistance","configurable","normalPass","hasTRAA","some","skipRendering","effects","animatedNoise","ao_compose","createDepthTexture","NormalPass","useNormalTexture","normalInRgb","getVelocityDepthNormalPass","autoAdd","vdnPass","TRAAPlugin","_effect","MotionBlurPlugin"],"mappings":"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","x_google_ignoreList":[1]}
|
|
1
|
+
{"version":3,"file":"module.js","sources":["../src/EffectComposerPlugin.ts","../src/PassPlugin.ts","../src/ToneMappingPlugin.ts","../src/BloomPlugin.ts","../src/FXAAPlugin.ts","../src/SMAAPlugin.ts","../src/MSAAPlugin.ts","../src/realism-effects/temporal-reproject/utils/QuasirandomGenerator.js","../src/realism-effects/taa/TAAUtils.js","../src/realism-effects/ssgi/utils/Utils.js","../src/realism-effects/temporal-reproject/material/TemporalReprojectMaterial.js","../src/realism-effects/utils/SceneUtils.js","../src/realism-effects/temporal-reproject/TemporalReprojectPass.js","../src/realism-effects/traa/TRAAEffect.js","../src/realism-effects/ssgi/pass/CubeToEquirectEnvPass.js","../src/realism-effects/utils/blue_noise_rgba.png","../src/realism-effects/utils/BlueNoiseUtils.js","../src/realism-effects/gbuffer/material/GBufferMaterial.js","../src/realism-effects/gbuffer/GBufferPass.js","../src/realism-effects/ssgi/utils/EquirectHdrInfoUniform.js","../src/realism-effects/ssgi/material/SSGIMaterial.js","../src/realism-effects/ssgi/pass/SSGIPass.js","../src/realism-effects/temporal-reproject/material/VelocityDepthNormalMaterial.js","../src/realism-effects/gbuffer/utils/GBufferUtils.js","../src/realism-effects/temporal-reproject/pass/VelocityDepthNormalPass.js","../src/realism-effects/denoise/pass/DenoiserComposePass.js","../src/realism-effects/denoise/pass/PoissonDenoisePass.js","../src/realism-effects/denoise/Denoiser.js","../src/realism-effects/gbuffer/debug/GBufferDebugPass.js","../src/realism-effects/ssgi/SSGIOptions.js","../src/realism-effects/ssgi/SSGIEffect.js","../src/realism-effects/motion-blur/MotionBlurEffect.js","../src/realism-effects/ao/AOEffect.js","../src/getVelocityDepthNormalPass.ts","../src/TRAAPlugin.ts","../src/MotionBlurPlugin.ts"],"sourcesContent":["import { Plugin, Viewer } from \"@xviewer.js/core\";\nimport { EffectComposer, EffectPass, Pass, RenderPass } from \"postprocessing\";\nimport { HalfFloatType } from \"three\";\n\nexport class EffectComposerPlugin extends Plugin {\n\n static Instance(viewer: Viewer) {\n return viewer.getPlugin(EffectComposerPlugin, true);\n }\n\n get multisampling() {\n return this._composer.multisampling;\n }\n set multisampling(v: number) {\n this._composer.multisampling = v;\n }\n\n private _composer: EffectComposer;\n private _renderPass: RenderPass;\n private _outputPass: EffectPass;\n\n constructor(props: ConstructorParameters<typeof EffectComposer>[1]) {\n super();\n this.install = () => {\n const { renderer, scene, camera } = this.viewer;\n\n this._renderPass = new RenderPass(scene, camera);\n this._outputPass = new EffectPass(camera);\n\n this._composer = new EffectComposer(renderer, Object.assign({ frameBufferType: HalfFloatType }, props));\n this._composer.addPass(this._renderPass);\n this._composer.addPass(this._outputPass);\n\n this.viewer._onResize = (width: number, height: number) => this._composer.setSize(width, height);\n this.viewer._onRender = (dt: number) => this._composer.render(dt);\n }\n this.uninstall = () => {\n this._composer.dispose();\n }\n }\n\n getPass<T extends Pass>(constructor: (new (...args) => T) | Function) {\n return this._composer.passes.find(v => v.constructor === constructor) as T;\n }\n\n addPass<T extends Pass>(pass: T) {\n this._composer.addPass(pass, this._composer.passes.length - 1);\n this._checkOutputPass();\n return pass;\n }\n\n removePass(pass: Pass) {\n this._composer.removePass(pass);\n this._checkOutputPass();\n }\n\n activePass(pass: Pass, v: boolean) {\n pass.enabled = v;\n this._checkOutputPass();\n return pass;\n }\n\n private _checkOutputPass() {\n const count = this._composer.passes.filter(v => v.enabled && v.name !== \"VelocityDepthNormalPass\" && v !== this._outputPass).length;\n this._outputPass.enabled = this._composer.multisampling > 0 && count === 1;\n this._setRenderToScreen();\n }\n\n private _setRenderToScreen() {\n const passes = this._composer.passes;\n for (let k = 0, i = passes.length; i--;) {\n let pass = passes[i];\n if (pass.enabled && pass.name !== \"VelocityDepthNormalPass\" && k === 0) {\n k = i;\n }\n pass.renderToScreen = k === i;\n }\n }\n\n}","import { Plugin, property } from \"@xviewer.js/core\";\nimport { Pass } from \"postprocessing\";\nimport { EffectComposerPlugin } from \"./EffectComposerPlugin\";\n\nexport class PassPlugin<T extends Pass> extends Plugin {\n\n @property\n get enable() {\n return this.pass.enabled;\n }\n set enable(v: boolean) {\n this.setEnable(v);\n }\n\n get composer() {\n return EffectComposerPlugin.Instance(this.viewer);\n }\n\n pass: T;\n\n setEnable(v: boolean) {\n this.composer.activePass(this.pass, v);\n }\n\n}","import { property } from \"@xviewer.js/core\";\nimport { EffectPass, ToneMappingEffect, ToneMappingMode } from \"postprocessing\";\nimport { PassPlugin } from \"./PassPlugin\";\n\nexport class ToneMappingPlugin extends PassPlugin<EffectPass> {\n\n @property({ value: ToneMappingMode })\n get mode() {\n return this.effect.mode;\n }\n\n set mode(v: ToneMappingMode) {\n this.effect.mode = v;\n }\n\n effect: ToneMappingEffect;\n\n constructor(props: ConstructorParameters<typeof ToneMappingEffect>[0]) {\n super();\n this.install = () => {\n this.effect = new ToneMappingEffect(props);\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, this.effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n}","import { property } from \"@xviewer.js/core\";\nimport { BlendFunction, BloomEffect, EffectPass } from \"postprocessing\";\nimport { PassPlugin } from \"./PassPlugin\";\n\nexport class BloomPlugin extends PassPlugin<EffectPass> {\n\n @property({ min: 0, max: 2, step: 0.01 })\n get intensity() {\n return this.effect.intensity;\n }\n set intensity(v: number) {\n this.effect.intensity = v;\n }\n\n @property({ min: 0, max: 10, step: 0.01 })\n get luminanceThreshold() {\n return this.effect.luminanceMaterial.threshold;\n }\n set luminanceThreshold(v: number) {\n this.effect.luminanceMaterial.threshold = v;\n }\n\n @property({ min: 0, max: 10, step: 0.01 })\n get luminanceSmoothing() {\n return this.effect.luminanceMaterial.smoothing;\n }\n set luminanceSmoothing(v: number) {\n this.effect.luminanceMaterial.smoothing = v;\n }\n\n effect: BloomEffect;\n\n constructor(props?: ConstructorParameters<typeof BloomEffect>[0]) {\n super();\n this.install = () => {\n this.effect = new BloomEffect({ blendFunction: BlendFunction.ADD, ...props });\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, this.effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n\n}","import { EffectPass, FXAAEffect } from \"postprocessing\";\nimport { PassPlugin } from \"./PassPlugin\";\n\nexport class FXAAPlugin extends PassPlugin<EffectPass> {\n\n constructor() {\n super();\n this.install = () => {\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, new FXAAEffect()));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n}","import { property } from \"@xviewer.js/core\";\nimport { EdgeDetectionMode, EffectPass, PredicationMode, SMAAEffect, SMAAPreset } from \"postprocessing\";\nimport { PassPlugin } from \"./PassPlugin\";\n\nexport class SMAAPlugin extends PassPlugin<EffectPass> {\n private _preset: SMAAPreset = SMAAPreset.MEDIUM;\n\n @property({ value: SMAAPreset })\n get preset() {\n return this._preset;\n }\n set preset(v: SMAAPreset) {\n if (this._preset !==v) {\n this._preset = v;\n this.effect.applyPreset(v);\n }\n }\n\n @property({ value: EdgeDetectionMode })\n get edgeDetectionMode() {\n return this.effect.edgeDetectionMaterial.edgeDetectionMode;\n }\n set edgeDetectionMode(v: EdgeDetectionMode) {\n this.effect.edgeDetectionMaterial.edgeDetectionMode = v;\n }\n\n @property({ value: PredicationMode })\n get predicationMode() {\n return this.effect.edgeDetectionMaterial.predicationMode;\n }\n set predicationMode(v: PredicationMode) {\n this.effect.edgeDetectionMaterial.predicationMode = v;\n }\n\n effect: SMAAEffect;\n\n constructor(props: ConstructorParameters<typeof SMAAEffect>[0] = {}) {\n super();\n this.install = () => {\n this.effect = new SMAAEffect(props);\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, this.effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n}","import { Plugin, property } from \"@xviewer.js/core\";\nimport { EffectComposerPlugin } from \"./EffectComposerPlugin\";\n\nexport class MSAAPlugin extends Plugin {\n\n @property\n get enable() {\n return this.composer.multisampling > 0;\n }\n set enable(v: boolean) {\n this.composer.multisampling = v ? this._maxSamples : 0;\n }\n\n get composer() {\n return EffectComposerPlugin.Instance(this.viewer);\n }\n\n private _maxSamples: number = 4;\n\n constructor() {\n super();\n this.install = () => {\n const { renderer } = this.viewer;\n this._maxSamples = Math.min(4, renderer.capabilities.maxSamples);\n this.composer.multisampling = this._maxSamples;\n }\n this.uninstall = () => {\n this.composer.multisampling = 0;\n }\n }\n}","// from: https://news.ycombinator.com/item?id=17876741\n// reference: http://extremelearning.com.au/unreasonable-effectiveness-of-quasirandom-sequences/\n\n// eslint-disable-next-line no-unused-vars\nconst harmoniousNumber = (n = 2, value = 0, depth = 100) => {\n\tif (depth === 0) return value\n\n\treturn (1 + harmoniousNumber(n, value, depth - 1)) ** (1 / n)\n}\n\nconst g = 1.32471795724474602596090885447809 // Plastic number\nconst a1 = 1.0 / g\nconst a2 = 1.0 / (g * g)\nconst base = 1.1127756842787055 // harmoniousNumber(7), yields better coverage compared to using 0.5\n\nexport const generateR2 = count => {\n\tconst points = []\n\n\tfor (let n = 0; n < count; n++) {\n\t\tpoints.push([(base + a1 * n) % 1, (base + a2 * n) % 1])\n\t}\n\n\treturn points\n}\n\nexport const getR2Index = n => {\n\treturn [(base + a1 * n) % 1, (base + a2 * n) % 1]\n}\n\nexport const getR3Index = n => {\n\tconst g = 1.2207440846057596\n\tconst a1 = 1.0 / g\n\tconst a2 = 1.0 / (g * g)\n\tconst a3 = 1.0 / (g * g * g)\n\n\treturn [(base + a1 * n) % 1, (base + a2 * n) % 1, (base + a3 * n) % 1]\n}\n\nexport const generateR3 = count => {\n\tconst g = 1.32471795724474602596090885447809 // Plastic number\n\tconst a1 = 1.0 / g\n\tconst a2 = 1.0 / (g * g)\n\tconst a3 = 1.0 / (g * g * g)\n\tconst base = 1.1127756842787055 // harmoniousNumber(7), yields better coverage compared to using 0.5\n\n\tconst points = []\n\n\tfor (let n = 0; n < count; n++) {\n\t\tpoints.push([(base + a1 * n) % 1, (base + a2 * n) % 1, (base + a3 * n) % 1])\n\t}\n\n\treturn points\n}\n","import { generateR2 } from \"../temporal-reproject/utils/QuasirandomGenerator\"\n\nexport const r2Sequence = generateR2(256).map(([a, b]) => [a - 0.5, b - 0.5])\n\nexport function jitter(width, height, camera, frame, jitterScale = 1) {\n\tconst [x, y] = r2Sequence[frame % r2Sequence.length]\n\n\tif (camera.setViewOffset) {\n\t\tcamera.setViewOffset(width, height, x * jitterScale, y * jitterScale, width, height)\n\t}\n}\n","import { ShaderChunk, ShaderLib, UniformsUtils, Vector4 } from \"three\"\n\nexport const generateCubeUVSize = parameters => {\n\tconst imageHeight = parameters.envMapCubeUVHeight\n\n\tif (imageHeight === null) return null\n\n\tconst maxMip = Math.log2(imageHeight) - 2\n\n\tconst texelHeight = 1.0 / imageHeight\n\n\tconst texelWidth = 1.0 / (3 * Math.max(Math.pow(2, maxMip), 7 * 16))\n\n\treturn { texelWidth, texelHeight, maxMip }\n}\n\nexport const setupEnvMap = (ssgiMaterial, envMap, envMapCubeUVHeight) => {\n\tssgiMaterial.uniforms.envMap.value = envMap\n\n\tconst envMapCubeUVSize = generateCubeUVSize({ envMapCubeUVHeight })\n\n\tssgiMaterial.defines.ENVMAP_TYPE_CUBE_UV = \"\"\n\tssgiMaterial.defines.CUBEUV_TEXEL_WIDTH = envMapCubeUVSize.texelWidth\n\tssgiMaterial.defines.CUBEUV_TEXEL_HEIGHT = envMapCubeUVSize.texelHeight\n\tssgiMaterial.defines.CUBEUV_MAX_MIP = envMapCubeUVSize.maxMip + \".0\"\n\n\tssgiMaterial.needsUpdate = true\n}\n\nexport const getMaxMipLevel = texture => {\n\tconst { width, height } = texture.image\n\n\treturn Math.floor(Math.log2(Math.max(width, height))) + 1\n}\n\nexport const createGlobalDisableIblRadianceUniform = () => {\n\tif (!ShaderChunk.envmap_physical_pars_fragment.includes(\"iblRadianceDisabled\")) {\n\t\tShaderChunk.envmap_physical_pars_fragment = ShaderChunk.envmap_physical_pars_fragment.replace(\n\t\t\t\"vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\",\n\t\t\t/* glsl */ `\n\t\tuniform bool iblRadianceDisabled;\n\t\n\t\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t if(iblRadianceDisabled) return vec3(0.);\n\t\t`\n\t\t)\n\t}\n\n\tif (\"iblRadianceDisabled\" in ShaderLib.physical.uniforms) return ShaderLib.physical.uniforms[\"iblRadianceDisabled\"]\n\n\tconst globalIblRadianceDisabledUniform = {\n\t\tvalue: false\n\t}\n\n\tShaderLib.physical.uniforms.iblRadianceDisabled = globalIblRadianceDisabledUniform\n\n\tconst { clone } = UniformsUtils\n\tUniformsUtils.clone = uniforms => {\n\t\tconst result = clone(uniforms)\n\n\t\tif (\"iblRadianceDisabled\" in uniforms) {\n\t\t\tresult.iblRadianceDisabled = globalIblRadianceDisabledUniform\n\t\t}\n\n\t\treturn result\n\t}\n\n\treturn globalIblRadianceDisabledUniform\n}\n\n// source: https://github.com/mrdoob/three.js/blob/b9bc47ab1978022ab0947a9bce1b1209769b8d91/src/renderers/webgl/WebGLProgram.js#L228\n// Unroll Loops\n\nconst unrollLoopPattern =\n\t/#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g\n\nexport function unrollLoops(string) {\n\treturn string.replace(unrollLoopPattern, loopReplacer)\n}\n\nfunction loopReplacer(match, start, end, snippet) {\n\tlet string = \"\"\n\n\tfor (let i = parseInt(start); i < parseInt(end); i++) {\n\t\tstring += snippet.replace(/\\[\\s*i\\s*\\]/g, \"[ \" + i + \" ]\").replace(/UNROLLED_LOOP_INDEX/g, i)\n\t}\n\n\treturn string\n}\n\n//\n\nexport const splitIntoGroupsOfVector4 = arr => {\n\tconst result = []\n\tfor (let i = 0; i < arr.length; i += 4) {\n\t\tresult.push(new Vector4(...arr.slice(i, i + 4)))\n\t}\n\n\treturn result\n}\n\n// this function generates a Vogel distribution for a given number of samples\n// source: https://www.shadertoy.com/view/4t2SDh\nexport const generateVogelDistribution = (numSamples, scale = 1) => {\n\tconst samples = []\n\tconst goldenAngle = Math.PI * (3 - Math.sqrt(5))\n\n\tfor (let i = 0; i < numSamples; i++) {\n\t\tconst t = i / numSamples\n\t\tconst r = Math.sqrt(t)\n\t\tconst theta = i * goldenAngle\n\n\t\tconst x = r * Math.cos(theta)\n\t\tconst y = r * Math.sin(theta)\n\n\t\tsamples.push({ x, y })\n\t}\n\n\treturn samples\n}\n","/* eslint-disable camelcase */\nimport { GLSL3, Matrix4, NoBlending } from \"three\"\nimport { Vector3 } from \"three\"\nimport { ShaderMaterial, Uniform, Vector2 } from \"three\"\nimport vertexShader from \"../../utils/shader/basic.vert\"\nimport fragmentShader from \"../shader/temporal_reproject.frag\"\nimport reproject from \"../shader/reproject.frag\"\nimport gbuffer_packing from \"../../gbuffer/shader/gbuffer_packing.glsl\"\nimport { unrollLoops } from \"../../ssgi/utils/Utils\"\n\nexport class TemporalReprojectMaterial extends ShaderMaterial {\n\tconstructor(textureCount = 1) {\n\t\tlet finalFragmentShader = fragmentShader\n\t\t\t.replace(\"#include <reproject>\", reproject)\n\t\t\t.replace(\"#include <gbuffer_packing>\", gbuffer_packing)\n\n\t\tlet definitions = \"\"\n\t\tfor (let i = 0; i < textureCount; i++) {\n\t\t\tdefinitions += /* glsl */ `\n\t\t\t\tuniform sampler2D accumulatedTexture${i};\n\n\t\t\t\tlayout(location = ${i}) out vec4 gOutput${i};\n\t\t\t`\n\t\t}\n\n\t\tfinalFragmentShader = definitions + finalFragmentShader.replaceAll(\"textureCount\", textureCount)\n\t\tfinalFragmentShader = unrollLoops(finalFragmentShader)\n\n\t\tconst matches2 = finalFragmentShader.matchAll(/accumulatedTexture\\[\\s*[0-9]+\\s*]/g)\n\n\t\tfor (const [key] of matches2) {\n\t\t\tconst number = key.replace(/[^0-9]/g, \"\")\n\t\t\tfinalFragmentShader = finalFragmentShader.replace(key, \"accumulatedTexture\" + number)\n\t\t}\n\n\t\tconst matches3 = finalFragmentShader.matchAll(/gOutput\\[\\s*[0-9]+\\s*]/g)\n\n\t\tfor (const [key] of matches3) {\n\t\t\tconst number = key.replace(/[^0-9]/g, \"\")\n\t\t\tfinalFragmentShader = finalFragmentShader.replace(key, \"gOutput\" + number)\n\t\t}\n\n\t\tsuper({\n\t\t\ttype: \"TemporalReprojectMaterial\",\n\t\t\tuniforms: {\n\t\t\t\tinputTexture: new Uniform(null),\n\t\t\t\tvelocityTexture: new Uniform(null),\n\t\t\t\tdepthTexture: new Uniform(null),\n\t\t\t\tlastVelocityTexture: new Uniform(null),\n\t\t\t\tneighborhoodClampIntensity: new Uniform(0),\n\t\t\t\tfullAccumulate: new Uniform(false),\n\t\t\t\tkeepData: new Uniform(1),\n\t\t\t\tdelta: new Uniform(0),\n\t\t\t\tinvTexSize: new Uniform(new Vector2()),\n\t\t\t\tprojectionMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprojectionMatrixInverse: new Uniform(new Matrix4()),\n\t\t\t\tcameraMatrixWorld: new Uniform(new Matrix4()),\n\t\t\t\tviewMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprevViewMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprevCameraMatrixWorld: new Uniform(new Matrix4()),\n\t\t\t\tprevProjectionMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprevProjectionMatrixInverse: new Uniform(new Matrix4()),\n\t\t\t\tcameraPos: new Uniform(new Vector3()),\n\t\t\t\tprevCameraPos: new Uniform(new Vector3()),\n\t\t\t\tcameraNear: new Uniform(0),\n\t\t\t\tcameraFar: new Uniform(0),\n\t\t\t\tmaxBlend: new Uniform(0)\n\t\t\t},\n\t\t\tvertexShader,\n\t\t\tfragmentShader: finalFragmentShader,\n\t\t\tblending: NoBlending,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t\ttoneMapped: false,\n\t\t\tglslVersion: GLSL3\n\t\t})\n\n\t\tfor (let i = 0; i < textureCount; i++) {\n\t\t\tthis.uniforms[\"inputTexture\" + i] = new Uniform(null)\n\t\t\tthis.uniforms[\"accumulatedTexture\" + i] = new Uniform(null)\n\t\t}\n\t}\n}\n","export const isGroundProjectedEnv = c => {\n\treturn c.material.fragmentShader?.includes(\n\t\t\"float intersection2 = diskIntersectWithBackFaceCulling( camPos, p, h, vec3( 0.0, 1.0, 0.0 ), radius );\"\n\t)\n}\n\nexport const isChildMaterialRenderable = (c, material = c.material) => {\n\treturn (\n\t\tmaterial.visible &&\n\t\tmaterial.depthWrite &&\n\t\tmaterial.depthTest &&\n\t\t(!material.transparent || material.opacity > 0) &&\n\t\t!isGroundProjectedEnv(c)\n\t)\n}\n\nexport const didCameraMove = (camera, lastCameraPosition, lastCameraQuaternion) => {\n\tif (camera.position.distanceToSquared(lastCameraPosition) > 0.000001) {\n\t\treturn true\n\t}\n\n\tif (camera.quaternion.angleTo(lastCameraQuaternion) > 0.001) {\n\t\treturn true\n\t}\n\n\treturn false\n}\n\nexport const getVisibleChildren = object => {\n\tconst queue = [object]\n\tconst objects = []\n\n\twhile (queue.length !== 0) {\n\t\tconst mesh = queue.shift()\n\t\tif (mesh.material) objects.push(mesh)\n\n\t\tfor (const c of mesh.children) {\n\t\t\tif (c.visible) queue.push(c)\n\t\t}\n\t}\n\n\treturn objects\n}\n","import { Pass } from \"postprocessing\"\nimport {\n\tClock,\n\tFramebufferTexture,\n\tLinearFilter,\n\tMatrix4,\n\tNearestFilter,\n\tQuaternion,\n\tVector2,\n\tVector3,\n\tWebGLRenderTarget\n} from \"three\"\nimport { jitter } from \"../taa/TAAUtils\"\nimport { TemporalReprojectMaterial } from \"./material/TemporalReprojectMaterial\"\nimport { didCameraMove } from \"../utils/SceneUtils\"\n\nexport const defaultTemporalReprojectPassOptions = {\n\tdilation: false,\n\tfullAccumulate: false,\n\tneighborhoodClamp: false,\n\tneighborhoodClampRadius: 1,\n\tneighborhoodClampIntensity: 1,\n\tmaxBlend: 1,\n\tlogTransform: false,\n\tdepthDistance: 2,\n\tworldDistance: 4,\n\treprojectSpecular: false,\n\trenderTarget: null,\n\tcopyTextures: true,\n\tconfidencePower: 0.75,\n\tinputType: \"diffuse\"\n}\n\nconst tmpProjectionMatrix = new Matrix4()\nconst tmpProjectionMatrixInverse = new Matrix4()\nconst tmpVec2 = new Vector2()\n\nexport class TemporalReprojectPass extends Pass {\n\tneedsSwap = false\n\n\toverrideAccumulatedTextures = []\n\tclock = new Clock()\n\tr2Sequence = []\n\tframe = 0\n\tlastCameraTransform = {\n\t\tposition: new Vector3(),\n\t\tquaternion: new Quaternion()\n\t}\n\n\tconstructor(\n\t\tscene,\n\t\tcamera,\n\t\tvelocityDepthNormalPass,\n\t\ttexture,\n\t\ttextureCount,\n\t\toptions = defaultTemporalReprojectPassOptions\n\t) {\n\t\tsuper(\"TemporalReprojectPass\")\n\n\t\tthis._scene = scene\n\t\tthis._camera = camera\n\t\tthis.textureCount = textureCount\n\t\toptions = { ...defaultTemporalReprojectPassOptions, ...options }\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\tcount: textureCount,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: texture.type,\n\t\t\tdepthBuffer: false\n\t\t})\n\n\t\tthis.renderTarget.textures.forEach(\n\t\t\t(texture, index) => (texture.name = \"TemporalReprojectPass.accumulatedTexture\" + index)\n\t\t)\n\n\t\tthis.fullscreenMaterial = new TemporalReprojectMaterial(textureCount)\n\t\tthis.fullscreenMaterial.defines.textureCount = textureCount\n\n\t\tif (options.dilation) this.fullscreenMaterial.defines.dilation = \"\"\n\t\tif (options.neighborhoodClamp) this.fullscreenMaterial.defines.neighborhoodClamp = \"\"\n\t\tif (options.logTransform) this.fullscreenMaterial.defines.logTransform = \"\"\n\t\tif (camera.isPerspectiveCamera) this.fullscreenMaterial.defines.PERSPECTIVE_CAMERA = \"\"\n\t\tthis.fullscreenMaterial.defines.neighborhoodClampRadius = parseInt(options.neighborhoodClampRadius)\n\n\t\tthis.fullscreenMaterial.defines.depthDistance = options.depthDistance.toPrecision(5)\n\t\tthis.fullscreenMaterial.defines.worldDistance = options.worldDistance.toPrecision(5)\n\n\t\tthis.fullscreenMaterial.uniforms.fullAccumulate.value = options.fullAccumulate\n\t\tthis.fullscreenMaterial.uniforms.neighborhoodClampIntensity.value = options.neighborhoodClampIntensity\n\t\tthis.fullscreenMaterial.uniforms.maxBlend.value = options.maxBlend\n\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrix.value = camera.projectionMatrix.clone()\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrixInverse.value = camera.projectionMatrixInverse.clone()\n\t\tthis.fullscreenMaterial.uniforms.cameraMatrixWorld.value = camera.matrixWorld\n\t\tthis.fullscreenMaterial.uniforms.viewMatrix.value = camera.matrixWorldInverse\n\t\tthis.fullscreenMaterial.uniforms.cameraPos.value = camera.position\n\n\t\tthis.fullscreenMaterial.uniforms.prevViewMatrix.value = camera.matrixWorldInverse.clone()\n\t\tthis.fullscreenMaterial.uniforms.prevCameraMatrixWorld.value = camera.matrixWorld.clone()\n\t\tthis.fullscreenMaterial.uniforms.prevProjectionMatrix.value = camera.projectionMatrix.clone()\n\t\tthis.fullscreenMaterial.uniforms.prevProjectionMatrixInverse.value = camera.projectionMatrixInverse.clone()\n\n\t\tthis.fullscreenMaterial.uniforms.velocityTexture.value = velocityDepthNormalPass.renderTarget.texture\n\t\tthis.fullscreenMaterial.uniforms.depthTexture.value = velocityDepthNormalPass.depthTexture\n\n\t\tthis.fullscreenMaterial.defines.inputType =\n\t\t\t[\"diffuseSpecular\", \"diffuse\", \"specular\"].indexOf(options.inputType) ?? 1\n\n\t\tfor (const opt of [\"reprojectSpecular\", \"neighborhoodClamp\"]) {\n\t\t\tlet value = options[opt]\n\n\t\t\tif (typeof value !== \"array\") value = Array(textureCount).fill(value)\n\n\t\t\tthis.fullscreenMaterial.defines[opt] = /* glsl */ `bool[](${value.join(\", \")})`\n\t\t}\n\n\t\tthis.fullscreenMaterial.defines.confidencePower = options.confidencePower.toPrecision(5)\n\n\t\tthis.options = options\n\t\tthis.velocityDepthNormalPass = velocityDepthNormalPass\n\n\t\tthis.fullscreenMaterial.uniforms.inputTexture.value = texture\n\t}\n\n\tsetInputTexture(texture) {\n\t\tthis.fullscreenMaterial.uniforms.inputTexture.value = texture\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.renderTarget.dispose()\n\t\tthis.fullscreenMaterial.dispose()\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width, height)\n\n\t\tthis.fullscreenMaterial.uniforms.invTexSize.value.set(1 / width, 1 / height)\n\n\t\tthis.framebufferTexture?.dispose()\n\n\t\tconst inputTexture = this.fullscreenMaterial.uniforms.inputTexture.value\n\n\t\tthis.framebufferTexture = new FramebufferTexture(width, height, inputTexture.format)\n\t\tthis.framebufferTexture.type = inputTexture.type\n\t\tthis.framebufferTexture.minFilter = LinearFilter\n\t\tthis.framebufferTexture.magFilter = LinearFilter\n\n\t\tthis.framebufferTexture.needsUpdate = true\n\n\t\tfor (let i = 0; i < this.textureCount; i++) {\n\t\t\tconst accumulatedTexture = this.overrideAccumulatedTextures[i] ?? this.framebufferTexture\n\t\t\tthis.fullscreenMaterial.uniforms[\"accumulatedTexture\" + i].value = accumulatedTexture\n\t\t}\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture;\n\t}\n\n\treset() {\n\t\tthis.fullscreenMaterial.uniforms.keepData.value = 0\n\t}\n\n\trender(renderer) {\n\t\tthis.frame = (this.frame + 1) % 4096\n\n\t\tconst delta = Math.min(1 / 10, this.clock.getDelta())\n\t\tthis.fullscreenMaterial.uniforms.delta.value = delta\n\n\t\ttmpProjectionMatrix.copy(this._camera.projectionMatrix)\n\t\ttmpProjectionMatrixInverse.copy(this._camera.projectionMatrixInverse)\n\n\t\tif (this._camera.view) this._camera.view.enabled = false\n\t\tthis._camera.updateProjectionMatrix()\n\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrix.value.copy(this._camera.projectionMatrix)\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrixInverse.value.copy(this._camera.projectionMatrixInverse)\n\t\tthis.fullscreenMaterial.uniforms.lastVelocityTexture.value = this.velocityDepthNormalPass.lastVelocityTexture\n\n\t\tthis.fullscreenMaterial.uniforms.fullAccumulate.value =\n\t\t\tthis.options.fullAccumulate &&\n\t\t\t!didCameraMove(this._camera, this.lastCameraTransform.position, this.lastCameraTransform.quaternion)\n\n\t\tthis.lastCameraTransform.position.copy(this._camera.position)\n\t\tthis.lastCameraTransform.quaternion.copy(this._camera.quaternion)\n\n\t\tif (this._camera.view) this._camera.view.enabled = true\n\t\tthis._camera.projectionMatrix.copy(tmpProjectionMatrix)\n\t\tthis._camera.projectionMatrixInverse.copy(tmpProjectionMatrixInverse)\n\n\t\tthis.fullscreenMaterial.uniforms.cameraNear.value = this._camera.near\n\t\tthis.fullscreenMaterial.uniforms.cameraFar.value = this._camera.far\n\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.render(this.scene, this.camera)\n\n\t\tthis.fullscreenMaterial.uniforms.keepData.value = 1\n\n\t\tif (this.overrideAccumulatedTextures.length === 0) {\n\t\t\tthis.framebufferTexture.needsUpdate = true\n\t\t\trenderer.copyFramebufferToTexture(tmpVec2, this.framebufferTexture)\n\t\t}\n\n\t\t// save last transformations\n\t\tthis.fullscreenMaterial.uniforms.prevCameraMatrixWorld.value.copy(this._camera.matrixWorld)\n\t\tthis.fullscreenMaterial.uniforms.prevViewMatrix.value.copy(this._camera.matrixWorldInverse)\n\n\t\tthis.fullscreenMaterial.uniforms.prevProjectionMatrix.value.copy(\n\t\t\tthis.fullscreenMaterial.uniforms.projectionMatrix.value\n\t\t)\n\t\tthis.fullscreenMaterial.uniforms.prevProjectionMatrixInverse.value.copy(\n\t\t\tthis.fullscreenMaterial.uniforms.projectionMatrixInverse.value\n\t\t)\n\n\t\tthis.fullscreenMaterial.uniforms.prevCameraPos.value.copy(this._camera.position)\n\t}\n\n\tjitter(jitterScale = 1) {\n\t\tthis.unjitter()\n\n\t\tjitter(this.renderTarget.width, this.renderTarget.height, this._camera, this.frame, jitterScale)\n\t}\n\n\tunjitter() {\n\t\tif (this._camera.clearViewOffset) this._camera.clearViewOffset()\n\t}\n}\n","import { Effect } from \"postprocessing\"\nimport { Uniform } from \"three\"\nimport {\n\tTemporalReprojectPass,\n\tdefaultTemporalReprojectPassOptions\n} from \"../temporal-reproject/TemporalReprojectPass.js\"\n// eslint-disable-next-line camelcase\nimport traa_compose from \"./shader/traa_compose.frag\"\n\nexport class TRAAEffect extends Effect {\n\tconstructor(scene, camera, velocityDepthNormalPass, options = defaultTemporalReprojectPassOptions) {\n\t\tsuper(\"TRAAEffect\", traa_compose, {\n\t\t\ttype: \"FinalTRAAEffectMaterial\",\n\t\t\tuniforms: new Map([[\"accumulatedTexture\", new Uniform(null)]])\n\t\t})\n\n\t\tthis._scene = scene\n\t\tthis._camera = camera\n\t\tthis.velocityDepthNormalPass = velocityDepthNormalPass\n\n\t\toptions = {\n\t\t\t...options,\n\t\t\t...{\n\t\t\t\tmaxBlend: 0.9,\n\t\t\t\tneighborhoodClamp: true,\n\t\t\t\tneighborhoodClampIntensity: 1,\n\t\t\t\tneighborhoodClampRadius: 1,\n\t\t\t\tlogTransform: true,\n\t\t\t\tconfidencePower: 4\n\t\t\t}\n\t\t}\n\n\t\tthis.options = { ...defaultTemporalReprojectPassOptions, ...options }\n\n\t\tthis.setSize(options.width, options.height)\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.temporalReprojectPass?.setSize(width, height)\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.temporalReprojectPass.dispose()\n\t}\n\n\treset() {\n\t\tthis.temporalReprojectPass.reset()\n\t}\n\n\tupdate(renderer, inputBuffer) {\n\t\tif (!this.temporalReprojectPass) {\n\t\t\tthis.temporalReprojectPass = new TemporalReprojectPass(\n\t\t\t\tthis._scene,\n\t\t\t\tthis._camera,\n\t\t\t\tthis.velocityDepthNormalPass,\n\t\t\t\tinputBuffer.texture,\n\t\t\t\t1,\n\t\t\t\tthis.options\n\t\t\t)\n\t\t\tthis.temporalReprojectPass.setSize(inputBuffer.width, inputBuffer.height)\n\n\t\t\tthis.uniforms.get(\"accumulatedTexture\").value = this.temporalReprojectPass.texture\n\t\t}\n\n\t\tthis.temporalReprojectPass.setInputTexture(inputBuffer.texture);\n\n\t\tthis.temporalReprojectPass.unjitter()\n\t\tthis.unjitteredProjectionMatrix = this._camera.projectionMatrix.clone()\n\n\t\tthis._camera.projectionMatrix.copy(this.unjitteredProjectionMatrix)\n\n\t\tthis.temporalReprojectPass.jitter()\n\n\t\tthis.temporalReprojectPass.render(renderer)\n\t}\n}\n\nTRAAEffect.DefaultOptions = defaultTemporalReprojectPassOptions\n","import { Pass } from \"postprocessing\"\nimport {\n\tClampToEdgeWrapping,\n\tDataTexture,\n\tEquirectangularReflectionMapping,\n\tFloatType,\n\tLinearMipMapLinearFilter,\n\tNoBlending,\n\tRGBAFormat,\n\tShaderMaterial,\n\tWebGLRenderTarget\n} from \"three\"\nimport basicVertexShader from \"../../utils/shader/basic.vert\"\n\nexport class CubeToEquirectEnvPass extends Pass {\n\tconstructor() {\n\t\tsuper(\"CubeToEquirectEnvPass\")\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, { depthBuffer: false, type: FloatType })\n\n\t\tthis.fullscreenMaterial = new ShaderMaterial({\n\t\t\tfragmentShader: /* glsl */ `\n varying vec2 vUv;\n\t\t\tuniform samplerCube cubeMap;\n\n\t\t\t#define M_PI 3.1415926535897932384626433832795\n\t\t\t\n\t\t\t// source: https://github.com/spite/CubemapToEquirectangular/blob/master/src/CubemapToEquirectangular.js\n void main() {\n\t\t\t\tfloat longitude = vUv.x * 2. * M_PI - M_PI + M_PI / 2.;\n\t\t\t\tfloat latitude = vUv.y * M_PI;\n\n\t\t\t\tvec3 dir = vec3(\n\t\t\t\t\t- sin( longitude ) * sin( latitude ),\n\t\t\t\t\tcos( latitude ),\n\t\t\t\t\t- cos( longitude ) * sin( latitude )\n\t\t\t\t);\n\n\t\t\t\tdir.y = -dir.y;\n\n\t\t\t\tgl_FragColor = textureCube( cubeMap, dir );\n }\n `,\n\t\t\tvertexShader: basicVertexShader,\n\t\t\tuniforms: {\n\t\t\t\tcubeMap: { value: null }\n\t\t\t},\n\t\t\tblending: NoBlending,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t\ttoneMapped: false\n\t\t})\n\t}\n\n\tdispose() {\n\t\tthis.renderTarget.dispose()\n\t}\n\n\tgenerateEquirectEnvMap(renderer, cubeMap, width = null, height = null, maxWidth = 4096) {\n\t\tif (width === null && height === null) {\n\t\t\tconst w = cubeMap.source.data[0].width\n\t\t\tconst widthEquirect = 2 ** Math.ceil(Math.log2(2 * w * 3 ** 0.5))\n\t\t\tconst heightEquirect = 2 ** Math.ceil(Math.log2(w * 3 ** 0.5))\n\n\t\t\twidth = widthEquirect\n\t\t\theight = heightEquirect\n\t\t}\n\n\t\tif (width > maxWidth) {\n\t\t\twidth = maxWidth\n\t\t\theight = maxWidth / 2\n\t\t}\n\n\t\tthis.renderTarget.setSize(width, height)\n\t\tthis.fullscreenMaterial.uniforms.cubeMap.value = cubeMap\n\n\t\tconst { renderTarget } = this\n\n\t\trenderer.setRenderTarget(renderTarget)\n\t\trenderer.render(this.scene, this.camera)\n\n\t\t// Create a new Float32Array to store the pixel data\n\t\tconst pixelBuffer = new Float32Array(width * height * 4)\n\t\trenderer.readRenderTargetPixels(renderTarget, 0, 0, width, height, pixelBuffer)\n\n\t\t// Create a new data texture\n\t\tconst equirectEnvMap = new DataTexture(pixelBuffer, width, height, RGBAFormat, FloatType)\n\n\t\t// Set texture options\n\t\tequirectEnvMap.wrapS = ClampToEdgeWrapping\n\t\tequirectEnvMap.wrapT = ClampToEdgeWrapping\n\t\tequirectEnvMap.minFilter = LinearMipMapLinearFilter\n\t\tequirectEnvMap.magFilter = LinearMipMapLinearFilter\n\t\tequirectEnvMap.needsUpdate = true\n\n\t\tequirectEnvMap.mapping = EquirectangularReflectionMapping\n\n\t\treturn equirectEnvMap\n\t}\n}\n","var img = \"data:image/png;base64,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\";\n export default img;","/* eslint-disable camelcase */\nimport { NearestFilter, NoColorSpace, RepeatWrapping, TextureLoader, Vector2 } from \"three\"\nimport blueNoiseImage from \"./blue_noise_rgba.png\"\nimport blue_noise from \"../utils/shader/blue_noise.glsl\"\n\nconst blueNoiseSize = 128\nconst highestSignedInt = 0x7fffffff\n\nconst blueNoiseTexture = new TextureLoader().load(blueNoiseImage, () => {\n\tblueNoiseTexture.minFilter = NearestFilter\n\tblueNoiseTexture.magFilter = NearestFilter\n\tblueNoiseTexture.wrapS = RepeatWrapping\n\tblueNoiseTexture.wrapT = RepeatWrapping\n\tblueNoiseTexture.colorSpace = NoColorSpace\n})\n\nexport const setupBlueNoise = fragmentShader => {\n\tlet blueNoiseIndex = 0\n\tconst startIndex = Math.floor(Math.random() * highestSignedInt)\n\n\tconst uniforms = {\n\t\tblueNoiseTexture: { value: blueNoiseTexture },\n\t\tblueNoiseSize: { value: new Vector2(blueNoiseSize, blueNoiseSize) },\n\t\tblueNoiseIndex: {\n\t\t\tget value() {\n\t\t\t\tblueNoiseIndex = (startIndex + blueNoiseIndex + 1) % highestSignedInt\n\t\t\t\treturn blueNoiseIndex\n\t\t\t},\n\t\t\tset value(v) {\n\t\t\t\tblueNoiseIndex = v\n\t\t\t}\n\t\t}\n\t}\n\n\tfragmentShader = fragmentShader.replace(\"uniform vec2 resolution;\", \"uniform vec2 resolution;\\n\" + blue_noise)\n\n\treturn { uniforms, fragmentShader }\n}\n\nexport const useBlueNoise = material => {\n\tconst { fragmentShader, uniforms } = setupBlueNoise(material.fragmentShader)\n\tmaterial.fragmentShader = fragmentShader\n\tmaterial.uniforms = { ...material.uniforms, ...uniforms }\n\n\tmaterial.needsUpdate = true\n}\n","/* eslint-disable camelcase */\nimport { MeshPhysicalMaterial, Vector2 } from \"three\"\nimport gbuffer_packing from \"../shader/gbuffer_packing.glsl\"\nimport { setupBlueNoise } from \"../../utils/BlueNoiseUtils\"\n\nclass GBufferMaterial extends MeshPhysicalMaterial {\n\tonBeforeCompile(shader) {\n\t\tthis.uniforms = shader.uniforms\n\n\t\tshader.uniforms.resolution = { value: new Vector2(1, 1) }\n\t\tshader.uniforms.cameraNotMovedFrames = { value: 0 }\n\n\t\t// delete all includes that have the pattern \"#include <lights_something>\"\n\t\tshader.vertexShader = shader.vertexShader.replace(/#include <lights_.*>/g, \"\")\n\t\tshader.fragmentShader = shader.fragmentShader.replace(/#include <lights_.*>/g, \"\")\n\n\t\t// delete all includes that have the pattern \"#include <alpha...>\"\n\t\tshader.vertexShader = shader.vertexShader.replace(/#include <alpha.*>/g, \"\")\n\t\tshader.fragmentShader = shader.fragmentShader.replace(/#include <alpha.*>/g, \"\")\n\n\t\t// delete all includes that have the pattern \"#include <aomap...>\"\n\t\tshader.vertexShader = shader.vertexShader.replace(/#include <aomap.*>/g, \"\")\n\t\tshader.fragmentShader = shader.fragmentShader.replace(/#include <aomap.*>/g, \"\")\n\n\t\t// delete all includes that have the pattern \"#include <lightmap...>\"\n\t\tshader.vertexShader = shader.vertexShader.replace(/#include <lightmap.*>/g, \"\")\n\t\tshader.fragmentShader = shader.fragmentShader.replace(/#include <lightmap.*>/g, \"\")\n\n\t\t// delete all includes that have the pattern \"#include <alphahash...>\"\n\t\tshader.vertexShader = shader.vertexShader.replace(/#include <alphahash.*>/g, \"\")\n\t\tshader.fragmentShader = shader.fragmentShader.replace(/#include <alphahash.*>/g, \"\")\n\n\t\t// delete all includes that have the pattern \"#include <alphatest...>\"\n\t\tshader.vertexShader = shader.vertexShader.replace(/#include <alphatest.*>/g, \"\")\n\t\tshader.fragmentShader = shader.fragmentShader.replace(/#include <alphatest.*>/g, \"\")\n\n\t\t// remove opaque_fragment include\n\t\tshader.fragmentShader = shader.fragmentShader.replace(\"#include <opaque_fragment>\", \"\")\n\n\t\t// remove colorspace_fragment include\n\t\tshader.fragmentShader = shader.fragmentShader.replace(\"#include <colorspace_fragment>\", \"\")\n\n\t\t// delete the fog_fragment include\n\t\tshader.fragmentShader = shader.fragmentShader.replace(\"#include <fog_fragment>\", \"\")\n\n\t\tshader.fragmentShader = shader.fragmentShader\n\t\t\t.replace(\n\t\t\t\t\"void main() {\",\n\t\t\t\t/* glsl */ `\n\t\t\t#define vUv gl_FragCoord.xy\n uniform vec2 resolution;\n uniform float cameraNotMovedFrames;\n\n ${gbuffer_packing}\n\n void main() {\n\t\t\t\t\tfloat a = opacity;\n\n\t\t\t\t\t#ifdef USE_ALPHAMAP\n\t\t\t\t\t\ta *= texture2D( alphaMap, vAlphaMapUv ).g;\n\t\t\t\t\t#endif\n\n\t\t\t\t\tif (cameraNotMovedFrames == 0.) {\n\t\t\t\t\t\tif(a < 0.5) {\n\t\t\t\t\t\t\tdiscard;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ta = 1.;\n\t\t\t\t\t} else if (a != 1.) {\n\t\t\t\t\t\tfloat aStep = a > 0.5 ? 1. : 0.;\n\t\t\t\t\t\ta = mix(a, aStep, (1. / (cameraNotMovedFrames * 0.1 + 1.)));\n\n\t\t\t\t\t\tvec4 noise = blueNoise();\n\t\t\t\t\t\tif (noise.x > a) {\n\t\t\t\t\t\t\tdiscard;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n `\n\t\t\t)\n\t\t\t.replace(\n\t\t\t\t\"#include <dithering_fragment>\",\n\t\t\t\t/* glsl */ `\n #include <dithering_fragment>\n\n vec3 worldNormal = normalize((vec4(normal, 1.) * viewMatrix).xyz);\n\n vec4 gBuffer = packGBuffer(diffuseColor, worldNormal, roughnessFactor, metalnessFactor, totalEmissiveRadiance);\n\n gl_FragColor = gBuffer;`\n\t\t\t)\n\n\t\tconst { uniforms, fragmentShader } = setupBlueNoise(shader.fragmentShader)\n\t\tshader.uniforms = { ...shader.uniforms, ...uniforms }\n\t\tshader.fragmentShader = fragmentShader\n\t}\n}\n\nconst gBufferMaterial = new GBufferMaterial()\n\nexport function createGBufferMaterial(originalMaterial) {\n\tconst material = gBufferMaterial.clone()\n\n\tcopyAllPropsToGBufferMaterial(originalMaterial, material)\n\n\treturn material\n}\n\nlet props = Object.keys(gBufferMaterial)\n\n// delete the ones that start with \"_\"\nprops = props.filter(\n\tkey => !key.startsWith(\"_\") && !key.startsWith(\"is\") && key !== \"uuid\" && key !== \"type\" && key !== \"transparent\"\n)\n\n// this function attempts to copy all the props from the original material to the new GBufferMaterial\nfunction copyAllPropsToGBufferMaterial(originalMaterial, gBufferMaterial) {\n\tfor (const key of props) {\n\t\tif (originalMaterial[key] !== undefined) {\n\t\t\tgBufferMaterial[key] = originalMaterial[key]\n\t\t}\n\t}\n}\n\nconst propsPrimitive = props.filter(\n\tkey => typeof gBufferMaterial[key] === \"string\" || typeof gBufferMaterial[key] === \"number\"\n)\n\nexport function copyPropsToGBufferMaterial(originalMaterial, gBufferMaterial) {\n\tfor (const prop of propsPrimitive) {\n\t\tgBufferMaterial[prop] = originalMaterial[prop]\n\t}\n}\n","import { Pass } from \"postprocessing\"\nimport { Color, DepthTexture, FloatType, NearestFilter, Quaternion, Vector3, WebGLRenderTarget } from \"three\"\nimport { didCameraMove, getVisibleChildren, isChildMaterialRenderable } from \"../utils/SceneUtils.js\"\nimport { copyPropsToGBufferMaterial, createGBufferMaterial } from \"./material/GBufferMaterial.js\"\n\nconst backgroundColor = new Color(0)\n\nexport class GBufferPass extends Pass {\n\tframe = 21483\n\tcachedMaterials = new WeakMap()\n\tvisibleMeshes = []\n\tlastCameraPosition = new Vector3()\n\tlastCameraQuaternion = new Quaternion()\n\n\tconstructor(scene, camera) {\n\t\tsuper(\"GBufferPass\")\n\n\t\tthis._scene = scene\n\t\tthis._camera = camera\n\n\t\tthis.initGBufferRenderTarget()\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture\n\t}\n\n\tget depthTexture() {\n\t\treturn this.renderTarget.depthTexture\n\t}\n\n\tinitGBufferRenderTarget() {\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\ttype: FloatType,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\tdepthBuffer: true\n\t\t})\n\n\t\tthis.renderTarget.texture.name = \"GBufferPass.Texture\"\n\n\t\tthis.renderTarget.depthTexture = new DepthTexture(1, 1)\n\t\tthis.renderTarget.depthTexture.type = FloatType\n\t\tthis.renderTarget.depthTexture.name = \"GBufferPass.DepthTexture\"\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width, height)\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\t\tthis.renderTarget.dispose()\n\t}\n\n\tsetGBufferMaterialInScene() {\n\t\tthis.visibleMeshes = getVisibleChildren(this._scene)\n\n\t\tconst cameraMoved = didCameraMove(this._camera, this.lastCameraPosition, this.lastCameraQuaternion)\n\n\t\tfor (const c of this.visibleMeshes) {\n\t\t\tconst originalMaterial = c.material\n\n\t\t\tlet [cachedOriginalMaterial, gBufferMaterial] = this.cachedMaterials.get(c) || []\n\n\t\t\t// init a new material if the original material changed or if the cached material is missing\n\t\t\tif (originalMaterial !== cachedOriginalMaterial) {\n\t\t\t\tif (gBufferMaterial) gBufferMaterial.dispose()\n\n\t\t\t\tgBufferMaterial = createGBufferMaterial(originalMaterial)\n\n\t\t\t\tthis.cachedMaterials.set(c, [originalMaterial, gBufferMaterial])\n\t\t\t}\n\n\t\t\t// gBufferMaterial.uniforms.resolution.value.set(this.renderTarget.width, this.renderTarget.height)\n\t\t\t// gBufferMaterial.uniforms.frame.value = this.frame\n\n\t\t\tif (gBufferMaterial.uniforms) {\n\t\t\t\tgBufferMaterial.uniforms.cameraNotMovedFrames.value = cameraMoved\n\t\t\t\t\t? 0\n\t\t\t\t\t: (gBufferMaterial.uniforms.cameraNotMovedFrames.value + 1) % 0xffff\n\t\t\t}\n\n\t\t\tc.visible = isChildMaterialRenderable(c, originalMaterial)\n\n\t\t\tcopyPropsToGBufferMaterial(originalMaterial, gBufferMaterial)\n\n\t\t\tc.material = gBufferMaterial\n\t\t}\n\t}\n\n\tunsetGBufferMaterialInScene() {\n\t\tfor (const c of this.visibleMeshes) {\n\t\t\tconst [originalMaterial] = this.cachedMaterials.get(c)\n\n\t\t\tc.material = originalMaterial\n\t\t}\n\t}\n\n\trender(renderer) {\n\t\tthis.frame = (this.frame + 1) % 4096\n\n\t\tconst { background } = this._scene\n\n\t\tthis._scene.background = backgroundColor\n\n\t\tthis.setGBufferMaterialInScene()\n\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.render(this._scene, this._camera)\n\n\t\tthis.unsetGBufferMaterialInScene()\n\n\t\t// reset state\n\t\tthis.lastCameraPosition.copy(this._camera.position)\n\t\tthis.lastCameraQuaternion.copy(this._camera.quaternion)\n\n\t\tthis._scene.background = background\n\t}\n}\n","// source: https://github.com/gkjohnson/three-gpu-pathtracer/blob/main/src/uniforms/EquirectHdrInfoUniform.js\n\nimport { DataTexture, FloatType, NearestFilter, RGBAFormat, RedFormat, RepeatWrapping, Vector2 } from \"three\"\n\nconst workerOnMessage = ({ data: { width, height, isFloatType, flipY, data } }) => {\n\t// from: https://github.com/mrdoob/three.js/blob/dev/src/extras/DataUtils.js\n\n\t// importing modules doesn't seem to work for workers that were generated through createObjectURL() for some reason\n\n\tconst _tables = /* @__PURE__*/ _generateTables()\n\n\tfunction _generateTables() {\n\t\t// float32 to float16 helpers\n\n\t\tconst buffer = new ArrayBuffer(4)\n\t\tconst floatView = new Float32Array(buffer)\n\t\tconst uint32View = new Uint32Array(buffer)\n\n\t\tconst baseTable = new Uint32Array(512)\n\t\tconst shiftTable = new Uint32Array(512)\n\n\t\tfor (let i = 0; i < 256; ++i) {\n\t\t\tconst e = i - 127\n\n\t\t\t// very small number (0, -0)\n\n\t\t\tif (e < -27) {\n\t\t\t\tbaseTable[i] = 0x0000\n\t\t\t\tbaseTable[i | 0x100] = 0x8000\n\t\t\t\tshiftTable[i] = 24\n\t\t\t\tshiftTable[i | 0x100] = 24\n\n\t\t\t\t// small number (denorm)\n\t\t\t} else if (e < -14) {\n\t\t\t\tbaseTable[i] = 0x0400 >> (-e - 14)\n\t\t\t\tbaseTable[i | 0x100] = (0x0400 >> (-e - 14)) | 0x8000\n\t\t\t\tshiftTable[i] = -e - 1\n\t\t\t\tshiftTable[i | 0x100] = -e - 1\n\n\t\t\t\t// normal number\n\t\t\t} else if (e <= 15) {\n\t\t\t\tbaseTable[i] = (e + 15) << 10\n\t\t\t\tbaseTable[i | 0x100] = ((e + 15) << 10) | 0x8000\n\t\t\t\tshiftTable[i] = 13\n\t\t\t\tshiftTable[i | 0x100] = 13\n\n\t\t\t\t// large number (Infinity, -Infinity)\n\t\t\t} else if (e < 128) {\n\t\t\t\tbaseTable[i] = 0x7c00\n\t\t\t\tbaseTable[i | 0x100] = 0xfc00\n\t\t\t\tshiftTable[i] = 24\n\t\t\t\tshiftTable[i | 0x100] = 24\n\n\t\t\t\t// stay (NaN, Infinity, -Infinity)\n\t\t\t} else {\n\t\t\t\tbaseTable[i] = 0x7c00\n\t\t\t\tbaseTable[i | 0x100] = 0xfc00\n\t\t\t\tshiftTable[i] = 13\n\t\t\t\tshiftTable[i | 0x100] = 13\n\t\t\t}\n\t\t}\n\n\t\t// float16 to float32 helpers\n\n\t\tconst mantissaTable = new Uint32Array(2048)\n\t\tconst exponentTable = new Uint32Array(64)\n\t\tconst offsetTable = new Uint32Array(64)\n\n\t\tfor (let i = 1; i < 1024; ++i) {\n\t\t\tlet m = i << 13 // zero pad mantissa bits\n\t\t\tlet e = 0 // zero exponent\n\n\t\t\t// normalized\n\t\t\twhile ((m & 0x00800000) === 0) {\n\t\t\t\tm <<= 1\n\t\t\t\te -= 0x00800000 // decrement exponent\n\t\t\t}\n\n\t\t\tm &= ~0x00800000 // clear leading 1 bit\n\t\t\te += 0x38800000 // adjust bias\n\n\t\t\tmantissaTable[i] = m | e\n\t\t}\n\n\t\tfor (let i = 1024; i < 2048; ++i) {\n\t\t\tmantissaTable[i] = 0x38000000 + ((i - 1024) << 13)\n\t\t}\n\n\t\tfor (let i = 1; i < 31; ++i) {\n\t\t\texponentTable[i] = i << 23\n\t\t}\n\n\t\texponentTable[31] = 0x47800000\n\t\texponentTable[32] = 0x80000000\n\n\t\tfor (let i = 33; i < 63; ++i) {\n\t\t\texponentTable[i] = 0x80000000 + ((i - 32) << 23)\n\t\t}\n\n\t\texponentTable[63] = 0xc7800000\n\n\t\tfor (let i = 1; i < 64; ++i) {\n\t\t\tif (i !== 32) {\n\t\t\t\toffsetTable[i] = 1024\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tfloatView: floatView,\n\t\t\tuint32View: uint32View,\n\t\t\tbaseTable: baseTable,\n\t\t\tshiftTable: shiftTable,\n\t\t\tmantissaTable: mantissaTable,\n\t\t\texponentTable: exponentTable,\n\t\t\toffsetTable: offsetTable\n\t\t}\n\t}\n\n\tfunction fromHalfFloat(val) {\n\t\tconst m = val >> 10\n\t\t_tables.uint32View[0] = _tables.mantissaTable[_tables.offsetTable[m] + (val & 0x3ff)] + _tables.exponentTable[m]\n\t\treturn _tables.floatView[0]\n\t}\n\n\tfunction colorToLuminance(r, g, b) {\n\t\t// https://en.wikipedia.org/wiki/Relative_luminance\n\t\treturn 0.2126 * r + 0.7152 * g + 0.0722 * b\n\t}\n\n\tconst binarySearchFindClosestIndexOf = (array, targetValue, offset = 0, count = array.length) => {\n\t\tlet lower = offset\n\t\tlet upper = offset + count - 1\n\n\t\twhile (lower < upper) {\n\t\t\tconst mid = (lower + upper) >> 1\n\n\t\t\t// check if the middle array value is above or below the target and shift\n\t\t\t// which half of the array we're looking at\n\t\t\tif (array[mid] < targetValue) {\n\t\t\t\tlower = mid + 1\n\t\t\t} else {\n\t\t\t\tupper = mid\n\t\t\t}\n\t\t}\n\n\t\treturn lower - offset\n\t}\n\n\tconst gatherData = (data, width, height, flipY, marginalDataArray, conditionalDataArray) => {\n\t\t// \"conditional\" = \"pixel relative to row pixels sum\"\n\t\t// \"marginal\" = \"row relative to row sum\"\n\n\t\t// remove any y flipping for cdf computation\n\t\tif (flipY) {\n\t\t\tfor (let y = 0, h = height - 1; y <= h; y++) {\n\t\t\t\tfor (let x = 0, w = width * 4; x < w; x += 4) {\n\t\t\t\t\tconst newY = h - y\n\t\t\t\t\tconst ogIndex = y * w + x\n\t\t\t\t\tconst newIndex = newY * w + x\n\t\t\t\t\tdata[newIndex] = data[ogIndex]\n\t\t\t\t\tdata[newIndex + 1] = data[ogIndex + 1]\n\t\t\t\t\tdata[newIndex + 2] = data[ogIndex + 2]\n\t\t\t\t\tdata[newIndex + 3] = data[ogIndex + 3]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// track the importance of any given pixel in the image by tracking its weight relative to other pixels in the image\n\t\tconst pdfConditional = new Float32Array(width * height)\n\t\tconst cdfConditional = new Float32Array(width * height)\n\n\t\tconst pdfMarginal = new Float32Array(height)\n\t\tconst cdfMarginal = new Float32Array(height)\n\n\t\tlet totalSumValue = 0.0\n\t\tlet cumulativeWeightMarginal = 0.0\n\t\tfor (let y = 0; y < height; y++) {\n\t\t\tlet cumulativeRowWeight = 0.0\n\t\t\tfor (let x = 0; x < width; x++) {\n\t\t\t\tconst i = y * width + x\n\t\t\t\tconst r = data[4 * i + 0]\n\t\t\t\tconst g = data[4 * i + 1]\n\t\t\t\tconst b = data[4 * i + 2]\n\n\t\t\t\t// the probability of the pixel being selected in this row is the\n\t\t\t\t// scale of the luminance relative to the rest of the pixels.\n\t\t\t\t// TODO: this should also account for the solid angle of the pixel when sampling\n\t\t\t\tconst weight = colorToLuminance(r, g, b)\n\t\t\t\tcumulativeRowWeight += weight\n\t\t\t\ttotalSumValue += weight\n\n\t\t\t\tpdfConditional[i] = weight\n\t\t\t\tcdfConditional[i] = cumulativeRowWeight\n\t\t\t}\n\n\t\t\t// can happen if the row is all black\n\t\t\tif (cumulativeRowWeight !== 0) {\n\t\t\t\t// scale the pdf and cdf to [0.0, 1.0]\n\t\t\t\tfor (let i = y * width, l = y * width + width; i < l; i++) {\n\t\t\t\t\tpdfConditional[i] /= cumulativeRowWeight\n\t\t\t\t\tcdfConditional[i] /= cumulativeRowWeight\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcumulativeWeightMarginal += cumulativeRowWeight\n\n\t\t\t// compute the marginal pdf and cdf along the height of the map.\n\t\t\tpdfMarginal[y] = cumulativeRowWeight\n\t\t\tcdfMarginal[y] = cumulativeWeightMarginal\n\t\t}\n\n\t\t// can happen if the texture is all black\n\t\tif (cumulativeWeightMarginal !== 0) {\n\t\t\t// scale the marginal pdf and cdf to [0.0, 1.0]\n\t\t\tfor (let i = 0, l = pdfMarginal.length; i < l; i++) {\n\t\t\t\tpdfMarginal[i] /= cumulativeWeightMarginal\n\t\t\t\tcdfMarginal[i] /= cumulativeWeightMarginal\n\t\t\t}\n\t\t}\n\n\t\t// compute a sorted index of distributions and the probabilities along them for both\n\t\t// the marginal and conditional data. These will be used to sample with a random number\n\t\t// to retrieve a uv value to sample in the environment map.\n\t\t// These values continually increase so it's okay to interpolate between them.\n\n\t\t// we add a half texel offset so we're sampling the center of the pixel\n\t\tfor (let i = 0; i < height; i++) {\n\t\t\tconst dist = (i + 1) / height\n\t\t\tconst row = binarySearchFindClosestIndexOf(cdfMarginal, dist)\n\n\t\t\tmarginalDataArray[i] = (row + 0.5) / height\n\t\t}\n\n\t\tfor (let y = 0; y < height; y++) {\n\t\t\tfor (let x = 0; x < width; x++) {\n\t\t\t\tconst i = y * width + x\n\t\t\t\tconst dist = (x + 1) / width\n\t\t\t\tconst col = binarySearchFindClosestIndexOf(cdfConditional, dist, y * width, width)\n\n\t\t\t\tconditionalDataArray[i] = (col + 0.5) / width\n\t\t\t}\n\t\t}\n\n\t\treturn totalSumValue\n\t}\n\n\tif (!isFloatType) {\n\t\tconst newData = new Float32Array(data.length)\n\n\t\t// eslint-disable-next-line guard-for-in\n\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\tnewData[i] = fromHalfFloat(data[i])\n\t\t}\n\n\t\tdata = newData\n\t}\n\n\tconst marginalDataArray = new Float32Array(height)\n\tconst conditionalDataArray = new Float32Array(width * height)\n\n\tconst totalSumValue = gatherData(data, width, height, flipY, marginalDataArray, conditionalDataArray)\n\n\tpostMessage({ totalSumValue, marginalDataArray, conditionalDataArray })\n}\n\nconst blob = new Blob([\"onmessage = \" + workerOnMessage], { type: \"application/javascript\" })\nconst workerUrl = URL.createObjectURL(blob)\n\nexport class EquirectHdrInfoUniform {\n\tconstructor() {\n\t\t// we use NearestFilter instead of LinearFilter because on many recent Apple devices filtering from such a texture does not work\n\n\t\t// Default to a white texture and associated weights so we don't\n\t\t// just render black initially.\n\t\tconst whiteTex = new DataTexture(new Float32Array([1, 1, 1, 1]), 1, 1)\n\t\twhiteTex.type = FloatType\n\t\twhiteTex.format = RGBAFormat\n\t\twhiteTex.minFilter = NearestFilter\n\t\twhiteTex.magFilter = NearestFilter\n\t\twhiteTex.wrapS = RepeatWrapping\n\t\twhiteTex.wrapT = RepeatWrapping\n\t\twhiteTex.generateMipmaps = false\n\t\twhiteTex.needsUpdate = true\n\n\t\t// Stores a map of [0, 1] value -> cumulative importance row & pdf\n\t\t// used to sampling a random value to a relevant row to sample from\n\t\tconst marginalWeights = new DataTexture(new Float32Array([0, 1]), 1, 2)\n\t\tmarginalWeights.type = FloatType\n\t\tmarginalWeights.format = RedFormat\n\t\tmarginalWeights.minFilter = NearestFilter\n\t\tmarginalWeights.magFilter = NearestFilter\n\t\tmarginalWeights.generateMipmaps = false\n\t\tmarginalWeights.needsUpdate = true\n\n\t\t// Stores a map of [0, 1] value -> cumulative importance column & pdf\n\t\t// used to sampling a random value to a relevant pixel to sample from\n\t\tconst conditionalWeights = new DataTexture(new Float32Array([0, 0, 1, 1]), 2, 2)\n\t\tconditionalWeights.type = FloatType\n\t\tconditionalWeights.format = RedFormat\n\t\tconditionalWeights.minFilter = NearestFilter\n\t\tconditionalWeights.magFilter = NearestFilter\n\t\tconditionalWeights.generateMipmaps = false\n\t\tconditionalWeights.needsUpdate = true\n\n\t\tthis.map = whiteTex\n\t\tthis.marginalWeights = marginalWeights\n\t\tthis.conditionalWeights = conditionalWeights\n\n\t\t// the total sum value is separated into two values to work around low precision\n\t\t// storage of floating values in structs\n\t\tthis.totalSumWhole = 1\n\t\tthis.totalSumDecimal = 0\n\n\t\tthis.size = new Vector2()\n\t}\n\n\tdispose() {\n\t\tthis.marginalWeights.dispose()\n\t\tthis.conditionalWeights.dispose()\n\t\tthis.map.dispose()\n\t}\n\n\tupdateFrom(map) {\n\t\tmap = map.clone()\n\t\tconst { width, height, data } = map.image\n\t\tconst { type } = map\n\n\t\tthis.size.set(width, height)\n\n\t\treturn new Promise(resolve => {\n\t\t\tthis.worker?.terminate()\n\n\t\t\tthis.worker = new Worker(workerUrl)\n\n\t\t\tthis.worker.postMessage({ width, height, isFloatType: type === FloatType, flipY: map.flipY, data })\n\t\t\tthis.worker.onmessage = ({ data: { totalSumValue, marginalDataArray, conditionalDataArray } }) => {\n\t\t\t\tthis.dispose()\n\n\t\t\t\tconst { marginalWeights, conditionalWeights } = this\n\t\t\t\tmarginalWeights.image = { width: height, height: 1, data: marginalDataArray }\n\t\t\t\tmarginalWeights.needsUpdate = true\n\n\t\t\t\tconditionalWeights.image = { width, height, data: conditionalDataArray }\n\t\t\t\tconditionalWeights.needsUpdate = true\n\n\t\t\t\tconst totalSumWhole = ~~totalSumValue\n\t\t\t\tconst totalSumDecimal = totalSumValue - totalSumWhole\n\t\t\t\tthis.totalSumWhole = totalSumWhole\n\t\t\t\tthis.totalSumDecimal = totalSumDecimal\n\n\t\t\t\tthis.map = map\n\n\t\t\t\tthis.worker = null\n\n\t\t\t\tresolve(map)\n\t\t\t}\n\t\t})\n\t}\n}\n","/* eslint-disable camelcase */\nimport { Color, Matrix4, NoBlending, ShaderMaterial, Uniform, Vector2, Vector3 } from \"three\"\nimport vertexShader from \"../../utils/shader/basic.vert\"\nimport fragmentShader from \"../shader/ssgi.frag\"\nimport ssgi_utils from \"../shader/ssgi_utils.frag\"\nimport { useBlueNoise } from \"../../utils/BlueNoiseUtils\"\nimport gbuffer_packing from \"../../gbuffer/shader/gbuffer_packing.glsl\"\nimport { EquirectHdrInfoUniform } from \"../utils/EquirectHdrInfoUniform\"\n\nexport class SSGIMaterial extends ShaderMaterial {\n\tconstructor() {\n\t\tsuper({\n\t\t\ttype: \"SSGIMaterial\",\n\n\t\t\tuniforms: {\n\t\t\t\taccumulatedTexture: new Uniform(null),\n\t\t\t\tgBufferTexture: new Uniform(null),\n\t\t\t\tdepthTexture: new Uniform(null),\n\t\t\t\tvelocityTexture: new Uniform(null),\n\t\t\t\tdirectLightTexture: new Uniform(null),\n\t\t\t\tblueNoiseTexture: new Uniform(null),\n\t\t\t\tprojectionMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprojectionMatrixInverse: new Uniform(new Matrix4()),\n\t\t\t\tcameraMatrixWorld: new Uniform(new Matrix4()),\n\t\t\t\tviewMatrix: new Uniform(new Matrix4()),\n\t\t\t\tcameraNear: new Uniform(0),\n\t\t\t\tcameraFar: new Uniform(0),\n\t\t\t\tnearMulFar: new Uniform(0),\n\t\t\t\tnearMinusFar: new Uniform(0),\n\t\t\t\tfarMinusNear: new Uniform(0),\n\t\t\t\trayDistance: new Uniform(0),\n\t\t\t\tthickness: new Uniform(0),\n\t\t\t\tframe: new Uniform(0),\n\t\t\t\tenvBlur: new Uniform(0),\n\t\t\t\tmaxEnvMapMipLevel: new Uniform(0),\n\t\t\t\tenvMapInfo: { value: new EquirectHdrInfoUniform() },\n\t\t\t\tenvMapPosition: new Uniform(new Vector3()),\n\t\t\t\tenvMapSize: new Uniform(new Vector3()),\n\t\t\t\tbackgroundColor: new Uniform(new Color()),\n\t\t\t\tresolution: new Uniform(new Vector2()),\n\t\t\t\tblueNoiseRepeat: new Uniform(new Vector2())\n\t\t\t},\n\n\t\t\tdefines: {\n\t\t\t\tsteps: 20,\n\t\t\t\trefineSteps: 5,\n\t\t\t\tCUBEUV_TEXEL_WIDTH: 0,\n\t\t\t\tCUBEUV_TEXEL_HEIGHT: 0,\n\t\t\t\tCUBEUV_MAX_MIP: 0,\n\t\t\t\tvWorldPosition: \"worldPos\"\n\t\t\t},\n\n\t\t\tfragmentShader: fragmentShader\n\t\t\t\t.replace(\"#include <ssgi_utils>\", ssgi_utils)\n\t\t\t\t.replace(\"#include <gbuffer_packing>\", gbuffer_packing),\n\t\t\tvertexShader,\n\n\t\t\tblending: NoBlending,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t\ttoneMapped: false\n\t\t})\n\n\t\tuseBlueNoise(this)\n\t}\n}\n","import { Pass } from \"postprocessing\"\nimport { Color, FloatType, NearestFilter, WebGLRenderTarget } from \"three\"\nimport { GBufferPass } from \"../../gbuffer/GBufferPass.js\"\nimport { SSGIMaterial } from \"../material/SSGIMaterial.js\"\n\nconst blackColor = new Color(0)\nexport class SSGIPass extends Pass {\n\tdefaultFragmentShader = \"\"\n\tframe = 21483\n\n\tconstructor(ssgiEffect, options) {\n\t\tsuper(\"SSGIPass\")\n\n\t\tthis.ssgiEffect = ssgiEffect\n\t\tthis._scene = ssgiEffect._scene\n\t\tthis._camera = ssgiEffect._camera\n\n\t\tthis.fullscreenMaterial = new SSGIMaterial()\n\t\tthis.defaultFragmentShader = this.fullscreenMaterial.fragmentShader\n\n\t\t// const { mode } = options\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\ttype: FloatType,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\tdepthBuffer: false\n\t\t})\n\n\t\tthis.renderTarget.texture.name = \"SSGIPass.Texture\"\n\n\t\t// set up basic uniforms that we don't have to update\n\t\tthis.fullscreenMaterial.uniforms.cameraMatrixWorld.value = this._camera.matrixWorld\n\t\tthis.fullscreenMaterial.uniforms.viewMatrix.value = this._camera.matrixWorldInverse\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrix.value = this._camera.projectionMatrix\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrixInverse.value = this._camera.projectionMatrixInverse\n\n\t\tif (ssgiEffect._camera.isPerspectiveCamera) this.fullscreenMaterial.defines.PERSPECTIVE_CAMERA = \"\"\n\n\t\tthis.fullscreenMaterial.defines.mode = [\"ssgi\", \"ssr\"].indexOf(options.mode)\n\n\t\tthis.gBufferPass = new GBufferPass(this._scene, this._camera)\n\n\t\tthis.fullscreenMaterial.uniforms.gBufferTexture.value = this.gBufferPass.texture\n\t\tthis.fullscreenMaterial.uniforms.depthTexture.value = this.gBufferPass.depthTexture\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width * this.ssgiEffect.resolutionScale, height * this.ssgiEffect.resolutionScale)\n\t\tthis.gBufferPass.setSize(width, height)\n\n\t\tthis.fullscreenMaterial.uniforms.resolution.value.set(this.renderTarget.width, this.renderTarget.height)\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.renderTarget.dispose()\n\t\tthis.renderTarget.dispose()\n\n\t\tthis.fullscreenMaterial.dispose()\n\t}\n\n\trender(renderer) {\n\t\tthis.frame = (this.frame + 1) % 4096\n\n\t\tconst { mask } = this._camera.layers\n\t\tconst hasSelection = this.ssgiEffect.selection.size > 0\n\n\t\tthis._camera.layers.set(hasSelection ? this.ssgiEffect.selection.layer : 0)\n\n\t\t// render G-Buffers\n\t\tthis.gBufferPass.render(renderer)\n\n\t\tthis._camera.layers.mask = mask\n\n\t\t// update uniforms\n\t\tthis.fullscreenMaterial.uniforms.frame.value = this.frame\n\t\tthis.fullscreenMaterial.uniforms.cameraNear.value = this._camera.near\n\t\tthis.fullscreenMaterial.uniforms.cameraFar.value = this._camera.far\n\t\tthis.fullscreenMaterial.uniforms.nearMinusFar.value = this._camera.near - this._camera.far\n\t\tthis.fullscreenMaterial.uniforms.farMinusNear.value = this._camera.far - this._camera.near\n\t\tthis.fullscreenMaterial.uniforms.nearMulFar.value = this._camera.near * this._camera.far\n\t\tthis.fullscreenMaterial.uniforms.accumulatedTexture.value = this.ssgiEffect.denoiser.texture\n\t\tthis.fullscreenMaterial.uniforms.velocityTexture.value = this.ssgiEffect.velocityTexture\n\t\tconst bgColor = this._scene.background instanceof Color ? this._scene.background : blackColor\n\t\tthis.fullscreenMaterial.uniforms.backgroundColor.value.copy(bgColor)\n\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.render(this.scene, this.camera)\n\t}\n}\n","// this shader is from: https://github.com/gkjohnson/threejs-sandbox\n/* eslint-disable camelcase */\n\nimport { Matrix3, Matrix4, ShaderChunk, ShaderMaterial, UniformsUtils, Vector2 } from \"three\"\n\n// Modified ShaderChunk.skinning_pars_vertex to handle\n// a second set of bone information from the previous frame\nconst prev_skinning_pars_vertex = /* glsl */ `\n\t\t#ifdef USE_SKINNING\n\t\t#ifdef BONE_TEXTURE\n\t\t\tuniform sampler2D prevBoneTexture;\n\t\t\tmat4 getPrevBoneMatrix( const in float i ) {\n\t\t\t\tfloat j = i * 4.0;\n\t\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\t\ty = dy * ( y + 0.5 );\n\t\t\t\tvec4 v1 = textureLod( prevBoneTexture, vec2( dx * ( x + 0.5 ), y ), 0. );\n\t\t\t\tvec4 v2 = textureLod( prevBoneTexture, vec2( dx * ( x + 1.5 ), y ), 0. );\n\t\t\t\tvec4 v3 = textureLod( prevBoneTexture, vec2( dx * ( x + 2.5 ), y ), 0. );\n\t\t\t\tvec4 v4 = textureLod( prevBoneTexture, vec2( dx * ( x + 3.5 ), y ), 0. );\n\t\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\t\treturn bone;\n\t\t\t}\n\t\t#else\n\t\t\tuniform mat4 prevBoneMatrices[ MAX_BONES ];\n\t\t\tmat4 getPrevBoneMatrix( const in float i ) {\n\t\t\t\tmat4 bone = prevBoneMatrices[ int(i) ];\n\t\t\t\treturn bone;\n\t\t\t}\n\t\t#endif\n\t\t#endif\n`\n\nexport const velocity_vertex_pars = /* glsl */ `\n#define MAX_BONES 64\n \n${ShaderChunk.skinning_pars_vertex}\n${prev_skinning_pars_vertex}\n\nuniform mat4 velocityMatrix;\nuniform mat4 prevVelocityMatrix;\nvarying vec4 prevPosition;\nvarying vec4 newPosition;\n\nvarying vec2 vHighPrecisionZW;\n`\n\n// Returns the body of the vertex shader for the velocity buffer\nexport const velocity_vertex_main = /* glsl */ `\n// Get the current vertex position\ntransformed = vec3( position );\n${ShaderChunk.skinning_vertex}\nnewPosition = velocityMatrix * vec4( transformed, 1.0 );\n\n// Get the previous vertex position\ntransformed = vec3( position );\n${ShaderChunk.skinbase_vertex.replace(/mat4 /g, \"\").replace(/getBoneMatrix/g, \"getPrevBoneMatrix\")}\n${ShaderChunk.skinning_vertex.replace(/vec4 /g, \"\")}\nprevPosition = prevVelocityMatrix * vec4( transformed, 1.0 );\n\ngl_Position = newPosition;\n\nvHighPrecisionZW = gl_Position.zw;\n`\n\nexport const velocity_fragment_pars = /* glsl */ `\nvarying vec4 prevPosition;\nvarying vec4 newPosition;\n\nvarying vec2 vHighPrecisionZW;\n`\n\nexport const velocity_fragment_main = /* glsl */ `\nvec2 pos0 = (prevPosition.xy / prevPosition.w) * 0.5 + 0.5;\nvec2 pos1 = (newPosition.xy / newPosition.w) * 0.5 + 0.5;\n\nvec2 vel = pos1 - pos0;\n\nfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\ngl_FragColor = vec4(vel.x, vel.y, 0., 0.);\n`\n\nexport const velocity_uniforms = {\n\tprevVelocityMatrix: { value: new Matrix4() },\n\tvelocityMatrix: { value: new Matrix4() },\n\tprevBoneTexture: { value: null },\n\tboneTexture: { value: null },\n\tnormalMap: { value: null },\n\tnormalScale: { value: new Vector2(1, 1) },\n\tuvTransform: { value: new Matrix3() }\n}\n\nexport class VelocityDepthNormalMaterial extends ShaderMaterial {\n\tconstructor(camera) {\n\t\tsuper({\n\t\t\tuniforms: {\n\t\t\t\t...UniformsUtils.clone(velocity_uniforms),\n\t\t\t\t...{\n\t\t\t\t\tcameraMatrixWorld: { value: camera.matrixWorld }\n\t\t\t\t}\n\t\t\t},\n\t\t\tvertexShader: /* glsl */ `\n\t\t\t\t\t#include <common>\n\t\t\t\t\t#include <uv_pars_vertex>\n\t\t\t\t\t#include <displacementmap_pars_vertex>\n\t\t\t\t\t#include <normal_pars_vertex>\n\t\t\t\t\t#include <morphtarget_pars_vertex>\n\t\t\t\t\t#include <logdepthbuf_pars_vertex>\n\t\t\t\t\t#include <clipping_planes_pars_vertex>\n\n\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t\tvarying vec3 vViewPosition;\n\t\t\t\t\t\n ${velocity_vertex_pars}\n \n void main() {\n\t\t\t\t\t\tvec3 transformed;\n\n\t\t\t\t\t\t#include <uv_vertex>\n\n\t\t\t\t\t\t#include <skinbase_vertex>\n\t\t\t\t\t\t#include <beginnormal_vertex>\n\t\t\t\t\t\t#include <skinnormal_vertex>\n\t\t\t\t\t\t#include <defaultnormal_vertex>\n\n\t\t\t\t\t\t#include <morphnormal_vertex>\n\t\t\t\t\t\t#include <normal_vertex>\n\t\t\t\t\t\t#include <morphtarget_vertex>\n\t\t\t\t\t\t#include <displacementmap_vertex>\n\t\t\t\t\t\t#include <project_vertex>\n\t\t\t\t\t\t#include <logdepthbuf_vertex>\n\t\t\t\t\t\t#include <clipping_planes_vertex>\n\n\t\t\t\t\t\t${velocity_vertex_main}\n\n\t\t\t\t\t\tvViewPosition = - mvPosition.xyz;\n\n\t\t\t\t\t\tvUv = uv;\n\n }`,\n\t\t\tfragmentShader: /* glsl */ `\n\t\t\t\t\tprecision highp float;\n\t\t\t\t\tuniform mat4 cameraMatrixWorld;\n\n\t\t\t\t\tvarying vec3 vViewPosition;\n\n\t\t\t\t\t${velocity_fragment_pars}\n\t\t\t\t\t#include <packing>\n\n\t\t\t\t\t#include <uv_pars_fragment>\n\t\t\t\t\t#include <normal_pars_fragment>\n\t\t\t\t\t#include <normalmap_pars_fragment>\n\n\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t\t// source: https://knarkowicz.wordpress.com/2014/04/16/octahedron-normal-vector-encoding/\n\t\t\t\t\tvec2 OctWrap( vec2 v ) {\n\t\t\t\t\t\tvec2 w = 1.0 - abs( v.yx );\n\t\t\t\t\t\tif (v.x < 0.0) w.x = -w.x;\n\t\t\t\t\t\tif (v.y < 0.0) w.y = -w.y;\n\t\t\t\t\t\treturn w;\n\t\t\t\t\t}\n\n\t\t\t\t\tvec2 encodeOctWrap(vec3 n) {\n\t\t\t\t\t\tn /= (abs(n.x) + abs(n.y) + abs(n.z));\n\t\t\t\t\t\tn.xy = n.z > 0.0 ? n.xy : OctWrap(n.xy);\n\t\t\t\t\t\tn.xy = n.xy * 0.5 + 0.5;\n\t\t\t\t\t\treturn n.xy;\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat packNormal(vec3 normal) {\n\t\t\t\t\t\treturn uintBitsToFloat(packHalf2x16(encodeOctWrap(normal)));\n\t\t\t\t\t}\n\n void main() {\n\t\t\t\t\t\t#define vNormalMapUv vUv\n\n\t\t\t\t\t\t#include <normal_fragment_begin>\n \t#include <normal_fragment_maps>\n\n\t\t\t\t\t\t${velocity_fragment_main}\n\t\t\t\t\t\tvec3 worldNormal = normalize((cameraMatrixWorld * vec4(normal, 0.)).xyz);\n\t\t\t\t\t\tgl_FragColor.b = packNormal(worldNormal);\n\t\t\t\t\t\tgl_FragColor.a = fragCoordZ;\n }`\n\t\t})\n\t}\n}\n","const materialProps = [\n\t\"vertexTangent\",\n\t\"vertexColors\",\n\t\"vertexAlphas\",\n\t\"vertexUvs\",\n\t\"uvsVertexOnly\",\n\t\"supportsVertexTextures\",\n\t\"instancing\",\n\t\"instancingColor\",\n\t\"side\",\n\t\"flatShading\",\n\t\"skinning\",\n\t\"doubleSided\",\n\t\"flipSided\"\n]\n\nexport const copyNecessaryProps = (originalMaterial, newMaterial) => {\n\tfor (const props of materialProps) newMaterial[props] = originalMaterial[props]\n}\n\nexport const keepMaterialMapUpdated = (mrtMaterial, originalMaterial, prop, define, useKey) => {\n\tif (useKey) {\n\t\tif (originalMaterial[prop] !== mrtMaterial[prop]) {\n\t\t\tmrtMaterial[prop] = originalMaterial[prop]\n\t\t\tmrtMaterial.uniforms[prop].value = originalMaterial[prop]\n\n\t\t\tif (originalMaterial[prop]) {\n\t\t\t\tmrtMaterial.defines[define] = \"\"\n\t\t\t} else {\n\t\t\t\tdelete mrtMaterial.defines[define]\n\t\t\t}\n\n\t\t\tmrtMaterial.needsUpdate = true\n\t\t}\n\t} else if (mrtMaterial[prop] !== undefined) {\n\t\tmrtMaterial[prop] = undefined\n\t\tmrtMaterial.uniforms[prop].value = undefined\n\t\tdelete mrtMaterial.defines[define]\n\t\tmrtMaterial.needsUpdate = true\n\t}\n}\n\nexport const getVisibleChildren = object => {\n\tconst queue = [object]\n\tconst objects = []\n\n\twhile (queue.length !== 0) {\n\t\tconst mesh = queue.shift()\n\t\tif (mesh.material) objects.push(mesh)\n\n\t\tfor (const c of mesh.children) {\n\t\t\tif (c.visible) queue.push(c)\n\t\t}\n\t}\n\n\treturn objects\n}\n","import { Pass } from \"postprocessing\"\nimport {\n\tColor,\n\tDataTexture,\n\tDepthTexture,\n\tFramebufferTexture,\n\tHalfFloatType,\n\tMatrix4,\n\tNearestFilter,\n\tRGBAFormat,\n\tVector2,\n\tWebGLRenderTarget\n} from \"three\"\nimport { VelocityDepthNormalMaterial } from \"../material/VelocityDepthNormalMaterial.js\"\nimport { copyNecessaryProps, keepMaterialMapUpdated } from \"../../gbuffer/utils/GBufferUtils.js\"\nimport { getVisibleChildren } from \"../../utils/SceneUtils.js\"\nimport { isChildMaterialRenderable } from \"../../utils/SceneUtils.js\"\n\nconst backgroundColor = new Color(0)\nconst zeroVec2 = new Vector2()\nconst tmpProjectionMatrix = new Matrix4()\nconst tmpProjectionMatrixInverse = new Matrix4()\n\nconst saveBoneTexture = (object, floatType) => {\n\tlet boneTexture = object.material.uniforms.prevBoneTexture.value\n\n\tif (boneTexture && boneTexture.image.width === object.skeleton.boneTexture.width) {\n\t\tboneTexture = object.material.uniforms.prevBoneTexture.value\n\t\tboneTexture.image.data.set(object.skeleton.boneTexture.image.data)\n\t} else {\n\t\tboneTexture?.dispose()\n\n\t\tconst boneMatrices = object.skeleton.boneTexture.image.data.slice()\n\t\tconst size = object.skeleton.boneTexture.image.width\n\n\t\tboneTexture = new DataTexture(boneMatrices, size, size, RGBAFormat, floatType)\n\t\tobject.material.uniforms.prevBoneTexture.value = boneTexture\n\n\t\tboneTexture.needsUpdate = true\n\t}\n}\n\nconst updateVelocityDepthNormalMaterialBeforeRender = (c, camera) => {\n\tif (c.skeleton?.boneTexture) {\n\t\tc.material.uniforms.boneTexture.value = c.skeleton.boneTexture\n\n\t\tif (!(\"USE_SKINNING\" in c.material.defines)) {\n\t\t\tc.material.defines.USE_SKINNING = \"\"\n\t\t\tc.material.defines.BONE_TEXTURE = \"\"\n\n\t\t\tc.material.needsUpdate = true\n\t\t}\n\t}\n\n\tc.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, c.matrixWorld)\n\n\tc.material.uniforms.velocityMatrix.value.multiplyMatrices(camera.projectionMatrix, c.modelViewMatrix)\n}\n\nconst updateVelocityDepthNormalMaterialAfterRender = (c, camera, floatType) => {\n\tc.material.uniforms.prevVelocityMatrix.value.multiplyMatrices(camera.projectionMatrix, c.modelViewMatrix)\n\n\tif (c.skeleton?.boneTexture) saveBoneTexture(c, floatType)\n}\n\nexport class VelocityDepthNormalPass extends Pass {\n\tcachedMaterials = new WeakMap()\n\tvisibleMeshes = []\n\tneedsSwap = false\n\n\tconstructor(scene, camera, floatType = HalfFloatType) {\n\t\tsuper(\"VelocityDepthNormalPass\")\n\n\t\tthis._scene = scene\n\t\tthis._camera = camera\n\t\tthis._floatType = floatType\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\ttype: floatType,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter\n\t\t})\n\n\t\tthis.renderTarget.texture.name = \"VelocityDepthNormalPass.Texture\"\n\n\t\tthis.renderTarget.depthTexture = new DepthTexture(1, 1)\n\t\tthis.renderTarget.depthTexture.type = floatType;\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture\n\t}\n\n\tsetVelocityDepthNormalMaterialInScene() {\n\t\tthis.visibleMeshes = getVisibleChildren(this._scene)\n\n\t\tfor (const c of this.visibleMeshes) {\n\t\t\tconst originalMaterial = c.material\n\n\t\t\tlet [cachedOriginalMaterial, velocityDepthNormalMaterial] = this.cachedMaterials.get(c) || []\n\n\t\t\tif (originalMaterial !== cachedOriginalMaterial) {\n\t\t\t\tvelocityDepthNormalMaterial = new VelocityDepthNormalMaterial(this._camera)\n\n\t\t\t\tcopyNecessaryProps(originalMaterial, velocityDepthNormalMaterial)\n\n\t\t\t\tc.material = velocityDepthNormalMaterial\n\n\t\t\t\tif (c.skeleton?.boneTexture) saveBoneTexture(c, this._floatType);\n\n\t\t\t\tthis.cachedMaterials.set(c, [originalMaterial, velocityDepthNormalMaterial])\n\t\t\t}\n\n\t\t\tc.material = velocityDepthNormalMaterial\n\n\t\t\tc.visible = isChildMaterialRenderable(c, originalMaterial)\n\n\t\t\tkeepMaterialMapUpdated(\n\t\t\t\tvelocityDepthNormalMaterial,\n\t\t\t\toriginalMaterial,\n\t\t\t\t\"normalMap\",\n\t\t\t\t\"USE_NORMALMAP_TANGENTSPACE\",\n\t\t\t\ttrue\n\t\t\t)\n\t\t\tvelocityDepthNormalMaterial.uniforms.normalMap.value = originalMaterial.normalMap\n\n\t\t\tconst map =\n\t\t\t\toriginalMaterial.map ||\n\t\t\t\toriginalMaterial.normalMap ||\n\t\t\t\toriginalMaterial.roughnessMap ||\n\t\t\t\toriginalMaterial.metalnessMap\n\n\t\t\tif (map) velocityDepthNormalMaterial.uniforms.uvTransform.value = map.matrix\n\n\t\t\tupdateVelocityDepthNormalMaterialBeforeRender(c, this._camera)\n\t\t}\n\t}\n\n\tunsetVelocityDepthNormalMaterialInScene() {\n\t\tfor (const c of this.visibleMeshes) {\n\t\t\tc.visible = true\n\n\t\t\tupdateVelocityDepthNormalMaterialAfterRender(c, this._camera, this._floatType)\n\n\t\t\tc.material = this.cachedMaterials.get(c)[0]\n\t\t}\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width, height)\n\n\t\tthis.lastVelocityTexture?.dispose()\n\n\t\tthis.lastVelocityTexture = new FramebufferTexture(width, height, RGBAFormat)\n\t\tthis.lastVelocityTexture.type = this._floatType;\n\t\tthis.lastVelocityTexture.minFilter = NearestFilter\n\t\tthis.lastVelocityTexture.magFilter = NearestFilter\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.renderTarget.dispose()\n\t}\n\n\trender(renderer) {\n\t\ttmpProjectionMatrix.copy(this._camera.projectionMatrix)\n\t\ttmpProjectionMatrixInverse.copy(this._camera.projectionMatrixInverse)\n\n\t\tif (this._camera.view) this._camera.view.enabled = false\n\t\tthis._camera.updateProjectionMatrix()\n\n\t\t// in case a RenderPass is not being used, so we need to update the camera's world matrix manually\n\t\tthis._camera.updateMatrixWorld()\n\n\t\tthis.setVelocityDepthNormalMaterialInScene()\n\n\t\tconst { background } = this._scene\n\n\t\tthis._scene.background = backgroundColor\n\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.copyFramebufferToTexture(zeroVec2, this.lastVelocityTexture)\n\n\t\trenderer.render(this._scene, this._camera)\n\n\t\tthis._scene.background = background\n\n\t\tthis.unsetVelocityDepthNormalMaterialInScene()\n\n\t\tif (this._camera.view) this._camera.view.enabled = true\n\t\tthis._camera.projectionMatrix.copy(tmpProjectionMatrix)\n\t\tthis._camera.projectionMatrixInverse.copy(tmpProjectionMatrixInverse)\n\t}\n}\n","/* eslint-disable camelcase */\nimport { Pass } from \"postprocessing\"\nimport { FloatType, NearestFilter, NoBlending, ShaderMaterial, WebGLRenderTarget } from \"three\"\nimport gbuffer_packing from \"../../gbuffer/shader/gbuffer_packing.glsl\"\nimport basicVertexShader from \"../../utils/shader/basic.vert\"\nimport ssgi_poisson_compose_functions from \"../shader/denoiser_compose_functions.glsl\"\n\nexport class DenoiserComposePass extends Pass {\n\tconstructor(camera, textures, gBufferTexture, depthTexture, options = {}) {\n\t\tsuper(\"DenoiserComposePass\")\n\n\t\tthis._camera = camera\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\tdepthBuffer: false,\n\t\t\ttype: FloatType,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter\n\t\t})\n\n\t\tthis.renderTarget.texture.name = \"DenoiserComposePass.Texture\"\n\n\t\tlet diffuseGiTexture\n\t\tlet specularGiTexture\n\n\t\tif (options.inputType === \"diffuseSpecular\") {\n\t\t\tdiffuseGiTexture = textures[0]\n\t\t\tspecularGiTexture = textures[1]\n\t\t} else if (options.inputType === \"diffuse\") {\n\t\t\tdiffuseGiTexture = textures[0]\n\t\t} else if (options.inputType === \"specular\") {\n\t\t\tspecularGiTexture = textures[0]\n\t\t}\n\n\t\tthis.fullscreenMaterial = new ShaderMaterial({\n\t\t\tfragmentShader: /* glsl */ `\n varying vec2 vUv;\n uniform sampler2D sceneTexture;\n uniform highp sampler2D depthTexture;\n uniform sampler2D diffuseGiTexture;\n uniform sampler2D specularGiTexture;\n uniform mat4 cameraMatrixWorld;\n uniform mat4 projectionMatrix;\n uniform mat4 projectionMatrixInverse;\n\t\t\tuniform float cameraNear;\n\t\t\tuniform float cameraFar;\n\n #include <common>\n #include <packing>\n\n\t\t\t#define TYPE_DIFFUSE_SPECULAR 0\n\t\t\t#define TYPE_DIFFUSE 1\n\t\t\t#define TYPE_SPECULAR 2\n\n ${gbuffer_packing}\n ${ssgi_poisson_compose_functions}\n\n void main() {\n float depth = textureLod(depthTexture, vUv, 0.).r;\n\n\t\t\t\tif(depth == 1. && fwidth(depth) == 0.){\n\t\t\t\t\tdiscard;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// on Android there's a bug where using \"vec3 normal = unpackNormal(textureLod(velocityTexture, vUv, 0.).b);\" instead of\n\t\t\t\t// \"vec3 normal = unpackNormal(velocity.b);\" causes the normal to be distorted (possibly due to packHalf2x16 function)\n\n Material mat = getMaterial(gBufferTexture, vUv);\n\n vec3 viewNormal = (vec4(mat.normal, 0.) * cameraMatrixWorld).xyz;\n\n\t\t\t\tfloat viewZ = -getViewZ(depth);\n\n // view-space position of the current texel\n\t\t\t\tvec3 viewPos = getViewPosition(viewZ);\n vec3 viewDir = normalize(viewPos);\n\n vec4 diffuseGi = textureLod(diffuseGiTexture, vUv, 0.);\n vec4 specularGi = textureLod(specularGiTexture, vUv, 0.);\n\n vec3 gi = constructGlobalIllumination(diffuseGi.rgb, specularGi.rgb, viewDir, viewNormal, mat.diffuse.rgb, mat.emissive, mat.roughness, mat.metalness);\n\n\t\t\t\tgl_FragColor = vec4(gi, 1.);\n }\n `,\n\t\t\tvertexShader: basicVertexShader,\n\t\t\tuniforms: {\n\t\t\t\tsceneTexture: { value: null },\n\t\t\t\tviewMatrix: { value: camera.matrixWorldInverse },\n\t\t\t\tcameraMatrixWorld: { value: camera.matrixWorld },\n\t\t\t\tprojectionMatrix: { value: camera.projectionMatrix },\n\t\t\t\tprojectionMatrixInverse: { value: camera.projectionMatrixInverse },\n\t\t\t\tcameraNear: { value: camera.near },\n\t\t\t\tcameraFar: { value: camera.far },\n\t\t\t\tgBufferTexture: { value: gBufferTexture },\n\t\t\t\tdepthTexture: { value: depthTexture },\n\t\t\t\tdiffuseGiTexture: { value: diffuseGiTexture },\n\t\t\t\tspecularGiTexture: { value: specularGiTexture }\n\t\t\t},\n\t\t\tdefines: {\n\t\t\t\tinputType: [\"diffuseSpecular\", \"diffuse\", \"specular\"].indexOf(options.inputType) ?? 0\n\t\t\t},\n\t\t\tblending: NoBlending,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t\ttoneMapped: false\n\t\t})\n\n\t\tif (camera.isPerspectiveCamera) this.fullscreenMaterial.defines.PERSPECTIVE_CAMERA = \"\"\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture\n\t}\n\n\tdispose() {\n\t\tthis.renderTarget.dispose()\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width, height)\n\t}\n\n\tsetSceneTexture(texture) {\n\t\tthis.fullscreenMaterial.uniforms.sceneTexture.value = texture\n\t}\n\n\trender(renderer) {\n\t\tthis.fullscreenMaterial.uniforms.cameraNear.value = this._camera.near\n\t\tthis.fullscreenMaterial.uniforms.cameraFar.value = this._camera.far\n\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.render(this.scene, this.camera)\n\t}\n}\n","/* eslint-disable camelcase */\nimport { Pass } from \"postprocessing\"\nimport { GLSL3, HalfFloatType, ShaderMaterial, Vector2, WebGLMultipleRenderTargets } from \"three\"\n// eslint-disable-next-line camelcase\n\nimport gbuffer_packing from \"../../gbuffer/shader/gbuffer_packing.glsl\"\nimport vertexShader from \"../../utils/shader/basic.vert\"\n\nimport { GBufferPass } from \"../../gbuffer/GBufferPass\"\nimport { unrollLoops } from \"../../ssgi/utils/Utils\"\nimport { useBlueNoise } from \"../../utils/BlueNoiseUtils\"\nimport fragmentShader from \"../shader/poisson_denoise.frag\"\n\nconst finalFragmentShader = fragmentShader.replace(\"#include <gbuffer_packing>\", gbuffer_packing)\n\nconst defaultPoissonBlurOptions = {\n\titerations: 1,\n\tradius: 3,\n\tphi: 0.5,\n\tlumaPhi: 5,\n\tdepthPhi: 2,\n\tnormalPhi: 3.25,\n\tinputType: \"diffuseSpecular\" // can be \"diffuseSpecular\", \"diffuse\" or \"specular\"\n}\n\nexport class PoissonDenoisePass extends Pass {\n\titerations = defaultPoissonBlurOptions.iterations\n\tindex = 0\n\n\tconstructor(camera, textures, options = defaultPoissonBlurOptions) {\n\t\tsuper(\"PoissonBlurPass\")\n\n\t\toptions = { ...defaultPoissonBlurOptions, ...options }\n\n\t\tthis.textures = textures\n\n\t\tlet isTextureSpecular = [false, true]\n\t\tif (options.inputType === \"diffuse\") isTextureSpecular = [false, false]\n\t\tif (options.inputType === \"specular\") isTextureSpecular = [true, true]\n\n\t\tconst textureCount = options.inputType === \"diffuseSpecular\" ? 2 : 1\n\n\t\tconst fragmentShader = unrollLoops(finalFragmentShader.replaceAll(\"textureCount\", textureCount))\n\n\t\tthis.fullscreenMaterial = new ShaderMaterial({\n\t\t\tfragmentShader,\n\t\t\tvertexShader,\n\t\t\tuniforms: {\n\t\t\t\tdepthTexture: { value: null },\n\t\t\t\tinputTexture: { value: textures[0] },\n\t\t\t\tinputTexture2: { value: textures[1] },\n\t\t\t\tgBufferTexture: { value: null },\n\t\t\t\tnormalTexture: { value: null },\n\t\t\t\tprojectionMatrix: { value: camera.projectionMatrix },\n\t\t\t\tprojectionMatrixInverse: { value: camera.projectionMatrixInverse },\n\t\t\t\tcameraMatrixWorld: { value: camera.matrixWorld },\n\t\t\t\tviewMatrix: { value: camera.matrixWorldInverse },\n\t\t\t\tradius: { value: defaultPoissonBlurOptions.radius },\n\t\t\t\tphi: { value: defaultPoissonBlurOptions.phi },\n\t\t\t\tlumaPhi: { value: defaultPoissonBlurOptions.lumaPhi },\n\t\t\t\tdepthPhi: { value: defaultPoissonBlurOptions.depthPhi },\n\t\t\t\tnormalPhi: { value: defaultPoissonBlurOptions.normalPhi },\n\t\t\t\troughnessPhi: { value: defaultPoissonBlurOptions.roughnessPhi },\n\t\t\t\tspecularPhi: { value: defaultPoissonBlurOptions.specularPhi },\n\t\t\t\tresolution: { value: new Vector2() }\n\t\t\t},\n\t\t\tdefines: {\n\t\t\t\tisTextureSpecular: \"bool[2](\" + isTextureSpecular.join(\",\") + \")\"\n\t\t\t},\n\t\t\tglslVersion: GLSL3\n\t\t})\n\n\t\tuseBlueNoise(this.fullscreenMaterial)\n\n\t\tconst renderTargetOptions = {\n\t\t\ttype: HalfFloatType, // using HalfFloatType as FloatType with bilinear filtering isn't supported on some Apple devices\n\t\t\tdepthBuffer: false\n\t\t}\n\n\t\tthis.renderTargetA = new WebGLMultipleRenderTargets(1, 1, textureCount, renderTargetOptions)\n\t\tthis.renderTargetB = new WebGLMultipleRenderTargets(1, 1, textureCount, renderTargetOptions)\n\n\t\t// give the textures of renderTargetA and renderTargetB names\n\t\tthis.renderTargetB.texture[0].name = \"PoissonDenoisePass.\" + (isTextureSpecular[0] ? \"specular\" : \"diffuse\")\n\n\t\tif (textureCount > 1) {\n\t\t\tthis.renderTargetB.texture[1].name = \"PoissonDenoisePass.\" + (isTextureSpecular[1] ? \"specular\" : \"diffuse\")\n\t\t}\n\n\t\tconst { uniforms } = this.fullscreenMaterial\n\n\t\tuniforms[\"depthPhi\"].value = options.depthPhi\n\t\tuniforms[\"normalPhi\"].value = options.normalPhi\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTargetA.setSize(width, height)\n\t\tthis.renderTargetB.setSize(width, height)\n\n\t\tthis.fullscreenMaterial.uniforms.resolution.value.set(width, height)\n\t}\n\n\tget texture() {\n\t\treturn this.renderTargetB.texture\n\t}\n\n\t// can either be a GBufferPass or a VelocityDepthNormalPass\n\tsetGBufferPass(gBufferPass) {\n\t\tif (gBufferPass instanceof GBufferPass) {\n\t\t\tthis.fullscreenMaterial.uniforms.gBufferTexture.value = gBufferPass.texture\n\t\t\tthis.fullscreenMaterial.defines.GBUFFER_TEXTURE = \"\"\n\t\t} else {\n\t\t\tthis.fullscreenMaterial.uniforms.normalTexture.value = gBufferPass.texture\n\t\t}\n\n\t\tthis.fullscreenMaterial.uniforms.depthTexture.value = gBufferPass.renderTarget.depthTexture\n\t}\n\n\tsetnNormalTexture(texture) {\n\t\tthis.fullscreenMaterial.uniforms.normalTexture.value = texture\n\t}\n\n\tsetDepthTexture(texture) {\n\t\tthis.fullscreenMaterial.uniforms.depthTexture.value = texture\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.renderTargetA.dispose()\n\t\tthis.renderTargetB.dispose()\n\t\tthis.fullscreenMaterial.dispose()\n\t}\n\n\trender(renderer) {\n\t\tfor (let i = 0; i < 2 * this.iterations; i++) {\n\t\t\tconst horizontal = i % 2 === 0\n\t\t\tconst inputRenderTarget = horizontal ? this.renderTargetB : this.renderTargetA\n\n\t\t\tthis.fullscreenMaterial.uniforms[\"inputTexture\"].value = i === 0 ? this.textures[0] : inputRenderTarget.texture[0]\n\t\t\tthis.fullscreenMaterial.uniforms[\"inputTexture2\"].value =\n\t\t\t\ti === 0 ? this.textures[1] : inputRenderTarget.texture[1]\n\n\t\t\tconst renderTarget = horizontal ? this.renderTargetA : this.renderTargetB\n\n\t\t\trenderer.setRenderTarget(renderTarget)\n\t\t\trenderer.render(this.scene, this.camera)\n\t\t}\n\t}\n}\n\nPoissonDenoisePass.DefaultOptions = defaultPoissonBlurOptions\n","import { TemporalReprojectPass } from \"../temporal-reproject/TemporalReprojectPass\"\nimport { VelocityDepthNormalPass } from \"../temporal-reproject/pass/VelocityDepthNormalPass\"\nimport { DenoiserComposePass } from \"./pass/DenoiserComposePass\"\nimport { PoissonDenoisePass } from \"./pass/PoissonDenoisePass\"\n\nconst defaultDenosierOptions = {\n\tdenoiseMode: \"full\", // can be \"full\" | \"full_temporal\" | \"denoised\" | \"temporal\"\n\tinputType: \"diffuseSpecular\", // can be \"diffuseSpecular\" | \"diffuse\" | \"specular\"\n\tgBufferPass: null,\n\tvelocityDepthNormalPass: null\n}\n\n// a spatio-temporal denoiser\n// temporal: temporal reprojection to reproject previous frames\n// spatial: poisson denoiser to denoise the current frame recurrently\nexport default class Denoiser {\n\tconstructor(scene, camera, texture, options = defaultDenosierOptions) {\n\t\toptions = { ...defaultDenosierOptions, ...options }\n\t\tthis.options = options\n\n\t\tthis.velocityDepthNormalPass = options.velocityDepthNormalPass ?? new VelocityDepthNormalPass(scene, camera)\n\t\tthis.isOwnVelocityDepthNormalPass = !options.velocityDepthNormalPass\n\n\t\tconst textureCount = options.inputType === \"diffuseSpecular\" ? 2 : 1\n\n\t\tthis.temporalReprojectPass = new TemporalReprojectPass(\n\t\t\tscene,\n\t\t\tcamera,\n\t\t\tthis.velocityDepthNormalPass,\n\t\t\ttexture,\n\t\t\ttextureCount,\n\t\t\t{\n\t\t\t\tfullAccumulate: true,\n\n\t\t\t\tlogTransform: true,\n\t\t\t\tcopyTextures: !options.denoise,\n\t\t\t\treprojectSpecular: [false, true],\n\t\t\t\tneighborhoodClamp: [true, true],\n\t\t\t\tneighborhoodClampRadius: 2,\n\t\t\t\tneighborhoodClampIntensity: 0.5,\n\t\t\t\t...options\n\t\t\t}\n\t\t)\n\n\t\tconst textures = this.temporalReprojectPass.renderTarget.texture.slice(0, textureCount)\n\n\t\tif (this.options.denoiseMode === \"full\" || this.options.denoiseMode === \"denoised\") {\n\t\t\tthis.denoisePass = new PoissonDenoisePass(camera, textures, options)\n\t\t\tthis.denoisePass.setGBufferPass(options.gBufferPass ?? this.velocityDepthNormalPass)\n\n\t\t\tthis.temporalReprojectPass.overrideAccumulatedTextures = this.denoisePass.renderTargetB.texture\n\t\t}\n\n\t\tconst composerInputTextures = this.denoisePass?.texture ?? textures\n\n\t\tif (options.denoiseMode.startsWith(\"full\")) {\n\t\t\tthis.denoiserComposePass = new DenoiserComposePass(\n\t\t\t\tcamera,\n\t\t\t\tcomposerInputTextures,\n\t\t\t\toptions.gBufferPass.texture,\n\t\t\t\toptions.gBufferPass.renderTarget.depthTexture,\n\t\t\t\toptions\n\t\t\t)\n\t\t}\n\t}\n\n\tget texture() {\n\t\tswitch (this.options.denoiseMode) {\n\t\t\tcase \"full\":\n\t\t\tcase \"full_temporal\":\n\t\t\t\treturn this.denoiserComposePass.texture\n\t\t\tcase \"denoised\":\n\t\t\t\treturn this.denoisePass.texture\n\t\t\tcase \"temporal\":\n\t\t\t\treturn this.temporalReprojectPass.texture\n\t\t}\n\t}\n\n\treset() {\n\t\tthis.temporalReprojectPass.reset()\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.velocityDepthNormalPass.setSize(width, height)\n\t\tthis.temporalReprojectPass.setSize(width, height)\n\t\tthis.denoisePass?.setSize(width, height)\n\t\tthis.denoiserComposePass?.setSize(width, height)\n\t}\n\n\tdispose() {\n\t\tthis.velocityDepthNormalPass.dispose()\n\t\tthis.temporalReprojectPass.dispose()\n\t\tthis.denoisePass?.dispose()\n\t\tthis.denoiserComposePass?.dispose()\n\t}\n\n\trender(renderer, inputBuffer = null) {\n\t\tif (this.isOwnVelocityDepthNormalPass) this.velocityDepthNormalPass.render(renderer)\n\t\tthis.temporalReprojectPass.render(renderer)\n\n\t\tif (this.options.inputType !== \"diffuseSpecular\") {\n\t\t\tthis.denoiserComposePass?.setSceneTexture(inputBuffer.texture)\n\t\t}\n\n\t\tthis.denoisePass?.render(renderer)\n\t\tthis.denoiserComposePass?.render(renderer)\n\t}\n}\n","/* eslint-disable camelcase */\nimport { Pass } from \"postprocessing\"\nimport { FloatType, NearestFilter, NoBlending, ShaderMaterial, WebGLRenderTarget } from \"three\"\nimport basicVertexShader from \"../../utils/shader/basic.vert\"\nimport gbuffer_packing from \"../shader/gbuffer_packing.glsl\"\n\nexport class GBufferDebugPass extends Pass {\n\tconstructor(gBufferTexture) {\n\t\tsuper(\"GBufferDebugPass\")\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\tdepthBuffer: false,\n\t\t\ttype: FloatType,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter\n\t\t})\n\n\t\tthis.renderTarget.texture.name = \"GBufferDebugPass.Texture\"\n\n\t\tthis.fullscreenMaterial = new ShaderMaterial({\n\t\t\tfragmentShader: /* glsl */ `\n varying vec2 vUv;\n uniform highp sampler2D depthTexture;\n\t\t\tuniform int mode;\n\n #include <common>\n #include <packing>\n\n ${gbuffer_packing}\n\n void main() {\n highp float depth = textureLod(depthTexture, vUv, 0.).r;\n\n\t\t\t\tif(depth == 0.){\n\t\t\t\t\tgl_FragColor = vec4(0.);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n Material mat = getMaterial(gBufferTexture, vUv);\n\n if (mode == 0) {\n gl_FragColor = vec4(mat.diffuse.rgb, 1.);\n } else if (mode == 1) {\n gl_FragColor = vec4(mat.diffuse.aaa, 1.);\n } else if (mode == 2) {\n gl_FragColor = vec4(mat.normal, 1.);\n } else if (mode == 3) {\n gl_FragColor = vec4(vec3(mat.roughness), 1.);\n } else if (mode == 4) {\n gl_FragColor = vec4(vec3(mat.metalness), 1.);\n } else {\n gl_FragColor = vec4(mat.emissive, 1.);\n }\n }\n `,\n\t\t\tvertexShader: basicVertexShader,\n\t\t\tuniforms: {\n\t\t\t\tgBufferTexture: { value: gBufferTexture },\n\t\t\t\tmode: { value: 0 }\n\t\t\t},\n\t\t\tblending: NoBlending,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t\ttoneMapped: false\n\t\t})\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture\n\t}\n\n\tdispose() {\n\t\tthis.renderTarget.dispose()\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width, height)\n\t}\n\n\trender(renderer) {\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.render(this.scene, this.camera)\n\t}\n}\n","/* eslint-disable max-len */\n/**\n * Options of the SSGI effect\n * @typedef {Object} SSGIOptions\n * @property {Number} [distance] maximum distance a SSGI ray can travel to find what it reflects\n * @property {Number} [thickness] maximum depth difference between a ray and the particular depth at its screen position before refining with binary search; higher values will result in better performance\n * @property {Number} [envBlur] higher values will result in lower mipmaps being sampled which will cause less noise but also less detail regarding environment lighting\n * @property {Number} [importanceSampling] whether to use importance sampling for the environment map\n * @property {Number} [denoiseIterations] how many times the denoise filter runs, more iterations will denoise the frame better but need more performance\n * @property {Number} [radius] the radius of the denoiser, higher values will result in less noise on less detailled surfaces but more noise on detailled surfaces\n * @property {Number} [depthPhi] depth factor of the denoiser, higher values will use neighboring areas with different depth values more resulting in less noise but loss of details\n * @property {Number} [normalPhi] normals factor of the denoiser, higher values will use neighboring areas with different normals more resulting in less noise but loss of details and sharpness\n * @property {Number} [roughnessPhi] roughness factor of the denoiser setting how much the denoiser should only apply the blur to rougher surfaces, a value of 0 means the denoiser will blur mirror-like surfaces the same as rough surfaces\n * @property {Number} [specularPhi] specular factor of the denoiser setting how much the denoiser will blur specular reflections\n * @property {Number} [lumaPhi] luminance factor of the denoiser setting how aggressive the denoiser is on areas with different luminance\n * @property {Number} [steps] number of steps a SSGI ray can maximally do to find an object it intersected (and thus reflects)\n * @property {Number} [refineSteps] once we had our ray intersect something, we need to find the exact point in space it intersected and thus it reflects; this can be done through binary search with the given number of maximum steps\n * @property {boolean} [missedRays] if there should still be SSGI for rays for which a reflecting point couldn't be found; enabling this will result in stretched looking SSGI which can look good or bad depending on the angle\n * @property {Number} [resolutionScale] resolution of the SSGI effect, a resolution of 0.5 means the effect will be rendered at half resolution\n */\n\n/**\n * The options of the SSGI effect\n * @type {SSGIOptions}\n */\nexport const defaultSSGIOptions = {\n\tmode: \"ssgi\",\n\tdistance: 10,\n\tthickness: 10,\n\tdenoiseIterations: 1,\n\tdenoiseKernel: 2,\n\tdenoiseDiffuse: 10,\n\tdenoiseSpecular: 10,\n\tradius: 3,\n\tphi: 0.5,\n\tlumaPhi: 5,\n\tdepthPhi: 2,\n\tnormalPhi: 50,\n\troughnessPhi: 50,\n\tspecularPhi: 50,\n\tenvBlur: 0.5,\n\timportanceSampling: true,\n\tsteps: 20,\n\trefineSteps: 5,\n\tresolutionScale: 1,\n\tmissedRays: false,\n\toutputTexture: null\n}\n","import { Effect, RenderPass, Selection } from \"postprocessing\"\nimport {\n\tColor,\n\tFloatType,\n\tLinearFilter,\n\tLinearMipMapLinearFilter,\n\tSRGBColorSpace,\n\tShaderChunk,\n\tUniform,\n\tWebGLRenderTarget\n} from \"three\"\nimport { CubeToEquirectEnvPass } from \"./pass/CubeToEquirectEnvPass.js\"\nimport { SSGIPass } from \"./pass/SSGIPass.js\"\n/* eslint-disable camelcase */\nimport Denoiser from \"../denoise/Denoiser.js\"\nimport { GBufferDebugPass } from \"../gbuffer/debug/GBufferDebugPass.js\"\nimport { getVisibleChildren } from \"../gbuffer/utils/GBufferUtils.js\"\nimport { isChildMaterialRenderable } from \"../utils/SceneUtils.js\"\nimport { defaultSSGIOptions } from \"./SSGIOptions\"\nimport ssgi_compose from \"./shader/ssgi_compose.frag\"\nimport { createGlobalDisableIblRadianceUniform, getMaxMipLevel } from \"./utils/Utils.js\"\n\nconst { render } = RenderPass.prototype\n\nconst globalIblRadianceDisabledUniform = createGlobalDisableIblRadianceUniform()\n\nexport class SSGIEffect extends Effect {\n\tselection = new Selection()\n\tisUsingRenderPass = true\n\n\tconstructor(composer, scene, camera, options) {\n\t\toptions = { ...defaultSSGIOptions, ...options }\n\n\t\tlet fragmentShader = ssgi_compose.replace(\n\t\t\t\"#include <fog_pars_fragment>\",\n\t\t\tShaderChunk.fog_pars_fragment.replace(\"varying\", \"\")\n\t\t)\n\n\t\t// delete the line starting with gl_FragColor using a regex\n\t\tfragmentShader = fragmentShader.replace(\n\t\t\t\"#include <fog_fragment>\",\n\t\t\tShaderChunk.fog_fragment.replace(/.*gl_FragColor.*/g, \"\")\n\t\t)\n\n\t\tconst defines = new Map()\n\t\tif (scene.fog) defines.set(\"USE_FOG\", \"\")\n\t\tif (scene.fog?.isFogExp2) defines.set(\"FOG_EXP2\", \"\")\n\n\t\tsuper(\"SSGIEffect\", fragmentShader, {\n\t\t\ttype: \"FinalSSGIMaterial\",\n\t\t\tuniforms: new Map([\n\t\t\t\t[\"inputTexture\", new Uniform(null)],\n\t\t\t\t[\"sceneTexture\", new Uniform(null)],\n\t\t\t\t[\"depthTexture\", new Uniform(null)],\n\t\t\t\t[\"isDebug\", new Uniform(false)],\n\t\t\t\t[\"fogColor\", new Uniform(new Color())],\n\t\t\t\t[\"fogNear\", new Uniform(0)],\n\t\t\t\t[\"fogFar\", new Uniform(0)],\n\t\t\t\t[\"fogDensity\", new Uniform(0)],\n\t\t\t\t[\"cameraNear\", new Uniform(0)],\n\t\t\t\t[\"cameraFar\", new Uniform(0)]\n\t\t\t]),\n\t\t\tdefines: new Map([[\"PERSPECTIVE_CAMERA\", camera.isPerspectiveCamera ? \"1\" : \"0\"], ...defines])\n\t\t})\n\n\t\tthis._scene = scene\n\t\tthis._camera = camera\n\t\tthis.composer = composer\n\n\t\tif (options.mode === \"ssr\") {\n\t\t\toptions.reprojectSpecular = true\n\t\t\toptions.neighborhoodClamp = true\n\t\t\toptions.inputType = \"specular\"\n\t\t} else if (options.mode === \"ssgi\") {\n\t\t\toptions.reprojectSpecular = [false, true]\n\t\t\toptions.neighborhoodClamp = [false, true]\n\t\t}\n\n\t\tif (typeof options.preset === \"string\") {\n\t\t\tswitch (options.preset) {\n\t\t\t\tcase \"low\":\n\t\t\t\t\toptions.steps = 10\n\t\t\t\t\toptions.refineSteps = 2\n\t\t\t\t\toptions.denoiseMode = \"full_temporal\"\n\t\t\t\t\tbreak\n\n\t\t\t\tcase \"medium\":\n\t\t\t\t\toptions.steps = 20\n\t\t\t\t\toptions.refineSteps = 4\n\t\t\t\t\toptions.denoiseMode = \"full\"\n\t\t\t\t\tbreak\n\n\t\t\t\tcase \"medium\":\n\t\t\t\t\toptions.steps = 40\n\t\t\t\t\toptions.refineSteps = 4\n\t\t\t\t\toptions.denoiseMode = \"full\"\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tthis.ssgiPass = new SSGIPass(this, options)\n\t\tthis.denoiser = new Denoiser(scene, camera, this.ssgiPass.texture, {\n\t\t\tgBufferPass: this.ssgiPass.gBufferPass,\n\t\t\tvelocityDepthNormalPass: options.velocityDepthNormalPass,\n\t\t\t...options\n\t\t})\n\n\t\tthis.lastSize = {\n\t\t\twidth: options.width,\n\t\t\theight: options.height,\n\t\t\tresolutionScale: options.resolutionScale\n\t\t}\n\n\t\tthis.sceneRenderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\tcolorSpace: SRGBColorSpace\n\t\t})\n\n\t\tthis.renderPass = new RenderPass(this._scene, this._camera)\n\t\tthis.renderPass.renderToScreen = false\n\n\t\tthis.setSize(options.width, options.height)\n\n\t\tconst th = this\n\t\tconst ssgiRenderPass = this.renderPass\n\t\t// eslint-disable-next-line space-before-function-paren\n\t\tRenderPass.prototype.render = function (...args) {\n\t\t\tif (this !== ssgiRenderPass) {\n\t\t\t\tconst wasUsingRenderPass = th.isUsingRenderPass\n\t\t\t\tth.isUsingRenderPass = true\n\n\t\t\t\tif (wasUsingRenderPass != th.isUsingRenderPass) th.updateUsingRenderPass()\n\t\t\t}\n\n\t\t\trender.call(this, ...args)\n\t\t}\n\n\t\tthis.makeOptionsReactive(options)\n\n\t\tthis.outputTexture = this.denoiser.texture\n\t\t// this.outputTexture = this.denoiser.denoisePass.textures[1]\n\t}\n\n\tupdateUsingRenderPass() {\n\t\tif (this.isUsingRenderPass) {\n\t\t\tthis.ssgiPass.fullscreenMaterial.defines.useDirectLight = \"\"\n\t\t} else {\n\t\t\tdelete this.ssgiPass.fullscreenMaterial.defines.useDirectLight\n\t\t}\n\n\t\tthis.ssgiPass.fullscreenMaterial.needsUpdate = true\n\t}\n\n\treset() {\n\t\tthis.denoiser.reset()\n\t}\n\n\tmakeOptionsReactive(options) {\n\t\tlet needsUpdate = false\n\n\t\tconst ssgiPassFullscreenMaterialUniforms = this.ssgiPass.fullscreenMaterial.uniforms\n\t\tconst ssgiPassFullscreenMaterialUniformsKeys = Object.keys(ssgiPassFullscreenMaterialUniforms)\n\n\t\tfor (const key of Object.keys(options)) {\n\t\t\tObject.defineProperty(this, key, {\n\t\t\t\tget() {\n\t\t\t\t\treturn options[key]\n\t\t\t\t},\n\t\t\t\tset(value) {\n\t\t\t\t\tif (options[key] === value && needsUpdate) return\n\n\t\t\t\t\toptions[key] = value\n\n\t\t\t\t\tswitch (key) {\n\t\t\t\t\t\t// denoiser\n\t\t\t\t\t\tcase \"denoiseIterations\":\n\t\t\t\t\t\t\tif (this.denoiser.denoisePass) this.denoiser.denoisePass.iterations = value\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"radius\":\n\t\t\t\t\t\tcase \"phi\":\n\t\t\t\t\t\tcase \"lumaPhi\":\n\t\t\t\t\t\tcase \"depthPhi\":\n\t\t\t\t\t\tcase \"normalPhi\":\n\t\t\t\t\t\tcase \"roughnessPhi\":\n\t\t\t\t\t\tcase \"specularPhi\":\n\t\t\t\t\t\t\tif (this.denoiser.denoisePass?.fullscreenMaterial.uniforms[key]) {\n\t\t\t\t\t\t\t\tthis.denoiser.denoisePass.fullscreenMaterial.uniforms[key].value = value\n\t\t\t\t\t\t\t\tthis.reset()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"denoiseIterations\":\n\t\t\t\t\t\tcase \"radius\":\n\t\t\t\t\t\t\tif (this.denoiser.denoisePass) this.denoiser.denoisePass[key] = value\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\t// SSGI\n\t\t\t\t\t\tcase \"resolutionScale\":\n\t\t\t\t\t\t\tthis.setSize(this.lastSize.width, this.lastSize.height)\n\t\t\t\t\t\t\tthis.reset()\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"steps\":\n\t\t\t\t\t\tcase \"refineSteps\":\n\t\t\t\t\t\t\tthis.ssgiPass.fullscreenMaterial.defines[key] = parseInt(value)\n\t\t\t\t\t\t\tthis.ssgiPass.fullscreenMaterial.needsUpdate = needsUpdate\n\t\t\t\t\t\t\tthis.reset()\n\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"importanceSampling\":\n\t\t\t\t\t\tcase \"missedRays\":\n\t\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\t\tthis.ssgiPass.fullscreenMaterial.defines[key] = \"\"\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdelete this.ssgiPass.fullscreenMaterial.defines[key]\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.ssgiPass.fullscreenMaterial.needsUpdate = needsUpdate\n\t\t\t\t\t\t\tthis.reset()\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"distance\":\n\t\t\t\t\t\t\tssgiPassFullscreenMaterialUniforms.rayDistance.value = value\n\t\t\t\t\t\t\tthis.reset()\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"outputTexture\":\n\t\t\t\t\t\t\tif (!this.outputTexture) {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (typeof value === \"string\") {\n\t\t\t\t\t\t\t\tif (this.gBufferDebugPass === undefined) {\n\t\t\t\t\t\t\t\t\tthis.gBufferDebugPass = new GBufferDebugPass(this.ssgiPass.gBufferPass.texture)\n\t\t\t\t\t\t\t\t\tthis.gBufferDebugPass.setSize(this.lastSize.width, this.lastSize.height)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst modes = [\"diffuse\", \"alpha\", \"normal\", \"roughness\", \"metalness\", \"emissive\"]\n\t\t\t\t\t\t\t\tconst mode = modes.indexOf(value)\n\t\t\t\t\t\t\t\tthis.gBufferDebugPass.fullscreenMaterial.uniforms.mode.value = mode\n\n\t\t\t\t\t\t\t\tthis.outputTexture = this.gBufferDebugPass.texture\n\t\t\t\t\t\t\t} else if (this.gBufferDebugPass !== undefined && this.outputTexture !== this.gBufferDebugPass.texture) {\n\t\t\t\t\t\t\t\tthis.gBufferDebugPass.dispose()\n\t\t\t\t\t\t\t\tdelete this.gBufferDebugPass\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.uniforms.get(\"isDebug\").value = this.outputTexture !== this.denoiser.texture\n\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\t// must be a uniform\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif (ssgiPassFullscreenMaterialUniformsKeys.includes(key)) {\n\t\t\t\t\t\t\t\tssgiPassFullscreenMaterialUniforms[key].value = value\n\t\t\t\t\t\t\t\tthis.reset()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// apply all uniforms and defines\n\t\t\tthis[key] = options[key]\n\t\t}\n\n\t\tneedsUpdate = true\n\t}\n\n\tinitialize(renderer, ...args) {\n\t\tsuper.initialize(renderer, ...args)\n\t\tthis.ssgiPass.initialize(renderer, ...args)\n\t}\n\n\tsetSize(width, height, force = false) {\n\t\tif (width === undefined && height === undefined) return\n\t\tif (\n\t\t\t!force &&\n\t\t\twidth === this.lastSize.width &&\n\t\t\theight === this.lastSize.height &&\n\t\t\tthis.resolutionScale === this.lastSize.resolutionScale\n\t\t) {\n\t\t\treturn\n\t\t}\n\n\t\tthis.ssgiPass.setSize(width, height)\n\t\tthis.denoiser.setSize(width, height)\n\t\tthis.gBufferDebugPass?.setSize(width, height)\n\t\tthis.sceneRenderTarget.setSize(width, height)\n\t\tthis.cubeToEquirectEnvPass?.setSize(width, height)\n\n\t\tthis.lastSize = {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tresolutionScale: this.resolutionScale\n\t\t}\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.ssgiPass.dispose()\n\t\tthis.denoiser.dispose()\n\t\tthis.cubeToEquirectEnvPass?.dispose()\n\n\t\tRenderPass.prototype.render = render\n\t}\n\n\tkeepEnvMapUpdated(renderer) {\n\t\tconst ssgiMaterial = this.ssgiPass.fullscreenMaterial\n\n\t\tlet environment = this._scene.environment\n\n\t\tif (environment) {\n\t\t\tif (ssgiMaterial.uniforms.envMapInfo.value.mapUuid !== environment.uuid) {\n\t\t\t\t// if the environment is a cube texture, convert it to an equirectangular texture so we can sample it in the SSGI pass and use MIS\n\t\t\t\tif (environment.isCubeTexture) {\n\t\t\t\t\tif (!this.cubeToEquirectEnvPass) this.cubeToEquirectEnvPass = new CubeToEquirectEnvPass()\n\n\t\t\t\t\tenvironment = this.cubeToEquirectEnvPass.generateEquirectEnvMap(renderer, environment)\n\t\t\t\t\tenvironment.uuid = this._scene.environment.uuid\n\t\t\t\t}\n\n\t\t\t\tif (!environment.generateMipmaps) {\n\t\t\t\t\tenvironment.generateMipmaps = true\n\t\t\t\t\tenvironment.minFilter = LinearMipMapLinearFilter\n\t\t\t\t\tenvironment.magFilter = LinearFilter\n\t\t\t\t\tenvironment.needsUpdate = true\n\t\t\t\t}\n\n\t\t\t\tif (environment.type === FloatType) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\"SSGI: Environment map is FloatType, this causes the environment map to be black in the SSGI pass for many modern Apple devices. Please use HalfFloatType instead.\"\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tssgiMaterial.uniforms.envMapInfo.value.mapUuid = environment.uuid\n\n\t\t\t\tconst maxEnvMapMipLevel = getMaxMipLevel(environment)\n\t\t\t\tssgiMaterial.uniforms.maxEnvMapMipLevel.value = maxEnvMapMipLevel\n\n\t\t\t\tssgiMaterial.uniforms.envMapInfo.value.map = environment\n\n\t\t\t\tssgiMaterial.defines.USE_ENVMAP = \"\"\n\t\t\t\tdelete ssgiMaterial.defines.importanceSampling\n\n\t\t\t\tif (this.importanceSampling) {\n\t\t\t\t\tssgiMaterial.uniforms.envMapInfo.value.updateFrom(environment, renderer).then(() => {\n\t\t\t\t\t\tssgiMaterial.defines.importanceSampling = \"\"\n\t\t\t\t\t\tssgiMaterial.needsUpdate = true\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tssgiMaterial.uniforms.envMapInfo.value.map = environment\n\t\t\t\t}\n\n\t\t\t\tthis.reset()\n\n\t\t\t\tssgiMaterial.needsUpdate = true\n\t\t\t}\n\t\t} else if (\"USE_ENVMAP\" in ssgiMaterial.defines) {\n\t\t\tdelete ssgiMaterial.defines.USE_ENVMAP\n\t\t\tdelete ssgiMaterial.defines.importanceSampling\n\n\t\t\tssgiMaterial.needsUpdate = true\n\t\t}\n\t}\n\n\tget depthTexture() {\n\t\treturn this.ssgiPass.gBufferPass.depthTexture\n\t}\n\n\tupdate(renderer, inputBuffer) {\n\t\tthis.keepEnvMapUpdated(renderer)\n\n\t\tconst sceneBuffer = this.isUsingRenderPass ? inputBuffer : this.sceneRenderTarget\n\n\t\tconst hideMeshes = []\n\n\t\tif (!this.isUsingRenderPass) {\n\t\t\tconst children = []\n\n\t\t\tfor (const c of getVisibleChildren(this._scene)) {\n\t\t\t\tif (c.isScene) return\n\n\t\t\t\tc.visible = !isChildMaterialRenderable(c)\n\n\t\t\t\tc.visible ? hideMeshes.push(c) : children.push(c)\n\t\t\t}\n\n\t\t\tthis.renderPass.render(renderer, this.sceneRenderTarget)\n\n\t\t\tfor (const c of children) c.visible = true\n\t\t\tfor (const c of hideMeshes) c.visible = false\n\t\t}\n\n\t\tthis.ssgiPass.fullscreenMaterial.uniforms.directLightTexture.value = sceneBuffer.texture\n\n\t\tthis.ssgiPass.render(renderer)\n\t\tthis.gBufferDebugPass?.render(renderer)\n\t\tthis.denoiser.render(renderer, inputBuffer)\n\n\t\tthis.uniforms.get(\"inputTexture\").value = this.outputTexture[0] ?? this.outputTexture\n\t\tthis.uniforms.get(\"sceneTexture\").value = sceneBuffer.texture\n\t\tthis.uniforms.get(\"depthTexture\").value = this.ssgiPass.gBufferPass.depthTexture\n\n\t\t// update the fog uniforms\n\t\tif (this._scene.fog) {\n\t\t\tthis.uniforms.get(\"fogColor\").value = this._scene.fog.color\n\t\t\tthis.uniforms.get(\"fogNear\").value = this._scene.fog.near\n\t\t\tthis.uniforms.get(\"fogFar\").value = this._scene.fog.far\n\t\t\tthis.uniforms.get(\"fogDensity\").value = this._scene.fog.density\n\n\t\t\tthis.uniforms.get(\"cameraNear\").value = this._camera.near\n\t\t\tthis.uniforms.get(\"cameraFar\").value = this._camera.far\n\t\t}\n\n\t\tfor (const c of hideMeshes) c.visible = true\n\n\t\tglobalIblRadianceDisabledUniform.value = true\n\n\t\tcancelAnimationFrame(this.rAF2)\n\t\tcancelAnimationFrame(this.rAF)\n\t\tcancelAnimationFrame(this.usingRenderPassRAF)\n\n\t\tthis.rAF = requestAnimationFrame(() => {\n\t\t\tthis.rAF2 = requestAnimationFrame(() => {\n\t\t\t\tglobalIblRadianceDisabledUniform.value = false\n\t\t\t})\n\t\t})\n\t\tthis.usingRenderPassRAF = requestAnimationFrame(() => {\n\t\t\tconst wasUsingRenderPass = this.isUsingRenderPass\n\t\t\tthis.isUsingRenderPass = false\n\n\t\t\tif (wasUsingRenderPass != this.isUsingRenderPass) this.updateUsingRenderPass()\n\t\t})\n\t}\n}\n\nSSGIEffect.DefaultOptions = defaultSSGIOptions\n","/* eslint-disable camelcase */\n\nimport { Effect } from \"postprocessing\"\nimport { NoColorSpace, NearestFilter, RepeatWrapping, TextureLoader, Uniform, Vector2 } from \"three\"\nimport motion_blur from \"./shader/motion_blur.frag\"\n\nimport blueNoiseImage from \"./../utils/blue_noise_rgba.png\"\nimport { setupBlueNoise } from \"../utils/BlueNoiseUtils\"\n\n// https://www.nvidia.com/docs/io/8230/gdc2003_openglshadertricks.pdf\n// http://john-chapman-graphics.blogspot.com/2013/01/per-object-motion-blur.html\n// reference code: https://github.com/gkjohnson/threejs-sandbox/blob/master/motionBlurPass/src/CompositeShader.js\n\nconst defaultOptions = { intensity: 1, jitter: 1, samples: 16 }\n\nexport class MotionBlurEffect extends Effect {\n\tpointsIndex = 0\n\n\tconstructor(velocityPass, options = defaultOptions) {\n\t\toptions = { ...defaultOptions, ...options }\n\n\t\tconst { fragmentShader, uniforms } = setupBlueNoise(motion_blur)\n\n\t\t// convert the uniforms from type { uniform: value,... } to type [\"uniform\", value,...]\n\t\tconst formattedUniforms = []\n\t\tfor (const key of Object.keys(uniforms)) {\n\t\t\tformattedUniforms.push([key, uniforms[key]])\n\t\t}\n\n\t\tsuper(\"MotionBlurEffect\", fragmentShader, {\n\t\t\ttype: \"MotionBlurMaterial\",\n\t\t\tuniforms: new Map([\n\t\t\t\t...formattedUniforms,\n\t\t\t\t[\"inputTexture\", new Uniform(null)],\n\t\t\t\t[\"velocityTexture\", new Uniform(velocityPass.texture)],\n\t\t\t\t[\"resolution\", new Uniform(new Vector2())],\n\t\t\t\t[\"intensity\", new Uniform(1)],\n\t\t\t\t[\"jitter\", new Uniform(1)],\n\t\t\t\t[\"frame\", new Uniform(0)],\n\t\t\t\t[\"deltaTime\", new Uniform(0)]\n\t\t\t]),\n\t\t\tdefines: new Map([\n\t\t\t\t[\"samples\", options.samples.toFixed(0)],\n\t\t\t\t[\"samplesFloat\", options.samples.toFixed(0) + \".0\"]\n\t\t\t])\n\t\t})\n\n\t\tthis.makeOptionsReactive(options)\n\t}\n\n\tmakeOptionsReactive(options) {\n\t\tfor (const key of Object.keys(options)) {\n\t\t\tObject.defineProperty(this, key, {\n\t\t\t\tget() {\n\t\t\t\t\treturn options[key]\n\t\t\t\t},\n\t\t\t\tset(value) {\n\t\t\t\t\toptions[key] = value\n\n\t\t\t\t\tswitch (key) {\n\t\t\t\t\t\tcase \"intensity\":\n\t\t\t\t\t\tcase \"jitter\":\n\t\t\t\t\t\t\tthis.uniforms.get(key).value = value\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tthis[key] = options[key]\n\t\t}\n\t}\n\n\tinitialize(renderer, ...args) {\n\t\tsuper.initialize(renderer, ...args)\n\n\t\tnew TextureLoader().load(blueNoiseImage, blueNoiseTexture => {\n\t\t\tblueNoiseTexture.minFilter = NearestFilter\n\t\t\tblueNoiseTexture.magFilter = NearestFilter\n\t\t\tblueNoiseTexture.wrapS = RepeatWrapping\n\t\t\tblueNoiseTexture.wrapT = RepeatWrapping\n\t\t\tblueNoiseTexture.colorSpace = NoColorSpace\n\n\t\t\tthis.uniforms.get(\"blueNoiseTexture\").value = blueNoiseTexture\n\t\t})\n\t}\n\n\tupdate(renderer, inputBuffer, deltaTime) {\n\t\tthis.uniforms.get(\"inputTexture\").value = inputBuffer.texture\n\t\tthis.uniforms.get(\"deltaTime\").value = Math.max(1 / 1000, deltaTime)\n\n\t\tconst frame = renderer.info.render.frame % 4096\n\t\tthis.uniforms.get(\"frame\").value = frame\n\n\t\tthis.uniforms.get(\"resolution\").value.set(window.innerWidth, window.innerHeight)\n\n\t\tconst noiseTexture = this.uniforms.get(\"blueNoiseTexture\").value\n\t\tif (noiseTexture && noiseTexture.source.data) {\n\t\t\tconst { width, height } = noiseTexture.source.data\n\n\t\t\tthis.uniforms.get(\"blueNoiseSize\").value.set(width, height)\n\t\t}\n\t}\n}\n","import { Effect, NormalPass } from \"postprocessing\"\nimport { Color, Uniform } from \"three\"\nimport { PoissonDenoisePass } from \"../denoise/pass/PoissonDenoisePass\"\n// eslint-disable-next-line camelcase\nimport ao_compose from \"./shader/ao_compose.frag\"\nimport { TRAAEffect } from \"../traa/TRAAEffect\"\n\nconst defaultAOOptions = {\n\tresolutionScale: 1,\n\tspp: 8,\n\tdistance: 2,\n\tdistancePower: 1,\n\tpower: 2,\n\tbias: 40,\n\tthickness: 0.075,\n\tcolor: new Color(\"black\"),\n\tuseNormalPass: false,\n\tvelocityDepthNormalPass: null,\n\tnormalTexture: null,\n\t...PoissonDenoisePass.DefaultOptions\n}\n\nclass AOEffect extends Effect {\n\tlastSize = { width: 0, height: 0, resolutionScale: 0 }\n\n\tconstructor(composer, camera, scene, aoPass, options = defaultAOOptions) {\n\t\tsuper(\"AOEffect\", ao_compose, {\n\t\t\ttype: \"FinalAOMaterial\",\n\t\t\tuniforms: new Map([\n\t\t\t\t[\"inputTexture\", new Uniform(null)],\n\t\t\t\t[\"depthTexture\", new Uniform(null)],\n\t\t\t\t[\"power\", new Uniform(0)],\n\t\t\t\t[\"color\", new Uniform(new Color(\"black\"))]\n\t\t\t])\n\t\t})\n\n\t\tthis.composer = composer\n\t\tthis.aoPass = aoPass\n\t\toptions = { ...defaultAOOptions, ...options }\n\n\t\t// set up depth texture\n\t\tif (!composer.depthTexture) composer.createDepthTexture()\n\n\t\tthis.aoPass.fullscreenMaterial.uniforms.depthTexture.value = composer.depthTexture\n\t\tthis.uniforms.get(\"depthTexture\").value = composer.depthTexture\n\n\t\t// set up optional normal texture\n\t\tif (options.useNormalPass || options.normalTexture) {\n\t\t\tif (options.useNormalPass) this.normalPass = new NormalPass(scene, camera)\n\n\t\t\tconst normalTexture = options.normalTexture ?? this.normalPass.texture\n\n\t\t\tthis.aoPass.fullscreenMaterial.uniforms.normalTexture.value = normalTexture\n\t\t\tthis.aoPass.fullscreenMaterial.defines.useNormalTexture = \"\"\n\t\t}\n\n\t\tthis.PoissonDenoisePass = new PoissonDenoisePass(camera, this.aoPass.texture, composer.depthTexture, {\n\t\t\tnormalInRgb: true\n\t\t})\n\n\t\tthis.makeOptionsReactive(options)\n\t}\n\n\tmakeOptionsReactive(options) {\n\t\tfor (const key of Object.keys(options)) {\n\t\t\tObject.defineProperty(this, key, {\n\t\t\t\tget() {\n\t\t\t\t\treturn options[key]\n\t\t\t\t},\n\t\t\t\tset(value) {\n\t\t\t\t\tif (value === null || value === undefined) return\n\n\t\t\t\t\toptions[key] = value\n\n\t\t\t\t\tswitch (key) {\n\t\t\t\t\t\tcase \"spp\":\n\t\t\t\t\t\t\tthis.aoPass.fullscreenMaterial.defines.spp = value.toFixed(0)\n\n\t\t\t\t\t\t\tthis.aoPass.fullscreenMaterial.needsUpdate = true\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"distance\":\n\t\t\t\t\t\t\tthis.aoPass.fullscreenMaterial.uniforms.aoDistance.value = value\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"resolutionScale\":\n\t\t\t\t\t\t\tthis.setSize(this.lastSize.width, this.lastSize.height)\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"power\":\n\t\t\t\t\t\t\tthis.uniforms.get(\"power\").value = value\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"color\":\n\t\t\t\t\t\t\tthis.uniforms.get(\"color\").value.copy(new Color(value))\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\t// denoiser\n\t\t\t\t\t\tcase \"iterations\":\n\t\t\t\t\t\tcase \"radius\":\n\t\t\t\t\t\tcase \"rings\":\n\t\t\t\t\t\tcase \"samples\":\n\t\t\t\t\t\t\tthis.PoissonDenoisePass[key] = value\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"lumaPhi\":\n\t\t\t\t\t\tcase \"depthPhi\":\n\t\t\t\t\t\tcase \"normalPhi\":\n\t\t\t\t\t\t\tthis.PoissonDenoisePass.fullscreenMaterial.uniforms[key].value = Math.max(value, 0.0001)\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif (key in this.aoPass.fullscreenMaterial.uniforms) {\n\t\t\t\t\t\t\t\tthis.aoPass.fullscreenMaterial.uniforms[key].value = value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tconfigurable: true\n\t\t\t})\n\n\t\t\t// apply all uniforms and defines\n\t\t\tthis[key] = options[key]\n\t\t}\n\t}\n\n\tsetSize(width, height) {\n\t\tif (width === undefined || height === undefined) return\n\t\tif (\n\t\t\twidth === this.lastSize.width &&\n\t\t\theight === this.lastSize.height &&\n\t\t\tthis.resolutionScale === this.lastSize.resolutionScale\n\t\t) {\n\t\t\treturn\n\t\t}\n\n\t\tthis.normalPass?.setSize(width, height)\n\t\tthis.aoPass.setSize(width * this.resolutionScale, height * this.resolutionScale)\n\n\t\tthis.PoissonDenoisePass.setSize(width, height)\n\n\t\tthis.lastSize = {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tresolutionScale: this.resolutionScale\n\t\t}\n\t}\n\n\tget texture() {\n\t\tif (this.iterations > 0) {\n\t\t\treturn this.PoissonDenoisePass.texture\n\t\t}\n\n\t\treturn this.aoPass.texture\n\t}\n\n\tupdate(renderer) {\n\t\t// check if TRAA is being used so we can animate the noise\n\t\tconst hasTRAA = this.composer.passes.some(pass => {\n\t\t\treturn pass.enabled && !pass.skipRendering && pass.effects?.some(effect => effect instanceof TRAAEffect)\n\t\t})\n\n\t\t// set animated noise depending on TRAA\n\t\tif (hasTRAA && !(\"animatedNoise\" in this.aoPass.fullscreenMaterial.defines)) {\n\t\t\tthis.aoPass.fullscreenMaterial.defines.animatedNoise = \"\"\n\t\t\tthis.aoPass.fullscreenMaterial.needsUpdate = true\n\t\t} else if (!hasTRAA && \"animatedNoise\" in this.aoPass.fullscreenMaterial.defines) {\n\t\t\tdelete this.aoPass.fullscreenMaterial.defines.animatedNoise\n\t\t\tthis.aoPass.fullscreenMaterial.needsUpdate = true\n\t\t}\n\n\t\tthis.uniforms.get(\"inputTexture\").value = this.texture\n\n\t\tthis.normalPass?.render(renderer)\n\t\tthis.aoPass.render(renderer)\n\n\t\tthis.PoissonDenoisePass.render(renderer)\n\t}\n}\n\nAOEffect.DefaultOptions = defaultAOOptions\n\nexport { AOEffect }\n","import { Viewer } from \"@xviewer.js/core\";\nimport { VelocityDepthNormalPass } from \"./realism-effects\";\nimport { EffectComposerPlugin } from \"./EffectComposerPlugin\";\n\nexport function getVelocityDepthNormalPass(viewer: Viewer, autoAdd: boolean = true) {\n const composer = EffectComposerPlugin.Instance(viewer);\n let vdnPass = composer.getPass(VelocityDepthNormalPass);\n if (vdnPass === undefined && autoAdd) {\n vdnPass = composer.addPass(new VelocityDepthNormalPass(viewer.scene, viewer.camera));\n }\n return vdnPass;\n}","import { EffectPass } from \"postprocessing\";\nimport { TRAAEffect } from \"./realism-effects\";\nimport { PassPlugin } from \"./PassPlugin\";\nimport { getVelocityDepthNormalPass } from \"./getVelocityDepthNormalPass\";\n\nexport class TRAAPlugin extends PassPlugin<EffectPass> {\n private _effect: TRAAEffect;\n\n constructor(props: {\n dilation?: boolean,\n fullAccumulate?: boolean,\n neighborhoodClamp?: boolean,\n neighborhoodClampRadius?: number,\n neighborhoodClampIntensity?: number,\n } = {}) {\n super();\n this.install = () => {\n const { scene, camera } = this.viewer;\n this._effect = new TRAAEffect(scene, camera, getVelocityDepthNormalPass(this.viewer), props);\n this.pass = this.composer.addPass(new EffectPass(camera, this._effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n\n}","import { EffectPass } from \"postprocessing\";\nimport { MotionBlurEffect } from \"./realism-effects\";\nimport { PassPlugin } from \"./PassPlugin\";\nimport { getVelocityDepthNormalPass } from \"./getVelocityDepthNormalPass\";\n\nexport class MotionBlurPlugin extends PassPlugin<EffectPass> {\n\n constructor() {\n super();\n this.install = () => {\n const effect = new MotionBlurEffect(getVelocityDepthNormalPass(this.viewer));\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n\n}"],"names":["EffectComposerPlugin","Plugin","Instance","viewer","getPlugin","multisampling","_composer","v","getPass","constructor","passes","find","addPass","pass","length","_checkOutputPass","removePass","activePass","enabled","count","filter","name","_outputPass","_setRenderToScreen","k","i","renderToScreen","props","install","renderer","scene","camera","_renderPass","RenderPass","EffectPass","EffectComposer","Object","assign","frameBufferType","HalfFloatType","_onResize","width","height","setSize","_onRender","dt","render","uninstall","dispose","PassPlugin","enable","setEnable","composer","property","ToneMappingPlugin","mode","effect","ToneMappingEffect","value","ToneMappingMode","BloomPlugin","intensity","luminanceThreshold","luminanceMaterial","threshold","luminanceSmoothing","smoothing","BloomEffect","blendFunction","BlendFunction","ADD","min","max","step","FXAAPlugin","FXAAEffect","SMAAPlugin","preset","_preset","applyPreset","edgeDetectionMode","edgeDetectionMaterial","predicationMode","SMAAPreset","MEDIUM","SMAAEffect","EdgeDetectionMode","PredicationMode","MSAAPlugin","_maxSamples","Math","capabilities","maxSamples","g","a1","a2","base","generateR2","points","n","push","r2Sequence","map","a","b","jitter","frame","jitterScale","x","y","setViewOffset","getMaxMipLevel","texture","image","floor","log2","createGlobalDisableIblRadianceUniform","ShaderChunk","envmap_physical_pars_fragment","includes","replace","ShaderLib","physical","uniforms","globalIblRadianceDisabledUniform","iblRadianceDisabled","clone","UniformsUtils","result","unrollLoopPattern","unrollLoops","string","loopReplacer","match","start","end","snippet","parseInt","TemporalReprojectMaterial","ShaderMaterial","textureCount","finalFragmentShader","fragmentShader","reproject","gbuffer_packing","definitions","replaceAll","matches2","matchAll","key","number","matches3","type","inputTexture","Uniform","velocityTexture","depthTexture","lastVelocityTexture","neighborhoodClampIntensity","fullAccumulate","keepData","delta","invTexSize","Vector2","projectionMatrix","Matrix4","projectionMatrixInverse","cameraMatrixWorld","viewMatrix","prevViewMatrix","prevCameraMatrixWorld","prevProjectionMatrix","prevProjectionMatrixInverse","cameraPos","Vector3","prevCameraPos","cameraNear","cameraFar","maxBlend","vertexShader","blending","NoBlending","depthWrite","depthTest","toneMapped","glslVersion","GLSL3","isGroundProjectedEnv","c","material","isChildMaterialRenderable","visible","transparent","opacity","didCameraMove","lastCameraPosition","lastCameraQuaternion","position","distanceToSquared","quaternion","angleTo","getVisibleChildren","object","queue","objects","mesh","shift","children","defaultTemporalReprojectPassOptions","dilation","neighborhoodClamp","neighborhoodClampRadius","logTransform","depthDistance","worldDistance","reprojectSpecular","renderTarget","copyTextures","confidencePower","inputType","tmpProjectionMatrix","tmpProjectionMatrixInverse","tmpVec2","TemporalReprojectPass","Pass","setInputTexture","fullscreenMaterial","set","framebufferTexture","FramebufferTexture","format","minFilter","LinearFilter","magFilter","needsUpdate","accumulatedTexture","overrideAccumulatedTextures","reset","clock","getDelta","copy","_camera","view","updateProjectionMatrix","velocityDepthNormalPass","options","lastCameraTransform","near","far","setRenderTarget","copyFramebufferToTexture","matrixWorld","matrixWorldInverse","unjitter","clearViewOffset","needsSwap","Clock","Quaternion","_scene","WebGLRenderTarget","NearestFilter","depthBuffer","textures","forEach","index","defines","isPerspectiveCamera","PERSPECTIVE_CAMERA","toPrecision","indexOf","opt","Array","fill","join","TRAAEffect","Effect","temporalReprojectPass","update","inputBuffer","get","unjitteredProjectionMatrix","traa_compose","Map","DefaultOptions","CubeToEquirectEnvPass","generateEquirectEnvMap","cubeMap","maxWidth","w","source","data","widthEquirect","ceil","heightEquirect","pixelBuffer","Float32Array","readRenderTargetPixels","equirectEnvMap","DataTexture","RGBAFormat","FloatType","wrapS","ClampToEdgeWrapping","wrapT","LinearMipMapLinearFilter","mapping","EquirectangularReflectionMapping","basicVertexShader","blueNoiseSize","highestSignedInt","blueNoiseTexture","TextureLoader","load","blueNoiseImage","RepeatWrapping","colorSpace","NoColorSpace","setupBlueNoise","blueNoiseIndex","startIndex","random","blue_noise","useBlueNoise","GBufferMaterial","MeshPhysicalMaterial","onBeforeCompile","shader","resolution","cameraNotMovedFrames","gBufferMaterial","createGBufferMaterial","originalMaterial","copyAllPropsToGBufferMaterial","keys","startsWith","undefined","propsPrimitive","copyPropsToGBufferMaterial","prop","backgroundColor","Color","GBufferPass","initGBufferRenderTarget","DepthTexture","setGBufferMaterialInScene","visibleMeshes","cameraMoved","cachedOriginalMaterial","cachedMaterials","unsetGBufferMaterialInScene","background","WeakMap","workerOnMessage","isFloatType","flipY","_tables","_generateTables","buffer","ArrayBuffer","floatView","uint32View","Uint32Array","baseTable","shiftTable","e","mantissaTable","exponentTable","offsetTable","m","fromHalfFloat","val","colorToLuminance","r","binarySearchFindClosestIndexOf","array","targetValue","offset","lower","upper","mid","gatherData","marginalDataArray","conditionalDataArray","h","newY","ogIndex","newIndex","pdfConditional","cdfConditional","pdfMarginal","cdfMarginal","totalSumValue","cumulativeWeightMarginal","cumulativeRowWeight","weight","l","dist","row","col","newData","postMessage","blob","Blob","workerUrl","URL","createObjectURL","EquirectHdrInfoUniform","marginalWeights","conditionalWeights","updateFrom","size","Promise","resolve","worker","terminate","Worker","onmessage","totalSumWhole","totalSumDecimal","whiteTex","generateMipmaps","RedFormat","SSGIMaterial","gBufferTexture","directLightTexture","nearMulFar","nearMinusFar","farMinusNear","rayDistance","thickness","envBlur","maxEnvMapMipLevel","envMapInfo","envMapPosition","envMapSize","blueNoiseRepeat","steps","refineSteps","CUBEUV_TEXEL_WIDTH","CUBEUV_TEXEL_HEIGHT","CUBEUV_MAX_MIP","vWorldPosition","ssgi_utils","blackColor","SSGIPass","ssgiEffect","resolutionScale","gBufferPass","mask","layers","hasSelection","selection","layer","denoiser","bgColor","defaultFragmentShader","prev_skinning_pars_vertex","velocity_vertex_pars","skinning_pars_vertex","velocity_vertex_main","skinning_vertex","skinbase_vertex","velocity_fragment_pars","velocity_fragment_main","velocity_uniforms","prevVelocityMatrix","velocityMatrix","prevBoneTexture","boneTexture","normalMap","normalScale","uvTransform","Matrix3","VelocityDepthNormalMaterial","materialProps","copyNecessaryProps","newMaterial","keepMaterialMapUpdated","mrtMaterial","define","useKey","zeroVec2","saveBoneTexture","floatType","skeleton","boneMatrices","slice","updateVelocityDepthNormalMaterialBeforeRender","USE_SKINNING","BONE_TEXTURE","modelViewMatrix","multiplyMatrices","updateVelocityDepthNormalMaterialAfterRender","VelocityDepthNormalPass","setVelocityDepthNormalMaterialInScene","velocityDepthNormalMaterial","_floatType","roughnessMap","metalnessMap","matrix","unsetVelocityDepthNormalMaterialInScene","updateMatrixWorld","DenoiserComposePass","setSceneTexture","sceneTexture","diffuseGiTexture","specularGiTexture","ssgi_poisson_compose_functions","defaultPoissonBlurOptions","iterations","radius","phi","lumaPhi","depthPhi","normalPhi","PoissonDenoisePass","renderTargetA","renderTargetB","setGBufferPass","GBUFFER_TEXTURE","normalTexture","setnNormalTexture","setDepthTexture","horizontal","inputRenderTarget","isTextureSpecular","inputTexture2","roughnessPhi","specularPhi","renderTargetOptions","WebGLMultipleRenderTargets","defaultDenosierOptions","denoiseMode","Denoiser","denoiserComposePass","denoisePass","isOwnVelocityDepthNormalPass","denoise","composerInputTextures","GBufferDebugPass","defaultSSGIOptions","distance","denoiseIterations","denoiseKernel","denoiseDiffuse","denoiseSpecular","importanceSampling","missedRays","outputTexture","prototype","SSGIEffect","updateUsingRenderPass","isUsingRenderPass","ssgiPass","useDirectLight","makeOptionsReactive","ssgiPassFullscreenMaterialUniforms","ssgiPassFullscreenMaterialUniformsKeys","defineProperty","lastSize","gBufferDebugPass","modes","initialize","args","force","sceneRenderTarget","cubeToEquirectEnvPass","keepEnvMapUpdated","ssgiMaterial","environment","mapUuid","uuid","isCubeTexture","console","warn","USE_ENVMAP","then","sceneBuffer","hideMeshes","isScene","renderPass","fog","color","density","cancelAnimationFrame","rAF2","rAF","usingRenderPassRAF","requestAnimationFrame","wasUsingRenderPass","ssgi_compose","fog_pars_fragment","fog_fragment","isFogExp2","Selection","SRGBColorSpace","th","ssgiRenderPass","call","defaultOptions","samples","MotionBlurEffect","deltaTime","info","window","innerWidth","innerHeight","noiseTexture","velocityPass","motion_blur","formattedUniforms","toFixed","pointsIndex","defaultAOOptions","spp","distancePower","power","bias","useNormalPass","AOEffect","aoPass","aoDistance","configurable","normalPass","hasTRAA","some","skipRendering","effects","animatedNoise","ao_compose","createDepthTexture","NormalPass","useNormalTexture","normalInRgb","getVelocityDepthNormalPass","autoAdd","vdnPass","TRAAPlugin","_effect","MotionBlurPlugin"],"mappings":"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"}
|