@galacean/effects-plugin-model 2.0.3 → 2.0.5
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/alipay.js +1 -1
- package/dist/alipay.js.map +1 -1
- package/dist/alipay.mjs +1 -1
- package/dist/alipay.mjs.map +1 -1
- package/dist/douyin.js +1 -1
- package/dist/douyin.js.map +1 -1
- package/dist/douyin.mjs +1 -1
- package/dist/douyin.mjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +2 -2
- package/dist/index.min.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/loader.mjs +2 -2
- package/dist/loader.mjs.map +1 -1
- package/dist/plugin/model-item.d.ts +293 -0
- package/dist/plugin/model-tree-item.d.ts +51 -3
- package/dist/weapp.js +1 -1
- package/dist/weapp.js.map +1 -1
- package/dist/weapp.mjs +1 -1
- package/dist/weapp.mjs.map +1 -1
- package/package.json +4 -4
package/dist/loader.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.mjs","sources":["../src/runtime/math.ts","../src/gltf/loader-helper.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_async_to_generator.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_extends.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_instanceof.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_array_like_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js","../../../node_modules/.pnpm/tslib@2.6.2/node_modules/tslib/tslib.es6.mjs","../../../packages/effects-helper/dist/serialize/geometry.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_inherits.js","../src/runtime/anim-sampler.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_create_class.js","../src/runtime/common.ts","../src/runtime/object.ts","../src/plugin/const.ts","../src/runtime/shader-libs/standard-shader-source.ts","../src/runtime/shader-libs/standard-shader.ts","../src/utility/shader-helper.ts","../src/runtime/shader.ts","../src/runtime/material.ts","../src/runtime/skybox.ts","../src/runtime/cache.ts","../src/utility/ri-helper.ts","../src/utility/ts-helper.ts","../src/plugin/model-plugin.ts","../src/plugin/model-tree-item.ts","../src/plugin/model-tree-plugin.ts","../src/gesture/protocol.ts","../src/gesture/index.ts","../src/index.ts","../src/plugin/model-item.ts","../src/utility/hit-test-helper.ts","../src/utility/plugin-helper.ts","../src/runtime/animation.ts","../src/runtime/camera.ts","../src/runtime/light.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_assert_this_initialized.js","../src/runtime/mesh.ts","../src/runtime/scene.ts","../src/gltf/json-converter.ts","../src/gltf/loader-impl.ts"],"sourcesContent":["import { math } from '@galacean/effects';\n\nexport const {\n Vector2, Vector3, Vector4, Matrix3, Matrix4, Color, Euler, EulerOrder, Quaternion,\n Box3, Sphere, Ray, DEG2RAD,\n} = math;\n\nexport type Ray = math.Ray;\nexport type Euler = math.Euler;\nexport type Vector2 = math.Vector2;\nexport type Vector3 = math.Vector3;\nexport type Vector4 = math.Vector4;\nexport type Matrix3 = math.Matrix3;\nexport type Matrix4 = math.Matrix4;\nexport type Color = math.Color;\nexport type Quaternion = math.Quaternion;\n","import type { spec } from '@galacean/effects';\nimport { Transform as EffectsTransform } from '@galacean/effects';\nimport type { BaseTransform as Transform } from '../index';\nimport { Vector3, Matrix4, Quaternion, Euler, EulerOrder } from '../runtime/math';\n\nexport class LoaderHelper {\n static getTransformFromMat4 (mat: Matrix4): Transform {\n const transform = mat.getTransform();\n const euler = transform.rotation.toEuler(new Euler());\n\n return {\n position: transform.translation.toArray(),\n rotation: euler.toArray(),\n scale: transform.scale.toArray(),\n };\n }\n\n static getEffectsTransformFromMat4 (mat: Matrix4): Transform {\n const transform = new EffectsTransform({\n valid: true,\n });\n\n transform.cloneFromMatrix(mat);\n\n return {\n position: transform.position.toArray(),\n rotation: transform.rotation.toArray(),\n scale: transform.scale.toArray(),\n };\n }\n\n static getTransformFromTranslation (t: Vector3): Transform {\n return {\n position: t.toArray(),\n };\n }\n\n static getTransformFromDirection (d: Vector3): Transform {\n const d0 = Vector3.fromArray([1, 0, 0]);\n const d1 = d.clone().normalize();\n const a = d0.clone().cross(d1);\n\n if (a.length() < 0.01) { return {}; }\n\n a.normalize();\n const b = d1.dot(d0);\n const c = Math.acos(b);\n\n const mat = Matrix4.fromRotationAxis(a, c);\n\n return LoaderHelper.getTransformFromMat4(mat);\n }\n\n static getEffectsTransformFromDirection (d: Vector3): Transform {\n const d0 = Vector3.fromArray([0, 0, 1]);\n const d1 = d.clone().normalize();\n const a = d0.clone().cross(d1);\n\n if (a.length() < 0.01) { return {}; }\n\n a.normalize();\n const b = d1.dot(d0);\n const c = Math.acos(b);\n\n const mat = Matrix4.fromRotationAxis(a, c);\n\n return LoaderHelper.getEffectsTransformFromMat4(mat);\n }\n\n static getTransformFromTransDir (t: Vector3, d: Vector3): Transform {\n const transform = LoaderHelper.getTransformFromDirection(d);\n\n transform.position = t.toArray();\n\n return transform;\n }\n\n static getEffectsTransformFromTransDir (t: Vector3, d: Vector3): Transform {\n const transform = LoaderHelper.getEffectsTransformFromDirection(d);\n\n transform.position = t.toArray();\n\n return transform;\n }\n\n static getEulerFromQuat (q: Quaternion): [number, number, number] {\n const euler = new Euler();\n const quat = new Quaternion(q.x, q.y, q.z, q.w);\n\n euler.order = EulerOrder.ZYX;\n euler.setFromQuaternion(quat);\n\n return [euler.x, euler.y, euler.z];\n }\n\n static getQuatFromEuler (e: Euler): [number, number, number, number] {\n const quat = new Quaternion();\n\n quat.setFromEuler(e);\n\n return [quat.x, quat.y, quat.z, quat.w];\n }\n\n static toPlayerColor3 (color: spec.vec3): spec.vec3 {\n // [0, 1] => [0, 255]\n return [\n LoaderHelper.scaleTo255(color[0]),\n LoaderHelper.scaleTo255(color[1]),\n LoaderHelper.scaleTo255(color[2]),\n ];\n }\n\n static toPlayerColor4 (color: spec.vec4): spec.vec4 {\n // [0, 1] => [0, 255]\n return [\n LoaderHelper.scaleTo255(color[0]),\n LoaderHelper.scaleTo255(color[1]),\n LoaderHelper.scaleTo255(color[2]),\n LoaderHelper.scaleTo255(color[3]),\n ];\n }\n\n static scaleTo255 (val: number): number {\n const intVal = val * 255;\n\n return Math.max(0, Math.min(intVal, 255));\n }\n\n static scaleTo1 (val: number): number {\n const floatVal = val / 255.0;\n\n return Math.max(0.0, Math.min(floatVal, 1.0));\n }\n}\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) resolve(value);\n else Promise.resolve(value).then(_next, _throw);\n}\nexport function _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\nexport { _async_to_generator as _ };\n","export function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","export function _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else return left instanceof right;\n}\nexport { _instanceof as _ };\n","export function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\nexport { _array_like_to_array as _ };\n","import { _array_like_to_array } from \"./_array_like_to_array.js\";\n\nexport function _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n\n var n = Object.prototype.toString.call(o).slice(8, -1);\n\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nexport { _unsupported_iterable_to_array as _ };\n","import { _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nexport function _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (it) return (it = it.call(o)).next.bind(it);\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n\n var i = 0;\n\n return function() {\n if (i >= o.length) return { done: true };\n\n return { done: false, value: o[i++] };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _create_for_of_iterator_helper_loose as _ };\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 { spec } from '@galacean/effects';\nimport { concatBuffers, getBinaryType } from './utils';\n/**\n * geometry 序列化\n * @param geometries\n */\nexport function serializeGeometries(geometries) {\n const buffers = [];\n const bufferInfo = new Map();\n let offset = 0;\n geometries.forEach(options => {\n addBuffer(options.indices?.data);\n Object.keys(options.attributes).forEach(key => {\n const { data } = options.attributes[key];\n addBuffer(data);\n });\n });\n const resultBuffer = concatBuffers(buffers, bufferInfo, offset);\n const mappedGeometries = geometries.map(props => {\n const geometryProps = { ...props };\n if (geometryProps.indices) {\n geometryProps.indices = replaceAttribute(geometryProps.indices);\n }\n geometryProps.attributes = {};\n Object.keys(props.attributes).forEach(name => {\n const attribute = props.attributes[name];\n geometryProps.attributes[name] = replaceAttribute(attribute);\n });\n return geometryProps;\n });\n return {\n data: resultBuffer,\n geometries: mappedGeometries,\n version: '1.0',\n };\n function addBuffer(buffer) {\n if (buffer && !buffers.includes(buffer)) {\n buffers.push(buffer);\n bufferInfo.set(buffer, [0, offset, buffer.byteLength, getBinaryType(buffer)]);\n offset += buffer.byteLength;\n // padding 4bytes for f32\n offset = Math.ceil(offset / 4) * 4;\n }\n }\n function replaceAttribute(attr) {\n let source;\n if (attr.data) {\n const info = bufferInfo.get(attr.data);\n if (info) {\n source = { data: [spec.ValueType.BINARY, info] };\n }\n }\n return { ...attr, ...source };\n }\n}\n/**\n * geometry 反序列化\n * @param geometryProps\n * @param data\n */\nexport function deserializeGeometry(geometryProps, data) {\n const { attributes } = geometryProps;\n const ret = { ...geometryProps };\n if (ret.indices) {\n ret.indices = { ...ret.indices };\n if (ret.indices.data) {\n // @ts-expect-error\n ret.indices.data = typedArrayFromBinary(data, geometryProps.indices?.data);\n }\n // @ts-expect-error\n }\n else if (ret.index) {\n // FIXME: 兼容编辑器导出的旧版数据\n // @ts-expect-error\n ret.indices = { ...ret.index };\n // @ts-expect-error\n if (ret.indices.data) {\n // @ts-expect-error\n ret.indices.data = typedArrayFromBinary(data, geometryProps.index?.data);\n }\n }\n Object.keys(attributes).forEach(name => {\n const attribute = attributes[name];\n const { data: pointer } = attribute;\n ret.attributes[name] = { ...attribute };\n if (pointer) {\n ret.attributes[name].data = typedArrayFromBinary(data, pointer);\n }\n });\n return ret;\n}\nconst ctrlMap = {\n i8: Int8Array,\n u8: Uint8Array,\n i16: Int16Array,\n u16: Uint16Array,\n f32: Float32Array,\n i32: Int32Array,\n u32: Uint32Array,\n};\n/**\n * 重构 TypedArray,返回的 TypedArray 如果修改,会反映到原始的 ArrayBuffer 中\n * @param binaries\n * @param pointer\n */\nexport function typedArrayFromBinary(binary, pointer) {\n if (pointer.length != 2 || pointer[0] !== spec.ValueType.BINARY || !(pointer[1] instanceof Array)) {\n // 不是BinaryPointer,可能已经创建,直接返回\n return pointer;\n }\n const [index, start, byteLength, type] = pointer[1];\n if (!type) {\n return binary[index].slice(start, byteLength);\n }\n const CTRL = ctrlMap[type] || Uint8Array;\n return new CTRL(binary[index], start, byteLength / CTRL.BYTES_PER_ELEMENT);\n}\n","export function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _set_prototype_of } from \"./_set_prototype_of.js\";\n\nexport function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","/**\n * 抽象插值采样类\n */\nexport abstract class InterpolationSampler {\n protected cachedIndex = 0;\n\n constructor (\n protected time: Float32Array,\n protected data: Float32Array,\n protected componentCount: number,\n ) { }\n\n /**\n * 计算当前 t 时刻的插值\n * @param t - 当前时间\n * @returns 插值结果\n */\n evaluate (t: number) {\n const pp = this.time;\n let i1 = this.cachedIndex;\n let t1 = pp[i1];\n let t0 = pp[i1 - 1];\n\n validate_interval: {\n seek: {\n let right: number;\n\n linear_scan: {\n //- See http://jsperf.com/comparison-to-undefined/3\n //- slower code:\n //-\n //- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n forward_scan: if (!(t < t1)) {\n for (let giveUpAt = i1 + 2; ;) {\n if (t1 === undefined) {\n if (t < t0) { break forward_scan; }\n\n // after end\n i1 = pp.length;\n this.cachedIndex = i1;\n\n return this.copySampleValue(i1 - 1);\n }\n\n if (i1 === giveUpAt) { break; } // this loop\n\n t0 = t1;\n t1 = pp[++i1];\n\n if (t < t1) {\n // we have arrived at the sought interval\n break seek;\n }\n }\n\n // prepare binary search on the right side of the index\n right = pp.length;\n\n break linear_scan;\n }\n\n //- slower code:\n //-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n if (!(t >= t0)) {\n // looping?\n const t1global = pp[1];\n\n if (t < t1global) {\n i1 = 2; // + 1, using the scan for the details\n t0 = t1global;\n }\n\n // linear reverse scan\n for (let giveUpAt = i1 - 2; ;) {\n if (t0 === undefined) {\n // before start\n this.cachedIndex = 0;\n\n return this.copySampleValue(0);\n }\n\n if (i1 === giveUpAt) { break; } // this loop\n\n t1 = t0;\n t0 = pp[--i1 - 1];\n\n if (t >= t0) {\n // we have arrived at the sought interval\n break seek;\n }\n }\n\n // prepare binary search on the left side of the index\n right = i1;\n i1 = 0;\n\n break linear_scan;\n }\n\n // the interval is valid\n break validate_interval;\n } // linear scan\n\n // binary search\n while (i1 < right) {\n const mid = (i1 + right) >>> 1;\n\n if (t < pp[mid]) {\n right = mid;\n } else {\n i1 = mid + 1;\n }\n }\n\n t1 = pp[i1];\n t0 = pp[i1 - 1];\n\n // check boundary cases, again\n if (t0 === undefined) {\n this.cachedIndex = 0;\n\n return this.copySampleValue(0);\n }\n\n if (t1 === undefined) {\n i1 = pp.length;\n this.cachedIndex = i1;\n\n return this.copySampleValue(i1 - 1);\n }\n } // seek\n\n this.cachedIndex = i1;\n\n this.intervalChanged(i1, t0, t1);\n } // validate_interval\n\n return this.interpolate(i1, t0, t, t1);\n }\n\n /**\n * 销毁\n */\n dispose () {\n // @ts-expect-error\n this.time = undefined;\n // @ts-expect-error\n this.data = undefined;\n }\n\n protected copySampleValue (index: number) {\n // copies a sample value to the result buffer\n const values = this.data;\n const stride = this.componentCount;\n const offset = index * stride;\n\n const result = new Float32Array(stride);\n\n for (let i = 0; i !== stride; ++i) {\n result[i] = values[offset + i];\n }\n\n return result;\n }\n\n protected abstract intervalChanged (i1: number, t0: number, t1: number): void;\n\n protected abstract interpolate (i1: number, t0: number, t: number, t1: number): Float32Array;\n}\n\nclass LinearSampler extends InterpolationSampler {\n\n constructor (time: Float32Array, data: Float32Array, size: number) {\n super(time, data, size);\n }\n\n protected intervalChanged (i1: number, t0: number, t1: number): void {\n }\n\n protected interpolate (i1: number, t0: number, t: number, t1: number): Float32Array {\n const values = this.data;\n const stride = this.componentCount ?? 1;\n const offset1 = i1 * stride;\n const offset0 = offset1 - stride;\n\n const weight1 = (t - t0) / (t1 - t0);\n const weight0 = 1 - weight1;\n\n const result = new Float32Array(stride);\n\n for (let i = 0; i !== stride; ++i) {\n result[i] =\n values[offset0 + i] * weight0 +\n values[offset1 + i] * weight1;\n }\n\n return result;\n }\n}\n\nclass DiscreteSampler extends InterpolationSampler {\n\n constructor (time: Float32Array, data: Float32Array, size: number) {\n super(time, data, size);\n }\n\n protected intervalChanged (i1: number, t0: number, t1: number): void {\n }\n\n protected interpolate (i1: number, t0: number, t: number, t1: number): Float32Array {\n const values = this.data;\n const stride = this.componentCount ?? 1;\n const offset = (i1 - 1) * stride;\n\n const result = new Float32Array(stride);\n\n for (let i = 0; i !== stride; ++i) {\n result[i] = values[offset + i];\n }\n\n return result;\n }\n}\n\nclass QuaternionInner {\n\n static slerpFlat (dst: any, dstOffset: number, src0: any, srcOffset0: number, src1: any, srcOffset1: number, t: number) {\n // fuzz-free, array-based Quaternion SLERP operation\n let x0 = src0[srcOffset0 + 0];\n let y0 = src0[srcOffset0 + 1];\n let z0 = src0[srcOffset0 + 2];\n let w0 = src0[srcOffset0 + 3];\n\n const x1 = src1[srcOffset1 + 0];\n const y1 = src1[srcOffset1 + 1];\n const z1 = src1[srcOffset1 + 2];\n const w1 = src1[srcOffset1 + 3];\n\n if (t === 0) {\n dst[dstOffset + 0] = x0;\n dst[dstOffset + 1] = y0;\n dst[dstOffset + 2] = z0;\n dst[dstOffset + 3] = w0;\n\n return;\n }\n\n if (t === 1) {\n dst[dstOffset + 0] = x1;\n dst[dstOffset + 1] = y1;\n dst[dstOffset + 2] = z1;\n dst[dstOffset + 3] = w1;\n\n return;\n }\n\n if (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) {\n let s = 1 - t;\n const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1;\n const dir = (cos >= 0 ? 1 : - 1);\n const sqrSin = 1 - cos * cos;\n\n // Skip the Slerp for tiny steps to avoid numeric problems:\n if (sqrSin > Number.EPSILON) {\n const sin = Math.sqrt(sqrSin);\n const len = Math.atan2(sin, cos * dir);\n\n s = Math.sin(s * len) / sin;\n t = Math.sin(t * len) / sin;\n }\n\n const tDir = t * dir;\n\n x0 = x0 * s + x1 * tDir;\n y0 = y0 * s + y1 * tDir;\n z0 = z0 * s + z1 * tDir;\n w0 = w0 * s + w1 * tDir;\n\n // Normalize in case we just did a lerp:\n if (s === 1 - t) {\n const f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0);\n\n x0 *= f;\n y0 *= f;\n z0 *= f;\n w0 *= f;\n }\n }\n\n dst[dstOffset] = x0;\n dst[dstOffset + 1] = y0;\n dst[dstOffset + 2] = z0;\n dst[dstOffset + 3] = w0;\n }\n}\n\nclass QuaternionLinearSampler extends InterpolationSampler {\n\n constructor (time: Float32Array, data: Float32Array, size: number) {\n super(time, data, size);\n }\n\n protected intervalChanged (i1: number, t0: number, t1: number): void {\n }\n\n protected interpolate (i1: number, t0: number, t: number, t1: number): Float32Array {\n const values = this.data;\n const stride = this.componentCount ?? 1;\n const alpha = (t - t0) / (t1 - t0);\n let offset = i1 * stride;\n const result = new Float32Array(stride);\n\n for (let end = offset + stride; offset !== end; offset += 4) {\n QuaternionInner.slerpFlat(result, 0, values, offset - stride, values, offset, alpha);\n }\n\n return result;\n }\n\n}\n\n/**\n * 创建动画采样器,支持线性和跳变两种模式,类别上支持平移、旋转和缩放\n * @param type - 动画类型,线性和跳变\n * @param times - 时间点数组\n * @param data - 关键帧数组\n * @param size - 数据分量\n * @param path - 动画类别,平移、旋转和缩放\n * @returns 动画采样器\n */\nexport function createAnimationSampler (type: string, times: Float32Array, data: Float32Array, size: number, path?: string): InterpolationSampler {\n switch (type) {\n case 'LINEAR':\n if (path === 'rotation') {\n return new QuaternionLinearSampler(times, data, size);\n } else {\n return new LinearSampler(times, data, size);\n }\n case 'STEP':\n return new DiscreteSampler(times, data, size);\n case 'CUBICSPLINE':\n // FIXME: support cubic spline\n return new LinearSampler(times, data, size);\n default:\n return new LinearSampler(times, data, size);\n }\n}\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n\n if (\"value\" in descriptor) descriptor.writable = true;\n\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nexport function _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n\n return Constructor;\n}\nexport { _create_class as _ };\n","import { Transform as EffectsTransform, PLAYER_OPTIONS_ENV_EDITOR, spec } from '@galacean/effects';\nimport { Quaternion, Euler, Vector3, Matrix4, EulerOrder } from './math';\nimport type { BaseTransform } from '../index';\n\n/**\n * Model 插件中的对象类型\n */\nexport enum PObjectType {\n none = 0,\n mesh,\n texture,\n material,\n light,\n camera,\n skybox,\n skin,\n morph,\n skeleton,\n animation,\n animationManager,\n reference,\n}\n\n/**\n * 灯光类型\n */\nexport enum PLightType {\n directional = 0,\n point,\n spot,\n ambient,\n}\n\n/**\n * 纹理类型\n */\nexport enum PTextureType {\n none = 0,\n t2d,\n t3d,\n cube,\n}\n\n/**\n * 材质类型\n */\nexport enum PMaterialType {\n none = 0,\n unlit,\n pbr,\n //phong,\n normalVis,\n simpleFilter,\n shadowBase,\n shadowFilter,\n //\n skyboxFilter,\n}\n\n/**\n * 混合模式\n */\nexport enum PBlendMode {\n opaque = 0,\n masked,\n translucent,\n additive,\n}\n\n/**\n * 面片朝向模式\n */\nexport enum PFaceSideMode {\n both = 0,\n front,\n back,\n}\n\nexport enum PShadowType {\n none = 0,\n standard,\n variance,\n expVariance,\n}\n\nexport const PBRShaderGUID = 'pbr00000000000000000000000000000';\nexport const UnlitShaderGUID = 'unlit000000000000000000000000000';\n\n/**\n * 插件变换类\n */\nexport class PTransform {\n private translation = new Vector3(0, 0, 0);\n private rotation = new Quaternion(0, 0, 0, 1);\n private scale = new Vector3(1, 1, 1);\n\n /**\n * 从矩阵设置数据\n * @param matrix - 4阶矩阵\n * @returns\n */\n fromMatrix4 (matrix: Matrix4) {\n this.setMatrix(matrix);\n\n return this;\n }\n\n /**\n * 从 GE 变换设置数据\n * @param trans - GE 变换对象或数据\n * @returns\n */\n fromEffectsTransform (trans: EffectsTransform | BaseTransform) {\n if (trans instanceof EffectsTransform) {\n this.setMatrix(trans.getWorldMatrix());\n } else {\n const effectsTrans = new EffectsTransform({\n ...trans,\n valid: true,\n });\n\n effectsTrans.setValid(true);\n\n this.setMatrix(effectsTrans.getWorldMatrix());\n }\n\n return this;\n }\n\n /**\n * 转成 GE 变换对象\n * @param transform - GE 变换对象\n * @returns\n */\n toEffectsTransform (transform: EffectsTransform) {\n const mat = this.getMatrix();\n\n transform.cloneFromMatrix(mat);\n\n return transform;\n }\n\n /**\n * 通过 GE 变换参数设置\n * @param trans - GE 变换参数\n * @returns\n */\n fromBaseTransform (trans: BaseTransform) {\n if (trans.position) {\n this.setTranslation(trans.position);\n } else {\n this.translation.set(0, 0, 0);\n }\n\n if (trans.rotation) {\n this.setRotation(trans.rotation);\n } else {\n this.rotation.set(0, 0, 0, 1);\n }\n\n if (trans.scale) {\n this.setScale(trans.scale);\n } else {\n this.scale.set(1, 1, 1);\n }\n\n return this;\n }\n\n /**\n * 获取平移\n * @returns\n */\n getTranslation (): Vector3 {\n return this.translation;\n }\n\n /**\n * 设置平移\n * @param val - 平移\n */\n setTranslation (val: Vector3 | spec.vec3) {\n if (val instanceof Vector3) {\n this.translation.set(val.x, val.y, val.z);\n } else {\n this.translation.set(val[0], val[1], val[2]);\n }\n }\n\n /**\n * 获取位置\n * @returns\n */\n getPosition (): Vector3 {\n return this.translation;\n }\n\n /**\n * 设置位置\n * @param val - 位置\n */\n setPosition (val: Vector3 | spec.vec3) {\n if (val instanceof Vector3) {\n this.translation.set(val.x, val.y, val.z);\n } else {\n this.translation.set(val[0], val[1], val[2]);\n }\n }\n\n /**\n * 获取旋转\n * @returns\n */\n getRotation (): Quaternion {\n return this.rotation;\n }\n\n /**\n * 设置旋转\n * @param val - 旋转,可能是四元数或欧拉角\n */\n setRotation (val: Quaternion | Euler | Vector3 | spec.vec4 | spec.vec3) {\n if (val instanceof Quaternion) {\n this.rotation.set(val.x, val.y, val.z, val.w);\n } else if (val instanceof Euler) {\n this.rotation.setFromEuler(val);\n } else if (val instanceof Vector3) {\n this.rotation.setFromEuler(new Euler(val.x, val.y, val.z, EulerOrder.ZYX));\n } else if (val.length === 4) {\n this.rotation.set(val[0], val[1], val[2], val[3]);\n } else {\n this.rotation.setFromEuler(new Euler(val[0], val[1], val[2], EulerOrder.ZYX));\n }\n }\n\n /**\n * 获取缩放\n * @returns\n */\n getScale (): Vector3 {\n return this.scale;\n }\n\n /**\n * 设置缩放\n * @param val - 缩放\n */\n setScale (val: Vector3 | spec.vec3) {\n if (val instanceof Vector3) {\n this.scale.set(val.x, val.y, val.z);\n } else {\n this.scale.set(val[0], val[1], val[2]);\n }\n }\n\n /**\n * 获取矩阵\n * @returns\n */\n getMatrix (): Matrix4 {\n return new Matrix4().compose(this.getTranslation(), this.getRotation(), this.getScale());\n }\n\n /**\n * 设置矩阵\n * @param mat - 4阶矩阵\n */\n setMatrix (mat: Matrix4 | spec.mat4) {\n if (mat instanceof Matrix4) {\n const res = mat.getTransform();\n\n this.setTranslation(res.translation);\n this.setRotation(res.rotation);\n this.setScale(res.scale);\n } else {\n const res = Matrix4.fromArray(mat).getTransform();\n\n this.setTranslation(res.translation);\n this.setRotation(res.rotation);\n this.setScale(res.scale);\n }\n }\n}\n\n/**\n * 坐标系类\n */\nexport class PCoordinate {\n /**\n * 原点\n */\n origin: Vector3;\n /**\n * X 轴\n */\n xAxis: Vector3;\n /**\n * Y 轴\n */\n yAxis: Vector3;\n /**\n * Z 轴\n */\n zAxis: Vector3;\n\n constructor () {\n this.origin = new Vector3(0, 0, 0);\n this.xAxis = new Vector3(1, 0, 0);\n this.yAxis = new Vector3(0, 1, 0);\n this.zAxis = new Vector3(0, 0, 1);\n }\n\n /**\n * 从插件变换创建坐标系\n * @param trans - 变换\n * @param invert - 是否旋转取反\n * @returns 坐标系对象\n */\n fromPTransform (trans: PTransform, invert = false) {\n this.origin.copyFrom(trans.getPosition());\n const rotationMatrix = trans.getRotation().toMatrix4(new Matrix4());\n\n if (invert) {\n rotationMatrix.invert();\n }\n this.fromRotationMatrix(rotationMatrix);\n\n return this;\n }\n\n /**\n * 从旋转矩阵创建坐标系\n * @param matrix - 矩阵\n */\n fromRotationMatrix (matrix: Matrix4) {\n const me = matrix.elements;\n\n this.xAxis.set(me[0], me[1], me[2]);\n this.yAxis.set(me[4], me[5], me[6]);\n this.zAxis.set(me[8], me[9], me[10]);\n }\n}\n\n/**\n * 全局状态\n */\nexport class PGlobalState {\n /**\n * 是否 WebGL2\n */\n isWebGL2: boolean;\n /**\n * 是否共享 Shader\n */\n shaderShared: boolean;\n /**\n * 运行时环境,编辑器模式或设备模式\n */\n runtimeEnv: string;\n /**\n * 兼容模式,glTF 模式或 Tiny3d 模式\n */\n compatibleMode: string;\n /**\n * 是否显示包围盒\n */\n visBoundingBox: boolean;\n /**\n * 渲染输出结果模式,可以换中间渲染数据\n */\n renderMode3D: spec.RenderMode3D;\n /**\n * UV结果输出时,棋盘格的大小控制,范围(0, 1)\n */\n renderMode3DUVGridSize: number;\n\n // singleton related code\n private static instance: PGlobalState;\n\n /**\n * 获取单例\n * @returns\n */\n static getInstance (): PGlobalState {\n // Do you need arguments? Make it a regular static method instead.\n return this.instance || (this.instance = new this());\n }\n\n private constructor () {\n this.isWebGL2 = false;\n this.shaderShared = true;\n this.runtimeEnv = PLAYER_OPTIONS_ENV_EDITOR;\n this.compatibleMode = 'gltf';\n this.visBoundingBox = false;\n this.renderMode3D = spec.RenderMode3D.none;\n this.renderMode3DUVGridSize = 1 / 16;\n }\n\n /**\n * 重置数据\n */\n reset () {\n this.isWebGL2 = false;\n this.shaderShared = true;\n this.runtimeEnv = PLAYER_OPTIONS_ENV_EDITOR;\n this.compatibleMode = 'gltf';\n this.visBoundingBox = false;\n this.renderMode3D = spec.RenderMode3D.none;\n this.renderMode3DUVGridSize = 1 / 16;\n }\n\n /**\n * 是否可视化渲染中间结果\n */\n hasRenderMode3D () {\n return this.renderMode3D !== spec.RenderMode3D.none;\n }\n\n /**\n * 是否编辑器模式\n */\n get isEditorEnv () {\n return this.runtimeEnv === PLAYER_OPTIONS_ENV_EDITOR;\n }\n\n /**\n * 是否设备模式\n */\n get isDeviceEnv () {\n return !this.isEditorEnv;\n }\n\n /**\n * 是否 Tiny3d 模式\n */\n get isTiny3dMode () {\n return this.compatibleMode === 'tiny3d';\n }\n\n /**\n * 是否 glTF 模式\n */\n get isGLTFMode () {\n return !this.isTiny3dMode;\n }\n}\n\n","import type { spec, Renderer } from '@galacean/effects';\nimport type { BaseTransform } from '../index';\nimport type { Quaternion, Euler, Vector3, Matrix4 } from './math';\nimport { PObjectType, PTransform, PCoordinate } from './common';\nimport type { PSceneManager } from './scene';\n\nlet objectIndex = 1;\n\n/**\n * 抽象对象类,提供公共的成员变量和成员函数\n */\nexport abstract class PObject {\n /**\n * 名称\n */\n name = 'Unnamed Object';\n /**\n * 类型\n */\n type: PObjectType = PObjectType.none;\n\n // create () {\n // // create everything in this object\n // }\n\n /**\n * 销毁\n */\n dispose () {\n // delete everything in this object\n }\n\n /**\n * 是否空对象\n * @returns\n */\n isNone () {\n return this.type === PObjectType.none;\n }\n\n /**\n * 是否有效,也就是类型不是 PObjectType.none\n * @returns\n */\n isValid (): boolean {\n return this.type !== PObjectType.none;\n }\n\n protected genName (name: string): string {\n return `${name}_@${objectIndex++}`;\n }\n}\n\n/**\n * 抽象实体类,支持可见性、变换和所属 VFX 元素\n */\nexport abstract class PEntity extends PObject {\n private _visible = false;\n private _transform = new PTransform();\n /**\n * 是否删除\n */\n deleted = false;\n\n /**\n * 逻辑更新\n */\n update () {\n\n }\n\n /**\n * 渲染对象\n * @param scene - 场景管理器\n * @param renderer 渲染器\n */\n render (scene: PSceneManager, renderer: Renderer) {\n // OVERRIDE\n }\n\n /**\n * 外部改变可见性时的回调\n * @param visible - 可见性\n */\n onVisibleChanged (visible: boolean) {\n this.visible = visible;\n }\n\n /**\n * 仅标记不可见和删除状态,但不进行 WebGL 相关资源的释放\n * 最终释放 WebGL 相关资源是在 plugin destroy 的时候\n */\n override dispose () {\n super.dispose();\n this.visible = false;\n this.deleted = true;\n }\n\n /**\n * 获取可见性,如果实体非法也是不可见\n */\n get visible (): boolean {\n return this._visible && this.isValid();\n }\n\n /**\n * 设置可见性\n */\n set visible (val: boolean) {\n this._visible = val;\n }\n\n /**\n * 获取变换\n */\n get transform (): PTransform {\n return this._transform;\n }\n\n /**\n * 设置变换,可以传入插件变换对象或变换参数\n */\n set transform (val: PTransform | BaseTransform) {\n if (val instanceof PTransform) {\n this._transform = val;\n } else {\n if (val.position !== undefined) {\n this._transform.setTranslation(val.position);\n }\n if (val.rotation !== undefined) {\n this._transform.setRotation(val.rotation);\n }\n if (val.scale !== undefined) {\n this._transform.setScale(val.scale);\n }\n }\n }\n\n /**\n * 获取位移\n */\n get translation (): Vector3 {\n return this._transform.getTranslation();\n }\n\n /**\n * 设置位移\n */\n set translation (val: Vector3 | spec.vec3) {\n this._transform.setTranslation(val);\n }\n\n /**\n * 获取位置\n */\n get position (): Vector3 {\n return this._transform.getTranslation();\n }\n\n /**\n * 设置位置\n */\n set position (val: Vector3 | spec.vec3) {\n this._transform.setTranslation(val);\n }\n\n /**\n * 获取旋转\n */\n get rotation (): Quaternion {\n return this._transform.getRotation();\n }\n\n /**\n * 设置旋转\n */\n set rotation (val: Quaternion | Euler | Vector3 | spec.vec4 | spec.vec3) {\n this._transform.setRotation(val);\n }\n\n /**\n * 获取缩放\n */\n get scale (): Vector3 {\n return this._transform.getScale();\n }\n\n /**\n * 设置缩放\n */\n set scale (val: Vector3 | spec.vec3) {\n this._transform.setScale(val);\n }\n\n /**\n * 获取矩阵\n */\n get matrix (): Matrix4 {\n return this._transform.getMatrix();\n }\n\n /**\n * 设置矩阵\n */\n set matrix (val: Matrix4) {\n this._transform.setMatrix(val);\n }\n\n /**\n * 获取坐标系\n */\n get coordinate () {\n const coord = new PCoordinate();\n\n coord.fromPTransform(this._transform);\n\n return coord;\n }\n\n}\n\n","import type { spec } from '@galacean/effects';\n\n/**\n * Model 插件元素类型\n */\nexport const VFX_ITEM_TYPE_3D = 'PluginModel' as spec.ItemType;\n","import { ShaderFactory } from '@galacean/effects';\nimport { default as animationVertGLSL } from './standard/animation.vert.glsl';\nimport { default as extensionsFragGLSL } from './standard/extensions.frag.glsl';\nimport { default as toneMappingFragGLSL } from './standard/tone-mapping.frag.glsl';\nimport { default as texturesVertGLSL } from './standard/textures.vert.glsl';\nimport { default as functionsFragGLSL } from './standard/functions.frag.glsl';\nimport { default as shadowFragGLSL } from './standard/shadow.frag.glsl';\nimport { default as shadowCommonVert } from './standard/shadow-common.vert.glsl';\n\n/**\n * GLSL 着色器代码编译预处理\n */\nexport namespace StandardShaderSource {\n /**\n * GLSL 代码预处理和生成最终代码\n * @param source - GLSL 代码\n * @param features - 宏定义\n * @param isWebGL2 - 是否 WebGL2\n * @returns 最终代码\n */\n export function build (source: string, features: string[]): string {\n\n source = source.replace(/#define FEATURES/,\n features.map(value => `#define ${value}`).join('\\n'));\n\n return source;\n }\n}\n\nShaderFactory.registerInclude('animation.vert.glsl', animationVertGLSL);\nShaderFactory.registerInclude('extensions.frag.glsl', extensionsFragGLSL);\nShaderFactory.registerInclude('tone-mapping.frag.glsl', toneMappingFragGLSL);\nShaderFactory.registerInclude('textures.vert.glsl', texturesVertGLSL);\nShaderFactory.registerInclude('functions.frag.glsl', functionsFragGLSL);\nShaderFactory.registerInclude('shadow.frag.glsl', shadowFragGLSL);\nShaderFactory.registerInclude('shadow-common.vert.glsl', shadowCommonVert);\n\n","import { default as primitiveVert } from './standard/primitive.vert.glsl';\nimport { default as metallicRoughnessFrag } from './standard/metallic-roughness.frag.glsl';\nimport { default as shadowPassFrag } from './standard/shadow-pass.frag.glsl';\nimport { default as skyboxVert } from './standard/skybox.vert.glsl';\nimport { default as skyboxFrag } from './standard/skybox.frag.glsl';\nimport { StandardShaderSource } from './standard-shader-source';\nimport { PMaterialType } from '../common';\nimport type { PShaderContext } from '../shader';\n\n/**\n * 着色器代码生成类\n */\nexport class StandardShader {\n /**\n * WebGL 环境\n */\n static environment = 'webgl1';\n\n /**\n * 获取顶点着色器代码\n * @param context - 着色器上下文\n * @returns\n */\n static getVertexShaderCode (context: PShaderContext): string {\n const features = context.featureList;\n const materialType = context.material.materialType;\n\n switch (materialType) {\n case PMaterialType.unlit:\n case PMaterialType.pbr:\n case PMaterialType.shadowBase:\n return StandardShaderSource.build(primitiveVert, features);\n case PMaterialType.skyboxFilter:\n return StandardShaderSource.build(skyboxVert, features);\n default:\n throw new Error(`Invalid material type ${materialType} for getVertexShaderString!`);\n }\n }\n\n /**\n * 获取片段着色器代码\n * @param context - 着色器上下文\n * @returns\n */\n static getFragmentShaderCode (context: PShaderContext): string {\n const features = context.featureList;\n const materialType = context.material.materialType;\n\n switch (materialType) {\n case PMaterialType.unlit:\n case PMaterialType.pbr:\n return StandardShaderSource.build(metallicRoughnessFrag, features);\n case PMaterialType.shadowBase:\n return StandardShaderSource.build(shadowPassFrag, features);\n case PMaterialType.skyboxFilter:\n return StandardShaderSource.build(skyboxFrag, features);\n default:\n throw new Error(`Invalid material type ${materialType} for getFragmentShaderString!`);\n }\n }\n\n static genVertexShaderCode (materialType: PMaterialType): string {\n switch (materialType) {\n case PMaterialType.unlit:\n case PMaterialType.pbr:\n case PMaterialType.shadowBase:\n return primitiveVert;\n case PMaterialType.skyboxFilter:\n return skyboxVert;\n default:\n throw new Error(`Invalid material type ${materialType} for genVertexShaderCode!`);\n }\n }\n\n /**\n * 获取片段着色器代码\n * @param materialType - 材质类型\n * @returns\n */\n static genFragmentShaderCode (materialType: PMaterialType): string {\n switch (materialType) {\n case PMaterialType.unlit:\n case PMaterialType.pbr:\n return metallicRoughnessFrag;\n case PMaterialType.shadowBase:\n return shadowPassFrag;\n case PMaterialType.skyboxFilter:\n return skyboxFrag;\n default:\n throw new Error(`Invalid material type ${materialType} for genFragmentShaderCode!`);\n }\n }\n\n}\n","import { StandardShader } from '../runtime/shader-libs/standard-shader';\nimport type { PShaderContext, PShaderResults } from '../runtime/shader';\nimport { PMaterialType } from '../runtime';\n\nexport function fetchPBRShaderCode (): PShaderResults {\n const vertexShaderCode = StandardShader.genVertexShaderCode(PMaterialType.pbr);\n const fragmentShaderCode = StandardShader.genFragmentShaderCode(PMaterialType.pbr);\n\n return {\n vertexShaderCode,\n fragmentShaderCode,\n };\n}\n\nexport function fetchUnlitShaderCode (): PShaderResults {\n const vertexShaderCode = StandardShader.genVertexShaderCode(PMaterialType.unlit);\n const fragmentShaderCode = StandardShader.genFragmentShaderCode(PMaterialType.unlit);\n\n return {\n vertexShaderCode,\n fragmentShaderCode,\n };\n}\n\n/**\n * 获取 PBR 材质着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getPBRPassShaderCode (context: PShaderContext): PShaderResults {\n const vertexShaderCode = StandardShader.getVertexShaderCode(context);\n const fragmentShaderCode = StandardShader.getFragmentShaderCode(context);\n\n return {\n vertexShaderCode: vertexShaderCode,\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\nexport function getShadowPassShaderCode (context: PShaderContext): PShaderResults {\n const vertexShaderCode = StandardShader.getVertexShaderCode(context);\n const fragmentShaderCode = StandardShader.getFragmentShaderCode(context);\n\n return {\n vertexShaderCode: vertexShaderCode,\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\n/**\n * 获取天空盒着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getSkyBoxShaderCode (context: PShaderContext): PShaderResults {\n const vertexShaderCode = StandardShader.getVertexShaderCode(context);\n const fragmentShaderCode = StandardShader.getFragmentShaderCode(context);\n\n return {\n vertexShaderCode: vertexShaderCode,\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\n/**\n * 获取四边形滤波着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getQuadFilterShaderCode (context: PShaderContext): PShaderResults {\n const fragmentShaderCode = `\n #version 100\n precision highp float;\n uniform sampler2D _ColorSampler;\n\n varying vec2 v_UVCoord1;\n void main(){\n gl_FragColor = texture2D(_ColorSampler, v_UVCoord1);\n }\n `;\n\n return {\n vertexShaderCode: getQuadFilterVS(),\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\n/**\n * 获取法线可视化着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getNormalVisShaderCode (context: PShaderContext): PShaderResults {\n const fragmentShaderCode = `\n #version 100\n precision highp float;\n varying vec3 v_Normal;\n void main(){\n gl_FragColor = vec4(v_Normal * 0.5 + 0.5, 1);\n }\n `;\n\n return {\n vertexShaderCode: getBasicVS({ hasNormals: true }),\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\n/**\n * 获取仅漫反射着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getDiffuseOnlyShaderCode (context: PShaderContext): PShaderResults {\n const fragmentShaderCode = `\n #version 100\n precision highp float;\n varying vec3 v_Normal;\n void main(){\n vec3 lightDir = normalize(vec3(1, 1, 1));\n gl_FragColor = vec4(max(0.0, dot(v_Normal, lightDir)) * 0.8);\n }\n `;\n\n return {\n vertexShaderCode: getBasicVS({ hasNormals: true }),\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\n/**\n * 获取 Kawase 模糊着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getKawaseBlurShaderCode (context: PShaderContext): PShaderResults {\n const fragmentShaderCode = `\n #version 100\n precision highp float;\n uniform float _Offset;\n uniform vec2 _TextureSizeInv;\n uniform sampler2D _TexturSampler;\n\n varying vec2 v_UVCoord1;\n void main() {\n vec4 color = vec4(0.0);\n color += texture2D(_TexturSampler, v_UVCoord1 + vec2(-_Offset-0.5,-_Offset-0.5) * _TextureSizeInv);\n color += texture2D(_TexturSampler, v_UVCoord1 + vec2(-_Offset-0.5, _Offset+0.5) * _TextureSizeInv);\n color += texture2D(_TexturSampler, v_UVCoord1 + vec2( _Offset+0.5,-_Offset-0.5) * _TextureSizeInv);\n color += texture2D(_TexturSampler, v_UVCoord1 + vec2( _Offset+0.5, _Offset+0.5) * _TextureSizeInv);\n gl_FragColor = color * 0.25;\n }\n `;\n\n return {\n vertexShaderCode: getQuadFilterVS(),\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\n/**\n * 获取简单滤波着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getSimpleFilterShaderCode (context: PShaderContext): PShaderResults {\n const fragmentShaderCode = `\n #version 100\n precision highp float;\n uniform sampler2D _FilterSampler;\n\n varying vec2 v_UVCoord1;\n void main() {\n gl_FragColor = texture2D(_FilterSampler, v_UVCoord1) * vec4(0.5);\n }\n `;\n\n return {\n vertexShaderCode: getQuadFilterVS(),\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\n/**\n * 获取高斯模糊着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getGaussianBlurShaderCodeV2 (context: PShaderContext): PShaderResults {\n const fragmentShaderCode = `\n #version 100\n precision highp float;\n uniform vec2 _BlurScale;\n uniform sampler2D _FilterSampler;\n\n varying vec2 v_UVCoord1;\n void main() {\n vec4 color = vec4(0);\n vec2 offset0 = vec2(0.53805) * _BlurScale.xy;\n vec2 offset1 = vec2(2.06278) * _BlurScale.xy;\n color += (texture2D(_FilterSampler, v_UVCoord1 + offset0) + texture2D(_FilterSampler, v_UVCoord1 - offset0)) * 0.44908;\n color += (texture2D(_FilterSampler, v_UVCoord1 + offset1) + texture2D(_FilterSampler, v_UVCoord1 - offset1)) * 0.05092;\n gl_FragColor = color;\n }\n `;\n\n return {\n vertexShaderCode: getQuadFilterVS(),\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\n/**\n * 获取高斯模糊着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getGaussianBlurShaderCodeV1 (context: PShaderContext): PShaderResults {\n const fragmentShaderCode = `\n #version 100\n precision highp float;\n uniform vec2 _BlurScale;\n uniform sampler2D _FilterSampler;\n\n varying vec2 v_UVCoord1;\n void main() {\n vec4 color = vec4(0.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(-3.0) * _BlurScale.xy)) * (1.0/64.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(-2.0) * _BlurScale.xy)) * (6.0/64.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(-1.0) * _BlurScale.xy)) * (15.0/64.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(+0.0) * _BlurScale.xy)) * (20.0/64.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(+1.0) * _BlurScale.xy)) * (15.0/64.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(+2.0) * _BlurScale.xy)) * (6.0/64.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(+3.0) * _BlurScale.xy)) * (1.0/64.0);\n gl_FragColor = color;\n }\n `;\n\n return {\n vertexShaderCode: getQuadFilterVS(),\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\n/**\n * 获取透明效果着色器代码\n * @param isVertexShader - 是否顶点着色器\n * @returns\n */\nexport function getTransparecyBaseShader (isVertexShader: boolean): string {\n if (isVertexShader) {\n return getBasicVS({ hasNormals: true });\n } else {\n return `\n #version 100\n #extension GL_EXT_draw_buffers: require\n\n precision highp float;\n uniform vec4 _BaseColorFactor;\n\n #ifdef HAS_UVS\n uniform sampler2D _BaseColorSampler;\n varying vec2 v_UVCoord1;\n #endif\n\n varying vec3 v_Normal;\n\n float weight(float z, float a) {\n return clamp(pow(min(1.0, a * 10.0) + 0.01, 3.0) * 1e8 * pow(1.0 - z * 0.9, 3.0), 1e-2, 3e3);\n }\n\n void main() {\n vec4 color = _BaseColorFactor;\n\n #ifdef HAS_UVS\n color *= texture2D(_BaseColorSampler, v_UVCoord1);\n #endif\n\n color.rgb *= color.a * dot(normalize(v_Normal), normalize(vec3(0, 1, 3))) * 5.0;\n float w = weight(gl_FragCoord.z, color.a);\n gl_FragData[0] = vec4(color.rgb * w, color.a);\n gl_FragData[1] = vec4(color.a * w);\n }\n `;\n }\n}\n\n/**\n * 获取透明效果滤波着色器代码\n * @param isVertexShader - 是否顶点着色器\n * @returns\n */\nexport function getTransparecyFilterShader (isVertexShader: boolean): string {\n if (isVertexShader) {\n return getQuadFilterVS();\n } else {\n return `\n #version 100\n precision highp float;\n uniform sampler2D _AccumColorSampler;\n uniform sampler2D _AccumAlphaSampler;\n\n varying vec2 v_UVCoord1;\n void main() {\n vec4 accumColor = texture2D(_AccumColorSampler, v_UVCoord1);\n vec4 accumAlpha = texture2D(_AccumAlphaSampler, v_UVCoord1);\n float finalAlpha = 1.0 - accumColor.a;\n vec3 finalColor = accumColor.rgb / clamp(accumAlpha.r, 0.001, 50000.0);\n gl_FragColor = vec4(finalColor, finalAlpha);\n }\n `;\n }\n}\n\nfunction getBasicVS (params: Record<string, boolean> = {}): string {\n const featureList: string[] = ['#version 100'];\n\n if (params.hasUVs) { featureList.push('#define HAS_UVS 1'); }\n if (params.hasNormals) { featureList.push('#define HAS_NORMALS 1'); }\n\n featureList.push(`\n precision highp float;\n\n uniform mat4 effects_ObjectToWorld;\n uniform mat4 effects_MatrixVP;\n attribute vec3 aPos;\n varying vec3 v_Position;\n\n #ifdef HAS_UVS\n attribute vec2 aUV;\n varying vec2 v_UVCoord1;\n #endif\n\n #ifdef HAS_NORMALS\n uniform mat4 _NormalMatrix;\n attribute vec3 aNormal;\n varying vec3 v_Normal;\n #endif\n\n void main(){\n vec4 pos = effects_ObjectToWorld * vec4(aPos, 1);\n v_Position = pos.xyz / pos.w;\n\n #ifdef HAS_UVS\n v_UVCoord1 = aUV;\n #endif\n\n #ifdef HAS_NORMALS\n v_Normal = normalize(vec3(effects_ObjectToWorld * vec4(aNormal, 0)));\n #endif\n\n gl_Position = effects_MatrixVP * pos;\n }\n `);\n\n return featureList.join('\\n');\n}\n\nfunction getQuadFilterVS (): string {\n return `\n #version 100\n precision highp float;\n attribute vec3 aPos;\n attribute vec2 aUV;\n\n varying vec2 v_UVCoord1;\n void main(){\n v_UVCoord1 = aUV;\n gl_Position = vec4(aPos.xy, 0.0, 1.0);\n }\n `;\n}\n","import { PMaterialType } from './common';\nimport type { PMaterialBase } from './material';\nimport * as Helper from '../utility/shader-helper';\n\n/**\n * 着色器上下文\n */\nexport interface PShaderContext {\n /**\n * 材质\n */\n material: PMaterialBase,\n /**\n * 是否 WebGL2\n */\n isWebGL2: boolean,\n /**\n * 特性列表\n */\n featureList: string[],\n}\n\n/**\n * 着色器返回的代码结果\n */\nexport interface PShaderResults {\n /**\n * 顶点着色器代码\n */\n vertexShaderCode: string,\n /**\n * 片段着色器代码\n */\n fragmentShaderCode: string,\n}\n\ntype ShaderCodeFuncType = (context: PShaderContext) => PShaderResults;\n\n/**\n * 着色器管理类\n */\nexport class PShaderManager {\n private funcMap: Map<PMaterialType, ShaderCodeFuncType>;\n private static _instance: PShaderManager;\n\n /**\n * 获取着色器单例对象\n * @returns\n */\n static getInstance (): PShaderManager {\n // Do you need arguments? Make it a regular static method instead.\n return this._instance || (this._instance = new this());\n }\n\n private constructor () {\n this.funcMap = new Map();\n this.funcMap.set(PMaterialType.unlit, Helper.getPBRPassShaderCode);\n this.funcMap.set(PMaterialType.pbr, Helper.getPBRPassShaderCode);\n this.funcMap.set(PMaterialType.shadowBase, Helper.getShadowPassShaderCode);\n this.funcMap.set(PMaterialType.shadowFilter, Helper.getGaussianBlurShaderCodeV2);\n this.funcMap.set(PMaterialType.normalVis, Helper.getNormalVisShaderCode);\n this.funcMap.set(PMaterialType.simpleFilter, Helper.getSimpleFilterShaderCode);\n this.funcMap.set(PMaterialType.skyboxFilter, Helper.getSkyBoxShaderCode);\n }\n\n /**\n * 生成着色器代码\n * @param context - 着色器上下文\n * @returns\n */\n genShaderCode (context: PShaderContext): PShaderResults {\n const materialType = context.material.materialType;\n const func = this.funcMap.get(materialType);\n\n if (func !== undefined) {\n return func(context);\n } else {\n throw new Error(`Invalid material type ${materialType}, shader content ${context}.`);\n }\n }\n}\n","import type { Texture, Material } from '@galacean/effects';\nimport { spec, glContext } from '@galacean/effects';\nimport type { MacroInfo } from '../index';\nimport type { Matrix3 } from './math';\nimport { Vector3, Vector4, Color } from './math';\nimport { PObjectType, PMaterialType, PGlobalState, PBRShaderGUID } from './common';\nimport { PObject } from './object';\nimport { PluginHelper } from '../utility/plugin-helper';\nimport { PShaderManager } from './shader';\n\n/**\n * 3D 材质基础类,支持公共的材质功能\n */\nexport abstract class PMaterialBase extends PObject {\n effectMaterial: Material;\n /**\n * 材质类型,主要是 pbr 和 unlit 两类\n */\n materialType: PMaterialType = PMaterialType.none;\n /**\n * 顶点着色器代码\n */\n vertexShaderCode = '';\n /**\n * 片段着色器代码\n */\n fragmentShaderCode = '';\n /**\n * 深度是否写入,默认是写入\n */\n ZWrite = true;\n /**\n * 是否深度测试提示,默认开启\n */\n ZTest = true;\n /**\n * 渲染类型,默认是不透明\n */\n renderType: spec.RenderType = spec.RenderType.Opaque;\n /**\n * 是否 Alpha 裁剪,默认关闭\n */\n alphaClip = false;\n /**\n * Alpha 测试截断值\n */\n alphaCutoff = 0.5;\n /**\n * 面侧模式,默认是正面\n */\n renderFace: spec.RenderFace = spec.RenderFace.Front;\n\n /**\n * 获取着色器特性列表,根据材质状态\n * @returns 特性列表\n */\n getShaderFeatures (): string[] {\n const featureList: string[] = [];\n\n if (this.isAlphaClip()) {\n featureList.push('ALPHAMODE_MASK 1');\n } else if (this.isOpaque()) {\n featureList.push('ALPHAMODE_OPAQUE 1');\n }\n\n if (this.renderFace === spec.RenderFace.Both) {\n featureList.push('DOUBLE_SIDED 1');\n }\n\n return featureList;\n }\n\n getShaderMacros (): MacroInfo[] {\n const macroList: MacroInfo[] = [];\n\n if (this.isAlphaClip()) {\n macroList.push({ name: 'ALPHAMODE_MASK' });\n } else if (this.isOpaque()) {\n macroList.push({ name: 'ALPHAMODE_OPAQUE' });\n }\n\n if (this.renderFace === spec.RenderFace.Both) {\n macroList.push({ name: 'DOUBLE_SIDED' });\n }\n\n return macroList;\n }\n\n /**\n * 根据材质状态,更新 GE 材质状态\n * @param material - GE 材质\n */\n updateUniforms (material: Material) {\n // 渲染 UV 结果输出时,设置 uv 大小\n const renderMode = PGlobalState.getInstance().renderMode3D;\n\n if (renderMode === spec.RenderMode3D.uv) {\n const debugUVGridSize = PGlobalState.getInstance().renderMode3DUVGridSize;\n\n material.setFloat('_DebugUVGridSize', debugUVGridSize);\n }\n }\n\n /**\n * 生成顶点和片段着色器代码\n * 先获取着色器特性,再根据材质和全局状态,生成着色器代码\n * @param inFeatureList - 外部特性列表\n */\n build (inFeatureList?: string[]) {\n const finalFeatureList = this.getFeatureList(inFeatureList);\n const isWebGL2 = PGlobalState.getInstance().isWebGL2;\n //\n const shaderManager = PShaderManager.getInstance();\n const shaderResult = shaderManager.genShaderCode({\n material: this,\n isWebGL2,\n featureList: finalFeatureList,\n });\n\n this.vertexShaderCode = shaderResult.vertexShaderCode;\n this.fragmentShaderCode = shaderResult.fragmentShaderCode;\n }\n\n getFeatureList (inFeatureList?: string[]) {\n const finalFeatureList = this.getShaderFeatures();\n\n if (inFeatureList !== undefined) {\n finalFeatureList.push(...inFeatureList);\n }\n\n // 目前只有 PRB 和 Unlit 是需要 EDITOR_TRANSFORM,适配编辑器的视口 Offset\n // 阴影 Pass 的渲染是不需要,所以这里特殊处理下\n if (this.materialType !== PMaterialType.shadowBase) {\n const isEditorEvn = PGlobalState.getInstance().isEditorEnv;\n\n if (isEditorEvn) {\n finalFeatureList.push('EDITOR_TRANSFORM');\n }\n }\n\n return finalFeatureList;\n }\n\n getMacroList (inMacroList?: MacroInfo[]) {\n const finalMacroList = this.getShaderMacros();\n\n if (inMacroList !== undefined) {\n finalMacroList.push(...inMacroList);\n }\n\n // 目前只有 PRB 和 Unlit 是需要 EDITOR_TRANSFORM,适配编辑器的视口 Offset\n // 阴影 Pass 的渲染是不需要,所以这里特殊处理下\n if (this.materialType !== PMaterialType.shadowBase) {\n const isEditorEvn = PGlobalState.getInstance().isEditorEnv;\n\n if (isEditorEvn) {\n finalMacroList.push({ name: 'EDITOR_TRANSFORM' });\n }\n }\n\n return finalMacroList;\n }\n\n /**\n * 设置材质状态,根据 GE 材质状态\n * @param material - GE 材质\n */\n setMaterialStates (material: Material) {\n if (this.renderType === spec.RenderType.Transparent) {\n material.blending = true;\n material.depthTest = this.ZTest;\n material.depthMask = this.ZWrite;\n material.blendEquation = [glContext.FUNC_ADD, glContext.FUNC_ADD];\n material.blendFunction = [\n glContext.ONE, glContext.ONE_MINUS_SRC_ALPHA,\n glContext.ONE, glContext.ONE_MINUS_SRC_ALPHA,\n ];\n } else {\n if (PGlobalState.getInstance().isTiny3dMode) {\n material.blending = false;\n material.depthTest = true;\n // Tiny兼容模式下不透明的深度写入始终开\n material.depthMask = true;\n } else {\n material.blending = false;\n material.depthTest = this.ZTest;\n material.depthMask = this.ZWrite;\n }\n }\n\n this.setFaceSideStates(material);\n }\n\n protected setFaceSideStates (material: Material) {\n if (this.isBothSide()) {\n material.culling = false;\n } else if (this.isBackSide()) {\n material.cullFace = glContext.FRONT;\n material.frontFace = glContext.CCW;\n material.culling = true;\n } else {\n material.cullFace = glContext.BACK;\n material.frontFace = glContext.CCW;\n material.culling = true;\n }\n }\n\n /**\n * 销毁材质,清除着色器代码\n */\n override dispose () {\n this.vertexShaderCode = '';\n this.fragmentShaderCode = '';\n }\n\n /**\n * 是否合法,材质类型非 none\n * @returns\n */\n override isValid (): boolean {\n return this.materialType !== PMaterialType.none && super.isValid();\n }\n\n /**\n * 是否不透明\n * @returns\n */\n isOpaque (): boolean {\n return this.renderType === spec.RenderType.Opaque;\n }\n\n /**\n * 是否 Alpha 裁剪\n * @returns\n */\n isAlphaClip (): boolean {\n return this.alphaClip;\n }\n\n /**\n * 是否半透明\n * @returns\n */\n isTransparent (): boolean {\n return this.renderType === spec.RenderType.Transparent;\n }\n\n /**\n * 是否正面模式\n * @returns\n */\n isFrontSide (): boolean {\n return this.renderFace === spec.RenderFace.Front;\n }\n\n /**\n * 是否背面模式\n * @returns\n */\n isBackSide (): boolean {\n return this.renderFace === spec.RenderFace.Back;\n }\n\n /**\n * 是否双面模式\n * @returns\n */\n isBothSide (): boolean {\n return this.renderFace === spec.RenderFace.Both;\n }\n}\n\n/**\n * 无光照材质类,负责无关照或者不接受光照情况下的物体材质效果\n */\nexport class PMaterialUnlit extends PMaterialBase {\n /**\n * 基础颜色纹理\n */\n baseColorTexture?: Texture;\n /**\n * 基础颜色纹理变换\n */\n baseColorTextureTrans: Matrix3;\n /**\n * 基础颜色值,默认是白色 Color(1, 1, 1, 1)\n */\n baseColorFactor: Color = new Color(1, 1, 1, 1);\n\n /**\n * 创建无光照材质,支持基础颜色纹理\n * @param material - effect 材质对象\n */\n create (material: Material) {\n this.effectMaterial = material;\n this.name = material.name;\n this.type = PObjectType.material;\n this.materialType = PMaterialType.unlit;\n //\n this.baseColorTexture = material.getTexture('_BaseColorSampler') ?? undefined;\n this.baseColorTextureTrans = PluginHelper.createUVTransform(material, '_BaseColorSampler_ST', '_BaseColorRotation');\n this.baseColorFactor = material.getColor('_BaseColorFactor') ?? new Color(1.0, 1.0, 1.0, 1.0);\n //\n this.ZWrite = material.getFloat('ZWrite') !== 0;\n this.ZTest = material.getFloat('ZTest') !== 0;\n this.renderType = material.stringTags['RenderType'] as spec.RenderType ?? spec.RenderType.Opaque;\n this.alphaClip = material.getFloat('AlphaClip') === 1;\n this.alphaCutoff = material.getFloat('_AlphaCutoff') ?? 0;\n this.renderFace = material.stringTags['RenderFace'] as spec.RenderFace ?? spec.RenderFace.Front;\n }\n\n /**\n * 销毁材质\n */\n override dispose () {\n super.dispose();\n this.baseColorTexture = undefined;\n }\n\n /**\n * 获取着色器特性列表,根据材质状态\n * @returns 着色器特性列表\n */\n override getShaderFeatures (): string[] {\n const featureList = super.getShaderFeatures();\n\n featureList.push('MATERIAL_METALLICROUGHNESS 1');\n if (this.hasBaseColorTexture()) {\n featureList.push('HAS_BASE_COLOR_MAP 1');\n }\n\n featureList.push('MATERIAL_UNLIT 1');\n\n return featureList;\n }\n\n override getShaderMacros (): MacroInfo[] {\n const macroList = super.getShaderMacros();\n\n macroList.push({ name: 'MATERIAL_METALLICROUGHNESS' });\n if (this.hasBaseColorTexture()) {\n macroList.push({ name: 'HAS_BASE_COLOR_MAP' });\n }\n\n macroList.push({ name: 'MATERIAL_UNLIT' });\n\n return macroList;\n }\n\n /**\n * 更新对应的 GE 材质中着色器的 Uniform 数据\n * @param material - GE 材质\n */\n override updateUniforms (material: Material) {\n super.updateUniforms(material);\n\n if (this.baseColorTexture !== undefined) {\n material.setInt('_BaseColorUVSet', 0);\n material.setMatrix3('_BaseColorUVTransform', this.baseColorTextureTrans);\n }\n\n material.setFloat('_MetallicFactor', 0);\n material.setFloat('_RoughnessFactor', 0);\n\n material.setFloat('_Exposure', 1.0);\n }\n\n /**\n * 是否有基础颜色纹理\n * @returns\n */\n hasBaseColorTexture (): boolean {\n return this.baseColorTexture !== undefined;\n }\n\n /**\n * 获取基础颜色纹理\n * @returns\n */\n getBaseColorTexture (): Texture {\n return this.baseColorTexture as Texture;\n }\n\n /**\n * 设置基础颜色纹理\n * @param val - 纹理对象\n */\n setBaseColorTexture (val: Texture) {\n this.baseColorTexture = val;\n }\n\n /**\n * 获取基础颜色纹理\n * @returns\n */\n getBaseColorFactor (): Color {\n return this.baseColorFactor;\n }\n\n /**\n * 设置基础颜色值\n * @param val - 颜色值\n */\n setBaseColorFactor (val: Color | Vector4 | spec.vec4) {\n if (val instanceof Color) {\n // for Color\n this.baseColorFactor.set(val.r, val.g, val.b, val.a);\n } else if (val instanceof Vector4) {\n // for Vector4\n this.baseColorFactor.set(val.x, val.y, val.z, val.w);\n } else {\n // for vec4\n this.baseColorFactor.set(val[0], val[1], val[2], val[3]);\n }\n }\n}\n\n/**\n * PBR 材质类,负责基于物理的材质效果,也是渲染中最常用的材质。\n * 目前支持金属度/粗糙度工作流,与其他引擎中的 PBR 材质功能一致。\n */\nexport class PMaterialPBR extends PMaterialBase {\n /**\n * 基础颜色纹理\n */\n baseColorTexture?: Texture;\n /**\n * 基础颜色纹理变换\n */\n baseColorTextureTrans: Matrix3;\n /**\n * 基础颜色值,默认是白色 Color(1, 1, 1, 1)\n */\n baseColorFactor: Color = new Color(1, 1, 1, 1);\n /**\n * 金属度粗超度纹理\n */\n metallicRoughnessTexture?: Texture;\n /**\n * 金属度粗超度纹理变换\n */\n metallicRoughnessTextureTrans: Matrix3;\n /**\n * 是否高光抗锯齿,能够明显提升高光表现效果\n */\n useSpecularAA = false;\n /**\n * 金属度值\n */\n metallicFactor = 0;\n /**\n * 粗超度值\n */\n roughnessFactor = 1;\n /**\n * 法线纹理\n */\n normalTexture?: Texture;\n /**\n * 法线纹理变换\n */\n normalTextureTrans: Matrix3;\n /**\n * 法线纹理缩放\n */\n normalTextureScale = 1;\n /**\n * AO 纹理\n */\n occlusionTexture?: Texture;\n /**\n * AO 纹理变换\n */\n occlusionTextureTrans: Matrix3;\n /**\n * AO 纹理强度\n */\n occlusionTextureStrength = 1;\n /**\n * 自发光纹理\n */\n emissiveTexture?: Texture;\n /**\n * 自发光纹理变换\n */\n emissiveTextureTrans: Matrix3;\n /**\n * 自发光颜色值,默认是黑色 Vector4(0, 0, 0, 0)\n */\n emissiveFactor: Color = new Color(0, 0, 0, 0);\n /**\n * 自发光强度\n */\n emissiveIntensity = 1;\n\n /**\n * 创建材质\n * @param material - effect 材质对象\n */\n create (material: Material) {\n this.effectMaterial = material;\n this.name = material.name;\n this.type = PObjectType.material;\n this.materialType = PMaterialType.pbr;\n //\n this.baseColorTexture = material.getTexture('_BaseColorSampler') ?? undefined;\n this.baseColorTextureTrans = PluginHelper.createUVTransform(material, '_BaseColorSampler_ST', '_BaseColorRotation');\n this.baseColorFactor = material.getColor('_BaseColorFactor') ?? new Color(1.0, 1.0, 1.0, 1.0);\n //\n this.metallicRoughnessTexture = material.getTexture('_MetallicRoughnessSampler') ?? undefined;\n this.metallicRoughnessTextureTrans = PluginHelper.createUVTransform(material, '_MetallicRoughnessSampler_ST', '_MetallicRoughnessRotation');\n this.useSpecularAA = material.getFloat('_SpecularAA') === 1;\n this.metallicFactor = material.getFloat('_MetallicFactor') ?? 1;\n this.roughnessFactor = material.getFloat('_RoughnessFactor') ?? 0;\n //\n this.normalTexture = material.getTexture('_NormalSampler') ?? undefined;\n this.normalTextureTrans = PluginHelper.createUVTransform(material, '_NormalSampler_ST', '_NormalRotation');\n this.normalTextureScale = material.getFloat('_NormalScale') ?? 1;\n //\n this.occlusionTexture = material.getTexture('_OcclusionSampler') ?? undefined;\n this.occlusionTextureTrans = PluginHelper.createUVTransform(material, '_OcclusionSampler_ST', '_OcclusionRotation');\n this.occlusionTextureStrength = material.getFloat('_OcclusionStrength') ?? 1;\n //\n this.emissiveTexture = material.getTexture('_EmissiveSampler') ?? undefined;\n this.emissiveTextureTrans = PluginHelper.createUVTransform(material, '_EmissiveSampler_ST', '_EmissiveRotation');\n this.emissiveFactor = material.getColor('_EmissiveFactor') ?? new Color(0, 0, 0, 1);\n this.emissiveIntensity = material.getFloat('_EmissiveIntensity') ?? 1;\n //\n this.ZWrite = material.getFloat('ZWrite') !== 0;\n this.ZTest = material.getFloat('ZTest') !== 0;\n this.renderType = material.stringTags['RenderType'] as spec.RenderType ?? spec.RenderType.Opaque;\n this.alphaClip = material.getFloat('AlphaClip') === 1;\n this.alphaCutoff = material.getFloat('_AlphaCutoff') ?? 0;\n this.renderFace = material.stringTags['RenderFace'] as spec.RenderFace ?? spec.RenderFace.Front;\n }\n\n /**\n * 销毁材质\n */\n override dispose () {\n super.dispose();\n this.baseColorTexture = undefined;\n this.metallicRoughnessTexture = undefined;\n this.normalTexture = undefined;\n this.occlusionTexture = undefined;\n this.emissiveTexture = undefined;\n }\n\n /**\n * 获取材质特性列表\n * @returns 材质特性列表\n */\n override getShaderFeatures (): string[] {\n const featureList = super.getShaderFeatures();\n\n featureList.push('MATERIAL_METALLICROUGHNESS 1');\n if (this.hasBaseColorTexture()) {\n featureList.push('HAS_BASE_COLOR_MAP 1');\n if (this.baseColorTextureTrans !== undefined) {\n featureList.push('HAS_BASECOLOR_UV_TRANSFORM 1');\n }\n }\n if (this.hasMetallicRoughnessTexture()) {\n featureList.push('HAS_METALLIC_ROUGHNESS_MAP 1');\n if (this.metallicRoughnessTextureTrans !== undefined) {\n featureList.push('HAS_METALLICROUGHNESS_UV_TRANSFORM 1');\n }\n }\n if (this.useSpecularAA) {\n featureList.push('USE_SPECULAR_AA 1');\n }\n if (this.hasNormalTexture()) {\n featureList.push('HAS_NORMAL_MAP 1');\n if (this.normalTextureTrans !== undefined) {\n featureList.push('HAS_NORMAL_UV_TRANSFORM 1');\n }\n }\n if (this.hasOcclusionTexture()) {\n featureList.push('HAS_OCCLUSION_MAP 1');\n if (this.occlusionTextureTrans !== undefined) {\n featureList.push('HAS_OCCLUSION_UV_TRANSFORM 1');\n }\n }\n if (this.hasEmissiveTexture()) {\n featureList.push('HAS_EMISSIVE_MAP 1');\n if (this.emissiveTextureTrans !== undefined) {\n featureList.push('HAS_EMISSIVE_UV_TRANSFORM 1');\n }\n } else if (this.hasEmissiveValue()) {\n featureList.push('HAS_EMISSIVE 1');\n }\n\n return featureList;\n }\n\n override getShaderMacros (): MacroInfo[] {\n const macroList = super.getShaderMacros();\n\n macroList.push({ name: 'MATERIAL_METALLICROUGHNESS' });\n if (this.hasBaseColorTexture()) {\n macroList.push({ name: 'HAS_BASE_COLOR_MAP' });\n if (this.baseColorTextureTrans !== undefined) {\n macroList.push({ name: 'HAS_BASECOLOR_UV_TRANSFORM' });\n }\n }\n if (this.hasMetallicRoughnessTexture()) {\n macroList.push({ name: 'HAS_METALLIC_ROUGHNESS_MAP' });\n if (this.metallicRoughnessTextureTrans !== undefined) {\n macroList.push({ name: 'HAS_METALLICROUGHNESS_UV_TRANSFORM' });\n }\n }\n if (this.useSpecularAA) {\n macroList.push({ name: 'USE_SPECULAR_AA' });\n }\n if (this.hasNormalTexture()) {\n macroList.push({ name: 'HAS_NORMAL_MAP' });\n if (this.normalTextureTrans !== undefined) {\n macroList.push({ name: 'HAS_NORMAL_UV_TRANSFORM' });\n }\n }\n if (this.hasOcclusionTexture()) {\n macroList.push({ name: 'HAS_OCCLUSION_MAP' });\n if (this.occlusionTextureTrans !== undefined) {\n macroList.push({ name: 'HAS_OCCLUSION_UV_TRANSFORM' });\n }\n }\n if (this.hasEmissiveTexture()) {\n macroList.push({ name: 'HAS_EMISSIVE_MAP' });\n if (this.emissiveTextureTrans !== undefined) {\n macroList.push({ name: 'HAS_EMISSIVE_UV_TRANSFORM' });\n }\n } else if (this.hasEmissiveValue()) {\n macroList.push({ name: 'HAS_EMISSIVE' });\n }\n\n return macroList;\n }\n\n /**\n * 更新关联的 GE 材质中着色器的 Uniform 数据\n * @param material - GE 材质\n */\n override updateUniforms (material: Material) {\n super.updateUniforms(material);\n\n if (this.baseColorTexture !== undefined) {\n material.setInt('_BaseColorUVSet', 0);\n material.setMatrix3('_BaseColorUVTransform', this.baseColorTextureTrans);\n }\n //\n if (this.metallicRoughnessTexture !== undefined) {\n material.setInt('_MetallicRoughnessUVSet', 0);\n material.setMatrix3('_MetallicRoughnessUVTransform', this.metallicRoughnessTextureTrans);\n }\n //\n if (this.normalTexture !== undefined) {\n material.setInt('_NormalUVSet', 0);\n material.setMatrix3('_NormalUVTransform', this.normalTextureTrans);\n }\n //\n if (this.occlusionTexture !== undefined) {\n material.setInt('_OcclusionUVSet', 0);\n material.setMatrix3('_OcclusionUVTransform', this.occlusionTextureTrans);\n }\n //\n if (this.emissiveTexture !== undefined) {\n material.setInt('_EmissiveUVSet', 0);\n material.setMatrix3('_EmissiveUVTransform', this.emissiveTextureTrans);\n }\n\n material.setFloat('_Exposure', 3.0);\n }\n\n /**\n * 是否有基础颜色纹理\n * @returns\n */\n hasBaseColorTexture (): boolean {\n return this.baseColorTexture !== undefined;\n }\n\n /**\n * 设置基础颜色纹理\n * @param val - 纹理\n */\n setBaseColorTexture (val: Texture) {\n this.baseColorTexture = val;\n }\n\n /**\n * 获取基础颜色纹理\n * @returns\n */\n getBaseColorFactor (): Color {\n return this.baseColorFactor;\n }\n\n /**\n * 设置基础颜色值\n * @param val - 颜色值\n */\n setBaseColorFactor (val: Color | Vector4 | spec.vec4) {\n if (val instanceof Color) {\n // for Vector4\n this.baseColorFactor.set(val.r, val.g, val.b, val.a);\n } else if (val instanceof Vector4) {\n // for Vector4\n this.baseColorFactor.set(val.x, val.y, val.z, val.w);\n } else {\n // for vec4\n this.baseColorFactor.set(val[0], val[1], val[2], val[3]);\n }\n }\n\n /**\n * 是否有金属度粗超度纹理\n * @returns\n */\n hasMetallicRoughnessTexture (): boolean {\n return this.metallicRoughnessTexture !== undefined;\n }\n\n /**\n * 获取金属度粗超度纹理\n * @returns\n */\n getMetallicRoughnessTexture (): Texture {\n return this.metallicRoughnessTexture as Texture;\n }\n\n /**\n * 设置金属度粗超度纹理\n * @param val - 纹理\n */\n setMetallicRoughnessTexture (val: Texture) {\n this.metallicRoughnessTexture = val;\n }\n\n /**\n * 是否有法线纹理\n * @returns\n */\n hasNormalTexture (): boolean {\n return this.normalTexture !== undefined;\n }\n\n /**\n * 获取法线纹理\n * @returns\n */\n getNormalTexture (): Texture {\n return this.normalTexture as Texture;\n }\n\n /**\n * 设置法线纹理\n * @param val - 纹理\n */\n setNormalTexture (val: Texture) {\n this.normalTexture = val;\n }\n\n /**\n * 是否有遮挡纹理\n * @returns\n */\n hasOcclusionTexture (): boolean {\n return this.occlusionTexture !== undefined;\n }\n\n /**\n * 获取遮挡纹理\n * @returns\n */\n getOcclusionTexture (): Texture {\n return this.occlusionTexture as Texture;\n }\n\n /**\n * 设置遮挡纹理\n * @param val - 纹理\n */\n setOcclusionTexture (val: Texture) {\n this.occlusionTexture = val;\n }\n\n /**\n * 是否有自发光纹理\n * @returns\n */\n hasEmissiveTexture (): boolean {\n return this.emissiveTexture !== undefined;\n }\n\n /**\n * 获取自发光纹理\n * @returns\n */\n getEmissiveTexture (): Texture {\n return this.emissiveTexture as Texture;\n }\n\n /**\n * 设置自发光纹理\n * @param val - 纹理\n */\n setEmissiveTexture (val: Texture) {\n this.emissiveTexture = val;\n }\n\n /**\n * 是否有自发光值,包含强度\n * @returns\n */\n hasEmissiveValue (): boolean {\n return this.emissiveFactor.luminance() * this.emissiveIntensity > 0;\n }\n\n /**\n * 获取自发光颜色\n * @returns\n */\n getEmissiveFactor (): Color {\n return this.emissiveFactor;\n }\n\n /**\n * 设置自发光颜色\n * @param val - 颜色\n */\n setEmissiveFactor (val: Color | Vector3 | spec.vec3) {\n if (val instanceof Color) {\n // Color\n this.emissiveFactor.set(val.r, val.g, val.b, val.a);\n } else if (val instanceof Vector3) {\n // Vector3\n this.emissiveFactor.set(val.x, val.y, val.z, 0);\n } else {\n // vec3\n this.emissiveFactor.set(val[0], val[1], val[2], 0);\n }\n }\n\n /**\n * 获取自发光强度\n * @returns\n */\n getEmissiveIntensity (): number {\n return this.emissiveIntensity;\n }\n\n /**\n * 设置自发光强度\n * @param val - 强度\n */\n setEmissiveIntensity (val: number) {\n this.emissiveIntensity = val;\n }\n}\n\n/**\n * 材质类型,包括无光照材质和 PBR 材质\n */\nexport type PMaterial = PMaterialUnlit | PMaterialPBR;\n\n/**\n * 创建插件材质对象\n * @param material - Effects 材质对象\n * @returns 材质对象\n */\nexport function createPluginMaterial (material: Material): PMaterial {\n if (material.shader.getInstanceId() === PBRShaderGUID) {\n const materialPBR = new PMaterialPBR();\n\n materialPBR.create(material);\n\n return materialPBR;\n } else {\n const materialUnlit = new PMaterialUnlit();\n\n materialUnlit.create(material);\n\n return materialUnlit;\n }\n}\n","import type { Mesh, Material, TextureSourceOptions, Engine, Renderer } from '@galacean/effects';\nimport { spec, glContext, Texture, TextureSourceType, loadImage, generateGUID } from '@galacean/effects';\nimport type { ModelSkyboxComponentData, ModelSkyboxOptions } from '../index';\nimport { PObjectType, PMaterialType } from './common';\nimport { PEntity } from './object';\nimport { PMaterialBase } from './material';\nimport type { PSceneManager } from './scene';\nimport { WebGLHelper } from '../utility/plugin-helper';\nimport { Vector2, Vector3 } from './math';\nimport type { ModelSkyboxComponent } from '../plugin/model-item';\n\n/**\n * 天空盒类,支持天空盒的渲染和 IBL 光照效果\n */\nexport class PSkybox extends PEntity {\n /**\n * 所属的天空盒组件\n */\n owner?: ModelSkyboxComponent;\n /**\n * 是否渲染\n */\n renderable = true;\n /**\n * 强度\n */\n intensity = 1.0;\n /**\n * 反射强度\n */\n reflectionsIntensity = 1.0;\n /**\n * 辐射照度系数\n */\n irradianceCoeffs?: number[][];\n /**\n * 漫反射贴图\n */\n diffuseImage?: Texture;\n /**\n * 高光贴图\n */\n specularImage!: Texture;\n /**\n * 高光贴图大小\n */\n specularImageSize = 0;\n /**\n * 高光贴图 Mip 层数目\n */\n specularMipCount = 0;\n /**\n * BRDF 查询纹理\n */\n brdfLUT?: Texture;\n /**\n * 优先级\n */\n priority = 0;\n /**\n * 天空盒 Mesh\n */\n skyboxMesh?: Mesh;\n /**\n * 天空盒材质\n */\n skyboxMaterial?: PMaterialSkyboxFilter;\n /**\n * 是否构建过\n */\n isBuilt = false;\n\n /**\n * 构造函数\n * @param name - 名称\n * @param data - 天空盒参数\n * @param owner - 所属天空盒组件元素\n */\n constructor (name: string, data: ModelSkyboxComponentData, owner?: ModelSkyboxComponent) {\n super();\n this.name = name;\n this.type = PObjectType.skybox;\n this.visible = false;\n this.owner = owner;\n\n const { irradianceCoeffs } = data;\n\n this.renderable = data.renderable;\n this.intensity = data.intensity;\n this.reflectionsIntensity = data.reflectionsIntensity;\n if (irradianceCoeffs) {\n this.irradianceCoeffs = [];\n for (let i = 0; i < irradianceCoeffs.length; i += 3) {\n this.irradianceCoeffs.push([\n irradianceCoeffs[i],\n irradianceCoeffs[i + 1],\n irradianceCoeffs[i + 2],\n ]);\n }\n } else {\n this.irradianceCoeffs = [];\n }\n\n this.diffuseImage = data.diffuseImage as unknown as Texture;\n this.specularImage = data.specularImage as unknown as Texture;\n this.specularImageSize = data.specularImageSize;\n this.specularMipCount = data.specularMipCount;\n\n this.priority = owner?.item?.renderOrder || 0;\n }\n\n /**\n * 设置 BRDF 查询纹理\n * @param brdfLUT - 纹理\n */\n setup (brdfLUT?: Texture) {\n this.brdfLUT = brdfLUT;\n }\n\n /**\n * 构建天空盒,创建天空盒材质,从场景缓存中创建天空盒 Mesh\n * @param sceneCache - 场景缓存\n * @returns\n */\n build (scene: PSceneManager) {\n if (this.isBuilt) {\n return;\n }\n\n this.isBuilt = true;\n this.skyboxMaterial = new PMaterialSkyboxFilter();\n this.skyboxMaterial.create(this);\n this.skyboxMaterial.build();\n //\n const sceneCache = scene.getSceneCache();\n\n this.skyboxMesh = sceneCache.getFilterMesh('SkyboxFilterPlane', this.skyboxMaterial);\n this.skyboxMesh.priority = this.priority;\n this.skyboxMaterial.updateUniforms(this.skyboxMesh.material);\n }\n\n /**\n * 渲染天空盒\n * @param scene - 场景\n * @param renderer - 渲染器\n */\n override render (scene: PSceneManager, renderer: Renderer) {\n this.updateMaterial(scene);\n\n if (this.visible && this.renderable && this.skyboxMesh !== undefined) {\n const mesh = this.skyboxMesh;\n\n renderer.drawGeometry(mesh.geometry, mesh.material);\n }\n }\n\n /**\n * 销毁\n */\n override dispose () {\n super.dispose();\n this.owner = undefined;\n this.diffuseImage = undefined;\n //@ts-expect-error\n this.specularImage = undefined;\n this.brdfLUT = undefined;\n this.skyboxMesh = undefined;\n this.skyboxMaterial?.dispose();\n this.skyboxMaterial = undefined;\n }\n\n private updateMaterial (scene: PSceneManager) {\n this.build(scene);\n\n if (this.visible && this.renderable && this.skyboxMesh !== undefined && this.skyboxMaterial !== undefined) {\n const sceneStates = scene.sceneStates;\n const camera = sceneStates.camera;\n const viewMatrix = sceneStates.viewMatrix;\n const newProjViewMatrix = camera.getNewProjectionMatrix(camera.fov).multiply(viewMatrix).invert();\n const material = this.skyboxMesh.material;\n\n this.skyboxMaterial.updateUniforms(material);\n material.setMatrix('_InvViewProjectionMatrix', newProjViewMatrix);\n }\n }\n\n /**\n * 是否可用,根据内部的强度、辐射照度系数、漫反射贴图和高光贴图状态\n */\n get available (): boolean {\n if (!this.isValid()) { return false; }\n\n if (this.intensity <= 0 && this.reflectionsIntensity <= 0) { return false; }\n\n if (this.irradianceCoeffs === undefined && this.diffuseImage === undefined) { return false; }\n\n return this.specularImage !== undefined && this.specularMipCount >= 0;\n }\n\n /**\n * 当前强度,如果不可见返回 0\n */\n get currentIntensity (): number {\n return this.visible ? this.intensity : 0;\n }\n\n /**\n * 当前反射强度,如果不可见返回 0\n */\n get currentReflectionsIntensity (): number {\n return this.visible ? this.reflectionsIntensity : 0;\n }\n\n /**\n * 是否有漫反射贴图\n */\n get hasDiffuseImage (): boolean {\n return this.diffuseImage !== undefined;\n }\n\n /**\n * 是否有辐射照度系数\n */\n get hasIrradianceCoeffs (): boolean {\n return this.irradianceCoeffs !== undefined;\n }\n\n}\n\n/**\n * 天空盒材质类\n */\nexport class PMaterialSkyboxFilter extends PMaterialBase {\n /**\n * 强度\n */\n intensity = 1.0;\n /**\n * 反射强度\n */\n reflectionsIntensity = 1.0;\n /**\n * BRDF 查询纹理\n */\n brdfLUT?: Texture;\n /**\n * 辐射照度系数\n */\n irradianceCoeffs?: number[][];\n /**\n * 漫反射贴图\n */\n diffuseImage?: Texture;\n /**\n * 高光贴图\n */\n specularImage!: Texture;\n /**\n * 高光贴图 Mip 数目\n */\n specularMipCount = 0;\n\n /**\n * 创建天空盒材质,从天空盒对象\n * @param skybox - 天空盒对象\n */\n create (skybox: PSkybox) {\n this.type = PObjectType.material;\n this.materialType = PMaterialType.skyboxFilter;\n this.ZTest = false;\n //\n this.name = skybox.name;\n this.intensity = skybox.intensity;\n this.reflectionsIntensity = skybox.reflectionsIntensity;\n this.brdfLUT = skybox.brdfLUT;\n this.irradianceCoeffs = skybox.irradianceCoeffs;\n this.diffuseImage = skybox.diffuseImage;\n this.specularImage = skybox.specularImage;\n this.specularMipCount = skybox.specularMipCount;\n }\n\n /**\n * 销毁,需要解除资源引用\n */\n override dispose () {\n super.dispose();\n this.brdfLUT = undefined;\n this.irradianceCoeffs = undefined;\n this.diffuseImage = undefined;\n // @ts-expect-error\n this.specularImage = undefined;\n }\n\n /**\n * 获取着色器特性列表\n * @returns\n */\n override getShaderFeatures (): string[] {\n const featureList: string[] = [];\n\n featureList.push('USE_IBL 1');\n featureList.push('USE_TEX_LOD 1');\n if (this.diffuseImage === undefined) { featureList.push('IRRADIANCE_COEFFICIENTS 1'); }\n\n return featureList;\n }\n\n /**\n * 更新着色器 Uniform 数据\n * @param material - 对应的 Core 层材质\n */\n override updateUniforms (material: Material) {\n if (this.brdfLUT === undefined) {\n throw new Error('Setup brdfLUT for skybox at first.');\n }\n\n material.setVector2('_IblIntensity', new Vector2(2.0, 2.0));\n material.setTexture('_brdfLUT', this.brdfLUT);\n if (this.diffuseImage !== undefined) {\n material.setTexture('_DiffuseEnvSampler', this.diffuseImage);\n } else {\n const coeffs = this.irradianceCoeffs;\n\n if (coeffs === undefined || coeffs.length != 9) { throw new Error(`Invalid skybox irradiance coeffs ${coeffs}.`); }\n\n const aliasName = ['l00', 'l1m1', 'l10', 'l11', 'l2m2', 'l2m1', 'l20', 'l21', 'l22'];\n\n aliasName.forEach((n, i) => {\n material.setVector3(`_shCoefficients.${n}`, Vector3.fromArray(coeffs[i] as spec.vec3));\n });\n }\n material.setInt('_MipCount', this.specularMipCount - 1);\n material.setTexture('_SpecularEnvSampler', this.specularImage);\n }\n\n /**\n * 设置对应的材质状态\n * @param material - 对应的 Core 层材质\n */\n override setMaterialStates (material: Material) {\n material.depthTest = true;\n material.depthMask = false;\n this.setFaceSideStates(material);\n }\n}\n\n/**\n * 图像缓冲区数据接口\n */\nexport interface PImageBufferData {\n /**\n * 类型,总是 buffer\n */\n type: 'buffer',\n /**\n * 数组\n */\n data: Uint8Array,\n /**\n * MIME 类型\n */\n mimeType: string,\n}\n\n/**\n * 图像数据类型,字符串(URL)或者图像缓冲区数据\n */\nexport type PImageData = string | PImageBufferData;\n\n/**\n * 天空盒基础参数接口\n */\nexport interface PSkyboxBaseParams {\n /**\n * 是否渲染\n */\n renderable: boolean,\n /**\n * 强度\n */\n intensity: number,\n /**\n * 反射强度\n */\n reflectionsIntensity: number,\n /**\n * 辐射照度系数\n */\n irradianceCoeffs?: number[],\n /**\n * 高光贴图 Mip 层数\n */\n specularMipCount: number,\n /**\n * 高光贴图大小\n */\n specularImageSize: number,\n}\n\n/**\n * 天空盒 URL 参数接口\n */\nexport interface PSkyboxURLParams extends PSkyboxBaseParams {\n /**\n * 类型,总是 url\n */\n type: 'url',\n /**\n * 漫反射贴图 URL 列表\n */\n diffuseImage?: string[],\n /**\n * 高光贴图 URL 二级列表\n */\n specularImage: string[][],\n}\n\n/**\n * 天空盒缓冲区参数接口\n */\nexport interface PSkyboxBufferParams extends PSkyboxBaseParams {\n /**\n * 类型,总是 buffer\n */\n type: 'buffer',\n /**\n * 漫反射贴图列表\n */\n diffuseImage?: PImageBufferData[],\n /**\n * 高光贴图二级列表\n */\n specularImage: PImageBufferData[][],\n}\n\n/**\n * 天空盒参数类型\n */\nexport type PSkyboxParams = PSkyboxURLParams | PSkyboxBufferParams;\n\nexport enum PSkyboxType {\n NFT = 0,\n FARM,\n}\n\n/**\n * 天空盒创建类\n */\nexport class PSkyboxCreator {\n /**\n * 获取 BRDF 查询纹理选项\n * @returns 纹理源选项\n */\n static async getBrdfLutTextureOptions (): Promise<TextureSourceOptions> {\n const brdfURL = 'https://gw.alipayobjects.com/zos/gltf-asset/61420044606400/lut-ggx.png';\n //const brdfURL = 'https://gw.alipayobjects.com/zos/gltf-asset/58540818729423/a4191420-a8cd-432c-8e36-9bd02a67ec85.png';\n const brdfLutImage = await loadImage(brdfURL);\n\n const brdfLutOpts: TextureSourceOptions = {\n name: 'brdfLut',\n wrapS: glContext.CLAMP_TO_EDGE,\n wrapT: glContext.CLAMP_TO_EDGE,\n magFilter: glContext.LINEAR,\n minFilter: glContext.LINEAR,\n anisotropic: 1,\n sourceType: TextureSourceType.image,\n image: brdfLutImage,\n generateMipmap: false,\n flipY: false,\n premultiplyAlpha: false,\n };\n\n return brdfLutOpts;\n }\n\n /**\n * 创建 BRDF 查询纹理\n * @param engine - 引擎\n * @returns 纹理\n */\n static async createBrdfLutTexture (engine: Engine): Promise<Texture> {\n const brdfLutOpts = await this.getBrdfLutTextureOptions();\n const brdfLutTexture = Texture.create(engine, brdfLutOpts);\n\n return brdfLutTexture;\n }\n\n /**\n * 创建天空盒选项\n * @param engine - 引擎\n * @param params - 天空盒参数\n * @returns 天空盒选项\n */\n static async createSkyboxOptions (engine: Engine, params: PSkyboxParams): Promise<ModelSkyboxOptions> {\n const specularImage = await this.createSpecularCubeMap(engine, params);\n const diffuseImage = await this.createDiffuseCubeMap(engine, params);\n const { renderable, intensity, reflectionsIntensity, irradianceCoeffs, specularImageSize, specularMipCount } = params;\n const skyboxOptions: ModelSkyboxOptions = {\n renderable,\n intensity,\n reflectionsIntensity,\n // @ts-expect-error\n irradianceCoeffs,\n diffuseImage,\n specularImage,\n specularImageSize,\n specularMipCount,\n };\n\n return skyboxOptions;\n }\n\n /**\n * 创建天空盒选项\n * @param engine - 引擎\n * @param params - 天空盒参数\n * @returns 天空盒选项\n */\n static createSkyboxComponentData (params: PSkyboxParams) {\n const specularCubeData = PSkyboxCreator.getSpecularCubeMapData(params);\n const diffuseCubeData = PSkyboxCreator.getDiffuseCubeMapData(params);\n const { renderable, intensity, reflectionsIntensity, irradianceCoeffs, specularImageSize, specularMipCount } = params;\n\n let diffuseImage: spec.DataPath;\n const imageList: spec.Image[] = [];\n const textureOptionsList: TextureSourceOptions[] = [];\n\n if (diffuseCubeData) {\n imageList.push(...diffuseCubeData.images);\n textureOptionsList.push(diffuseCubeData.textureOptions);\n diffuseImage = {\n id: diffuseCubeData.textureOptions.id!,\n };\n }\n imageList.push(...specularCubeData.images);\n textureOptionsList.push(specularCubeData.textureOptions);\n const specularImage = { id: specularCubeData.textureOptions.id };\n\n const componentData: ModelSkyboxComponentData = {\n id: generateGUID(),\n dataType: spec.DataType.SkyboxComponent,\n item: {\n id: generateGUID(),\n },\n renderable,\n intensity,\n reflectionsIntensity,\n irradianceCoeffs,\n // @ts-expect-error\n diffuseImage,\n // @ts-expect-error\n specularImage,\n specularImageSize,\n specularMipCount,\n };\n\n return {\n imageList,\n textureOptionsList,\n component: componentData,\n };\n }\n\n /**\n * 创建高光 Cube Map 纹理\n * @param engine - 引擎\n * @param params - 天空盒参数\n * @returns 纹理\n */\n static async createSpecularCubeMap (engine: Engine, params: PSkyboxParams): Promise<Texture> {\n // const configOptions: TextureConfigOptions = {\n // wrapS: glContext.CLAMP_TO_EDGE,\n // wrapT: glContext.CLAMP_TO_EDGE,\n // magFilter: glContext.LINEAR,\n // minFilter: glContext.LINEAR_MIPMAP_LINEAR,\n // };\n\n if (params.type === 'url') {\n return WebGLHelper.createTextureCubeMipmapFromURL(engine, params.specularImage);\n } else {\n return WebGLHelper.createTextureCubeMipmapFromBuffer(engine, params.specularImage, params.specularImageSize);\n }\n }\n\n static getSpecularCubeMapData (params: PSkyboxParams) {\n const imageDatas: spec.Image[] = [];\n const mipmaps: spec.DataPath[][] = [];\n\n params.specularImage.forEach(cubemap => {\n const mipmap: spec.DataPath[] = [];\n\n cubemap.forEach(image => {\n const imageId = generateGUID();\n\n imageDatas.push({\n id: imageId,\n // @ts-expect-error\n url: image,\n });\n mipmap.push({ id: imageId });\n });\n mipmaps.push(mipmap);\n });\n const textureOptions: TextureSourceOptions = {\n id: generateGUID(),\n dataType: spec.DataType.Texture,\n sourceType: TextureSourceType.mipmaps,\n target: glContext.TEXTURE_CUBE_MAP,\n // @ts-expect-error\n mipmaps,\n ...WebGLHelper.cubemapMipTexConfig,\n };\n\n return {\n images: imageDatas,\n textureOptions,\n };\n }\n\n /**\n * 创建漫反射纹理\n * @param engine - 引擎\n * @param params - 天空盒参数\n * @returns 纹理或未定义\n */\n static async createDiffuseCubeMap (engine: Engine, params: PSkyboxParams): Promise<Texture | null> {\n if (params.diffuseImage === undefined) { return null; }\n\n if (params.type === 'url') {\n return WebGLHelper.createTextureCubeFromURL(engine, params.diffuseImage);\n } else {\n return WebGLHelper.createTextureCubeFromBuffer(engine, params.diffuseImage);\n }\n }\n\n static getDiffuseCubeMapData (params: PSkyboxParams) {\n if (params.diffuseImage === undefined) {\n return;\n }\n\n const imageDatas: spec.Image[] = [];\n const cubemap: spec.DataPath[] = [];\n\n params.diffuseImage.forEach(image => {\n const imageId = generateGUID();\n\n imageDatas.push({\n id: imageId,\n // @ts-expect-error\n url: image,\n });\n cubemap.push({ id: imageId });\n });\n\n const textureOptions: TextureSourceOptions = {\n id: generateGUID(),\n dataType: spec.DataType.Texture,\n sourceType: TextureSourceType.mipmaps,\n target: glContext.TEXTURE_CUBE_MAP,\n // @ts-expect-error\n mipmaps: [cubemap],\n ...WebGLHelper.cubemapTexConfig,\n };\n\n return {\n images: imageDatas,\n textureOptions,\n };\n }\n\n /**\n * 创建天空盒参数\n * @param skyboxType - 天空盒类型\n * @returns 天空盒参数\n */\n static getSkyboxParams (skyboxType = PSkyboxType.NFT): PSkyboxURLParams {\n const specularImage = this.getSpecularImageList(skyboxType);\n const params: PSkyboxURLParams = {\n type: 'url',\n renderable: true,\n intensity: 1.8,\n reflectionsIntensity: 1.8,\n irradianceCoeffs: this.getIrradianceCoeffs(skyboxType),\n diffuseImage: this.getDiffuseImageList(skyboxType, specularImage),\n specularImage: specularImage,\n specularImageSize: Math.pow(2, specularImage.length - 1),\n specularMipCount: specularImage.length,\n };\n\n return params;\n }\n\n // TODO: 待移除?\n private async checkCubeMapImage (imageList: string[]) {\n let lastImage!: HTMLImageElement;\n const specularImageLists: HTMLImageElement[][] = [];\n\n for (let i = 0; i < imageList.length; i++) {\n const image = await loadImage(imageList[i]);\n\n if (i > 0) {\n if (i % 6 === 0) {\n if (image.width * 2 !== lastImage.width || image.height * 2 !== lastImage.height) {\n throw new Error(`Invalid cube map list1: index ${i}, image0 ${lastImage}, image1 ${image}.`);\n }\n } else {\n if (image.width !== lastImage.width || image.height !== lastImage.height) {\n throw new Error(`Invalid cube map list2: index ${i}, image0 ${lastImage}, image1 ${image}.`);\n }\n }\n }\n if (i % 6 === 0) { specularImageLists.push([]); }\n const lastList = specularImageLists[specularImageLists.length - 1];\n\n lastList.push(image);\n lastImage = image;\n }\n }\n\n private static getIrradianceCoeffs (skyboxType: PSkyboxType): number[] | undefined {\n let dataArray: number[] = [];\n\n switch (skyboxType) {\n case PSkyboxType.NFT: {\n return undefined;\n }\n case PSkyboxType.FARM: dataArray = [\n 0.2665672302246094, 0.27008703351020813, 0.2836797833442688, -0.15421263873577118, -0.15587495267391205,\n -0.16371899843215942, 0.06483837962150574, 0.06468029320240021, 0.06616337597370148, -0.11598809063434601,\n -0.11796595901250839, -0.1261979341506958, 0.023678265511989594, 0.02456280030310154, 0.02591511607170105,\n -0.032404184341430664, -0.03217344358563423, -0.03126845508813858, 0.009165619499981403, 0.009345818310976028,\n 0.008521141484379768, -0.021998587995767593, -0.02203795686364174, -0.021759089082479477, 0.00046658870996907353,\n 0.0005610908847302198, 0.0007202711421996355,\n ];\n\n break;\n default: dataArray = [\n 0.37462672591209412, 0.35230118036270142, 0.33955901861190796, 0.12082185596227646, 0.18179306387901306,\n 0.26912716031074524, -0.020699946209788322, -0.0046484274789690971, 0.00797625258564949, -0.068421706557273865,\n -0.051390238106250763, -0.03317255899310112, 0.044127799570560455, 0.028159862384200096, 0.0074287452735006809,\n 0.078870773315429688, 0.067734844982624054, 0.047382339835166931, -0.012322401627898216, -0.015187464654445648,\n -0.020201763138175011, -0.1091032400727272, -0.0823250338435173, -0.046844951808452606, -0.057797044515609741,\n -0.066892541944980621, -0.08212742954492569,\n ];\n\n break;\n }\n\n return dataArray;\n }\n\n private static getDiffuseImageList (skyboxType: PSkyboxType, images: string[][]): string[] | undefined {\n if (skyboxType == PSkyboxType.NFT) {\n return images[images.length - 1];\n }\n\n return undefined;\n }\n\n private static getSpecularImageList (skyboxType: PSkyboxType): string[][] {\n const imageList: string[] = [];\n\n switch (skyboxType) {\n case PSkyboxType.FARM: imageList.push(...this.getSpecularImageListAntFarm());\n\n break;\n default: imageList.push(...this.getSpecularImageListNFT());\n\n break;\n }\n\n const levelList: string[][] = [];\n\n imageList.forEach((v, i) => {\n if (i % 6 === 0) {\n levelList.push([]);\n }\n const currentLevel = levelList[levelList.length - 1];\n\n currentLevel.push(v);\n });\n\n return levelList;\n }\n\n private static getSpecularImageListNFT (): string[] {\n return [\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img0.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img1.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img2.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img3.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img5.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img4.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img6.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img7.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img8.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img9.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img11.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img10.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img12.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img13.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img14.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img15.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img17.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img16.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img18.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img19.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img20.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img21.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img23.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img22.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img24.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img25.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img26.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img27.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img29.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img28.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img30.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img31.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img32.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img33.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img35.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img34.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img36.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img37.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img38.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img39.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img41.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img40.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img42.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img43.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img44.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img45.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img47.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img46.png',\n ];\n }\n\n private static getSpecularImageListAntFarm (): string[] {\n return [\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_32_0.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_32_1.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_32_2.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_32_3.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_32_4.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_32_5.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_16_0.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_16_1.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_16_2.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_16_3.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_16_4.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_16_5.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_8_0.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_8_1.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_8_2.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_8_3.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_8_4.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_8_5.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_4_0.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_4_1.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_4_2.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_4_3.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_4_4.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_4_5.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_2_0.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_2_1.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_2_2.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_2_3.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_2_4.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_2_5.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_1_0.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_1_1.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_1_2.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_1_3.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_1_4.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_1_5.png',\n ];\n }\n}\n\n","import type { Mesh, Geometry, TextureSourceOptions, RenderPass, spec, Engine } from '@galacean/effects';\nimport { Texture } from '@galacean/effects';\nimport type { ModelSkyboxOptions } from '../index';\nimport type { FBOOptions } from '../utility/ri-helper';\nimport type { PMaterialBase } from './material';\nimport type { PSkyboxParams } from './skybox';\nimport { PSkyboxCreator } from './skybox';\nimport { WebGLHelper, MeshHelper, PluginHelper } from '../utility/plugin-helper';\n\n/**\n * 合成缓存类,负责管理插件 WebGL 相关资源加载和创建\n */\nexport class CompositionCache {\n // TODO: 待移除?\n private loadSkybox = false;\n // 天空盒依赖的贴图资源\n private brdfLutTexture?: Texture;\n //\n private meshCache: Map<string, Mesh>;\n private textureCache: Map<string, Texture>;\n private geometryCache: Map<string, Geometry>;\n private renderPassCache: Map<string, RenderPass>;\n //\n private static brdfLutTexOptions?: TextureSourceOptions;\n private static skyboxOptions?: ModelSkyboxOptions;\n\n /**\n * 加载静态的纹理数据\n * @returns\n */\n static async loadStaticResources () {\n if (this.brdfLutTexOptions !== undefined) {\n // 避免重复创建\n return;\n }\n\n this.brdfLutTexOptions = await PSkyboxCreator.getBrdfLutTextureOptions();\n }\n\n /**\n * 创建天空盒数据,如果传入的 params 为空,会使用内置的天空盒参数\n * @param engine - 引擎\n * @param params - 天空盒参数\n * @returns 天空盒数据\n */\n static async genSkyboxOptions (engine: Engine, params?: PSkyboxParams): Promise<ModelSkyboxOptions> {\n let newParams = params;\n\n if (newParams === undefined) {\n newParams = PSkyboxCreator.getSkyboxParams();\n }\n\n CompositionCache.skyboxOptions = await PSkyboxCreator.createSkyboxOptions(engine, newParams);\n\n return CompositionCache.skyboxOptions;\n }\n\n constructor (private engine: Engine) {\n this.meshCache = new Map();\n this.textureCache = new Map();\n this.geometryCache = new Map();\n this.renderPassCache = new Map();\n }\n\n /**\n * 记录是否加载天空盒,缓存天空盒相关的查询纹理\n * @param loadSkybox - 是否加载天空盒\n */\n setup (loadSkybox: boolean) {\n this.loadSkybox = loadSkybox;\n\n if (this.brdfLutTexture === undefined || this.brdfLutTexture.isDestroyed) {\n if (CompositionCache.brdfLutTexOptions === undefined) {\n throw new Error('Please load brdfLutTexOptions at first.');\n }\n //\n const brdfLutTextureName = 'brdfLutTexture';\n\n this.brdfLutTexture = Texture.create(this.engine, CompositionCache.brdfLutTexOptions);\n this.deleteTexture(brdfLutTextureName);\n this.setTexture(brdfLutTextureName, this.brdfLutTexture);\n }\n }\n\n /**\n * 获取缓存的纹理对象\n * @param name - 名称\n * @returns 纹理对象\n */\n getTexture (name: string): Texture | undefined {\n return this.textureCache.get(name);\n }\n\n /**\n * 设置纹理对象缓存\n * @param name - 名称\n * @param tex - 纹理对象\n */\n setTexture (name: string, tex: Texture) {\n this.textureCache.set(name, tex);\n }\n\n /**\n * 获取或者创建纹理对象\n * @param name - 名称\n * @param options - 纹理参数\n * @returns 纹理对象\n */\n getOrCreateTexture (name: string, options: TextureSourceOptions): Texture {\n const tex = this.textureCache.get(name);\n\n if (tex !== undefined) {\n return tex;\n }\n const newTex = Texture.create(this.engine, options);\n\n this.textureCache.set(name, newTex);\n\n return newTex;\n }\n\n /**\n * 根据名称删除纹理对象\n * @param name - 名称\n * @returns 是否删除成功\n */\n deleteTexture (name: string): boolean {\n const tex = this.textureCache.get(name);\n\n if (tex !== undefined) {\n tex.dispose();\n }\n\n return this.textureCache.delete(name);\n }\n\n /**\n * 获取或者创建几何体\n * @param name - 名称\n * @param geomJson - 几何体参数\n * @param bins - 几何体数据\n * @returns 几何体\n */\n getOrCreateGeometry (name: string, geomJson: spec.GeometryOptionsJSON, bins: ArrayBuffer[]): Geometry {\n const cachedGeom = this.geometryCache.get(name);\n\n if (cachedGeom !== undefined) {\n return cachedGeom;\n }\n\n const geom = PluginHelper.createGeometry(this.engine, geomJson, bins);\n\n this.geometryCache.set(name, geom);\n\n return geom;\n }\n\n /**\n * 获取滤波 Mesh\n * @param name - 名称\n * @param material - 材质\n * @returns\n */\n getFilterMesh (name: string, material: PMaterialBase): Mesh {\n const cachedMesh = this.meshCache.get(name);\n\n if (cachedMesh !== undefined) {\n return cachedMesh;\n }\n\n const mesh = MeshHelper.createFilterMesh(this.engine, name, material);\n\n this.meshCache.set(name, mesh);\n\n return mesh;\n }\n\n getShadowBasePass (name: string, priority: number, meshList: Mesh[], fboOptions: FBOOptions): RenderPass {\n return this.getRenderPass(name, priority, meshList, fboOptions);\n }\n\n getShadowFilterPass (name: string, priority: number, meshList: Mesh[], fboOptions: FBOOptions): RenderPass {\n return this.getRenderPass(name, priority, meshList, fboOptions);\n }\n\n /**\n * 获取渲染 Pass\n * @param name - 名称\n * @param priority - 优先级\n * @param meshList - Mesh 列表\n * @param fboOptions - FBO 参数\n * @returns\n */\n getRenderPass (name: string, priority: number, meshList: Mesh[], fboOptions: FBOOptions): RenderPass {\n const cachedPass = this.renderPassCache.get(name);\n\n if (cachedPass !== undefined) {\n cachedPass.setMeshes([]);\n meshList.forEach(mesh => { cachedPass.addMesh(mesh); });\n\n return cachedPass;\n } else {\n const renderer = this.engine.renderer;\n const renderPass = WebGLHelper.createRenderPass(renderer, name, priority, meshList, fboOptions);\n\n this.renderPassCache.set(name, renderPass);\n\n return renderPass;\n }\n }\n\n /**\n * 销毁缓存,释放所有缓存的对象\n */\n dispose () {\n // @ts-expect-error\n this.engine = null;\n this.brdfLutTexture = undefined;\n this.meshCache.forEach(mesh => {\n WebGLHelper.deleteMesh(mesh);\n });\n this.meshCache.clear();\n //\n this.textureCache.forEach(texture => {\n WebGLHelper.deleteTexture(texture);\n });\n this.textureCache.clear();\n //\n this.geometryCache.forEach(geometry => {\n WebGLHelper.deleteGeometry(geometry);\n });\n this.geometryCache.clear();\n //\n this.renderPassCache.forEach(pass => {\n WebGLHelper.deleteRenderPass(pass);\n });\n this.renderPassCache.clear();\n }\n\n /**\n * 获取所有的渲染 Pass\n * @returns\n */\n getRenderPasses (): RenderPass[] {\n const resList: RenderPass[] = [];\n\n this.renderPassCache.forEach(pass => {\n resList.push(pass);\n });\n\n return resList;\n }\n\n /**\n * 获取纹理对象,用户 IBL 渲染\n * @returns\n */\n getBrdfLutTexture (): Texture | undefined {\n return this.brdfLutTexture;\n }\n\n /**\n * 获取天空盒参数\n * @returns\n */\n getSkyboxOptions (): ModelSkyboxOptions | undefined {\n return CompositionCache.skyboxOptions;\n }\n}\n\n","import type { GeometryProps, Engine } from '@galacean/effects';\nimport { glContext, Geometry, Material, Mesh, RenderPassAttachmentStorageType } from '@galacean/effects';\nimport type { Matrix4 } from '../runtime/math';\nimport { Vector2, Vector3 } from '../runtime/math';\n\n/**\n * FBO 选项类,负责构造 FBO 创建时的选项信息\n */\nexport class FBOOptions {\n /**\n * 分辨率\n */\n resolution: Vector2;\n /**\n * 颜色附件列表\n */\n colorAttachments: object[];\n /**\n * 深度附件\n */\n depthAttachment?: any;\n\n /**\n * 构造函数\n * @param options - FBO 参数\n */\n constructor (options: Record<string, any>) {\n this.resolution = options.resolution ?? new Vector2(512, 512);\n this.colorAttachments = options.colorAttachments ?? [];\n this.depthAttachment = options.depthAttachment;\n }\n\n /**\n * 添加深度附件\n * @param options - 深度附件参数\n */\n addDepthAttachment (options: Record<string, any>) {\n this.depthAttachment = {\n storageType: options.storageType ?? RenderPassAttachmentStorageType.depth_16_texture,\n };\n }\n\n /**\n * 添加默认深度附件,数据格式是 depth_16_texture\n */\n addDefaultDepthAttachment () {\n this.depthAttachment = { storageType: RenderPassAttachmentStorageType.depth_16_texture };\n }\n\n /**\n * 删除深度附件\n */\n deleteDepthAttachment () {\n this.depthAttachment = undefined;\n }\n\n /**\n * 添加颜色附件\n * @param options - 颜色附件参数\n */\n addColorAttachment (options: Record<string, any>) {\n this.colorAttachments.push({\n texture: {\n format: options.format ?? glContext.RGBA,\n type: options.type ?? glContext.HALF_FLOAT,\n minFilter: options.filter ?? glContext.LINEAR,\n magFilter: options.filter ?? glContext.LINEAR,\n },\n });\n }\n\n /**\n * 删除颜色附件,按照索引值\n * @param target - 颜色附件索引值\n */\n deleteColorAttachment (target: number) {\n if (target >= 0 && target < this.colorAttachments.length) {\n this.colorAttachments.splice(target, 1);\n }\n }\n\n /**\n * 获取视口大小\n */\n get viewport (): [number, number, number, number] {\n return [0, 0, this.resolution.x, this.resolution.y];\n }\n}\n\n/**\n * 包围盒 Mesh 类,负责 3D Mesh 测试包围盒的显示\n */\nexport class BoxMesh {\n /**\n * core 层 Mesh 对象\n */\n mesh: Mesh;\n\n /**\n * 构造函数,创建基础 Mesh 对象\n * @param engine - 引擎\n * @param priority - 优先级\n */\n constructor (engine: Engine, priority: number) {\n const material = Material.create(\n engine,\n {\n shader: {\n vertex: this.vertexShader,\n fragment: this.fragmentShader,\n shared: true,\n },\n }\n );\n\n material.depthTest = true;\n material.depthMask = true;\n this.mesh = Mesh.create(\n engine,\n {\n name: 'boxMesh',\n material,\n geometry: Geometry.create(engine, this.geometry),\n priority,\n }\n );\n }\n\n /**\n * 更新包围盒着色器 Uniform 数据\n * @param modelMatrix - 模型矩阵\n * @param viewProjMatrix - 相机投影矩阵\n * @param positions - 位置数组\n * @param lineColor - 线颜色\n */\n update (modelMatrix: Matrix4, viewProjMatrix: Matrix4, positions: Float32Array, lineColor: Vector3) {\n const material = this.mesh.material;\n\n material.setMatrix('effects_ObjectToWorld', modelMatrix);\n material.setMatrix('effects_MatrixVP', viewProjMatrix);\n for (let i = 0; i < positions.length; i += 3) {\n material.setVector3(`_PositionList[${i / 3}]`, Vector3.fromArray(positions, i));\n }\n material.setVector3('_LineColor', lineColor);\n }\n\n /**\n * 销毁,需要销毁 Mesh 对象\n */\n dispose () {\n this.mesh.dispose();\n // @ts-expect-error\n this.mesh = undefined;\n }\n\n /**\n * 获取顶点着色器代码\n */\n get vertexShader (): string {\n return `\n precision highp float;\n\n uniform mat4 effects_ObjectToWorld;\n uniform mat4 effects_MatrixVP;\n uniform vec3 _PositionList[8];\n attribute vec3 aPos;\n void main(){\n int index = int(aPos.x + 0.5);\n vec4 pos = effects_ObjectToWorld * vec4(_PositionList[index], 1);\n gl_Position = effects_MatrixVP * pos;\n }\n `;\n }\n\n /**\n * 获取片段着色器代码\n */\n get fragmentShader (): string {\n return `\n precision highp float;\n\n uniform vec3 _LineColor;\n void main(){\n gl_FragColor = vec4(_LineColor, 1);\n }\n `;\n }\n\n /**\n * 获取基础几何体\n */\n get geometry (): GeometryProps {\n const data = new Float32Array([0, 1, 2, 3, 4, 5, 6, 7]);\n const index = new Uint32Array([\n 0, 1, 1, 2, 2, 3, 3, 0,\n 4, 5, 5, 6, 6, 7, 7, 4,\n 0, 4, 1, 5, 2, 6, 3, 7,\n ]);\n\n return {\n attributes: {\n aPos: {\n type: glContext.FLOAT,\n size: 1,\n data,\n stride: Float32Array.BYTES_PER_ELEMENT,\n offset: 0,\n },\n },\n mode: glContext.LINES,\n indices: { data: index },\n drawStart: 0,\n drawCount: 24,\n };\n }\n}\n","/**\n * 双状态 Set,用于保存前一帧和当前帧的信息\n */\nexport class TwoStatesSet<T> {\n /**\n * 当前帧 Set\n */\n now: Set<T>;\n /**\n * 前一帧 Set\n */\n last: Set<T>;\n\n constructor () {\n this.now = new Set();\n this.last = new Set();\n }\n\n /**\n * 清空 last 和 now\n */\n clear () {\n this.now.clear();\n this.last.clear();\n }\n\n /**\n * 状态前进,当前变成 last,now 被清空\n */\n forward () {\n const temp = this.last;\n\n this.last = this.now;\n this.now = temp;\n this.now.clear();\n }\n\n /**\n * 遍历当前帧新加的元素\n *\n * @param callbackfn - 增加新元素的回调\n */\n forAddedItem (callbackfn: (value: T) => void) {\n this.now.forEach(item => {\n if (!this.last.has(item)) {\n callbackfn(item);\n }\n });\n }\n\n /**\n * 遍历当前帧删除的元素\n *\n * @param callbackfn - 删除旧元素的回调\n */\n forRemovedItem (callbackfn: (value: T) => void) {\n this.last.forEach(item => {\n if (!this.now.has(item)) {\n callbackfn(item);\n }\n });\n }\n\n /**\n * 遍历当前帧所有的元素\n *\n * @param callbackfn - 当前帧元素的回调\n */\n forNowItem (callbackfn: (value: T) => void) {\n this.now.forEach(item => {\n callbackfn(item);\n });\n }\n\n}\n","import type {\n Scene,\n SceneLoadOptions,\n Composition,\n RenderFrame,\n VFXItemProps,\n Engine,\n Component,\n Renderer,\n} from '@galacean/effects';\nimport {\n VFXItem,\n AbstractPlugin,\n spec,\n Behaviour,\n PLAYER_OPTIONS_ENV_EDITOR,\n effectsClass,\n GLSLVersion,\n Geometry,\n} from '@galacean/effects';\nimport { CompositionCache } from '../runtime/cache';\nimport { PluginHelper } from '../utility/plugin-helper';\nimport { PTransform, PSceneManager, PCoordinate, PBRShaderGUID, UnlitShaderGUID } from '../runtime';\nimport { DEG2RAD, Matrix4, Vector3 } from '../runtime/math';\nimport { VFX_ITEM_TYPE_3D } from './const';\nimport { ModelCameraComponent, ModelLightComponent, ModelMeshComponent } from './model-item';\nimport { fetchPBRShaderCode, fetchUnlitShaderCode } from '../utility';\n\n/**\n * Model 插件类,负责支持播放器中的 3D 功能\n */\nexport class ModelPlugin extends AbstractPlugin {\n /**\n * 插件名称\n */\n override name = 'model';\n /**\n * 合成缓存器\n */\n cache: CompositionCache;\n /**\n * 场景参数\n */\n sceneParams: Record<string, any>;\n\n /**\n * 整个 load 阶段都不会创建 GL 相关的对象,只创建 JS 对象\n * @param scene - 场景\n * @param options - 加载选项\n */\n static override async prepareResource (scene: Scene, options: SceneLoadOptions): Promise<void> {\n if (options.pluginData !== undefined) {\n const keyList = [\n 'compatibleMode',\n 'renderSkybox',\n 'visBoundingBox',\n 'autoAdjustScene',\n 'enableDynamicSort',\n 'renderMode3D',\n 'renderMode3DUVGridSize',\n ];\n const pluginData = options.pluginData;\n\n keyList.forEach(key => scene.storage[key] = pluginData[key]);\n }\n //\n const runtimeEnv = options.env ?? '';\n\n scene.storage['runtimeEnv'] = runtimeEnv;\n const compatibleMode = options.pluginData?.['compatibleMode'] ?? 'gltf';\n\n //\n PluginHelper.preprocessScene(scene, runtimeEnv, compatibleMode);\n await CompositionCache.loadStaticResources();\n }\n\n static override precompile (compositions: spec.Composition[], renderer: Renderer): Promise<void> {\n const isWebGL2 = renderer.engine.gpuCapability.level === 2;\n const pbrShaderCode = fetchPBRShaderCode();\n const unlitShaderCode = fetchUnlitShaderCode();\n const pbrShaderData: spec.ShaderData = {\n id: PBRShaderGUID,\n name: 'PBR Shader',\n dataType: spec.DataType.Shader,\n fragment: pbrShaderCode.fragmentShaderCode,\n vertex: pbrShaderCode.vertexShaderCode,\n // @ts-expect-error\n glslVersion: isWebGL2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n };\n const unlitShaderData: spec.ShaderData = {\n id: UnlitShaderGUID,\n name: 'Unlit Shader',\n dataType: spec.DataType.Shader,\n fragment: unlitShaderCode.fragmentShaderCode,\n vertex: unlitShaderCode.vertexShaderCode,\n // @ts-expect-error\n glslVersion: isWebGL2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n };\n\n renderer.engine.addEffectsObjectData(pbrShaderData);\n renderer.engine.addEffectsObjectData(unlitShaderData);\n\n return Promise.resolve();\n }\n\n /**\n * 创建 3D 场景管理器和缓存器\n * @param composition - 合成\n * @param scene - 场景\n */\n override onCompositionConstructed (composition: Composition, scene: Scene): void {\n this.sceneParams = scene.storage;\n\n const engine = composition.renderer.engine;\n\n this.cache = new CompositionCache(engine);\n this.cache.setup(false);\n // FIXME: 先注释元素参数的配置\n //PluginHelper.setupItem3DOptions(scene, this.cache, composition);\n }\n\n /**\n * 每次播放都会执行,包括重播,所以这里执行“小的销毁”和新的初始化\n * @param composition - 合成\n * @param renderFrame - 渲染帧\n */\n override onCompositionReset (composition: Composition, renderFrame: RenderFrame) {\n const props = {\n id: 'ModelPluginItem',\n name: 'ModelPluginItem',\n duration: 9999999,\n endBehavior: spec.END_BEHAVIOR_FORWARD,\n } as unknown as VFXItemProps;\n const item = new VFXItem(composition.getEngine(), props);\n\n composition.addItem(item);\n //\n const comp = item.addComponent(ModelPluginComponent);\n\n comp.fromData({ cache: this.cache });\n comp.initial(this.sceneParams);\n }\n\n /**\n * 合成销毁,同时销毁 3D 场景对象和缓存\n * @param composition - 合成\n */\n override onCompositionDestroyed (composition: Composition) {\n this.cache.dispose();\n // @ts-expect-error\n this.cache = null;\n // @ts-expect-error\n this.sceneParams = null;\n }\n}\n\nexport interface ModelPluginOptions {\n cache: CompositionCache,\n}\n\n/**\n * 插件组件类,实现特定的插件功能\n * @since 2.0.0\n * @internal\n */\n@effectsClass(spec.DataType.ModelPluginComponent)\nexport class ModelPluginComponent extends Behaviour {\n private runtimeEnv = PLAYER_OPTIONS_ENV_EDITOR;\n private compatibleMode = 'gltf';\n private renderSkybox = true;\n private visBoundingBox = false;\n private autoAdjustScene = false;\n /**\n * 渲染插件是否启用动态排序功能\n * 支持在渲染的时候对透明 Mesh 进行动态排序\n */\n private enableDynamicSort = false;\n /**\n * 3D 渲染模式,支持可视化渲染中间结果\n * none 表示正常的渲染结果\n */\n private renderMode3D = spec.RenderMode3D.none;\n /**\n * UV 渲染模式中,指定棋盘格的大小,相对于大小为 1 的纹理\n * 取值范围(0, 1)\n */\n private renderMode3DUVGridSize = 1 / 16;\n /**\n * 合成缓存器\n */\n cache: CompositionCache;\n /**\n * 场景管理器\n */\n scene: PSceneManager;\n\n /**\n * 构造函数,创建场景管理器\n * @param engine - 引擎\n * @param options - Mesh 参数\n */\n constructor (engine: Engine, options?: ModelPluginOptions) {\n super(engine);\n if (options) {\n this.fromData(options);\n }\n }\n\n /**\n * 组件后更新,合成相机和场景管理器更新\n * @param dt - 更新间隔\n */\n override lateUpdate (dt: number): void {\n const composition = this.item.composition as Composition;\n\n if (this.autoAdjustScene && this.scene.tickCount == 1) {\n // 自动计算场景中的相机位置\n // 更加相机的具体参数,计算出合适的相机观察位置\n // 但只会在第一帧进行更新,主要是用于测试使用\n const cameraObject = composition.camera;\n const cameraTransform = new PTransform().fromMatrix4(cameraObject.getViewMatrix());\n const cameraCoordinate = new PCoordinate().fromPTransform(cameraTransform);\n const cameraDirection = cameraCoordinate.zAxis.clone();\n const cameraFov = cameraObject.fov ?? 45;\n const cameraAspect = cameraObject.aspect ?? 1.0;\n //\n const sceneAABB = this.scene.getSceneAABB();\n const newAABB = sceneAABB.clone().applyMatrix4(cameraTransform.getMatrix());\n const newSize = newAABB.getSize(new Vector3()).multiply(0.5);\n const newWidth = newSize.x;\n const newHeight = newSize.y;\n const finalHeight = newHeight * Math.max(newWidth / newHeight / cameraAspect, 1.0);\n const center = sceneAABB.getCenter(new Vector3());\n const offset = finalHeight / Math.tan(cameraFov * 0.5 * DEG2RAD);\n const position = center.clone().add(cameraDirection.clone().multiply(offset + newSize.z));\n\n // 更新相机的位置,主要是composition的camera数据,以及camera item数据\n composition.camera.position = position;\n composition.items?.forEach(item => {\n if (item.type === VFX_ITEM_TYPE_3D) {\n const component = item.getComponent(ModelCameraComponent);\n\n if (component?.content) {\n const worldMatrix = item.transform.parentTransform?.getWorldMatrix() || Matrix4.IDENTITY.clone();\n const invWorldMatrix = worldMatrix.invert();\n const newPosition = invWorldMatrix.transformPoint(position);\n\n component.setTransform(newPosition);\n\n // 正式版本不会走到这个流程,只在测试时使用\n console.info(`Scene AABB [${sceneAABB.min.toArray()}], [${sceneAABB.max.toArray()}].`);\n console.info(`Update camera position [${newPosition.toArray()}].`);\n }\n }\n });\n }\n\n this.updateSceneCamera(composition);\n this.scene.tick(dt);\n }\n\n /**\n * 组件销毁,同时销毁场景管理器和缓存器\n */\n override onDestroy (): void {\n this.scene.dispose();\n // @ts-expect-error\n this.scene = null;\n // @ts-expect-error\n this.cache = null;\n }\n\n /**\n * 反序列化,创建场景管理器\n * @param date - 组件参数\n */\n override fromData (data: ModelPluginOptions): void {\n super.fromData(data);\n //\n const options = data;\n\n this.cache = options.cache;\n this.scene = new PSceneManager(this.engine);\n }\n\n /**\n * 组件初始化,初始化场景管理器并更新合成相机\n * @param sceneParams - 场景参数\n */\n initial (sceneParams: Record<string, any>) {\n this.runtimeEnv = sceneParams['runtimeEnv'] ?? this.runtimeEnv;\n this.compatibleMode = sceneParams['compatibleMode'] ?? this.compatibleMode;\n this.renderSkybox = sceneParams['renderSkybox'] ?? this.renderSkybox;\n this.visBoundingBox = sceneParams['visBoundingBox'] ?? this.visBoundingBox;\n this.autoAdjustScene = sceneParams['autoAdjustScene'] ?? this.autoAdjustScene;\n this.enableDynamicSort = sceneParams['enableDynamicSort'] ?? this.enableDynamicSort;\n this.renderMode3D = sceneParams['renderMode3D'] ?? this.renderMode3D;\n this.renderMode3DUVGridSize = sceneParams['renderMode3DUVGridSize'] ?? this.renderMode3DUVGridSize;\n\n const component = this.item.composition as Composition;\n\n this.scene.initial({\n componentName: `${component.id}`,\n renderer: this.engine.renderer,\n sceneCache: this.cache,\n runtimeEnv: this.runtimeEnv,\n compatibleMode: this.compatibleMode,\n visBoundingBox: this.visBoundingBox,\n enableDynamicSort: this.enableDynamicSort,\n renderMode3D: this.renderMode3D,\n renderMode3DUVGridSize: this.renderMode3DUVGridSize,\n renderSkybox: this.renderSkybox,\n lightItemCount: this.getLightItemCount(),\n maxJointCount: this.getMaxJointCount(),\n });\n this.updateSceneCamera(component);\n }\n\n /**\n * 更新 SceneManager 中渲染用的相机,相机参数来自 composition.camera\n *\n * @param composition - 当前合成对象\n * @param sceneManager - 当前合成对象绑定的 SceneManager\n */\n private updateSceneCamera (composition: Composition) {\n this.scene.updateDefaultCamera(composition.camera.getOptions(), composition.camera.getViewportMatrix());\n }\n\n private getLightItemCount (): number {\n let lightItemCount = 0;\n const items = this.item.composition?.items ?? [];\n\n items.forEach(item => {\n if (item.getComponent(ModelLightComponent)) {\n lightItemCount++;\n }\n });\n\n return lightItemCount;\n }\n\n private getMaxJointCount (): number {\n let maxJointCount = 0;\n const items = this.item.composition?.items ?? [];\n\n items.forEach(item => {\n const meshComp = item.getComponent(ModelMeshComponent);\n\n if (meshComp && meshComp.data) {\n const geometry = meshComp.data.geometry;\n\n if (geometry instanceof Geometry) {\n const skin = geometry.getSkinProps();\n\n if (skin.boneNames) {\n maxJointCount = Math.max(skin.boneNames.length, maxJointCount);\n }\n }\n }\n });\n\n return maxJointCount;\n }\n}\n\n/**\n * 获取场景管理器,从合成中查找\n * @param component\n * @returns\n */\nexport function getSceneManager (component?: Component): PSceneManager | undefined {\n const composition = component?.item?.composition;\n const pluginItem = composition?.getItemByName('ModelPluginItem');\n const pluginComp = pluginItem?.getComponent(ModelPluginComponent);\n\n return pluginComp?.scene;\n}\n","import type { Engine, VFXItem } from '@galacean/effects';\nimport { Behaviour, Transform, effectsClass, spec } from '@galacean/effects';\nimport type { ModelTreeContent, ModelTreeOptions } from '../index';\nimport { PAnimationManager } from '../runtime';\nimport { getSceneManager } from './model-plugin';\n\n/**\n * 场景树节点描述\n */\nexport interface ModelTreeNode {\n /**\n * 名称\n */\n name?: string,\n /**\n * 变换\n */\n transform: Transform,\n /**\n * 子节点\n */\n children: ModelTreeNode[],\n /**\n * 索引\n */\n id: string,\n /**\n * 场景树元素\n */\n tree: ModelTreeItem,\n}\n\n/**\n * 场景树元素类,支持插件中节点树相关的动画能力\n */\nexport class ModelTreeItem {\n private allNodes: ModelTreeNode[];\n private nodes: ModelTreeNode[];\n private cacheMap: Record<string, ModelTreeNode>;\n /**\n * 基础变换\n */\n readonly baseTransform: Transform;\n /**\n * 动画管理器\n */\n animationManager: PAnimationManager;\n\n /**\n * 构造函数,创建场景树结构\n * @param props - 场景树数据\n * @param owner - 场景树元素\n */\n constructor (props: ModelTreeOptions, owner: VFXItem) {\n this.baseTransform = owner.transform;\n this.animationManager = new PAnimationManager(props, owner);\n this.build(props);\n }\n\n /**\n * 场景树更新,主要是动画更新\n * @param dt - 时间间隔\n */\n tick (dt: number) {\n this.animationManager.tick(dt);\n }\n\n /**\n * 获取所有节点\n * @returns\n */\n getNodes () {\n return this.nodes;\n }\n\n /**\n * 根据节点编号,查询节点\n * @param nodeId - 节点编号\n * @returns\n */\n getNodeById (nodeId: string | number): ModelTreeNode | undefined {\n const cache = this.cacheMap;\n\n if (!cache[nodeId]) {\n const index = `^${nodeId}`;\n\n // @ts-expect-error\n cache[nodeId] = this.allNodes.find(node => node.id === index);\n }\n\n return cache[nodeId];\n }\n\n /**\n * 根据节点名称,查询节点\n * @param name - 名称\n * @returns\n */\n getNodeByName (name: string): ModelTreeNode | undefined {\n const cache = this.cacheMap;\n\n if (!cache[name]) {\n // @ts-expect-error\n cache[name] = this.allNodes.find(node => node.name === name);\n }\n\n return cache[name];\n }\n\n /**\n * 根据节点 id 查询节点变换,如果查询不到节点就直接返回基础变换\n * @param nodeId - 节点 id\n * @returns\n */\n getNodeTransform (nodeId: string): Transform {\n const node = this.getNodeById(nodeId);\n\n return node ? node.transform : this.baseTransform;\n }\n\n /**\n * 销毁场景树对象\n */\n dispose () {\n this.allNodes = [];\n this.nodes = [];\n this.cacheMap = {};\n // @ts-expect-error\n this.baseTransform = null;\n this.animationManager?.dispose();\n // @ts-expect-error\n this.animationManager = null;\n }\n\n private build (options: ModelTreeOptions) {\n const topTransform = this.baseTransform;\n const nodes: ModelTreeNode[] = options.nodes.map((node, i) => ({\n name: node.name || node.id || (i + ''),\n transform: new Transform({\n ...node.transform,\n valid: true,\n }, topTransform),\n id: `^${node.id || i}`,\n children: [],\n tree: this,\n }));\n\n this.cacheMap = {};\n nodes.forEach((node, i) => {\n const children = options.nodes[i].children;\n\n // @ts-expect-error\n node.transform.name = node.name;\n node.transform.setValid(true);\n if (children) {\n children.forEach(function (index) {\n const child = nodes[index];\n\n if (child && child !== node) {\n if (child.transform.parentTransform !== topTransform) {\n console.error('Node parent has been set.');\n }\n child.transform.parentTransform = node.transform;\n node.children.push(child);\n }\n });\n }\n });\n this.allNodes = nodes;\n this.nodes = options.children.map(i => nodes[i]);\n }\n}\n\n/**\n * 插件场景树组件类,实现 3D 场景树功能\n * @since 2.0.0\n * @internal\n */\n@effectsClass(spec.DataType.TreeComponent)\nexport class ModelTreeComponent extends Behaviour {\n /**\n * 内部节点树元素\n */\n content: ModelTreeItem;\n /**\n * 参数\n */\n options?: ModelTreeContent;\n\n /**\n * 构造函数,创建节点树元素\n * @param engine\n * @param options\n */\n constructor (engine: Engine, options?: ModelTreeContent) {\n super(engine);\n if (options) {\n this.fromData(options);\n }\n }\n\n /**\n * 反序列化,保存入参和创建节点树元素\n * @param options\n */\n override fromData (options: ModelTreeContent): void {\n super.fromData(options);\n this.options = options;\n this.createContent();\n }\n\n /**\n * 组件开始,查询合成中场景管理器并设置到动画管理器中\n */\n override start () {\n this.item.type = spec.ItemType.tree;\n this.content.baseTransform.setValid(true);\n const sceneManager = getSceneManager(this);\n\n if (sceneManager) {\n this.content.animationManager.setSceneManager(sceneManager);\n }\n }\n\n /**\n * 组件更新,内部对象更新\n * @param dt\n */\n override update (dt: number): void {\n // this.timeline?.getRenderData(time, true);\n // TODO: 需要使用lifetime\n this.content?.tick(dt);\n }\n\n /**\n * 组件销毁,内部对象销毁\n */\n override onDestroy (): void {\n this.content?.dispose();\n }\n\n /**\n * 创建内部场景树元素\n */\n createContent () {\n if (this.options) {\n const treeOptions = this.options.options.tree;\n\n this.content = new ModelTreeItem(treeOptions, this.item);\n }\n }\n\n /**\n * 获取元素的变换\n * @param itemId - 元素索引\n * @returns\n */\n getNodeTransform (itemId: string): Transform {\n if (this.content === undefined) {\n return this.transform;\n }\n\n const idWithSubfix = this.item.id + '^';\n\n if (itemId.indexOf(idWithSubfix) === 0) {\n const nodeId = itemId.substring(idWithSubfix.length);\n\n return this.content.getNodeTransform(nodeId);\n } else {\n return this.transform;\n }\n }\n}\n","import { AbstractPlugin } from '@galacean/effects';\n\n/**\n * 场景树插件类,支持 3D 相关的节点动画和骨骼动画等\n */\nexport class ModelTreePlugin extends AbstractPlugin {\n /**\n * 插件名称\n */\n override name = 'tree';\n /**\n * 高优先级更新\n */\n override order = 2;\n}\n\n","import type { CameraOptionsEx, spec } from '@galacean/effects';\n\nexport interface CameraGestureHandler {\n\n getCurrentTarget (): string,\n\n getCurrentType (): CameraGestureType,\n\n /**\n * 通过按键事件对相机进行平移\n * @param event - 键盘事件信息\n * @returns 当前的相机参数\n */\n onKeyEvent (event: CameraKeyEvent): CameraOptionsEx,\n\n /**\n * 在 XY 方向上平移相机开始函数,在鼠标按下时调用\n * @param x - 鼠标在 x 坐标上的值\n * @param y - 鼠标在 y 坐标上的值\n * @param width - 当前画布的宽度\n * @param height - 当前画布的高度\n * @param cameraID - 要控制的相机 item id\n * @returns 当前的相机参数\n */\n onXYMoveBegin (x: number, y: number, width: number, height: number, cameraID: string): CameraOptionsEx,\n\n /**\n * 在 XY 方向上平移相机开始函数,在鼠标按下拖拽时调用\n * @param x - 鼠标在 x 坐标上的值\n * @param y - 鼠标在 y 坐标上的值\n * @param speed - 移动速度,默认是 0.015\n * @returns 更新后的相机参数\n */\n onXYMoving (x: number, y: number, speed?: number): CameraOptionsEx,\n\n /**\n * 结束在 XY 方向上平移相机\n */\n onXYMoveEnd (): void,\n\n /**\n * 在 Z 方向上平移相机开始函数,类似缩放 3D 模型,在鼠标按下时调用\n * @param x - 鼠标在 x 坐标上的值\n * @param y - 鼠标在 y 坐标上的值\n * @param width - 当前画布的宽度\n * @param height - 当前画布的高度\n * @param cameraID - 要控制的相机 item id\n * @returns 当前的相机参数\n */\n onZMoveBegin (x: number, y: number, width: number, height: number, cameraID: string): CameraOptionsEx,\n\n /**\n * 在 Z 方向上平移相机开始函数,类似缩放 3D 模型,在鼠标按下拖拽时调用\n * @param x - 鼠标在 x 坐标上的值\n * @param y - 鼠标在 y 坐标上的值\n * @param speed - 移动速度,默认是 0.015\n * @returns 更新后的相机参数\n */\n onZMoving (x: number, y: number, speed?: number): CameraOptionsEx,\n\n /**\n * 结束在 Z 方向上平移相机\n */\n onZMoveEnd (): void,\n\n /**\n * 相机的自旋转,就是镜头漫游的效果,在鼠标按下时调用\n * @param x - 鼠标在 x 坐标上的值\n * @param y - 鼠标在 y 坐标上的值\n * @param width - 当前画布的宽度\n * @param height - 当前画布的高度\n * @param cameraID - 要控制的相机 item id\n * @returns 当前的相机参数\n */\n onRotateBegin (x: number, y: number, width: number, height: number, cameraID: string): CameraOptionsEx,\n\n /**\n * 相机的自旋转,在鼠标按下拖拽时调用\n * @param x - 鼠标在 x坐标上的值\n * @param y - 鼠标在y坐标上的值\n * @param speed - 移动速度,默认是 1\n * @returns 更新后的相机参数\n */\n onRotating (x: number, y: number, speed?: number): CameraOptionsEx,\n\n /**\n * 相机的自旋转\n */\n onRotateEnd (): void,\n\n /**\n * 相机绕某个点旋转,就是拖拽模型的效果,在鼠标按下时调用\n * @param x - 鼠标在 x 坐标上的值\n * @param y - 鼠标在 y 坐标上的值\n * @param width - 当前画布的宽度\n * @param height - 当前画布的高度\n * @param cameraID - 要控制的相机 item id\n * @returns 当前的相机参数\n */\n onRotatePointBegin (x: number, y: number, width: number, height: number, point: spec.vec3, cameraID: string): CameraOptionsEx,\n\n /**\n * 相机绕某个点旋转,在鼠标按下拖拽时调用\n * @param x - 鼠标在 x 坐标上的值\n * @param y - 鼠标在 y 坐标上的值\n * @param speed - 移动速度,默认是 1\n * @returns 更新后的相机参数\n */\n onRotatingPoint (x: number, y: number, speed?: number): CameraOptionsEx,\n\n /**\n * 相机绕某个点旋转\n */\n onRotatePointEnd (): void,\n\n /**\n * 相机移动到指定点\n * @param cameraID -相机 ID\n * @param position - 指定位置\n */\n moveTo (cameraID: string, position: spec.vec3): void,\n\n /**\n * 相机旋转到指定方向\n * @param cameraID - 相机ID\n * @param quat - 指定旋转\n */\n rotateTo (cameraID: string, quat: spec.vec4): void,\n\n /**\n * 相机对中心点进行聚焦,先从当前位置 LookAt 过去,然后移到距离中心点给定距离(默认是 5)的位置\n * @param cameraID - 相机 ID\n * @param point - 聚焦的中心点\n * @param distance - 聚焦的距离,默认是 5\n */\n onFocusPoint (cameraID: string, point: spec.vec3, distance?: number): void,\n\n}\n\nexport enum CameraGestureType {\n none,\n translate = 1,\n rotate_focus = 2,\n rotate_self = 3,\n scale = 4\n}\n\nexport interface CameraGestureHandlerParams {\n type: CameraGestureType,\n\n mouseEvent: boolean,\n\n // mouse position\n clientX: number,\n clientY: number,\n\n // canvas size\n clientWidth: number,\n clientHeight: number,\n\n //camera item id\n target: string,\n\n //rotate_focus point\n focusPoint?: spec.vec3,\n\n speed?: number, // default = 0.015\n}\n\nexport interface CameraKeyEvent {\n cameraID: string,\n xAxis?: -1 | 1,\n yAxis?: -1 | 1,\n zAxis?: -1 | 1,\n speed?: number,\n}\n","import type { Composition, CameraOptionsEx, spec, VFXItem } from '@galacean/effects';\nimport { Transform } from '@galacean/effects';\nimport type {\n CameraGestureHandler,\n CameraKeyEvent,\n CameraGestureHandlerParams,\n} from './protocol';\nimport { CameraGestureType } from './protocol';\nimport { PCoordinate, PTransform } from '../runtime/common';\nimport type { Euler } from '../runtime/math';\nimport { Quaternion, Vector3, Matrix4 } from '../runtime/math';\nimport { ModelCameraComponent } from '../plugin/model-item';\n\nexport class CameraGestureHandlerImp implements CameraGestureHandler {\n private cameraTransform = new PTransform();\n private cameraCoordiante = new PCoordinate();\n\n private startParams: CameraGestureHandlerParams = {\n type: CameraGestureType.none,\n mouseEvent: false,\n clientX: 0,\n clientY: 0,\n clientWidth: 512,\n clientHeight: 512,\n target: '',\n };\n\n constructor (\n private composition: Composition,\n ) { }\n\n getItem () {\n return this.composition.items?.find(item => item.name === this.getCurrentTarget());\n }\n\n getCurrentTarget (): string {\n return this.startParams.target;\n }\n\n getCurrentType (): CameraGestureType {\n return this.startParams.type;\n }\n\n onKeyEvent (event: CameraKeyEvent): CameraOptionsEx {\n // check event camera ID at first\n if (this.startParams.target !== event.cameraID) {\n this.startParams.target = event.cameraID;\n this.startParams.type = CameraGestureType.translate;\n }\n\n // can't find camera item, throw error message\n const item = this.getItem();\n\n if (item === undefined) {\n console.warn(`[CameraGestureHandlerImp] Unable to locate camera item with ID: ${this.startParams.target}.`);\n\n return this.composition.camera.getOptions();\n }\n\n const camera = this.composition.camera;\n const effectsTransfrom = new Transform({\n ...camera.getOptions(),\n valid: true,\n });\n const cameraTransform = new PTransform().fromEffectsTransform(effectsTransfrom);\n const cameraCoordiante = new PCoordinate().fromPTransform(cameraTransform);\n\n // compute move direction\n const xAxis = event.xAxis ?? 0;\n const yAxis = event.yAxis ?? 0;\n const zAxis = event.zAxis ?? 0;\n const dir = cameraCoordiante.xAxis.clone().multiply(xAxis);\n\n dir.add(cameraCoordiante.yAxis.clone().multiply(yAxis));\n dir.add(cameraCoordiante.zAxis.clone().multiply(zAxis));\n if (dir.lengthSquared() < 0.00001) {\n return camera.getOptions();\n }\n dir.normalize();\n\n // update camera position\n const speed = event.speed ?? 0.1;\n const pos = cameraTransform.getPosition();\n\n pos.add(dir.clone().multiply(speed));\n this.setTransform(item, pos);\n\n // update camera transform and coordinates\n if (this.startParams.type === CameraGestureType.rotate_self) {\n this.cameraTransform.setPosition(pos);\n this.cameraCoordiante.origin = pos;\n }\n\n return camera.getOptions();\n }\n\n onXYMoveBegin (x: number, y: number, width: number, height: number, cameraID: string): CameraOptionsEx {\n const args = {\n type: CameraGestureType.translate,\n mouseEvent: true,\n clientX: x,\n clientY: y,\n clientWidth: width,\n clientHeight: height,\n target: cameraID,\n };\n\n return this.startGesture(args);\n }\n\n onXYMoving (x: number, y: number, speed?: number): CameraOptionsEx {\n if (!this.startParams.mouseEvent) {\n return this.composition.camera.getOptions();\n }\n\n const arg0 = this.startParams;\n const arg = {\n type: CameraGestureType.translate,\n mouseEvent: true,\n clientX: x,\n clientY: y,\n clientWidth: arg0.clientWidth,\n clientHeight: arg0.clientHeight,\n target: arg0.target,\n speed: speed ?? 0.015,\n };\n\n return this.moveGesture(arg);\n }\n\n onXYMoveEnd () {\n this.endGesture();\n }\n\n onZMoveBegin (x: number, y: number, width: number, height: number, cameraID: string): CameraOptionsEx {\n const arg = {\n type: CameraGestureType.scale,\n mouseEvent: true,\n clientX: x,\n clientY: y,\n clientWidth: width,\n clientHeight: height,\n target: cameraID,\n };\n\n return this.startGesture(arg);\n }\n\n onZMoving (x: number, y: number, speed = 0.015): CameraOptionsEx {\n if (!this.startParams.mouseEvent) {\n return this.composition.camera.getOptions();\n }\n\n const arg0 = this.startParams;\n const arg = {\n type: CameraGestureType.scale,\n mouseEvent: true,\n clientX: x,\n clientY: y,\n clientWidth: arg0.clientWidth,\n clientHeight: arg0.clientHeight,\n target: arg0.target,\n speed,\n };\n\n return this.moveGesture(arg);\n }\n\n onZMoveEnd () {\n this.endGesture();\n }\n\n onRotateBegin (x: number, y: number, width: number, height: number, cameraID: string): CameraOptionsEx {\n const arg = {\n type: CameraGestureType.rotate_self,\n mouseEvent: true,\n clientX: x,\n clientY: y,\n clientWidth: width,\n clientHeight: height,\n target: cameraID,\n };\n\n return this.startGesture(arg);\n }\n\n onRotating (x: number, y: number, speed?: number): CameraOptionsEx {\n if (!this.startParams.mouseEvent) {\n return this.composition.camera.getOptions();\n }\n\n const arg0 = this.startParams;\n const arg = {\n type: CameraGestureType.rotate_self,\n mouseEvent: true,\n clientX: x,\n clientY: y,\n clientWidth: arg0.clientWidth,\n clientHeight: arg0.clientHeight,\n target: arg0.target,\n speed: speed ?? 1.5,\n };\n\n return this.moveGesture(arg);\n }\n\n onRotateEnd () {\n this.endGesture();\n }\n\n onRotatePointBegin (x: number, y: number, width: number, height: number, point: spec.vec3, cameraID: string): CameraOptionsEx {\n const arg = {\n type: CameraGestureType.rotate_focus,\n mouseEvent: true,\n clientX: x,\n clientY: y,\n clientWidth: width,\n clientHeight: height,\n focusPoint: point,\n target: cameraID,\n };\n\n return this.startGesture(arg);\n }\n\n onRotatingPoint (x: number, y: number, speed?: number): CameraOptionsEx {\n if (!this.startParams.mouseEvent) {\n return this.composition.camera.getOptions();\n }\n\n const arg0 = this.startParams;\n const arg = {\n type: CameraGestureType.rotate_focus,\n mouseEvent: true,\n clientX: x,\n clientY: y,\n clientWidth: arg0.clientWidth,\n clientHeight: arg0.clientHeight,\n focusPoint: arg0.focusPoint,\n target: arg0.target,\n speed: speed ?? 8.0,\n };\n\n return this.moveGesture(arg);\n }\n\n onRotatePointEnd (): void {\n this.endGesture();\n }\n\n moveTo (cameraID: string, position: spec.vec3): void {\n this.startParams.target = cameraID;\n this.startParams.type = CameraGestureType.none;\n const item = this.getItem();\n\n if (item === undefined) {\n console.warn('[CameraGestureHandlerImp] Can\\'t find camera item.');\n\n return;\n }\n\n this.setPosition(item, position);\n }\n\n rotateTo (cameraID: string, quat: spec.vec4): void {\n this.startParams.target = cameraID;\n this.startParams.type = CameraGestureType.none;\n const item = this.getItem();\n\n if (item === undefined) {\n console.warn('[CameraGestureHandlerImp] Can\\'t find camera item.');\n\n return;\n }\n\n this.setQuaternion(item, quat);\n }\n\n onFocusPoint (cameraID: string, point: spec.vec3, distance?: number): void {\n this.startParams.target = cameraID;\n this.startParams.type = CameraGestureType.none;\n\n const item = this.getItem();\n\n if (item === undefined) {\n console.warn('[CameraGestureHandlerImp] Can\\'t find camera item.');\n\n return;\n }\n const newDistance = distance ?? 5;\n const targetPoint = Vector3.fromArray(point);\n //\n const transform = new PTransform().fromEffectsTransform(item.transform);\n const coordinate = new PCoordinate().fromPTransform(transform);\n // FIXME: MATH\n const lookatDir = Vector3.fromArray(coordinate.zAxis.toArray()).multiply(1.0);\n //\n const newOffset = lookatDir.clone().multiply(newDistance);\n const newPosition = targetPoint.clone().add(newOffset);\n\n //\n this.setTransform(item, newPosition);\n //\n // z+方向优先\n // const cameraPos = Vector3.fromArray(item.transform.position);\n // const newLookatDir = targetPoint.clone().subVector(cameraPos).normalize();\n // const newOffset = newLookatDir.clone().multiplyScalar(newDistance);\n // const newPosition = targetPoint.clone().subVector(newOffset);\n // const newUpVector = Vector3.tryZUpVector(newLookatDir, new Vector3);\n // const viewMatrix = Matrix4.computeLookAt(newPosition, targetPoint, newUpVector, new Matrix4);\n // const tranform = new PTransform().fromMatrix4(viewMatrix);\n // const newRotation = tranform.rotation;\n // item.transform.setQuat(-newRotation.x, -newRotation.y, -newRotation.z, newRotation.w);\n // item.transform.setPosition(newPosition.x, newPosition.y, newPosition.z);\n //\n // 旋转优先\n // const cameraPos = Vector3.fromArray(item.transform.position);\n // const newLookatDir = targetPoint.clone().subVector(cameraPos).normalize();\n // const newOffset = newLookatDir.clone().multiplyScalar(newDistance);\n // const newPosition = targetPoint.clone().subVector(newOffset);\n // const oldTransform = new PTransform().fromEffectsTransform(item.transform);\n // const oldCoordinate = new PCoordinate().fromPTransform(oldTransform)\n // const oldLookatDir = oldCoordinate.zAxis.clone().multiplyScalar(-1.0);\n // const rotateAxis = oldLookatDir.cross(newLookatDir);\n // const sinTheta = rotateAxis.length();\n // const theta = Math.asin(sinTheta);\n // const deltaRotation = Quaternion.fromAxisAngle(rotateAxis, theta, new Quaternion);\n // const newRotation = Quaternion.multiply(deltaRotation, oldTransform.rotation, new Quaternion);\n // item.transform.setQuat(newRotation.x, newRotation.y, newRotation.z, newRotation.w);\n // item.transform.setPosition(newPosition.x, newPosition.y, newPosition.z);\n //\n //\n this.startParams.target = '';\n }\n\n getCameraTransform (): Transform {\n const camera = this.composition.camera;\n const transform = new Transform(camera.getOptions());\n\n transform.setValid(true);\n\n return transform;\n }\n\n private startGesture (args: CameraGestureHandlerParams): CameraOptionsEx {\n this.startParams = args;\n this.updateCameraTransform(this.composition.camera.getOptions());\n\n if (!this.getItem()) {\n console.warn('[CameraGestureHandlerImp] Invalid target specified in startGesture.');\n }\n\n return this.composition.camera.getOptions();\n }\n\n private moveGesture (arg: CameraGestureHandlerParams): CameraOptionsEx {\n if (this.getCurrentType() === arg.type) {\n const item = this.getItem();\n\n if (item === undefined) {\n console.warn('[CameraGestureHandlerImp] Can\\'t find camera item.');\n\n return this.composition.camera.getOptions();\n }\n const speed = arg.speed ?? 1.015;\n const xAxis = this.cameraCoordiante.xAxis;\n const yAxis = this.cameraCoordiante.yAxis;\n const zAxis = this.cameraCoordiante.zAxis;\n const dx = (arg.clientX - this.startParams.clientX);\n const dy = (arg.clientY - this.startParams.clientY);\n\n if (arg.type === CameraGestureType.translate) {\n const pos = this.cameraTransform.getPosition();\n const newPos = pos.clone();\n\n newPos.add(xAxis.clone().multiply(-dx * speed));\n newPos.add(yAxis.clone().multiply(dy * speed));\n item.transform.setPosition(newPos.x, newPos.y, newPos.z);\n this.setTransform(item, item.transform.position, item.transform.rotation);\n } else if (arg.type === CameraGestureType.scale) {\n const pos = this.cameraTransform.getPosition();\n const newPos = pos.clone();\n\n newPos.add(zAxis.clone().multiply(dy * speed));\n item.transform.setPosition(newPos.x, newPos.y, newPos.z);\n this.setTransform(item, item.transform.position, item.transform.rotation);\n } else if (arg.type === CameraGestureType.rotate_self) {\n const ndx = dx / arg.clientWidth;\n const ndy = dy / arg.clientHeight;\n const dxAngle = ndx * Math.PI * speed * 0.5;\n const dyAngle = ndy * Math.PI * speed * 0.5;\n\n const newRotation = Quaternion.fromAxisAngle(Vector3.Y, -dxAngle);\n // FIXME: MATH\n const tempRotation = Quaternion.fromAxisAngle(xAxis, -dyAngle);\n\n newRotation.multiply(tempRotation);\n // FIXME: MATH\n newRotation.multiply(this.cameraTransform.getRotation());\n item.transform.setQuaternion(newRotation.x, newRotation.y, newRotation.z, newRotation.w);\n this.setTransform(item, item.transform.position, item.transform.rotation);\n } else if (arg.type === CameraGestureType.rotate_focus) {\n const ndx = dx / arg.clientWidth;\n const ndy = dy / arg.clientHeight;\n const dxAngle = ndx * Math.PI * speed;\n const dyAngle = ndy * Math.PI * speed;\n const newRotation = Quaternion.fromAxisAngle(Vector3.Y, -dxAngle);\n const tempRotation = Quaternion.fromAxisAngle(xAxis, -dyAngle);\n\n newRotation.multiply(tempRotation);\n const rotateMatrix = newRotation.toMatrix4(new Matrix4());\n const targetPoint = Vector3.fromArray(arg.focusPoint as spec.vec3);\n const deltaPosition = this.cameraCoordiante.origin.clone().subtract(targetPoint);\n\n rotateMatrix.transformPoint(deltaPosition);\n const newPosition = deltaPosition.add(targetPoint);\n\n newRotation.multiply(this.cameraTransform.getRotation());\n item.transform.setPosition(newPosition.x, newPosition.y, newPosition.z);\n item.transform.setQuaternion(newRotation.x, newRotation.y, newRotation.z, newRotation.w);\n this.setTransform(item, newPosition, item.transform.rotation);\n } else {\n console.warn('[CameraGestureHandlerImp] Movement type not implemented.');\n }\n } else {\n console.warn(`[CameraGestureHandlerImp] Invalid move type specified: ${arg.type}`);\n }\n\n return this.composition.camera.getOptions();\n }\n\n private setTransform (item: VFXItem, position?: Vector3, rotation?: Euler) {\n const camera = item.getComponent(ModelCameraComponent);\n\n if (camera !== undefined) {\n camera.setTransform(position, rotation);\n }\n }\n\n private setPosition (item: VFXItem, position: spec.vec3) {\n item.transform.setPosition(...position);\n const camera = item.getComponent(ModelCameraComponent);\n\n if (camera !== undefined) {\n camera.updateMainCamera();\n }\n }\n\n private setQuaternion (item: VFXItem, quat: spec.vec4) {\n item.transform.setQuaternion(...quat);\n const camera = item.getComponent(ModelCameraComponent);\n\n if (camera !== undefined) {\n camera.updateMainCamera();\n }\n }\n\n private endGesture () {\n this.startParams.type = CameraGestureType.none;\n this.startParams.mouseEvent = false;\n this.startParams.target = '';\n }\n\n private updateCameraTransform (cameraOptions: CameraOptionsEx) {\n const effectsTransfrom = new Transform(cameraOptions);\n\n effectsTransfrom.setValid(true);\n\n this.cameraTransform.fromEffectsTransform(effectsTransfrom);\n this.cameraCoordiante.fromPTransform(this.cameraTransform);\n }\n}\n\nexport * from './protocol';\n","import * as EFFECTS from '@galacean/effects';\nimport type { spec } from '@galacean/effects';\nimport { VFXItem, logger, registerPlugin } from '@galacean/effects';\nimport { ModelPlugin, ModelTreePlugin } from './plugin';\n\nregisterPlugin<void>('tree', ModelTreePlugin, VFXItem, true);\nregisterPlugin<void>('model', ModelPlugin, VFXItem);\n\nexport const version = __VERSION__;\n\nexport type BaseTransform = spec.BaseItemTransform;\nexport type ModelBaseItem = spec.BaseItem;\nexport type ModelItemCamera = spec.ModelCameraItem;\nexport type ModelItemLight = spec.ModelLightItem;\nexport type ModelCameraContent = spec.ModelCameraContent;\nexport type ModelLightContent = spec.ModelLightContent;\nexport type ModelTextureTransform = spec.ModelTextureTransform;\nexport type ModelItemBoundingBox = spec.ModelItemBoundingBox;\nexport type ModelItemBoundingSphere = spec.ModelItemBoundingSphere;\nexport type ModelItemBounding = spec.ModelItemBounding;\nexport type ModelCameraOptions = spec.ModelCameraOptions;\nexport type ModelLightBaseOptions = spec.ModelLightBaseOptions;\nexport type ModelLightPointOptions = spec.ModelLightPointOptions;\nexport type ModelLightSpotOptions = spec.ModelLightSpotOptions;\nexport type ModelLightDirOptions = spec.ModelLightDirOptions;\nexport type ModelAmbientLightOptions = spec.ModelAmbientLightOptions;\nexport type ModelLightOptions = spec.ModelLightOptions;\n\nexport type ModelItemMesh = spec.ModelMeshItem<'studio'>;\nexport type ModelItemSkybox = spec.ModelSkyboxItem<'studio'>;\nexport type ModelItemTree = spec.ModelTreeItem<'studio'>;\nexport type ModelMeshContent = spec.ModelMeshItemContent<'studio'>;\nexport type ModelSkyboxContent = spec.SkyboxContent<'studio'>;\nexport type ModelMeshOptions = spec.ModelMeshOptions<'studio'>;\nexport type ModelSkinOptions = spec.SkinOptions<'studio'>;\nexport type ModelPrimitiveOptions = spec.PrimitiveOptions<'studio'>;\nexport type ModelMaterialUnlitOptions = spec.MaterialUnlitOptions<'studio'>;\nexport type ModelMaterialPBROptions = spec.MaterialPBROptions<'studio'>;\nexport type ModelMaterialHariOptions = spec.MaterialHairOptions<'studio'>;\nexport type ModelMaterialOptions = spec.MaterialOptions<'studio'>;\nexport type ModelSkyboxOptions = spec.SkyboxOptions<'studio'>;\nexport type ModelTreeOptions = spec.ModelTreeOptions<'studio'>;\nexport type ModelTreeContent = spec.ModelTreeContent<'studio'>;\nexport type ModelAnimTrackOptions = spec.ModelAnimTrackOptions<'studio'>;\nexport type ModelAnimationOptions = spec.ModelAnimationOptions<'studio'>;\n\nexport type ModelMeshSkinData = spec.SkinData;\nexport type ModelMeshMorphData = spec.MorphData;\nexport type ModelMeshPrimitiveData = spec.PrimitiveData;\nexport type ModelMeshComponentData = spec.ModelMeshComponentData;\nexport type ModelLightType = spec.LightType;\nexport type ModelLightComponentData = spec.ModelLightComponentData;\nexport type ModelCameraComponentData = spec.ModelCameraComponentData;\nexport type ModelSkyboxComponentData = spec.SkyboxComponentData;\nexport type AnimationComponentData = spec.AnimationComponentData;\n\nexport * from './gesture';\nexport * from './gltf';\nexport * from './plugin';\nexport * from './runtime';\nexport * from './utility';\n\nlogger.info(`Plugin model version: ${version}.`);\n\nif (version !== EFFECTS.version) {\n console.error(\n '注意:请统一 Model 插件与 Player 版本,不统一的版本混用会有不可预知的后果!',\n '\\nAttention: Please ensure the Model plugin is synchronized with the Player version. Mixing and matching incompatible versions may result in unpredictable consequences!'\n );\n}\n","import type {\n Engine, HitTestBoxParams, HitTestCustomParams, HitTestSphereParams, Renderer, VFXItem,\n} from '@galacean/effects';\nimport {\n HitTestType, Behaviour, RendererComponent, effectsClass, spec, AnimationClip,\n} from '@galacean/effects';\nimport type {\n ModelCameraComponentData, ModelItemBounding, ModelLightComponentData,\n ModelMeshComponentData, ModelSkyboxComponentData, AnimationComponentData,\n} from '../index';\nimport { VFX_ITEM_TYPE_3D } from '../index';\nimport type { PSceneManager } from '../runtime';\nimport { PCamera, PLight, PMesh, PSkybox } from '../runtime';\nimport type { Euler, Ray, Vector2 } from '../runtime/math';\nimport { Vector3 } from '../runtime/math';\nimport { RayIntersectsBoxWithRotation } from '../utility';\nimport { getSceneManager } from './model-plugin';\n\n/**\n * 插件 Mesh 组件类,支持 3D Mesh 渲染能力\n * @since 2.0.0\n * @internal\n */\n@effectsClass(spec.DataType.MeshComponent)\nexport class ModelMeshComponent extends RendererComponent {\n /**\n * 内部 Mesh 对象\n */\n content: PMesh;\n /**\n * 参数\n */\n data?: ModelMeshComponentData;\n /**\n * 包围盒\n */\n bounding?: ModelItemBounding;\n /**\n * 场景管理器\n */\n sceneManager?: PSceneManager;\n /**\n * morph 动画权重\n */\n morphWeights: number[] = [];\n\n /**\n * 构造函数,只保存传入参数,不在这里创建内部对象\n * @param engine - 引擎\n * @param data - Mesh 参数\n */\n constructor (engine: Engine, data?: ModelMeshComponentData) {\n super(engine);\n if (data) {\n this.fromData(data);\n }\n }\n\n /**\n * 组件开始,需要创建内部对象,更新父元素信息和添加到场景管理器中\n */\n override start (): void {\n this.sceneManager = getSceneManager(this);\n this.createContent();\n this.item.type = VFX_ITEM_TYPE_3D;\n this.priority = this.item.renderOrder;\n this.sceneManager?.addItem(this.content);\n if (this.item.parentId && this.item.parent) {\n this.content.updateParentInfo(this.item.parentId, this.item.parent);\n }\n this.setVisible(true);\n this.item.getHitTestParams = this.getHitTestParams;\n }\n\n /**\n * 组件更新,更新内部对象状态\n * @param dt - 更新间隔\n */\n override update (dt: number): void {\n if (this.sceneManager) {\n this.content.build(this.sceneManager);\n }\n\n this.content.update();\n }\n\n /**\n * 组件晚更新,晚更新内部对象状态\n * @param dt - 更新间隔\n */\n override lateUpdate (dt: number): void {\n this.content.lateUpdate();\n }\n\n /**\n * 组件渲染,需要检查可见性\n * @param renderer - 渲染器\n * @returns\n */\n override render (renderer: Renderer) {\n if (!this.getVisible() || !this.sceneManager) {\n return;\n }\n\n this.content.render(this.sceneManager, renderer);\n }\n\n /**\n * 组件销毁,需要重场景管理器中删除\n */\n override onDestroy (): void {\n this.sceneManager?.removeItem(this.content);\n this.sceneManager = undefined;\n this.content.dispose();\n }\n\n /**\n * 反序列化,记录传入参数\n * @param data - 组件参数\n */\n override fromData (data: ModelMeshComponentData): void {\n super.fromData(data);\n this.data = data;\n }\n\n /**\n * 创建内部对象\n */\n createContent () {\n if (this.data) {\n const bounding = this.data.interaction;\n\n this.bounding = bounding && JSON.parse(JSON.stringify(bounding));\n\n this.content = new PMesh(this.engine, this.item.name, this.data, this, this.item.parentId);\n }\n }\n\n /**\n * 设置当前 Mesh 的可见性。\n * @param visible - true:可见,false:不可见\n */\n setVisible (visible: boolean) {\n this.content?.onVisibleChanged(visible);\n }\n\n /**\n * 获取当前 Mesh 的可见性。\n */\n getVisible (): boolean {\n return this.content?.visible ?? false;\n }\n\n /**\n * 获取点击测试参数,根据元素包围盒进行相交测试,Mesh 对象会进行更加精确的点击测试\n * @param force - 是否强制进行点击测试\n * @returns 点击测试参数\n */\n getHitTestParams = (force?: boolean): HitTestBoxParams | HitTestSphereParams | HitTestCustomParams | undefined => {\n this.computeBoundingBox();\n const bounding = this.bounding;\n\n if (bounding && (force || Number.isInteger(bounding.behavior))) {\n const type = bounding.type;\n\n if (type === spec.ModelBoundingType.box) {\n if (this.content instanceof PMesh) {\n const mesh = this.content;\n const customHitTest: HitTestCustomParams = {\n behavior: bounding.behavior as number,\n type: HitTestType.custom,\n collect: function (ray: Ray, pointInCanvas: Vector2) {\n const result = mesh.hitTesting(ray.origin, ray.direction);\n\n return result;\n },\n };\n\n return customHitTest;\n } else {\n const worldMatrixData = this.transform.getWorldMatrix();\n const customHitTest: HitTestCustomParams = {\n behavior: bounding.behavior as number,\n type: HitTestType.custom,\n collect: function (ray: Ray, pointInCanvas: Vector2) {\n const result = RayIntersectsBoxWithRotation(ray, worldMatrixData, bounding);\n\n return result;\n },\n };\n\n return customHitTest;\n }\n } else if (type === spec.ModelBoundingType.sphere) {\n const pos = new Vector3();\n\n this.transform.assignWorldTRS(pos);\n const center = new Vector3();\n\n if (bounding.center) {\n center.setFromArray(bounding.center);\n }\n\n center.add(pos);\n\n return {\n type: type as unknown as HitTestType.sphere,\n behavior: bounding.behavior as number,\n radius: bounding.radius || 0,\n center,\n };\n }\n }\n };\n\n /**\n * 计算元素包围盒,只针对 Mesh 对象\n * @returns 包围盒\n */\n computeBoundingBox (): ModelItemBounding | undefined {\n if (this.content && this.content instanceof PMesh) {\n const worldMatrix = this.transform.getWorldMatrix();\n const bbox = this.content.computeBoundingBox(worldMatrix);\n const center = bbox.getCenter(new Vector3());\n const size = bbox.getSize(new Vector3());\n\n this.bounding = {\n behavior: this.bounding?.behavior,\n type: spec.ModelBoundingType.box,\n center: [center.x, center.y, center.z],\n size: [size.x, size.y, size.z],\n };\n\n return this.bounding;\n } else {\n return;\n }\n }\n}\n\n/**\n * 插件天空盒组件类,支持 3D 天空盒渲染能力\n * @since 2.0.0\n * @internal\n */\n@effectsClass(spec.DataType.SkyboxComponent)\nexport class ModelSkyboxComponent extends RendererComponent {\n /**\n * 内部天空盒对象\n */\n content: PSkybox;\n /**\n * 天空盒参数\n */\n data?: ModelSkyboxComponentData;\n /**\n * 场景管理器\n */\n sceneManager?: PSceneManager;\n\n /**\n * 构造函数,只保存传入参数,不在这里创建内部对象\n * @param engine - 引擎\n * @param data - Mesh 参数\n */\n constructor (engine: Engine, data?: ModelSkyboxComponentData) {\n super(engine);\n if (data) {\n this.fromData(data);\n }\n }\n\n /**\n * 组件开始,需要创建内部对象和添加到场景管理器中\n */\n override start (): void {\n this.createContent();\n this.item.type = VFX_ITEM_TYPE_3D;\n this.priority = this.item.renderOrder;\n this.sceneManager = getSceneManager(this);\n this.sceneManager?.addItem(this.content);\n this.setVisible(true);\n }\n\n /**\n * 组件渲染,需要检查可见性\n * @param renderer - 渲染器\n * @returns\n */\n override render (renderer: Renderer) {\n if (!this.getVisible() || !this.sceneManager) {\n return;\n }\n\n this.content.render(this.sceneManager, renderer);\n }\n\n /**\n * 组件销毁,需要重场景管理器中删除\n */\n override onDestroy (): void {\n this.sceneManager?.removeItem(this.content);\n this.sceneManager = undefined;\n this.content.dispose();\n }\n\n /**\n * 反序列化,记录传入参数\n * @param data - 组件参数\n */\n override fromData (data: ModelSkyboxComponentData): void {\n super.fromData(data);\n this.data = data;\n }\n\n /**\n * 创建内部对象\n */\n createContent () {\n if (this.data) {\n const skyboxData = this.data;\n\n this.content = new PSkybox(this.item.name, skyboxData, this);\n }\n }\n\n /**\n * 设置当前可见性。\n * @param visible - true:可见,false:不可见\n */\n setVisible (visible: boolean) {\n this.content?.onVisibleChanged(visible);\n }\n\n /**\n * 获取当前可见性。\n */\n getVisible (): boolean {\n return this.content?.visible ?? false;\n }\n}\n\n/**\n * 插件灯光组件类,支持 3D 灯光能力\n * @since 2.0.0\n * @internal\n */\n@effectsClass(spec.DataType.LightComponent)\nexport class ModelLightComponent extends Behaviour {\n /**\n * 内部灯光对象\n */\n content: PLight;\n /**\n * 参数\n */\n data?: ModelLightComponentData;\n\n /**\n * 构造函数,只保存传入参数,不在这里创建内部对象\n * @param engine - 引擎\n * @param data - Mesh 参数\n */\n constructor (engine: Engine, data?: ModelLightComponentData) {\n super(engine);\n if (data) {\n this.fromData(data);\n }\n }\n\n /**\n * 组件开始,需要创建内部对象和添加到场景管理器中\n */\n override start (): void {\n this.createContent();\n this.item.type = VFX_ITEM_TYPE_3D;\n const scene = getSceneManager(this);\n\n scene?.addItem(this.content);\n this.setVisible(true);\n }\n\n /**\n * 组件更新,更新内部对象状态\n * @param dt - 更新间隔\n */\n override update (dt: number): void {\n this.content.update();\n }\n\n /**\n * 组件销毁\n */\n override onDestroy (): void {\n this.content.dispose();\n }\n\n /**\n * 反序列化,记录传入参数\n * @param data - 组件参数\n */\n override fromData (data: ModelLightComponentData): void {\n super.fromData(data);\n\n this.data = data;\n }\n\n /**\n * 创建内部对象\n */\n createContent () {\n if (this.data) {\n const lightData = this.data;\n\n this.content = new PLight(this.item.name, lightData, this);\n }\n }\n\n /**\n * 设置当前可见性。\n * @param visible - true:可见,false:不可见\n */\n setVisible (visible: boolean) {\n this.content?.onVisibleChanged(visible);\n }\n\n /**\n * 获取当前 Mesh 的可见性。\n */\n getVisible (): boolean {\n return this.content?.visible ?? false;\n }\n}\n\n/**\n * 插件相机组件类,支持 3D 相机能力\n * @since 2.0.0\n * @internal\n */\n@effectsClass(spec.DataType.CameraComponent)\nexport class ModelCameraComponent extends Behaviour {\n /**\n * 内部相机对象\n */\n content: PCamera;\n /**\n * 参数\n */\n data?: ModelCameraComponentData;\n /**\n * 构造函数,只保存传入参数,不在这里创建内部对象\n * @param engine - 引擎\n * @param data - Mesh 参数\n */\n constructor (engine: Engine, data?: ModelCameraComponentData) {\n super(engine);\n if (data) {\n this.fromData(data);\n }\n }\n\n /**\n * 组件开始,需要创建内部对象和添加到场景管理器中\n */\n override start (): void {\n this.createContent();\n this.item.type = VFX_ITEM_TYPE_3D;\n const scene = getSceneManager(this);\n\n scene?.addItem(this.content);\n this.updateMainCamera();\n }\n\n /**\n * 组件更新,更新内部对象状态\n * @param dt - 更新间隔\n */\n override update (dt: number): void {\n this.content.update();\n this.updateMainCamera();\n }\n\n /**\n * 组件销毁\n */\n override onDestroy (): void {\n this.content?.dispose();\n }\n\n /**\n * 反序列化,记录传入参数\n * @param data - 组件参数\n */\n override fromData (data: ModelCameraComponentData): void {\n super.fromData(data);\n\n this.data = data;\n }\n\n /**\n * 创建内部对象\n */\n createContent () {\n if (this.data) {\n const cameraData = this.data;\n\n const width = this.engine.renderer.getWidth();\n const height = this.engine.renderer.getHeight();\n\n this.content = new PCamera(this.item.name, width, height, cameraData, this);\n }\n }\n\n /**\n * 更新合成主相机,更加当前相机元素状态\n */\n updateMainCamera () {\n this.content.matrix = this.transform.getWorldMatrix();\n const composition = this.item.composition;\n\n if (composition) {\n composition.camera.position = this.transform.position.clone();\n composition.camera.setQuat(this.transform.quat);\n composition.camera.near = this.content.nearPlane;\n composition.camera.far = this.content.farPlane;\n composition.camera.fov = this.content.fov;\n }\n }\n\n /**\n * 设置变换\n * @param position - 位置\n * @param rotation - 旋转\n */\n setTransform (position?: Vector3, rotation?: Euler): void {\n if (position) {\n this.transform.setPosition(position.x, position.y, position.z);\n }\n if (rotation) {\n this.transform.setRotation(rotation.x, rotation.y, rotation.z);\n }\n this.updateMainCamera();\n }\n}\n\n/**\n * 插件动画组件类,支持 3D 动画能力\n * @since 2.0.0\n * @internal\n */\n@effectsClass(spec.DataType.AnimationComponent)\nexport class AnimationComponent extends Behaviour {\n /**\n * 参数\n */\n data?: AnimationComponentData;\n\n elapsedTime = 0;\n animation = -1;\n clips: ModelAnimationClip[] = [];\n /**\n * 构造函数,只保存传入参数,不在这里创建内部对象\n * @param engine - 引擎\n */\n constructor (engine: Engine) {\n super(engine);\n }\n\n /**\n * 组件开始,需要创建内部对象和添加到场景管理器中\n */\n override start (): void {\n this.elapsedTime = 0;\n this.item.type = VFX_ITEM_TYPE_3D;\n }\n\n /**\n * 组件更新,更新内部对象状态\n * @param dt - 更新间隔\n */\n override update (dt: number): void {\n this.elapsedTime += dt * 0.001;\n if (this.animation >= 0 && this.animation < this.clips.length) {\n this.clips[this.animation].sampleAnimation(this.item, this.elapsedTime);\n }\n }\n\n /**\n * 组件销毁\n */\n override onDestroy (): void {\n\n }\n\n /**\n * 反序列化,记录传入参数\n * @param data - 组件参数\n */\n override fromData (data: AnimationComponentData): void {\n super.fromData(data);\n this.data = data;\n //\n this.name = data.name ?? '<empty>';\n this.animation = data.animation ?? -1;\n this.clips = [];\n data.animationClips.forEach(clipData => {\n const clipObj = new ModelAnimationClip(this.engine);\n\n clipObj.setFromAnimationClip(clipData as unknown as AnimationClip);\n this.clips.push(clipObj);\n });\n }\n}\n\nclass ModelAnimationClip extends AnimationClip {\n path2Node: Record<string, VFXItem> = {};\n\n override sampleAnimation (vfxItem: VFXItem, time: number) {\n const duration = vfxItem.duration;\n const life = Math.max(0, time) % duration;\n\n for (const curve of this.positionCurves) {\n const value = curve.keyFrames.getValue(life % this.duration);\n const target = this.getTargetItem(vfxItem, curve.path);\n\n target?.transform.setPosition(value.x, value.y, value.z);\n }\n\n for (const curve of this.rotationCurves) {\n const value = curve.keyFrames.getValue(life % this.duration);\n const target = this.getTargetItem(vfxItem, curve.path);\n\n target?.transform.setQuaternion(value.x, value.y, value.z, value.w);\n }\n\n for (const curve of this.scaleCurves) {\n const value = curve.keyFrames.getValue(life % this.duration);\n const target = this.getTargetItem(vfxItem, curve.path);\n\n target?.transform.setScale(value.x, value.y, value.z);\n }\n\n for (const curve of this.floatCurves) {\n const value = curve.keyFrames.getValue(life % this.duration);\n const target = this.getTargetItem(vfxItem, curve.path);\n\n if (curve.className === 'ModelMeshComponent') {\n const component = target?.getComponent(ModelMeshComponent);\n\n if (component) {\n const properties = curve.property.split('.');\n\n setProperty(component, properties, value);\n } else {\n console.error('Can\\'t find mesh component.');\n }\n } else {\n console.warn(`Ignore curve: className ${curve.className}.`);\n }\n }\n }\n\n setFromAnimationClip (clip: AnimationClip) {\n this.duration = clip.duration;\n this.positionCurves = clip.positionCurves.slice();\n this.rotationCurves = clip.rotationCurves.slice();\n this.scaleCurves = clip.scaleCurves.slice();\n this.floatCurves = clip.floatCurves.slice();\n }\n\n getTargetItem (rootItem: VFXItem, path: string) {\n if (this.path2Node[path]) {\n return this.path2Node[path];\n }\n\n let target = rootItem;\n const nameList = path.split('/');\n\n for (const name of nameList) {\n let findTag = false;\n\n for (const child of target.children) {\n if (child.name === name) {\n target = child;\n findTag = true;\n\n break;\n }\n }\n if (!findTag) {\n throw new Error(`Can't find path in tree ${rootItem.id}, ${path}.`);\n }\n }\n\n this.path2Node[path] = target;\n\n return target;\n }\n}\n\nfunction setProperty<T> (obj: Object, properties: string[], value: T) {\n const len = properties.length;\n let current: any = obj;\n\n for (let i = 0; i < len - 1; i++) {\n const propName = properties[i];\n\n if (!(propName in current) || typeof current[propName] !== 'object') {\n console.error(`Invalid properties ${properties}.`);\n\n return;\n }\n current = current[propName];\n }\n\n current[properties[len - 1]] = value;\n}\n","import type { Composition, Region, spec } from '@galacean/effects';\nimport type { Ray, Matrix4 } from '../runtime/math';\nimport { Vector3 } from '../runtime/math';\nimport type { ModelItemBounding, ModelItemBoundingBox } from '../index';\nimport { VFX_ITEM_TYPE_3D } from '../plugin/const';\nimport { ModelMeshComponent } from '../plugin/model-item';\n\n// 射线与带旋转的包围盒求交\n// function transformDirection (m: Matrix4, direction: Vector3) {\n// const x = direction.x;\n// const y = direction.y;\n// const z = direction.z;\n// const me = m.elements;\n// const result = new Vector3();\n\n// result.x = me[0] * x + me[4] * y + me[8] * z;\n// result.y = me[1] * x + me[5] * y + me[9] * z;\n// result.z = me[2] * x + me[6] * y + me[10] * z;\n\n// return result.normalize();\n\n// }\n\n/**\n * 带旋转的射线与包围盒求交\n * @param ray - 射线\n * @param matrixData - 矩阵\n * @param bounding - 包围盒\n * @returns 交点列表或者 undefined\n */\nfunction RayIntersectsBoxWithRotation (ray: Ray, matrixData: Matrix4, bounding: ModelItemBounding): Vector3[] | undefined {\n const local2World = matrixData;\n const world2Local = local2World.clone().invert();\n\n const newRay = ray.clone().applyMatrix(world2Local);\n const boxCenter = Vector3.fromArray(bounding.center!);\n const boxHalfSize = Vector3.fromArray((bounding as ModelItemBoundingBox).size!).multiply(0.5);\n const boxMin = boxCenter.clone().subtract(boxHalfSize);\n const boxMax = boxCenter.clone().add(boxHalfSize);\n const intersetPoint = newRay.intersectBox({ min: boxMin, max: boxMax }, new Vector3());\n\n if (intersetPoint !== undefined) {\n const insersetPointInWorld = local2World.transformPoint(intersetPoint);\n\n return [insersetPointInWorld];\n } else {\n return;\n }\n}\n\n/**\n * 射线与包围盒求交\n * @param ro - 射线原点\n * @param rd - 射线方向\n * @param bmin - 包围盒左下点\n * @param bmax - 包围盒右上点\n * @returns 交点参数或者 undefined\n */\nfunction RayBoxTesting (ro: Vector3, rd: Vector3, bmin: Vector3, bmax: Vector3): number | undefined {\n let tmin = 0, tmax = 0;\n let tymin = 0, tymax = 0;\n let tzmin = 0, tzmax = 0;\n const invdirx = 1 / rd.x;\n const invdiry = 1 / rd.y;\n const invdirz = 1 / rd.z;\n\n if (invdirx >= 0) {\n tmin = (bmin.x - ro.x) * invdirx;\n tmax = (bmax.x - ro.x) * invdirx;\n } else {\n tmin = (bmax.x - ro.x) * invdirx;\n tmax = (bmin.x - ro.x) * invdirx;\n }\n\n if (invdiry >= 0) {\n tymin = (bmin.y - ro.y) * invdiry;\n tymax = (bmax.y - ro.y) * invdiry;\n } else {\n tymin = (bmax.y - ro.y) * invdiry;\n tymax = (bmin.y - ro.y) * invdiry;\n }\n\n // These lines also handle the case where tmin or tmax is NaN\n // (result of 0 * Infinity). x !== x returns true if x is NaN\n if (tmin > tymax || tymin > tmax) {\n return;\n }\n\n if (tymin > tmin || tmin !== tmin) {\n tmin = tymin;\n }\n if (tymax < tmax || tmax !== tmax) {\n tmax = tymax;\n }\n\n if (invdirz >= 0) {\n tzmin = (bmin.z - ro.z) * invdirz;\n tzmax = (bmax.z - ro.z) * invdirz;\n } else {\n tzmin = (bmax.z - ro.z) * invdirz;\n tzmax = (bmin.z - ro.z) * invdirz;\n }\n\n if (tmin > tzmax || tzmin > tmax) {\n return;\n }\n if (tzmin > tmin || tmin !== tmin) {\n tmin = tzmin;\n }\n if (tzmax < tmax || tmax !== tmax) {\n //return point closest to the ray (positive side)\n tmax = tzmax;\n }\n\n if (tmax < 0) {\n return;\n }\n\n return tmin >= 0 ? tmin : tmax;\n}\n\nconst diff = new Vector3();\nconst edge1 = new Vector3();\nconst edge2 = new Vector3();\nconst normal = new Vector3();\n\n/**\n * 射线与三角形求交\n * @param ro - 射线原点\n * @param rd - 射线方向\n * @param a - 三角形点\n * @param b - 三角形点\n * @param c - 三角形点\n * @param backfaceCulling - 是否剔除背面\n * @returns 交点参数或者 undefined\n */\nfunction RayTriangleTesting (ro: Vector3, rd: Vector3, a: Vector3, b: Vector3, c: Vector3, backfaceCulling: boolean): number | undefined {\n // Compute the offset origin, edges, and normal.\n // from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n edge1.subtractVectors(b, a);\n edge2.subtractVectors(c, a);\n normal.crossVectors(edge1, edge2);\n // Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n // E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n //\t |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n //\t |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n //\t |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\n let DdN = rd.dot(normal);\n let sign = 0;\n\n if (DdN > 0) {\n if (backfaceCulling) { return; }\n sign = 1;\n } else if (DdN < 0) {\n sign = -1;\n DdN = -DdN;\n } else {\n return;\n }\n\n diff.subtractVectors(ro, a);\n\n edge2.crossVectors(diff, edge2);\n const DdQxE2 = sign * rd.dot(edge2); // b1 < 0, no intersection\n\n if (DdQxE2 < 0) {\n return;\n }\n\n edge1.crossVectors(edge1, diff);\n const DdE1xQ = sign * rd.dot(edge1); // b2 < 0, no intersection\n\n if (DdE1xQ < 0) {\n return;\n } // b1+b2 > 1, no intersection\n\n if (DdQxE2 + DdE1xQ > DdN) {\n return;\n } // Line intersects triangle, check if ray does.\n\n const QdN = -sign * diff.dot(normal); // t < 0, no intersection\n\n if (QdN < 0) {\n return;\n } // Ray intersects triangle.\n\n return QdN / DdN;\n}\n\n/**\n * 合成点击测试,支持获取多个交点,并按照远近排序\n * @param composition - 合成\n * @param x - 点击 x 坐标\n * @param y - 点击 y 坐标\n * @returns 点击信息列表\n */\nfunction CompositionHitTest (composition: Composition, x: number, y: number): Region[] {\n const regions = composition.hitTest(x, y, true);\n const ray = composition.getHitTestRay(x, y);\n\n if (regions.length <= 0) {\n return [];\n }\n\n const o = ray.origin;\n const d = ray.direction;\n const nums = regions.map((region, index) => {\n const p = region.position;\n //const p = (region.hitPositions as vec3[]) [index];\n const t: spec.vec3 = [0, 0, 0];\n\n for (let i = 0; i < 3; i++) {\n t[i] = (p.getElement(i) - o.getElement(i)) / d.getElement(i);\n }\n\n return [index, Math.max(...t)];\n });\n\n nums.sort(function (a, b) {\n const a1 = a[1] >= 0 ? a[1] : (a[1] + 1000000000);\n const b1 = b[1] >= 0 ? b[1] : (b[1] + 1000000000);\n\n return a1 - b1;\n });\n\n return nums.map(val => {\n return regions[val[0]];\n });\n}\n\n/**\n * 切换 3D Mesh 元素的包围盒显示标志\n * @param composition - 合成\n * @param itemId - 元素 id\n */\nfunction ToggleItemBounding (composition: Composition, itemId: string) {\n composition.items?.forEach(item => {\n if (item.type === VFX_ITEM_TYPE_3D) {\n const meshComponent = item.getComponent(ModelMeshComponent);\n\n if (meshComponent) {\n const mesh = meshComponent.content;\n\n if (item.id === itemId) {\n mesh.visBoundingBox = true;\n } else {\n mesh.visBoundingBox = false;\n }\n }\n }\n });\n}\n\nexport { RayIntersectsBoxWithRotation, RayBoxTesting, RayTriangleTesting, ToggleItemBounding, CompositionHitTest };\n","import type {\n Scene,\n Composition,\n Attribute,\n GeometryProps,\n TextureSourceOptions,\n TextureSourceCubeData,\n TextureConfigOptions,\n Texture2DSourceOptionsImage,\n TextureCubeSourceOptionsImageMipmaps,\n Engine,\n math,\n VFXItemData,\n} from '@galacean/effects';\nimport {\n Player,\n spec,\n Transform,\n glContext,\n Material,\n Mesh,\n Texture,\n Geometry,\n Renderer,\n TextureSourceType,\n getDefaultTextureFactory,\n RenderPass,\n RenderPassDestroyAttachmentType,\n TextureLoadAction,\n DestroyOptions,\n loadImage,\n PLAYER_OPTIONS_ENV_EDITOR,\n GLSLVersion,\n} from '@galacean/effects';\nimport { deserializeGeometry, typedArrayFromBinary } from '@galacean/effects-helper';\nimport type { GLTFCamera, GLTFImage, GLTFLight, GLTFTexture } from '@vvfx/resource-detection';\nimport type {\n ModelAnimationOptions,\n ModelMeshOptions,\n ModelMaterialOptions,\n ModelLightOptions,\n ModelCameraOptions,\n ModelSkyboxOptions,\n ModelSkinOptions,\n ModelPrimitiveOptions,\n ModelTextureTransform,\n ModelTreeOptions,\n ModelAnimTrackOptions,\n ModelMeshComponent,\n} from '../index';\nimport { Matrix3, Matrix4, Vector3, Vector4, DEG2RAD } from '../runtime/math';\nimport type { FBOOptions } from './ri-helper';\nimport type { PMaterialBase } from '../runtime/material';\nimport type { PImageBufferData } from '../runtime/skybox';\nimport { PGlobalState } from '../runtime/common';\nimport { RayTriangleTesting } from './hit-test-helper';\nimport { PMorph } from '../runtime/animation';\nimport type { CompositionCache } from '../runtime/cache';\n\ntype Box3 = math.Box3;\ntype VertexArray = Float32Array | Int32Array | Int16Array | Int8Array | Uint32Array | Uint16Array | Uint8Array;\n\n/**\n * WebGL 辅助类,负责 WebGL 相关对象的创建\n */\nexport class WebGLHelper {\n /**\n * 立方体纹理参数\n */\n static cubemapTexConfig: TextureConfigOptions = {\n name: 'cubemap texture',\n wrapS: glContext.CLAMP_TO_EDGE,\n wrapT: glContext.CLAMP_TO_EDGE,\n magFilter: glContext.LINEAR,\n minFilter: glContext.LINEAR,\n };\n /**\n * 立方体纹理参数,带 Mipmap 滤波\n */\n static cubemapMipTexConfig: TextureConfigOptions = {\n wrapS: glContext.CLAMP_TO_EDGE,\n wrapT: glContext.CLAMP_TO_EDGE,\n magFilter: glContext.LINEAR,\n minFilter: glContext.LINEAR_MIPMAP_LINEAR,\n };\n\n /**\n * 创建二维纹理对象\n * @param engine - 引擎\n * @param image - glTF 图像参数\n * @param texture - glTF 纹理参数\n * @param isBaseColor - 是否基础颜色\n * @param tiny3dMode - 是否 Tiny3d 模式\n * @returns 二维纹理对象\n */\n static async createTexture2D (engine: Engine, image: GLTFImage, texture: GLTFTexture, isBaseColor?: boolean, tiny3dMode?: boolean): Promise<Texture> {\n if (image.imageData === undefined) {\n console.error(`createTexture2D: Invalid image data from ${image}.`);\n\n // 这里不应该发生的,做个兜底\n return Texture.create(engine, {\n name: 'createTexture2D',\n sourceType: TextureSourceType.data,\n data: {\n data: new Uint8Array([255, 255, 255, 255]),\n width: 1,\n height: 1,\n },\n });\n }\n const blob = new Blob([image.imageData], { type: image.mimeType });\n const urlCreator = window.URL || window.webkitURL;\n const imageUrl = urlCreator.createObjectURL(blob);\n const imageObj = new Image();\n\n imageObj.src = imageUrl;\n\n return new Promise(function (resolve, reject) {\n imageObj.onload = () => {\n let minFilter: number = texture.minFilter ?? glContext.LINEAR_MIPMAP_LINEAR;\n let premultiplyAlpha = false;\n\n if (tiny3dMode) {\n //if (minFilter === glContext.NEAREST_MIPMAP_LINEAR\n // || minFilter === glContext.LINEAR_MIPMAP_NEAREST) {\n minFilter = glContext.LINEAR_MIPMAP_LINEAR;\n //}\n if (!WebGLHelper.isPow2(imageObj.width) || !WebGLHelper.isPow2(imageObj.height)) {\n minFilter = glContext.LINEAR;\n }\n //\n premultiplyAlpha = isBaseColor ? false : true;\n }\n\n let generateMipmap = false;\n\n if (minFilter == glContext.NEAREST_MIPMAP_NEAREST ||\n minFilter == glContext.LINEAR_MIPMAP_NEAREST ||\n minFilter == glContext.NEAREST_MIPMAP_LINEAR ||\n minFilter == glContext.LINEAR_MIPMAP_LINEAR) {\n generateMipmap = true;\n }\n\n const res = Texture.create(engine, {\n name: 'createTexture2D',\n wrapS: texture.wrapS ?? glContext.REPEAT,\n wrapT: texture.wrapT ?? glContext.REPEAT,\n magFilter: texture.magFilter ?? glContext.LINEAR,\n minFilter,\n anisotropic: 1,\n //flipY: tex.flipY,\n premultiplyAlpha,\n sourceType: TextureSourceType.image,\n image: imageObj,\n generateMipmap,\n });\n\n resolve(res);\n urlCreator.revokeObjectURL(imageUrl);\n };\n imageObj.onerror = reject;\n });\n }\n\n /**\n * 创建纹理对象列表\n * @param engine - 引擎\n * @param images - glTF 图像列表\n * @param textures - glTF 纹理参数列表\n * @returns 纹理对象列表\n */\n static async createTextureList (engine: Engine, images: GLTFImage[], textures: GLTFTexture[]): Promise<Texture[]> {\n const outTextures = await Promise.all(\n textures.map(tex => {\n return this.createTexture2D(engine, images[tex.source], tex);\n })\n );\n\n return outTextures;\n }\n\n /**\n * 获取立方体纹理数据\n * @param images - 图像数据列表\n * @returns\n */\n static async getTextureCubeData (images: PImageBufferData[]): Promise<TextureSourceCubeData> {\n const cubeData: TextureSourceCubeData = [\n await WebHelper.loadImageFromImageData(images[0]),\n await WebHelper.loadImageFromImageData(images[1]),\n await WebHelper.loadImageFromImageData(images[2]),\n await WebHelper.loadImageFromImageData(images[3]),\n await WebHelper.loadImageFromImageData(images[4]),\n await WebHelper.loadImageFromImageData(images[5]),\n ];\n\n return cubeData;\n }\n\n /**\n * 获取立方体纹理 Mipmap 数据\n * @param images - 图像数据二维列表\n * @returns 立方体纹理数据\n */\n static async getTextureCubeMipmapData (images: PImageBufferData[][]): Promise<TextureSourceCubeData[]> {\n const mipmaps: TextureSourceCubeData[] = [];\n\n for (let i = 0; i < images.length; i++) {\n mipmaps.push(await this.getTextureCubeData(images[i]));\n }\n\n return mipmaps;\n }\n\n /**\n * 从 URL 创建立方体纹理\n * @param engine - 引擎\n * @param cubeImage - 立方体图像 URL\n * @returns 纹理对象\n */\n static async createTextureCubeFromURL (engine: Engine, cubeImage: string[]): Promise<Texture> {\n const textureOptions = await getDefaultTextureFactory().loadSource(\n {\n type: TextureSourceType.image,\n target: glContext.TEXTURE_CUBE_MAP,\n map: cubeImage,\n },\n this.cubemapTexConfig,\n );\n\n return Texture.create(engine, textureOptions);\n }\n\n /**\n * 从 URL 创建带 Mipmap 立方体纹理\n * @param engine - 引擎\n * @param cubeImages - 立方体 Mipmap 图像 URL\n * @returns 纹理对象\n */\n static async createTextureCubeMipmapFromURL (engine: Engine, cubeImages: string[][]): Promise<Texture> {\n const textureOptions = await getDefaultTextureFactory().loadSource(\n {\n type: TextureSourceType.mipmaps,\n target: glContext.TEXTURE_CUBE_MAP,\n maps: cubeImages,\n },\n this.cubemapMipTexConfig,\n );\n\n return Texture.create(engine, textureOptions);\n }\n\n /**\n * 从缓冲区创建立方体纹理\n * @param engine - 引擎\n * @param cubeImages - 图像缓冲区数据列表\n * @returns 纹理对象\n */\n static async createTextureCubeFromBuffer (engine: Engine, cubeImages: PImageBufferData[]): Promise<Texture> {\n const cubemap = await WebGLHelper.getTextureCubeData(cubeImages);\n\n return Texture.create(\n engine,\n {\n name: 'createTextureCubeFromBuffer',\n sourceType: TextureSourceType.image,\n cube: cubemap,\n target: glContext.TEXTURE_CUBE_MAP,\n ...this.cubemapTexConfig,\n });\n }\n\n /**\n * 从缓冲区创建带 Mipmap 立方体纹理\n * @param engine - 引擎\n * @param cubeImages - 图像缓冲区数据二维列表\n * @param level0Size - 第 0 层 Mip 的图像大小\n * @returns 纹理对象\n */\n static async createTextureCubeMipmapFromBuffer (engine: Engine, cubeImages: PImageBufferData[][], level0Size: number): Promise<Texture> {\n const mipmaps = await WebGLHelper.getTextureCubeMipmapData(cubeImages);\n //\n let mipCount = 0;\n\n while (Math.pow(2, mipCount) < level0Size) {\n ++mipCount;\n }\n\n while (mipmaps.length <= mipCount) {\n const index = Math.pow(2, mipCount - mipmaps.length);\n const url = `https://gw.alipayobjects.com/zos/gltf-asset/67896749597915/img${index}.png`;\n const imageData = await loadImage(url);\n\n mipmaps.push([imageData, imageData, imageData, imageData, imageData, imageData]);\n }\n\n return Texture.create(\n engine,\n {\n name: 'createTextureCubeMipmapFromBuffer',\n sourceType: TextureSourceType.mipmaps,\n mipmaps,\n target: glContext.TEXTURE_CUBE_MAP,\n ...this.cubemapMipTexConfig,\n });\n }\n\n /**\n * 获取纹理对象\n * @param index - 索引\n * @param textures - 纹理数组\n * @returns 纹理获取或 undefined\n */\n static getTexture (index: number, textures: Texture[]): Texture | null {\n if (index < 0 || index >= textures.length) {\n return null;\n } else {\n return textures[index];\n }\n }\n\n /**\n * 从图像创建纹理\n * @param engine - 引擎\n * @param image - HTML 图像元素\n * @returns\n */\n static createTextureFromImage (engine: Engine, image: HTMLImageElement | HTMLCanvasElement): Texture {\n const options: TextureSourceOptions = {\n name: 'createTextureFromImage',\n image,\n sourceType: TextureSourceType.image,\n flipY: false,\n magFilter: glContext.LINEAR,\n minFilter: glContext.LINEAR,\n wrapT: glContext.REPEAT,\n wrapS: glContext.REPEAT,\n };\n\n return Texture.create(engine, options);\n }\n\n /**\n * 创建渲染 Pass\n * @param renderer - 渲染器\n * @param name - 名称\n * @param priority - 优先级\n * @param meshData - Mesh 数据或数据列表\n * @param fboOpts - FBO 参数\n * @returns\n */\n static createRenderPass (renderer: Renderer, name: string, priority: number, meshData: Mesh | Mesh[], fboOpts: FBOOptions): RenderPass {\n const meshList = meshData instanceof Mesh ? [meshData] : meshData;\n\n return new RenderPass(renderer, {\n name,\n priority,\n attachments: fboOpts.colorAttachments,\n depthStencilAttachment: fboOpts.depthAttachment,\n clearAction: {\n clearDepth: 1,\n clearStencil: 0,\n clearColor: [0, 0, 0, 0],\n colorAction: TextureLoadAction.clear,\n depthAction: TextureLoadAction.clear,\n },\n // storeAction: {\n // colorAction: TextureStoreAction.store,\n // },\n meshes: meshList,\n viewport: fboOpts.viewport,\n });\n }\n\n /**\n * 删除纹理\n * @param texture - 纹理对象\n */\n static deleteTexture (texture: Texture) {\n texture.dispose();\n }\n\n /**\n * 删除 Mesh\n * @param mesh - Mesh 对象\n */\n static deleteMesh (mesh: Mesh) {\n mesh.dispose({\n geometries: DestroyOptions.destroy,\n material: {\n textures: DestroyOptions.destroy,\n },\n });\n }\n\n /**\n * 删除几何\n * @param geometry - 几何体\n */\n static deleteGeometry (geometry: Geometry) {\n geometry.dispose();\n }\n\n /**\n * 删除渲染 Pass\n * @param pass - 渲染 Pass\n */\n static deleteRenderPass (pass: RenderPass) {\n pass.dispose({\n meshes: {\n geometries: DestroyOptions.destroy,\n material: {\n textures: DestroyOptions.destroy,\n },\n },\n depthStencilAttachment: RenderPassDestroyAttachmentType.force,\n colorAttachment: RenderPassDestroyAttachmentType.force,\n semantics: DestroyOptions.destroy,\n });\n }\n\n /**\n * 返回 Mesh 是否半透明\n * @param component - ModelMeshComponent 对象\n * @return 是否半透明\n */\n static isTransparentMesh (component: ModelMeshComponent): boolean {\n return component.material.blending === true;\n }\n\n /**\n * renderer 是否支持 Float 纹理\n * @param engine - 引擎对象\n * @returns\n */\n static isSupportFloatTexture (engine: Engine): boolean {\n const capability = engine.gpuCapability;\n\n return capability.detail.floatTexture !== 0;\n }\n\n /**\n * renderer 是否支持 HalfFloat 纹理\n * @returns\n */\n static isSupportHalfFloatTexture (engine: Engine): boolean {\n const capability = engine.gpuCapability;\n\n return capability.detail.halfFloatTexture !== 0;\n }\n\n /**\n * 是否 2 的幂次\n * @param v - 数值\n * @returns\n */\n static isPow2 (v: number): boolean {\n return !(v & (v - 1)) && (!!v);\n }\n}\n\n/**\n * Mesh 辅助类,负责 Mesh 相关的基础对象创建\n */\nexport class MeshHelper {\n /**\n * 创建滤波 Mesh\n * @param engine - 引擎\n * @param name - 名称\n * @param material - 3D 材质\n * @returns Mesh 对象\n */\n static createFilterMesh (engine: Engine, name: string, material: PMaterialBase): Mesh {\n const globalState = PGlobalState.getInstance();\n const vertexShader = material.vertexShaderCode;\n const fragmentShader = material.fragmentShaderCode;\n const geometry = Geometry.create(engine, MeshHelper.getPlaneGeometry());\n const isWebGL2 = engine.gpuCapability.level === 2;\n const effectsMaterial = Material.create(\n engine,\n {\n shader: {\n vertex: vertexShader,\n fragment: fragmentShader,\n shared: globalState.shaderShared,\n glslVersion: isWebGL2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n },\n }\n );\n\n material.setMaterialStates(effectsMaterial);\n\n return Mesh.create(\n engine,\n {\n name,\n worldMatrix: Matrix4.fromIdentity(),\n material: effectsMaterial,\n geometry,\n }\n );\n }\n\n /**\n * 获取平面的几何参数\n * @returns 几何参数\n */\n static getPlaneGeometry (): GeometryProps {\n const data = MeshHelper.getPlaneVertexArray();\n\n return {\n attributes: {\n aPos: {\n type: glContext.FLOAT,\n size: 3,\n data,\n stride: Float32Array.BYTES_PER_ELEMENT * 8,\n offset: 0,\n },\n aUV: {\n type: glContext.FLOAT,\n size: 2,\n stride: Float32Array.BYTES_PER_ELEMENT * 8,\n offset: Float32Array.BYTES_PER_ELEMENT * 3,\n dataSource: 'aPos',\n },\n aNormal: {\n type: glContext.FLOAT,\n size: 3,\n stride: Float32Array.BYTES_PER_ELEMENT * 8,\n offset: Float32Array.BYTES_PER_ELEMENT * 5,\n dataSource: 'aPos',\n },\n },\n drawStart: 0,\n drawCount: data.length / 8,\n };\n }\n\n /**\n * 获取平面顶点数组\n * @returns 浮点数组\n */\n static getPlaneVertexArray (): Float32Array {\n const halfSize = 1;\n\n return new Float32Array([\n -halfSize, -halfSize, 0, 0, 0, 0, 0, 1,\n halfSize, -halfSize, 0, 1, 0, 0, 0, 1,\n halfSize, halfSize, 0, 1, 1, 0, 0, 1,\n\n -halfSize, -halfSize, 0, 0, 0, 0, 0, 1,\n halfSize, halfSize, 0, 1, 1, 0, 0, 1,\n -halfSize, halfSize, 0, 0, 1, 0, 0, 1,\n ]);\n }\n}\n\nexport interface EffectsSceneInfo {\n loadSkybox?: boolean,\n}\n\n/**\n * 3D 插件辅助类,为插件提供基础的函数\n */\nexport class PluginHelper {\n /**\n * 创建 3D 灯光参数,从 glTF 灯光参数\n * @param light - glTF 灯光参数\n * @returns 3D 灯光参数\n */\n static createLightOptions (light: GLTFLight): ModelLightOptions {\n const color = light.color ?? [255, 255, 255, 255];\n\n if (light.type === 'point') {\n return {\n color,\n intensity: light.intensity ?? 1.0,\n //\n lightType: 'point',\n range: light.range ?? 0,\n };\n } else if (light.type === 'spot') {\n return {\n color,\n intensity: light.intensity ?? 1.0,\n //\n lightType: 'spot',\n range: light.range ?? 0,\n innerConeAngle: light.innerConeAngle ?? 0,\n outerConeAngle: light.outerConeAngle ?? Math.PI / 4.0,\n };\n } else { // \"directional\"\n return {\n color,\n intensity: light.intensity ?? 1.0,\n //\n lightType: 'directional',\n };\n }\n }\n\n /**\n * 创建 3D 相机参数,从 glTF 相机参数\n * @param camera - glTF 相机参数\n * @returns 3D 相机参数\n */\n static createCameraOptions (camera: GLTFCamera): ModelCameraOptions | undefined {\n if (camera.perspective === undefined) { return; }\n\n const p = camera.perspective;\n const options: ModelCameraOptions = {\n near: p.znear,\n far: p.zfar ?? 1000,\n fov: p.yfov,\n clipMode: 0,\n };\n\n return options;\n }\n\n /**\n * 转成播放器中 [0, 255] 区间的颜色值\n * @param color - RGB 颜色值\n * @returns RGB 颜色值\n */\n static toPlayerColor3 (color: spec.vec3): spec.vec3 {\n // [0, 1] => [0, 255]\n return [\n this.scaleTo255(color[0]),\n this.scaleTo255(color[1]),\n this.scaleTo255(color[2]),\n ];\n }\n\n /**\n * 转成播放器中 [0, 255] 区间的颜色值\n * @param color - RGBA 颜色值\n * @returns RGBA 颜色值\n */\n static toPlayerColor4 (color: spec.vec4): spec.vec4 {\n // [0, 1] => [0, 255]\n return [\n this.scaleTo255(color[0]),\n this.scaleTo255(color[1]),\n this.scaleTo255(color[2]),\n this.scaleTo255(color[3]),\n ];\n }\n\n /**\n * 转成插件中 [0, 1] 区间的颜色值\n * @param color - RGB 颜色值\n * @returns RGB 颜色值\n */\n static toPluginColor3 (color: spec.vec3): spec.vec3 {\n // [0, 255] => [0, 1]\n return [\n this.scaleTo1(color[0]),\n this.scaleTo1(color[1]),\n this.scaleTo1(color[2]),\n ];\n }\n\n /**\n * 转成插件中 [0, 1] 区间的颜色值\n * @param color - RGBA 颜色值\n * @returns RGBA 颜色值\n */\n static toPluginColor4 (color: spec.vec4): spec.vec4 {\n // [0, 255] => [0, 1]\n return [\n this.scaleTo1(color[0]),\n this.scaleTo1(color[1]),\n this.scaleTo1(color[2]),\n this.scaleTo1(color[3]),\n ];\n }\n\n /**\n * 创建 UV 变换矩阵,从 UV 变换参数中\n * @param stValue - UV 的缩放和平移参数\n * @param rotateValue - UV 的旋转参数\n * @returns 3阶变换矩阵\n */\n static createUVTransform (material: Material, stName: string, rotateName: string): Matrix3 {\n const stValue = material.getVector4(stName);\n const rotateValue = material.getFloat(rotateName);\n\n const res = Matrix3.fromIdentity();\n\n if (stValue) {\n res.setFromArray([\n 1, 0, 0,\n 0, 1, 0,\n stValue.z, stValue.w, 1,\n ]);\n }\n\n const temp = new Matrix3();\n\n if (rotateValue) {\n const cosTheta = Math.cos(rotateValue);\n const sinTheta = Math.sin(rotateValue);\n\n temp.setFromArray([\n cosTheta, sinTheta, 0,\n -sinTheta, cosTheta, 0,\n 0, 0, 1,\n ]);\n res.multiply(temp);\n }\n\n if (stValue) {\n temp.setFromArray([\n stValue.x, 0, 0,\n 0, stValue.y, 0,\n 0, 0, 1,\n ]);\n res.multiply(temp);\n }\n\n res.transpose();\n\n return res;\n }\n\n /**\n * 获取截断后的数值\n * @param val - 数值\n * @param minv - 最小值\n * @param maxv - 最大值\n * @returns\n */\n static clamp (val: number, minv: number, maxv: number): number {\n return Math.max(Math.min(val, maxv), minv);\n }\n\n /**\n * 转换成 [0, 255] 区间数值\n * @param val - [0, 1] 区间数值\n * @returns\n */\n static scaleTo255 (val: number): number {\n const intVal = Math.round(val * 255);\n\n return Math.max(0, Math.min(intVal, 255));\n }\n\n /**\n * 转换成 [0, 1] 区间数值\n * @param val - [0, 255] 区间数值\n * @returns\n */\n static scaleTo1 (val: number): number {\n const floatVal = val / 255.0;\n\n return Math.max(0.0, Math.min(floatVal, 1.0));\n }\n\n /**\n * 根据相机的位置、Y 轴旋转角度和目标点位置来计算相机变换,\n * 使得相机能够专注于目标点上\n * @param cameraPosition - 相机位置\n * @param YRotationAngle - Y 轴旋转角度\n * @param targetPoint - 目标点\n * @returns 相机变换\n */\n static focusOnPoint (cameraPosition: spec.vec3, YRotationAngle: number, targetPoint: spec.vec3) {\n const camPos = Vector3.fromArray(cameraPosition);\n const targetPos = Vector3.fromArray(targetPoint);\n const deltaPos = new Vector3().copyFrom(camPos).subtract(targetPos);\n const rotationMat = Matrix4.fromRotationAxis(new Vector3(0, 1, 0), YRotationAngle * DEG2RAD);\n\n rotationMat.transformPoint(deltaPos);\n const newCamPos = deltaPos.clone().add(targetPos);\n const viewMatrix = new Matrix4().lookAt(newCamPos, targetPos, new Vector3(0, 1, 0)).invert();\n const effectsTransform = new Transform();\n\n effectsTransform.setValid(true);\n effectsTransform.cloneFromMatrix(viewMatrix);\n\n return effectsTransform;\n }\n\n /**\n * 场景预处理,在移动端 3D 插件会对场景进行预处理,调整纹理参数\n * @param scene - 场景\n * @param runtimeEnv - 运行时环境\n * @param compatibleMode - 兼容模式\n * @param autoAdjustScene - 是否自动调整\n * @returns 场景信息描述\n */\n static preprocessScene (scene: Scene, runtimeEnv: string, compatibleMode: string): EffectsSceneInfo {\n const deviceEnv = (runtimeEnv !== PLAYER_OPTIONS_ENV_EDITOR);\n const tiny3dMode = (compatibleMode === 'tiny3d');\n // 默认skybox如何处理需要讨论\n const jsonScene = scene.jsonScene;\n\n if (!(jsonScene && jsonScene.textures && jsonScene.materials)) {\n // 安全检查\n return {};\n }\n\n const dataMap: Record<string, TextureSourceOptions> = {};\n\n scene.textureOptions.forEach(tex => {\n const id = tex.id;\n\n if (id) {\n dataMap[id] = tex;\n }\n });\n\n let loadSkybox = false;\n\n if (deviceEnv) {\n jsonScene.materials.forEach(mat => {\n this.preprocessTextureOptions(dataMap, mat.textures['_BaseColorSampler'], true, tiny3dMode);\n this.preprocessTextureOptions(dataMap, mat.textures['_MetallicRoughnessSampler'], false, tiny3dMode);\n this.preprocessTextureOptions(dataMap, mat.textures['_NormalSampler'], false, tiny3dMode);\n this.preprocessTextureOptions(dataMap, mat.textures['_OcclusionSampler'], false, tiny3dMode);\n this.preprocessTextureOptions(dataMap, mat.textures['_EmissiveSampler'], false, tiny3dMode);\n });\n jsonScene.components.forEach(comp => {\n if (comp.dataType === spec.DataType.SkyboxComponent) {\n loadSkybox = true;\n const skybox = comp as spec.SkyboxComponentData;\n\n if (skybox.diffuseImage) {\n this.preprocessTextureOptions(dataMap, skybox.diffuseImage, false, tiny3dMode);\n }\n if (skybox.specularImage) {\n this.preprocessTextureOptions(dataMap, skybox.specularImage, false, tiny3dMode);\n }\n }\n });\n }\n\n return { loadSkybox };\n }\n\n /**\n * 纹理参数预处理,设置环绕模式和滤波器\n * @param index - 纹理索引\n * @param textures - 纹理数组\n * @param isBaseColor - 是否基础颜色\n * @param tiny3dMode - 是否 Tiny3d 模式\n * @returns\n */\n static preprocessTextureOptions (dataMap: Record<string, TextureSourceOptions>, textureInfo: spec.MaterialTextureProperty | spec.DataPath, isBaseColor: boolean, tiny3dMode: boolean) {\n if (!tiny3dMode || !textureInfo) {\n return;\n }\n\n let texId;\n\n if ('texture' in textureInfo) {\n texId = textureInfo.texture.id;\n } else {\n texId = textureInfo.id;\n }\n\n if (!texId) {\n return;\n }\n\n const texOptions = dataMap[texId];\n\n if (!texOptions) {\n return;\n }\n\n if (texOptions.target === undefined || texOptions.target === glContext.TEXTURE_2D) {\n texOptions.wrapS = glContext.REPEAT;\n texOptions.wrapT = glContext.REPEAT;\n texOptions.magFilter = glContext.LINEAR;\n texOptions.minFilter = glContext.LINEAR_MIPMAP_LINEAR;\n if (!isBaseColor) {\n texOptions.premultiplyAlpha = true;\n }\n const newOptions = texOptions as Texture2DSourceOptionsImage;\n\n newOptions.generateMipmap = true;\n const image = newOptions.image;\n\n if (image && image.width && image.height) {\n if (!WebGLHelper.isPow2(image.width) || !WebGLHelper.isPow2(image.height)) {\n texOptions.minFilter = glContext.LINEAR;\n }\n }\n } else if (texOptions.target === glContext.TEXTURE_CUBE_MAP) {\n texOptions.wrapS = glContext.CLAMP_TO_EDGE;\n texOptions.wrapT = glContext.CLAMP_TO_EDGE;\n if ((texOptions as TextureCubeSourceOptionsImageMipmaps).mipmaps !== undefined) {\n if ((texOptions as TextureCubeSourceOptionsImageMipmaps).mipmaps.length === 1) {\n texOptions.magFilter = glContext.LINEAR;\n texOptions.minFilter = glContext.LINEAR;\n } else {\n texOptions.magFilter = glContext.LINEAR;\n texOptions.minFilter = glContext.LINEAR_MIPMAP_LINEAR;\n }\n } else {\n texOptions.magFilter = glContext.LINEAR;\n texOptions.minFilter = glContext.LINEAR;\n }\n }\n }\n\n /**\n * 设置 3D 元素参数,在播放器创建 3D 元素前\n * @param scene - 场景\n * @param cache - 缓存\n * @param composition - 合成\n * @returns\n */\n static setupItem3DOptions (scene: Scene, cache: CompositionCache, composition: Composition) {\n if (scene === undefined || scene.bins.length <= 0) {\n return;\n }\n\n const { jsonScene } = scene;\n const compIndexSet: Set<number> = new Set();\n\n if (jsonScene.compositionId === undefined) {\n compIndexSet.add(0);\n }\n\n jsonScene.compositions.forEach((comp, index) => {\n if (comp.id === jsonScene.compositionId || composition.refCompositionProps.has(comp.id)) {\n compIndexSet.add(index);\n }\n });\n\n compIndexSet.forEach(compIndex => {\n const sceneComp = jsonScene.compositions[compIndex];\n\n sceneComp.items.forEach(data => {\n const itemId = data.id;\n const item = composition.getEngine().jsonSceneData[itemId] as VFXItemData;\n\n if (item.type === spec.ItemType.mesh) {\n const meshItem = item as spec.ModelMeshItem<'json'>;\n const skin = meshItem.content.options.skin;\n const primitives = meshItem.content.options.primitives;\n\n primitives.forEach((prim, primId) => {\n if (prim.geometry instanceof Geometry) {\n // 可能已经创建,直接返回\n return;\n }\n\n const name = `Geom_C${compIndex}_I${itemId}_P${primId}`;\n const riGeometry = cache.getOrCreateGeometry(name, prim.geometry, scene.bins);\n const studioPrim = prim as spec.PrimitiveOptions<'studio'>;\n\n studioPrim.geometry = riGeometry;\n const material = prim.material;\n\n if (material.type === spec.MaterialType.pbr) {\n const studioMat = studioPrim.material as spec.MaterialPBROptions<'studio'>;\n\n studioMat.baseColorTexture = this.getTextureObj(composition.textures, material.baseColorTexture);\n studioMat.metallicRoughnessTexture = this.getTextureObj(composition.textures, material.metallicRoughnessTexture);\n studioMat.normalTexture = this.getTextureObj(composition.textures, material.normalTexture);\n studioMat.occlusionTexture = this.getTextureObj(composition.textures, material.occlusionTexture);\n studioMat.emissiveTexture = this.getTextureObj(composition.textures, material.emissiveTexture);\n } else {\n const studioMat = studioPrim.material as spec.MaterialUnlitOptions<'studio'>;\n\n studioMat.baseColorTexture = this.getTextureObj(composition.textures, material.baseColorTexture);\n }\n });\n\n if (skin !== undefined && skin.inverseBindMatrices !== undefined) {\n const studioSkin = skin as any as spec.SkinOptions<'studio'>;\n const inverseBindMatrices = typedArrayFromBinary(scene.bins, skin.inverseBindMatrices);\n\n if (inverseBindMatrices instanceof Float32Array) {\n studioSkin.inverseBindMatrices = inverseBindMatrices;\n } else {\n console.error(`setupItem3DOptions: Invalid inverseBindMatrices type, ${inverseBindMatrices}.`);\n }\n }\n } else if (item.type === spec.ItemType.tree) {\n const jsonItem = item as spec.ModelTreeItem<'json'>;\n const studioItem = item as spec.ModelTreeItem<'studio'>;\n const jsonAnimations = jsonItem.content.options.tree.animations;\n const studioAnimations = studioItem.content.options.tree.animations;\n\n if (jsonAnimations !== undefined && studioAnimations !== undefined) {\n jsonAnimations.forEach((jsonAnim, i) => {\n const studioAnim = studioAnimations[i];\n\n jsonAnim.tracks.forEach((jsonTrack, j) => {\n const inputArray = typedArrayFromBinary(scene.bins, jsonTrack.input);\n const outputArray = typedArrayFromBinary(scene.bins, jsonTrack.output);\n const studioTrack = studioAnim.tracks[j];\n\n if (inputArray instanceof Float32Array) {\n studioTrack.input = inputArray;\n } else {\n console.error(`setupItem3DOptions: Type of inputArray should be float32, ${inputArray}.`);\n }\n if (outputArray instanceof Float32Array) {\n studioTrack.output = outputArray;\n } else {\n console.error(`setupItem3DOptions: Type of outputArray should be float32, ${outputArray}.`);\n }\n });\n });\n }\n } else if (item.type === spec.ItemType.skybox) {\n const skybox = item as spec.ModelSkyboxItem<'json'>;\n const studioSkybox = item as spec.ModelSkyboxItem<'studio'>;\n const options = skybox.content.options;\n const studioOptions = studioSkybox.content.options;\n const specularImage = this.getTextureObj(composition.textures, options.specularImage);\n\n if (specularImage === undefined) {\n console.error(`setupItem3DOptions: skybox specualrImage is undefined, ${CheckerHelper.stringify(options)}.`);\n }\n studioOptions.specularImage = specularImage;\n //\n const diffuseImage = this.getTextureObj(composition.textures, options.diffuseImage);\n\n if (diffuseImage !== undefined) {\n studioOptions.diffuseImage = diffuseImage;\n }\n }\n });\n });\n\n }\n\n /**\n * 创建几何体,根据几何参数描述 JSON 和数据数组\n * @param engine - 引擎\n * @param geomJson - 几何参数描述 JSON\n * @param bins - 数据数组\n * @returns 几何体\n */\n static createGeometry (engine: Engine, geomJson: spec.GeometryOptionsJSON, bins: ArrayBuffer[]): Geometry {\n const geomOptions = deserializeGeometry(geomJson, bins);\n const attributes: Record<string, Attribute> = {};\n\n // 兼容代码,解决 attribute 的名称问题\n for (const attrib in geomOptions.attributes) {\n const attribData = geomOptions.attributes[attrib];\n const name = this.getAttributeName(attrib);\n\n attributes[name] = attribData;\n }\n geomOptions.attributes = attributes;\n\n return Geometry.create(engine, geomOptions);\n }\n\n /**\n * 索引数组类型转换\n * @param type - 类型\n * @param array - 索引数组\n * @returns 索引数组\n */\n static getIndexArray (type: number, array: spec.TypedArray) {\n switch (type) {\n case WebGLRenderingContext['UNSIGNED_INT']:\n return array as Uint32Array;\n case WebGLRenderingContext['UNSIGNED_SHORT']:\n return array as Uint16Array;\n case WebGLRenderingContext['UNSIGNED_BYTE']:\n return array as Uint8Array;\n default:\n console.error(`Invalid index attribute type ${type}.`);\n }\n }\n\n /**\n * 属性名称转换\n * @param name - 旧名称\n * @returns 新名称\n */\n static getAttributeName (name: string): string {\n switch (name) {\n case 'POSITION': return 'aPos';\n case 'NORMAL': return 'aNormal';\n case 'TANGENT': return 'aTangent';\n case 'TEXCOORD_0': return 'aUV';\n case 'TEXCOORD_1': return 'aUV2';\n case 'JOINTS_0': return 'aJoints';\n case 'WEIGHTS_0': return 'aWeights';\n }\n\n if (!name.startsWith('a')) {\n // aPos, aNormal, aTangent,\n // aUV, aUV2, aJoints, aWeights\n // aTargetXXX\n console.warn(`Unknown attribute name: ${name}.`);\n }\n\n return name;\n }\n\n /**\n * 获取纹理对象\n * @param textures - 纹理数组\n * @param index - 索引\n * @returns\n */\n static getTextureObj (textures: Texture[], index?: number): Texture | null {\n if (typeof index !== 'number') {\n return null;\n }\n\n if (index < 0 || index >= textures.length) {\n console.error(`Invalid index for textures: ${index}, ${textures.length}.`);\n }\n\n return textures[index];\n }\n}\n\n/**\n * Web 辅助类,负责 Web 相关的基础功能\n */\nexport class WebHelper {\n /**\n * 获取图像文件名,从 URL 链接中\n * @param url - 链接\n * @param ext - 扩展名\n * @returns\n */\n static getImageFileName (url: string, ext?: string): string {\n const begin = url.lastIndexOf('/');\n const end = url.lastIndexOf('.');\n const substr = url.substring(begin + 1, end);\n\n return ext ? substr + ext : substr;\n }\n\n /**\n * 获取当前时间字符串\n * @returns\n */\n static getCurrnetTimeStr (): string {\n const date = new Date(Date.now());\n const timeStr = date.toLocaleString('zh-CN');\n const ms = `${date.getMilliseconds()}`;\n\n return timeStr.split(/[ /:]+/).join('') + ms.padStart(3, '0');\n }\n\n /**\n * 将 URL 链接保存成文件\n * @param url - 链接\n * @param filename - 文件名\n */\n static saveFileForURL (url: string, filename: string) {\n const a = document.createElement('a');\n\n a.setAttribute('download', filename);\n a.target = '_blank';\n a.href = url;\n a.click();\n }\n\n /**\n * 创建播放器\n * @param manualRender - 是否手动渲染\n * @returns\n */\n static createPlayer (manualRender = true) {\n const canvas = document.createElement('canvas');\n\n canvas.width = 512;\n canvas.height = 512;\n\n return new Player({\n canvas,\n renderFramework: 'webgl2',\n env: PLAYER_OPTIONS_ENV_EDITOR,\n renderOptions: {\n willCaptureImage: true,\n },\n manualRender,\n });\n }\n\n /**\n * 休眠\n * @param ms - 时间,单位是毫秒\n * @returns\n */\n static async sleep (ms: number) {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n /**\n * 从 glTF 图像加载 HTML 图像元素\n * @param image - glTF 图像\n * @returns HTML 图像元素\n */\n static async loadImageFromGLTFImage (image: GLTFImage): Promise<HTMLImageElement> {\n return loadImage(new Blob([image.imageData], { type: image.mimeType }));\n }\n\n /**\n * 从图像缓存区数据加载 HTML 图像元素\n * @param image - 图像缓冲区数据\n * @returns\n */\n static async loadImageFromImageData (image: PImageBufferData): Promise<HTMLImageElement> {\n return loadImage(new Blob([image.data], { type: image.mimeType }));\n }\n\n /**\n * 获取画布渲染的内容,转成 PNG 图片数据\n * @param canvas - HTML 画布元素\n * @returns PNG 图片数据\n */\n static async getCanvasArrayBuffer (canvas: HTMLCanvasElement): Promise<ArrayBuffer> {\n return new Promise<ArrayBuffer>(function (resolve, reject) {\n canvas.toBlob(function (b) {\n if (b) {\n resolve(b.arrayBuffer());\n } else {\n reject(new Error('No canvas blob.'));\n }\n }, 'image/png', 1);\n });\n }\n\n /**\n * 从 HTML 图像、视频或位图图像对象获取图像数据\n * @param image - HTML 图像、视频或位图图像\n * @returns PNG 图片数据\n */\n static async getImageArrayBuffer (image: HTMLImageElement | ImageBitmap | HTMLVideoElement): Promise<ArrayBuffer> {\n const cvs = document.createElement('canvas');\n\n cvs.width = image.width;\n cvs.height = image.height;\n (cvs.getContext('2d') as CanvasRenderingContext2D).drawImage(image, 0, 0);\n\n return this.getCanvasArrayBuffer(cvs);\n }\n\n /**\n * 获取画布元素渲染结果\n * @param canvas - 画布元素\n * @returns\n */\n static getCanvasImageData (canvas: HTMLCanvasElement): ImageData {\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n\n return ctx.getImageData(0, 0, canvas.width, canvas.height);\n }\n\n /**\n * 翻转图像\n * @param imageData - 图像数据\n * @returns 翻转后的图像\n */\n static flipImageData (imageData: ImageData): ImageData {\n const flipped = document.createElement('canvas');\n const ctx = flipped.getContext('2d') as CanvasRenderingContext2D;\n\n flipped.width = imageData.width;\n flipped.height = imageData.height;\n // first put the imageData\n ctx.putImageData(imageData, 0, 0);\n // because we've got transparency\n ctx.globalCompositeOperation = 'copy';\n ctx.scale(1, -1); // Y flip\n ctx.translate(0, -imageData.height); // so we can draw at 0,0\n ctx.drawImage(flipped, 0, 0);\n // now we can restore the context to defaults if needed\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.globalCompositeOperation = 'source-over';\n\n return ctx.getImageData(0, 0, flipped.width, flipped.height);\n }\n\n /**\n * 从 HTML 图像、视频或位图图像对象获取翻转后的图像数据\n * @param image - HTML 图像、视频或位图图像\n * @returns PNG 图片数据\n */\n static getImageData (image: HTMLImageElement | ImageBitmap | HTMLVideoElement): ImageData {\n const cvs = document.createElement('canvas');\n\n cvs.width = image.width;\n cvs.height = image.height;\n const ctx = cvs.getContext('2d') as CanvasRenderingContext2D;\n\n ctx.drawImage(image, 0, 0);\n\n return this.flipImageData(ctx.getImageData(0, 0, cvs.width, cvs.height));\n }\n\n /**\n * 获取位图数据,从 HTML 画布元素\n * @param canvas - HTML 画布元素\n * @returns uint8 数组\n */\n static getWebGLCanvasImageBuffer (canvas: HTMLCanvasElement): Uint8Array {\n const ctx = canvas.getContext('webgl2') as WebGL2RenderingContext;\n const pixels = new Uint8Array(canvas.width * canvas.height * 4);\n\n ctx.readPixels(0, 0, canvas.width, canvas.height, ctx.RGBA, ctx.UNSIGNED_BYTE, pixels);\n\n return pixels;\n }\n}\n\n/**\n * 顶点属性缓冲区\n */\nexport class VertexAttribBuffer {\n /**\n * 顶点数组\n */\n data!: VertexArray;\n /**\n * 分量数\n */\n component = 0;\n /**\n * 长度\n */\n length = 0;\n /**\n * 偏移\n */\n offset = 0;\n /**\n * 步长\n */\n stride = 0;\n /**\n * 类型大小\n */\n typeSize = 0;\n\n /**\n * 获取包围盒,根据顶点数据\n * @param box - 包围盒,会被修改\n * @returns 包围盒\n */\n getBoundingBox (box: Box3) {\n let index = this.offset;\n const point = new Vector3();\n\n while (index + this.component <= this.length) {\n if (this.component == 2) {\n point.set(this.data[index], this.data[index + 1], 0);\n } else {\n point.set(this.data[index], this.data[index + 1], this.data[index + 2]);\n }\n box.expandByPoint(point);\n index += this.stride;\n }\n\n return box;\n }\n}\n\nclass AttributeArray {\n data!: spec.TypedArray;\n //\n length = 0;\n offset = 0;\n stride = 0;\n //\n typeSize = 0;\n compCount = 0;\n //\n signed = false;\n compressed = false;\n compressScale = 1.0;\n\n create (inAttrib: Attribute, inArray: spec.TypedArray) {\n switch (inAttrib.type) {\n case WebGLRenderingContext['INT']:\n this.typeSize = 4;\n this.signed = true;\n this.compressScale = 1 / 2147483647.0;\n\n break;\n case WebGLRenderingContext['SHORT']:\n this.typeSize = 2;\n this.signed = true;\n this.compressScale = 1 / 32767.0;\n\n break;\n default:\n this.typeSize = 4;\n this.signed = true;\n this.compressScale = 1.0;\n }\n\n this.data = inArray;\n this.length = this.data.length;\n this.compCount = inAttrib.size;\n //\n this.offset = inAttrib.offset ?? 0;\n if (this.offset > 0) {\n if (this.offset % this.typeSize !== 0) { console.error(`Invalid offset ${this.offset}, type size ${this.typeSize}.`); }\n this.offset = this.offset / this.typeSize;\n }\n //\n this.stride = inAttrib.stride ?? 0;\n if (this.stride > 0) {\n if (this.stride % this.typeSize !== 0) { console.error(`Invalid stride ${this.stride}, type size ${this.typeSize}.`); }\n this.stride = this.stride / this.typeSize;\n } else {\n this.stride = this.compCount;\n }\n //\n this.compressed = inAttrib.normalize === true;\n }\n\n getData (index: number): [number, number, number, number] | undefined {\n let offset = this.offset;\n\n offset += index * this.stride;\n if (offset + this.compCount > this.length) { return; }\n\n let res: [number, number, number, number];\n\n if (this.compCount === 2) {\n res = [this.data[offset], this.data[offset + 1], 0, 0];\n } else if (this.compCount === 3) {\n res = [this.data[offset], this.data[offset + 1], this.data[offset + 2], 0];\n } else {\n res = [this.data[offset], this.data[offset + 1], this.data[offset + 2], this.data[offset + 3]];\n }\n\n if (this.compressed) {\n for (let i = 0; i < this.compCount; i++) {\n res[i] *= this.compressScale;\n if (this.signed) {\n res[i] = Math.max(res[i], -1.0);\n }\n }\n }\n\n return res;\n }\n\n getLength (): number {\n return Math.round((this.length - this.offset) / this.stride);\n }\n}\n\n/**\n * 几何包围盒代理类\n */\nexport class GeometryBoxProxy {\n /**\n * 渲染开始索引\n */\n drawStart = 0;\n /**\n * 渲染索引数目\n */\n drawCount = 0;\n /**\n * 索引数组\n */\n index?: spec.TypedArray;\n /**\n * 位置数组\n */\n position!: AttributeArray;\n /**\n * 关节点数组\n */\n joint?: AttributeArray;\n /**\n * 权重数组\n */\n weight?: AttributeArray;\n /**\n * 绑定矩阵数组\n */\n bindMatrices: Matrix4[] = [];\n\n /**\n * 创建函数,根据几何体和绑定矩阵数组\n * @param geometry - 几何体\n * @param bindMatrices - 绑定矩阵数组\n */\n create (geometry: Geometry, bindMatrices: Matrix4[]) {\n this.drawStart = 0;\n this.drawCount = Math.abs(geometry.getDrawCount());\n // FIXME: 需要geometry中的attributes数组,GLGeometry有这个数组,其他的没有\n // @ts-expect-error\n const attributes = geometry.attributes as Record<string, Attribute>;\n\n //\n this.index = geometry.getIndexData();\n const positionAttrib = attributes['aPos'];\n const positionArray = geometry.getAttributeData('aPos') as spec.TypedArray;\n\n this.position = new AttributeArray();\n this.position.create(positionAttrib, positionArray);\n //\n const jointAttrib = attributes['aJoints'];\n const weightAttrib = attributes['aWeights'];\n\n if (jointAttrib !== undefined && weightAttrib !== undefined) {\n const jointArray = geometry.getAttributeData('aJoints') as spec.TypedArray;\n const weightArray = geometry.getAttributeData('aWeights') as spec.TypedArray;\n\n this.joint = new AttributeArray();\n this.joint.create(jointAttrib, jointArray);\n this.weight = new AttributeArray();\n this.weight.create(weightAttrib, weightArray);\n }\n this.bindMatrices = bindMatrices;\n }\n\n /**\n * 获取包围盒,如果有骨骼动画,需要先更新位置\n * @param box - 包围盒,会被修改\n * @returns 包围盒\n */\n getBoundingBox (box: Box3) {\n box.makeEmpty();\n const skinMat = new Matrix4();\n const hasAnim = this.joint !== undefined && this.weight !== undefined && this.bindMatrices.length > 0;\n\n const indexSet: Set<number> = new Set();\n\n if (this.index !== undefined) {\n for (let i = 0; i < this.drawCount; i++) {\n const j = this.drawStart + i;\n\n if (j < this.index.length) {\n indexSet.add(this.index[j]);\n }\n }\n } else {\n for (let i = 0; i < this.drawCount; i++) {\n indexSet.add(this.drawStart + i);\n }\n }\n\n indexSet.forEach(index => {\n const posData = this.position.getData(index);\n\n if (posData !== undefined) {\n const posVec = Vector3.fromArray(posData);\n\n if (hasAnim) {\n const jointData = this.joint?.getData(index);\n const weightData = this.weight?.getData(index);\n\n if (jointData !== undefined && weightData !== undefined) {\n skinMat.setZero();\n let findError = false;\n\n for (let i = 0; i < 4; i++) {\n if (weightData[i] === 0) {\n continue;\n }\n\n if (jointData[i] < 0 || jointData[i] >= this.bindMatrices.length) {\n findError = true;\n\n break;\n }\n\n const bindMat = this.bindMatrices[jointData[i]];\n\n skinMat.addScaledMatrix(bindMat, weightData[i]);\n }\n\n if (!findError) {\n const resVec = skinMat.transformVector4(new Vector4(posVec.x, posVec.y, posVec.z, 1.0));\n\n if (Math.abs(resVec.w) > 1e-4) {\n resVec.multiply(1.0 / resVec.w);\n posVec.set(resVec.x, resVec.y, resVec.z);\n }\n }\n }\n }\n\n box.expandByPoint(posVec);\n }\n });\n\n return box;\n }\n}\n\n/**\n * 点击测试代理类,\n */\nexport class HitTestingProxy {\n /**\n * 渲染开始索引\n */\n drawStart = 0;\n /**\n * 渲染索引数目\n */\n drawCount = 0;\n /**\n * 索引数组\n */\n index?: spec.TypedArray;\n /**\n * 位置数组\n */\n position!: AttributeArray;\n /**\n * 关节点数组\n */\n joint?: AttributeArray;\n /**\n * 权重数组\n */\n weight?: AttributeArray;\n /**\n * 是否双面\n */\n doubleSided = false;\n /**\n * 绑定矩阵数组\n */\n bindMatrices: Matrix4[] = [];\n /**\n * 是否有动画\n */\n hasAnimation = false;\n /**\n * 蒙皮矩阵\n */\n skinMatrix = new Matrix4();\n\n /**\n * 创建对象,传入几何体、是否双面和绑定矩阵列表\n * @param geometry - 几何体\n * @param doubleSided - 是否双面\n * @param bindMatrices - 绑定矩阵列表\n */\n create (geometry: Geometry, doubleSided: boolean, bindMatrices: Matrix4[]) {\n this.drawStart = 0;\n this.drawCount = Math.abs(geometry.getDrawCount());\n // FIXME: 需要geometry中的attributes数组,GLGeometry有这个数组,其他的没有\n // @ts-expect-error\n const attributes = geometry.attributes as Record<string, Attribute>;\n\n //\n this.index = geometry.getIndexData();\n const positionAttrib = attributes['aPos'];\n const positionArray = geometry.getAttributeData('aPos') as spec.TypedArray;\n\n this.position = new AttributeArray();\n this.position.create(positionAttrib, positionArray);\n //\n const jointAttrib = attributes['aJoints'];\n const weightAttrib = attributes['aWeights'];\n\n if (jointAttrib !== undefined && weightAttrib !== undefined) {\n const jointArray = geometry.getAttributeData('aJoints') as spec.TypedArray;\n const weightArray = geometry.getAttributeData('aWeights') as spec.TypedArray;\n\n this.joint = new AttributeArray();\n this.joint.create(jointAttrib, jointArray);\n this.weight = new AttributeArray();\n this.weight.create(weightAttrib, weightArray);\n }\n this.doubleSided = doubleSided;\n this.bindMatrices = bindMatrices;\n this.hasAnimation = this.joint !== undefined && this.weight !== undefined && this.bindMatrices.length > 0;\n }\n\n /**\n * 点击测试,返回射线参数值\n * @param rayOrigin - 射线原点\n * @param rayDirection - 射线方向\n * @returns 射线参数值或 undefined\n */\n getHitPoint (rayOrigin: Vector3, rayDirection: Vector3): number | undefined {\n let mint: number | undefined;\n const p0 = new Vector3(), p1 = new Vector3(), p2 = new Vector3();\n const q0 = new Vector4(), q1 = new Vector4(), q2 = new Vector4();\n const backfaceCulling = !this.doubleSided;\n\n for (let i = 0; i + 2 < this.drawCount; i += 3) {\n let i0 = this.drawStart + i;\n let i1 = this.drawStart + i + 1;\n let i2 = this.drawStart + i + 2;\n\n if (this.index !== undefined) {\n i0 = this.index[i0];\n i1 = this.index[i1];\n i2 = this.index[i2];\n }\n\n const r0 = this.getPosition(i0, p0, q0);\n const r1 = this.getPosition(i1, p1, q1);\n const r2 = this.getPosition(i2, p2, q2);\n\n if (!r0 || !r1 || !r2) {\n continue;\n }\n\n const t = RayTriangleTesting(rayOrigin, rayDirection, r0, r1, r2, backfaceCulling);\n\n if (t === undefined) {\n continue;\n }\n\n if (mint === undefined || mint > t) {\n mint = t;\n }\n }\n\n return mint;\n }\n\n /**\n * 获取顶点位置\n * @param index - 顶点索引\n * @param vec3 - 顶点位置,会被修改和返回\n * @param vec4 - 临时变量,用于骨骼动画时的计算\n * @returns 顶点位置\n */\n getPosition (index: number, vec3: Vector3, vec4: Vector4): Vector3 | null {\n const posData = this.position.getData(index);\n\n if (posData === undefined) {\n return null;\n }\n\n if (this.hasAnimation) {\n const jointData = this.joint?.getData(index);\n const weightData = this.weight?.getData(index);\n\n if (jointData !== undefined && weightData !== undefined) {\n const skinMat = this.skinMatrix;\n\n skinMat.setZero();\n for (let i = 0; i < 4; i++) {\n if (weightData[i] === 0) { continue; }\n\n const bindMat = this.bindMatrices[jointData[i]];\n\n skinMat.addScaledMatrix(bindMat, weightData[i]);\n }\n\n vec4.set(posData[0], posData[1], posData[2], 1.0);\n const resVec = skinMat.transformVector4(vec4);\n const scale = 1.0 / resVec.w;\n\n vec3.set(resVec.x * scale, resVec.y * scale, resVec.z * scale);\n }\n } else {\n vec3.set(posData[0], posData[1], posData[2]);\n }\n\n return vec3;\n }\n\n}\n\n/**\n * 检查辅助类,负责 3D 插件元素数据格式检查和报错\n */\nexport class CheckerHelper {\n /**\n * 检查数值\n * @param v - 数值\n * @returns\n */\n static checkNumber (v: number): boolean {\n return typeof v === 'number';\n }\n\n /**\n * 检查数值或未定义\n * @param v - 数值或未定义\n * @returns\n */\n static checkNumberUndef (v?: number): boolean {\n return v === undefined ? true : this.checkNumber(v);\n }\n\n /**\n * 检查 0 和 1 之间数值\n * @param v - 数值\n * @returns\n */\n static checkNumber01 (v: number): boolean {\n return this.checkNumber(v) && v >= 0 && v <= 1;\n }\n\n /**\n * 检查 0 和 1 之间数值或未定义\n * @param v - 数值或未定义\n * @returns\n */\n static checkNumber01Undef (v?: number): boolean {\n return v === undefined ? true : this.checkNumber01(v);\n }\n\n /**\n * 检查正数\n * @param v - 数值\n * @returns\n */\n static checkPositive (v: number): boolean {\n return this.checkNumber(v) && v > 0;\n }\n\n /**\n * 检查非负数\n * @param v - 数值\n * @returns\n */\n static checkNonnegative (v: number): boolean {\n return this.checkNumber(v) && v >= 0;\n }\n\n /**\n * 检查非负数或未定义\n * @param v - 数值\n * @returns\n */\n static checkNonnegativeUndef (v?: number): boolean {\n return v === undefined ? true : this.checkNonnegative(v);\n }\n\n /**\n * 检查布尔类型\n * @param v - 布尔值\n * @returns\n */\n static checkBoolean (v: boolean): boolean {\n return typeof v === 'boolean';\n }\n\n /**\n * 检查布尔类型或未定义\n * @param v - 布尔值或未定义\n * @returns\n */\n static checkBooleanUndef (v?: boolean): boolean {\n return v === undefined ? true : this.checkBoolean(v);\n }\n\n /**\n * 检查字符串类型\n * @param v - 字符串\n * @returns\n */\n static checkString (v: string): boolean {\n return typeof v === 'string';\n }\n\n /**\n * 检查字符串类型或未定义\n * @param v - 字符串或未定义\n * @returns\n */\n static checkStringUndef (v?: string): boolean {\n return v === undefined ? true : this.checkString(v);\n }\n\n /**\n * 检查浮点数组\n * @param v - 浮点数组\n * @returns\n */\n static checkFloat32Array (v: Float32Array): boolean {\n return v instanceof Float32Array;\n }\n\n /**\n * 检查浮点数组或未定义\n * @param v - 浮点数组或未定义\n * @returns\n */\n static checkFloat32ArrayUndef (v?: Float32Array): boolean {\n return v === undefined ? true : this.checkFloat32Array(v);\n }\n\n /**\n * 检查父节点索引\n * @param v - 数值或未定义\n * @returns\n */\n static checkParent (v?: number): boolean {\n if (v === undefined) { return true; }\n if (!this.checkNumber(v)) { return false; }\n\n return v >= 0;\n }\n\n /**\n * 检查纹理坐标\n * @param v - 纹理坐标或未定义\n * @returns\n */\n static checkTexCoord (v?: number): boolean {\n if (v === undefined) { return true; }\n if (!this.checkNumber(v)) { return false; }\n\n return v >= 0 && v <= 1;\n }\n\n /**\n * 检查二维向量\n * @param v - 二维向量\n * @returns\n */\n static checkVec2 (v: spec.vec2): boolean {\n if (!Array.isArray(v)) { return false; }\n if (v.length != 2) { return false; }\n\n return v.every(v => this.checkNumber(v));\n }\n\n /**\n * 检查二维向量或未定义\n * @param v - 二维向量或未定义\n * @returns\n */\n static checkVec2Undef (v?: spec.vec2): boolean {\n return v === undefined ? true : this.checkVec2(v);\n }\n\n /**\n * 检查三维向量\n * @param v - 三维向量\n * @returns\n */\n static checkVec3 (v: spec.vec3): boolean {\n if (!Array.isArray(v)) { return false; }\n if (v.length != 3) { return false; }\n\n return v.every(v => this.checkNumber(v));\n }\n\n /**\n * 检查三维非负向量\n * @param v - 三维向量\n * @returns\n */\n static checkNonnegative3 (v: spec.vec3): boolean {\n if (!Array.isArray(v)) { return false; }\n if (v.length != 3) { return false; }\n\n return v.every(v => this.checkNonnegative(v));\n }\n\n /**\n * 检查四维向量\n * @param v - 四维向量\n * @returns\n */\n static checkVec4 (v: spec.vec4): boolean {\n if (!Array.isArray(v)) { return false; }\n if (v.length != 4) { return false; }\n\n return v.every(v => this.checkNumber(v));\n }\n\n /**\n * 检查四维向量或未定义\n * @param v - 四维向量或未定义\n * @returns\n */\n static checkNonnegative4 (v: spec.vec4): boolean {\n if (!Array.isArray(v)) { return false; }\n if (v.length != 4) { return false; }\n\n return v.every(v => this.checkNonnegative(v));\n }\n\n /**\n * 检查数值数组\n * @param v - 数值数组\n * @returns\n */\n static checkNumberArray (v: number[]): boolean {\n if (!Array.isArray(v)) { return false; }\n\n return v.every(v => this.checkNumber(v));\n }\n\n /**\n * 检查纹理对象\n * @param v - 纹理对象\n * @returns\n */\n static checkTexture (v: Texture): boolean {\n if (v instanceof Texture) {\n if (v.isDestroyed) {\n console.error(`Texture is destroyed, ${v.name}.`);\n }\n\n return !v.isDestroyed;\n } else {\n return false;\n }\n }\n\n /**\n * 检查纹理对象或未定义\n * @param v - 纹理对象或未定义\n * @returns\n */\n static checkTextureUndef (v?: Texture): boolean {\n return v === undefined ? true : this.checkTexture(v);\n }\n\n /**\n * 检查纹理变换参数\n * @param v - 纹理变换参数\n * @returns\n */\n static checkTexTransform (v: ModelTextureTransform): boolean {\n if (!this.checkVec2Undef(v.offset)) { return false; }\n if (!this.checkNumberUndef(v.rotation)) { return false; }\n if (!this.checkVec2Undef(v.scale)) { return false; }\n\n if (v.scale !== undefined) {\n if (Math.abs(v.scale[0]) < 1e-5 || Math.abs(v.scale[1]) < 1e-5) {\n // check scale range\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * 检查纹理变换参数或未定义\n * @param v - 纹理变换参数或未定义\n * @returns\n */\n static checkTexTransformUndef (v?: ModelTextureTransform): boolean {\n return v === undefined ? true : this.checkTexTransform(v);\n }\n\n /**\n * 检查材质混合参数或未定义\n * @param v - 材质混合参数或未定义\n * @returns\n */\n static checkMatBlending (v?: spec.MaterialBlending): boolean {\n return v === undefined\n || v === spec.MaterialBlending.opaque\n || v === spec.MaterialBlending.masked\n || v === spec.MaterialBlending.translucent\n || v === spec.MaterialBlending.additive;\n }\n\n /**\n * 检查材质单双面模式或未定义\n * @param v - 材质单双面模式或未定义\n * @returns\n */\n static checkMatSide (v?: spec.SideMode): boolean {\n return v === undefined || v === spec.SideMode.BACK || v === spec.SideMode.DOUBLE || v === spec.SideMode.FRONT;\n }\n\n /**\n * 检查动画路径模式\n * @param v - 动画路径模式\n * @returns\n */\n static checkAnimPath (v: string): boolean {\n return v === 'translation' || v === 'rotation' || v === 'scale' || v === 'weights';\n }\n\n /**\n * 检查动画插值模式\n * @param v - 动画插值模式\n * @returns\n */\n static checkAnimInterp (v: string): boolean {\n return v === 'LINEAR' || v === 'STEP' || v === 'CUBICSPLINE';\n }\n\n /**\n * 检查几何体\n * @param v - 几何体\n * @param s - 蒙皮参数\n */\n static assertGeometry (v: Geometry, s?: ModelSkinOptions) {\n if (!(v instanceof Geometry)) {\n console.error(`Invalid geometry type ${this.stringify(v)}.`);\n }\n // @ts-expect-error\n if (v.isDestroyed === true) {\n console.error('Geometry object is destroyed.');\n }\n if (!this.checkNonnegative(v.getDrawStart())) {\n console.error(`Invalid geometry draw start: ${v.getDrawStart()}, ${this.stringify(v)}.`);\n }\n // // drawCount不再为负\n // if (!this.checkPositive(v.getDrawCount())) {\n // throw new Error(`Invalid geometry draw count: ${v.getDrawCount()}, ${this.stringify(v)}`);\n // }\n\n // Geometry具体内容检查,先忽略\n // const opts = v.options;\n // const drawCount = Math.abs(v.getDrawCount());\n\n // if (opts !== undefined && drawCount > 0) {\n // let maxLength = v.drawStart + drawCount;\n\n // if (opts.index !== undefined) {\n // const indexArray = opts.index.data;\n\n // if (indexArray.length < maxLength) {\n // throw new Error(`Index length(${indexArray.length}) is less than draw count(${maxLength}), ${this.stringify(v)}`);\n // }\n // let maxIndex = 0;\n\n // for (let i = 0; i < drawCount; i++) {\n // maxIndex = Math.max(indexArray[v.drawStart + i], maxIndex);\n // }\n // maxLength = maxIndex + 1;\n // }\n // const positionAttrib = opts.attributes['aPos'] as Attribute;\n\n // if (positionAttrib === undefined) {\n // throw new Error(`Position attribute is required, ${this.stringify(v)}`);\n // }\n // this.assertGeometryBuffer(v, 'aPos', maxLength);\n // this.assertGeometryBuffer(v, 'aNormal', maxLength);\n // this.assertGeometryBuffer(v, 'aTangent', maxLength);\n // this.assertGeometryBuffer(v, 'aUV', maxLength);\n // this.assertGeometryBuffer(v, 'aJoints', maxLength);\n // this.assertGeometryBuffer(v, 'aWeights', maxLength);\n\n // // 索引检查\n // if(s !== undefined){\n // const matLen = s.inverseBindMatrices?.length ?? 0;\n // if(matLen > 0){\n // const jointArray = this.createAttributeArray(v, \"aJoints\");\n // if(jointArray !== undefined){\n // for(let i = 0; i < maxLength; i++){\n // const data = jointArray.getData(i);\n // if(data === undefined) continue;\n // if(Math.max(...data) >= matLen){\n // throw new Error(`Joint index out of range: ${this.stringify(data)}, matrices: ${matLen}`);\n // }\n // }\n // }\n // }\n // }\n // }\n }\n\n /**\n * 检查几何体缓冲区\n * @param v - 几何体\n * @param name - 名称\n * @param drawCount - 渲染数目\n */\n static assertGeometryBuffer (v: Geometry, name: string, drawCount: number) {\n const attribArray = this.createAttributeArray(v, name);\n\n if (attribArray !== undefined) {\n if (attribArray.getLength() < drawCount) {\n console.error(`${name} Length(${attribArray.getLength()}) is less than draw count(${drawCount}), ${this.stringify(v)}.`);\n }\n }\n }\n\n /**\n * 创建属性数组\n * @param v - 几何体\n * @param name - 名称\n * @returns\n */\n static createAttributeArray (v: Geometry, name: string): AttributeArray | undefined {\n // @ts-expect-error\n const attributes = v.attributes;\n\n if (attributes === undefined) { return; }\n const dataAttrib = attributes[name];\n\n if (dataAttrib === undefined) { return; }\n const dataArray = v.getAttributeData(name);\n\n if (dataArray === undefined) { return; }\n //\n const attribArray = new AttributeArray();\n\n attribArray.create(dataAttrib as Attribute, dataArray);\n\n return attribArray;\n }\n\n /**\n * 检查蒙皮参数\n * @param v - 蒙皮参数\n */\n static assertModelSkinOptions (v: ModelSkinOptions) {\n if (!this.checkStringUndef(v.name)) { console.error(`Invalid skin name ${v.name}, ${this.stringify(v)}.`); }\n if (!this.checkNumberArray(v.joints)) { console.error(`Invalid skin joints ${v.joints}, ${this.stringify(v)}.`); }\n if (!this.checkNumberUndef(v.skeleton)) { console.error(`Invalid skin skeleton ${v.skeleton}, ${this.stringify(v)}.`); }\n if (!this.checkFloat32ArrayUndef(v.inverseBindMatrices)) { console.error(`Invalid skin inverseBindMatrices ${v.inverseBindMatrices}, ${this.stringify(v)}.`); }\n //\n if (v.inverseBindMatrices !== undefined) {\n if (v.inverseBindMatrices.length <= 0 || v.inverseBindMatrices.length % 16 !== 0) { console.error(`Invalid skin inverseBindMatrices length ${v.inverseBindMatrices}, ${this.stringify(v)}.`); }\n if (v.joints.length * 16 !== v.inverseBindMatrices.length) { console.error(`Mismatch: skin joints and inverseBindMatrices length, ${v.joints}, ${v.inverseBindMatrices}, ${this.stringify(v)}.`); }\n const mat = new Matrix4();\n\n for (let i = 0; i < v.inverseBindMatrices.length; i += 16) {\n for (let j = 0; j < 16; j++) {\n mat.elements[j] = v.inverseBindMatrices[i + j];\n }\n if (Math.abs(mat.determinant()) < 1e-5) {\n console.error(`Determinant of inverseBindMatrices is too small ${mat.determinant()}, index ${i / 16}, ${this.stringify(v)}.`);\n }\n }\n } else {\n if (v.joints.length <= 0) { console.error(`Invalid skin joints length ${v.joints}, ${this.stringify(v)}.`); }\n }\n }\n\n /**\n * 检查材质参数\n * @param v - 材质参数\n */\n static assertMatOptions (v: ModelMaterialOptions) {\n if (v.type === spec.MaterialType.unlit) {\n if (!this.checkString(v.name)) { console.error(`Invalid material name ${v.name}, ${this.stringify(v)}.`); }\n //\n if (!this.checkNonnegative4(v.baseColorFactor)) { console.error(`Invalid material baseColorFactor ${v.baseColorFactor}, ${this.stringify(v)}.`); }\n if (!this.checkTextureUndef(v.baseColorTexture)) { console.error(`Invalid material baseColorTexture ${v.baseColorTexture}, ${this.stringify(v)}.`); }\n if (!this.checkTexTransformUndef(v.baseColorTextureTransform)) { console.error(`Invalid material baseColorTextureTransform ${v.baseColorTextureTransform}, ${this.stringify(v)}.`); }\n if (!this.checkTexCoord(v.baseColorTextureCoordinate)) { console.error(`Invalid material baseColorTextureCoordinate ${v.baseColorTextureCoordinate}, ${this.stringify(v)}.`); }\n //\n if (!this.checkBooleanUndef(v.depthMask)) { console.error(`Invalid material depthMask ${v.depthMask}, ${this.stringify(v)}.`); }\n if (!this.checkMatBlending(v.blending)) { console.error(`Invalid material blending ${v.blending}, ${this.stringify(v)}.`); }\n if (!this.checkMatSide(v.side)) { console.error(`Invalid material side ${v.side}, ${this.stringify(v)}.`); }\n if (v.blending === spec.MaterialBlending.masked) {\n if (v.alphaCutOff === undefined) { console.error(`Material alphaCutOff is required for mask, ${this.stringify(v)}.`); }\n }\n if (!this.checkNumber01Undef(v.alphaCutOff)) { console.error(`Invalid material alphaCutOff ${v.alphaCutOff}, ${this.stringify(v)}.`); }\n } else if (v.type === spec.MaterialType.pbr) {\n if (!this.checkString(v.name)) { console.error(`Invalid material name ${v.name}, ${this.stringify(v)}.`); }\n //\n if (!this.checkNonnegative4(v.baseColorFactor)) { console.error(`Invalid material baseColorFactor ${v.baseColorFactor}, ${this.stringify(v)}.`); }\n if (!this.checkTextureUndef(v.baseColorTexture)) { console.error(`Invalid material baseColorTexture ${v.baseColorTexture}, ${this.stringify(v)}.`); }\n if (!this.checkTexTransformUndef(v.baseColorTextureTransform)) { console.error(`Invalid material baseColorTextureTransform ${v.baseColorTextureTransform}, ${this.stringify(v)}.`); }\n if (!this.checkTexCoord(v.baseColorTextureCoordinate)) { console.error(`Invalid material baseColorTextureCoordinate ${v.baseColorTextureCoordinate}, ${this.stringify(v)}.`); }\n //\n if (!this.checkBooleanUndef(v.useSpecularAA)) { console.error(`Invalid material useSpecularAA ${v.useSpecularAA}, ${this.stringify(v)}.`); }\n if (!this.checkNumber01(v.metallicFactor)) { console.error(`Invalid material metallicFactor ${v.metallicFactor}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.roughnessFactor)) { console.error(`Invalid material roughnessFactor ${v.roughnessFactor}, ${this.stringify(v)}.`); }\n if (!this.checkTextureUndef(v.metallicRoughnessTexture)) { console.error(`Invalid material metallicRoughnessTexture ${v.metallicRoughnessTexture}, ${this.stringify(v)}.`); }\n if (!this.checkTexTransformUndef(v.metallicRoughnessTextureTransform)) { console.error(`Invalid material metallicRoughnessTextureTransform ${v.metallicRoughnessTextureTransform}, ${this.stringify(v)}.`); }\n if (!this.checkTexCoord(v.metallicRoughnessTextureCoordinate)) { console.error(`Invalid material metallicRoughnessTextureCoordinate ${v.metallicRoughnessTextureCoordinate}, ${this.stringify(v)}.`); }\n //\n if (!this.checkTextureUndef(v.normalTexture)) { console.error(`Invalid material normalTexture ${v.normalTexture}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegativeUndef(v.normalTextureScale)) { console.error(`Invalid material normalTextureScale ${v.normalTextureScale}, ${this.stringify(v)}.`); }\n if (!this.checkTexTransformUndef(v.normalTextureTransform)) { console.error(`Invalid material normalTextureTransform ${v.normalTextureTransform}, ${this.stringify(v)}.`); }\n if (!this.checkTexCoord(v.normalTextureCoordinate)) { console.error(`Invalid material normalTextureCoordinate ${v.normalTextureCoordinate}, ${this.stringify(v)}.`); }\n //\n if (!this.checkTextureUndef(v.occlusionTexture)) { console.error(`Invalid material occlusionTexture ${v.occlusionTexture}, ${this.stringify(v)}.`); }\n if (!this.checkNumber01Undef(v.occlusionTextureStrength)) { console.error(`Invalid material occlusionTextureStrength ${v.occlusionTextureStrength}, ${this.stringify(v)}.`); }\n if (!this.checkTexTransformUndef(v.occlusionTextureTransform)) { console.error(`Invalid material occlusionTextureTransform ${v.occlusionTextureTransform}, ${this.stringify(v)}.`); }\n if (!this.checkTexCoord(v.occlusionTextureCoordinate)) { console.error(`Invalid material occlusionTextureCoordinate ${v.occlusionTextureCoordinate}, ${this.stringify(v)}.`); }\n //\n //\n if (!this.checkNonnegative4(v.emissiveFactor)) { console.error(`Invalid material emissiveFactor ${v.emissiveFactor}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.emissiveIntensity)) { console.error(`Invalid material emissiveIntensity ${v.emissiveIntensity}, ${this.stringify(v)}.`); }\n if (!this.checkTextureUndef(v.emissiveTexture)) { console.error(`Invalid material emissiveTexture ${v.emissiveTexture}, ${this.stringify(v)}.`); }\n if (!this.checkTexTransformUndef(v.emissiveTextureTransform)) { console.error(`Invalid material emissiveTextureTransform ${v.emissiveTextureTransform}, ${this.stringify(v)}.`); }\n if (!this.checkTexCoord(v.emissiveTextureCoordinate)) { console.error(`Invalid material emissiveTextureCoordinate ${v.emissiveTextureCoordinate}, ${this.stringify(v)}.`); }\n //\n if (!this.checkBooleanUndef(v.depthMask)) { console.error(`Invalid material depthMask ${v.depthMask}, ${this.stringify(v)}.`); }\n if (!this.checkMatBlending(v.blending)) { console.error(`Invalid material blending ${v.blending}, ${this.stringify(v)}.`); }\n if (!this.checkMatSide(v.side)) { console.error(`Invalid material side ${v.side}, ${this.stringify(v)}.`); }\n if (v.blending === spec.MaterialBlending.masked) {\n if (v.alphaCutOff === undefined) { console.error(`Material alphaCutOff is required for mask, ${this.stringify(v)}.`); }\n }\n if (!this.checkNumber01Undef(v.alphaCutOff)) { console.error(`Invalid material alphaCutOff ${v.alphaCutOff}, ${this.stringify(v)}.`); }\n } else {\n console.error(`Invalid material type ${this.stringify(v)}.`);\n }\n }\n\n /**\n * 检查 Primitive 参数\n * @param v - Primitive 参数\n * @param s - 蒙皮参数\n * @returns\n */\n static assertPrimOptions (v: ModelPrimitiveOptions, s?: ModelSkinOptions) {\n this.assertGeometry(v.geometry, s);\n this.assertMatOptions(v.material);\n\n return true;\n }\n\n /**\n * 检查 Model 插件 Mesh 参数\n * @param v - Model 插件 Mesh 参数\n */\n static assertModelMeshOptions (v: ModelMeshOptions) {\n if (!this.checkParent(v.parent)) { console.error(`Invalid mesh parent ${v.parent}, ${this.stringify(v)}.`); }\n\n if (v.skin !== undefined) { this.assertModelSkinOptions(v.skin); }\n\n const morphList: PMorph[] = [];\n\n for (let i = 0; i < v.primitives.length; i++) {\n const prim = v.primitives[i];\n\n if (!this.assertPrimOptions(prim)) {\n console.error(`Invalid primitive ${prim}, ${this.stringify(v)}.`);\n }\n const morph = new PMorph();\n\n morph.create(prim.geometry);\n morphList.push(morph);\n }\n\n for (let i = 1; i < morphList.length; i++) {\n const morph0 = morphList[i - 1];\n const morph1 = morphList[i];\n\n if (!morph0.equals(morph1)) {\n console.error(`Morph states mismatch: ${this.stringify(morph0)}, ${this.stringify(morph1)}, ${this.stringify(v)}.`);\n }\n }\n\n if (!this.checkBooleanUndef(v.hide)) { console.error(`Invalid mesh hide ${v.hide}, ${this.stringify(v)}.`); }\n }\n\n /**\n * 检查 Model 插件相机参数\n * @param v - Model 插件相机参数\n */\n static assertModelCameraOptions (v: ModelCameraOptions) {\n if (!this.checkParent(v.parent)) { console.error(`Invalid camera parent ${v.parent}, ${this.stringify(v)}.`); }\n if (!this.checkNumberUndef(v.aspect)) { console.error(`Invalid camera aspect ${v.aspect}, ${this.stringify(v)}.`); }\n if (!this.checkPositive(v.near)) { console.error(`Invalid camera near ${v.near}, ${this.stringify(v)}.`); }\n if (!this.checkPositive(v.far) || v.far <= v.near) { console.error(`Invalid camera far ${v.far}, ${this.stringify(v)}.`); }\n if (!this.checkPositive(v.fov)) { console.error(`Invalid camera fov ${v.fov}, ${this.stringify(v)}.`); }\n if (!this.checkNumber01(v.clipMode)) { console.error(`Invalid camera clipMode ${v.clipMode}, ${this.stringify(v)}.`); }\n }\n\n /**\n * 检查 Model 插件灯光参数\n * @param v - Model 插件灯光参数\n */\n static assertModelLightOptions (v: ModelLightOptions) {\n if (v.lightType === 'directional') {\n if (!this.checkParent(v.parent)) { console.error(`Invalid light parent ${v.parent}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative4(v.color)) { console.error(`Invalid light color ${v.color}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.intensity)) { console.error(`Invalid light intensity ${v.intensity}, ${this.stringify(v)}.`); }\n } else if (v.lightType === 'point') {\n if (!this.checkParent(v.parent)) { console.error(`Invalid light parent ${v.parent}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative4(v.color)) { console.error(`Invalid light color ${v.color}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.intensity)) { console.error(`Invalid light intensity ${v.intensity}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.range)) { console.error(`Invalid light range ${v.range}, ${this.stringify(v)}.`); }\n } else if (v.lightType === 'spot') {\n if (!this.checkParent(v.parent)) { console.error(`Invalid light parent ${v.parent}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative4(v.color)) { console.error(`Invalid light color ${v.color}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.intensity)) { console.error(`Invalid light intensity ${v.intensity}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.range)) { console.error(`Invalid light range ${v.range}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.innerConeAngle)) { console.error(`Invalid light innerConeAngle ${v.innerConeAngle}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.outerConeAngle)) { console.error(`Invalid light outerConeAngle ${v.outerConeAngle}, ${this.stringify(v)}.`); }\n } else if (v.lightType === 'ambient') {\n if (!this.checkParent(v.parent)) { console.error(`Invalid light parent ${v.parent}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative4(v.color)) { console.error(`Invalid light color ${v.color}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.intensity)) { console.error(`Invalid light intensity ${v.intensity}, ${this.stringify(v)}.`); }\n } else {\n console.error(`Invalid light type ${this.stringify(v)}.`);\n }\n }\n\n /**\n * 检查 Model 插件天空盒参数\n * @param v - Model 插件天空盒参数\n */\n static assertModelSkyboxOptions (v: ModelSkyboxOptions) {\n if (!this.checkBoolean(v.renderable)) { console.error(`Invalid skybox renderable ${v.renderable}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.intensity)) { console.error(`Invalid skybox intensity ${v.intensity}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.reflectionsIntensity)) { console.error(`Invalid skybox reflectionsIntensity ${v.reflectionsIntensity}, ${this.stringify(v)}.`); }\n //\n const c = v.irradianceCoeffs;\n\n if (c !== undefined) {\n if (!Array.isArray(c) || c.length != 9) { console.error(`Invalid skybox irradianceCoeffs ${c}, ${this.stringify(v)}.`); }\n c.forEach(v => {\n if (!this.checkVec3(v as spec.vec3)) { console.error(`Invalid skybox irradianceCoeffs ${c}, ${this.stringify(v)}.`); }\n });\n } else if (v.diffuseImage !== undefined) {\n if (!this.checkTexture(v.diffuseImage)) { console.error(`Invalid skybox diffuseImage ${v.diffuseImage}, ${this.stringify(v)}.`); }\n } else {\n console.error(`Invalid skybox, irradianceCoeffs or diffuseImage should give one, ${this.stringify(v)}.`);\n }\n if (!this.checkTexture(v.specularImage)) { console.error(`Invalid skybox specularImage ${v.specularImage}, ${this.stringify(v)}.`); }\n if (!this.checkPositive(v.specularImageSize)) { console.error(`Invalid skybox specularImageSize ${v.specularImageSize}, ${this.stringify(v)}.`); }\n if (!this.checkPositive(v.specularMipCount)) { console.error(`Invalid skybox specularMipCount ${v.specularMipCount}, ${this.stringify(v)}.`); }\n if (this.pow2(v.specularMipCount) > v.specularImageSize) {\n console.error(`Invalid skybox specularMipCount or specularImageSize, ${this.stringify(v)}.`);\n }\n }\n\n /**\n * 检查 Model 插件动画轨道参数\n * @param v - Model 插件动画轨道参数\n * @returns\n */\n static checkModelAnimTrackOptions (v: ModelAnimTrackOptions) {\n if (!this.checkNonnegative(v.node)) {\n console.error(`Invalid track node ${v.node}, ${this.stringify(v)}`);\n\n return false;\n }\n if (!this.checkFloat32Array(v.input)) {\n console.error(`Invalid track input ${v.input}, ${this.stringify(v)}`);\n\n return false;\n }\n if (!this.checkFloat32Array(v.output)) {\n console.error(`Invalid track input ${v.output}, ${this.stringify(v)}`);\n\n return false;\n }\n if (!this.checkAnimPath(v.path)) {\n console.error(`Invalid track path ${v.path}, ${this.stringify(v)}`);\n\n return false;\n }\n if (!this.checkAnimInterp(v.interpolation)) {\n console.error(`Invalid track interpolation ${v.interpolation}, ${this.stringify(v)}`);\n\n return false;\n }\n\n return true;\n }\n\n /**\n * 检查 Model 插件动画参数\n * @param v - Model 插件动画参数\n */\n static assertModelAnimOptions (v: ModelAnimationOptions) {\n if (!this.checkStringUndef(v.name)) { console.error(`Invalid animation name ${v.name}, ${this.stringify(v)}.`); }\n if (!Array.isArray(v.tracks)) { console.error(`Invalid animation tracks ${v.tracks}, ${this.stringify(v)}.`); }\n v.tracks.forEach(t => {\n if (!this.checkModelAnimTrackOptions(t)) { console.error(`Invalid animation track ${t}, ${this.stringify(v)}.`); }\n });\n }\n\n /**\n * 检查场景树参数\n * @param v - 场景树参数\n */\n static assertTreeOptions (v: ModelTreeOptions) {\n if (!this.checkNumberUndef(v.animation)) { console.error(`Invalid tree animation ${v.animation}, ${this.stringify(v)}.`); }\n if (v.animations !== undefined) {\n if (!Array.isArray(v.animations)) { console.error(`Invalid tree animations ${v.animations}, ${this.stringify(v)}.`); }\n v.animations.forEach(anim => { this.assertModelAnimOptions(anim); });\n if (v.animation !== undefined) {\n if (v.animation < -1 || v.animation >= v.animations.length) { console.error(`Invalid tree animations ${v.animations}, ${this.stringify(v)}.`); }\n }\n }\n }\n\n /**\n * 将对象转成 JSON 字符串,需要忽略函数和渲染相关的对象\n * @param object - 目标对象\n * @returns\n */\n static stringify (object: any) {\n const simpleObject: { [k: string]: any } = {};\n\n for (const prop in object) {\n // if (typeof(object[prop]) == 'object'){\n // continue;\n // }\n if (prop === 'internal') {\n // 与WebGL相关的数据,可以忽略\n continue;\n }\n if (typeof (object[prop]) == 'function') {\n continue;\n }\n if (object[prop] instanceof Texture) {\n simpleObject[prop] = object[prop].name;\n continue;\n }\n if (object[prop] instanceof Geometry) {\n simpleObject[prop] = object[prop].name;\n continue;\n }\n if (object[prop] instanceof Renderer) {\n continue;\n }\n simpleObject[prop] = object[prop];\n }\n\n return JSON.stringify(simpleObject);\n }\n\n /**\n * 获取 2 的 index 指数结果\n * @param index - 指数\n * @returns\n */\n static pow2 (index: number): number {\n let res = 1;\n\n while (index-- > 0) { res *= 2; }\n\n return res;\n }\n}\n\n/**\n * 半精度浮点数组类\n */\nexport class Float16ArrayWrapper {\n /**\n * 大小\n */\n size: number;\n /**\n * 数组\n */\n data: Uint16Array;\n\n constructor (size: number) {\n this.size = size;\n this.data = new Uint16Array(size);\n }\n\n /**\n * 将类数值数组转成半进度浮点,并从起始索引开始添加\n * @param number - 类数值数组\n * @param startIndex - 起始索引\n */\n set (number: ArrayLike<number>, startIndex: number) {\n for (let i = 0; i < number.length; i++) {\n this.data[i + startIndex] = toHalf(number[i]);\n }\n }\n\n /**\n * 获取数组字节数\n */\n get bytes () {\n return this.size * 2;\n }\n}\n\nconst toHalf = (function () {\n\n const floatView = new Float32Array(1);\n const int32View = new Int32Array(floatView.buffer);\n\n /* This method is faster than the OpenEXR implementation (very often\n * used, eg. in Ogre), with the additional benefit of rounding, inspired\n * by James Tursa?s half-precision code. */\n return function toHalf (val: any) {\n\n floatView[0] = val;\n const x = int32View[0];\n\n let bits = (x >> 16) & 0x8000; /* Get the sign */\n let m = (x >> 12) & 0x07ff; /* Keep one extra bit for rounding */\n const e = (x >> 23) & 0xff; /* Using int is faster here */\n\n /* If zero, or denormal, or exponent underflows too much for a denormal\n * half, return signed zero. */\n if (e < 103) {\n return bits;\n }\n\n /* If NaN, return NaN. If Inf or exponent overflow, return Inf. */\n if (e > 142) {\n bits |= 0x7c00;\n /* If exponent was 0xff and one mantissa bit was set, it means NaN,\n * not Inf, so make sure we set one mantissa bit too. */\n bits |= ((e == 255) ? 0 : 1) && (x & 0x007fffff);\n\n return bits;\n }\n\n /* If exponent underflows but not too much, return a denormal */\n if (e < 113) {\n m |= 0x0800;\n /* Extra rounding may overflow and set mantissa to 0 and exponent\n * to 1, which is OK. */\n bits |= (m >> (114 - e)) + ((m >> (113 - e)) & 1);\n\n return bits;\n }\n\n bits |= ((e - 112) << 10) | (m >> 1);\n /* Extra rounding. An overflow will set mantissa to 0 and increment\n * the exponent, which is OK. */\n bits += m & 1;\n\n return bits;\n };\n\n}());\n\n","import type { Geometry, Engine, VFXItem, SkinProps } from '@galacean/effects';\nimport { glContext, Texture, TextureSourceType } from '@galacean/effects';\nimport type {\n ModelAnimTrackOptions,\n ModelAnimationOptions,\n ModelTreeOptions,\n} from '../index';\nimport { Matrix4 } from './math';\nimport { PObjectType } from './common';\nimport { PObject } from './object';\nimport type { InterpolationSampler } from './anim-sampler';\nimport { createAnimationSampler } from './anim-sampler';\nimport { Float16ArrayWrapper } from '../utility/plugin-helper';\nimport type { PSceneManager } from './scene';\nimport { ModelTreeComponent } from '../plugin';\n\nconst forceTextureSkinning = false;\n\n/**\n * 纹理数据模式,包含浮点和半精度浮点\n */\nexport enum TextureDataMode {\n none = 0,\n float,\n half_float,\n}\n\n/**\n * 蒙皮类,支持蒙皮动画\n */\nexport class PSkin extends PObject {\n /**\n * 场景树父元素\n */\n rootBoneItem?: VFXItem;\n /**\n * 骨骼索引\n */\n skeleton = 0;\n /**\n * 关节索引\n */\n jointItem: VFXItem[] = [];\n /**\n * 逆绑定矩阵\n */\n inverseBindMatrices: Matrix4[] = [];\n /**\n * 动画矩阵\n */\n animationMatrices: Matrix4[] = [];\n /**\n * 纹理数据模式\n */\n textureDataMode = TextureDataMode.none;\n /**\n * 最大骨骼数目\n */\n maxJointCount = 0;\n\n /**\n * 创建蒙皮对象\n * @param props - 蒙皮相关数据\n * @param engine - 引擎对象\n * @param rootBoneItem - 场景树父元素\n */\n create (props: SkinProps, engine: Engine, rootBoneItem: VFXItem, maxJointCount: number) {\n this.name = props.rootBoneName ?? 'Unnamed skin';\n this.type = PObjectType.skin;\n //\n this.rootBoneItem = rootBoneItem;\n this.skeleton = -1;\n this.jointItem = this.getJointItems(props, rootBoneItem);\n this.maxJointCount = Math.max(maxJointCount, this.jointItem.length);\n this.animationMatrices = [];\n //\n this.inverseBindMatrices = [];\n //\n this.textureDataMode = this.getTextureDataMode(this.maxJointCount, engine);\n const matList = props.inverseBindMatrices;\n\n if (matList !== undefined && matList.length > 0) {\n if (matList.length % 16 !== 0 || matList.length !== this.jointItem.length * 16) {\n throw new Error(`Invalid array length, invert bind matrices ${matList.length}, joint array ${this.jointItem.length}.`);\n }\n\n const matrixCount = matList.length / 16;\n\n for (let i = 0; i < matrixCount; i++) {\n const mat = Matrix4.fromArray(matList, i * 16);\n\n this.inverseBindMatrices.push(mat);\n }\n }\n }\n\n /**\n * 更新蒙皮矩阵\n */\n updateSkinMatrices () {\n this.animationMatrices = [];\n\n for (let i = 0; i < this.jointItem.length; i++) {\n const node = this.jointItem[i];\n\n // let parent = node?.transform.parentTransform;\n // while(parent !== undefined){\n // const pos = parent.position;\n // parent.setPosition(pos[0], pos[1], pos[2]);\n // parent = parent.parentTransform;\n // }\n\n const mat4 = node.transform.getWorldMatrix();\n\n this.animationMatrices.push(mat4.clone());\n }\n\n if (this.animationMatrices.length === this.inverseBindMatrices.length) {\n this.animationMatrices.forEach((mat, index) => {\n mat.multiply(this.inverseBindMatrices[index]);\n });\n } else {\n this.animationMatrices = this.inverseBindMatrices;\n console.error('Some error occured, replace skin animation matrices by invert bind matrices.');\n }\n }\n\n /**\n * 计算 Mesh 的动画矩阵\n * @param worldMatrix - 世界矩阵\n * @param matrixList - 矩阵列表\n * @param normalMatList - 法线矩阵列表\n */\n computeMeshAnimMatrices (worldMatrix: Matrix4, matrixList: Float32Array, normalMatList: Float32Array) {\n const inverseWorldMatrix = worldMatrix.clone().invert();\n const tempMatrix = new Matrix4();\n\n this.animationMatrices.forEach((mat, i) => {\n const localMatrix = tempMatrix.multiplyMatrices(inverseWorldMatrix, mat);\n\n localMatrix.elements.forEach((x, j) => matrixList[i * 16 + j] = x);\n //\n const normalMat = localMatrix.clone().invert().transpose();\n\n normalMat.elements.forEach((x, j) => normalMatList[i * 16 + j] = x);\n });\n }\n\n /**\n * 更新父元素\n * @param parentItem - 场景树父元素\n */\n updateParentItem (parentItem: VFXItem) {\n this.rootBoneItem = parentItem;\n }\n\n /**\n * 获取关节点数\n * @returns\n */\n getJointCount (): number {\n return this.jointItem.length;\n }\n\n /**\n * 是否纹理数据模式\n * @returns\n */\n isTextureDataMode (): boolean {\n return this.textureDataMode !== TextureDataMode.none;\n }\n\n /**\n * 销毁\n */\n override dispose (): void {\n this.rootBoneItem = undefined;\n this.jointItem = [];\n this.inverseBindMatrices = [];\n this.animationMatrices = [];\n }\n\n private getTextureDataMode (jointCount: number, engine: Engine): TextureDataMode {\n const uniformsRequiredForMostFeatures = 25;\n const detail = engine.gpuCapability.detail;\n const availableJointUniforms = detail.maxVertexUniforms - uniformsRequiredForMostFeatures;\n const uniformsRequiredPerJoint = 8;\n\n if (forceTextureSkinning || jointCount > Math.floor(availableJointUniforms / uniformsRequiredPerJoint)) {\n // 优先使用float,half_float在iOS 13.6上有精度问题\n if (detail.floatTexture) {\n return TextureDataMode.float;\n } else if (detail.halfFloatTexture) {\n return TextureDataMode.half_float;\n } else {\n throw new Error(`Too many joint count ${jointCount}, half float texture not support.`);\n }\n } else {\n return TextureDataMode.none;\n }\n }\n\n private getJointItems (props: SkinProps, rootBoneItem: VFXItem) {\n const name2Item = this.genNodeName(rootBoneItem);\n\n const jointItems: VFXItem[] = [];\n\n props.boneNames?.forEach(boneName => {\n const node = name2Item[boneName];\n\n if (!node) {\n throw new Error(`Can't find node of bone name ${boneName}.`);\n }\n jointItems.push(node);\n });\n\n return jointItems;\n }\n\n private genNodeName (node: VFXItem) {\n const name2Item: Record<string, VFXItem> = {};\n const nameList: string[] = [];\n\n name2Item[''] = node;\n for (const child of node.children) {\n this.genNodeNameDFS(child, nameList, name2Item);\n }\n\n return name2Item;\n }\n\n private genNodeNameDFS (node: VFXItem, nameList: string[], name2Item: Record<string, VFXItem>) {\n nameList.push(node.name);\n name2Item[nameList.join('/')] = node;\n for (const child of node.children) {\n this.genNodeNameDFS(child, nameList, name2Item);\n }\n nameList.pop();\n }\n}\n\n/**\n * Morph 动画类\n * 保存了动画状态相关的数据,包括 weights 数组数据\n * 增加了状态数据的检查,保证数据的正确性\n * Morph 动画非常消耗内存,谨慎使用。\n */\nexport class PMorph extends PObject {\n /**\n * weights 数组的长度,shader 中和更新的时候会用到\n * 范围要在 `[0, 8]` 之间,否则会报错。\n */\n morphWeightsLength = 0;\n /**\n * weights 数组的具体数据,来自动画控制器的每帧更新\n * 数组的长度必须和 morphWeightsLength 相同,否则会出错。\n */\n morphWeightsArray: number[] = [];\n /**\n * 是否有 Position 相关的 Morph 动画,shader 中需要知道\n */\n hasPositionMorph = false;\n /**\n * 是否有 Normal 相关的 Morph 动画,shader 中需要知道\n */\n hasNormalMorph = false;\n /**\n * 是否有 Tangent 相关的 Morph 动画,shader 中需要知道\n */\n hasTangentMorph = false;\n\n /**\n * 通过 Geometry 数据创建 Morph 动画相关状态,并进行必要的正确性检查\n * @param geometry - Mesh 的几何体,是否包含 Morph 动画都是可以的\n * @returns 是否创建成功\n */\n create (geometry: Geometry): boolean {\n this.name = this.genName('Morph target');\n this.type = PObjectType.morph;\n\n // 统计各个属性的在Morph中的数目\n const positionCount = this.getAttributeMorphCount(PMorph.positionNameList, geometry);\n const normalCount = this.getAttributeMorphCount(PMorph.normalNameList, geometry);\n const tangentCount = this.getAttributeMorphCount(PMorph.tangentNameList, geometry);\n const countList: number[] = [positionCount, normalCount, tangentCount];\n\n // 这里是拿到所有数目中非零的最小值,如果没有非零值,那就是直接是零\n this.morphWeightsLength = 0;\n countList.forEach(count => {\n if (count > 0) {\n if (this.morphWeightsLength === 0) {\n this.morphWeightsLength = count;\n } else {\n this.morphWeightsLength = Math.min(this.morphWeightsLength, count);\n }\n }\n });\n\n if (this.morphWeightsLength > 0) {\n // 有Morph动画,申请weights数据,判断各个属性是否有相关动画\n this.morphWeightsArray = Array(this.morphWeightsLength).fill(0);\n this.hasPositionMorph = positionCount == this.morphWeightsLength;\n this.hasNormalMorph = normalCount == this.morphWeightsLength;\n this.hasTangentMorph = tangentCount == this.morphWeightsLength;\n }\n\n /**\n * 这里是做正确性检查,特别是各个属性之间数目需要对上,否则就报错。\n * 还要注意最大数目不能超过5,否则也直接报错。\n * 后续考虑是否做个兼容,目前还是严格报错比较好。\n */\n\n if (positionCount > 0 && positionCount != this.morphWeightsLength) {\n console.error(`Position morph count mismatch: ${this.morphWeightsLength}, ${positionCount}.`);\n\n return false;\n }\n\n if (normalCount > 0 && normalCount != this.morphWeightsLength) {\n console.error(`Normal morph count mismatch: ${this.morphWeightsLength}, ${normalCount}.`);\n\n return false;\n }\n\n if (tangentCount > 0 && tangentCount != this.morphWeightsLength) {\n console.error(`Tangent morph count mismatch: ${this.morphWeightsLength}, ${tangentCount}.`);\n\n return false;\n }\n\n if (this.morphWeightsLength > 5) {\n console.error(`Tangent morph count should not greater than 5, current ${this.morphWeightsLength}.`);\n\n return false;\n }\n\n return true;\n }\n\n /**\n * 初始化 Morph target 的权重数组\n * @param weights - glTF Mesh 的权重数组,长度必须严格一致\n */\n initWeights (weights: number[]) {\n if (this.morphWeightsArray.length === 0) {\n return;\n }\n\n const morphWeights = this.morphWeightsArray;\n\n weights.forEach((val, index) => {\n if (index < morphWeights.length) {\n morphWeights[index] = val;\n }\n });\n }\n\n updateWeights (weights: number[]) {\n if (weights.length != this.morphWeightsArray.length) {\n console.error(`Length of morph weights mismatch: input ${weights.length}, internel ${this.morphWeightsArray.length}.`);\n\n return;\n }\n\n weights.forEach((value, index) => this.morphWeightsArray[index] = value);\n }\n\n /**\n * 当前状态是否有 Morph 动画:\n * 需要判断 weights 数组长度,以及 Position、Normal 和 Tangent 是否有动画\n * @returns 返回是否有 Morph 动画\n */\n hasMorph (): boolean {\n return this.morphWeightsLength > 0 && (this.hasPositionMorph || this.hasNormalMorph || this.hasTangentMorph);\n }\n\n /**\n * 两个 Morph 动画状态是否相等:\n * 这里只比较初始状态是否一样,不考虑 weights 数组的情况,提供给 Mesh 进行 Geometry 检查使用\n * @param morph - Morph 动画状态对象\n * @returns 返回两个 Morph 动画状态是否相等\n */\n equals (morph: PMorph): boolean {\n return this.morphWeightsLength === morph.morphWeightsLength\n && this.hasPositionMorph === morph.hasPositionMorph\n && this.hasNormalMorph === morph.hasNormalMorph\n && this.hasTangentMorph === morph.hasTangentMorph;\n }\n\n getMorphWeightsArray (): number[] {\n return this.morphWeightsArray;\n }\n\n /**\n * 统计 Geometry 中 Attribute 名称个数:\n * 主要用于统计 Morph 动画中新增的 Attribute 名称的个数,会作为最终的 weights 数组长度使用\n * @param attributeNameList - Attribute 名数组列表,只与 Morph Target 中的属性有关\n * @param geometry - Geometry 对象,是否有 Morph 动画都可以\n * @returns 存在的 Attribute 名称数目\n */\n getAttributeMorphCount (attributeNameList: string[], geometry: Geometry): number {\n for (let i = 0; i < attributeNameList.length; i++) {\n const val = attributeNameList[i];\n\n if (geometry.getAttributeData(val) === undefined) {\n return i;\n }\n }\n\n // 所有名称都找到了,所以要返回数组的长度\n return attributeNameList.length;\n }\n\n /**\n * Morph 动画中 Position 相关的 Attribute 名称\n */\n private static positionNameList = [\n 'aTargetPosition0',\n 'aTargetPosition1',\n 'aTargetPosition2',\n 'aTargetPosition3',\n 'aTargetPosition4',\n 'aTargetPosition5',\n 'aTargetPosition6',\n 'aTargetPosition7',\n ];\n\n /**\n * Morph 动画中 Normal 相关的 Attribute 名称\n */\n private static normalNameList = [\n 'aTargetNormal0',\n 'aTargetNormal1',\n 'aTargetNormal2',\n 'aTargetNormal3',\n 'aTargetNormal4',\n 'aTargetNormal5',\n 'aTargetNormal6',\n 'aTargetNormal7',\n ];\n\n /**\n * Morph 动画中 Tangent 相关的 Attribute 名称\n */\n private static tangentNameList = [\n 'aTargetTangent0',\n 'aTargetTangent1',\n 'aTargetTangent2',\n 'aTargetTangent3',\n 'aTargetTangent4',\n 'aTargetTangent5',\n 'aTargetTangent6',\n 'aTargetTangent7',\n ];\n}\n\n/**\n * 动画插值类型\n */\nexport enum PAnimInterpType {\n linear = 0,\n step,\n cubicSpline,\n}\n\n/**\n * 动画路径类型\n */\nexport enum PAnimPathType {\n translation = 0,\n rotation,\n scale,\n weights,\n}\n\n/**\n * 动画轨道类\n */\nexport class PAnimTrack {\n /**\n * 节点索引\n */\n node: number;\n /**\n * 时间数组\n */\n timeArray: Float32Array;\n /**\n * 数据数组\n */\n dataArray: Float32Array;\n /**\n * 路径类型\n */\n path = PAnimPathType.translation;\n /**\n * 插值类型\n */\n interp = PAnimInterpType.linear;\n /**\n * 分量\n */\n component: number;\n //\n private sampler?: InterpolationSampler;\n\n /**\n * 创建动画轨道对象\n * @param options - 动画轨道参数\n */\n constructor (options: ModelAnimTrackOptions) {\n const { node, input, output, path, interpolation } = options;\n\n this.node = node;\n this.timeArray = input;\n this.dataArray = output;\n //\n if (path === 'translation') {\n this.path = PAnimPathType.translation;\n this.component = 3;\n } else if (path === 'rotation') {\n this.path = PAnimPathType.rotation;\n this.component = 4;\n } else if (path === 'scale') {\n this.path = PAnimPathType.scale;\n this.component = 3;\n } else if (path === 'weights') {\n this.path = PAnimPathType.weights;\n this.component = this.dataArray.length / this.timeArray.length;\n // special checker for weights animation\n if (this.component <= 0) {\n console.error(`Invalid weights component: ${this.timeArray.length}, ${this.component}, ${this.dataArray.length}.`);\n } else if (this.timeArray.length * this.component != this.dataArray.length) {\n console.error(`Invalid weights array length: ${this.timeArray.length}, ${this.component}, ${this.dataArray.length}.`);\n }\n } else {\n // should never happened\n console.error(`Invalid path status: ${path}.`);\n }\n\n if (this.timeArray.length * this.component > this.dataArray.length) {\n throw new Error(`Data length mismatch: ${this.timeArray.length}, ${this.component}, ${this.dataArray.length}.`);\n }\n\n if (interpolation === 'LINEAR') {\n this.interp = PAnimInterpType.linear;\n } else if (interpolation === 'STEP') {\n this.interp = PAnimInterpType.step;\n } else {\n this.interp = PAnimInterpType.cubicSpline;\n }\n\n this.sampler = createAnimationSampler(\n this.getInterpInfo(), this.timeArray, this.dataArray, this.component, this.getPathInfo()\n );\n }\n\n /**\n * 销毁\n */\n dispose () {\n // @ts-expect-error\n this.timeArray = undefined;\n // @ts-expect-error\n this.dataArray = undefined;\n this.sampler?.dispose();\n this.sampler = undefined;\n }\n\n /**\n * 更新节点动画数据\n * @param time - 当前播放时间\n * @param treeItem - 节点树元素\n * @param sceneManager - 3D 场景管理器\n */\n tick (time: number, treeItem: VFXItem, sceneManager?: PSceneManager) {\n const treeComponent = treeItem.getComponent(ModelTreeComponent);\n const node = treeComponent?.content?.getNodeById(this.node);\n\n if (this.sampler !== undefined && node !== undefined) {\n const result = this.sampler.evaluate(time);\n\n switch (this.path) {\n case PAnimPathType.translation:\n node.transform.setPosition(result[0], result[1], result[2]);\n\n break;\n case PAnimPathType.rotation:\n node.transform.setQuaternion(result[0], result[1], result[2], result[3]);\n\n break;\n case PAnimPathType.scale:\n node.transform.setScale(result[0], result[1], result[2]);\n\n break;\n case PAnimPathType.weights:\n {\n /**\n * 先生成Mesh的父节点id,然后通过id查询Mesh对象\n * 最后更新Mesh对象权重数据\n */\n const parentId = this.genParentId(treeItem.id, this.node);\n const mesh = sceneManager?.queryMesh(parentId);\n\n if (mesh !== undefined) {\n mesh.updateMorphWeights(result);\n }\n\n }\n\n break;\n }\n } else {\n if (this.sampler !== undefined) {\n console.error('AnimTrack: error', this.sampler, node);\n }\n }\n }\n\n /**\n * 获取动画结束时间\n * @returns\n */\n getEndTime (): number {\n const index = this.timeArray.length - 1;\n\n return this.timeArray[index];\n }\n\n /**\n * 生成 Mesh 元素的父节点\n *\n * @param parentId - 父节点 id 名称\n * @param nodeIndex - Mesh 节点索引\n *\n * @returns 生成的 Mesh 节点名称\n */\n private genParentId (parentId: string, nodeIndex: number): string {\n return `${parentId}^${nodeIndex}`;\n }\n\n private getPathInfo (): string {\n if (this.path === PAnimPathType.scale) {\n return 'scale';\n } else if (this.path === PAnimPathType.rotation) {\n return 'rotation';\n } else {\n return 'translation';\n }\n }\n\n private getInterpInfo (): string {\n if (this.interp === PAnimInterpType.cubicSpline) {\n return 'CUBICSPLINE';\n } else if (this.interp === PAnimInterpType.step) {\n return 'STEP';\n } else {\n return 'LINEAR';\n }\n }\n}\n\n/**\n * 动画纹理类\n */\nexport class PAnimTexture {\n private isHalfFloat = true;\n //\n private width = 0;\n private height = 0;\n private buffer?: Float16ArrayWrapper;\n private texture?: Texture;\n\n constructor (private engine: Engine) {}\n\n /**\n * 创建动画纹理对象\n * @param jointCount - 骨骼数目\n * @param isHalfFloat - 是否半浮点精度\n * @param name - 名称\n */\n create (jointCount: number, isHalfFloat: boolean, name: string) {\n this.width = 4;\n this.height = jointCount;\n this.isHalfFloat = isHalfFloat;\n\n if (this.isHalfFloat) {\n this.buffer = new Float16ArrayWrapper(this.getSize() * 4);\n }\n\n const data = this.buffer?.data ?? new Float32Array(this.getSize() * 4);\n const type = this.isHalfFloat ? glContext.HALF_FLOAT : glContext.FLOAT;\n\n this.texture = Texture.create(\n this.engine,\n {\n name,\n data: {\n width: this.width,\n height: this.height,\n data,\n },\n target: glContext.TEXTURE_2D,\n format: glContext.RGBA,\n type,\n wrapS: glContext.CLAMP_TO_EDGE,\n wrapT: glContext.CLAMP_TO_EDGE,\n minFilter: glContext.NEAREST,\n magFilter: glContext.NEAREST,\n });\n }\n\n /**\n * 更新动画数据\n * @param buffer - 新的动画数据\n */\n update (buffer: Float32Array) {\n if (this.buffer !== undefined) {\n this.buffer.set(buffer, 0);\n }\n\n if (this.texture !== undefined) {\n this.texture.updateSource({\n sourceType: TextureSourceType.data,\n data: {\n width: this.width,\n height: this.height,\n data: this.buffer?.data ?? buffer,\n },\n target: glContext.TEXTURE_2D,\n });\n }\n\n }\n\n /**\n * 销毁\n */\n dispose () {\n // @ts-expect-error\n this.engine = null;\n this.buffer = undefined;\n this.texture?.dispose();\n }\n\n /**\n * 获取纹理大小\n * @returns\n */\n getSize () {\n return this.width * this.height;\n }\n\n /**\n * 获取纹理对象\n * @returns\n */\n getTexture () {\n return this.texture as Texture;\n }\n\n}\n\n/**\n * 动画类,负责动画数据创建、更新和销毁\n */\nexport class PAnimation extends PObject {\n private time = 0;\n private duration = 0;\n private tracks: PAnimTrack[] = [];\n\n /**\n * 创建动画对象\n * @param options - 动画参数\n */\n create (options: ModelAnimationOptions) {\n this.name = this.genName(options.name ?? 'Unnamed animation');\n this.type = PObjectType.animation;\n //\n this.time = 0;\n this.duration = 0;\n //\n this.tracks = [];\n options.tracks.forEach(inTrack => {\n const track = new PAnimTrack(inTrack);\n\n this.tracks.push(track);\n this.duration = Math.max(this.duration, track.getEndTime());\n });\n }\n\n /**\n * 动画更新\n * @param time - 当前时间\n * @param treeItem - 场景树元素\n * @param sceneManager - 3D 场景管理器\n */\n tick (time: number, treeItem: VFXItem, sceneManager?: PSceneManager) {\n this.time = time;\n // TODO: 这里时间事件定义不明确,先兼容原先实现\n const newTime = this.time % this.duration;\n\n this.tracks.forEach(track => {\n track.tick(newTime, treeItem, sceneManager);\n });\n }\n\n /**\n * 销毁\n */\n override dispose () {\n this.tracks.forEach(track => {\n track.dispose();\n });\n this.tracks = [];\n }\n}\n\n/**\n * 动画管理类,负责管理动画对象\n */\nexport class PAnimationManager extends PObject {\n private ownerItem: VFXItem;\n private animation = 0;\n private speed = 0;\n private delay = 0;\n private time = 0;\n private animations: PAnimation[] = [];\n private sceneManager?: PSceneManager;\n\n /**\n * 创建动画管理器\n * @param treeOptions - 场景树参数\n * @param ownerItem - 场景树所属元素\n */\n constructor (treeOptions: ModelTreeOptions, ownerItem: VFXItem) {\n super();\n this.name = this.genName(ownerItem.name ?? 'Unnamed tree');\n this.type = PObjectType.animationManager;\n //\n this.ownerItem = ownerItem;\n this.animation = treeOptions.animation ?? -1;\n this.speed = 1.0;\n this.delay = ownerItem.start ?? 0;\n this.animations = [];\n if (treeOptions.animations !== undefined) {\n treeOptions.animations.forEach(animOpts => {\n const anim = this.createAnimation(animOpts);\n\n this.animations.push(anim);\n });\n }\n }\n\n /**\n * 设置场景管理器\n * @param sceneManager - 场景管理器\n */\n setSceneManager (sceneManager: PSceneManager) {\n this.sceneManager = sceneManager;\n }\n\n /**\n * 创建动画对象\n * @param animationOpts - 动画参数\n * @returns 动画对象\n */\n createAnimation (animationOpts: ModelAnimationOptions) {\n const animation = new PAnimation();\n\n animation.create(animationOpts);\n\n return animation;\n }\n\n /**\n * 动画更新\n * @param deltaSeconds - 更新间隔\n */\n tick (deltaSeconds: number) {\n const newDeltaSeconds = deltaSeconds * this.speed * 0.001;\n\n this.time += newDeltaSeconds;\n // TODO: 需要合并到TreeItem中,通过lifetime进行计算\n const itemTime = this.time - this.delay;\n\n if (itemTime >= 0) {\n if (this.animation >= 0 && this.animation < this.animations.length) {\n const anim = this.animations[this.animation];\n\n anim.tick(itemTime, this.ownerItem, this.sceneManager);\n } else if (this.animation == -88888888) {\n this.animations.forEach(anim => {\n anim.tick(itemTime, this.ownerItem, this.sceneManager);\n });\n }\n }\n }\n\n /**\n * 销毁\n */\n override dispose () {\n // @ts-expect-error\n this.ownerItem = null;\n this.animations.forEach(anim => {\n anim.dispose();\n });\n this.animations = [];\n // @ts-expect-error\n this.sceneManager = null;\n }\n\n /**\n * 获取场景树元素\n * @returns\n */\n getTreeItem () {\n return this.ownerItem;\n }\n}\n","import type { math } from '@galacean/effects';\nimport { spec } from '@galacean/effects';\nimport type { ModelCameraComponentData } from '../index';\nimport { Vector2, Vector3, Matrix4 } from './math';\nimport { PObjectType } from './common';\nimport { PEntity } from './object';\nimport type { ModelCameraComponent } from '../plugin/model-item';\n\ntype Box3 = math.Box3;\ntype Quaternion = math.Quaternion;\n\nconst deg2rad = Math.PI / 180;\n\n/**\n * 相机类,支持基础的相机功能\n */\nexport class PCamera extends PEntity {\n /**\n * 所属的相机组件\n */\n owner?: ModelCameraComponent;\n /**\n * 画布宽度\n */\n width = 512;\n /**\n * 画布高度\n */\n height = 512;\n /**\n * 近裁剪平面\n */\n nearPlane = 0.001;\n /**\n * 远裁剪平面\n */\n farPlane = 1000;\n /**\n * Y 轴上视角\n */\n fov = 45;\n /**\n * 视图矩阵\n */\n viewportMatrix = Matrix4.fromIdentity();\n /**\n * 纵横比\n */\n aspect = 1.0;\n /**\n * 剪裁模式,默认是剪裁左右\n */\n clipMode = spec.CameraClipMode.landscape;\n /**\n * 投影矩阵\n */\n projectionMatrix: Matrix4 = new Matrix4();\n /**\n * 相机矩阵\n */\n viewMatrix: Matrix4 = new Matrix4();\n\n /**\n * 构造函数,创建相机对象\n * @param camera - 相机数据\n * @param width - 画布宽度\n * @param height - 画布高度\n * @param owner - 所属的相机组件\n */\n constructor (name: string, width: number, height: number, data: ModelCameraComponentData, owner?: ModelCameraComponent) {\n super();\n this.type = PObjectType.camera;\n this.visible = false;\n this.owner = owner;\n //\n this.name = name;\n this.width = width;\n this.height = height;\n\n this.nearPlane = data.near ?? 0.001;\n this.farPlane = data.far ?? 1000;\n this.fov = data.fov ?? 45;\n this.aspect = data.aspect ?? (this.width / this.height);\n this.clipMode = data.clipMode ?? spec.CameraClipMode.landscape;\n this.update();\n }\n\n /**\n * 更新相机矩阵和投影矩阵,从所属的元素中获取变换数据\n */\n override update () {\n if (this.owner !== undefined) {\n this.transform.fromEffectsTransform(this.owner.transform);\n }\n\n const reverse = this.clipMode === spec.CameraClipMode.portrait;\n\n this.projectionMatrix.perspective(this.fov * deg2rad, this.aspect, this.nearPlane, this.farPlane, reverse);\n this.projectionMatrix.premultiply(this.viewportMatrix);\n this.viewMatrix = this.matrix.invert();\n }\n\n /**\n * 获取新的透视矩阵,视角大小乘 1.25 倍\n * @param fov - 视角大小\n * @returns 投影矩阵\n */\n getNewProjectionMatrix (fov: number): Matrix4 {\n const reverse = this.clipMode === spec.CameraClipMode.portrait;\n\n return new Matrix4().perspective(Math.min(fov * 1.25, 140) * deg2rad, this.aspect, this.nearPlane, this.farPlane, reverse).premultiply(this.viewportMatrix);\n }\n\n /**\n * 计算视角中的包围盒大小\n * @param box - 包围盒\n * @returns 视角中的包围盒\n */\n computeViewAABB (box: Box3): Box3 {\n const tanTheta = Math.tan(this.fov * deg2rad * 0.5);\n const aspect = this.aspect;\n let yFarCoord = 0;\n let yNearCoord = 0;\n let xFarCoord = 0;\n let xNearCoord = 0;\n\n if (this.isReversed()) {\n xFarCoord = this.farPlane * tanTheta;\n xNearCoord = this.nearPlane * tanTheta;\n yFarCoord = xFarCoord / aspect;\n yNearCoord = xNearCoord / aspect;\n } else {\n yFarCoord = this.farPlane * tanTheta;\n yNearCoord = this.nearPlane * tanTheta;\n xFarCoord = aspect * yFarCoord;\n xNearCoord = aspect * yNearCoord;\n }\n\n box.makeEmpty();\n const matrix = this.matrix;\n\n box.expandByPoint(matrix.transformPoint(new Vector3(xFarCoord, yFarCoord, -this.farPlane)));\n box.expandByPoint(matrix.transformPoint(new Vector3(xFarCoord, -yFarCoord, -this.farPlane)));\n box.expandByPoint(matrix.transformPoint(new Vector3(-xFarCoord, yFarCoord, -this.farPlane)));\n box.expandByPoint(matrix.transformPoint(new Vector3(-xFarCoord, -yFarCoord, -this.farPlane)));\n //\n box.expandByPoint(matrix.transformPoint(new Vector3(xNearCoord, yNearCoord, -this.nearPlane)));\n box.expandByPoint(matrix.transformPoint(new Vector3(xNearCoord, -yNearCoord, -this.nearPlane)));\n box.expandByPoint(matrix.transformPoint(new Vector3(-xNearCoord, yNearCoord, -this.nearPlane)));\n box.expandByPoint(matrix.transformPoint(new Vector3(-xNearCoord, -yNearCoord, -this.nearPlane)));\n\n return box;\n }\n\n /**\n * 获取画布大小\n * @returns\n */\n getSize (): Vector2 {\n return new Vector2(this.width, this.height);\n }\n\n /**\n * 是否剪裁上下\n * @returns\n */\n isReversed (): boolean {\n return this.clipMode === spec.CameraClipMode.portrait;\n }\n\n /**\n * 获取眼睛位置\n * @returns\n */\n getEye (): Vector3 {\n return this.translation;\n }\n\n /**\n * 设置眼睛位置\n * @param val - 眼睛位置\n */\n setEye (val: Vector3) {\n this.translation = val;\n }\n}\n\n/**\n * 相机管理类,负责管理场景中的 3D 相机对象\n */\nexport class PCameraManager {\n private winWidth = 512;\n private winHeight = 512;\n private cameraList: PCamera[] = [];\n private defaultCamera;\n\n constructor () {\n this.defaultCamera = new PCamera(\n 'camera', 512, 512,\n {\n id: '0',\n dataType: 'camera' as spec.DataType,\n fov: 60,\n far: 1000,\n near: 0.001,\n clipMode: spec.CameraClipMode.portrait,\n item: { id: '0' },\n },\n );\n }\n\n /**\n * 初始化画布大小,更新默认相机\n * @param width - 画布宽度\n * @param height - 画布高度\n */\n initial (width: number, height: number) {\n this.winWidth = width;\n this.winHeight = height;\n\n const camera = this.defaultCamera;\n\n camera.width = width;\n camera.height = height;\n camera.aspect = width / height;\n camera.update();\n }\n\n /**\n * 插入相机数据,创建新的相机对象\n * @param name - 相机名称\n * @param data - 相机相关数据\n * @param owner - 相机所属组件\n * @returns 新的相机对象\n */\n insert (name: string, data: ModelCameraComponentData, owner?: ModelCameraComponent): PCamera {\n const camera = new PCamera(name, this.winWidth, this.winHeight, data, owner);\n\n this.cameraList.push(camera);\n\n return camera;\n }\n\n /**\n * 插入相机对象\n * @param camera - 相机对象\n */\n insertCamera (camera: PCamera) {\n this.cameraList.push(camera);\n }\n\n /**\n * 根据对象或者索引,删除相机对象\n * @param camera - 索引或相机对象\n */\n remove (camera: PCamera | number) {\n if (camera instanceof PCamera) {\n const findResult = this.cameraList.findIndex(item => {\n return item === camera;\n });\n\n if (findResult !== -1) {\n this.cameraList.splice(findResult, 1);\n }\n } else {\n if (camera >= 0 && camera < this.cameraList.length) {\n this.cameraList.splice(camera, 1);\n }\n }\n }\n\n /**\n * 销毁相机管理对象\n */\n dispose () {\n this.cameraList = [];\n }\n\n /**\n * 更新默认相机状态,并计算新的透视和相机矩阵\n * @param fov - 视角\n * @param viewportMatrix - 视图矩阵\n * @param aspect - 纵横比\n * @param nearPlane - 近裁剪平面\n * @param farPlane - 远裁剪平面\n * @param position - 位置\n * @param rotation - 旋转\n * @param clipMode - 剪裁模式\n */\n updateDefaultCamera (\n fov: number,\n viewportMatrix: Matrix4,\n aspect: number,\n nearPlane: number,\n farPlane: number,\n position: Vector3,\n rotation: Quaternion,\n clipMode: number,\n ) {\n this.defaultCamera.fov = fov;\n this.defaultCamera.viewportMatrix = viewportMatrix.clone();\n this.defaultCamera.aspect = aspect;\n this.defaultCamera.nearPlane = nearPlane;\n this.defaultCamera.farPlane = farPlane;\n this.defaultCamera.position = position;\n this.defaultCamera.rotation = rotation;\n this.defaultCamera.aspect = aspect;\n this.defaultCamera.clipMode = clipMode;\n this.defaultCamera.update();\n }\n\n /**\n * 获取相机对象列表\n * @returns\n */\n getCameraList (): PCamera[] {\n return this.cameraList;\n }\n\n /**\n * 获取默认相机对象\n * @returns\n */\n getDefaultCamera (): PCamera {\n return this.defaultCamera;\n }\n\n /**\n * 获取相机数目\n * @returns\n */\n getCameraCount (): number {\n return this.cameraList.length;\n }\n\n /**\n * 获取激活的相机对象\n * @returns\n */\n getActiveCamera (): PCamera {\n return this.defaultCamera;\n }\n\n /**\n * 获取画布纵横比\n * @returns\n */\n getAspect (): number {\n return this.winWidth / this.winHeight;\n }\n}\n\n","import { spec } from '@galacean/effects';\nimport type { ModelLightComponentData } from '../index';\nimport { Vector2, Vector3 } from './math';\nimport { PObjectType, PLightType } from './common';\nimport { PEntity } from './object';\nimport type { ModelLightComponent } from '../plugin/model-item';\n\n/**\n * 灯光类,支持 3D 场景中的灯光功能\n */\nexport class PLight extends PEntity {\n /**\n * 所属的灯光组件\n */\n owner?: ModelLightComponent;\n /**\n * 方向,仅用于方向光和聚光灯\n */\n direction: Vector3 = new Vector3(0, 0, 1);\n /**\n * 范围,仅用于点光源和聚光灯\n */\n range = 0;\n /**\n * 颜色\n */\n color: Vector3 = new Vector3(1, 1, 1);\n /**\n * 强度\n */\n intensity = 0;\n /**\n * 聚光灯外径\n */\n outerConeAngle = 0;\n /**\n * 聚光灯内径\n */\n innerConeAngle = 0;\n /**\n * 类型\n */\n lightType = PLightType.ambient;\n padding: Vector2 = new Vector2(0, 0);\n\n /**\n * 创建灯光对象\n * @param name - 灯光名称\n * @param data - 灯光相关数据\n * @param owner - 所属灯光组件\n */\n constructor (name: string, data: ModelLightComponentData, owner?: ModelLightComponent) {\n super();\n this.name = name;\n this.type = PObjectType.light;\n this.visible = false;\n this.owner = owner;\n this.direction = new Vector3(0, 0, -1);\n this.range = 0;\n this.outerConeAngle = 0;\n this.innerConeAngle = 0;\n //\n const { color } = data;\n\n this.color = new Vector3(\n color.r,\n color.g,\n color.b,\n );\n this.intensity = data.intensity;\n if (data.lightType === spec.LightType.point) {\n this.lightType = PLightType.point;\n this.range = data.range ?? -1;\n } else if (data.lightType === spec.LightType.spot) {\n this.lightType = PLightType.spot;\n this.range = data.range ?? -1;\n this.outerConeAngle = data.outerConeAngle ?? Math.PI;\n this.innerConeAngle = data.innerConeAngle ?? 0;\n } else if (data.lightType === spec.LightType.directional) {\n this.lightType = PLightType.directional;\n } else {\n this.lightType = PLightType.ambient;\n }\n this.update();\n }\n\n /**\n * 更新灯光变换\n */\n override update () {\n if (this.owner !== undefined) {\n this.transform.fromEffectsTransform(this.owner.transform);\n }\n }\n\n /**\n * 是否方向光\n * @returns\n */\n isDirectional (): boolean {\n return this.lightType === PLightType.directional;\n }\n\n /**\n * 是否点光源\n * @returns\n */\n isPoint (): boolean {\n return this.lightType === PLightType.point;\n }\n\n /**\n * 是否聚光灯\n * @returns\n */\n isSpot (): boolean {\n return this.lightType === PLightType.spot;\n }\n\n /**\n * 是否环境光\n * @returns\n */\n isAmbient (): boolean {\n return this.lightType === PLightType.ambient;\n }\n\n /**\n * 获取位置\n */\n override get position (): Vector3 {\n return this.translation;\n }\n\n /**\n * 获取世界坐标中的位置\n * @returns\n */\n getWorldPosition (): Vector3 {\n return this.translation;\n }\n\n /**\n * 获取世界坐标中的方向\n * @returns\n */\n getWorldDirection (): Vector3 {\n return this.matrix.transformNormal(this.direction, new Vector3());\n }\n}\n\n/**\n * 灯光管理类,负责 3D 场景灯光的管理\n */\nexport class PLightManager {\n /**\n * 灯光数组\n */\n lightList: PLight[] = [];\n\n constructor () {\n\n }\n /**\n * 通过灯光参数,创建灯光对象,并保存到灯光数组中\n * @param inLight - 灯光参数\n * @param owner - 所属灯光组件\n * @returns 插入的灯光对象\n */\n insertItem (name: string, inLight: ModelLightComponentData, owner?: ModelLightComponent): PLight {\n const light = new PLight(name, inLight, owner);\n\n this.lightList.push(light);\n\n return light;\n }\n\n /**\n * 插入灯光对象\n * @param inLight - 灯光对象\n * @returns 插入的灯光对象\n */\n insertLight (inLight: PLight): PLight {\n this.lightList.push(inLight);\n\n return inLight;\n }\n\n /**\n * 删除灯光对象,从灯光数组中查找对象并进行删除,如果没有找到就忽略\n * @param inLight - 删除的灯光对象\n */\n remove (inLight: PLight) {\n const findResult = this.lightList.findIndex(item => {\n return item === inLight;\n });\n\n if (findResult !== -1) {\n this.lightList.splice(findResult, 1);\n }\n }\n\n /**\n * 销毁\n */\n dispose () {\n this.lightList = [];\n }\n\n /**\n * 灯光数目\n */\n get lightCount (): number {\n return this.lightList.length;\n }\n\n}\n\n","export function _assert_this_initialized(self) {\n if (self === void 0) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\n return self;\n}\nexport { _assert_this_initialized as _ };\n","import type { Texture, Engine, math, VFXItem, Renderer, Geometry } from '@galacean/effects';\nimport { spec, Material, GLSLVersion } from '@galacean/effects';\nimport type { ModelMeshComponentData, ModelItemBounding } from '../index';\nimport { PObjectType, PMaterialType, PGlobalState } from './common';\nimport { PEntity } from './object';\nimport type { PMaterial } from './material';\nimport { PMaterialPBR, PMaterialUnlit, createPluginMaterial } from './material';\nimport { Matrix4, Vector3, Box3, Vector2 } from './math';\nimport { PSkin, PAnimTexture, PMorph, TextureDataMode } from './animation';\nimport type { PSceneManager, PSceneStates } from './scene';\nimport type { PSkybox } from './skybox';\nimport { GeometryBoxProxy, HitTestingProxy } from '../utility/plugin-helper';\nimport { BoxMesh } from '../utility/ri-helper';\nimport { RayBoxTesting } from '../utility/hit-test-helper';\nimport type { ModelTreeNode } from '../plugin';\nimport { ModelTreeComponent } from '../plugin';\nimport type { ModelMeshComponent } from '../plugin/model-item';\n\ntype Box3 = math.Box3;\n\n/**\n * Mesh 类,负责 Mesh 相关的骨骼动画和 PBR 渲染\n */\nexport class PMesh extends PEntity {\n /**\n * 所属的 Mesh 组件\n */\n owner?: ModelMeshComponent;\n /**\n * 父节点索引\n */\n parentIndex = -1;\n /**\n * 父元素\n */\n parentItem?: VFXItem;\n /**\n * 父元素索引\n */\n parentItemId?: string;\n rootBoneItem?: VFXItem;\n /**\n * 蒙皮\n */\n skin?: PSkin;\n /**\n * morph 动画状态数据,主要是 weights 数组\n */\n morph?: PMorph;\n /**\n * primitive 对象数组\n */\n subMeshes: PSubMesh[] = [];\n /**\n * 是否隐藏,默认是隐藏\n */\n hide = true;\n /**\n * 优先级\n */\n priority = 0;\n /**\n * 包围盒\n */\n boundingBox: Box3 = new Box3();\n /**\n * 是否显示包围盒\n */\n visBoundingBox = false;\n /**\n * 包围盒 Mesh\n */\n boundingBoxMesh?: BoxMesh;\n /**\n * 是否调用 Build\n */\n isBuilt = false;\n /**\n * 是否销毁\n */\n isDisposed = false;\n\n /**\n * 构造函数,创建 Mesh 对象,并与所属组件和父元素相关联\n * @param engine - 引擎\n * @param name - 名称\n * @param meshData - Mesh 参数\n * @param owner - 所属的 Mesh 组件\n * @param parentId - 父元素索引\n * @param parent - 父元素\n */\n constructor (\n private engine: Engine,\n name: string,\n meshData: ModelMeshComponentData,\n owner: ModelMeshComponent,\n parentId?: string,\n parent?: VFXItem,\n ) {\n super();\n const proxy = new EffectsMeshProxy(meshData, owner, parent);\n\n this.name = name;\n this.type = PObjectType.mesh;\n this.visible = false;\n this.owner = owner;\n //\n this.parentIndex = proxy.getParentIndex();\n this.parentItem = proxy.parentItem;\n this.parentItemId = parentId;\n this.rootBoneItem = meshData.rootBone as unknown as VFXItem;\n this.skin = proxy.getSkinObj(engine);\n this.morph = proxy.getMorphObj();\n this.hide = proxy.isHide();\n this.priority = owner?.item?.renderOrder || 0;\n //\n this.subMeshes = [];\n const geometry = proxy.getGeometry() as unknown as Geometry;\n const materials = owner?.materials ?? [];\n\n materials.forEach(material => {\n const subMesh = new PSubMesh(this.engine);\n\n subMesh.create(geometry, material, this);\n this.subMeshes.push(subMesh);\n });\n\n if (this.subMeshes.length <= 0) {\n console.warn(`No primitive inside mesh item ${name}.`);\n }\n\n this.boundingBox = this.getItemBoundingBox(meshData.interaction);\n }\n\n /**\n * 创建 GE 的 Mesh、Geometry 和 Material 对象\n * @param scene - 场景管理器\n * @returns\n */\n build (scene: PSceneManager) {\n if (this.isBuilt) {\n return;\n }\n\n this.isBuilt = true;\n this.subMeshes.forEach(prim => {\n prim.build(scene.maxLightCount, scene.skybox);\n });\n\n if (PGlobalState.getInstance().visBoundingBox) {\n this.boundingBoxMesh = new BoxMesh(this.engine, this.priority);\n }\n }\n\n /**\n * 更新变换数据和蒙皮数据\n */\n override update () {\n if (this.owner !== undefined) {\n this.transform.fromEffectsTransform(this.owner.transform);\n\n if (this.morph && this.morph.hasMorph() && this.owner.morphWeights.length > 0) {\n this.morph.updateWeights(this.owner.morphWeights);\n }\n }\n }\n\n /**\n * 更新骨骼动画\n */\n lateUpdate () {\n this.skin?.updateSkinMatrices();\n }\n\n /**\n * 渲染 Mesh 对象,需要将内部相关数据传给渲染器\n * @param scene - 场景\n * @param renderer - 渲染器\n */\n override render (scene: PSceneManager, renderer: Renderer) {\n this.updateMaterial(scene);\n\n this.subMeshes.forEach((subMesh, index) => {\n renderer.drawGeometry(\n subMesh.getEffectsGeometry(),\n subMesh.getEffectsMaterial(),\n index\n );\n });\n\n if (this.visBoundingBox && this.boundingBoxMesh !== undefined) {\n const mesh = this.boundingBoxMesh.mesh;\n\n renderer.drawGeometry(mesh.geometry, mesh.material);\n }\n }\n\n /**\n * 销毁,需要主动释放蒙皮、morph 和 Mesh 等相关的对象\n * @returns\n */\n override dispose () {\n if (this.isDisposed) {\n return;\n }\n\n super.dispose();\n\n this.owner = undefined;\n this.isDisposed = true;\n // @ts-expect-error\n this.engine = null;\n this.parentItem = undefined;\n this.skin?.dispose();\n this.skin = undefined;\n this.morph?.dispose();\n this.morph = undefined;\n this.subMeshes.forEach(prim => {\n prim.dispose();\n });\n this.subMeshes = [];\n this.boundingBoxMesh?.dispose();\n this.boundingBoxMesh = undefined;\n }\n\n /**\n * 更新 Morph 动画权重\n * 每帧都会更新 Morph 动画权重,需要小心检查 Morph 动画参数\n * 对于数组长度对不上的情况,直接报错\n *\n * @param weightsArray - Morph 动画的权重数组\n */\n updateMorphWeights (weightsArray: Float32Array) {\n if (this.morph === undefined || !this.morph.hasMorph()) {\n return;\n }\n\n const updatedArray = this.morph.morphWeightsArray;\n\n if (updatedArray === undefined) {\n return;\n }\n\n if (updatedArray.length != weightsArray.length) {\n throw new Error('Weight array length mismatch.');\n }\n\n for (let i = 0; i < updatedArray.length; i++) {\n updatedArray[i] = weightsArray[i];\n }\n }\n\n /**\n * 更新父 VFX 元素\n * @param parentId - 父元素索引\n * @param parentItem - 父 VFX 元素\n */\n updateParentInfo (parentId: string, parentItem: VFXItem) {\n this.parentItemId = parentId;\n this.parentItem = parentItem;\n if (this.skin !== undefined) {\n this.skin.updateParentItem(parentItem);\n }\n }\n\n /**\n * 根据当前场景状态更新内部材质数据\n * @param scene - 场景管理器\n */\n updateMaterial (scene: PSceneManager) {\n const worldMatrix = this.matrix;\n const normalMatrix = worldMatrix.clone().invert().transpose();\n const sceneStates = scene.sceneStates;\n\n this.subMeshes.forEach(prim => {\n prim.updateMaterial(worldMatrix, normalMatrix, sceneStates);\n });\n\n if (this.boundingBoxMesh !== undefined) {\n this.computeBoundingBox(worldMatrix);\n const lineColor = new Vector3(1, 1, 1);\n const minPos = this.boundingBox.min;\n const maxPos = this.boundingBox.max;\n const positions = new Float32Array([\n minPos.x, minPos.y, minPos.z,\n maxPos.x, minPos.y, minPos.z,\n maxPos.x, maxPos.y, minPos.z,\n minPos.x, maxPos.y, minPos.z,\n\n minPos.x, minPos.y, maxPos.z,\n maxPos.x, minPos.y, maxPos.z,\n maxPos.x, maxPos.y, maxPos.z,\n minPos.x, maxPos.y, maxPos.z,\n ]);\n\n this.boundingBoxMesh.update(worldMatrix, sceneStates.viewProjectionMatrix, positions, lineColor);\n }\n }\n\n /**\n * 点击测试,对于编辑器模式会进行精准的点击测试,否则就和内部的包围盒进行测试\n * @param rayOrigin - 射线原点\n * @param rayDirection - 射线方向\n * @returns 交点列表\n */\n hitTesting (rayOrigin: Vector3, rayDirection: Vector3): Vector3[] {\n const worldMatrix = this.matrix;\n const invWorldMatrix = worldMatrix.clone().invert();\n const newOrigin = invWorldMatrix.transformPoint(rayOrigin, new Vector3());\n const newDirection = invWorldMatrix.transformNormal(rayDirection, new Vector3());\n\n const bounding = this.boundingBox;\n const boxt = RayBoxTesting(newOrigin, newDirection, bounding.min, bounding.max);\n\n if (boxt === undefined) {\n return [];\n }\n\n let mint: number | undefined;\n\n if (PGlobalState.getInstance().isEditorEnv) {\n this.subMeshes.forEach(prim => {\n const primt = prim.hitTesting(newOrigin, newDirection, worldMatrix, invWorldMatrix);\n\n if (primt !== undefined) {\n if (mint === undefined || mint > primt) {\n mint = primt;\n }\n }\n });\n } else {\n mint = boxt;\n }\n\n if (mint === undefined) {\n return [];\n }\n\n newDirection.multiply(mint);\n newOrigin.add(newDirection);\n worldMatrix.transformPoint(newOrigin);\n\n return [newOrigin];\n }\n\n /**\n * 计算包围盒,根据传入的世界矩阵\n * @param worldMatrix - 世界矩阵\n * @returns\n */\n computeBoundingBox (worldMatrix: Matrix4): Box3 {\n const box = this.boundingBox.makeEmpty();\n const inverseWorldMatrix = worldMatrix.clone().invert();\n\n this.subMeshes.forEach(prim => {\n const subbox = prim.computeBoundingBox(inverseWorldMatrix);\n\n box.union(subbox);\n });\n\n return box;\n }\n\n private getItemBoundingBox (inBounding?: ModelItemBounding) {\n if (inBounding === undefined) {\n return new Box3();\n }\n\n if (inBounding.type === spec.ModelBoundingType.box) {\n const center = inBounding.center ?? [0, 0, 0];\n const size = inBounding.size ?? [0, 0, 0];\n const c = Vector3.fromArray(center);\n const hs = Vector3.fromArray(size).multiply(0.5);\n const minVector = c.clone().subtract(hs);\n const maxVector = c.clone().add(hs);\n\n return new Box3(minVector, maxVector);\n } else {\n const center = inBounding.center ?? [0, 0, 0];\n const halfRadius = (inBounding.radius ?? 0) * 0.5;\n const c = Vector3.fromArray(center);\n const minVector = c.clone().subtract(halfRadius);\n const maxVector = c.clone().add(halfRadius);\n\n return new Box3(minVector, maxVector);\n }\n }\n\n /**\n * 获取父节点 id\n * @returns\n */\n getParentId (): string | undefined {\n return this.parentItemId;\n }\n\n /**\n * 是否有蒙皮\n */\n get hasSkin (): boolean {\n return this.skin !== undefined;\n }\n\n}\n\n/**\n * PSubMesh 类,负责 Sub Mesh相关的功能,支持骨骼动画和 PBR 渲染\n */\nexport class PSubMesh {\n /**\n * 宿主 Mesh,包含了当前 Primitive\n */\n private parent?: PMesh;\n private skin?: PSkin; // from owner mesh\n /**\n * Morph 动画状态数据,来自 Mesh 对象,这里不创建不删除\n */\n private morph?: PMorph;\n private geometry: PGeometry;\n private material: PMaterial;\n //\n private jointMatrixList?: Float32Array;\n private jointNormalMatList?: Float32Array;\n private jointMatrixTexture?: PAnimTexture;\n private jointNormalMatTexture?: PAnimTexture;\n /**\n * 名称\n */\n name = '';\n /**\n * 渲染优先级\n */\n effectsPriority = 0;\n /**\n * 包围盒\n */\n boundingBox = new Box3();\n /**\n * 是否压缩,模式不压缩\n */\n isCompressed = false;\n\n constructor (private engine: Engine) {\n\n }\n\n /**\n * 创建 Primitive 对象\n * @param data - Primitive 参数\n * @param parent - 所属 Mesh 对象\n */\n create (geometry: Geometry, material: Material, parent: PMesh) {\n this.parent = parent;\n this.skin = parent.skin;\n this.morph = parent.morph;\n this.setGeometry(geometry);\n this.setMaterial(material);\n this.name = parent.name;\n this.effectsPriority = parent.priority;\n this.geometry.setHide(parent.hide);\n\n if (this.skin !== undefined) {\n const jointCount = this.skin.maxJointCount;\n\n this.jointMatrixList = new Float32Array(jointCount * 16);\n this.jointNormalMatList = new Float32Array(jointCount * 16);\n if (this.skin.isTextureDataMode()) {\n const isHalfFloat = this.skin.textureDataMode === TextureDataMode.half_float;\n\n this.jointMatrixTexture = new PAnimTexture(this.engine);\n this.jointNormalMatTexture = new PAnimTexture(this.engine);\n this.jointMatrixTexture.create(jointCount, isHalfFloat, 'jointMatrixTexture');\n this.jointNormalMatTexture.create(jointCount, isHalfFloat, 'jointNormalMatTexture');\n }\n } else {\n if (this.geometry.hasWeights() || this.geometry.hasJoints()) {\n // 最近出现发布后模型动画没播出来问题,\n // 是因为导出后 skin 属性丢失导致,所以增加这个检查\n console.warn('Geometry has weight and/or joint array, but the skin is missing.');\n }\n }\n\n this.isCompressed = this.geometry.isCompressed();\n\n //if (PGlobalState.getInstance().isTiny3dMode) {\n // if (this._material.isAdditive || this._material.isTranslucent()) { this.mriPriority += 10000; }\n //}\n }\n\n /**\n * 创建 GE Mesh、Geometry 和 Material 对象,用于后面的渲染\n * @param lightCount - 灯光数目\n * @param skybox - 天空盒\n */\n build (lightCount: number, skybox?: PSkybox) {\n const globalState = PGlobalState.getInstance();\n const primitiveMacroList = this.getMacroList(lightCount, true, skybox);\n const materialMacroList = this.material.getMacroList(primitiveMacroList);\n\n let material: Material;\n const isWebGL2 = PGlobalState.getInstance().isWebGL2;\n\n if (this.material.effectMaterial) {\n material = this.material.effectMaterial;\n\n materialMacroList.forEach(macro => {\n const { name, value } = macro;\n\n material.enableMacro(name, value);\n });\n\n this.material.setMaterialStates(material);\n } else {\n material = Material.create(\n this.engine,\n {\n shader: {\n vertex: this.material.vertexShaderCode,\n fragment: this.material.fragmentShaderCode,\n shared: globalState.shaderShared,\n glslVersion: isWebGL2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n },\n }\n );\n this.material.setMaterialStates(material);\n }\n }\n\n // TODO: 待移除?\n private getFeatureList (lightCount: number, pbrPass: boolean, skybox?: PSkybox): string[] {\n const featureList: string[] = [];\n\n if (this.geometry.hasNormals()) {\n featureList.push('HAS_NORMALS 1');\n }\n if (this.geometry.hasTangents()) {\n featureList.push('HAS_TANGENTS 1');\n }\n if (this.geometry.hasUVCoords(1)) {\n featureList.push('HAS_UV_SET1 1');\n }\n if (this.geometry.hasUVCoords(2)) {\n featureList.push('HAS_UV_SET2 1');\n }\n\n if (this.morph !== undefined && this.morph.hasMorph()) {\n // 存在 Morph 动画,需要配置 Morph 动画相关的 Shader 宏定义\n // USE_MORPHING 是总开关,WEIGHT_COUNT 是 weights 数组长度(Shader)\n featureList.push('USE_MORPHING');\n featureList.push(`WEIGHT_COUNT ${this.morph.morphWeightsLength}`);\n for (let i = 0; i < this.morph.morphWeightsLength; i++) {\n if (this.morph.hasPositionMorph) {\n featureList.push(`HAS_TARGET_POSITION${i}`);\n }\n if (this.morph.hasNormalMorph) {\n featureList.push(`HAS_TARGET_NORMAL${i}`);\n }\n if (this.morph.hasTangentMorph) {\n featureList.push(`HAS_TARGET_TANGENT${i}`);\n }\n }\n }\n\n if (this.skin !== undefined) {\n featureList.push('USE_SKINNING 1');\n featureList.push(`JOINT_COUNT ${this.skin.getJointCount()}`);\n featureList.push('HAS_JOINT_SET1 1');\n featureList.push('HAS_WEIGHT_SET1 1');\n if (this.skin.textureDataMode) { featureList.push('USE_SKINNING_TEXTURE 1'); }\n }\n\n if (this.material.materialType !== PMaterialType.unlit) {\n // let hasLight = false;\n\n if (lightCount > 0 && this.geometry.hasNormals()) {\n // hasLight = true;\n featureList.push('USE_PUNCTUAL 1');\n featureList.push(`LIGHT_COUNT ${lightCount}`);\n }\n\n if (skybox !== undefined && skybox.available) {\n // hasLight = true;\n featureList.push('USE_IBL 1');\n featureList.push('USE_TEX_LOD 1');\n if (skybox.hasDiffuseImage) {\n // do nothing\n } else {\n featureList.push('IRRADIANCE_COEFFICIENTS 1');\n }\n }\n\n // if(!hasLight){\n // featureList.push('MATERIAL_UNLIT 1');\n // }\n }\n\n // 渲染中间结果输出,用于渲染效果调试,支持 pbr 和 unlit\n const renderMode = PGlobalState.getInstance().renderMode3D;\n const outputDefine = this.getRenderMode3DDefine(renderMode);\n\n if (outputDefine !== undefined) {\n featureList.push('DEBUG_OUTPUT 1');\n featureList.push(`${outputDefine} 1`);\n }\n\n return featureList;\n }\n\n private getMacroList (lightCount: number, pbrPass: boolean, skybox?: PSkybox): MacroInfo[] {\n const macroList: MacroInfo[] = [];\n\n if (this.geometry.hasNormals()) {\n macroList.push({ name: 'HAS_NORMALS' });\n }\n if (this.geometry.hasTangents()) {\n macroList.push({ name: 'HAS_TANGENTS' });\n }\n if (this.geometry.hasUVCoords(1)) {\n macroList.push({ name: 'HAS_UV_SET1' });\n }\n if (this.geometry.hasUVCoords(2)) {\n macroList.push({ name: 'HAS_UV_SET2' });\n }\n\n if (this.morph !== undefined && this.morph.hasMorph()) {\n // 存在 Morph 动画,需要配置 Morph 动画相关的 Shader 宏定义\n // USE_MORPHING 是总开关,WEIGHT_COUNT 是 weights 数组长度(Shader)\n macroList.push({ name: 'USE_MORPHING' });\n macroList.push({ name: 'WEIGHT_COUNT', value: this.morph.morphWeightsLength });\n for (let i = 0; i < this.morph.morphWeightsLength; i++) {\n if (this.morph.hasPositionMorph) {\n macroList.push({ name: `HAS_TARGET_POSITION${i}` });\n }\n if (this.morph.hasNormalMorph) {\n macroList.push({ name: `HAS_TARGET_NORMAL${i}` });\n }\n if (this.morph.hasTangentMorph) {\n macroList.push({ name: `HAS_TARGET_TANGENT${i}` });\n }\n }\n }\n\n if (this.skin !== undefined) {\n macroList.push({ name: 'USE_SKINNING' });\n macroList.push({ name: 'JOINT_COUNT', value: this.skin.maxJointCount });\n macroList.push({ name: 'HAS_JOINT_SET1' });\n macroList.push({ name: 'HAS_WEIGHT_SET1' });\n if (this.skin.textureDataMode) {\n macroList.push({ name: 'USE_SKINNING_TEXTURE' });\n }\n }\n\n if (this.material.materialType !== PMaterialType.unlit) {\n if (lightCount > 0 && this.geometry.hasNormals()) {\n macroList.push({ name: 'USE_PUNCTUAL' });\n macroList.push({ name: 'LIGHT_COUNT', value: lightCount });\n }\n\n if (skybox !== undefined && skybox.available) {\n macroList.push({ name: 'USE_IBL' });\n macroList.push({ name: 'USE_TEX_LOD' });\n if (skybox.hasDiffuseImage) {\n // do nothing\n } else {\n macroList.push({ name: 'IRRADIANCE_COEFFICIENTS' });\n }\n }\n\n // if(!hasLight){\n // featureList.push('MATERIAL_UNLIT 1');\n // }\n }\n\n // 渲染中间结果输出,用于渲染效果调试,支持 pbr 和 unlit\n const renderMode = PGlobalState.getInstance().renderMode3D;\n const outputDefine = this.getRenderMode3DDefine(renderMode);\n\n if (outputDefine !== undefined) {\n macroList.push({ name: 'DEBUG_OUTPUT' });\n macroList.push({ name: outputDefine });\n }\n\n return macroList;\n }\n\n /**\n * 销毁,需要释放创建的 GE 对象\n */\n dispose () {\n // @ts-expect-error\n this.engine = null;\n this.parent = undefined;\n this.skin = undefined;\n this.morph = undefined;\n this.geometry.dispose();\n this.material.dispose();\n //\n this.jointMatrixList = undefined;\n this.jointNormalMatList = undefined;\n this.jointMatrixTexture?.dispose();\n this.jointMatrixTexture = undefined;\n this.jointNormalMatTexture?.dispose();\n this.jointNormalMatTexture = undefined;\n }\n\n /**\n * 更新内部 GE 材质着色器 Uniform 数据,根据场景状态\n * @param worldMatrix - 世界矩阵\n * @param nomralMatrix - 法线矩阵\n * @param sceneStates - 场景状态\n */\n updateMaterial (worldMatrix: Matrix4, nomralMatrix: Matrix4, sceneStates: PSceneStates) {\n this.updateUniformsByAnimation(worldMatrix, nomralMatrix);\n this.updateUniformsByScene(sceneStates);\n this.material.updateUniforms(this.getEffectsMaterial());\n }\n\n /**\n * 点击测试,先进行简单的包围合测试,然后再计算精准的点击测试,这个测试非常耗时不要在移动端上使用\n * @param newOrigin - 射线原点\n * @param newDirection - 射线方向\n * @param worldMatrix - 世界矩阵\n * @param invWorldMatrix - 逆世界矩阵\n * @returns 射线的 t 参数\n */\n hitTesting (newOrigin: Vector3, newDirection: Vector3, worldMatrix: Matrix4, invWorldMatrix: Matrix4) {\n const bounding = this.boundingBox;\n const boxt = RayBoxTesting(newOrigin, newDirection, bounding.min, bounding.max);\n const bindMatrices: Matrix4[] = [];\n\n if (boxt === undefined) {\n return;\n }\n\n if (this.skin !== undefined) {\n const animMatrices = this.skin.animationMatrices;\n\n animMatrices.forEach(mat => {\n bindMatrices.push(new Matrix4().multiplyMatrices(invWorldMatrix, mat));\n });\n }\n\n const proxy = new HitTestingProxy();\n const doubleSided = this.material.isBothSide();\n\n proxy.create(this.geometry.geometry, doubleSided, bindMatrices);\n\n return proxy.getHitPoint(newOrigin, newDirection);\n }\n\n /**\n * 计算包围盒\n * @param inverseWorldMatrix - 逆世界矩阵\n * @returns\n */\n computeBoundingBox (inverseWorldMatrix: Matrix4): Box3 {\n if (this.skin === undefined && !this.boundingBox.isEmpty()) {\n // 包围盒缓存了,直接返回计算的结果\n return this.boundingBox;\n }\n\n // 重新计算包围盒\n const bindMatrices: Matrix4[] = [];\n\n if (this.skin !== undefined) {\n const animMatrices = this.skin.animationMatrices;\n\n animMatrices.forEach(mat => {\n bindMatrices.push(new Matrix4().multiplyMatrices(inverseWorldMatrix, mat));\n });\n }\n\n const proxy = new GeometryBoxProxy();\n\n proxy.create(this.geometry.geometry, bindMatrices);\n\n return proxy.getBoundingBox(this.boundingBox);\n }\n\n /**\n * 渲染输出模式转成着色器中的宏定义\n * @param mode - 渲染输出模式\n * @returns 返回相应的宏定义\n */\n getRenderMode3DDefine (mode: spec.RenderMode3D): string | undefined {\n switch (mode) {\n case spec.RenderMode3D.uv:\n return 'DEBUG_UV';\n case spec.RenderMode3D.normal:\n return 'DEBUG_NORMAL';\n case spec.RenderMode3D.basecolor:\n return 'DEBUG_BASECOLOR';\n case spec.RenderMode3D.alpha:\n return 'DEBUG_ALPHA';\n case spec.RenderMode3D.metallic:\n return 'DEBUG_METALLIC';\n case spec.RenderMode3D.roughness:\n return 'DEBUG_ROUGHNESS';\n case spec.RenderMode3D.ao:\n return 'DEBUG_OCCLUSION';\n case spec.RenderMode3D.emissive:\n return 'DEBUG_EMISSIVE';\n }\n }\n\n private updateUniformsByAnimation (worldMatrix: Matrix4, normalMatrix: Matrix4) {\n const material = this.getEffectsMaterial();\n\n material.setMatrix('effects_ObjectToWorld', worldMatrix);\n material.setMatrix('_NormalMatrix', normalMatrix);\n //\n const skin = this.skin;\n\n if (skin !== undefined) {\n const jointMatrixList = this.jointMatrixList as Float32Array;\n const jointNormalMatList = this.jointNormalMatList as Float32Array;\n\n skin.computeMeshAnimMatrices(worldMatrix, jointMatrixList, jointNormalMatList);\n if (skin.textureDataMode) {\n const jointMatrixTexture = this.jointMatrixTexture as PAnimTexture;\n const jointNormalMatTexture = this.jointNormalMatTexture as PAnimTexture;\n\n jointMatrixTexture.update(jointMatrixList);\n jointNormalMatTexture.update(jointNormalMatList);\n material.setTexture('_jointMatrixSampler', jointMatrixTexture.getTexture());\n material.setTexture('_jointNormalMatrixSampler', jointNormalMatTexture.getTexture());\n } else {\n const jointMatrixNumbers: number[] = [];\n const jointNormalMatNumbers: number[] = [];\n\n jointMatrixList.forEach(val => jointMatrixNumbers.push(val));\n jointNormalMatList.forEach(val => jointNormalMatNumbers.push(val));\n material.setMatrixNumberArray('_jointMatrix', jointMatrixNumbers);\n material.setMatrixNumberArray('_jointNormalMatrix', jointNormalMatNumbers);\n }\n }\n\n // Morph 相关的数据更新,仅需要更新 weights 数组\n const morph = this.morph;\n\n if (morph !== undefined && morph.hasMorph()) {\n const morphWeights = morph.morphWeightsArray.slice();\n\n material.setFloats('_morphWeights', morphWeights);\n }\n }\n\n private updateUniformsByScene (sceneStates: PSceneStates) {\n const material = this.getEffectsMaterial();\n\n material.setMatrix('effects_MatrixVP', sceneStates.viewProjectionMatrix);\n material.setVector3('_Camera', sceneStates.cameraPosition);\n //\n if (!this.isUnlitMaterial()) {\n const { maxLightCount, lightList } = sceneStates;\n\n for (let i = 0; i < maxLightCount; i++) {\n if (i < lightList.length) {\n const light = lightList[i];\n const intensity = light.visible ? light.intensity : 0;\n\n material.setVector3(`_Lights[${i}].direction`, light.getWorldDirection());\n material.setFloat(`_Lights[${i}].range`, light.range);\n material.setVector3(`_Lights[${i}].color`, light.color);\n material.setFloat(`_Lights[${i}].intensity`, intensity);\n material.setVector3(`_Lights[${i}].position`, light.getWorldPosition());\n material.setFloat(`_Lights[${i}].innerConeCos`, Math.cos(light.innerConeAngle));\n material.setFloat(`_Lights[${i}].outerConeCos`, Math.cos(light.outerConeAngle));\n material.setInt(`_Lights[${i}].type`, light.lightType);\n material.setVector2(`_Lights[${i}].padding`, light.padding);\n } else {\n material.setVector3(`_Lights[${i}].direction`, Vector3.ZERO);\n material.setFloat(`_Lights[${i}].range`, 0);\n material.setVector3(`_Lights[${i}].color`, Vector3.ZERO);\n material.setFloat(`_Lights[${i}].intensity`, 0);\n material.setVector3(`_Lights[${i}].position`, Vector3.ZERO);\n material.setFloat(`_Lights[${i}].innerConeCos`, 0);\n material.setFloat(`_Lights[${i}].outerConeCos`, 0);\n material.setInt(`_Lights[${i}].type`, 99999);\n material.setVector2(`_Lights[${i}].padding`, Vector2.ZERO);\n }\n }\n\n const skybox = sceneStates.skybox;\n\n if (skybox !== undefined && skybox.available) {\n material.setVector2('_IblIntensity', new Vector2(skybox.currentIntensity, skybox.currentReflectionsIntensity));\n material.setTexture('_brdfLUT', skybox.brdfLUT as Texture);\n if (skybox.diffuseImage !== undefined) {\n material.setTexture('_DiffuseEnvSampler', skybox.diffuseImage);\n } else {\n const coeffs = skybox.irradianceCoeffs as number[][];\n const aliasName = ['l00', 'l1m1', 'l10', 'l11', 'l2m2', 'l2m1', 'l20', 'l21', 'l22'];\n\n aliasName.forEach((n, i) => {\n material.setVector3(`_shCoefficients.${n}`, Vector3.fromArray(coeffs[i] as spec.vec3));\n });\n }\n material.setInt('_MipCount', skybox.specularMipCount - 1);\n material.setTexture('_SpecularEnvSampler', skybox.specularImage);\n }\n }\n }\n\n /**\n * 是否有蒙皮\n * @returns\n */\n hasSkin (): boolean {\n return this.skin !== undefined;\n }\n\n /**\n * 获取 GE 几何体\n * @returns\n */\n getEffectsGeometry (): Geometry {\n return this.geometry.geometry;\n }\n\n /**\n * 设置几何体\n * @param val - 插件或 GE 几何体\n */\n setGeometry (val: PGeometry | Geometry) {\n if (val instanceof PGeometry) {\n this.geometry = val;\n } else {\n this.geometry = new PGeometry(val);\n }\n }\n\n /**\n * 设置材质\n * @param val - 插件材质对象或材质参数\n */\n setMaterial (val: PMaterial | Material) {\n if (val instanceof PMaterialUnlit) {\n this.material = val;\n } else if (val instanceof PMaterialPBR) {\n this.material = val;\n } else {\n this.material = createPluginMaterial(val);\n }\n }\n\n /**\n * 获取 GE 材质\n * @returns\n */\n getEffectsMaterial (): Material {\n return this.material.effectMaterial;\n }\n\n /**\n * 是否无光照材质\n * @returns\n */\n isUnlitMaterial (): boolean {\n return this.material.materialType === PMaterialType.unlit;\n }\n\n /**\n * 是否有 Morph 动画:\n * 需要注意 Morph 对象存在,但还是没有 Morph 动画的情况\n * @returns 返回是否有 Morph 动画\n */\n hasMorph (): boolean {\n if (this.morph === undefined) {\n return false;\n }\n\n return this.morph.hasMorph();\n }\n\n /**\n * 获取世界坐标下的包围盒\n * @returns\n */\n getWorldBoundingBox (): Box3 {\n if (this.parent === undefined) {\n if (this.boundingBox.isEmpty()) {\n this.computeBoundingBox(Matrix4.fromIdentity());\n }\n\n return this.boundingBox;\n } else {\n const matrix = this.parent.matrix;\n\n if (this.boundingBox.isEmpty()) {\n this.computeBoundingBox(matrix.clone().invert());\n }\n\n return this.boundingBox.clone().applyMatrix4(matrix);\n }\n }\n}\n\n/**\n * 3D 几何类\n */\nexport class PGeometry {\n /**\n * 属性名称数组\n */\n attributeNames: string[];\n\n /**\n * 创建 3D 几何体,根据 GE 几何体\n * @param geometry - GE 几何体\n */\n constructor (public geometry: Geometry) {\n this.attributeNames = geometry.getAttributeNames();\n }\n\n /**\n * 销毁\n */\n dispose () {\n // @ts-expect-error\n this.geometry = undefined;\n this.attributeNames = [];\n }\n\n /**\n * 是否有某个属性\n * @param name - 属性名\n * @returns\n */\n hasAttribute (name: string): boolean {\n const index = this.attributeNames.findIndex(item => {\n return item === name;\n });\n\n return index !== -1;\n }\n\n /**\n * 设置隐藏,通过修改几何体中的渲染数目\n * @param hide - 隐藏值\n */\n setHide (hide: boolean) {\n const geomExt = this.geometry as GeometryExt;\n\n if (geomExt.getDrawCount() === 0) {\n const indexArray = geomExt.getIndexData();\n\n if (indexArray !== undefined) {\n geomExt.setDrawCount(indexArray.length);\n }\n }\n if (hide) {\n if (geomExt.getDrawCount() >= 0) {\n geomExt.setDrawCount(-geomExt.getDrawCount());\n }\n } else {\n if (geomExt.getDrawCount() < 0) {\n geomExt.setDrawCount(-geomExt.getDrawCount());\n }\n }\n }\n\n /**\n * 是否压缩格式\n * @returns\n */\n isCompressed (): boolean {\n const positionAttrib = this.geometry.getAttributeData('aPos');\n\n if (positionAttrib === undefined) {\n return false;\n }\n\n // FIXME: get attributes from geometry\n //return positionAttrib.normalize === true;\n return false;\n }\n\n /**\n * 是否有位置属性\n * @returns\n */\n hasPositions (): boolean {\n return this.hasAttribute('aPos');\n }\n\n /**\n * 是否有法线属性\n * @returns\n */\n hasNormals (): boolean {\n return this.hasAttribute('aNormal');\n }\n\n /**\n * 是否有切线属性\n * @returns\n */\n hasTangents (): boolean {\n return this.hasAttribute('aTangent');\n }\n\n /**\n * 是否有纹理坐标属性\n * @param index - 纹理坐标索引\n * @returns\n */\n hasUVCoords (index: number): boolean {\n if (index === 1) {\n return this.hasAttribute('aUV');\n } else {\n return this.hasAttribute(`aUV${index}`);\n }\n }\n\n /**\n * 是否有颜色属性\n * @returns\n */\n hasColors (): boolean {\n return this.hasAttribute('aColor');\n }\n\n /**\n * 是否有关节点属性\n * @returns\n */\n hasJoints (): boolean {\n return this.hasAttribute('aJoints');\n }\n\n /**\n * 是否有权重属性\n * @returns\n */\n hasWeights (): boolean {\n return this.hasAttribute('aWeights');\n }\n}\n\nclass EffectsMeshProxy {\n data: ModelMeshComponentData;\n geometry: Geometry;\n rootBoneItem: VFXItem;\n morphObj: PMorph;\n\n constructor (\n public itemData: ModelMeshComponentData,\n public parentComponent: ModelMeshComponent,\n public parentItem?: VFXItem,\n ) {\n this.data = itemData;\n this.geometry = itemData.geometry as unknown as Geometry;\n this.rootBoneItem = itemData.rootBone as unknown as VFXItem;\n\n const morphObj = new PMorph();\n\n if (morphObj.create(this.geometry)) {\n // 设置初始权重数组\n if (itemData.morph?.weights) {\n morphObj.initWeights(itemData.morph?.weights);\n }\n\n this.morphObj = morphObj;\n }\n }\n\n hasMorphTarget (): boolean {\n return this.morphObj.hasMorph();\n }\n\n /**\n * 返回 Morph 对象\n * 需要先判断是否有 Morph 动画,如果没有就直接返回 undefined\n *\n * @returns 缓存的 Morph 对象,或者 undefined\n */\n getMorphObj (): PMorph | undefined {\n if (!this.hasMorphTarget()) {\n return;\n }\n\n return this.morphObj;\n }\n\n isHide (): boolean {\n return this.data.hide === true;\n }\n\n getParentNode (): ModelTreeNode | undefined {\n const nodeIndex = this.getParentIndex();\n const parentTree = this.parentItem?.getComponent(ModelTreeComponent);\n\n if (parentTree !== undefined && nodeIndex >= 0) {\n return parentTree.content.getNodeById(nodeIndex);\n }\n\n return undefined;\n }\n\n getParentIndex (): number {\n return -1;\n }\n\n getGeometry () {\n return this.data.geometry;\n }\n\n getMaterials () {\n return this.data.materials;\n }\n\n getMaterialCount () {\n return this.data.materials.length;\n }\n\n hasSkin (): boolean {\n const skin = this.geometry.getSkinProps();\n\n return !!(skin.rootBoneName && skin.boneNames && skin.inverseBindMatrices && this.rootBoneItem);\n }\n\n getSkinOpts () {\n return this.geometry.getSkinProps();\n }\n\n getSkinObj (engine: Engine): PSkin | undefined {\n const skin = this.getSkinOpts();\n\n if (skin.rootBoneName && skin.boneNames && skin.inverseBindMatrices && this.rootBoneItem) {\n const skinObj = new PSkin();\n const maxJointCount = this.parentComponent.sceneManager?.maxJointCount ?? 0;\n\n skinObj.create(skin, engine, this.rootBoneItem, maxJointCount);\n\n return skinObj;\n }\n\n return undefined;\n }\n}\n\nexport interface MacroInfo {\n name: string,\n value?: boolean | number,\n}\n\ninterface GeometryExt extends Geometry {\n newDrawCount?: number,\n}\n","import type { Mesh, Renderer, Texture, Engine, math, CameraOptionsEx } from '@galacean/effects';\nimport { Transform, spec, addItem, removeItem, PLAYER_OPTIONS_ENV_EDITOR } from '@galacean/effects';\nimport { PMesh } from './mesh';\nimport type { PCamera } from './camera';\nimport { PCameraManager } from './camera';\nimport { PLight, PLightManager } from './light';\nimport type { Vector3 } from './math';\nimport { Matrix4, Box3 } from './math';\nimport { PSkybox } from './skybox';\nimport { PTransform, PGlobalState, PObjectType } from './common';\nimport type { CompositionCache } from './cache';\nimport type { PEntity } from './object';\nimport { WebGLHelper } from '../utility/plugin-helper';\nimport { TwoStatesSet } from '../utility/ts-helper';\nimport type { ModelMeshComponent } from '../plugin';\n\ntype Box3 = math.Box3;\ntype Vector2 = math.Vector2;\n\n/**\n * 场景参数接口,初始化场景对象时使用\n */\nexport interface PSceneOptions {\n /**\n * 合成名称\n */\n componentName: string,\n /**\n * 渲染器\n */\n renderer: Renderer,\n /**\n * 场景缓存\n */\n sceneCache: CompositionCache,\n /**\n * 是否只渲染线框\n */\n wireframeOnly?: boolean,\n /**\n * 运行时环境\n */\n runtimeEnv?: string,\n /**\n * 兼容模式\n */\n compatibleMode?: string,\n /**\n * 是否可视化包围盒\n */\n visBoundingBox?: boolean,\n /**\n * 是否动态排序\n */\n enableDynamicSort?: boolean,\n /**\n * 3D 渲染模式\n */\n renderMode3D?: spec.RenderMode3D,\n /**\n * 3D 渲染模式中棋盘格大小\n */\n renderMode3DUVGridSize?: number,\n /**\n * 是否渲染天空盒\n */\n renderSkybox: boolean,\n /**\n * 灯光元素数目\n */\n lightItemCount: number,\n /**\n * 最大骨骼数目\n */\n maxJointCount: number,\n}\n\n/**\n * 场景状态接口,每次场景管理器 Tick 时都会生成\n */\nexport interface PSceneStates {\n /**\n * 时间间隔\n */\n deltaSeconds: number,\n /**\n * 相机对象\n */\n camera: PCamera,\n /**\n * 相机位置\n */\n cameraPosition: Vector3,\n /**\n * 相机矩阵\n */\n viewMatrix: Matrix4,\n /**\n * 投影矩阵\n */\n projectionMatrix: Matrix4,\n /**\n * 相机投影矩阵\n */\n viewProjectionMatrix: Matrix4,\n /**\n * 画布大小\n */\n winSize: Vector2,\n /**\n * 场景半径\n */\n sceneRadius: number,\n // for shadow\n shadowMapSizeInv?: Vector2,\n lightViewMatrix?: Matrix4,\n lightProjectionMatrix?: Matrix4,\n lightViewProjectionMatrix?: Matrix4,\n /**\n * 灯光对象列表\n */\n lightList: PLight[],\n /**\n * 最大灯光数目\n */\n maxLightCount: number,\n /**\n * 最大骨骼数目\n */\n maxJointCount: number,\n /**\n * 天空盒对象\n */\n skybox?: PSkybox,\n}\n\n/**\n * 场景管理类,如果存在 Model 插件中的元素才会创建\n */\nexport class PSceneManager {\n /**\n * 合成名称\n */\n compName: string;\n /**\n * 实体列表\n */\n itemList: PEntity[];\n /**\n * Mesh 列表\n */\n meshList: PMesh[];\n /**\n * 灯光管理器\n */\n lightManager: PLightManager;\n /**\n * 相机管理器\n */\n cameraManager: PCameraManager;\n /**\n * 是否动态排序 Mesh 渲染优先级\n * 默认 false,需要和 Tiny 对齐时为 true\n */\n enableDynamicSort: boolean;\n /**\n * IBL 渲染时的 BRDF 查询纹理\n */\n brdfLUT?: Texture;\n /**\n * 天空盒\n */\n skybox?: PSkybox;\n /**\n * Tick 次数\n */\n tickCount: number;\n /**\n * 最近 Tick 时间\n */\n lastTickSecond: number;\n /**\n * 当前场景包围盒缓存,在阴影渲染中使用\n */\n sceneAABBCache: Box3;\n /**\n * 场景前帧和当前帧渲染的 Mesh 集合\n */\n renderedMeshSet: TwoStatesSet<Mesh>;\n /**\n * 最多灯光数目\n */\n maxLightCount = 16;\n /**\n * 最大骨骼数目\n */\n maxJointCount = 0;\n /**\n * 场景状态\n */\n sceneStates: PSceneStates;\n\n private renderer?: Renderer;\n private sceneCache?: CompositionCache;\n private parentId2Mesh: Map<string, PMesh>;\n private renderSkybox = false;\n\n private engine: Engine;\n\n constructor (engine: Engine) {\n this.compName = 'SceneManger';\n this.itemList = [];\n this.meshList = [];\n this.engine = engine;\n this.lightManager = new PLightManager();\n this.cameraManager = new PCameraManager();\n this.parentId2Mesh = new Map();\n //\n this.enableDynamicSort = false;\n this.tickCount = 0;\n this.lastTickSecond = -1;\n //\n this.sceneAABBCache = new Box3();\n this.renderedMeshSet = new TwoStatesSet();\n }\n\n /**\n * 初始化场景管理器,设置全局状态\n * @param opts - 场景参数\n */\n initial (opts: PSceneOptions) {\n this.clean();\n this.compName = opts.componentName;\n this.renderer = opts.renderer;\n this.engine = opts.renderer.engine;\n this.sceneCache = opts.sceneCache;\n this.enableDynamicSort = opts.enableDynamicSort === true;\n this.renderSkybox = opts.renderSkybox;\n this.maxLightCount = opts.lightItemCount;\n this.maxJointCount = opts.maxJointCount;\n this.cameraManager.initial(this.renderer.getWidth(), this.renderer.getHeight());\n this.brdfLUT = this.sceneCache.getBrdfLutTexture();\n this.initGlobalState(opts);\n\n if (this.maxLightCount > 8) {\n console.warn(`Too many light items: ${this.maxLightCount} light(s).`);\n }\n }\n\n private initGlobalState (opts: PSceneOptions) {\n const capbility = this.engine.gpuCapability;\n const globalState = PGlobalState.getInstance();\n\n globalState.reset();\n globalState.isWebGL2 = capbility.level === 2;\n //globalState.shaderShared = composition.env === PLAYER_OPTIONS_ENV_EDITOR;\n globalState.runtimeEnv = opts.runtimeEnv ?? PLAYER_OPTIONS_ENV_EDITOR;\n globalState.compatibleMode = opts.compatibleMode ?? 'gltf';\n globalState.visBoundingBox = opts.visBoundingBox ?? false;\n globalState.renderMode3D = opts.renderMode3D ?? spec.RenderMode3D.none;\n globalState.renderMode3DUVGridSize = opts.renderMode3DUVGridSize ?? 1 / 16;\n }\n\n private clean () {\n this.dispose();\n //\n this.compName = '';\n this.renderer = undefined;\n this.sceneCache = undefined;\n this.itemList = [];\n this.meshList = [];\n\n this.lightManager = new PLightManager();\n this.cameraManager = new PCameraManager();\n this.parentId2Mesh = new Map();\n this.brdfLUT = undefined;\n this.skybox = undefined;\n this.lastTickSecond = -1;\n //\n this.tickCount = 0;\n this.renderedMeshSet = new TwoStatesSet();\n }\n\n /**\n * 销毁,需要销毁各种管理器和创建的 WebGL 资源\n */\n dispose () {\n this.itemList.forEach(item => item.dispose());\n this.itemList = [];\n this.meshList.forEach(mesh => mesh.dispose());\n this.meshList = [];\n this.lightManager.dispose();\n this.cameraManager.dispose();\n this.brdfLUT = undefined;\n this.skybox?.dispose();\n this.skybox = undefined;\n this.renderedMeshSet.clear();\n //\n this.renderer = undefined;\n this.sceneCache = undefined;\n // @ts-expect-error\n this.engine = undefined;\n this.parentId2Mesh.clear();\n }\n\n /**\n * 添加插件元素到场景中\n * @param item - 插件元素\n */\n addItem (item: PMesh | PCamera | PLight | PSkybox) {\n if (item instanceof PMesh) {\n const mesh = item;\n\n if (mesh.parentItemId !== undefined) {\n this.parentId2Mesh.set(mesh.parentItemId, mesh);\n }\n\n addItem(this.meshList, mesh);\n } else if (item instanceof PSkybox) {\n const skybox = item;\n\n skybox.setup(this.brdfLUT);\n if (!this.renderSkybox) {\n // renderable会控制天空盒是否作为背景渲染,来自用户(编辑器)的输入\n // this.renderSkybox是播放时候的控制参数。\n // -- 如果是false,会强制天空不渲染。\n // -- 如果是true,会按照用户设置来渲染天空盒。\n skybox.renderable = false;\n }\n this.skybox = skybox;\n } else if (item instanceof PLight) {\n this.lightManager.insertLight(item);\n } else {\n this.cameraManager.insertCamera(item);\n }\n\n addItem(this.itemList, item);\n }\n\n /**\n * 从场景中删除插件元素\n * @param item - 插件元素\n */\n removeItem (item: PMesh | PCamera | PLight | PSkybox) {\n if (item instanceof PMesh) {\n const mesh = item;\n\n if (mesh.parentItemId !== undefined) {\n this.parentId2Mesh.delete(mesh.parentItemId);\n }\n\n removeItem(this.meshList, mesh);\n } else if (item instanceof PSkybox) {\n this.skybox = undefined;\n } else if (item instanceof PLight) {\n this.lightManager.remove(item);\n } else {\n this.cameraManager.remove(item);\n }\n\n removeItem(this.itemList, item);\n }\n\n /**\n * 更新默认相机状态,根据传入的相机参数\n * @param camera - 相机参数\n */\n updateDefaultCamera (camera: CameraOptionsEx, viewportMatrix: Matrix4) {\n const effectsTransfrom = new Transform({\n ...camera,\n valid: true,\n });\n\n const newTransform = new PTransform().fromEffectsTransform(effectsTransfrom);\n\n this.cameraManager.updateDefaultCamera(\n camera.fov,\n viewportMatrix,\n camera.aspect,\n camera.near,\n camera.far,\n newTransform.getPosition(),\n newTransform.getRotation(),\n camera.clipMode,\n );\n }\n\n /**\n * 更新插件场景,需要更新内部的相关的插件对象,特别是 Mesh 对象的骨骼动画\n * 并将需要渲染的对象添加到渲染对象集合中\n * @param deltaTime - 更新间隔\n */\n tick (deltaTime: number) {\n const deltaSeconds = deltaTime;\n const camera = this.activeCamera;\n const viewMatrix = camera.viewMatrix;\n const projectionMatrix = camera.projectionMatrix;\n const viewProjectionMatrix = projectionMatrix.clone().multiply(viewMatrix);\n\n this.sceneStates = {\n deltaSeconds: deltaSeconds,\n //\n camera: camera,\n cameraPosition: camera.getEye(),\n viewMatrix: viewMatrix,\n projectionMatrix: projectionMatrix,\n viewProjectionMatrix: viewProjectionMatrix,\n winSize: camera.getSize(),\n sceneRadius: 1.0,\n //\n lightList: this.lightManager.lightList,\n maxLightCount: this.maxLightCount,\n maxJointCount: this.maxJointCount,\n skybox: this.skybox,\n };\n\n if (this.enableDynamicSort) {\n this.dynamicSortMeshes(this.sceneStates);\n }\n\n this.tickCount += 1;\n this.lastTickSecond += deltaSeconds;\n }\n\n /**\n * 动态调整 Mesh 渲染优先级\n * 主要是为了和 Tiny 渲染对齐,正常渲染不进行调整\n * @param states - 场景中的状态数据\n */\n dynamicSortMeshes (states: PSceneStates) {\n const meshComponents: ModelMeshComponent[] = [];\n const priorityList: number[] = [];\n\n this.meshList.forEach(mesh => {\n if (mesh.owner && mesh.owner.enabled) {\n const component = mesh.owner;\n\n meshComponents.push(component);\n priorityList.push(component.priority);\n }\n });\n\n priorityList.sort((a, b) => a - b);\n\n // 按照 Tiny 排序算法,对 Mesh 对象进行排序\n // 将透明和不透明物体拆开,从而渲染正确\n const viewMatrix = states.viewMatrix;\n\n meshComponents.sort((a: ModelMeshComponent, b: ModelMeshComponent) => {\n const atransparent = WebGLHelper.isTransparentMesh(a);\n const btransparent = WebGLHelper.isTransparentMesh(b);\n\n if (atransparent && btransparent) {\n const aposition = a.transform.getWorldPosition();\n const bposition = b.transform.getWorldPosition();\n const anewPos = viewMatrix.transformPoint(aposition);\n const bnewPos = viewMatrix.transformPoint(bposition);\n\n if (anewPos.z === bnewPos.z) { return a.priority - b.priority; } else { return anewPos.z - bnewPos.z; }\n } else if (atransparent) {\n return 1;\n } else if (btransparent) {\n return -1;\n } else {\n return a.priority - b.priority;\n }\n });\n\n let prePriority = -99999;\n\n // 重新赋值渲染优先级\n for (let i = 0; i < meshComponents.length; i++) {\n const mesh = meshComponents[i];\n const priority = priorityList[i];\n\n if (prePriority < priority) {\n prePriority = priority;\n mesh.priority = priority;\n } else {\n prePriority += 0.1;\n mesh.priority = prePriority;\n }\n }\n }\n\n /**\n * 查询场景中的 Mesh\n * 通过 parentId 查询 Mesh 对象,可能找不到 Mesh 对象\n * @param parentId - Item 中定义的 parentId\n * @returns 查询到的 PMesh,或者是没找到。如果 Mesh 不可见,也是没找到。\n */\n queryMesh (parentId: string): PMesh | undefined {\n const mesh = this.parentId2Mesh.get(parentId);\n\n if (mesh === undefined || !mesh.visible) {\n return;\n }\n\n return mesh;\n }\n\n /**\n * 获取场景的包围盒\n * @param box - 包围盒\n * @returns 场景的包围盒\n */\n getSceneAABB (box?: Box3): Box3 {\n const sceneBox = box ?? new Box3();\n\n this.itemList.forEach(item => {\n if (item.type === PObjectType.mesh) {\n const mesh = item as PMesh;\n\n if (mesh.owner) {\n const transform = mesh.owner.item.getWorldTransform();\n const worldMatrix = transform.getWorldMatrix();\n const meshBox = mesh.computeBoundingBox(worldMatrix);\n\n meshBox.applyMatrix4(worldMatrix);\n sceneBox.union(meshBox);\n } else {\n sceneBox.union(mesh.computeBoundingBox(Matrix4.fromIdentity()));\n }\n }\n });\n\n return sceneBox;\n }\n\n printDebugInfo () {\n console.info('@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@');\n console.info('@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@');\n this.meshList.forEach((mesh, index) => {\n console.info('Mesh: ', index, mesh);\n });\n this.cameraManager.getCameraList().forEach((cam, index) => {\n console.info('Camera: ', index, cam);\n });\n console.info('Default Camera: ', this.cameraManager.getDefaultCamera());\n this.lightManager.lightList.forEach((light, index) => {\n console.info('Light: ', index, light);\n });\n console.info('@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@');\n console.info('@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@');\n }\n\n /**\n * 获取渲染器\n * @returns\n */\n getRenderer (): Renderer {\n return this.renderer as Renderer;\n }\n\n /**\n * 获取场景中缓存\n * @returns\n */\n getSceneCache (): CompositionCache {\n return this.sceneCache as CompositionCache;\n }\n\n /**\n * 获取激活的相机\n */\n get activeCamera (): PCamera {\n return this.cameraManager.getActiveCamera();\n }\n\n /**\n * 获取灯光数目\n */\n get lightCount (): number {\n return this.lightManager.lightCount;\n }\n\n /**\n * 获取着色器灯光数目,最小是 10\n */\n get shaderLightCount (): number {\n return Math.min(10, this.lightManager.lightCount);\n }\n}\n\n","import {\n spec, generateGUID, Downloader, TextureSourceType, getStandardJSON, glContext,\n glType2VertexFormatType, isObject,\n} from '@galacean/effects';\nimport type {\n Engine, Renderer, JSONValue, TextureCubeSourceOptions, GeometryProps,\n} from '@galacean/effects';\nimport { deserializeGeometry, typedArrayFromBinary } from '@galacean/effects-helper';\nimport { PBRShaderGUID, UnlitShaderGUID, Color, Quaternion, Vector3 } from '../runtime';\nimport type { ModelTreeContent } from '../index';\n\nexport class JSONConverter {\n newScene: spec.JSONScene;\n\n engine: Engine;\n downloader: Downloader;\n treeInfo = new TreeInfo();\n\n constructor (\n public renderer: Renderer,\n public keepIBLData = true,\n ) {\n this.engine = renderer.engine;\n this.downloader = new Downloader();\n }\n\n async processScene (sceneData: string | Record<string | symbol, unknown>) {\n const sceneJSON = isObject(sceneData) ? sceneData : await this.loadJSON(sceneData);\n\n //@ts-expect-error\n if (!sceneJSON.textures) {\n //@ts-expect-error\n sceneJSON.textures = [];\n }\n //@ts-expect-error\n sceneJSON.textures.forEach(tex => {\n if (tex.source === undefined) {\n tex.source = 0;\n }\n });\n\n const oldScene = getStandardJSON(sceneJSON);\n const oldBinUrls = oldScene.bins ?? [];\n const binFiles: ArrayBuffer[] = [];\n\n if (oldScene.bins) {\n for (const bin of oldScene.bins) {\n binFiles.push(await this.loadBins(bin.url));\n }\n }\n // @ts-expect-error\n oldScene.bins = binFiles;\n\n const newScene: spec.JSONScene = {\n ...oldScene,\n version: '3.0',\n playerVersion: {\n web: '3.0',\n native: '3.0',\n },\n type: 'ge',\n compositions: [],\n images: [],\n textures: [],\n items: [],\n components: [],\n materials: [],\n shaders: [],\n geometries: [],\n };\n\n this.setImage(newScene, oldScene);\n await this.setTexture(newScene, oldScene);\n this.setComponent(newScene, oldScene);\n this.setItem(newScene, oldScene);\n this.setComposition(newScene, oldScene);\n\n newScene.bins = oldBinUrls;\n\n return newScene;\n }\n\n setImage (newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n const newImages: spec.Image[] = [];\n\n oldScene.images.forEach(image => {\n newImages.push(image);\n });\n\n newScene.images = newImages;\n }\n\n async setTexture (newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n const newTextures: spec.TextureDefine[] = [];\n const bins = oldScene.bins as unknown as ArrayBuffer[];\n\n if (oldScene.textures) {\n for (const tex of oldScene.textures as spec.SerializedTextureCube[]) {\n if (tex.target === 34067) {\n if (this.keepIBLData) {\n newTextures.push(tex);\n } else {\n const { mipmaps, target } = tex;\n const jobs = mipmaps.map(mipmap => Promise.all(mipmap.map(pointer => this.loadMipmapImage(pointer, bins))));\n const loadedMipmaps = await Promise.all(jobs);\n\n const newMipmaps = loadedMipmaps.map(mipmaps => mipmaps.map(img => {\n const id = generateGUID();\n const sceneImage: spec.Image = {\n url: img,\n id,\n };\n\n newScene.images.push(sceneImage);\n const dataPath: spec.DataPath = { id };\n\n return dataPath;\n }));\n\n const newTex = {\n keepImageSource: false,\n ...tex,\n ...{\n mipmaps: newMipmaps,\n sourceFrom: {\n target,\n type: TextureSourceType.mipmaps,\n mipmaps: mipmaps.map(mipmap => mipmap.map(pointer => [pointer[1][1], pointer[1][2]])),\n },\n } as TextureCubeSourceOptions,\n };\n\n // @ts-expect-error\n newTextures.push(newTex);\n }\n } else {\n // @ts-expect-error\n const source = tex.source as any;\n\n if (typeof source === 'number') {\n // @ts-expect-error\n tex.source = { id: newScene.images[source].id };\n }\n newTextures.push(tex);\n }\n }\n }\n\n newScene.textures = newTextures;\n }\n\n setComponent (newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n const newComponents = newScene.components;\n\n for (const comp of oldScene.components) {\n if (comp.dataType === spec.DataType.SkyboxComponent) {\n newComponents.push(this.createSkyboxComponent(comp, newScene));\n } else if (comp.dataType === spec.DataType.LightComponent) {\n newComponents.push(this.createLightComponent(comp, newScene));\n } else if (comp.dataType === spec.DataType.CameraComponent) {\n newComponents.push(comp);\n console.warn(`Camera component found: ${comp}.`);\n } else if (comp.dataType === spec.DataType.TreeComponent) {\n const treeComp = comp as unknown as ModelTreeContent;\n\n this.createItemsFromTreeComponent(comp, newScene, oldScene);\n treeComp.options.tree.animation = undefined;\n treeComp.options.tree.animations = undefined;\n newComponents.push(comp);\n } else if (comp.dataType !== spec.DataType.MeshComponent) {\n newComponents.push(comp);\n }\n }\n\n for (const comp of oldScene.components) {\n if (comp.dataType === spec.DataType.MeshComponent) {\n newComponents.push(this.createMeshComponent(comp, newScene, oldScene));\n }\n }\n }\n\n setItem (newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n\n }\n\n setComposition (newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n newScene.items = oldScene.items;\n newScene.items.push(...this.treeInfo.getAllTreeNodeList());\n newScene.compositionId = oldScene.compositionId;\n newScene.compositions = oldScene.compositions;\n\n newScene.items.forEach(item => {\n if (item.type === 'root' as spec.ItemType) {\n item.type = 'ECS' as spec.ItemType;\n }\n });\n\n newScene.compositions[0].items = newScene.items.map(item => {\n return { id: item.id } as spec.DataPath;\n });\n }\n\n private async loadJSON (url: string) {\n return new Promise<JSONValue>((resolve, reject) => {\n this.downloader.downloadJSON(\n url,\n resolve,\n (status, responseText) => {\n reject(new Error(`Failed to load JSON from URL '${url}': status ${status} - ${responseText}. Please check the URL or network settings.`));\n });\n });\n }\n\n private async loadBins (url: string) {\n return new Promise<ArrayBuffer>((resolve, reject) => {\n this.downloader.downloadBinary(\n url,\n resolve,\n (status, responseText) => {\n reject(`Couldn't load bins ${JSON.stringify(url)}: status ${status}, ${responseText}`);\n });\n });\n }\n\n private async loadMipmapImage (pointer: spec.BinaryPointer, bins: ArrayBuffer[]) {\n const [index, start, length] = pointer[1];\n const bin = bins[index];\n\n if (!bin) {\n throw new Error(`Invalid bin pointer: ${JSON.stringify(pointer)}.`);\n }\n\n return URL.createObjectURL((new Blob([new Uint8Array(bin, start, length)])));\n }\n\n private createSkyboxComponent (component: spec.ComponentData, scene: spec.JSONScene): spec.SkyboxComponentData {\n const skyboxOptions = (component as unknown as spec.SkyboxContent<'json'>).options;\n let irradianceCoeffs;\n\n if (skyboxOptions.irradianceCoeffs) {\n irradianceCoeffs = [];\n skyboxOptions.irradianceCoeffs.forEach(coeffs => irradianceCoeffs.push(...coeffs));\n }\n\n let diffuseImage;\n\n if (skyboxOptions.diffuseImage) {\n // @ts-expect-error\n diffuseImage = { id: scene.textures[skyboxOptions.diffuseImage].id } as spec.DataPath;\n }\n\n const skyboxComponent: spec.SkyboxComponentData = {\n id: component.id,\n dataType: component.dataType,\n item: component.item,\n renderable: skyboxOptions.renderable,\n intensity: skyboxOptions.intensity,\n reflectionsIntensity: skyboxOptions.reflectionsIntensity,\n irradianceCoeffs: irradianceCoeffs,\n diffuseImage,\n specularImage: {\n // @ts-expect-error\n id: scene.textures[skyboxOptions.specularImage].id,\n },\n specularImageSize: skyboxOptions.specularImageSize,\n specularMipCount: skyboxOptions.specularMipCount + 1,\n };\n\n return skyboxComponent;\n }\n\n private createMeshComponent (component: spec.ComponentData, newScene: spec.JSONScene, oldScene: spec.JSONScene): spec.ModelMeshComponentData {\n const meshOptions = (component as unknown as spec.ModelMeshItemContent<'json'>).options;\n\n const geometryPropsList: GeometryProps[] = [];\n const materialDatas: spec.MaterialData[] = [];\n\n meshOptions.primitives.forEach(prim => {\n const geomProps = deserializeGeometry(prim.geometry, oldScene.bins as unknown as ArrayBuffer[]);\n const material = this.getMaterialData(prim.material, oldScene);\n\n if (geomProps.indices?.data instanceof Uint8Array) {\n const oldIndices = geomProps.indices.data;\n const newIndices = new Uint16Array(oldIndices.length);\n\n for (let i = 0; i < oldIndices.length; i++) {\n newIndices[i] = oldIndices[i];\n }\n\n geomProps.indices.data = newIndices;\n }\n\n geometryPropsList.push(geomProps);\n materialDatas.push(material);\n });\n\n const geometryData = getGeometryDataFromPropsList(geometryPropsList);\n\n if (!geometryData) {\n throw new Error('No primitives available to process.');\n }\n\n newScene.geometries.push(geometryData);\n newScene.materials.push(...materialDatas);\n\n const meshComponent: spec.ModelMeshComponentData = {\n id: component.id,\n dataType: component.dataType,\n item: component.item,\n geometry: { id: geometryData.id },\n materials: materialDatas.map(mat => {\n const data: spec.DataPath = {\n id: mat.id,\n };\n\n return data;\n }),\n };\n\n if (meshOptions.skin) {\n let parentItemId = component.item.id;\n\n for (const item of oldScene.items) {\n if (item.id === component.item.id) {\n parentItemId = item.parentId as string;\n }\n }\n\n if (parentItemId === component.item.id) {\n throw new Error(`Can't item ${component.item}.`);\n }\n\n const treeItem = this.treeInfo.getTreeItemByNodeId(parentItemId);\n const treeNodeList = this.treeInfo.getTreeNodeListByNodeId(parentItemId);\n\n if (!treeItem || !treeNodeList) {\n throw new Error(`Failed to retrieve tree node list for item with ID ${component.item.id}. Ensure the item exists and has a valid tree structure.`);\n }\n const rootBoneItem = this.setupBoneData(geometryData, meshOptions.skin, oldScene, treeItem, treeNodeList);\n\n meshComponent.rootBone = { id: rootBoneItem.id };\n }\n\n if (meshOptions.weights !== undefined) {\n meshComponent.morph = {\n weights: meshOptions.weights,\n };\n }\n\n return meshComponent;\n }\n\n private createItemsFromTreeComponent (component: spec.ComponentData, newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n let treeItem = oldScene.items[0];\n\n oldScene.items.forEach(item => {\n if (item.id === component.item.id) {\n treeItem = item;\n }\n });\n\n const treeComp = component as unknown as ModelTreeContent;\n const treeData = treeComp.options.tree;\n const treeNodeList: spec.VFXItemData[] = [];\n\n treeData.nodes.forEach((node, index) => {\n const item: spec.VFXItemData = {\n id: generateGUID(),\n parentId: treeItem.id,\n name: node.name ?? `node${index}`,\n duration: treeItem.duration,\n // @ts-expect-error\n type: 'ECS',\n dataType: spec.DataType.VFXItemData,\n visible: treeItem.visible,\n endBehavior: treeItem.endBehavior,\n delay: treeItem.delay,\n content: {},\n renderLevel: treeItem.renderLevel,\n pn: treeItem.pn,\n pluginName: treeItem.pluginName,\n transform: this.getTransformData(node.transform),\n components: [],\n };\n\n treeNodeList.push(item);\n newScene.items.push(item);\n });\n\n treeData.nodes.forEach((node, index) => {\n const item = treeNodeList[index];\n\n node.children?.forEach(child => {\n const childItem = treeNodeList[child];\n\n childItem.parentId = item.id;\n });\n });\n\n oldScene.items.forEach(item => {\n if (item.parentId) {\n const index = item.parentId.indexOf('^');\n\n if (index >= 0) {\n const parentId = item.parentId.substring(0, index);\n const subIndex = +item.parentId.substring(index + 1);\n\n if (parentId === treeItem.id) {\n item.parentId = treeNodeList[subIndex].id;\n }\n }\n }\n });\n\n this.treeInfo.add(treeItem, treeNodeList);\n\n this.createAnimationComponent(treeData as any, treeItem, newScene, oldScene);\n }\n\n private createLightComponent (component: spec.ComponentData, scene: spec.JSONScene): spec.ModelLightComponentData {\n const lightOptions = (component as unknown as spec.ModelLightContent).options;\n\n const lightComponent: spec.ModelLightComponentData = {\n id: component.id,\n dataType: component.dataType,\n item: component.item,\n lightType: lightOptions.lightType as spec.LightType,\n color: {\n r: lightOptions.color[0] / 255.0,\n g: lightOptions.color[1] / 255.0,\n b: lightOptions.color[2] / 255.0,\n a: lightOptions.color[3] / 255.0,\n },\n intensity: lightOptions.intensity,\n };\n\n if (lightOptions.lightType === 'point') {\n lightComponent.range = lightOptions.range;\n } else if (lightOptions.lightType === 'spot') {\n lightComponent.range = lightOptions.range;\n lightComponent.innerConeAngle = lightOptions.innerConeAngle;\n lightComponent.outerConeAngle = lightOptions.outerConeAngle;\n }\n\n return lightComponent;\n }\n\n private createAnimationComponent (treeOptions: spec.ModelTreeOptions<'json'>, treeItem: spec.VFXItemData, newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n const { animation, animations } = treeOptions;\n\n const animationComponent: spec.AnimationComponentData = {\n id: generateGUID(),\n dataType: spec.DataType.AnimationComponent,\n item: { id: treeItem.id },\n animation,\n animationClips: [],\n };\n\n if (animations && animations.length) {\n // FIXME: calcuate tree item duration\n const bins = oldScene.bins as unknown as ArrayBuffer[];\n\n animations.forEach(anim => {\n const clipData: spec.AnimationClipData = {\n id: generateGUID(),\n name: anim.name,\n dataType: spec.DataType.AnimationClip,\n positionCurves: [],\n rotationCurves: [],\n scaleCurves: [],\n floatCurves: [],\n };\n\n let totalAnimationTime = 0;\n\n anim.tracks.forEach(track => {\n const inputArray = typedArrayFromBinary(bins, track.input) as Float32Array;\n\n totalAnimationTime = Math.max(totalAnimationTime, inputArray[inputArray.length - 1]);\n });\n\n anim.tracks.forEach(track => {\n const inputArray = typedArrayFromBinary(bins, track.input);\n const outputArray = typedArrayFromBinary(bins, track.output) as Float32Array;\n\n if (!(inputArray instanceof Float32Array)) {\n throw new Error(`Type of inputArray should be float32, ${inputArray}.`);\n }\n if (!(outputArray instanceof Float32Array)) {\n throw new Error(`Type of outputArray should be float32, ${outputArray}.`);\n }\n if (track.interpolation !== 'LINEAR') {\n throw new Error(`Invalid interpolation type ${track.interpolation}.`);\n }\n\n if (track.path === 'rotation') {\n const points: spec.vec4[] = [];\n const controlPoints: spec.vec4[] = [];\n const lineValue: spec.LineKeyframeValue[] = [];\n\n for (let i = 0; i < inputArray.length; i++) {\n points.push([\n outputArray[i * 4],\n outputArray[i * 4 + 1],\n outputArray[i * 4 + 2],\n outputArray[i * 4 + 3],\n ]);\n\n if (i > 0) {\n const p0 = Quaternion.fromArray(points[i - 1]);\n const p3 = Quaternion.fromArray(points[i]);\n const p1 = new Quaternion();\n const p2 = new Quaternion();\n\n p1.slerpQuaternions(p0, p3, 1 / 3);\n p2.slerpQuaternions(p0, p3, 2 / 3);\n\n controlPoints.push(p1.toArray());\n controlPoints.push(p2.toArray());\n }\n\n lineValue.push([\n spec.BezierKeyframeType.LINE,\n [inputArray[i], i],\n ]);\n }\n\n const node = this.treeInfo.getTreeNode(treeItem.id, track.node);\n const path = this.treeInfo.getNodePath(node.id);\n\n const keyFrames: spec.BezierCurveQuat = [\n spec.ValueType.BEZIER_CURVE_QUAT,\n [lineValue, points, controlPoints],\n ];\n\n clipData.rotationCurves.push({ path, keyFrames });\n } else if (track.path === 'weights') {\n const node = this.treeInfo.getTreeNode(treeItem.id, track.node);\n let path = this.treeInfo.getNodePath(node.id);\n\n if (node.components.length === 0) {\n for (let i = 0; i < oldScene.items.length; i++) {\n const child = oldScene.items[i];\n\n if (child.parentId === node.id) {\n path += '/' + child.name;\n\n break;\n }\n }\n }\n const component = outputArray.length / inputArray.length;\n\n for (let c = 0; c < component; c++) {\n const lineValue: spec.LineKeyframeValue[] = [];\n\n for (let i = 0; i < inputArray.length; i++) {\n lineValue.push([\n spec.BezierKeyframeType.LINE,\n [inputArray[i], outputArray[i * component + c]],\n ]);\n }\n\n const keyFrames: spec.BezierValue = [\n spec.ValueType.BEZIER_CURVE,\n lineValue,\n ];\n\n clipData.floatCurves.push({\n path,\n className: 'ModelMeshComponent',\n property: `morphWeights.${c}`,\n keyFrames,\n });\n }\n } else {\n const points: spec.vec3[] = [];\n const controlPoints: spec.vec3[] = [];\n const lineValue: spec.LineKeyframeValue[] = [];\n\n for (let i = 0; i < inputArray.length; i++) {\n points.push([\n outputArray[i * 3],\n outputArray[i * 3 + 1],\n outputArray[i * 3 + 2],\n ]);\n\n if (i > 0) {\n const p0 = Vector3.fromArray(points[i - 1]);\n const p3 = Vector3.fromArray(points[i]);\n const p1 = new Vector3().lerpVectors(p0, p3, 1 / 3);\n const p2 = new Vector3().lerpVectors(p0, p3, 2 / 3);\n\n controlPoints.push(p1.toArray());\n controlPoints.push(p2.toArray());\n }\n\n lineValue.push([\n spec.BezierKeyframeType.LINE,\n [inputArray[i], i],\n ]);\n }\n\n const node = this.treeInfo.getTreeNode(treeItem.id, track.node);\n const path = this.treeInfo.getNodePath(node.id);\n\n const keyFrames: spec.BezierCurvePath = [\n spec.ValueType.BEZIER_CURVE_PATH,\n [lineValue, points, controlPoints],\n ];\n\n if (track.path === 'translation') {\n clipData.positionCurves.push({ path, keyFrames });\n } else {\n clipData.scaleCurves.push({ path, keyFrames });\n }\n }\n });\n\n newScene.animations.push(clipData);\n\n animationComponent.animationClips.push({ id: clipData.id });\n });\n }\n\n treeItem.components.push({ id: animationComponent.id });\n newScene.components.push(animationComponent);\n }\n\n private getMaterialData (material: spec.MaterialOptions<'json'>, scene: spec.JSONScene) {\n if (material.type === spec.MaterialType.unlit) {\n const floats: Record<string, number> = {};\n\n if (material.alphaCutOff !== undefined) {\n floats['_AlphaCutoff'] = material.alphaCutOff;\n }\n const colors: Record<string, Color> = {\n '_BaseColorFactor': new Color(\n material.baseColorFactor[0],\n material.baseColorFactor[1],\n material.baseColorFactor[2],\n material.baseColorFactor[3],\n ).divide(255),\n };\n\n const textures: Record<string, spec.MaterialTextureProperty> = {};\n\n if (material.baseColorTexture) {\n textures['_BaseColorSampler'] = this.getTextureData(scene, floats, material.baseColorTexture, material.baseColorTextureTransform);\n }\n\n const newMaterial: spec.MaterialData = {\n id: generateGUID(),\n name: material.name,\n dataType: spec.DataType.Material,\n shader: {\n id: UnlitShaderGUID,\n },\n stringTags: {},\n macros: [],\n ints: {},\n floats,\n vector4s: {},\n colors,\n textures,\n };\n\n this.setupMaterial(material, newMaterial);\n\n return newMaterial;\n } else {\n const floats: Record<string, number> = {\n '_MetallicFactor': material.metallicFactor,\n '_RoughnessFactor': material.roughnessFactor,\n };\n\n if (material.useSpecularAA !== undefined) {\n floats['_SpecularAA'] = material.useSpecularAA ? 1 : 0;\n }\n if (material.normalTextureScale !== undefined) {\n floats['_NormalScale'] = material.normalTextureScale;\n }\n if (material.occlusionTextureStrength !== undefined) {\n floats['_OcclusionStrength'] = material.occlusionTextureStrength;\n }\n if (material.emissiveIntensity !== undefined) {\n floats['_EmissiveIntensity'] = material.emissiveIntensity;\n }\n if (material.alphaCutOff !== undefined) {\n floats['_AlphaCutoff'] = material.alphaCutOff;\n }\n const colors: Record<string, Color> = {\n '_BaseColorFactor': new Color(\n material.baseColorFactor[0],\n material.baseColorFactor[1],\n material.baseColorFactor[2],\n material.baseColorFactor[3],\n ).divide(255),\n '_EmissiveFactor': new Color(\n material.emissiveFactor[0],\n material.emissiveFactor[1],\n material.emissiveFactor[2],\n material.emissiveFactor[3],\n ).divide(255),\n };\n\n const textures: Record<string, spec.MaterialTextureProperty> = {};\n\n if (material.baseColorTexture) {\n textures['_BaseColorSampler'] = this.getTextureData(scene, floats, material.baseColorTexture, material.baseColorTextureTransform);\n }\n\n if (material.metallicRoughnessTexture) {\n textures['_MetallicRoughnessSampler'] = this.getTextureData(scene, floats, material.metallicRoughnessTexture, material.metallicRoughnessTextureTransform);\n }\n\n if (material.normalTexture) {\n textures['_NormalSampler'] = this.getTextureData(scene, floats, material.normalTexture, material.normalTextureTransform);\n }\n\n if (material.occlusionTexture) {\n textures['_OcclusionSampler'] = this.getTextureData(scene, floats, material.occlusionTexture, material.occlusionTextureTransform);\n }\n\n if (material.emissiveTexture) {\n textures['_EmissiveSampler'] = this.getTextureData(scene, floats, material.emissiveTexture, material.emissiveTextureTransform);\n }\n\n const newMaterial: spec.MaterialData = {\n id: generateGUID(),\n name: material.name,\n dataType: spec.DataType.Material,\n shader: {\n id: PBRShaderGUID,\n },\n stringTags: {},\n macros: [],\n ints: {},\n floats,\n vector4s: {},\n colors,\n textures,\n };\n\n this.setupMaterial(material, newMaterial);\n\n return newMaterial;\n }\n }\n\n private setupMaterial (oldMat: spec.MaterialOptions<'json'>, newMat: spec.MaterialData) {\n if (oldMat.blending === spec.MaterialBlending.translucent) {\n newMat.stringTags['RenderType'] = spec.RenderType.Transparent;\n } else {\n newMat.stringTags['RenderType'] = spec.RenderType.Opaque;\n }\n\n if (oldMat.blending === spec.MaterialBlending.masked) {\n newMat.floats['AlphaClip'] = 1;\n newMat.floats['_AlphaCutoff'] = oldMat.alphaCutOff ?? 0;\n } else {\n newMat.floats['AlphaClip'] = 0;\n }\n\n switch (oldMat.side) {\n case spec.SideMode.BACK:\n newMat.stringTags['RenderFace'] = spec.RenderFace.Back;\n\n break;\n case spec.SideMode.DOUBLE:\n newMat.stringTags['RenderFace'] = spec.RenderFace.Both;\n\n break;\n default:\n newMat.stringTags['RenderFace'] = spec.RenderFace.Front;\n }\n\n if (oldMat.type === spec.MaterialType.pbr) {\n newMat.floats['_SpecularAA'] = oldMat.useSpecularAA ? 1 : 0;\n }\n\n newMat.floats['ZWrite'] = oldMat.depthMask !== false ? 1 : 0;\n newMat.floats['ZTest'] = 1;\n }\n\n private getTextureData (scene: spec.JSONScene, floats: Record<string, number>, texIndex: number, texTransform?: spec.ModelTextureTransform) {\n const id = scene.textures![texIndex].id ?? '0';\n const texProperty: spec.MaterialTextureProperty = {\n texture: { id },\n };\n\n if (texTransform) {\n if (texTransform.scale) {\n texProperty.scale = {\n x: texTransform.scale[0],\n y: texTransform.scale[1],\n };\n }\n if (texTransform.offset) {\n texProperty.offset = {\n x: texTransform.offset[0],\n y: texTransform.offset[1],\n };\n }\n if (texTransform.rotation) {\n floats['_BaseColorRotation'] = texTransform.rotation;\n }\n }\n\n return texProperty;\n }\n\n private getTransformData (transform?: spec.BaseItemTransform) {\n const result: spec.TransformData = {\n position: { x: 0, y: 0, z: 0 },\n eulerHint: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n };\n\n if (transform?.position) {\n result.position.x = transform.position[0];\n result.position.y = transform.position[1];\n result.position.z = transform.position[2];\n }\n\n if (transform?.quat) {\n // @ts-expect-error\n result.quat = {};\n // @ts-expect-error\n result.quat.x = transform.quat[0];\n // @ts-expect-error\n result.quat.y = transform.quat[1];\n // @ts-expect-error\n result.quat.z = transform.quat[2];\n // @ts-expect-error\n result.quat.w = transform.quat[3];\n } else if (transform?.rotation) {\n result.eulerHint.x = transform.rotation[0];\n result.eulerHint.y = transform.rotation[1];\n result.eulerHint.z = transform.rotation[2];\n }\n\n if (transform?.scale) {\n result.scale.x = transform.scale[0];\n result.scale.y = transform.scale[1];\n result.scale.z = transform.scale[2];\n }\n\n return result;\n }\n\n private setupBoneData (geom: spec.GeometryData, skin: spec.SkinOptions<'json'>, oldScene: spec.JSONScene, treeItem: spec.VFXItemData, treeNodeList: spec.VFXItemData[]) {\n const bins = oldScene.bins as unknown as ArrayBuffer[];\n const { joints, skeleton, inverseBindMatrices } = skin;\n\n if (!inverseBindMatrices) {\n throw new Error(`'inverseBindMatrices' is undefined for the skin configuration: ${JSON.stringify(skin)}. Ensure 'inverseBindMatrices' is properly defined in your skin data.`);\n }\n const bindMatrixArray = typedArrayFromBinary(bins, inverseBindMatrices) as Float32Array;\n\n geom.inverseBindMatrices = Array.from(bindMatrixArray);\n\n const id2Node: Record<string, spec.VFXItemData> = {};\n\n let rootBoneItem = treeItem;\n\n if (skeleton !== undefined) {\n rootBoneItem = treeNodeList[skeleton];\n } else {\n console.warn('Root bone is missing for the skeleton. Defaulting to the primary tree item as the root bone.');\n }\n\n joints.forEach(joint => {\n const node = treeNodeList[joint];\n\n if (node !== rootBoneItem && node.parentId === rootBoneItem.parentId) {\n console.error('Invalid node detected for \\'rootBoneItem\\'. Adjusting \\'rootBoneItem\\' to the primary tree item. Please verify the tree structure.');\n\n rootBoneItem = treeItem;\n }\n });\n\n treeNodeList.forEach(node => {\n id2Node[node.id] = node;\n });\n\n geom.rootBoneName = rootBoneItem.name;\n\n const boneNames: string[] = [];\n\n joints.forEach(joint => {\n let currentItem = treeNodeList[joint];\n const nodeList: string[] = [];\n\n while (currentItem && currentItem != rootBoneItem) {\n nodeList.push(currentItem.name);\n if (currentItem.parentId) {\n currentItem = id2Node[currentItem.parentId];\n } else {\n break;\n }\n }\n\n boneNames.push(nodeList.reverse().join('/'));\n });\n\n geom.boneNames = boneNames;\n\n return rootBoneItem;\n }\n}\n\nclass TreeInfo {\n tree2NodeList: Record<string, spec.VFXItemData[]> = {};\n nodeList2Tree: Record<string, spec.VFXItemData> = {};\n nodeId2Node: Record<string, spec.VFXItemData> = {};\n node2Path: Record<string, string> = {};\n\n add (treeItem: spec.VFXItemData, treeNodeList: spec.VFXItemData[]) {\n if (this.tree2NodeList[treeItem.id]) {\n throw new Error(`Duplicate treeItem ID detected: ${treeItem.id}. Ensure each tree item has a unique ID.`);\n }\n\n this.tree2NodeList[treeItem.id] = treeNodeList;\n treeNodeList.forEach(node => {\n if (this.nodeList2Tree[node.id]) {\n throw new Error(`Duplicate tree node ID found: ${node.id}. Each node in the tree must have a unique ID.`);\n }\n this.nodeList2Tree[node.id] = treeItem;\n this.nodeId2Node[node.id] = node;\n });\n\n treeNodeList.forEach(node => {\n this.setNodePath(node);\n });\n }\n\n setNodePath (node: spec.VFXItemData) {\n if (node.parentId) {\n if (this.node2Path[node.parentId]) {\n this.node2Path[node.id] = this.node2Path[node.parentId] + '/' + node.name;\n } else if (this.nodeId2Node[node.parentId]) {\n this.setNodePath(this.nodeId2Node[node.parentId]);\n this.node2Path[node.id] = this.node2Path[node.parentId] + '/' + node.name;\n } else {\n this.node2Path[node.id] = node.name;\n }\n } else {\n this.node2Path[node.id] = node.name;\n }\n }\n\n getTreeNodeListByTreeId (id: string) {\n return this.tree2NodeList[id];\n }\n\n getTreeNodeListByNodeId (id: string) {\n const treeItem = this.nodeList2Tree[id];\n\n if (!treeItem) {\n throw new Error(`Invalid id ${id}.`);\n }\n\n return this.getTreeNodeListByTreeId(treeItem.id);\n }\n\n getTreeItemByNodeId (id: string) {\n return this.nodeList2Tree[id];\n }\n\n getTreeNode (treeId: string, nodeIndex: number) {\n const nodeList = this.getTreeNodeListByTreeId(treeId);\n\n return nodeList[nodeIndex];\n }\n\n getAllTreeNodeList () {\n const nodeList: spec.VFXItemData[] = [];\n\n Object.keys(this.tree2NodeList).forEach(key => {\n nodeList.push(...this.tree2NodeList[key]);\n });\n\n return nodeList;\n }\n\n getNodePath (id: string) {\n return this.node2Path[id];\n }\n}\n\nexport interface ModelData {\n vertices: spec.TypedArray,\n uvs: spec.TypedArray,\n normals: spec.TypedArray,\n indices: spec.TypedArray,\n name: string,\n}\n\nexport function getGeometryDataFromOptions (geomOptions: GeometryProps) {\n let vertexCount = 0;\n let verticesType: spec.VertexFormatType = spec.VertexFormatType.Float32;\n let verticesNormalize = false;\n let uvsType: spec.VertexFormatType = spec.VertexFormatType.Float32;\n let uvsNormalize = false;\n let normalsType: spec.VertexFormatType = spec.VertexFormatType.Float32;\n let normalsNormalize = false;\n const modelData: ModelData = {\n vertices: new Float32Array(),\n uvs: new Float32Array(),\n normals: new Float32Array(),\n indices: new Float32Array(),\n name: geomOptions.name ?? '<empty>',\n };\n\n for (const attrib in geomOptions.attributes) {\n const attribData = geomOptions.attributes[attrib];\n\n if (attrib === 'aPosition') {\n // @ts-expect-error\n vertexCount = attribData.data.length / attribData.size;\n // @ts-expect-error\n modelData.vertices = attribData.data;\n verticesNormalize = attribData.normalize ?? false;\n verticesType = glType2VertexFormatType(attribData.type ?? glContext.FLOAT);\n } else if (attrib === 'aNormal') {\n // @ts-expect-error\n modelData.normals = attribData.data;\n normalsNormalize = attribData.normalize ?? false;\n normalsType = glType2VertexFormatType(attribData.type ?? glContext.FLOAT);\n } else if (attrib === 'aUV1') {\n // @ts-expect-error\n modelData.uvs = attribData.data;\n uvsNormalize = attribData.normalize ?? false;\n uvsType = glType2VertexFormatType(attribData.type ?? glContext.FLOAT);\n }\n }\n\n const verticesOffset = getOffset(verticesType, 3, vertexCount);\n const uvsOffset = getOffset(uvsType, 2, vertexCount);\n const normalsOffset = getOffset(normalsType, 3, vertexCount);\n\n if (geomOptions.indices) {\n modelData.indices = geomOptions.indices.data;\n } else if (vertexCount <= 65535) {\n const indices = new Uint16Array(vertexCount);\n\n for (let i = 0; i < vertexCount; i++) {\n indices[i] = i;\n }\n modelData.indices = indices;\n } else {\n const indices = new Uint32Array(vertexCount);\n\n for (let i = 0; i < vertexCount; i++) {\n indices[i] = i;\n }\n modelData.indices = indices;\n }\n\n let indicesType: spec.IndexFormatType = spec.IndexFormatType.UInt16;\n\n if (modelData.indices.BYTES_PER_ELEMENT === 4) {\n indicesType = spec.IndexFormatType.UInt32;\n }\n\n const geometryData: spec.GeometryData = {\n id: generateGUID(),\n dataType: spec.DataType.Geometry,\n vertexData: {\n vertexCount: vertexCount,\n channels: [\n {\n semantic: spec.VertexBufferSemantic.Position,\n offset: 0,\n format: verticesType,\n dimension: 3,\n normalize: verticesNormalize,\n },\n {\n semantic: spec.VertexBufferSemantic.Uv,\n offset: verticesOffset,\n format: uvsType,\n dimension: 2,\n normalize: uvsNormalize,\n },\n {\n semantic: spec.VertexBufferSemantic.Normal,\n offset: verticesOffset + uvsOffset,\n format: normalsType,\n dimension: 3,\n normalize: normalsNormalize,\n },\n ],\n },\n subMeshes: [],\n mode: spec.GeometryType.TRIANGLES,\n indexFormat: indicesType,\n indexOffset: verticesOffset + uvsOffset + normalsOffset,\n buffer: encodeVertexData(modelData),\n };\n\n return geometryData;\n}\n\nexport function getGeometryDataFromPropsList (geomPropsList: GeometryProps[]) {\n if (geomPropsList.length <= 0) {\n return;\n }\n\n let totalCount = 0;\n const subMeshes: spec.SubMesh[] = [];\n\n for (let i = 0; i < geomPropsList.length; i++) {\n const count = getDrawCount(geomPropsList[i]);\n const offset = totalCount + (geomPropsList[i].drawStart ?? 0);\n const scale = geomPropsList[0].indices?.data.BYTES_PER_ELEMENT ?? 1;\n\n subMeshes.push({ offset: offset * scale, indexCount: count, vertexCount: count });\n if (i) {\n const geom0 = geomPropsList[0];\n const geom1 = geomPropsList[i];\n\n let isSame = true;\n\n Object.keys(geom0.attributes).forEach(name => {\n const attrib = geom0.attributes[name];\n // @ts-expect-error\n const array1 = attrib.data as spec.TypedArray;\n // @ts-expect-error\n const array2 = geom1.attributes[name].data as spec.TypedArray;\n\n if (array1.length !== array2.length || array1[0] !== array2[0]) {\n isSame = false;\n }\n });\n\n if (isSame) {\n if (geom0.indices && geom1.indices) {\n geom0.indices.data = mergeTypedArray(geom0.indices.data, geom1.indices.data);\n }\n } else {\n if (geom0.indices && geom1.indices) {\n const vertexCount = getVertexCount(geom0);\n\n geom0.indices.data = mergeTypedArray(geom0.indices.data, geom1.indices.data, vertexCount);\n }\n\n Object.keys(geom0.attributes).forEach(name => {\n const attrib = geom0.attributes[name];\n // @ts-expect-error\n const array1 = attrib.data as spec.TypedArray;\n // @ts-expect-error\n const array2 = geom1.attributes[name].data as spec.TypedArray;\n\n // @ts-expect-error\n attrib.data = mergeTypedArray(array1, array2);\n });\n }\n\n }\n totalCount = offset + count;\n }\n\n return createGeometryData(geomPropsList[0], subMeshes);\n}\n\nfunction getOffset (formatType: spec.VertexFormatType, dimension: number, count: number) {\n switch (formatType) {\n case spec.VertexFormatType.Int8:\n case spec.VertexFormatType.UInt8:\n return dimension * count;\n case spec.VertexFormatType.Int16:\n case spec.VertexFormatType.UInt16:\n return dimension * count * 2;\n default:\n return dimension * count * 4;\n }\n}\n\nfunction createGeometryData (props: GeometryProps, subMeshes: spec.SubMesh[]) {\n let totalByteLength = 0;\n\n for (const attrib in props.attributes) {\n const attribData = props.attributes[attrib];\n\n // @ts-expect-error\n totalByteLength += attribData.data.byteLength;\n }\n\n if (props.indices) {\n totalByteLength += props.indices.data.byteLength;\n }\n\n let vertexCount = 0;\n let bufferOffset = 0;\n const buffer = new Uint8Array(totalByteLength);\n const vertexChannels: spec.VertexChannel[] = [];\n\n for (const attrib in props.attributes) {\n const attribData = props.attributes[attrib];\n const semantic = vertexBufferSemanticMap[attrib] ?? attrib;\n\n // @ts-expect-error\n vertexCount = attribData.data.length / attribData.size;\n const vertexChannel: spec.VertexChannel = {\n semantic,\n offset: bufferOffset,\n format: glType2VertexFormatType(attribData.type ?? glContext.FLOAT),\n dimension: attribData.size,\n normalize: attribData.normalize,\n };\n\n vertexChannels.push(vertexChannel);\n // @ts-expect-error\n const data = attribData.data as spec.TypedArray;\n const subBuffer = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n\n buffer.set(subBuffer, bufferOffset);\n bufferOffset += subBuffer.byteLength;\n }\n\n const geometryData: spec.GeometryData = {\n id: generateGUID(),\n dataType: spec.DataType.Geometry,\n vertexData: {\n vertexCount: vertexCount,\n channels: vertexChannels,\n },\n subMeshes,\n mode: spec.GeometryType.TRIANGLES,\n indexFormat: spec.IndexFormatType.None,\n indexOffset: 0,\n buffer: '',\n };\n\n if (props.indices) {\n const indices = props.indices.data;\n const subBuffer = new Uint8Array(indices.buffer, indices.byteOffset, indices.byteLength);\n\n buffer.set(subBuffer, bufferOffset);\n geometryData.indexOffset = bufferOffset;\n if (indices instanceof Uint32Array) {\n geometryData.indexFormat = spec.IndexFormatType.UInt32;\n } else {\n geometryData.indexFormat = spec.IndexFormatType.UInt16;\n }\n }\n\n geometryData.buffer = toBase64String(buffer);\n\n return geometryData;\n}\n\nfunction encodeVertexData (modelData: ModelData): string {\n const vertices = new Uint8Array(modelData.vertices.buffer, modelData.vertices.byteOffset, modelData.vertices.byteLength);\n const uvs = new Uint8Array(modelData.uvs.buffer, modelData.uvs.byteOffset, modelData.uvs.byteLength);\n const normals = new Uint8Array(modelData.normals.buffer, modelData.normals.byteOffset, modelData.normals.byteLength);\n const indices = new Uint8Array(modelData.indices.buffer, modelData.indices.byteOffset, modelData.indices.byteLength);\n\n // 计算新 ArrayBuffer 的总大小(以字节为单位)\n const totalSize = vertices.byteLength + uvs.byteLength + normals.byteLength + indices.byteLength;\n\n // 创建一个足够大的 ArrayBuffer 来存储两个数组的数据\n const buffer = new ArrayBuffer(totalSize);\n\n // 创建一个视图来按照 Float32 格式写入数据\n let floatView = new Uint8Array(buffer, 0, vertices.byteLength);\n\n floatView.set(vertices);\n floatView = new Uint8Array(buffer, vertices.byteLength, uvs.byteLength);\n floatView.set(uvs);\n floatView = new Uint8Array(buffer, vertices.byteLength + uvs.byteLength, normals.byteLength);\n floatView.set(normals);\n\n // 创建一个视图来按照 Uint16 格式写入数据,紧接着 Float32 数据之后\n const uint16View = new Uint8Array(buffer, vertices.byteLength + uvs.byteLength + normals.byteLength, indices.byteLength);\n\n uint16View.set(indices);\n\n // 创建一个 Uint8Array 视图以便逐字节访问 ArrayBuffer 的数据\n const uint8View = new Uint8Array(buffer);\n\n // 将 Uint8Array 转换为二进制字符串\n let binaryString = '';\n\n for (let i = 0; i < uint8View.length; i++) {\n binaryString += String.fromCharCode(uint8View[i]);\n }\n\n // 使用 btoa 函数将二进制字符串转换为 Base64 编码的字符串\n return btoa(binaryString);\n}\n\nfunction toBase64String (array: Uint8Array) {\n // 将 Uint8Array 转换为二进制字符串\n let binaryString = '';\n\n for (let i = 0; i < array.length; i++) {\n binaryString += String.fromCharCode(array[i]);\n }\n\n // 使用 btoa 函数将二进制字符串转换为 Base64 编码的字符串\n return btoa(binaryString);\n}\n\nfunction getDrawCount (geomProps: GeometryProps) {\n if (geomProps.drawCount) {\n return geomProps.drawCount;\n } else if (geomProps.indices) {\n return geomProps.indices.data.length;\n } else {\n let drawCount = 0;\n\n // @ts-expect-error\n geomProps.attributes.forEach(attrib => {\n drawCount = attrib.data.length / attrib.size;\n });\n\n return drawCount;\n }\n}\n\nfunction getVertexCount (geomProps: GeometryProps) {\n let vertexCount = 0;\n\n Object.keys(geomProps.attributes).forEach(name => {\n const attrib = geomProps.attributes[name];\n\n // @ts-expect-error\n vertexCount = attrib.data.length / attrib.size;\n });\n\n return vertexCount;\n}\n\nfunction mergeTypedArray (array1: spec.TypedArray, array2: spec.TypedArray, offset?: number) {\n if (array1 instanceof Float32Array) {\n const result = new Float32Array(array1.length + array2.length);\n\n result.set(array1);\n result.set(array2, array1.length);\n\n return result;\n } else if (array1 instanceof Int32Array) {\n const result = new Int32Array(array1.length + array2.length);\n\n result.set(array1);\n result.set(array2, array1.length);\n\n return result;\n } else if (array1 instanceof Uint32Array) {\n const result = new Uint32Array(array1.length + array2.length);\n\n result.set(array1);\n result.set(array2, array1.length);\n if (offset) {\n for (let i = 0; i < array2.length; i++) {\n result[array1.length + i] += offset;\n }\n }\n\n return result;\n } else if (array1 instanceof Int16Array) {\n const result = new Int16Array(array1.length + array2.length);\n\n result.set(array1);\n result.set(array2, array1.length);\n\n return result;\n } else if (array1 instanceof Uint16Array) {\n const result = new Uint16Array(array1.length + array2.length);\n\n result.set(array1);\n result.set(array2, array1.length);\n if (offset) {\n for (let i = 0; i < array2.length; i++) {\n result[array1.length + i] += offset;\n }\n }\n\n return result;\n } else if (array1 instanceof Int8Array) {\n const result = new Int8Array(array1.length + array2.length);\n\n result.set(array1);\n result.set(array2, array1.length);\n\n return result;\n } else {\n const result = new Uint8Array(array1.length + array2.length);\n\n result.set(array1);\n result.set(array2, array1.length);\n\n return result;\n }\n}\n\nconst vertexBufferSemanticMap: Record<string, string> = {\n aPos: 'POSITION',\n aUV: 'TEXCOORD0',\n aUV2: 'TEXCOORD1',\n aNormal: 'NORMAL',\n aTangent: 'TANGENT',\n aColor: 'COLOR',\n aJoints: 'JOINTS',\n aWeights: 'WEIGHTS',\n //\n a_Position: 'POSITION',\n a_UV: 'TEXCOORD0',\n a_UV1: 'TEXCOORD0',\n a_UV2: 'TEXCOORD1',\n a_Normal: 'NORMAL',\n a_Tangent: 'TANGENT',\n a_Color: 'COLOR',\n a_Joints: 'JOINTS',\n a_Joint1: 'JOINTS',\n a_Weights: 'WEIGHTS',\n a_Weight1: 'WEIGHTS',\n //\n a_Target_Position0: 'POSITION_BS0',\n a_Target_Position1: 'POSITION_BS1',\n a_Target_Position2: 'POSITION_BS2',\n a_Target_Position3: 'POSITION_BS3',\n a_Target_Position4: 'POSITION_BS4',\n a_Target_Position5: 'POSITION_BS5',\n a_Target_Position6: 'POSITION_BS6',\n a_Target_Position7: 'POSITION_BS7',\n a_Target_Normal0: 'NORMAL_BS0',\n a_Target_Normal1: 'NORMAL_BS1',\n a_Target_Normal2: 'NORMAL_BS2',\n a_Target_Normal3: 'NORMAL_BS3',\n a_Target_Tangent0: 'TANGENT_BS0',\n a_Target_Tangent1: 'TANGENT_BS1',\n a_Target_Tangent2: 'TANGENT_BS2',\n a_Target_Tangent3: 'TANGENT_BS3',\n};\n","import { spec, generateGUID, glContext, addItem, loadImage, Transform, Geometry } from '@galacean/effects';\nimport type { TextureSourceOptions, TextureCubeSourceOptionsImageMipmaps, math, TransformProps, Engine, Texture, Attribute } from '@galacean/effects';\nimport type {\n SkyboxType, LoadSceneOptions, LoadSceneResult, Loader, ModelCamera, ModelLight, ModelSkybox, ModelImageLike,\n} from './protocol';\nimport type {\n ModelMeshComponentData,\n ModelSkyboxComponentData,\n ModelLightComponentData,\n ModelCameraComponentData,\n ModelAnimationOptions,\n ModelAnimTrackOptions,\n ModelMaterialOptions,\n ModelSkyboxOptions,\n ModelTreeOptions,\n ModelTextureTransform,\n} from '../index';\nimport {\n Vector3, Box3, Matrix4, Euler, PSkyboxCreator, PSkyboxType, UnlitShaderGUID, PBRShaderGUID,\n} from '../runtime';\nimport { LoaderHelper } from './loader-helper';\nimport { WebGLHelper } from '../utility';\nimport type { PImageBufferData, PSkyboxBufferParams } from '../runtime/skybox';\nimport type {\n GLTFSkin, GLTFMesh, GLTFImage, GLTFMaterial, GLTFTexture, GLTFScene, GLTFLight,\n GLTFCamera, GLTFAnimation, GLTFResources, GLTFImageBasedLight, GLTFPrimitive,\n GLTFBufferAttribute, GLTFBounds, GLTFTextureInfo,\n} from '@vvfx/resource-detection';\nimport type { CubeImage } from '@vvfx/resource-detection/dist/src/gltf-tools/gltf-image-based-light';\n\nexport interface LoaderOptions {\n compatibleMode?: 'gltf' | 'tiny3d',\n}\n\nexport function getDefaultEffectsGLTFLoader (engine: Engine, options?: LoaderOptions): Loader {\n if (!defaultGLTFLoader) {\n defaultGLTFLoader = new LoaderImpl();\n }\n\n (defaultGLTFLoader as LoaderImpl).initial(engine, options);\n\n return defaultGLTFLoader;\n}\n\nexport function setDefaultEffectsGLTFLoader (loader: Loader): void {\n defaultGLTFLoader = loader;\n}\n\nlet defaultGLTFLoader: Loader;\n\ntype Box3 = math.Box3;\n\nexport class LoaderImpl implements Loader {\n private sceneOptions: LoadSceneOptions;\n private loaderOptions: LoaderOptions;\n private gltfScene: GLTFScene;\n private gltfSkins: GLTFSkin[] = [];\n private gltfMeshs: GLTFMesh[] = [];\n private gltfLights: GLTFLight[] = [];\n private gltfCameras: GLTFCamera[] = [];\n private gltfImages: GLTFImage[] = [];\n private gltfTextures: GLTFTexture[] = [];\n private gltfMaterials: GLTFMaterial[] = [];\n private gltfAnimations: GLTFAnimation[] = [];\n private gltfImageBasedLights: GLTFImageBasedLight[] = [];\n\n composition: spec.CompositionData;\n timelineAssetId: string = '';\n images: spec.Image[] = [];\n imageElements: ModelImageLike[] = [];\n textures: spec.TextureDefine[] = [];\n items: spec.VFXItemData[] = [];\n components: spec.ComponentData[] = [];\n materials: spec.MaterialData[] = [];\n shaders: spec.ShaderData[] = [];\n geometries: spec.GeometryData[] = [];\n animations: spec.AnimationClipData[] = [];\n sceneAABB = new Box3();\n\n engine: Engine;\n\n constructor (composition?: spec.CompositionData) {\n if (composition) {\n this.composition = composition;\n } else {\n this.timelineAssetId = generateGUID();\n this.composition = {\n id: '1',\n name: 'test1',\n duration: 9999,\n endBehavior: spec.EndBehavior.restart,\n camera: {\n fov: 45,\n far: 2000,\n near: 0.001,\n position: [0, 0, 8],\n rotation: [0, 0, 0],\n clipMode: spec.CameraClipMode.portrait,\n },\n items: [],\n timelineAsset: { id: this.timelineAssetId },\n sceneBindings: [],\n };\n }\n }\n\n async loadScene (options: LoadSceneOptions): Promise<LoadSceneResult> {\n this.clear();\n this.sceneOptions = options;\n this.loaderOptions = { compatibleMode: options.gltf.compatibleMode };\n const gltfResource = options.gltf.resource;\n\n if (typeof gltfResource === 'string' || gltfResource instanceof Uint8Array) {\n throw new Error('Please load the resource using GLTFTools first.');\n }\n\n this.images = gltfResource.images.map(gltfImage => {\n const blob = new Blob([gltfImage.imageData.buffer], { type: gltfImage.mimeType ?? 'image/png' });\n\n return {\n id: gltfImage.id,\n url: URL.createObjectURL(blob),\n };\n });\n\n this.imageElements = await Promise.all(this.images.map(async image => {\n return loadImage(image.url);\n }));\n\n this.processGLTFResource(gltfResource, this.imageElements);\n this.gltfScene = gltfResource.scenes[0];\n this.gltfSkins = this.gltfScene.skins;\n this.gltfMeshs = gltfResource.meshes;\n this.gltfLights = this.gltfScene.lights;\n this.gltfCameras = this.gltfScene.cameras;\n this.gltfImages = gltfResource.images;\n this.gltfTextures = gltfResource.textures;\n this.gltfMaterials = gltfResource.materials;\n this.gltfAnimations = gltfResource.animations;\n this.gltfImageBasedLights = gltfResource.imageBasedLights;\n\n this.textures = this.gltfTextures.map(texture => {\n const textureOptions = texture.textureOptions;\n const source = textureOptions.source;\n\n if (typeof source === 'number') {\n // @ts-expect-error\n textureOptions.source = {\n id: this.images[source].id,\n };\n }\n\n return textureOptions;\n });\n this.materials = this.gltfMaterials.map(material => {\n return material.materialData;\n });\n\n gltfResource.meshes.forEach(mesh => {\n this.geometries.push(mesh.geometryData);\n });\n const gltfScene = gltfResource.scenes[0];\n\n gltfScene.meshesComponentData.forEach(mesh => this.checkMeshComponentData(mesh, gltfResource));\n\n this.components.push(...gltfScene.camerasComponentData);\n this.components.push(...gltfScene.lightsComponentData);\n this.components.push(...gltfScene.meshesComponentData);\n if (gltfScene.animationsComponentData.length === 1) {\n const component = gltfScene.animationsComponentData[0];\n\n if (!options.effects.playAllAnimation && options.effects.playAnimation !== undefined) {\n const clips = component.animationClips;\n const index = options.effects.playAnimation;\n\n if (index >= 0 && index < clips.length) {\n component.animationClips = [clips[index]];\n } else {\n component.animationClips = [];\n }\n }\n this.components.push(component);\n } else if (gltfScene.animationsComponentData.length > 1) {\n throw new Error(`Find many animation component data ${gltfScene.animationsComponentData.length}`);\n }\n\n this.animations = [];\n this.gltfAnimations.forEach(anim => {\n this.animations.push(anim.animationClipData);\n });\n\n this.items = [];\n\n await this.tryAddSkybox({\n skyboxType: options.gltf.skyboxType,\n renderable: options.gltf.skyboxVis,\n });\n\n this.items.push(...gltfResource.scenes[0].vfxItemData);\n this.items.forEach(item => {\n if (item.type === 'root' as spec.ItemType) {\n item.type = 'ECS' as spec.ItemType;\n }\n });\n\n return this.getLoadResult();\n }\n\n processGLTFResource (resource: GLTFResources, imageElements: ModelImageLike[]): void {\n const textureDataMap: Record<string, TextureSourceOptions> = {};\n const { textures, materials, scenes, imageBasedLights } = resource;\n\n textures.forEach(tex => {\n const texData = tex.textureOptions;\n const texId = (texData as unknown as spec.EffectsObjectData).id;\n\n if (texId) {\n if (textureDataMap[texId]) {\n console.error(`Duplicate GUID found: ${texId}, old ${textureDataMap[texId]}, new ${texData}.`);\n }\n textureDataMap[texId] = texData;\n } else {\n console.error(`No GUID in texture Data: ${texData}.`);\n }\n });\n\n const baseColorIdSet: Set<string> = new Set();\n const emissiveIdSet: Set<string> = new Set();\n\n materials.forEach(mat => {\n const materialData = mat.materialData;\n const baseColorTexture = materialData.textures['_BaseColorSampler']?.texture;\n const emissiveTexture = materialData.textures['_EmissiveSampler']?.texture;\n\n if (baseColorTexture) {\n baseColorIdSet.add(baseColorTexture.id);\n }\n if (emissiveTexture) {\n emissiveIdSet.add(emissiveTexture.id);\n }\n });\n\n let addTextures = 0;\n const textureIdMap: Record<string, string> = {};\n\n for (const baseColorId of baseColorIdSet) {\n if (emissiveIdSet.has(baseColorId)) {\n const texData = textures.find(tex => tex.textureOptions.id === baseColorId);\n\n if (texData) {\n const newId = generateGUID();\n const newTexData = texData.clone();\n\n newTexData.textureOptions.id = newId;\n textures.push(newTexData);\n textureDataMap[newId] = newTexData.textureOptions;\n textureIdMap[baseColorId] = newId;\n addTextures += 1;\n }\n }\n }\n\n if (addTextures > 0) {\n console.warn(`Add base color texture ${addTextures}`);\n }\n\n materials.forEach(mat => {\n const materialData = mat.materialData;\n\n this.processMaterialData(materialData);\n\n if (materialData.shader?.id === UnlitShaderGUID) {\n this.processMaterialTexture(materialData, '_BaseColorSampler', true, textureDataMap, imageElements);\n } else if (materialData.shader?.id === PBRShaderGUID) {\n const emissiveTexture = materialData.textures['_EmissiveSampler']?.texture;\n\n if (emissiveTexture && textureIdMap[emissiveTexture.id]) {\n emissiveTexture.id = textureIdMap[emissiveTexture.id];\n }\n\n this.processMaterialTexture(materialData, '_BaseColorSampler', true, textureDataMap, imageElements);\n this.processMaterialTexture(materialData, '_MetallicRoughnessSampler', false, textureDataMap, imageElements);\n this.processMaterialTexture(materialData, '_NormalSampler', false, textureDataMap, imageElements);\n this.processMaterialTexture(materialData, '_OcclusionSampler', false, textureDataMap, imageElements);\n this.processMaterialTexture(materialData, '_EmissiveSampler', false, textureDataMap, imageElements);\n }\n });\n\n const gltfScene = scenes[0];\n\n gltfScene.camerasComponentData.forEach(comp => this.processCameraComponentData(comp));\n gltfScene.lightsComponentData.forEach(comp => this.processLightComponentData(comp));\n\n const cubeTextures: TextureSourceOptions[] = [];\n\n imageBasedLights.forEach(ibl => {\n const data = ibl.imageBaseLightData;\n\n if (data.reflectionsIntensity === undefined) {\n data.reflectionsIntensity = data.intensity;\n }\n\n if (data.diffuseImage) {\n const diffuseTexture = textureDataMap[data.diffuseImage.id];\n\n addItem(cubeTextures, diffuseTexture);\n }\n if (data.specularImage) {\n const specularImage = textureDataMap[data.specularImage.id];\n\n addItem(cubeTextures, specularImage);\n }\n });\n\n cubeTextures.forEach(tex => {\n if (tex.target === glContext.TEXTURE_CUBE_MAP) {\n const cube = tex as TextureCubeSourceOptionsImageMipmaps;\n\n cube.mipmaps.forEach(mipmap => {\n [mipmap[4], mipmap[5]] = [mipmap[5], mipmap[4]];\n });\n\n if (cube.mipmaps.length === 1) {\n cube.minFilter = glContext.LINEAR;\n cube.magFilter = glContext.LINEAR;\n } else {\n cube.minFilter = glContext.LINEAR_MIPMAP_LINEAR;\n cube.magFilter = glContext.LINEAR;\n }\n }\n });\n }\n\n processComponentData (components: spec.EffectComponentData[]): void {\n components.forEach(comp => {\n if (comp.dataType === spec.DataType.LightComponent) {\n this.processLightComponentData(comp as unknown as ModelLightComponentData);\n } else if (comp.dataType === spec.DataType.CameraComponent) {\n this.processCameraComponentData(comp as unknown as ModelCameraComponentData);\n } else if (comp.dataType === spec.DataType.SkyboxComponent) {\n this.processSkyboxComponentData(comp as unknown as ModelSkyboxComponentData);\n }\n });\n }\n\n processLightComponentData (light: ModelLightComponentData): void {\n if (!light.color) {\n light.color = { r: 1, g: 1, b: 1, a: 1 };\n }\n\n if (!light.intensity) {\n light.intensity = 1;\n }\n\n if (light.lightType === spec.LightType.point) {\n if (!light.range) {\n light.range = 0;\n }\n } else if (light.lightType === spec.LightType.spot) {\n if (!light.range) {\n light.range = 0;\n }\n\n if (!light.innerConeAngle) {\n light.innerConeAngle = 0;\n }\n\n if (!light.outerConeAngle) {\n light.outerConeAngle = Math.PI / 4;\n }\n }\n }\n\n processCameraComponentData (camera: ModelCameraComponentData): void {\n if (camera.type === spec.CameraType.perspective) {\n if (camera.fov) {\n camera.fov *= Math.PI / 180;\n }\n }\n }\n\n processSkyboxComponentData (skybox: ModelSkyboxComponentData): void {\n if (skybox.intensity === undefined) {\n skybox.intensity = 1;\n }\n\n if (skybox.reflectionsIntensity === undefined) {\n skybox.reflectionsIntensity = 1;\n }\n }\n\n processMaterialData (material: spec.MaterialData): void {\n if (material.shader?.id === UnlitShaderGUID) {\n if (!material.colors['_BaseColorFactor']) {\n material.colors['_BaseColorFactor'] = { r: 1, g: 1, b: 1, a: 1 };\n }\n\n if (material.floats['_AlphaCutoff'] === undefined) {\n material.floats['_AlphaCutoff'] = 0;\n }\n\n if (material.floats['ZWrite'] === undefined) {\n material.floats['ZWrite'] = 1;\n }\n\n if (material.floats['ZTest'] === undefined) {\n material.floats['ZTest'] = 1;\n }\n\n if (!material.stringTags['RenderType']) {\n material.stringTags['RenderType'] = spec.RenderType.Opaque;\n }\n\n if (!material.stringTags['RenderFace']) {\n material.stringTags['RenderFace'] = spec.RenderFace.Front;\n }\n } else if (material.shader?.id === PBRShaderGUID) {\n if (!material.colors['_BaseColorFactor']) {\n material.colors['_BaseColorFactor'] = { r: 1, g: 1, b: 1, a: 1 };\n }\n\n if (material.floats['_SpecularAA'] === undefined) {\n material.floats['_SpecularAA'] = 0;\n }\n\n if (material.floats['_MetallicFactor'] === undefined) {\n material.floats['_MetallicFactor'] = 1;\n }\n\n if (material.floats['_RoughnessFactor'] === undefined) {\n material.floats['_RoughnessFactor'] = 0;\n }\n\n if (material.floats['_NormalScale'] === undefined) {\n material.floats['_NormalScale'] = 1;\n }\n\n if (material.floats['_OcclusionStrength'] === undefined) {\n material.floats['_OcclusionStrength'] = this.isTiny3dMode() ? 0 : 1;\n }\n\n if (!material.colors['_EmissiveFactor']) {\n material.colors['_EmissiveFactor'] = { r: 0, g: 0, b: 0, a: 1 };\n }\n\n if (material.floats['_EmissiveIntensity'] === undefined) {\n material.floats['_EmissiveIntensity'] = 1;\n }\n\n if (material.floats['_AlphaCutoff'] === undefined) {\n material.floats['_AlphaCutoff'] = 0;\n }\n\n if (material.floats['ZWrite'] === undefined) {\n material.floats['ZWrite'] = 1;\n }\n\n if (material.floats['ZTest'] === undefined) {\n material.floats['ZTest'] = 1;\n }\n\n if (!material.stringTags['RenderType']) {\n material.stringTags['RenderType'] = spec.RenderType.Opaque;\n }\n\n if (!material.stringTags['RenderFace']) {\n material.stringTags['RenderFace'] = spec.RenderFace.Front;\n }\n } else {\n console.error(`Encountered unknown shader ID in material with ID: ${material.id}.`);\n }\n }\n\n processTextureOptions (options: TextureSourceOptions, isBaseColor: boolean, image?: ModelImageLike): void {\n let premultiplyAlpha = false;\n let minFilter = options.minFilter ?? glContext.LINEAR_MIPMAP_LINEAR;\n\n if (this.isTiny3dMode()) {\n minFilter = glContext.LINEAR_MIPMAP_LINEAR;\n if (image) {\n if (!WebGLHelper.isPow2(image.width) || !WebGLHelper.isPow2(image.height)) {\n minFilter = glContext.LINEAR;\n }\n }\n\n premultiplyAlpha = isBaseColor ? false : true;\n }\n\n const generateMipmap = minFilter == glContext.NEAREST_MIPMAP_NEAREST\n || minFilter == glContext.LINEAR_MIPMAP_NEAREST\n || minFilter == glContext.NEAREST_MIPMAP_LINEAR\n || minFilter == glContext.LINEAR_MIPMAP_LINEAR;\n\n options.wrapS = options.wrapS ?? glContext.REPEAT;\n options.wrapT = options.wrapT ?? glContext.REPEAT;\n options.magFilter = options.magFilter ?? glContext.LINEAR;\n options.minFilter = minFilter;\n options.anisotropic = 1;\n options.premultiplyAlpha = premultiplyAlpha;\n options.generateMipmap = generateMipmap;\n }\n\n initial (engine: Engine, options?: LoaderOptions) {\n this.engine = engine;\n this.loaderOptions = options ?? {};\n }\n\n checkMeshComponentData (mesh: ModelMeshComponentData, resource: GLTFResources): void {\n if (mesh.materials.length <= 0) {\n throw new Error(`Submesh array is empty for mesh with ID: ${mesh.id}.`);\n }\n\n let geometryData: spec.GeometryData | undefined;\n\n resource.meshes.forEach(meshData => {\n if (meshData.geometryData.id === mesh.geometry.id) {\n geometryData = meshData.geometryData;\n }\n });\n\n if (geometryData === undefined) {\n throw new Error(`Unable to find geometry data for mesh with ID: ${mesh.geometry.id}.`);\n }\n\n if (geometryData.subMeshes.length !== mesh.materials.length) {\n throw new Error(`Mismatch between submeshes count (${geometryData.subMeshes.length}) and materials count (${mesh.materials.length}).`);\n }\n }\n\n processMaterialTexture (material: spec.MaterialData, textureName: string, isBaseColor: boolean, textureDataMap: Record<string, TextureSourceOptions>, imageElements: ModelImageLike[]) {\n const texture = material.textures[textureName];\n\n if (texture) {\n const id = texture.texture.id;\n const texData = textureDataMap[id];\n let imageObj: ModelImageLike | undefined;\n\n // @ts-expect-error\n if (typeof texData.source !== 'number') {\n // @ts-expect-error\n throw new Error(`Invalid texture option source data, ${texData.source}`);\n } else {\n // @ts-expect-error\n imageObj = imageElements[texData.source];\n }\n if (texData) {\n this.processTextureOptions(texData, isBaseColor, imageObj);\n }\n }\n }\n\n getLoadResult (): LoadSceneResult {\n const itemIds: spec.DataPath[] = [];\n\n this.items.forEach(item => itemIds.push({ id: item.id }));\n this.composition.items = itemIds;\n\n const jsonScene: spec.JSONScene = {\n version: '3.0',\n playerVersion: {\n web: '2.0',\n native: '2.0',\n },\n type: 'ge',\n compositionId: this.composition.id,\n compositions: [this.composition],\n images: this.images,\n shapes: [],\n plugins: ['model'],\n textures: this.textures,\n items: this.items,\n components: this.components,\n materials: this.materials,\n shaders: this.shaders,\n geometries: this.geometries,\n animations: this.animations,\n miscs: [\n {\n id: this.timelineAssetId,\n dataType: spec.DataType.TimelineAsset,\n },\n ],\n };\n\n const sceneAABB = this.computeSceneAABB();\n\n return {\n source: this.getRemarkString(),\n jsonScene,\n sceneAABB: {\n min: sceneAABB.min.toArray(),\n max: sceneAABB.max.toArray(),\n },\n };\n }\n\n addLight (data: ModelLight) {\n const itemId = generateGUID();\n const component: spec.ModelLightComponentData = {\n id: generateGUID(),\n item: { id: itemId },\n dataType: spec.DataType.LightComponent,\n //\n lightType: data.lightType,\n color: data.color,\n intensity: data.intensity,\n range: data.range,\n innerConeAngle: data.innerConeAngle,\n outerConeAngle: data.outerConeAngle,\n };\n const item: spec.VFXItemData = {\n id: itemId,\n name: data.name,\n duration: data.duration,\n type: spec.ItemType.light,\n pn: 0,\n visible: true,\n endBehavior: data.endBehavior,\n transform: {\n position: {\n x: data.position[0],\n y: data.position[1],\n z: data.position[2],\n },\n eulerHint: {\n x: data.rotation[0],\n y: data.rotation[1],\n z: data.rotation[2],\n },\n scale: {\n x: data.scale[0],\n y: data.scale[1],\n z: data.scale[2],\n },\n },\n components: [\n { id: component.id },\n ],\n content: {},\n dataType: spec.DataType.VFXItemData,\n };\n\n this.items.push(item);\n this.components.push(component);\n }\n\n addCamera (camera: ModelCamera) {\n const itemId = generateGUID();\n const component: spec.ModelCameraComponentData = {\n id: generateGUID(),\n item: { id: itemId },\n dataType: spec.DataType.CameraComponent,\n fov: camera.fov,\n near: camera.near,\n far: camera.far,\n clipMode: camera.clipMode,\n };\n const item: spec.VFXItemData = {\n id: itemId,\n name: camera.name,\n duration: camera.duration,\n // @ts-expect-error\n type: 'camera',\n pn: 0,\n visible: true,\n endBehavior: camera.endBehavior,\n transform: {\n position: {\n x: camera.position[0],\n y: camera.position[1],\n z: camera.position[2],\n },\n eulerHint: {\n x: camera.rotation[0],\n y: camera.rotation[1],\n z: camera.rotation[2],\n },\n scale: {\n x: 1,\n y: 1,\n z: 1,\n },\n },\n components: [\n { id: component.id },\n ],\n content: {},\n dataType: spec.DataType.VFXItemData,\n };\n\n this.items.push(item);\n this.components.push(component);\n }\n\n async tryAddSkybox (skybox: ModelSkybox) {\n if (this.gltfImageBasedLights.length > 0 && !this.ignoreSkybox()) {\n const ibl = this.gltfImageBasedLights[0];\n\n this.components.push(ibl.imageBaseLightData);\n } else if (skybox.skyboxType !== undefined) {\n const itemId = generateGUID();\n const skyboxInfo = this.createSkyboxComponentData(skybox.skyboxType as SkyboxType);\n const { imageList, textureOptionsList, component } = skyboxInfo;\n\n component.item.id = itemId;\n if (skybox.intensity !== undefined) {\n component.intensity = skybox.intensity;\n }\n if (skybox.reflectionsIntensity !== undefined) {\n component.reflectionsIntensity = skybox.reflectionsIntensity;\n }\n component.renderable = skybox.renderable ?? false;\n\n const item: spec.VFXItemData = {\n id: itemId,\n name: `Skybox-${skybox.skyboxType}`,\n duration: skybox.duration ?? 999,\n type: spec.ItemType.skybox,\n pn: 0,\n visible: true,\n endBehavior: spec.EndBehavior.freeze,\n transform: {\n position: {\n x: 0,\n y: 0,\n z: 0,\n },\n eulerHint: {\n x: 0,\n y: 0,\n z: 0,\n },\n scale: {\n x: 1,\n y: 1,\n z: 1,\n },\n },\n components: [\n { id: component.id },\n ],\n content: {},\n dataType: spec.DataType.VFXItemData,\n };\n\n this.images.push(...imageList);\n // @ts-expect-error\n this.textures.push(...textureOptionsList);\n this.items.push(item);\n this.components.push(component);\n }\n }\n\n createSkyboxComponentData (typeName: SkyboxType) {\n if (typeName !== 'NFT' && typeName !== 'FARM') {\n throw new Error(`Invalid skybox type specified: '${typeName}'. Valid types are: 'NFT', 'FARM'.`);\n }\n //\n const typ = typeName === 'NFT' ? PSkyboxType.NFT : PSkyboxType.FARM;\n const params = PSkyboxCreator.getSkyboxParams(typ);\n\n return PSkyboxCreator.createSkyboxComponentData(params);\n }\n\n private clear () {\n this.images = [];\n this.textures = [];\n this.items = [];\n this.components = [];\n this.materials = [];\n this.shaders = [];\n this.geometries = [];\n }\n\n private computeSceneAABB () {\n const geometryDataMap: Record<string, GLTFMesh> = {};\n\n this.gltfMeshs.forEach(mesh => {\n const id = mesh.geometryData.id;\n\n geometryDataMap[id] = mesh;\n });\n const componentDataMap: Record<string, GLTFMesh> = {};\n\n this.components.forEach(component => {\n if (component.dataType === spec.DataType.MeshComponent) {\n const meshComponent = component as spec.ModelMeshComponentData;\n\n componentDataMap[component.id] = geometryDataMap[meshComponent.geometry.id];\n }\n });\n\n const sceneAABB = new Box3();\n const parentTransformMap: Record<string, Transform> = {};\n\n this.items.forEach(item => {\n const parentId = item.parentId ?? '';\n const parentTransform = parentTransformMap[parentId] ?? new Transform();\n const props: TransformProps = {};\n\n if (item.transform) {\n props.position = new Vector3().copyFrom(item.transform.position);\n props.rotation = Euler.fromVector3(item.transform.eulerHint as Vector3);\n props.scale = new Vector3().copyFrom(item.transform.scale);\n }\n const transform = new Transform(props, parentTransform);\n\n parentTransformMap[item.id] = transform;\n item.components.forEach(component => {\n const mesh = componentDataMap[component.id];\n\n if (mesh && mesh.bounds) {\n const minPos = Vector3.fromArray(mesh.bounds.box.min);\n const maxPos = Vector3.fromArray(mesh.bounds.box.max);\n\n sceneAABB.union(new Box3(minPos, maxPos));\n }\n });\n });\n\n return sceneAABB;\n }\n\n /**\n * 按照传入的动画播放参数,计算需要播放的动画索引\n *\n * @param treeOptions 节点树属性,需要初始化animations列表。\n * @returns 返回计算的动画索引,-1表示没有动画需要播放,-88888888表示播放所有动画。\n */\n getPlayAnimationIndex (treeOptions: ModelTreeOptions): number {\n const animations = treeOptions.animations;\n\n if (animations === undefined || animations.length <= 0) {\n // 硬编码,内部指定的不播放动画的索引值\n return -1;\n }\n\n if (this.isPlayAllAnimation()) {\n // 硬编码,内部指定的播放全部动画的索引值\n return -88888888;\n }\n\n const animationInfo = this.sceneOptions.effects.playAnimation;\n\n if (animationInfo === undefined) {\n return -1;\n }\n\n if (typeof animationInfo === 'number') {\n if (animationInfo >= 0 && animationInfo < animations.length) {\n return animationInfo;\n } else {\n return -1;\n }\n } else {\n // typeof animationInfo === 'string'\n let animationIndex = -1;\n\n // 通过动画名字查找动画索引\n animations.forEach((anim, index) => {\n if (anim.name === animationInfo) {\n animationIndex = index;\n }\n });\n\n return animationIndex;\n }\n }\n\n isPlayAnimation (): boolean {\n return this.sceneOptions.effects.playAnimation !== undefined;\n }\n\n isPlayAllAnimation (): boolean {\n return this.sceneOptions.effects.playAllAnimation === true;\n }\n\n getRemarkString (): string {\n const remark = this.sceneOptions.gltf.remark;\n\n if (remark === undefined) {\n return 'Unknown';\n } else if (typeof remark === 'string') {\n return remark;\n } else {\n return 'BinaryBuffer';\n }\n }\n\n getCompositionDuration () {\n return this.composition.duration;\n }\n\n isTiny3dMode (): boolean {\n return this.loaderOptions.compatibleMode === 'tiny3d';\n }\n\n getItemDuration (): number {\n return this.sceneOptions.effects.duration ?? 9999;\n }\n\n getEndBehavior (): spec.EndBehavior {\n return this.sceneOptions.effects.endBehavior ?? spec.EndBehavior.restart;\n }\n\n getSkyboxType (): PSkyboxType | undefined {\n const typeName = this.sceneOptions.gltf.skyboxType;\n\n switch (typeName) {\n case 'NFT': return PSkyboxType.NFT;\n case 'FARM': return PSkyboxType.FARM;\n }\n }\n\n isSkyboxVis (): boolean {\n return this.sceneOptions.gltf.skyboxVis === true;\n }\n\n ignoreSkybox (): boolean {\n return this.sceneOptions.gltf.ignoreSkybox === true;\n }\n\n isEnvironmentTest (): boolean {\n if (typeof this.sceneOptions.gltf.remark === 'string') {\n return this.sceneOptions.gltf.remark.includes('EnvironmentTest');\n } else {\n return false;\n }\n }\n\n /**\n * for old scene compatibility\n */\n\n processLight (lights: GLTFLight[], fromGLTF: boolean): void {\n lights.forEach(l => {\n if (l.color === undefined) {\n if (fromGLTF) { l.color = [255, 255, 255, 255]; } else { l.color = [1, 1, 1, 1]; }\n } else {\n l.color[0] = this.scaleColorVal(l.color[0], fromGLTF);\n l.color[1] = this.scaleColorVal(l.color[1], fromGLTF);\n l.color[2] = this.scaleColorVal(l.color[2], fromGLTF);\n l.color[3] = this.scaleColorVal(l.color[3], fromGLTF);\n }\n });\n }\n\n processCamera (cameras: GLTFCamera[], fromGLTF: boolean): void {\n const scale = fromGLTF ? 180.0 / Math.PI : Math.PI / 180.0;\n\n cameras.forEach(camera => {\n if (camera.perspective !== undefined) {\n camera.perspective.yfov *= scale;\n }\n });\n }\n\n processMaterial (materials: GLTFMaterial[], fromGLTF: boolean): void {\n materials.forEach(mat => {\n if (mat.baseColorFactor === undefined) {\n if (fromGLTF) { mat.baseColorFactor = [255, 255, 255, 255]; } else { mat.baseColorFactor = [1, 1, 1, 1]; }\n } else {\n mat.baseColorFactor[0] = this.scaleColorVal(mat.baseColorFactor[0], fromGLTF);\n mat.baseColorFactor[1] = this.scaleColorVal(mat.baseColorFactor[1], fromGLTF);\n mat.baseColorFactor[2] = this.scaleColorVal(mat.baseColorFactor[2], fromGLTF);\n mat.baseColorFactor[3] = this.scaleColorVal(mat.baseColorFactor[3], fromGLTF);\n }\n\n if (mat.emissiveFactor === undefined) {\n if (fromGLTF) { mat.emissiveFactor = [255, 255, 255, 255]; } else { mat.emissiveFactor = [1, 1, 1, 1]; }\n } else {\n mat.emissiveFactor[0] = this.scaleColorVal(mat.emissiveFactor[0], fromGLTF);\n mat.emissiveFactor[1] = this.scaleColorVal(mat.emissiveFactor[1], fromGLTF);\n mat.emissiveFactor[2] = this.scaleColorVal(mat.emissiveFactor[2], fromGLTF);\n mat.emissiveFactor[3] = this.scaleColorVal(mat.emissiveFactor[3], fromGLTF);\n }\n\n if (fromGLTF && mat.occlusionTexture !== undefined && mat.occlusionTexture.strength === undefined) {\n mat.occlusionTexture.strength = this.isTiny3dMode() ? 0 : 1;\n }\n });\n }\n\n createTreeOptions (scene: GLTFScene): ModelTreeOptions {\n const nodeList = scene.nodes.map((node, nodeIndex) => {\n const children = node.children.map(child => {\n if (child.nodeIndex === undefined) { throw new Error(`Undefined nodeIndex for child ${child}`); }\n\n return child.nodeIndex;\n });\n let pos: spec.vec3 | undefined;\n let quat: spec.vec4 | undefined;\n let scale: spec.vec3 | undefined;\n\n if (node.matrix !== undefined) {\n if (node.matrix.length !== 16) { throw new Error(`Invalid matrix length ${node.matrix.length} for node ${node}`); }\n const mat = Matrix4.fromArray(node.matrix);\n const transform = mat.getTransform();\n\n pos = transform.translation.toArray();\n quat = transform.rotation.toArray();\n scale = transform.scale.toArray();\n } else {\n if (node.translation !== undefined) { pos = node.translation as spec.vec3; }\n if (node.rotation !== undefined) { quat = node.rotation as spec.vec4; }\n if (node.scale !== undefined) { scale = node.scale as spec.vec3; }\n }\n node.nodeIndex = nodeIndex;\n const treeNode: spec.TreeNodeOptions = {\n name: node.name,\n transform: {\n position: pos,\n quat: quat,\n scale: scale,\n },\n children: children,\n id: `${node.nodeIndex}`,\n // id: index, id不指定就是index,指定后就是指定的值\n };\n\n return treeNode;\n });\n\n const rootNodes = scene.rootNodes.map(root => {\n if (root.nodeIndex === undefined) { throw new Error(`Undefined nodeIndex for root ${root}`); }\n\n return root.nodeIndex;\n });\n\n const treeOptions: ModelTreeOptions = {\n nodes: nodeList,\n children: rootNodes,\n animation: -1,\n animations: [],\n };\n\n return treeOptions;\n }\n\n createAnimations (animations: GLTFAnimation[]): ModelAnimationOptions[] {\n return animations.map(anim => {\n const tracks = anim.channels.map(channel => {\n const track: ModelAnimTrackOptions = {\n input: channel.input.array as Float32Array,\n output: channel.output.array as Float32Array,\n node: channel.target.node,\n path: channel.target.path,\n interpolation: channel.interpolation,\n };\n\n return track;\n });\n\n const newAnim: ModelAnimationOptions = {\n name: anim.name,\n tracks: tracks,\n };\n\n return newAnim;\n });\n }\n\n createGeometry (primitive: GLTFPrimitive, hasSkinAnim: boolean): Geometry {\n const proxy = new GeometryProxy(this.engine, primitive, hasSkinAnim);\n\n return proxy.geometry;\n }\n\n createMaterial (material: GLTFMaterial): ModelMaterialOptions {\n const proxy = new MaterialProxy(material, [], this.isTiny3dMode());\n\n return proxy.material;\n }\n\n createTexture2D (image: GLTFImage, texture: GLTFTexture, isBaseColor: boolean): Promise<Texture> {\n return WebGLHelper.createTexture2D(this.engine, image, texture, isBaseColor, this.isTiny3dMode());\n }\n\n createTextureCube (cubeImages: CubeImage[], level0Size?: number): Promise<Texture> {\n if (cubeImages.length == 0) { throw new Error(`createTextureCube: Invalid cubeImages length ${cubeImages}`); }\n\n const mipmaps: PImageBufferData[][] = [];\n\n cubeImages.forEach(cubeImage => {\n if (cubeImage.length != 6) { throw new Error(`createTextureCube: cubeimage count should always be 6, ${cubeImage}`); }\n //\n const imgList: PImageBufferData[] = [];\n\n cubeImage.forEach(img => {\n if (img.imageData === undefined) { throw new Error(`createTextureCube: Invalid image data from ${img}`); }\n //\n imgList.push({\n type: 'buffer',\n data: img.imageData,\n mimeType: img.mimeType,\n });\n });\n\n if (this.isTiny3dMode()) {\n [imgList[4], imgList[5]] = [imgList[5], imgList[4]];\n }\n\n mipmaps.push(imgList);\n });\n //\n if (mipmaps.length == 1) {\n // no mipmaps\n return WebGLHelper.createTextureCubeFromBuffer(this.engine, mipmaps[0]);\n } else {\n // has mipmaps\n return WebGLHelper.createTextureCubeMipmapFromBuffer(this.engine, mipmaps, level0Size ?? Math.pow(2, mipmaps.length - 1));\n }\n }\n\n createSkybox (ibl: GLTFImageBasedLight): Promise<ModelSkyboxOptions> {\n const reflectionsIntensity = ibl.reflectionsIntensity ?? ibl.intensity;\n const irradianceCoeffs = ibl.irradianceCoefficients as number[][];\n const inSpecularImages = ibl.specularImages as CubeImage[];\n const specularImages = inSpecularImages.map(images => {\n const newImages = images.map(img => {\n const outImg: PImageBufferData = {\n type: 'buffer',\n data: img.imageData,\n mimeType: img.mimeType,\n };\n\n return outImg;\n });\n\n if (this.isTiny3dMode()) {\n [newImages[4], newImages[5]] = [newImages[5], newImages[4]];\n }\n\n return newImages;\n });\n const specularMipCount = specularImages.length - 1;\n const specularImageSize = ibl.specularImageSize ?? Math.pow(2, specularMipCount);\n\n const newIrradianceCoeffs: number[] = [];\n\n irradianceCoeffs.forEach(coeffs => {\n newIrradianceCoeffs.push(...coeffs);\n });\n\n const params: PSkyboxBufferParams = {\n type: 'buffer',\n renderable: this.isSkyboxVis(),\n intensity: ibl.intensity,\n reflectionsIntensity: reflectionsIntensity,\n irradianceCoeffs: newIrradianceCoeffs,\n specularImage: specularImages,\n specularMipCount: specularMipCount,\n specularImageSize: specularImageSize,\n };\n\n return PSkyboxCreator.createSkyboxOptions(this.engine, params);\n }\n\n createDefaultSkybox (typeName: SkyboxType): Promise<ModelSkyboxOptions> {\n if (typeName !== 'NFT' && typeName !== 'FARM') { throw new Error(`Invalid skybox type name ${typeName}`); }\n //\n const typ = typeName === 'NFT' ? PSkyboxType.NFT : PSkyboxType.FARM;\n const params = PSkyboxCreator.getSkyboxParams(typ);\n\n return PSkyboxCreator.createSkyboxOptions(this.engine, params);\n }\n\n scaleColorVal (val: number, fromGLTF: boolean): number {\n return fromGLTF ? LoaderHelper.scaleTo255(val) : LoaderHelper.scaleTo1(val);\n }\n\n scaleColorVec (vec: number[], fromGLTF: boolean): number[] {\n return vec.map(val => this.scaleColorVal(val, fromGLTF));\n }\n}\n\nexport function getPBRShaderProperties (): string {\n return `\n _BaseColorSampler (\"基础贴图\", 2D) = \"\" {}\n _BaseColorFactor (\"基础颜色\", Color) = (1, 1, 1, 1)\n _MetallicRoughnessSampler (\"金属贴图\", 2D) = \"\" {}\n _MetallicFactor (\"金属度\", Range(0, 1)) = 1\n _RoughnessFactor (\"粗糙度\", Range(0, 1)) = 1\n [Toggle] _SpecularAA (\"高光抗锯齿\", Float) = 0\n _NormalSampler (\"法线贴图\", 2D) = \"\" {}\n _NormalScale (\"法线贴图强度\", Range(0, 2)) = 1\n _OcclusionSampler (\"AO贴图\", 2D) = \"\" {}\n _OcclusionStrength (\"AO贴图强度\", Range(0, 1)) = 1\n _EmissiveSampler (\"自发光贴图\", 2D) = \"\" {}\n _EmissiveIntensity (\"自发光贴图强度\", Float) = 1\n _EmissiveFactor (\"自发光颜色\", Color) = (0, 0, 0, 1)\n _AlphaCutoff (\"Alpha裁剪值\", Range(0, 1)) = 0.5\n `;\n}\n\nexport function getUnlitShaderProperties (): string {\n return `\n _BaseColorSampler (\"基础贴图\", 2D) = \"\" {}\n _BaseColorFactor (\"基础颜色\", Color) = (1, 1, 1, 1)\n _AlphaCutoff (\"Alpha裁剪值\", Range(0, 1)) = 0.5\n `;\n}\n\nexport function getDefaultPBRMaterialData (): spec.MaterialData {\n const material: spec.MaterialData = {\n 'id': '00000000000000000000000000000000',\n 'name': 'PBR Material',\n 'dataType': spec.DataType.Material,\n 'stringTags': {\n 'RenderType': spec.RenderType.Opaque,\n 'RenderFace': 'Front',\n },\n 'macros': [],\n 'shader': {\n 'id': 'pbr00000000000000000000000000000',\n },\n 'ints': {\n\n },\n 'floats': {\n 'ZWrite': 1,\n 'ZTest': 1,\n '_SpecularAA': 0,\n '_MetallicFactor': 1,\n '_RoughnessFactor': 0.0,\n '_NormalScale': 1,\n '_OcclusionStrength': 1,\n '_EmissiveIntensity': 1,\n '_AlphaCutoff': 0.5,\n },\n 'vector4s': {\n\n },\n 'colors': {\n '_BaseColorFactor': {\n 'r': 1,\n 'g': 1,\n 'b': 1,\n 'a': 1,\n },\n '_EmissiveFactor': {\n 'r': 0,\n 'g': 0,\n 'b': 0,\n 'a': 1,\n },\n },\n 'textures': {\n\n },\n };\n\n return material;\n}\n\nexport function getDefaultUnlitMaterialData (): spec.MaterialData {\n const material: spec.MaterialData = {\n 'id': '00000000000000000000000000000000',\n 'name': 'Unlit Material',\n 'dataType': spec.DataType.Material,\n 'stringTags': {\n 'ZWrite': 'true',\n 'ZTest': 'true',\n 'RenderType': spec.RenderType.Opaque,\n 'Cull': 'Front',\n },\n 'macros': [],\n 'shader': {\n 'id': 'unlit000000000000000000000000000',\n },\n 'ints': {\n\n },\n 'floats': {\n '_AlphaCutoff': 0.5,\n },\n 'vector4s': {\n\n },\n 'colors': {\n '_BaseColorFactor': {\n 'r': 1,\n 'g': 1,\n 'b': 1,\n 'a': 1,\n },\n },\n 'textures': {\n\n },\n };\n\n return material;\n}\n\nclass GeometryProxy {\n\n constructor (\n private engine: Engine,\n private gltfGeometry: GLTFPrimitive,\n private hasSkinAnimation: boolean) {\n }\n\n get geometry (): Geometry {\n const attributes: Record<string, Attribute> = {};\n\n if (this.hasPosition) {\n const attrib = this.positionAttrib;\n\n attributes['a_Position'] = this._getBufferAttrib(attrib);\n } else {\n throw new Error('Position attribute missing');\n }\n if (this.hasNormal) {\n const attrib = this.normalAttrib;\n\n if (attrib !== undefined) {\n attributes['a_Normal'] = this._getBufferAttrib(attrib);\n }\n }\n if (this.hasTangent) {\n const attrib = this.tangentAttrib;\n\n if (attrib !== undefined) {\n attributes['a_Tangent'] = this._getBufferAttrib(attrib);\n }\n }\n this.texCoordList.forEach(val => {\n const attrib = this.texCoordAttrib(val);\n const attribName = `a_UV${val + 1}`;\n\n attributes[attribName] = this._getBufferAttrib(attrib);\n });\n if (this.hasSkinAnimation) {\n const jointAttrib = this.jointAttribute;\n\n if (jointAttrib !== undefined) {\n attributes['a_Joint1'] = this._getBufferAttrib(jointAttrib);\n }\n const weightAttrib = this.weightAttribute;\n\n if (weightAttrib !== undefined) {\n attributes['a_Weight1'] = this._getBufferAttrib(weightAttrib);\n }\n }\n\n /**\n * 设置Morph动画需要的Attribute,主要包括Position,Normal和Tangent\n */\n for (let i = 0; i < 8; i++) {\n const positionAttrib = this.getTargetPosition(i);\n\n if (positionAttrib !== undefined) {\n attributes[`a_Target_Position${i}`] = this._getBufferAttrib(positionAttrib);\n }\n\n const normalAttrib = this.getTargetNormal(i);\n\n if (normalAttrib !== undefined) {\n attributes[`a_Target_Normal${i}`] = this._getBufferAttrib(normalAttrib);\n }\n\n const tangentAttrib = this.getTargetTangent(i);\n\n if (tangentAttrib !== undefined) {\n attributes[`a_Target_Tangent${i}`] = this._getBufferAttrib(tangentAttrib);\n }\n }\n\n const indexArray = this.indexArray;\n\n if (indexArray !== undefined) {\n return Geometry.create(\n this.engine,\n {\n attributes: attributes,\n indices: { data: indexArray },\n drawStart: 0,\n drawCount: indexArray.length,\n mode: glContext.TRIANGLES,\n }\n );\n } else {\n return Geometry.create(\n this.engine,\n {\n attributes: attributes,\n drawStart: 0,\n drawCount: this.positionAttrib.array.length / 3,\n mode: glContext.TRIANGLES,\n }\n );\n }\n }\n\n private _getBufferAttrib (inAttrib: GLTFBufferAttribute): Attribute {\n const attrib: spec.AttributeWithData = {\n type: inAttrib.type,\n size: inAttrib.itemSize,\n //stride: inAttrib.stride,\n //offset: inAttrib.offset,\n data: inAttrib.array,\n normalize: inAttrib.normalized,\n };\n\n return attrib;\n }\n\n get positionAttrib () {\n return this.gltfGeometry.getPosition();\n }\n\n get normalAttrib () {\n return this.gltfGeometry.getNormal();\n }\n\n get tangentAttrib () {\n return this.gltfGeometry.getTangent();\n }\n\n texCoordAttrib (index: number) {\n return this.gltfGeometry.getTexCoord(index);\n }\n\n get jointAttribute () {\n return this.gltfGeometry.getJoints(0);\n }\n\n get weightAttribute () {\n return this.gltfGeometry.getWeights(0);\n }\n\n get hasPosition (): boolean {\n return this.positionAttrib !== undefined;\n }\n\n get hasNormal (): boolean {\n return this.normalAttrib !== undefined;\n }\n\n get hasTangent (): boolean {\n return this.tangentAttrib !== undefined;\n }\n\n get hasTexCoord (): boolean {\n return this.texCoordCount > 0;\n }\n\n get texCoordCount (): number {\n for (let i = 0; i < 10; i++) {\n if (this.texCoordAttrib(i) === undefined) { return i; }\n }\n\n return 0;\n }\n\n get hasJointAttribute (): boolean {\n return this.jointAttribute !== undefined;\n }\n\n get hasWeightAttribute (): boolean {\n return this.weightAttribute !== undefined;\n }\n\n get indexArray (): Uint8Array | Uint16Array | Uint32Array | undefined {\n if (this.gltfGeometry.indices === undefined) { return undefined; }\n\n switch (this.gltfGeometry.indices.type) {\n case WebGLRenderingContext['UNSIGNED_INT']:\n return this.gltfGeometry.indices.array as Uint32Array;\n case WebGLRenderingContext['UNSIGNED_SHORT']:\n return this.gltfGeometry.indices.array as Uint16Array;\n case WebGLRenderingContext['UNSIGNED_BYTE']:\n return this.gltfGeometry.indices.array as Uint8Array;\n }\n\n return undefined;\n }\n\n get indexCount (): number {\n if (this.gltfGeometry.indices !== undefined) { return this.gltfGeometry.indices.array.length; } else { return 0; }\n }\n\n get texCoordList (): number[] {\n const texCoords: number[] = [];\n\n for (let i = 0; i < 10; i++) {\n if (this.texCoordAttrib(i) !== undefined) {\n texCoords.push(i);\n } else {\n break;\n }\n }\n\n return texCoords;\n }\n\n getTargetPosition (index: number): GLTFBufferAttribute | undefined {\n return this.gltfGeometry.getAttribute(`POSITION${index}`);\n }\n\n getTargetNormal (index: number): GLTFBufferAttribute | undefined {\n return this.gltfGeometry.getAttribute(`NORMAL${index}`);\n }\n\n getTargetTangent (index: number): GLTFBufferAttribute | undefined {\n return this.gltfGeometry.getAttribute(`TANGENT${index}`);\n }\n\n}\n\nclass MaterialProxy {\n private gltfMaterial: GLTFMaterial;\n private textures: Texture[];\n // TODO: 待移除?\n private tiny3dMode: boolean;\n\n constructor (material: GLTFMaterial, textures: Texture[], tiny3dMode: boolean) {\n this.gltfMaterial = material;\n this.textures = textures;\n this.tiny3dMode = tiny3dMode;\n }\n\n get material (): ModelMaterialOptions {\n const mat = this.gltfMaterial;\n const isUnlit = GLTFHelper.isUnlitMaterial(mat);\n\n let blending = spec.MaterialBlending.opaque;\n\n switch (mat.alphaMode) {\n case 'OPAQUE':\n blending = spec.MaterialBlending.opaque;\n\n break;\n case 'MASK':\n blending = spec.MaterialBlending.masked;\n\n break;\n case 'BLEND':\n blending = spec.MaterialBlending.translucent;\n\n break;\n }\n\n const side = mat.doubleSided ? spec.SideMode.DOUBLE : spec.SideMode.FRONT;\n\n const enableShadow = false;\n\n const alphaCutOff = mat.alphaCutOff ?? 0.5;\n\n const name = mat.name;\n\n if (isUnlit) {\n return {\n name: name,\n type: spec.MaterialType.unlit,\n baseColorTexture: this.baseColorTextureObj,\n baseColorTextureCoordinate: this.baseColorTextureCoord,\n baseColorTextureTransform: this.baseColorTextureTransfrom,\n baseColorFactor: this.baseColorFactor,\n //\n depthMask: mat.extras?.depthMask,\n blending: blending,\n alphaCutOff: alphaCutOff,\n side: side,\n };\n } else {\n return {\n name: name,\n type: spec.MaterialType.pbr,\n baseColorTexture: this.baseColorTextureObj,\n baseColorTextureCoordinate: this.baseColorTextureCoord,\n baseColorTextureTransform: this.baseColorTextureTransfrom,\n baseColorFactor: this.baseColorFactor,\n //\n useSpecularAA: this.getSpecularAA(),\n //\n metallicRoughnessTexture: this.metallicRoughnessTextureObj,\n metallicRoughnessTextureCoordinate: this.metallicRoughnessTextureCoord,\n metallicRoughnessTextureTransform: this.metallicRoughnessTextureTransfrom,\n metallicFactor: this.metalicFactor,\n roughnessFactor: this.roughnessFactor,\n //\n normalTexture: this.normalTextureObj,\n normalTextureCoordinate: this.normalTextureCoord,\n normalTextureTransform: this.normalTextureTransfrom,\n normalTextureScale: this.normalTextureScale,\n //\n occlusionTexture: this.occlusionTextureObj,\n occlusionTextureCoordinate: this.occlusionTextureCoord,\n occlusionTextureTransform: this.occlusionTextureTransfrom,\n occlusionTextureStrength: this.occlusionTextureStrength,\n //\n emissiveTexture: this.emissiveTextureObj,\n emissiveTextureCoordinate: this.emissiveTextureCoord,\n emissiveTextureTransform: this.emissiveTextureTransfrom,\n emissiveFactor: this.emissiveFactor,\n emissiveIntensity: 1.0,\n //\n depthMask: mat.extras?.depthMask,\n blending: blending,\n alphaCutOff: alphaCutOff,\n side: side,\n enableShadow: enableShadow,\n };\n }\n }\n\n private getTextureObject (index: number): Texture | undefined {\n if (index < 0 || index >= this.textures.length) { return; }\n\n return this.textures[index];\n }\n\n getTextureObj (texInfo?: GLTFTextureInfo): Texture | undefined {\n return texInfo ? this.getTextureObject(texInfo.index) : undefined;\n }\n\n getTextureCoord (texInfo?: GLTFTextureInfo): number | undefined {\n return texInfo ? texInfo.texCoord : undefined;\n }\n\n getTextureTransform (texInfo?: GLTFTextureInfo): ModelTextureTransform | undefined {\n const transform = texInfo?.extensions?.KHR_texture_transform;\n\n if (transform === undefined) {\n return;\n }\n\n if (transform.offset === undefined && transform.rotation === undefined && transform.scale === undefined) {\n return;\n }\n\n return {\n offset: transform.offset,\n rotation: transform.rotation,\n scale: transform.scale,\n };\n }\n\n get baseColorTextureObj (): Texture | undefined {\n return this.getTextureObj(this.gltfMaterial.baseColorTexture);\n }\n\n get baseColorTextureCoord (): number | undefined {\n return this.getTextureCoord(this.gltfMaterial.baseColorTexture);\n }\n\n get baseColorTextureTransfrom (): ModelTextureTransform | undefined {\n return this.getTextureTransform(this.gltfMaterial.baseColorTexture);\n }\n\n get metallicRoughnessTextureObj (): Texture | undefined {\n return this.getTextureObj(this.gltfMaterial.metallicRoughnessTexture);\n }\n\n get metallicRoughnessTextureCoord (): number | undefined {\n return this.getTextureCoord(this.gltfMaterial.metallicRoughnessTexture);\n }\n\n get metallicRoughnessTextureTransfrom (): ModelTextureTransform | undefined {\n return this.getTextureTransform(this.gltfMaterial.metallicRoughnessTexture);\n }\n\n get normalTextureObj (): Texture | undefined {\n return this.getTextureObj(this.gltfMaterial.normalTexture);\n }\n\n get normalTextureCoord (): number | undefined {\n return this.getTextureCoord(this.gltfMaterial.normalTexture);\n }\n\n get normalTextureTransfrom (): ModelTextureTransform | undefined {\n return this.getTextureTransform(this.gltfMaterial.normalTexture);\n }\n\n get occlusionTextureObj (): Texture | undefined {\n return this.getTextureObj(this.gltfMaterial.occlusionTexture);\n }\n\n get occlusionTextureCoord (): number | undefined {\n return this.getTextureCoord(this.gltfMaterial.occlusionTexture);\n }\n\n get occlusionTextureTransfrom (): ModelTextureTransform | undefined {\n return this.getTextureTransform(this.gltfMaterial.occlusionTexture);\n }\n\n get emissiveTextureObj (): Texture | undefined {\n return this.getTextureObj(this.gltfMaterial.emissiveTexture);\n }\n\n get emissiveTextureCoord (): number | undefined {\n return this.getTextureCoord(this.gltfMaterial.emissiveTexture);\n }\n\n get emissiveTextureTransfrom (): ModelTextureTransform | undefined {\n return this.getTextureTransform(this.gltfMaterial.emissiveTexture);\n }\n\n get hasEmissive (): boolean {\n const factor = this.emissiveFactor;\n\n return factor[0] + factor[1] + factor[2] > 0;\n }\n\n get baseColorFactor (): [number, number, number, number] {\n const f = this.gltfMaterial.baseColorFactor;\n\n if (f === undefined || f.length != 4) { return [1, 1, 1, 1]; } else { return [f[0], f[1], f[2], f[3]]; }\n }\n\n getSpecularAA () {\n return this.gltfMaterial.extras?.useSpecularAA;\n }\n\n get metalicFactor (): number {\n return this.gltfMaterial.metallicFactor ?? 1;\n }\n\n get roughnessFactor (): number {\n return this.gltfMaterial.roughnessFactor ?? 1;\n }\n\n get normalTextureScale (): number {\n return this.gltfMaterial.normalTexture?.scale ?? 1;\n }\n\n get occlusionTextureStrength (): number {\n return this.gltfMaterial.occlusionTexture?.strength ?? 1;\n }\n\n get emissiveFactor (): [number, number, number, number] {\n const f = this.gltfMaterial.emissiveFactor;\n\n if (f === undefined || f.length != 4) {\n return [0, 0, 0, 1];\n } else {\n return [f[0], f[1], f[2], 1.0];\n }\n }\n\n}\n\nclass GLTFHelper {\n static isUnlitMaterial (mat: GLTFMaterial): boolean {\n return mat.extensions?.KHR_materials_unlit !== undefined;\n }\n\n static createBoxFromGLTFBound (bound: GLTFBounds): Box3 {\n const boxMin = Vector3.fromArray(bound.box.min as number[]);\n const boxMax = Vector3.fromArray(bound.box.max as number[]);\n\n return new Box3(boxMin, boxMax);\n }\n}\n"],"names":["Vector2","math","Vector3","Vector4","Matrix3","Matrix4","Color","Euler","EulerOrder","Quaternion","Box3","Sphere","Ray","DEG2RAD","LoaderHelper","getTransformFromMat4","mat","transform","getTransform","euler","rotation","toEuler","position","translation","toArray","scale","getEffectsTransformFromMat4","EffectsTransform","valid","cloneFromMatrix","getTransformFromTranslation","t","getTransformFromDirection","d","d0","fromArray","d1","clone","normalize","a","cross","length","b","dot","c","Math","acos","fromRotationAxis","getEffectsTransformFromDirection","getTransformFromTransDir","getEffectsTransformFromTransDir","getEulerFromQuat","q","quat","x","y","z","w","order","ZYX","setFromQuaternion","getQuatFromEuler","e","setFromEuler","toPlayerColor3","color","scaleTo255","toPlayerColor4","val","intVal","max","min","scaleTo1","floatVal","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_async_to_generator","fn","self","args","arguments","apply","err","undefined","_extends","Object","assign","target","i","source","prototype","hasOwnProperty","call","_instanceof","left","right","Symbol","hasInstance","_array_like_to_array","arr","len","arr2","Array","_unsupported_iterable_to_array","o","minLen","n","toString","slice","constructor","name","from","test","_create_for_of_iterator_helper_loose","allowArrayLike","it","iterator","next","bind","isArray","TypeError","__decorate","decorators","desc","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__generator","thisArg","body","_","label","sent","trys","ops","f","g","verb","v","step","op","pop","push","SuppressedError","suppressed","message","Error","deserializeGeometry","geometryProps","data","attributes","ret","indices","typedArrayFromBinary","index","keys","forEach","attribute","pointer","ctrlMap","i8","Int8Array","u8","Uint8Array","i16","Int16Array","u16","Uint16Array","f32","Float32Array","i32","Int32Array","u32","Uint32Array","binary","spec","ValueType","BINARY","start","byteLength","type","CTRL","BYTES_PER_ELEMENT","_set_prototype_of","p","setPrototypeOf","__proto__","_inherits","subClass","superClass","create","writable","configurable","InterpolationSampler","time","componentCount","cachedIndex","evaluate","pp","i1","t1","t0","validate_interval","seek","linear_scan","forward_scan","giveUpAt","copySampleValue","t1global","mid","intervalChanged","interpolate","dispose","values","stride","offset","result","LinearSampler","size","offset1","offset0","weight1","weight0","DiscreteSampler","QuaternionInner","slerpFlat","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","x1","y1","z1","w1","s","cos","dir","sqrSin","Number","EPSILON","sin","sqrt","atan2","tDir","QuaternionLinearSampler","alpha","end","createAnimationSampler","times","path","_defineProperties","props","descriptor","enumerable","_create_class","Constructor","protoProps","staticProps","PObjectType","PLightType","PTextureType","PMaterialType","PBlendMode","PFaceSideMode","PShadowType","PBRShaderGUID","UnlitShaderGUID","PTransform","fromMatrix4","matrix","setMatrix","fromEffectsTransform","trans","getWorldMatrix","effectsTrans","setValid","toEffectsTransform","getMatrix","fromBaseTransform","setTranslation","set","setRotation","setScale","getTranslation","getPosition","setPosition","getRotation","getScale","compose","res","PCoordinate","origin","xAxis","yAxis","zAxis","fromPTransform","invert","copyFrom","rotationMatrix","toMatrix4","fromRotationMatrix","me","elements","PGlobalState","isWebGL2","shaderShared","runtimeEnv","PLAYER_OPTIONS_ENV_EDITOR","compatibleMode","visBoundingBox","renderMode3D","RenderMode3D","none","renderMode3DUVGridSize","reset","hasRenderMode3D","getInstance","instance","isEditorEnv","isDeviceEnv","isTiny3dMode","isGLTFMode","objectIndex","PObject","isNone","isValid","genName","PEntity","_visible","_transform","deleted","update","render","scene","renderer","onVisibleChanged","visible","coordinate","coord","VFX_ITEM_TYPE_3D","StandardShaderSource","build","features","replace","map","join","ShaderFactory","registerInclude","animationVertGLSL","extensionsFragGLSL","toneMappingFragGLSL","texturesVertGLSL","functionsFragGLSL","shadowFragGLSL","shadowCommonVert","StandardShader","getVertexShaderCode","context","featureList","materialType","material","unlit","pbr","shadowBase","primitiveVert","skyboxFilter","skyboxVert","getFragmentShaderCode","metallicRoughnessFrag","shadowPassFrag","skyboxFrag","genVertexShaderCode","genFragmentShaderCode","environment","fetchPBRShaderCode","vertexShaderCode","fragmentShaderCode","fetchUnlitShaderCode","getPBRPassShaderCode","getShadowPassShaderCode","getSkyBoxShaderCode","getNormalVisShaderCode","getBasicVS","hasNormals","getSimpleFilterShaderCode","getQuadFilterVS","getGaussianBlurShaderCodeV2","params","hasUVs","PShaderManager","funcMap","Map","Helper","shadowFilter","normalVis","simpleFilter","genShaderCode","func","get","_instance","PMaterialBase","ZWrite","ZTest","renderType","RenderType","Opaque","alphaClip","alphaCutoff","renderFace","RenderFace","Front","getShaderFeatures","isAlphaClip","isOpaque","Both","getShaderMacros","macroList","updateUniforms","renderMode","uv","debugUVGridSize","setFloat","inFeatureList","finalFeatureList","getFeatureList","shaderManager","shaderResult","isEditorEvn","getMacroList","inMacroList","finalMacroList","setMaterialStates","Transparent","blending","depthTest","depthMask","blendEquation","glContext","FUNC_ADD","blendFunction","ONE","ONE_MINUS_SRC_ALPHA","setFaceSideStates","isBothSide","culling","isBackSide","cullFace","FRONT","frontFace","CCW","BACK","isTransparent","isFrontSide","Back","PMaterialUnlit","baseColorFactor","effectMaterial","baseColorTexture","getTexture","baseColorTextureTrans","PluginHelper","createUVTransform","getColor","getFloat","stringTags","hasBaseColorTexture","setInt","setMatrix3","getBaseColorTexture","setBaseColorTexture","getBaseColorFactor","setBaseColorFactor","PMaterialPBR","useSpecularAA","metallicFactor","roughnessFactor","normalTextureScale","occlusionTextureStrength","emissiveFactor","emissiveIntensity","metallicRoughnessTexture","metallicRoughnessTextureTrans","normalTexture","normalTextureTrans","occlusionTexture","occlusionTextureTrans","emissiveTexture","emissiveTextureTrans","hasMetallicRoughnessTexture","hasNormalTexture","hasOcclusionTexture","hasEmissiveTexture","hasEmissiveValue","getMetallicRoughnessTexture","setMetallicRoughnessTexture","getNormalTexture","setNormalTexture","getOcclusionTexture","setOcclusionTexture","getEmissiveTexture","setEmissiveTexture","luminance","getEmissiveFactor","setEmissiveFactor","getEmissiveIntensity","setEmissiveIntensity","createPluginMaterial","shader","getInstanceId","materialPBR","materialUnlit","PSkybox","owner","renderable","intensity","reflectionsIntensity","specularImageSize","specularMipCount","priority","isBuilt","skybox","irradianceCoeffs","diffuseImage","specularImage","item","renderOrder","setup","brdfLUT","skyboxMaterial","PMaterialSkyboxFilter","sceneCache","getSceneCache","skyboxMesh","getFilterMesh","updateMaterial","mesh","drawGeometry","geometry","sceneStates","camera","viewMatrix","newProjViewMatrix","getNewProjectionMatrix","fov","multiply","available","currentIntensity","currentReflectionsIntensity","hasDiffuseImage","hasIrradianceCoeffs","setVector2","setTexture","coeffs","aliasName","setVector3","PSkyboxType","PSkyboxCreator","checkCubeMapImage","imageList","lastImage","specularImageLists","image","lastList","loadImage","width","height","getBrdfLutTextureOptions","brdfURL","brdfLutImage","brdfLutOpts","wrapS","CLAMP_TO_EDGE","wrapT","magFilter","LINEAR","minFilter","anisotropic","sourceType","TextureSourceType","generateMipmap","flipY","premultiplyAlpha","createBrdfLutTexture","engine","brdfLutTexture","Texture","createSkyboxOptions","skyboxOptions","createSpecularCubeMap","createDiffuseCubeMap","createSkyboxComponentData","specularCubeData","getSpecularCubeMapData","diffuseCubeData","getDiffuseCubeMapData","textureOptionsList","images","textureOptions","id","componentData","generateGUID","dataType","DataType","SkyboxComponent","component","WebGLHelper","createTextureCubeMipmapFromURL","createTextureCubeMipmapFromBuffer","imageDatas","mipmaps","cubemap","mipmap","imageId","url","TEXTURE_CUBE_MAP","cubemapMipTexConfig","createTextureCubeFromURL","createTextureCubeFromBuffer","cubemapTexConfig","getSkyboxParams","skyboxType","getSpecularImageList","getIrradianceCoeffs","getDiffuseImageList","pow","dataArray","getSpecularImageListAntFarm","getSpecularImageListNFT","levelList","currentLevel","CompositionCache","loadSkybox","meshCache","textureCache","geometryCache","renderPassCache","isDestroyed","brdfLutTexOptions","brdfLutTextureName","deleteTexture","tex","getOrCreateTexture","options","newTex","delete","getOrCreateGeometry","geomJson","bins","cachedGeom","geom","createGeometry","cachedMesh","MeshHelper","createFilterMesh","getShadowBasePass","meshList","fboOptions","getRenderPass","getShadowFilterPass","cachedPass","setMeshes","addMesh","renderPass","createRenderPass","deleteMesh","clear","texture","deleteGeometry","pass","deleteRenderPass","getRenderPasses","resList","getBrdfLutTexture","getSkyboxOptions","loadStaticResources","genSkyboxOptions","newParams","BoxMesh","Material","vertex","vertexShader","fragment","fragmentShader","shared","Mesh","Geometry","modelMatrix","viewProjMatrix","positions","lineColor","aPos","FLOAT","mode","LINES","drawStart","drawCount","TwoStatesSet","now","Set","last","forward","temp","forAddedItem","callbackfn","has","forRemovedItem","forNowItem","ModelPlugin","onCompositionConstructed","composition","sceneParams","storage","cache","onCompositionReset","renderFrame","duration","endBehavior","END_BEHAVIOR_FORWARD","VFXItem","getEngine","addItem","comp","addComponent","ModelPluginComponent","fromData","initial","onCompositionDestroyed","prepareResource","keyList","pluginData","env","preprocessScene","precompile","compositions","gpuCapability","level","pbrShaderCode","unlitShaderCode","pbrShaderData","Shader","glslVersion","GLSLVersion","GLSL3","GLSL1","unlitShaderData","addEffectsObjectData","AbstractPlugin","renderSkybox","autoAdjustScene","enableDynamicSort","lateUpdate","dt","tickCount","cameraObject","cameraTransform","getViewMatrix","cameraCoordinate","cameraDirection","cameraFov","cameraAspect","aspect","sceneAABB","getSceneAABB","newAABB","applyMatrix4","newSize","getSize","newWidth","newHeight","finalHeight","center","getCenter","tan","add","items","getComponent","ModelCameraComponent","content","worldMatrix","parentTransform","IDENTITY","invWorldMatrix","newPosition","transformPoint","setTransform","console","updateSceneCamera","tick","onDestroy","PSceneManager","componentName","lightItemCount","getLightItemCount","maxJointCount","getMaxJointCount","updateDefaultCamera","getOptions","getViewportMatrix","ModelLightComponent","meshComp","ModelMeshComponent","skin","getSkinProps","boneNames","Behaviour","effectsClass","getSceneManager","pluginItem","getItemByName","pluginComp","ModelTreeItem","baseTransform","animationManager","PAnimationManager","getNodes","nodes","getNodeById","nodeId","cacheMap","allNodes","find","node","getNodeByName","getNodeTransform","topTransform","Transform","children","tree","child","ModelTreeComponent","createContent","ItemType","sceneManager","setSceneManager","treeOptions","itemId","idWithSubfix","indexOf","substring","TreeComponent","ModelTreePlugin","CameraGestureType","CameraGestureHandlerImp","cameraCoordiante","startParams","mouseEvent","clientX","clientY","clientWidth","clientHeight","getItem","getCurrentTarget","getCurrentType","onKeyEvent","event","cameraID","translate","warn","effectsTransfrom","lengthSquared","speed","pos","rotate_self","onXYMoveBegin","startGesture","onXYMoving","arg0","moveGesture","onXYMoveEnd","endGesture","onZMoveBegin","onZMoving","onZMoveEnd","onRotateBegin","onRotating","onRotateEnd","onRotatePointBegin","point","rotate_focus","focusPoint","onRotatingPoint","onRotatePointEnd","moveTo","rotateTo","setQuaternion","onFocusPoint","distance","newDistance","targetPoint","lookatDir","newOffset","getCameraTransform","updateCameraTransform","dx","dy","newPos","ndx","ndy","dxAngle","PI","dyAngle","newRotation","fromAxisAngle","Y","tempRotation","rotateMatrix","deltaPosition","subtract","updateMainCamera","cameraOptions","registerPlugin","version","logger","EFFECTS","morphWeights","getHitTestParams","force","computeBoundingBox","bounding","isInteger","behavior","ModelBoundingType","box","PMesh","customHitTest","HitTestType","custom","collect","ray","pointInCanvas","hitTesting","direction","worldMatrixData","RayIntersectsBoxWithRotation","sphere","assignWorldTRS","setFromArray","radius","parentId","parent","updateParentInfo","setVisible","getVisible","removeItem","interaction","JSON","parse","stringify","bbox","RendererComponent","MeshComponent","ModelSkyboxComponent","skyboxData","lightData","PLight","LightComponent","cameraData","getWidth","getHeight","PCamera","setQuat","near","nearPlane","far","farPlane","CameraComponent","AnimationComponent","elapsedTime","animation","clips","sampleAnimation","animationClips","clipData","clipObj","ModelAnimationClip","setFromAnimationClip","path2Node","vfxItem","life","positionCurves","curve","keyFrames","getValue","getTargetItem","rotationCurves","scaleCurves","floatCurves","className","properties","property","split","setProperty","clip","rootItem","nameList","findTag","AnimationClip","obj","current","propName","matrixData","local2World","world2Local","newRay","applyMatrix","boxCenter","boxHalfSize","boxMin","boxMax","intersetPoint","intersectBox","insersetPointInWorld","RayBoxTesting","ro","rd","bmin","bmax","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","diff","edge1","edge2","normal","RayTriangleTesting","backfaceCulling","subtractVectors","crossVectors","DdN","sign","DdQxE2","DdE1xQ","QdN","createTexture2D","isBaseColor","tiny3dMode","blob","urlCreator","imageUrl","imageObj","imageData","Blob","mimeType","window","URL","webkitURL","createObjectURL","Image","src","onload","LINEAR_MIPMAP_LINEAR","isPow2","NEAREST_MIPMAP_NEAREST","LINEAR_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","REPEAT","revokeObjectURL","onerror","createTextureList","textures","outTextures","all","getTextureCubeData","cubeData","WebHelper","loadImageFromImageData","getTextureCubeMipmapData","cubeImage","getDefaultTextureFactory","loadSource","cubeImages","maps","cube","level0Size","mipCount","createTextureFromImage","meshData","fboOpts","RenderPass","attachments","colorAttachments","depthStencilAttachment","depthAttachment","clearAction","clearDepth","clearStencil","clearColor","colorAction","TextureLoadAction","depthAction","meshes","viewport","geometries","DestroyOptions","destroy","RenderPassDestroyAttachmentType","colorAttachment","semantics","isTransparentMesh","isSupportFloatTexture","capability","detail","floatTexture","isSupportHalfFloatTexture","halfFloatTexture","globalState","getPlaneGeometry","effectsMaterial","fromIdentity","getPlaneVertexArray","aUV","dataSource","aNormal","halfSize","createLightOptions","light","lightType","range","innerConeAngle","outerConeAngle","createCameraOptions","perspective","znear","zfar","yfov","clipMode","toPluginColor3","toPluginColor4","stName","rotateName","stValue","getVector4","rotateValue","cosTheta","sinTheta","transpose","clamp","minv","maxv","round","focusOnPoint","cameraPosition","YRotationAngle","camPos","targetPos","deltaPos","rotationMat","newCamPos","lookAt","effectsTransform","deviceEnv","jsonScene","materials","dataMap","preprocessTextureOptions","components","textureInfo","texId","texOptions","TEXTURE_2D","newOptions","setupItem3DOptions","compIndexSet","compositionId","refCompositionProps","compIndex","sceneComp","jsonSceneData","meshItem","primitives","prim","primId","riGeometry","studioPrim","MaterialType","studioMat","getTextureObj","inverseBindMatrices","studioSkin","jsonItem","studioItem","jsonAnimations","animations","studioAnimations","jsonAnim","studioAnim","tracks","jsonTrack","j","inputArray","input","outputArray","output","studioTrack","studioSkybox","studioOptions","CheckerHelper","geomOptions","attrib","attribData","getAttributeName","getIndexArray","array","WebGLRenderingContext","startsWith","getImageFileName","ext","begin","lastIndexOf","substr","getCurrnetTimeStr","date","Date","timeStr","toLocaleString","ms","getMilliseconds","padStart","saveFileForURL","filename","document","createElement","setAttribute","href","click","createPlayer","manualRender","canvas","Player","renderFramework","renderOptions","willCaptureImage","sleep","setTimeout","loadImageFromGLTFImage","getCanvasArrayBuffer","toBlob","arrayBuffer","getImageArrayBuffer","cvs","getContext","drawImage","getCanvasImageData","ctx","getImageData","flipImageData","flipped","putImageData","globalCompositeOperation","getWebGLCanvasImageBuffer","pixels","readPixels","RGBA","UNSIGNED_BYTE","AttributeArray","typeSize","compCount","signed","compressed","compressScale","inAttrib","inArray","getData","getLength","GeometryBoxProxy","bindMatrices","abs","getDrawCount","getIndexData","positionAttrib","positionArray","getAttributeData","jointAttrib","weightAttrib","jointArray","weightArray","joint","weight","getBoundingBox","makeEmpty","skinMat","hasAnim","indexSet","posData","posVec","jointData","weightData","setZero","findError","bindMat","addScaledMatrix","resVec","transformVector4","expandByPoint","HitTestingProxy","doubleSided","hasAnimation","skinMatrix","getHitPoint","rayOrigin","rayDirection","mint","p0","p1","p2","q0","q1","q2","i0","i2","r0","r1","r2","vec3","vec4","checkNumber","checkNumberUndef","checkNumber01","checkNumber01Undef","checkPositive","checkNonnegative","checkNonnegativeUndef","checkBoolean","checkBooleanUndef","checkString","checkStringUndef","checkFloat32Array","checkFloat32ArrayUndef","checkParent","checkTexCoord","checkVec2","every","checkVec2Undef","checkVec3","checkNonnegative3","checkVec4","checkNonnegative4","checkNumberArray","checkTexture","checkTextureUndef","checkTexTransform","checkTexTransformUndef","checkMatBlending","MaterialBlending","opaque","masked","translucent","additive","checkMatSide","SideMode","DOUBLE","checkAnimPath","checkAnimInterp","assertGeometry","getDrawStart","assertGeometryBuffer","attribArray","createAttributeArray","dataAttrib","assertModelSkinOptions","joints","skeleton","determinant","assertMatOptions","baseColorTextureTransform","baseColorTextureCoordinate","side","alphaCutOff","metallicRoughnessTextureTransform","metallicRoughnessTextureCoordinate","normalTextureTransform","normalTextureCoordinate","occlusionTextureTransform","occlusionTextureCoordinate","emissiveTextureTransform","emissiveTextureCoordinate","assertPrimOptions","assertModelMeshOptions","morphList","morph","PMorph","morph0","morph1","equals","hide","assertModelCameraOptions","assertModelLightOptions","assertModelSkyboxOptions","pow2","checkModelAnimTrackOptions","interpolation","assertModelAnimOptions","assertTreeOptions","anim","object","simpleObject","prop","Renderer","Float16ArrayWrapper","number","startIndex","toHalf","bytes","floatView","int32View","buffer","bits","m","TextureDataMode","PSkin","jointItem","animationMatrices","textureDataMode","rootBoneItem","rootBoneName","getJointItems","getTextureDataMode","matList","matrixCount","updateSkinMatrices","mat4","computeMeshAnimMatrices","matrixList","normalMatList","inverseWorldMatrix","tempMatrix","localMatrix","multiplyMatrices","normalMat","updateParentItem","parentItem","getJointCount","isTextureDataMode","jointCount","uniformsRequiredForMostFeatures","availableJointUniforms","maxVertexUniforms","uniformsRequiredPerJoint","floor","name2Item","genNodeName","jointItems","boneName","genNodeNameDFS","morphWeightsLength","morphWeightsArray","hasPositionMorph","hasNormalMorph","hasTangentMorph","positionCount","getAttributeMorphCount","positionNameList","normalCount","normalNameList","tangentCount","tangentNameList","countList","count","fill","initWeights","weights","updateWeights","hasMorph","getMorphWeightsArray","attributeNameList","PAnimInterpType","PAnimPathType","PAnimTrack","interp","timeArray","sampler","getInterpInfo","getPathInfo","treeItem","treeComponent","genParentId","queryMesh","updateMorphWeights","getEndTime","nodeIndex","PAnimTexture","isHalfFloat","HALF_FLOAT","format","NEAREST","updateSource","PAnimation","inTrack","track","newTime","ownerItem","delay","animOpts","createAnimation","animationOpts","deltaSeconds","newDeltaSeconds","itemTime","getTreeItem","deg2rad","viewportMatrix","CameraClipMode","landscape","projectionMatrix","reverse","portrait","premultiply","computeViewAABB","tanTheta","yFarCoord","yNearCoord","xFarCoord","xNearCoord","isReversed","getEye","setEye","PCameraManager","winWidth","winHeight","cameraList","defaultCamera","insert","insertCamera","remove","findResult","findIndex","splice","getCameraList","getDefaultCamera","getCameraCount","getActiveCamera","getAspect","ambient","padding","LightType","spot","directional","isDirectional","isPoint","isSpot","isAmbient","getWorldPosition","getWorldDirection","transformNormal","PLightManager","lightList","insertItem","inLight","insertLight","lightCount","_assert_this_initialized","ReferenceError","parentIndex","subMeshes","boundingBox","isDisposed","proxy","EffectsMeshProxy","getParentIndex","parentItemId","rootBone","getSkinObj","getMorphObj","isHide","getGeometry","subMesh","PSubMesh","getItemBoundingBox","maxLightCount","boundingBoxMesh","getEffectsGeometry","getEffectsMaterial","weightsArray","updatedArray","normalMatrix","minPos","maxPos","viewProjectionMatrix","newOrigin","newDirection","boxt","primt","subbox","union","inBounding","hs","minVector","maxVector","halfRadius","getParentId","hasSkin","effectsPriority","isCompressed","setGeometry","setMaterial","setHide","jointMatrixList","jointNormalMatList","half_float","jointMatrixTexture","jointNormalMatTexture","hasWeights","hasJoints","primitiveMacroList","materialMacroList","macro","enableMacro","pbrPass","hasTangents","hasUVCoords","outputDefine","getRenderMode3DDefine","nomralMatrix","updateUniformsByAnimation","updateUniformsByScene","animMatrices","isEmpty","basecolor","metallic","roughness","ao","emissive","jointMatrixNumbers","jointNormalMatNumbers","setMatrixNumberArray","setFloats","isUnlitMaterial","ZERO","PGeometry","getWorldBoundingBox","attributeNames","getAttributeNames","hasAttribute","geomExt","indexArray","setDrawCount","hasPositions","hasColors","itemData","parentComponent","morphObj","hasMorphTarget","getParentNode","parentTree","getMaterials","getMaterialCount","getSkinOpts","skinObj","compName","itemList","lightManager","cameraManager","parentId2Mesh","lastTickSecond","sceneAABBCache","renderedMeshSet","opts","clean","initGlobalState","capbility","newTransform","deltaTime","activeCamera","winSize","sceneRadius","dynamicSortMeshes","states","meshComponents","priorityList","enabled","sort","atransparent","btransparent","aposition","bposition","anewPos","bnewPos","prePriority","sceneBox","getWorldTransform","meshBox","printDebugInfo","cam","getRenderer","shaderLightCount","JSONConverter","keepIBLData","treeInfo","TreeInfo","downloader","Downloader","processScene","sceneData","sceneJSON","oldScene","oldBinUrls","binFiles","bin","newScene","isObject","loadJSON","getStandardJSON","loadBins","playerVersion","web","native","shaders","setImage","setComponent","setItem","setComposition","newImages","newTextures","jobs","loadedMipmaps","newMipmaps","loadMipmapImage","img","sceneImage","dataPath","keepImageSource","sourceFrom","newComponents","createSkyboxComponent","createLightComponent","treeComp","createItemsFromTreeComponent","createMeshComponent","getAllTreeNodeList","downloadJSON","status","responseText","downloadBinary","skyboxComponent","meshOptions","geometryPropsList","materialDatas","geomProps","getMaterialData","oldIndices","newIndices","geometryData","getGeometryDataFromPropsList","meshComponent","getTreeItemByNodeId","treeNodeList","getTreeNodeListByNodeId","setupBoneData","treeData","VFXItemData","renderLevel","pn","pluginName","getTransformData","childItem","subIndex","createAnimationComponent","lightOptions","lightComponent","animationComponent","totalAnimationTime","points","controlPoints","lineValue","p3","slerpQuaternions","BezierKeyframeType","LINE","getTreeNode","getNodePath","BEZIER_CURVE_QUAT","BEZIER_CURVE","lerpVectors","BEZIER_CURVE_PATH","floats","colors","divide","getTextureData","newMaterial","macros","ints","vector4s","setupMaterial","oldMat","newMat","texIndex","texTransform","texProperty","eulerHint","bindMatrixArray","id2Node","currentItem","nodeList","tree2NodeList","nodeList2Tree","nodeId2Node","node2Path","setNodePath","getTreeNodeListByTreeId","treeId","getGeometryDataFromOptions","vertexCount","verticesType","VertexFormatType","Float32","verticesNormalize","uvsType","uvsNormalize","normalsType","normalsNormalize","modelData","vertices","uvs","normals","glType2VertexFormatType","verticesOffset","getOffset","uvsOffset","normalsOffset","indicesType","IndexFormatType","UInt16","UInt32","vertexData","channels","semantic","VertexBufferSemantic","Position","dimension","Uv","Normal","GeometryType","TRIANGLES","indexFormat","indexOffset","encodeVertexData","geomPropsList","totalCount","indexCount","geom0","geom1","isSame","array1","array2","mergeTypedArray","getVertexCount","createGeometryData","formatType","Int8","UInt8","Int16","totalByteLength","bufferOffset","vertexChannels","vertexBufferSemanticMap","vertexChannel","subBuffer","byteOffset","None","toBase64String","totalSize","ArrayBuffer","uint16View","uint8View","binaryString","String","fromCharCode","btoa","aUV2","aTangent","aColor","aJoints","aWeights","a_Position","a_UV","a_UV1","a_UV2","a_Normal","a_Tangent","a_Color","a_Joints","a_Joint1","a_Weights","a_Weight1","a_Target_Position0","a_Target_Position1","a_Target_Position2","a_Target_Position3","a_Target_Position4","a_Target_Position5","a_Target_Position6","a_Target_Position7","a_Target_Normal0","a_Target_Normal1","a_Target_Normal2","a_Target_Normal3","a_Target_Tangent0","a_Target_Tangent1","a_Target_Tangent2","a_Target_Tangent3","getDefaultEffectsGLTFLoader","defaultGLTFLoader","LoaderImpl","setDefaultEffectsGLTFLoader","loader","gltfSkins","gltfMeshs","gltfLights","gltfCameras","gltfImages","gltfTextures","gltfMaterials","gltfAnimations","gltfImageBasedLights","timelineAssetId","imageElements","EndBehavior","restart","timelineAsset","sceneBindings","loadScene","gltfResource","gltfScene","sceneOptions","loaderOptions","gltf","resource","gltfImage","processGLTFResource","scenes","skins","lights","cameras","imageBasedLights","materialData","meshesComponentData","checkMeshComponentData","camerasComponentData","lightsComponentData","animationsComponentData","effects","playAllAnimation","playAnimation","animationClipData","tryAddSkybox","skyboxVis","vfxItemData","getLoadResult","baseColorId","emissiveIdSet","texData","newId","newTexData","textureDataMap","textureIdMap","addTextures","baseColorIdSet","processMaterialData","processMaterialTexture","processCameraComponentData","processLightComponentData","cubeTextures","ibl","imageBaseLightData","diffuseTexture","processComponentData","processSkyboxComponentData","CameraType","processTextureOptions","textureName","itemIds","shapes","plugins","miscs","TimelineAsset","computeSceneAABB","getRemarkString","addLight","addCamera","skyboxInfo","ignoreSkybox","freeze","typeName","typ","NFT","FARM","geometryDataMap","componentDataMap","parentTransformMap","fromVector3","bounds","getPlayAnimationIndex","isPlayAllAnimation","animationInfo","animationIndex","isPlayAnimation","remark","getCompositionDuration","getItemDuration","getEndBehavior","getSkyboxType","isSkyboxVis","isEnvironmentTest","includes","processLight","fromGLTF","l","scaleColorVal","processCamera","processMaterial","strength","createTreeOptions","treeNode","rootNodes","root","createAnimations","channel","newAnim","primitive","hasSkinAnim","GeometryProxy","createMaterial","MaterialProxy","createTextureCube","imgList","createSkybox","irradianceCoefficients","inSpecularImages","specularImages","outImg","newIrradianceCoeffs","createDefaultSkybox","scaleColorVec","vec","getPBRShaderProperties","getUnlitShaderProperties","getDefaultPBRMaterialData","getDefaultUnlitMaterialData","gltfGeometry","hasSkinAnimation","_getBufferAttrib","itemSize","normalized","texCoordAttrib","getTexCoord","getTargetPosition","getAttribute","getTargetNormal","getTargetTangent","hasPosition","hasNormal","normalAttrib","hasTangent","tangentAttrib","texCoordList","attribName","jointAttribute","weightAttribute","getNormal","getTangent","getJoints","getWeights","hasTexCoord","texCoordCount","hasJointAttribute","hasWeightAttribute","texCoords","gltfMaterial","getTextureObject","texInfo","getTextureCoord","texCoord","getTextureTransform","extensions","KHR_texture_transform","getSpecularAA","extras","isUnlit","GLTFHelper","alphaMode","enableShadow","baseColorTextureObj","baseColorTextureCoord","baseColorTextureTransfrom","metallicRoughnessTextureObj","metallicRoughnessTextureCoord","metallicRoughnessTextureTransfrom","metalicFactor","normalTextureObj","normalTextureCoord","normalTextureTransfrom","occlusionTextureObj","occlusionTextureCoord","occlusionTextureTransfrom","emissiveTextureObj","emissiveTextureCoord","emissiveTextureTransfrom","hasEmissive","factor","KHR_materials_unlit","createBoxFromGLTFBound","bound"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loader.mjs","sources":["../src/runtime/math.ts","../src/gltf/loader-helper.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_async_to_generator.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_extends.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_instanceof.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_array_like_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js","../../../node_modules/.pnpm/tslib@2.6.2/node_modules/tslib/tslib.es6.mjs","../../../packages/effects-helper/dist/serialize/geometry.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_inherits.js","../src/runtime/anim-sampler.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_create_class.js","../src/runtime/common.ts","../src/runtime/object.ts","../src/plugin/const.ts","../src/runtime/shader-libs/standard-shader-source.ts","../src/runtime/shader-libs/standard-shader.ts","../src/utility/shader-helper.ts","../src/runtime/shader.ts","../src/runtime/material.ts","../src/runtime/skybox.ts","../src/runtime/cache.ts","../src/utility/ri-helper.ts","../src/utility/ts-helper.ts","../src/plugin/model-plugin.ts","../src/plugin/model-tree-item.ts","../src/plugin/model-tree-plugin.ts","../src/gesture/protocol.ts","../src/gesture/index.ts","../src/index.ts","../src/plugin/model-item.ts","../src/utility/hit-test-helper.ts","../src/utility/plugin-helper.ts","../src/runtime/animation.ts","../src/runtime/camera.ts","../src/runtime/light.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_assert_this_initialized.js","../src/runtime/mesh.ts","../src/runtime/scene.ts","../src/gltf/json-converter.ts","../src/gltf/loader-impl.ts"],"sourcesContent":["import { math } from '@galacean/effects';\n\nexport const {\n Vector2, Vector3, Vector4, Matrix3, Matrix4, Color, Euler, EulerOrder, Quaternion,\n Box3, Sphere, Ray, DEG2RAD,\n} = math;\n\nexport type Ray = math.Ray;\nexport type Euler = math.Euler;\nexport type Vector2 = math.Vector2;\nexport type Vector3 = math.Vector3;\nexport type Vector4 = math.Vector4;\nexport type Matrix3 = math.Matrix3;\nexport type Matrix4 = math.Matrix4;\nexport type Color = math.Color;\nexport type Quaternion = math.Quaternion;\n","import type { spec } from '@galacean/effects';\nimport { Transform as EffectsTransform } from '@galacean/effects';\nimport type { BaseTransform as Transform } from '../index';\nimport { Vector3, Matrix4, Quaternion, Euler, EulerOrder } from '../runtime/math';\n\nexport class LoaderHelper {\n static getTransformFromMat4 (mat: Matrix4): Transform {\n const transform = mat.getTransform();\n const euler = transform.rotation.toEuler(new Euler());\n\n return {\n position: transform.translation.toArray(),\n rotation: euler.toArray(),\n scale: transform.scale.toArray(),\n };\n }\n\n static getEffectsTransformFromMat4 (mat: Matrix4): Transform {\n const transform = new EffectsTransform({\n valid: true,\n });\n\n transform.cloneFromMatrix(mat);\n\n return {\n position: transform.position.toArray(),\n rotation: transform.rotation.toArray(),\n scale: transform.scale.toArray(),\n };\n }\n\n static getTransformFromTranslation (t: Vector3): Transform {\n return {\n position: t.toArray(),\n };\n }\n\n static getTransformFromDirection (d: Vector3): Transform {\n const d0 = Vector3.fromArray([1, 0, 0]);\n const d1 = d.clone().normalize();\n const a = d0.clone().cross(d1);\n\n if (a.length() < 0.01) { return {}; }\n\n a.normalize();\n const b = d1.dot(d0);\n const c = Math.acos(b);\n\n const mat = Matrix4.fromRotationAxis(a, c);\n\n return LoaderHelper.getTransformFromMat4(mat);\n }\n\n static getEffectsTransformFromDirection (d: Vector3): Transform {\n const d0 = Vector3.fromArray([0, 0, 1]);\n const d1 = d.clone().normalize();\n const a = d0.clone().cross(d1);\n\n if (a.length() < 0.01) { return {}; }\n\n a.normalize();\n const b = d1.dot(d0);\n const c = Math.acos(b);\n\n const mat = Matrix4.fromRotationAxis(a, c);\n\n return LoaderHelper.getEffectsTransformFromMat4(mat);\n }\n\n static getTransformFromTransDir (t: Vector3, d: Vector3): Transform {\n const transform = LoaderHelper.getTransformFromDirection(d);\n\n transform.position = t.toArray();\n\n return transform;\n }\n\n static getEffectsTransformFromTransDir (t: Vector3, d: Vector3): Transform {\n const transform = LoaderHelper.getEffectsTransformFromDirection(d);\n\n transform.position = t.toArray();\n\n return transform;\n }\n\n static getEulerFromQuat (q: Quaternion): [number, number, number] {\n const euler = new Euler();\n const quat = new Quaternion(q.x, q.y, q.z, q.w);\n\n euler.order = EulerOrder.ZYX;\n euler.setFromQuaternion(quat);\n\n return [euler.x, euler.y, euler.z];\n }\n\n static getQuatFromEuler (e: Euler): [number, number, number, number] {\n const quat = new Quaternion();\n\n quat.setFromEuler(e);\n\n return [quat.x, quat.y, quat.z, quat.w];\n }\n\n static toPlayerColor3 (color: spec.vec3): spec.vec3 {\n // [0, 1] => [0, 255]\n return [\n LoaderHelper.scaleTo255(color[0]),\n LoaderHelper.scaleTo255(color[1]),\n LoaderHelper.scaleTo255(color[2]),\n ];\n }\n\n static toPlayerColor4 (color: spec.vec4): spec.vec4 {\n // [0, 1] => [0, 255]\n return [\n LoaderHelper.scaleTo255(color[0]),\n LoaderHelper.scaleTo255(color[1]),\n LoaderHelper.scaleTo255(color[2]),\n LoaderHelper.scaleTo255(color[3]),\n ];\n }\n\n static scaleTo255 (val: number): number {\n const intVal = val * 255;\n\n return Math.max(0, Math.min(intVal, 255));\n }\n\n static scaleTo1 (val: number): number {\n const floatVal = val / 255.0;\n\n return Math.max(0.0, Math.min(floatVal, 1.0));\n }\n}\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) resolve(value);\n else Promise.resolve(value).then(_next, _throw);\n}\nexport function _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\nexport { _async_to_generator as _ };\n","export function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","export function _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else return left instanceof right;\n}\nexport { _instanceof as _ };\n","export function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\nexport { _array_like_to_array as _ };\n","import { _array_like_to_array } from \"./_array_like_to_array.js\";\n\nexport function _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n\n var n = Object.prototype.toString.call(o).slice(8, -1);\n\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nexport { _unsupported_iterable_to_array as _ };\n","import { _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nexport function _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (it) return (it = it.call(o)).next.bind(it);\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n\n var i = 0;\n\n return function() {\n if (i >= o.length) return { done: true };\n\n return { done: false, value: o[i++] };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _create_for_of_iterator_helper_loose as _ };\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 { spec } from '@galacean/effects';\nimport { concatBuffers, getBinaryType } from './utils';\n/**\n * geometry 序列化\n * @param geometries\n */\nexport function serializeGeometries(geometries) {\n const buffers = [];\n const bufferInfo = new Map();\n let offset = 0;\n geometries.forEach(options => {\n addBuffer(options.indices?.data);\n Object.keys(options.attributes).forEach(key => {\n const { data } = options.attributes[key];\n addBuffer(data);\n });\n });\n const resultBuffer = concatBuffers(buffers, bufferInfo, offset);\n const mappedGeometries = geometries.map(props => {\n const geometryProps = { ...props };\n if (geometryProps.indices) {\n geometryProps.indices = replaceAttribute(geometryProps.indices);\n }\n geometryProps.attributes = {};\n Object.keys(props.attributes).forEach(name => {\n const attribute = props.attributes[name];\n geometryProps.attributes[name] = replaceAttribute(attribute);\n });\n return geometryProps;\n });\n return {\n data: resultBuffer,\n geometries: mappedGeometries,\n version: '1.0',\n };\n function addBuffer(buffer) {\n if (buffer && !buffers.includes(buffer)) {\n buffers.push(buffer);\n bufferInfo.set(buffer, [0, offset, buffer.byteLength, getBinaryType(buffer)]);\n offset += buffer.byteLength;\n // padding 4bytes for f32\n offset = Math.ceil(offset / 4) * 4;\n }\n }\n function replaceAttribute(attr) {\n let source;\n if (attr.data) {\n const info = bufferInfo.get(attr.data);\n if (info) {\n source = { data: [spec.ValueType.BINARY, info] };\n }\n }\n return { ...attr, ...source };\n }\n}\n/**\n * geometry 反序列化\n * @param geometryProps\n * @param data\n */\nexport function deserializeGeometry(geometryProps, data) {\n const { attributes } = geometryProps;\n const ret = { ...geometryProps };\n if (ret.indices) {\n ret.indices = { ...ret.indices };\n if (ret.indices.data) {\n // @ts-expect-error\n ret.indices.data = typedArrayFromBinary(data, geometryProps.indices?.data);\n }\n // @ts-expect-error\n }\n else if (ret.index) {\n // FIXME: 兼容编辑器导出的旧版数据\n // @ts-expect-error\n ret.indices = { ...ret.index };\n // @ts-expect-error\n if (ret.indices.data) {\n // @ts-expect-error\n ret.indices.data = typedArrayFromBinary(data, geometryProps.index?.data);\n }\n }\n Object.keys(attributes).forEach(name => {\n const attribute = attributes[name];\n const { data: pointer } = attribute;\n ret.attributes[name] = { ...attribute };\n if (pointer) {\n ret.attributes[name].data = typedArrayFromBinary(data, pointer);\n }\n });\n return ret;\n}\nconst ctrlMap = {\n i8: Int8Array,\n u8: Uint8Array,\n i16: Int16Array,\n u16: Uint16Array,\n f32: Float32Array,\n i32: Int32Array,\n u32: Uint32Array,\n};\n/**\n * 重构 TypedArray,返回的 TypedArray 如果修改,会反映到原始的 ArrayBuffer 中\n * @param binaries\n * @param pointer\n */\nexport function typedArrayFromBinary(binary, pointer) {\n if (pointer.length != 2 || pointer[0] !== spec.ValueType.BINARY || !(pointer[1] instanceof Array)) {\n // 不是BinaryPointer,可能已经创建,直接返回\n return pointer;\n }\n const [index, start, byteLength, type] = pointer[1];\n if (!type) {\n return binary[index].slice(start, byteLength);\n }\n const CTRL = ctrlMap[type] || Uint8Array;\n return new CTRL(binary[index], start, byteLength / CTRL.BYTES_PER_ELEMENT);\n}\n","export function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _set_prototype_of } from \"./_set_prototype_of.js\";\n\nexport function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","/**\n * 抽象插值采样类\n */\nexport abstract class InterpolationSampler {\n protected cachedIndex = 0;\n\n constructor (\n protected time: Float32Array,\n protected data: Float32Array,\n protected componentCount: number,\n ) { }\n\n /**\n * 计算当前 t 时刻的插值\n * @param t - 当前时间\n * @returns 插值结果\n */\n evaluate (t: number) {\n const pp = this.time;\n let i1 = this.cachedIndex;\n let t1 = pp[i1];\n let t0 = pp[i1 - 1];\n\n validate_interval: {\n seek: {\n let right: number;\n\n linear_scan: {\n //- See http://jsperf.com/comparison-to-undefined/3\n //- slower code:\n //-\n //- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n forward_scan: if (!(t < t1)) {\n for (let giveUpAt = i1 + 2; ;) {\n if (t1 === undefined) {\n if (t < t0) { break forward_scan; }\n\n // after end\n i1 = pp.length;\n this.cachedIndex = i1;\n\n return this.copySampleValue(i1 - 1);\n }\n\n if (i1 === giveUpAt) { break; } // this loop\n\n t0 = t1;\n t1 = pp[++i1];\n\n if (t < t1) {\n // we have arrived at the sought interval\n break seek;\n }\n }\n\n // prepare binary search on the right side of the index\n right = pp.length;\n\n break linear_scan;\n }\n\n //- slower code:\n //-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n if (!(t >= t0)) {\n // looping?\n const t1global = pp[1];\n\n if (t < t1global) {\n i1 = 2; // + 1, using the scan for the details\n t0 = t1global;\n }\n\n // linear reverse scan\n for (let giveUpAt = i1 - 2; ;) {\n if (t0 === undefined) {\n // before start\n this.cachedIndex = 0;\n\n return this.copySampleValue(0);\n }\n\n if (i1 === giveUpAt) { break; } // this loop\n\n t1 = t0;\n t0 = pp[--i1 - 1];\n\n if (t >= t0) {\n // we have arrived at the sought interval\n break seek;\n }\n }\n\n // prepare binary search on the left side of the index\n right = i1;\n i1 = 0;\n\n break linear_scan;\n }\n\n // the interval is valid\n break validate_interval;\n } // linear scan\n\n // binary search\n while (i1 < right) {\n const mid = (i1 + right) >>> 1;\n\n if (t < pp[mid]) {\n right = mid;\n } else {\n i1 = mid + 1;\n }\n }\n\n t1 = pp[i1];\n t0 = pp[i1 - 1];\n\n // check boundary cases, again\n if (t0 === undefined) {\n this.cachedIndex = 0;\n\n return this.copySampleValue(0);\n }\n\n if (t1 === undefined) {\n i1 = pp.length;\n this.cachedIndex = i1;\n\n return this.copySampleValue(i1 - 1);\n }\n } // seek\n\n this.cachedIndex = i1;\n\n this.intervalChanged(i1, t0, t1);\n } // validate_interval\n\n return this.interpolate(i1, t0, t, t1);\n }\n\n /**\n * 销毁\n */\n dispose () {\n // @ts-expect-error\n this.time = undefined;\n // @ts-expect-error\n this.data = undefined;\n }\n\n protected copySampleValue (index: number) {\n // copies a sample value to the result buffer\n const values = this.data;\n const stride = this.componentCount;\n const offset = index * stride;\n\n const result = new Float32Array(stride);\n\n for (let i = 0; i !== stride; ++i) {\n result[i] = values[offset + i];\n }\n\n return result;\n }\n\n protected abstract intervalChanged (i1: number, t0: number, t1: number): void;\n\n protected abstract interpolate (i1: number, t0: number, t: number, t1: number): Float32Array;\n}\n\nclass LinearSampler extends InterpolationSampler {\n\n constructor (time: Float32Array, data: Float32Array, size: number) {\n super(time, data, size);\n }\n\n protected intervalChanged (i1: number, t0: number, t1: number): void {\n }\n\n protected interpolate (i1: number, t0: number, t: number, t1: number): Float32Array {\n const values = this.data;\n const stride = this.componentCount ?? 1;\n const offset1 = i1 * stride;\n const offset0 = offset1 - stride;\n\n const weight1 = (t - t0) / (t1 - t0);\n const weight0 = 1 - weight1;\n\n const result = new Float32Array(stride);\n\n for (let i = 0; i !== stride; ++i) {\n result[i] =\n values[offset0 + i] * weight0 +\n values[offset1 + i] * weight1;\n }\n\n return result;\n }\n}\n\nclass DiscreteSampler extends InterpolationSampler {\n\n constructor (time: Float32Array, data: Float32Array, size: number) {\n super(time, data, size);\n }\n\n protected intervalChanged (i1: number, t0: number, t1: number): void {\n }\n\n protected interpolate (i1: number, t0: number, t: number, t1: number): Float32Array {\n const values = this.data;\n const stride = this.componentCount ?? 1;\n const offset = (i1 - 1) * stride;\n\n const result = new Float32Array(stride);\n\n for (let i = 0; i !== stride; ++i) {\n result[i] = values[offset + i];\n }\n\n return result;\n }\n}\n\nclass QuaternionInner {\n\n static slerpFlat (dst: any, dstOffset: number, src0: any, srcOffset0: number, src1: any, srcOffset1: number, t: number) {\n // fuzz-free, array-based Quaternion SLERP operation\n let x0 = src0[srcOffset0 + 0];\n let y0 = src0[srcOffset0 + 1];\n let z0 = src0[srcOffset0 + 2];\n let w0 = src0[srcOffset0 + 3];\n\n const x1 = src1[srcOffset1 + 0];\n const y1 = src1[srcOffset1 + 1];\n const z1 = src1[srcOffset1 + 2];\n const w1 = src1[srcOffset1 + 3];\n\n if (t === 0) {\n dst[dstOffset + 0] = x0;\n dst[dstOffset + 1] = y0;\n dst[dstOffset + 2] = z0;\n dst[dstOffset + 3] = w0;\n\n return;\n }\n\n if (t === 1) {\n dst[dstOffset + 0] = x1;\n dst[dstOffset + 1] = y1;\n dst[dstOffset + 2] = z1;\n dst[dstOffset + 3] = w1;\n\n return;\n }\n\n if (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) {\n let s = 1 - t;\n const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1;\n const dir = (cos >= 0 ? 1 : - 1);\n const sqrSin = 1 - cos * cos;\n\n // Skip the Slerp for tiny steps to avoid numeric problems:\n if (sqrSin > Number.EPSILON) {\n const sin = Math.sqrt(sqrSin);\n const len = Math.atan2(sin, cos * dir);\n\n s = Math.sin(s * len) / sin;\n t = Math.sin(t * len) / sin;\n }\n\n const tDir = t * dir;\n\n x0 = x0 * s + x1 * tDir;\n y0 = y0 * s + y1 * tDir;\n z0 = z0 * s + z1 * tDir;\n w0 = w0 * s + w1 * tDir;\n\n // Normalize in case we just did a lerp:\n if (s === 1 - t) {\n const f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0);\n\n x0 *= f;\n y0 *= f;\n z0 *= f;\n w0 *= f;\n }\n }\n\n dst[dstOffset] = x0;\n dst[dstOffset + 1] = y0;\n dst[dstOffset + 2] = z0;\n dst[dstOffset + 3] = w0;\n }\n}\n\nclass QuaternionLinearSampler extends InterpolationSampler {\n\n constructor (time: Float32Array, data: Float32Array, size: number) {\n super(time, data, size);\n }\n\n protected intervalChanged (i1: number, t0: number, t1: number): void {\n }\n\n protected interpolate (i1: number, t0: number, t: number, t1: number): Float32Array {\n const values = this.data;\n const stride = this.componentCount ?? 1;\n const alpha = (t - t0) / (t1 - t0);\n let offset = i1 * stride;\n const result = new Float32Array(stride);\n\n for (let end = offset + stride; offset !== end; offset += 4) {\n QuaternionInner.slerpFlat(result, 0, values, offset - stride, values, offset, alpha);\n }\n\n return result;\n }\n\n}\n\n/**\n * 创建动画采样器,支持线性和跳变两种模式,类别上支持平移、旋转和缩放\n * @param type - 动画类型,线性和跳变\n * @param times - 时间点数组\n * @param data - 关键帧数组\n * @param size - 数据分量\n * @param path - 动画类别,平移、旋转和缩放\n * @returns 动画采样器\n */\nexport function createAnimationSampler (type: string, times: Float32Array, data: Float32Array, size: number, path?: string): InterpolationSampler {\n switch (type) {\n case 'LINEAR':\n if (path === 'rotation') {\n return new QuaternionLinearSampler(times, data, size);\n } else {\n return new LinearSampler(times, data, size);\n }\n case 'STEP':\n return new DiscreteSampler(times, data, size);\n case 'CUBICSPLINE':\n // FIXME: support cubic spline\n return new LinearSampler(times, data, size);\n default:\n return new LinearSampler(times, data, size);\n }\n}\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n\n if (\"value\" in descriptor) descriptor.writable = true;\n\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nexport function _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n\n return Constructor;\n}\nexport { _create_class as _ };\n","import { Transform as EffectsTransform, PLAYER_OPTIONS_ENV_EDITOR, spec } from '@galacean/effects';\nimport { Quaternion, Euler, Vector3, Matrix4, EulerOrder } from './math';\nimport type { BaseTransform } from '../index';\n\n/**\n * Model 插件中的对象类型\n */\nexport enum PObjectType {\n none = 0,\n mesh,\n texture,\n material,\n light,\n camera,\n skybox,\n skin,\n morph,\n skeleton,\n animation,\n animationManager,\n reference,\n}\n\n/**\n * 灯光类型\n */\nexport enum PLightType {\n directional = 0,\n point,\n spot,\n ambient,\n}\n\n/**\n * 纹理类型\n */\nexport enum PTextureType {\n none = 0,\n t2d,\n t3d,\n cube,\n}\n\n/**\n * 材质类型\n */\nexport enum PMaterialType {\n none = 0,\n unlit,\n pbr,\n //phong,\n normalVis,\n simpleFilter,\n shadowBase,\n shadowFilter,\n //\n skyboxFilter,\n}\n\n/**\n * 混合模式\n */\nexport enum PBlendMode {\n opaque = 0,\n masked,\n translucent,\n additive,\n}\n\n/**\n * 面片朝向模式\n */\nexport enum PFaceSideMode {\n both = 0,\n front,\n back,\n}\n\nexport enum PShadowType {\n none = 0,\n standard,\n variance,\n expVariance,\n}\n\nexport const PBRShaderGUID = 'pbr00000000000000000000000000000';\nexport const UnlitShaderGUID = 'unlit000000000000000000000000000';\n\n/**\n * 插件变换类\n */\nexport class PTransform {\n private translation = new Vector3(0, 0, 0);\n private rotation = new Quaternion(0, 0, 0, 1);\n private scale = new Vector3(1, 1, 1);\n\n /**\n * 从矩阵设置数据\n * @param matrix - 4阶矩阵\n * @returns\n */\n fromMatrix4 (matrix: Matrix4) {\n this.setMatrix(matrix);\n\n return this;\n }\n\n /**\n * 从 GE 变换设置数据\n * @param trans - GE 变换对象或数据\n * @returns\n */\n fromEffectsTransform (trans: EffectsTransform | BaseTransform) {\n if (trans instanceof EffectsTransform) {\n this.setMatrix(trans.getWorldMatrix());\n } else {\n const effectsTrans = new EffectsTransform({\n ...trans,\n valid: true,\n });\n\n effectsTrans.setValid(true);\n\n this.setMatrix(effectsTrans.getWorldMatrix());\n }\n\n return this;\n }\n\n /**\n * 转成 GE 变换对象\n * @param transform - GE 变换对象\n * @returns\n */\n toEffectsTransform (transform: EffectsTransform) {\n const mat = this.getMatrix();\n\n transform.cloneFromMatrix(mat);\n\n return transform;\n }\n\n /**\n * 通过 GE 变换参数设置\n * @param trans - GE 变换参数\n * @returns\n */\n fromBaseTransform (trans: BaseTransform) {\n if (trans.position) {\n this.setTranslation(trans.position);\n } else {\n this.translation.set(0, 0, 0);\n }\n\n if (trans.rotation) {\n this.setRotation(trans.rotation);\n } else {\n this.rotation.set(0, 0, 0, 1);\n }\n\n if (trans.scale) {\n this.setScale(trans.scale);\n } else {\n this.scale.set(1, 1, 1);\n }\n\n return this;\n }\n\n /**\n * 获取平移\n * @returns\n */\n getTranslation (): Vector3 {\n return this.translation;\n }\n\n /**\n * 设置平移\n * @param val - 平移\n */\n setTranslation (val: Vector3 | spec.vec3) {\n if (val instanceof Vector3) {\n this.translation.set(val.x, val.y, val.z);\n } else {\n this.translation.set(val[0], val[1], val[2]);\n }\n }\n\n /**\n * 获取位置\n * @returns\n */\n getPosition (): Vector3 {\n return this.translation;\n }\n\n /**\n * 设置位置\n * @param val - 位置\n */\n setPosition (val: Vector3 | spec.vec3) {\n if (val instanceof Vector3) {\n this.translation.set(val.x, val.y, val.z);\n } else {\n this.translation.set(val[0], val[1], val[2]);\n }\n }\n\n /**\n * 获取旋转\n * @returns\n */\n getRotation (): Quaternion {\n return this.rotation;\n }\n\n /**\n * 设置旋转\n * @param val - 旋转,可能是四元数或欧拉角\n */\n setRotation (val: Quaternion | Euler | Vector3 | spec.vec4 | spec.vec3) {\n if (val instanceof Quaternion) {\n this.rotation.set(val.x, val.y, val.z, val.w);\n } else if (val instanceof Euler) {\n this.rotation.setFromEuler(val);\n } else if (val instanceof Vector3) {\n this.rotation.setFromEuler(new Euler(val.x, val.y, val.z, EulerOrder.ZYX));\n } else if (val.length === 4) {\n this.rotation.set(val[0], val[1], val[2], val[3]);\n } else {\n this.rotation.setFromEuler(new Euler(val[0], val[1], val[2], EulerOrder.ZYX));\n }\n }\n\n /**\n * 获取缩放\n * @returns\n */\n getScale (): Vector3 {\n return this.scale;\n }\n\n /**\n * 设置缩放\n * @param val - 缩放\n */\n setScale (val: Vector3 | spec.vec3) {\n if (val instanceof Vector3) {\n this.scale.set(val.x, val.y, val.z);\n } else {\n this.scale.set(val[0], val[1], val[2]);\n }\n }\n\n /**\n * 获取矩阵\n * @returns\n */\n getMatrix (): Matrix4 {\n return new Matrix4().compose(this.getTranslation(), this.getRotation(), this.getScale());\n }\n\n /**\n * 设置矩阵\n * @param mat - 4阶矩阵\n */\n setMatrix (mat: Matrix4 | spec.mat4) {\n if (mat instanceof Matrix4) {\n const res = mat.getTransform();\n\n this.setTranslation(res.translation);\n this.setRotation(res.rotation);\n this.setScale(res.scale);\n } else {\n const res = Matrix4.fromArray(mat).getTransform();\n\n this.setTranslation(res.translation);\n this.setRotation(res.rotation);\n this.setScale(res.scale);\n }\n }\n}\n\n/**\n * 坐标系类\n */\nexport class PCoordinate {\n /**\n * 原点\n */\n origin: Vector3;\n /**\n * X 轴\n */\n xAxis: Vector3;\n /**\n * Y 轴\n */\n yAxis: Vector3;\n /**\n * Z 轴\n */\n zAxis: Vector3;\n\n constructor () {\n this.origin = new Vector3(0, 0, 0);\n this.xAxis = new Vector3(1, 0, 0);\n this.yAxis = new Vector3(0, 1, 0);\n this.zAxis = new Vector3(0, 0, 1);\n }\n\n /**\n * 从插件变换创建坐标系\n * @param trans - 变换\n * @param invert - 是否旋转取反\n * @returns 坐标系对象\n */\n fromPTransform (trans: PTransform, invert = false) {\n this.origin.copyFrom(trans.getPosition());\n const rotationMatrix = trans.getRotation().toMatrix4(new Matrix4());\n\n if (invert) {\n rotationMatrix.invert();\n }\n this.fromRotationMatrix(rotationMatrix);\n\n return this;\n }\n\n /**\n * 从旋转矩阵创建坐标系\n * @param matrix - 矩阵\n */\n fromRotationMatrix (matrix: Matrix4) {\n const me = matrix.elements;\n\n this.xAxis.set(me[0], me[1], me[2]);\n this.yAxis.set(me[4], me[5], me[6]);\n this.zAxis.set(me[8], me[9], me[10]);\n }\n}\n\n/**\n * 全局状态\n */\nexport class PGlobalState {\n /**\n * 是否 WebGL2\n */\n isWebGL2: boolean;\n /**\n * 是否共享 Shader\n */\n shaderShared: boolean;\n /**\n * 运行时环境,编辑器模式或设备模式\n */\n runtimeEnv: string;\n /**\n * 兼容模式,glTF 模式或 Tiny3d 模式\n */\n compatibleMode: string;\n /**\n * 是否显示包围盒\n */\n visBoundingBox: boolean;\n /**\n * 渲染输出结果模式,可以换中间渲染数据\n */\n renderMode3D: spec.RenderMode3D;\n /**\n * UV结果输出时,棋盘格的大小控制,范围(0, 1)\n */\n renderMode3DUVGridSize: number;\n\n // singleton related code\n private static instance: PGlobalState;\n\n /**\n * 获取单例\n * @returns\n */\n static getInstance (): PGlobalState {\n // Do you need arguments? Make it a regular static method instead.\n return this.instance || (this.instance = new this());\n }\n\n private constructor () {\n this.isWebGL2 = false;\n this.shaderShared = true;\n this.runtimeEnv = PLAYER_OPTIONS_ENV_EDITOR;\n this.compatibleMode = 'gltf';\n this.visBoundingBox = false;\n this.renderMode3D = spec.RenderMode3D.none;\n this.renderMode3DUVGridSize = 1 / 16;\n }\n\n /**\n * 重置数据\n */\n reset () {\n this.isWebGL2 = false;\n this.shaderShared = true;\n this.runtimeEnv = PLAYER_OPTIONS_ENV_EDITOR;\n this.compatibleMode = 'gltf';\n this.visBoundingBox = false;\n this.renderMode3D = spec.RenderMode3D.none;\n this.renderMode3DUVGridSize = 1 / 16;\n }\n\n /**\n * 是否可视化渲染中间结果\n */\n hasRenderMode3D () {\n return this.renderMode3D !== spec.RenderMode3D.none;\n }\n\n /**\n * 是否编辑器模式\n */\n get isEditorEnv () {\n return this.runtimeEnv === PLAYER_OPTIONS_ENV_EDITOR;\n }\n\n /**\n * 是否设备模式\n */\n get isDeviceEnv () {\n return !this.isEditorEnv;\n }\n\n /**\n * 是否 Tiny3d 模式\n */\n get isTiny3dMode () {\n return this.compatibleMode === 'tiny3d';\n }\n\n /**\n * 是否 glTF 模式\n */\n get isGLTFMode () {\n return !this.isTiny3dMode;\n }\n}\n\n","import type { spec, Renderer } from '@galacean/effects';\nimport type { BaseTransform } from '../index';\nimport type { Quaternion, Euler, Vector3, Matrix4 } from './math';\nimport { PObjectType, PTransform, PCoordinate } from './common';\nimport type { PSceneManager } from './scene';\n\nlet objectIndex = 1;\n\n/**\n * 抽象对象类,提供公共的成员变量和成员函数\n */\nexport abstract class PObject {\n /**\n * 名称\n */\n name = 'Unnamed Object';\n /**\n * 类型\n */\n type: PObjectType = PObjectType.none;\n\n // create () {\n // // create everything in this object\n // }\n\n /**\n * 销毁\n */\n dispose () {\n // delete everything in this object\n }\n\n /**\n * 是否空对象\n * @returns\n */\n isNone () {\n return this.type === PObjectType.none;\n }\n\n /**\n * 是否有效,也就是类型不是 PObjectType.none\n * @returns\n */\n isValid (): boolean {\n return this.type !== PObjectType.none;\n }\n\n protected genName (name: string): string {\n return `${name}_@${objectIndex++}`;\n }\n}\n\n/**\n * 抽象实体类,支持可见性、变换和所属 VFX 元素\n */\nexport abstract class PEntity extends PObject {\n private _visible = false;\n private _transform = new PTransform();\n /**\n * 是否删除\n */\n deleted = false;\n\n /**\n * 逻辑更新\n */\n update () {\n\n }\n\n /**\n * 渲染对象\n * @param scene - 场景管理器\n * @param renderer 渲染器\n */\n render (scene: PSceneManager, renderer: Renderer) {\n // OVERRIDE\n }\n\n /**\n * 外部改变可见性时的回调\n * @param visible - 可见性\n */\n onVisibleChanged (visible: boolean) {\n this.visible = visible;\n }\n\n /**\n * 仅标记不可见和删除状态,但不进行 WebGL 相关资源的释放\n * 最终释放 WebGL 相关资源是在 plugin destroy 的时候\n */\n override dispose () {\n super.dispose();\n this.visible = false;\n this.deleted = true;\n }\n\n /**\n * 获取可见性,如果实体非法也是不可见\n */\n get visible (): boolean {\n return this._visible && this.isValid();\n }\n\n /**\n * 设置可见性\n */\n set visible (val: boolean) {\n this._visible = val;\n }\n\n /**\n * 获取变换\n */\n get transform (): PTransform {\n return this._transform;\n }\n\n /**\n * 设置变换,可以传入插件变换对象或变换参数\n */\n set transform (val: PTransform | BaseTransform) {\n if (val instanceof PTransform) {\n this._transform = val;\n } else {\n if (val.position !== undefined) {\n this._transform.setTranslation(val.position);\n }\n if (val.rotation !== undefined) {\n this._transform.setRotation(val.rotation);\n }\n if (val.scale !== undefined) {\n this._transform.setScale(val.scale);\n }\n }\n }\n\n /**\n * 获取位移\n */\n get translation (): Vector3 {\n return this._transform.getTranslation();\n }\n\n /**\n * 设置位移\n */\n set translation (val: Vector3 | spec.vec3) {\n this._transform.setTranslation(val);\n }\n\n /**\n * 获取位置\n */\n get position (): Vector3 {\n return this._transform.getTranslation();\n }\n\n /**\n * 设置位置\n */\n set position (val: Vector3 | spec.vec3) {\n this._transform.setTranslation(val);\n }\n\n /**\n * 获取旋转\n */\n get rotation (): Quaternion {\n return this._transform.getRotation();\n }\n\n /**\n * 设置旋转\n */\n set rotation (val: Quaternion | Euler | Vector3 | spec.vec4 | spec.vec3) {\n this._transform.setRotation(val);\n }\n\n /**\n * 获取缩放\n */\n get scale (): Vector3 {\n return this._transform.getScale();\n }\n\n /**\n * 设置缩放\n */\n set scale (val: Vector3 | spec.vec3) {\n this._transform.setScale(val);\n }\n\n /**\n * 获取矩阵\n */\n get matrix (): Matrix4 {\n return this._transform.getMatrix();\n }\n\n /**\n * 设置矩阵\n */\n set matrix (val: Matrix4) {\n this._transform.setMatrix(val);\n }\n\n /**\n * 获取坐标系\n */\n get coordinate () {\n const coord = new PCoordinate();\n\n coord.fromPTransform(this._transform);\n\n return coord;\n }\n\n}\n\n","import type { spec } from '@galacean/effects';\n\n/**\n * Model 插件元素类型\n */\nexport const VFX_ITEM_TYPE_3D = 'PluginModel' as spec.ItemType;\n","import { ShaderFactory } from '@galacean/effects';\nimport { default as animationVertGLSL } from './standard/animation.vert.glsl';\nimport { default as extensionsFragGLSL } from './standard/extensions.frag.glsl';\nimport { default as toneMappingFragGLSL } from './standard/tone-mapping.frag.glsl';\nimport { default as texturesVertGLSL } from './standard/textures.vert.glsl';\nimport { default as functionsFragGLSL } from './standard/functions.frag.glsl';\nimport { default as shadowFragGLSL } from './standard/shadow.frag.glsl';\nimport { default as shadowCommonVert } from './standard/shadow-common.vert.glsl';\n\n/**\n * GLSL 着色器代码编译预处理\n */\nexport namespace StandardShaderSource {\n /**\n * GLSL 代码预处理和生成最终代码\n * @param source - GLSL 代码\n * @param features - 宏定义\n * @param isWebGL2 - 是否 WebGL2\n * @returns 最终代码\n */\n export function build (source: string, features: string[]): string {\n\n source = source.replace(/#define FEATURES/,\n features.map(value => `#define ${value}`).join('\\n'));\n\n return source;\n }\n}\n\nShaderFactory.registerInclude('animation.vert.glsl', animationVertGLSL);\nShaderFactory.registerInclude('extensions.frag.glsl', extensionsFragGLSL);\nShaderFactory.registerInclude('tone-mapping.frag.glsl', toneMappingFragGLSL);\nShaderFactory.registerInclude('textures.vert.glsl', texturesVertGLSL);\nShaderFactory.registerInclude('functions.frag.glsl', functionsFragGLSL);\nShaderFactory.registerInclude('shadow.frag.glsl', shadowFragGLSL);\nShaderFactory.registerInclude('shadow-common.vert.glsl', shadowCommonVert);\n\n","import { default as primitiveVert } from './standard/primitive.vert.glsl';\nimport { default as metallicRoughnessFrag } from './standard/metallic-roughness.frag.glsl';\nimport { default as shadowPassFrag } from './standard/shadow-pass.frag.glsl';\nimport { default as skyboxVert } from './standard/skybox.vert.glsl';\nimport { default as skyboxFrag } from './standard/skybox.frag.glsl';\nimport { StandardShaderSource } from './standard-shader-source';\nimport { PMaterialType } from '../common';\nimport type { PShaderContext } from '../shader';\n\n/**\n * 着色器代码生成类\n */\nexport class StandardShader {\n /**\n * WebGL 环境\n */\n static environment = 'webgl1';\n\n /**\n * 获取顶点着色器代码\n * @param context - 着色器上下文\n * @returns\n */\n static getVertexShaderCode (context: PShaderContext): string {\n const features = context.featureList;\n const materialType = context.material.materialType;\n\n switch (materialType) {\n case PMaterialType.unlit:\n case PMaterialType.pbr:\n case PMaterialType.shadowBase:\n return StandardShaderSource.build(primitiveVert, features);\n case PMaterialType.skyboxFilter:\n return StandardShaderSource.build(skyboxVert, features);\n default:\n throw new Error(`Invalid material type ${materialType} for getVertexShaderString!`);\n }\n }\n\n /**\n * 获取片段着色器代码\n * @param context - 着色器上下文\n * @returns\n */\n static getFragmentShaderCode (context: PShaderContext): string {\n const features = context.featureList;\n const materialType = context.material.materialType;\n\n switch (materialType) {\n case PMaterialType.unlit:\n case PMaterialType.pbr:\n return StandardShaderSource.build(metallicRoughnessFrag, features);\n case PMaterialType.shadowBase:\n return StandardShaderSource.build(shadowPassFrag, features);\n case PMaterialType.skyboxFilter:\n return StandardShaderSource.build(skyboxFrag, features);\n default:\n throw new Error(`Invalid material type ${materialType} for getFragmentShaderString!`);\n }\n }\n\n static genVertexShaderCode (materialType: PMaterialType): string {\n switch (materialType) {\n case PMaterialType.unlit:\n case PMaterialType.pbr:\n case PMaterialType.shadowBase:\n return primitiveVert;\n case PMaterialType.skyboxFilter:\n return skyboxVert;\n default:\n throw new Error(`Invalid material type ${materialType} for genVertexShaderCode!`);\n }\n }\n\n /**\n * 获取片段着色器代码\n * @param materialType - 材质类型\n * @returns\n */\n static genFragmentShaderCode (materialType: PMaterialType): string {\n switch (materialType) {\n case PMaterialType.unlit:\n case PMaterialType.pbr:\n return metallicRoughnessFrag;\n case PMaterialType.shadowBase:\n return shadowPassFrag;\n case PMaterialType.skyboxFilter:\n return skyboxFrag;\n default:\n throw new Error(`Invalid material type ${materialType} for genFragmentShaderCode!`);\n }\n }\n\n}\n","import { StandardShader } from '../runtime/shader-libs/standard-shader';\nimport type { PShaderContext, PShaderResults } from '../runtime/shader';\nimport { PMaterialType } from '../runtime';\n\nexport function fetchPBRShaderCode (): PShaderResults {\n const vertexShaderCode = StandardShader.genVertexShaderCode(PMaterialType.pbr);\n const fragmentShaderCode = StandardShader.genFragmentShaderCode(PMaterialType.pbr);\n\n return {\n vertexShaderCode,\n fragmentShaderCode,\n };\n}\n\nexport function fetchUnlitShaderCode (): PShaderResults {\n const vertexShaderCode = StandardShader.genVertexShaderCode(PMaterialType.unlit);\n const fragmentShaderCode = StandardShader.genFragmentShaderCode(PMaterialType.unlit);\n\n return {\n vertexShaderCode,\n fragmentShaderCode,\n };\n}\n\n/**\n * 获取 PBR 材质着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getPBRPassShaderCode (context: PShaderContext): PShaderResults {\n const vertexShaderCode = StandardShader.getVertexShaderCode(context);\n const fragmentShaderCode = StandardShader.getFragmentShaderCode(context);\n\n return {\n vertexShaderCode: vertexShaderCode,\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\nexport function getShadowPassShaderCode (context: PShaderContext): PShaderResults {\n const vertexShaderCode = StandardShader.getVertexShaderCode(context);\n const fragmentShaderCode = StandardShader.getFragmentShaderCode(context);\n\n return {\n vertexShaderCode: vertexShaderCode,\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\n/**\n * 获取天空盒着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getSkyBoxShaderCode (context: PShaderContext): PShaderResults {\n const vertexShaderCode = StandardShader.getVertexShaderCode(context);\n const fragmentShaderCode = StandardShader.getFragmentShaderCode(context);\n\n return {\n vertexShaderCode: vertexShaderCode,\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\n/**\n * 获取四边形滤波着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getQuadFilterShaderCode (context: PShaderContext): PShaderResults {\n const fragmentShaderCode = `\n #version 100\n precision highp float;\n uniform sampler2D _ColorSampler;\n\n varying vec2 v_UVCoord1;\n void main(){\n gl_FragColor = texture2D(_ColorSampler, v_UVCoord1);\n }\n `;\n\n return {\n vertexShaderCode: getQuadFilterVS(),\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\n/**\n * 获取法线可视化着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getNormalVisShaderCode (context: PShaderContext): PShaderResults {\n const fragmentShaderCode = `\n #version 100\n precision highp float;\n varying vec3 v_Normal;\n void main(){\n gl_FragColor = vec4(v_Normal * 0.5 + 0.5, 1);\n }\n `;\n\n return {\n vertexShaderCode: getBasicVS({ hasNormals: true }),\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\n/**\n * 获取仅漫反射着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getDiffuseOnlyShaderCode (context: PShaderContext): PShaderResults {\n const fragmentShaderCode = `\n #version 100\n precision highp float;\n varying vec3 v_Normal;\n void main(){\n vec3 lightDir = normalize(vec3(1, 1, 1));\n gl_FragColor = vec4(max(0.0, dot(v_Normal, lightDir)) * 0.8);\n }\n `;\n\n return {\n vertexShaderCode: getBasicVS({ hasNormals: true }),\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\n/**\n * 获取 Kawase 模糊着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getKawaseBlurShaderCode (context: PShaderContext): PShaderResults {\n const fragmentShaderCode = `\n #version 100\n precision highp float;\n uniform float _Offset;\n uniform vec2 _TextureSizeInv;\n uniform sampler2D _TexturSampler;\n\n varying vec2 v_UVCoord1;\n void main() {\n vec4 color = vec4(0.0);\n color += texture2D(_TexturSampler, v_UVCoord1 + vec2(-_Offset-0.5,-_Offset-0.5) * _TextureSizeInv);\n color += texture2D(_TexturSampler, v_UVCoord1 + vec2(-_Offset-0.5, _Offset+0.5) * _TextureSizeInv);\n color += texture2D(_TexturSampler, v_UVCoord1 + vec2( _Offset+0.5,-_Offset-0.5) * _TextureSizeInv);\n color += texture2D(_TexturSampler, v_UVCoord1 + vec2( _Offset+0.5, _Offset+0.5) * _TextureSizeInv);\n gl_FragColor = color * 0.25;\n }\n `;\n\n return {\n vertexShaderCode: getQuadFilterVS(),\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\n/**\n * 获取简单滤波着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getSimpleFilterShaderCode (context: PShaderContext): PShaderResults {\n const fragmentShaderCode = `\n #version 100\n precision highp float;\n uniform sampler2D _FilterSampler;\n\n varying vec2 v_UVCoord1;\n void main() {\n gl_FragColor = texture2D(_FilterSampler, v_UVCoord1) * vec4(0.5);\n }\n `;\n\n return {\n vertexShaderCode: getQuadFilterVS(),\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\n/**\n * 获取高斯模糊着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getGaussianBlurShaderCodeV2 (context: PShaderContext): PShaderResults {\n const fragmentShaderCode = `\n #version 100\n precision highp float;\n uniform vec2 _BlurScale;\n uniform sampler2D _FilterSampler;\n\n varying vec2 v_UVCoord1;\n void main() {\n vec4 color = vec4(0);\n vec2 offset0 = vec2(0.53805) * _BlurScale.xy;\n vec2 offset1 = vec2(2.06278) * _BlurScale.xy;\n color += (texture2D(_FilterSampler, v_UVCoord1 + offset0) + texture2D(_FilterSampler, v_UVCoord1 - offset0)) * 0.44908;\n color += (texture2D(_FilterSampler, v_UVCoord1 + offset1) + texture2D(_FilterSampler, v_UVCoord1 - offset1)) * 0.05092;\n gl_FragColor = color;\n }\n `;\n\n return {\n vertexShaderCode: getQuadFilterVS(),\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\n/**\n * 获取高斯模糊着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getGaussianBlurShaderCodeV1 (context: PShaderContext): PShaderResults {\n const fragmentShaderCode = `\n #version 100\n precision highp float;\n uniform vec2 _BlurScale;\n uniform sampler2D _FilterSampler;\n\n varying vec2 v_UVCoord1;\n void main() {\n vec4 color = vec4(0.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(-3.0) * _BlurScale.xy)) * (1.0/64.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(-2.0) * _BlurScale.xy)) * (6.0/64.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(-1.0) * _BlurScale.xy)) * (15.0/64.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(+0.0) * _BlurScale.xy)) * (20.0/64.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(+1.0) * _BlurScale.xy)) * (15.0/64.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(+2.0) * _BlurScale.xy)) * (6.0/64.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(+3.0) * _BlurScale.xy)) * (1.0/64.0);\n gl_FragColor = color;\n }\n `;\n\n return {\n vertexShaderCode: getQuadFilterVS(),\n fragmentShaderCode: fragmentShaderCode,\n };\n}\n\n/**\n * 获取透明效果着色器代码\n * @param isVertexShader - 是否顶点着色器\n * @returns\n */\nexport function getTransparecyBaseShader (isVertexShader: boolean): string {\n if (isVertexShader) {\n return getBasicVS({ hasNormals: true });\n } else {\n return `\n #version 100\n #extension GL_EXT_draw_buffers: require\n\n precision highp float;\n uniform vec4 _BaseColorFactor;\n\n #ifdef HAS_UVS\n uniform sampler2D _BaseColorSampler;\n varying vec2 v_UVCoord1;\n #endif\n\n varying vec3 v_Normal;\n\n float weight(float z, float a) {\n return clamp(pow(min(1.0, a * 10.0) + 0.01, 3.0) * 1e8 * pow(1.0 - z * 0.9, 3.0), 1e-2, 3e3);\n }\n\n void main() {\n vec4 color = _BaseColorFactor;\n\n #ifdef HAS_UVS\n color *= texture2D(_BaseColorSampler, v_UVCoord1);\n #endif\n\n color.rgb *= color.a * dot(normalize(v_Normal), normalize(vec3(0, 1, 3))) * 5.0;\n float w = weight(gl_FragCoord.z, color.a);\n gl_FragData[0] = vec4(color.rgb * w, color.a);\n gl_FragData[1] = vec4(color.a * w);\n }\n `;\n }\n}\n\n/**\n * 获取透明效果滤波着色器代码\n * @param isVertexShader - 是否顶点着色器\n * @returns\n */\nexport function getTransparecyFilterShader (isVertexShader: boolean): string {\n if (isVertexShader) {\n return getQuadFilterVS();\n } else {\n return `\n #version 100\n precision highp float;\n uniform sampler2D _AccumColorSampler;\n uniform sampler2D _AccumAlphaSampler;\n\n varying vec2 v_UVCoord1;\n void main() {\n vec4 accumColor = texture2D(_AccumColorSampler, v_UVCoord1);\n vec4 accumAlpha = texture2D(_AccumAlphaSampler, v_UVCoord1);\n float finalAlpha = 1.0 - accumColor.a;\n vec3 finalColor = accumColor.rgb / clamp(accumAlpha.r, 0.001, 50000.0);\n gl_FragColor = vec4(finalColor, finalAlpha);\n }\n `;\n }\n}\n\nfunction getBasicVS (params: Record<string, boolean> = {}): string {\n const featureList: string[] = ['#version 100'];\n\n if (params.hasUVs) { featureList.push('#define HAS_UVS 1'); }\n if (params.hasNormals) { featureList.push('#define HAS_NORMALS 1'); }\n\n featureList.push(`\n precision highp float;\n\n uniform mat4 effects_ObjectToWorld;\n uniform mat4 effects_MatrixVP;\n attribute vec3 aPos;\n varying vec3 v_Position;\n\n #ifdef HAS_UVS\n attribute vec2 aUV;\n varying vec2 v_UVCoord1;\n #endif\n\n #ifdef HAS_NORMALS\n uniform mat4 _NormalMatrix;\n attribute vec3 aNormal;\n varying vec3 v_Normal;\n #endif\n\n void main(){\n vec4 pos = effects_ObjectToWorld * vec4(aPos, 1);\n v_Position = pos.xyz / pos.w;\n\n #ifdef HAS_UVS\n v_UVCoord1 = aUV;\n #endif\n\n #ifdef HAS_NORMALS\n v_Normal = normalize(vec3(effects_ObjectToWorld * vec4(aNormal, 0)));\n #endif\n\n gl_Position = effects_MatrixVP * pos;\n }\n `);\n\n return featureList.join('\\n');\n}\n\nfunction getQuadFilterVS (): string {\n return `\n #version 100\n precision highp float;\n attribute vec3 aPos;\n attribute vec2 aUV;\n\n varying vec2 v_UVCoord1;\n void main(){\n v_UVCoord1 = aUV;\n gl_Position = vec4(aPos.xy, 0.0, 1.0);\n }\n `;\n}\n","import { PMaterialType } from './common';\nimport type { PMaterialBase } from './material';\nimport * as Helper from '../utility/shader-helper';\n\n/**\n * 着色器上下文\n */\nexport interface PShaderContext {\n /**\n * 材质\n */\n material: PMaterialBase,\n /**\n * 是否 WebGL2\n */\n isWebGL2: boolean,\n /**\n * 特性列表\n */\n featureList: string[],\n}\n\n/**\n * 着色器返回的代码结果\n */\nexport interface PShaderResults {\n /**\n * 顶点着色器代码\n */\n vertexShaderCode: string,\n /**\n * 片段着色器代码\n */\n fragmentShaderCode: string,\n}\n\ntype ShaderCodeFuncType = (context: PShaderContext) => PShaderResults;\n\n/**\n * 着色器管理类\n */\nexport class PShaderManager {\n private funcMap: Map<PMaterialType, ShaderCodeFuncType>;\n private static _instance: PShaderManager;\n\n /**\n * 获取着色器单例对象\n * @returns\n */\n static getInstance (): PShaderManager {\n // Do you need arguments? Make it a regular static method instead.\n return this._instance || (this._instance = new this());\n }\n\n private constructor () {\n this.funcMap = new Map();\n this.funcMap.set(PMaterialType.unlit, Helper.getPBRPassShaderCode);\n this.funcMap.set(PMaterialType.pbr, Helper.getPBRPassShaderCode);\n this.funcMap.set(PMaterialType.shadowBase, Helper.getShadowPassShaderCode);\n this.funcMap.set(PMaterialType.shadowFilter, Helper.getGaussianBlurShaderCodeV2);\n this.funcMap.set(PMaterialType.normalVis, Helper.getNormalVisShaderCode);\n this.funcMap.set(PMaterialType.simpleFilter, Helper.getSimpleFilterShaderCode);\n this.funcMap.set(PMaterialType.skyboxFilter, Helper.getSkyBoxShaderCode);\n }\n\n /**\n * 生成着色器代码\n * @param context - 着色器上下文\n * @returns\n */\n genShaderCode (context: PShaderContext): PShaderResults {\n const materialType = context.material.materialType;\n const func = this.funcMap.get(materialType);\n\n if (func !== undefined) {\n return func(context);\n } else {\n throw new Error(`Invalid material type ${materialType}, shader content ${context}.`);\n }\n }\n}\n","import type { Texture, Material } from '@galacean/effects';\nimport { spec, glContext } from '@galacean/effects';\nimport type { MacroInfo } from '../index';\nimport type { Matrix3 } from './math';\nimport { Vector3, Vector4, Color } from './math';\nimport { PObjectType, PMaterialType, PGlobalState, PBRShaderGUID } from './common';\nimport { PObject } from './object';\nimport { PluginHelper } from '../utility/plugin-helper';\nimport { PShaderManager } from './shader';\n\n/**\n * 3D 材质基础类,支持公共的材质功能\n */\nexport abstract class PMaterialBase extends PObject {\n effectMaterial: Material;\n /**\n * 材质类型,主要是 pbr 和 unlit 两类\n */\n materialType: PMaterialType = PMaterialType.none;\n /**\n * 顶点着色器代码\n */\n vertexShaderCode = '';\n /**\n * 片段着色器代码\n */\n fragmentShaderCode = '';\n /**\n * 深度是否写入,默认是写入\n */\n ZWrite = true;\n /**\n * 是否深度测试提示,默认开启\n */\n ZTest = true;\n /**\n * 渲染类型,默认是不透明\n */\n renderType: spec.RenderType = spec.RenderType.Opaque;\n /**\n * 是否 Alpha 裁剪,默认关闭\n */\n alphaClip = false;\n /**\n * Alpha 测试截断值\n */\n alphaCutoff = 0.5;\n /**\n * 面侧模式,默认是正面\n */\n renderFace: spec.RenderFace = spec.RenderFace.Front;\n\n /**\n * 获取着色器特性列表,根据材质状态\n * @returns 特性列表\n */\n getShaderFeatures (): string[] {\n const featureList: string[] = [];\n\n if (this.isAlphaClip()) {\n featureList.push('ALPHAMODE_MASK 1');\n } else if (this.isOpaque()) {\n featureList.push('ALPHAMODE_OPAQUE 1');\n }\n\n if (this.renderFace === spec.RenderFace.Both) {\n featureList.push('DOUBLE_SIDED 1');\n }\n\n return featureList;\n }\n\n getShaderMacros (): MacroInfo[] {\n const macroList: MacroInfo[] = [];\n\n if (this.isAlphaClip()) {\n macroList.push({ name: 'ALPHAMODE_MASK' });\n } else if (this.isOpaque()) {\n macroList.push({ name: 'ALPHAMODE_OPAQUE' });\n }\n\n if (this.renderFace === spec.RenderFace.Both) {\n macroList.push({ name: 'DOUBLE_SIDED' });\n }\n\n return macroList;\n }\n\n /**\n * 根据材质状态,更新 GE 材质状态\n * @param material - GE 材质\n */\n updateUniforms (material: Material) {\n // 渲染 UV 结果输出时,设置 uv 大小\n const renderMode = PGlobalState.getInstance().renderMode3D;\n\n if (renderMode === spec.RenderMode3D.uv) {\n const debugUVGridSize = PGlobalState.getInstance().renderMode3DUVGridSize;\n\n material.setFloat('_DebugUVGridSize', debugUVGridSize);\n }\n }\n\n /**\n * 生成顶点和片段着色器代码\n * 先获取着色器特性,再根据材质和全局状态,生成着色器代码\n * @param inFeatureList - 外部特性列表\n */\n build (inFeatureList?: string[]) {\n const finalFeatureList = this.getFeatureList(inFeatureList);\n const isWebGL2 = PGlobalState.getInstance().isWebGL2;\n //\n const shaderManager = PShaderManager.getInstance();\n const shaderResult = shaderManager.genShaderCode({\n material: this,\n isWebGL2,\n featureList: finalFeatureList,\n });\n\n this.vertexShaderCode = shaderResult.vertexShaderCode;\n this.fragmentShaderCode = shaderResult.fragmentShaderCode;\n }\n\n getFeatureList (inFeatureList?: string[]) {\n const finalFeatureList = this.getShaderFeatures();\n\n if (inFeatureList !== undefined) {\n finalFeatureList.push(...inFeatureList);\n }\n\n // 目前只有 PRB 和 Unlit 是需要 EDITOR_TRANSFORM,适配编辑器的视口 Offset\n // 阴影 Pass 的渲染是不需要,所以这里特殊处理下\n if (this.materialType !== PMaterialType.shadowBase) {\n const isEditorEvn = PGlobalState.getInstance().isEditorEnv;\n\n if (isEditorEvn) {\n finalFeatureList.push('EDITOR_TRANSFORM');\n }\n }\n\n return finalFeatureList;\n }\n\n getMacroList (inMacroList?: MacroInfo[]) {\n const finalMacroList = this.getShaderMacros();\n\n if (inMacroList !== undefined) {\n finalMacroList.push(...inMacroList);\n }\n\n // 目前只有 PRB 和 Unlit 是需要 EDITOR_TRANSFORM,适配编辑器的视口 Offset\n // 阴影 Pass 的渲染是不需要,所以这里特殊处理下\n if (this.materialType !== PMaterialType.shadowBase) {\n const isEditorEvn = PGlobalState.getInstance().isEditorEnv;\n\n if (isEditorEvn) {\n finalMacroList.push({ name: 'EDITOR_TRANSFORM' });\n }\n }\n\n return finalMacroList;\n }\n\n /**\n * 设置材质状态,根据 GE 材质状态\n * @param material - GE 材质\n */\n setMaterialStates (material: Material) {\n if (this.renderType === spec.RenderType.Transparent) {\n material.blending = true;\n material.depthTest = this.ZTest;\n material.depthMask = this.ZWrite;\n material.blendEquation = [glContext.FUNC_ADD, glContext.FUNC_ADD];\n material.blendFunction = [\n glContext.ONE, glContext.ONE_MINUS_SRC_ALPHA,\n glContext.ONE, glContext.ONE_MINUS_SRC_ALPHA,\n ];\n } else {\n if (PGlobalState.getInstance().isTiny3dMode) {\n material.blending = false;\n material.depthTest = true;\n // Tiny兼容模式下不透明的深度写入始终开\n material.depthMask = true;\n } else {\n material.blending = false;\n material.depthTest = this.ZTest;\n material.depthMask = this.ZWrite;\n }\n }\n\n this.setFaceSideStates(material);\n }\n\n protected setFaceSideStates (material: Material) {\n if (this.isBothSide()) {\n material.culling = false;\n } else if (this.isBackSide()) {\n material.cullFace = glContext.FRONT;\n material.frontFace = glContext.CCW;\n material.culling = true;\n } else {\n material.cullFace = glContext.BACK;\n material.frontFace = glContext.CCW;\n material.culling = true;\n }\n }\n\n /**\n * 销毁材质,清除着色器代码\n */\n override dispose () {\n this.vertexShaderCode = '';\n this.fragmentShaderCode = '';\n }\n\n /**\n * 是否合法,材质类型非 none\n * @returns\n */\n override isValid (): boolean {\n return this.materialType !== PMaterialType.none && super.isValid();\n }\n\n /**\n * 是否不透明\n * @returns\n */\n isOpaque (): boolean {\n return this.renderType === spec.RenderType.Opaque;\n }\n\n /**\n * 是否 Alpha 裁剪\n * @returns\n */\n isAlphaClip (): boolean {\n return this.alphaClip;\n }\n\n /**\n * 是否半透明\n * @returns\n */\n isTransparent (): boolean {\n return this.renderType === spec.RenderType.Transparent;\n }\n\n /**\n * 是否正面模式\n * @returns\n */\n isFrontSide (): boolean {\n return this.renderFace === spec.RenderFace.Front;\n }\n\n /**\n * 是否背面模式\n * @returns\n */\n isBackSide (): boolean {\n return this.renderFace === spec.RenderFace.Back;\n }\n\n /**\n * 是否双面模式\n * @returns\n */\n isBothSide (): boolean {\n return this.renderFace === spec.RenderFace.Both;\n }\n}\n\n/**\n * 无光照材质类,负责无关照或者不接受光照情况下的物体材质效果\n */\nexport class PMaterialUnlit extends PMaterialBase {\n /**\n * 基础颜色纹理\n */\n baseColorTexture?: Texture;\n /**\n * 基础颜色纹理变换\n */\n baseColorTextureTrans: Matrix3;\n /**\n * 基础颜色值,默认是白色 Color(1, 1, 1, 1)\n */\n baseColorFactor: Color = new Color(1, 1, 1, 1);\n\n /**\n * 创建无光照材质,支持基础颜色纹理\n * @param material - effect 材质对象\n */\n create (material: Material) {\n this.effectMaterial = material;\n this.name = material.name;\n this.type = PObjectType.material;\n this.materialType = PMaterialType.unlit;\n //\n this.baseColorTexture = material.getTexture('_BaseColorSampler') ?? undefined;\n this.baseColorTextureTrans = PluginHelper.createUVTransform(material, '_BaseColorSampler_ST', '_BaseColorRotation');\n this.baseColorFactor = material.getColor('_BaseColorFactor') ?? new Color(1.0, 1.0, 1.0, 1.0);\n //\n this.ZWrite = material.getFloat('ZWrite') !== 0;\n this.ZTest = material.getFloat('ZTest') !== 0;\n this.renderType = material.stringTags['RenderType'] as spec.RenderType ?? spec.RenderType.Opaque;\n this.alphaClip = material.getFloat('AlphaClip') === 1;\n this.alphaCutoff = material.getFloat('_AlphaCutoff') ?? 0;\n this.renderFace = material.stringTags['RenderFace'] as spec.RenderFace ?? spec.RenderFace.Front;\n }\n\n /**\n * 销毁材质\n */\n override dispose () {\n super.dispose();\n this.baseColorTexture = undefined;\n }\n\n /**\n * 获取着色器特性列表,根据材质状态\n * @returns 着色器特性列表\n */\n override getShaderFeatures (): string[] {\n const featureList = super.getShaderFeatures();\n\n featureList.push('MATERIAL_METALLICROUGHNESS 1');\n if (this.hasBaseColorTexture()) {\n featureList.push('HAS_BASE_COLOR_MAP 1');\n }\n\n featureList.push('MATERIAL_UNLIT 1');\n\n return featureList;\n }\n\n override getShaderMacros (): MacroInfo[] {\n const macroList = super.getShaderMacros();\n\n macroList.push({ name: 'MATERIAL_METALLICROUGHNESS' });\n if (this.hasBaseColorTexture()) {\n macroList.push({ name: 'HAS_BASE_COLOR_MAP' });\n }\n\n macroList.push({ name: 'MATERIAL_UNLIT' });\n\n return macroList;\n }\n\n /**\n * 更新对应的 GE 材质中着色器的 Uniform 数据\n * @param material - GE 材质\n */\n override updateUniforms (material: Material) {\n super.updateUniforms(material);\n\n if (this.baseColorTexture !== undefined) {\n material.setInt('_BaseColorUVSet', 0);\n material.setMatrix3('_BaseColorUVTransform', this.baseColorTextureTrans);\n }\n\n material.setFloat('_MetallicFactor', 0);\n material.setFloat('_RoughnessFactor', 0);\n\n material.setFloat('_Exposure', 1.0);\n }\n\n /**\n * 是否有基础颜色纹理\n * @returns\n */\n hasBaseColorTexture (): boolean {\n return this.baseColorTexture !== undefined;\n }\n\n /**\n * 获取基础颜色纹理\n * @returns\n */\n getBaseColorTexture (): Texture {\n return this.baseColorTexture as Texture;\n }\n\n /**\n * 设置基础颜色纹理\n * @param val - 纹理对象\n */\n setBaseColorTexture (val: Texture) {\n this.baseColorTexture = val;\n }\n\n /**\n * 获取基础颜色纹理\n * @returns\n */\n getBaseColorFactor (): Color {\n return this.baseColorFactor;\n }\n\n /**\n * 设置基础颜色值\n * @param val - 颜色值\n */\n setBaseColorFactor (val: Color | Vector4 | spec.vec4) {\n if (val instanceof Color) {\n // for Color\n this.baseColorFactor.set(val.r, val.g, val.b, val.a);\n } else if (val instanceof Vector4) {\n // for Vector4\n this.baseColorFactor.set(val.x, val.y, val.z, val.w);\n } else {\n // for vec4\n this.baseColorFactor.set(val[0], val[1], val[2], val[3]);\n }\n }\n}\n\n/**\n * PBR 材质类,负责基于物理的材质效果,也是渲染中最常用的材质。\n * 目前支持金属度/粗糙度工作流,与其他引擎中的 PBR 材质功能一致。\n */\nexport class PMaterialPBR extends PMaterialBase {\n /**\n * 基础颜色纹理\n */\n baseColorTexture?: Texture;\n /**\n * 基础颜色纹理变换\n */\n baseColorTextureTrans: Matrix3;\n /**\n * 基础颜色值,默认是白色 Color(1, 1, 1, 1)\n */\n baseColorFactor: Color = new Color(1, 1, 1, 1);\n /**\n * 金属度粗超度纹理\n */\n metallicRoughnessTexture?: Texture;\n /**\n * 金属度粗超度纹理变换\n */\n metallicRoughnessTextureTrans: Matrix3;\n /**\n * 是否高光抗锯齿,能够明显提升高光表现效果\n */\n useSpecularAA = false;\n /**\n * 金属度值\n */\n metallicFactor = 0;\n /**\n * 粗超度值\n */\n roughnessFactor = 1;\n /**\n * 法线纹理\n */\n normalTexture?: Texture;\n /**\n * 法线纹理变换\n */\n normalTextureTrans: Matrix3;\n /**\n * 法线纹理缩放\n */\n normalTextureScale = 1;\n /**\n * AO 纹理\n */\n occlusionTexture?: Texture;\n /**\n * AO 纹理变换\n */\n occlusionTextureTrans: Matrix3;\n /**\n * AO 纹理强度\n */\n occlusionTextureStrength = 1;\n /**\n * 自发光纹理\n */\n emissiveTexture?: Texture;\n /**\n * 自发光纹理变换\n */\n emissiveTextureTrans: Matrix3;\n /**\n * 自发光颜色值,默认是黑色 Vector4(0, 0, 0, 0)\n */\n emissiveFactor: Color = new Color(0, 0, 0, 0);\n /**\n * 自发光强度\n */\n emissiveIntensity = 1;\n\n /**\n * 创建材质\n * @param material - effect 材质对象\n */\n create (material: Material) {\n this.effectMaterial = material;\n this.name = material.name;\n this.type = PObjectType.material;\n this.materialType = PMaterialType.pbr;\n //\n this.baseColorTexture = material.getTexture('_BaseColorSampler') ?? undefined;\n this.baseColorTextureTrans = PluginHelper.createUVTransform(material, '_BaseColorSampler_ST', '_BaseColorRotation');\n this.baseColorFactor = material.getColor('_BaseColorFactor') ?? new Color(1.0, 1.0, 1.0, 1.0);\n //\n this.metallicRoughnessTexture = material.getTexture('_MetallicRoughnessSampler') ?? undefined;\n this.metallicRoughnessTextureTrans = PluginHelper.createUVTransform(material, '_MetallicRoughnessSampler_ST', '_MetallicRoughnessRotation');\n this.useSpecularAA = material.getFloat('_SpecularAA') === 1;\n this.metallicFactor = material.getFloat('_MetallicFactor') ?? 1;\n this.roughnessFactor = material.getFloat('_RoughnessFactor') ?? 0;\n //\n this.normalTexture = material.getTexture('_NormalSampler') ?? undefined;\n this.normalTextureTrans = PluginHelper.createUVTransform(material, '_NormalSampler_ST', '_NormalRotation');\n this.normalTextureScale = material.getFloat('_NormalScale') ?? 1;\n //\n this.occlusionTexture = material.getTexture('_OcclusionSampler') ?? undefined;\n this.occlusionTextureTrans = PluginHelper.createUVTransform(material, '_OcclusionSampler_ST', '_OcclusionRotation');\n this.occlusionTextureStrength = material.getFloat('_OcclusionStrength') ?? 1;\n //\n this.emissiveTexture = material.getTexture('_EmissiveSampler') ?? undefined;\n this.emissiveTextureTrans = PluginHelper.createUVTransform(material, '_EmissiveSampler_ST', '_EmissiveRotation');\n this.emissiveFactor = material.getColor('_EmissiveFactor') ?? new Color(0, 0, 0, 1);\n this.emissiveIntensity = material.getFloat('_EmissiveIntensity') ?? 1;\n //\n this.ZWrite = material.getFloat('ZWrite') !== 0;\n this.ZTest = material.getFloat('ZTest') !== 0;\n this.renderType = material.stringTags['RenderType'] as spec.RenderType ?? spec.RenderType.Opaque;\n this.alphaClip = material.getFloat('AlphaClip') === 1;\n this.alphaCutoff = material.getFloat('_AlphaCutoff') ?? 0;\n this.renderFace = material.stringTags['RenderFace'] as spec.RenderFace ?? spec.RenderFace.Front;\n }\n\n /**\n * 销毁材质\n */\n override dispose () {\n super.dispose();\n this.baseColorTexture = undefined;\n this.metallicRoughnessTexture = undefined;\n this.normalTexture = undefined;\n this.occlusionTexture = undefined;\n this.emissiveTexture = undefined;\n }\n\n /**\n * 获取材质特性列表\n * @returns 材质特性列表\n */\n override getShaderFeatures (): string[] {\n const featureList = super.getShaderFeatures();\n\n featureList.push('MATERIAL_METALLICROUGHNESS 1');\n if (this.hasBaseColorTexture()) {\n featureList.push('HAS_BASE_COLOR_MAP 1');\n if (this.baseColorTextureTrans !== undefined) {\n featureList.push('HAS_BASECOLOR_UV_TRANSFORM 1');\n }\n }\n if (this.hasMetallicRoughnessTexture()) {\n featureList.push('HAS_METALLIC_ROUGHNESS_MAP 1');\n if (this.metallicRoughnessTextureTrans !== undefined) {\n featureList.push('HAS_METALLICROUGHNESS_UV_TRANSFORM 1');\n }\n }\n if (this.useSpecularAA) {\n featureList.push('USE_SPECULAR_AA 1');\n }\n if (this.hasNormalTexture()) {\n featureList.push('HAS_NORMAL_MAP 1');\n if (this.normalTextureTrans !== undefined) {\n featureList.push('HAS_NORMAL_UV_TRANSFORM 1');\n }\n }\n if (this.hasOcclusionTexture()) {\n featureList.push('HAS_OCCLUSION_MAP 1');\n if (this.occlusionTextureTrans !== undefined) {\n featureList.push('HAS_OCCLUSION_UV_TRANSFORM 1');\n }\n }\n if (this.hasEmissiveTexture()) {\n featureList.push('HAS_EMISSIVE_MAP 1');\n if (this.emissiveTextureTrans !== undefined) {\n featureList.push('HAS_EMISSIVE_UV_TRANSFORM 1');\n }\n } else if (this.hasEmissiveValue()) {\n featureList.push('HAS_EMISSIVE 1');\n }\n\n return featureList;\n }\n\n override getShaderMacros (): MacroInfo[] {\n const macroList = super.getShaderMacros();\n\n macroList.push({ name: 'MATERIAL_METALLICROUGHNESS' });\n if (this.hasBaseColorTexture()) {\n macroList.push({ name: 'HAS_BASE_COLOR_MAP' });\n if (this.baseColorTextureTrans !== undefined) {\n macroList.push({ name: 'HAS_BASECOLOR_UV_TRANSFORM' });\n }\n }\n if (this.hasMetallicRoughnessTexture()) {\n macroList.push({ name: 'HAS_METALLIC_ROUGHNESS_MAP' });\n if (this.metallicRoughnessTextureTrans !== undefined) {\n macroList.push({ name: 'HAS_METALLICROUGHNESS_UV_TRANSFORM' });\n }\n }\n if (this.useSpecularAA) {\n macroList.push({ name: 'USE_SPECULAR_AA' });\n }\n if (this.hasNormalTexture()) {\n macroList.push({ name: 'HAS_NORMAL_MAP' });\n if (this.normalTextureTrans !== undefined) {\n macroList.push({ name: 'HAS_NORMAL_UV_TRANSFORM' });\n }\n }\n if (this.hasOcclusionTexture()) {\n macroList.push({ name: 'HAS_OCCLUSION_MAP' });\n if (this.occlusionTextureTrans !== undefined) {\n macroList.push({ name: 'HAS_OCCLUSION_UV_TRANSFORM' });\n }\n }\n if (this.hasEmissiveTexture()) {\n macroList.push({ name: 'HAS_EMISSIVE_MAP' });\n if (this.emissiveTextureTrans !== undefined) {\n macroList.push({ name: 'HAS_EMISSIVE_UV_TRANSFORM' });\n }\n } else if (this.hasEmissiveValue()) {\n macroList.push({ name: 'HAS_EMISSIVE' });\n }\n\n return macroList;\n }\n\n /**\n * 更新关联的 GE 材质中着色器的 Uniform 数据\n * @param material - GE 材质\n */\n override updateUniforms (material: Material) {\n super.updateUniforms(material);\n\n if (this.baseColorTexture !== undefined) {\n material.setInt('_BaseColorUVSet', 0);\n material.setMatrix3('_BaseColorUVTransform', this.baseColorTextureTrans);\n }\n //\n if (this.metallicRoughnessTexture !== undefined) {\n material.setInt('_MetallicRoughnessUVSet', 0);\n material.setMatrix3('_MetallicRoughnessUVTransform', this.metallicRoughnessTextureTrans);\n }\n //\n if (this.normalTexture !== undefined) {\n material.setInt('_NormalUVSet', 0);\n material.setMatrix3('_NormalUVTransform', this.normalTextureTrans);\n }\n //\n if (this.occlusionTexture !== undefined) {\n material.setInt('_OcclusionUVSet', 0);\n material.setMatrix3('_OcclusionUVTransform', this.occlusionTextureTrans);\n }\n //\n if (this.emissiveTexture !== undefined) {\n material.setInt('_EmissiveUVSet', 0);\n material.setMatrix3('_EmissiveUVTransform', this.emissiveTextureTrans);\n }\n\n material.setFloat('_Exposure', 3.0);\n }\n\n /**\n * 是否有基础颜色纹理\n * @returns\n */\n hasBaseColorTexture (): boolean {\n return this.baseColorTexture !== undefined;\n }\n\n /**\n * 设置基础颜色纹理\n * @param val - 纹理\n */\n setBaseColorTexture (val: Texture) {\n this.baseColorTexture = val;\n }\n\n /**\n * 获取基础颜色纹理\n * @returns\n */\n getBaseColorFactor (): Color {\n return this.baseColorFactor;\n }\n\n /**\n * 设置基础颜色值\n * @param val - 颜色值\n */\n setBaseColorFactor (val: Color | Vector4 | spec.vec4) {\n if (val instanceof Color) {\n // for Vector4\n this.baseColorFactor.set(val.r, val.g, val.b, val.a);\n } else if (val instanceof Vector4) {\n // for Vector4\n this.baseColorFactor.set(val.x, val.y, val.z, val.w);\n } else {\n // for vec4\n this.baseColorFactor.set(val[0], val[1], val[2], val[3]);\n }\n }\n\n /**\n * 是否有金属度粗超度纹理\n * @returns\n */\n hasMetallicRoughnessTexture (): boolean {\n return this.metallicRoughnessTexture !== undefined;\n }\n\n /**\n * 获取金属度粗超度纹理\n * @returns\n */\n getMetallicRoughnessTexture (): Texture {\n return this.metallicRoughnessTexture as Texture;\n }\n\n /**\n * 设置金属度粗超度纹理\n * @param val - 纹理\n */\n setMetallicRoughnessTexture (val: Texture) {\n this.metallicRoughnessTexture = val;\n }\n\n /**\n * 是否有法线纹理\n * @returns\n */\n hasNormalTexture (): boolean {\n return this.normalTexture !== undefined;\n }\n\n /**\n * 获取法线纹理\n * @returns\n */\n getNormalTexture (): Texture {\n return this.normalTexture as Texture;\n }\n\n /**\n * 设置法线纹理\n * @param val - 纹理\n */\n setNormalTexture (val: Texture) {\n this.normalTexture = val;\n }\n\n /**\n * 是否有遮挡纹理\n * @returns\n */\n hasOcclusionTexture (): boolean {\n return this.occlusionTexture !== undefined;\n }\n\n /**\n * 获取遮挡纹理\n * @returns\n */\n getOcclusionTexture (): Texture {\n return this.occlusionTexture as Texture;\n }\n\n /**\n * 设置遮挡纹理\n * @param val - 纹理\n */\n setOcclusionTexture (val: Texture) {\n this.occlusionTexture = val;\n }\n\n /**\n * 是否有自发光纹理\n * @returns\n */\n hasEmissiveTexture (): boolean {\n return this.emissiveTexture !== undefined;\n }\n\n /**\n * 获取自发光纹理\n * @returns\n */\n getEmissiveTexture (): Texture {\n return this.emissiveTexture as Texture;\n }\n\n /**\n * 设置自发光纹理\n * @param val - 纹理\n */\n setEmissiveTexture (val: Texture) {\n this.emissiveTexture = val;\n }\n\n /**\n * 是否有自发光值,包含强度\n * @returns\n */\n hasEmissiveValue (): boolean {\n return this.emissiveFactor.luminance() * this.emissiveIntensity > 0;\n }\n\n /**\n * 获取自发光颜色\n * @returns\n */\n getEmissiveFactor (): Color {\n return this.emissiveFactor;\n }\n\n /**\n * 设置自发光颜色\n * @param val - 颜色\n */\n setEmissiveFactor (val: Color | Vector3 | spec.vec3) {\n if (val instanceof Color) {\n // Color\n this.emissiveFactor.set(val.r, val.g, val.b, val.a);\n } else if (val instanceof Vector3) {\n // Vector3\n this.emissiveFactor.set(val.x, val.y, val.z, 0);\n } else {\n // vec3\n this.emissiveFactor.set(val[0], val[1], val[2], 0);\n }\n }\n\n /**\n * 获取自发光强度\n * @returns\n */\n getEmissiveIntensity (): number {\n return this.emissiveIntensity;\n }\n\n /**\n * 设置自发光强度\n * @param val - 强度\n */\n setEmissiveIntensity (val: number) {\n this.emissiveIntensity = val;\n }\n}\n\n/**\n * 材质类型,包括无光照材质和 PBR 材质\n */\nexport type PMaterial = PMaterialUnlit | PMaterialPBR;\n\n/**\n * 创建插件材质对象\n * @param material - Effects 材质对象\n * @returns 材质对象\n */\nexport function createPluginMaterial (material: Material): PMaterial {\n if (material.shader.getInstanceId() === PBRShaderGUID) {\n const materialPBR = new PMaterialPBR();\n\n materialPBR.create(material);\n\n return materialPBR;\n } else {\n const materialUnlit = new PMaterialUnlit();\n\n materialUnlit.create(material);\n\n return materialUnlit;\n }\n}\n","import type { Mesh, Material, TextureSourceOptions, Engine, Renderer } from '@galacean/effects';\nimport { spec, glContext, Texture, TextureSourceType, loadImage, generateGUID } from '@galacean/effects';\nimport type { ModelSkyboxComponentData, ModelSkyboxOptions } from '../index';\nimport { PObjectType, PMaterialType } from './common';\nimport { PEntity } from './object';\nimport { PMaterialBase } from './material';\nimport type { PSceneManager } from './scene';\nimport { WebGLHelper } from '../utility/plugin-helper';\nimport { Vector2, Vector3 } from './math';\nimport type { ModelSkyboxComponent } from '../plugin/model-item';\n\n/**\n * 天空盒类,支持天空盒的渲染和 IBL 光照效果\n */\nexport class PSkybox extends PEntity {\n /**\n * 所属的天空盒组件\n */\n owner?: ModelSkyboxComponent;\n /**\n * 是否渲染\n */\n renderable = true;\n /**\n * 强度\n */\n intensity = 1.0;\n /**\n * 反射强度\n */\n reflectionsIntensity = 1.0;\n /**\n * 辐射照度系数\n */\n irradianceCoeffs?: number[][];\n /**\n * 漫反射贴图\n */\n diffuseImage?: Texture;\n /**\n * 高光贴图\n */\n specularImage!: Texture;\n /**\n * 高光贴图大小\n */\n specularImageSize = 0;\n /**\n * 高光贴图 Mip 层数目\n */\n specularMipCount = 0;\n /**\n * BRDF 查询纹理\n */\n brdfLUT?: Texture;\n /**\n * 优先级\n */\n priority = 0;\n /**\n * 天空盒 Mesh\n */\n skyboxMesh?: Mesh;\n /**\n * 天空盒材质\n */\n skyboxMaterial?: PMaterialSkyboxFilter;\n /**\n * 是否构建过\n */\n isBuilt = false;\n\n /**\n * 构造函数\n * @param name - 名称\n * @param data - 天空盒参数\n * @param owner - 所属天空盒组件元素\n */\n constructor (name: string, data: ModelSkyboxComponentData, owner?: ModelSkyboxComponent) {\n super();\n this.name = name;\n this.type = PObjectType.skybox;\n this.visible = false;\n this.owner = owner;\n\n const { irradianceCoeffs } = data;\n\n this.renderable = data.renderable;\n this.intensity = data.intensity;\n this.reflectionsIntensity = data.reflectionsIntensity;\n if (irradianceCoeffs) {\n this.irradianceCoeffs = [];\n for (let i = 0; i < irradianceCoeffs.length; i += 3) {\n this.irradianceCoeffs.push([\n irradianceCoeffs[i],\n irradianceCoeffs[i + 1],\n irradianceCoeffs[i + 2],\n ]);\n }\n } else {\n this.irradianceCoeffs = [];\n }\n\n this.diffuseImage = data.diffuseImage as unknown as Texture;\n this.specularImage = data.specularImage as unknown as Texture;\n this.specularImageSize = data.specularImageSize;\n this.specularMipCount = data.specularMipCount;\n\n this.priority = owner?.item?.renderOrder || 0;\n }\n\n /**\n * 设置 BRDF 查询纹理\n * @param brdfLUT - 纹理\n */\n setup (brdfLUT?: Texture) {\n this.brdfLUT = brdfLUT;\n }\n\n /**\n * 构建天空盒,创建天空盒材质,从场景缓存中创建天空盒 Mesh\n * @param sceneCache - 场景缓存\n * @returns\n */\n build (scene: PSceneManager) {\n if (this.isBuilt) {\n return;\n }\n\n this.isBuilt = true;\n this.skyboxMaterial = new PMaterialSkyboxFilter();\n this.skyboxMaterial.create(this);\n this.skyboxMaterial.build();\n //\n const sceneCache = scene.getSceneCache();\n\n this.skyboxMesh = sceneCache.getFilterMesh('SkyboxFilterPlane', this.skyboxMaterial);\n this.skyboxMesh.priority = this.priority;\n this.skyboxMaterial.updateUniforms(this.skyboxMesh.material);\n }\n\n /**\n * 渲染天空盒\n * @param scene - 场景\n * @param renderer - 渲染器\n */\n override render (scene: PSceneManager, renderer: Renderer) {\n this.updateMaterial(scene);\n\n if (this.visible && this.renderable && this.skyboxMesh !== undefined) {\n const mesh = this.skyboxMesh;\n\n renderer.drawGeometry(mesh.geometry, mesh.material);\n }\n }\n\n /**\n * 销毁\n */\n override dispose () {\n super.dispose();\n this.owner = undefined;\n this.diffuseImage = undefined;\n //@ts-expect-error\n this.specularImage = undefined;\n this.brdfLUT = undefined;\n this.skyboxMesh = undefined;\n this.skyboxMaterial?.dispose();\n this.skyboxMaterial = undefined;\n }\n\n private updateMaterial (scene: PSceneManager) {\n this.build(scene);\n\n if (this.visible && this.renderable && this.skyboxMesh !== undefined && this.skyboxMaterial !== undefined) {\n const sceneStates = scene.sceneStates;\n const camera = sceneStates.camera;\n const viewMatrix = sceneStates.viewMatrix;\n const newProjViewMatrix = camera.getNewProjectionMatrix(camera.fov).multiply(viewMatrix).invert();\n const material = this.skyboxMesh.material;\n\n this.skyboxMaterial.updateUniforms(material);\n material.setMatrix('_InvViewProjectionMatrix', newProjViewMatrix);\n }\n }\n\n /**\n * 是否可用,根据内部的强度、辐射照度系数、漫反射贴图和高光贴图状态\n */\n get available (): boolean {\n if (!this.isValid()) { return false; }\n\n if (this.intensity <= 0 && this.reflectionsIntensity <= 0) { return false; }\n\n if (this.irradianceCoeffs === undefined && this.diffuseImage === undefined) { return false; }\n\n return this.specularImage !== undefined && this.specularMipCount >= 0;\n }\n\n /**\n * 当前强度,如果不可见返回 0\n */\n get currentIntensity (): number {\n return this.visible ? this.intensity : 0;\n }\n\n /**\n * 当前反射强度,如果不可见返回 0\n */\n get currentReflectionsIntensity (): number {\n return this.visible ? this.reflectionsIntensity : 0;\n }\n\n /**\n * 是否有漫反射贴图\n */\n get hasDiffuseImage (): boolean {\n return this.diffuseImage !== undefined;\n }\n\n /**\n * 是否有辐射照度系数\n */\n get hasIrradianceCoeffs (): boolean {\n return this.irradianceCoeffs !== undefined;\n }\n\n}\n\n/**\n * 天空盒材质类\n */\nexport class PMaterialSkyboxFilter extends PMaterialBase {\n /**\n * 强度\n */\n intensity = 1.0;\n /**\n * 反射强度\n */\n reflectionsIntensity = 1.0;\n /**\n * BRDF 查询纹理\n */\n brdfLUT?: Texture;\n /**\n * 辐射照度系数\n */\n irradianceCoeffs?: number[][];\n /**\n * 漫反射贴图\n */\n diffuseImage?: Texture;\n /**\n * 高光贴图\n */\n specularImage!: Texture;\n /**\n * 高光贴图 Mip 数目\n */\n specularMipCount = 0;\n\n /**\n * 创建天空盒材质,从天空盒对象\n * @param skybox - 天空盒对象\n */\n create (skybox: PSkybox) {\n this.type = PObjectType.material;\n this.materialType = PMaterialType.skyboxFilter;\n this.ZTest = false;\n //\n this.name = skybox.name;\n this.intensity = skybox.intensity;\n this.reflectionsIntensity = skybox.reflectionsIntensity;\n this.brdfLUT = skybox.brdfLUT;\n this.irradianceCoeffs = skybox.irradianceCoeffs;\n this.diffuseImage = skybox.diffuseImage;\n this.specularImage = skybox.specularImage;\n this.specularMipCount = skybox.specularMipCount;\n }\n\n /**\n * 销毁,需要解除资源引用\n */\n override dispose () {\n super.dispose();\n this.brdfLUT = undefined;\n this.irradianceCoeffs = undefined;\n this.diffuseImage = undefined;\n // @ts-expect-error\n this.specularImage = undefined;\n }\n\n /**\n * 获取着色器特性列表\n * @returns\n */\n override getShaderFeatures (): string[] {\n const featureList: string[] = [];\n\n featureList.push('USE_IBL 1');\n featureList.push('USE_TEX_LOD 1');\n if (this.diffuseImage === undefined) { featureList.push('IRRADIANCE_COEFFICIENTS 1'); }\n\n return featureList;\n }\n\n /**\n * 更新着色器 Uniform 数据\n * @param material - 对应的 Core 层材质\n */\n override updateUniforms (material: Material) {\n if (this.brdfLUT === undefined) {\n throw new Error('Setup brdfLUT for skybox at first.');\n }\n\n material.setVector2('_IblIntensity', new Vector2(2.0, 2.0));\n material.setTexture('_brdfLUT', this.brdfLUT);\n if (this.diffuseImage !== undefined) {\n material.setTexture('_DiffuseEnvSampler', this.diffuseImage);\n } else {\n const coeffs = this.irradianceCoeffs;\n\n if (coeffs === undefined || coeffs.length != 9) { throw new Error(`Invalid skybox irradiance coeffs ${coeffs}.`); }\n\n const aliasName = ['l00', 'l1m1', 'l10', 'l11', 'l2m2', 'l2m1', 'l20', 'l21', 'l22'];\n\n aliasName.forEach((n, i) => {\n material.setVector3(`_shCoefficients.${n}`, Vector3.fromArray(coeffs[i] as spec.vec3));\n });\n }\n material.setInt('_MipCount', this.specularMipCount - 1);\n material.setTexture('_SpecularEnvSampler', this.specularImage);\n }\n\n /**\n * 设置对应的材质状态\n * @param material - 对应的 Core 层材质\n */\n override setMaterialStates (material: Material) {\n material.depthTest = true;\n material.depthMask = false;\n this.setFaceSideStates(material);\n }\n}\n\n/**\n * 图像缓冲区数据接口\n */\nexport interface PImageBufferData {\n /**\n * 类型,总是 buffer\n */\n type: 'buffer',\n /**\n * 数组\n */\n data: Uint8Array,\n /**\n * MIME 类型\n */\n mimeType: string,\n}\n\n/**\n * 图像数据类型,字符串(URL)或者图像缓冲区数据\n */\nexport type PImageData = string | PImageBufferData;\n\n/**\n * 天空盒基础参数接口\n */\nexport interface PSkyboxBaseParams {\n /**\n * 是否渲染\n */\n renderable: boolean,\n /**\n * 强度\n */\n intensity: number,\n /**\n * 反射强度\n */\n reflectionsIntensity: number,\n /**\n * 辐射照度系数\n */\n irradianceCoeffs?: number[],\n /**\n * 高光贴图 Mip 层数\n */\n specularMipCount: number,\n /**\n * 高光贴图大小\n */\n specularImageSize: number,\n}\n\n/**\n * 天空盒 URL 参数接口\n */\nexport interface PSkyboxURLParams extends PSkyboxBaseParams {\n /**\n * 类型,总是 url\n */\n type: 'url',\n /**\n * 漫反射贴图 URL 列表\n */\n diffuseImage?: string[],\n /**\n * 高光贴图 URL 二级列表\n */\n specularImage: string[][],\n}\n\n/**\n * 天空盒缓冲区参数接口\n */\nexport interface PSkyboxBufferParams extends PSkyboxBaseParams {\n /**\n * 类型,总是 buffer\n */\n type: 'buffer',\n /**\n * 漫反射贴图列表\n */\n diffuseImage?: PImageBufferData[],\n /**\n * 高光贴图二级列表\n */\n specularImage: PImageBufferData[][],\n}\n\n/**\n * 天空盒参数类型\n */\nexport type PSkyboxParams = PSkyboxURLParams | PSkyboxBufferParams;\n\nexport enum PSkyboxType {\n NFT = 0,\n FARM,\n}\n\n/**\n * 天空盒创建类\n */\nexport class PSkyboxCreator {\n /**\n * 获取 BRDF 查询纹理选项\n * @returns 纹理源选项\n */\n static async getBrdfLutTextureOptions (): Promise<TextureSourceOptions> {\n const brdfURL = 'https://gw.alipayobjects.com/zos/gltf-asset/61420044606400/lut-ggx.png';\n //const brdfURL = 'https://gw.alipayobjects.com/zos/gltf-asset/58540818729423/a4191420-a8cd-432c-8e36-9bd02a67ec85.png';\n const brdfLutImage = await loadImage(brdfURL);\n\n const brdfLutOpts: TextureSourceOptions = {\n name: 'brdfLut',\n wrapS: glContext.CLAMP_TO_EDGE,\n wrapT: glContext.CLAMP_TO_EDGE,\n magFilter: glContext.LINEAR,\n minFilter: glContext.LINEAR,\n anisotropic: 1,\n sourceType: TextureSourceType.image,\n image: brdfLutImage,\n generateMipmap: false,\n flipY: false,\n premultiplyAlpha: false,\n };\n\n return brdfLutOpts;\n }\n\n /**\n * 创建 BRDF 查询纹理\n * @param engine - 引擎\n * @returns 纹理\n */\n static async createBrdfLutTexture (engine: Engine): Promise<Texture> {\n const brdfLutOpts = await this.getBrdfLutTextureOptions();\n const brdfLutTexture = Texture.create(engine, brdfLutOpts);\n\n return brdfLutTexture;\n }\n\n /**\n * 创建天空盒选项\n * @param engine - 引擎\n * @param params - 天空盒参数\n * @returns 天空盒选项\n */\n static async createSkyboxOptions (engine: Engine, params: PSkyboxParams): Promise<ModelSkyboxOptions> {\n const specularImage = await this.createSpecularCubeMap(engine, params);\n const diffuseImage = await this.createDiffuseCubeMap(engine, params);\n const { renderable, intensity, reflectionsIntensity, irradianceCoeffs, specularImageSize, specularMipCount } = params;\n const skyboxOptions: ModelSkyboxOptions = {\n renderable,\n intensity,\n reflectionsIntensity,\n // @ts-expect-error\n irradianceCoeffs,\n diffuseImage,\n specularImage,\n specularImageSize,\n specularMipCount,\n };\n\n return skyboxOptions;\n }\n\n /**\n * 创建天空盒选项\n * @param engine - 引擎\n * @param params - 天空盒参数\n * @returns 天空盒选项\n */\n static createSkyboxComponentData (params: PSkyboxParams) {\n const specularCubeData = PSkyboxCreator.getSpecularCubeMapData(params);\n const diffuseCubeData = PSkyboxCreator.getDiffuseCubeMapData(params);\n const { renderable, intensity, reflectionsIntensity, irradianceCoeffs, specularImageSize, specularMipCount } = params;\n\n let diffuseImage: spec.DataPath;\n const imageList: spec.Image[] = [];\n const textureOptionsList: TextureSourceOptions[] = [];\n\n if (diffuseCubeData) {\n imageList.push(...diffuseCubeData.images);\n textureOptionsList.push(diffuseCubeData.textureOptions);\n diffuseImage = {\n id: diffuseCubeData.textureOptions.id!,\n };\n }\n imageList.push(...specularCubeData.images);\n textureOptionsList.push(specularCubeData.textureOptions);\n const specularImage = { id: specularCubeData.textureOptions.id };\n\n const componentData: ModelSkyboxComponentData = {\n id: generateGUID(),\n dataType: spec.DataType.SkyboxComponent,\n item: {\n id: generateGUID(),\n },\n renderable,\n intensity,\n reflectionsIntensity,\n irradianceCoeffs,\n // @ts-expect-error\n diffuseImage,\n // @ts-expect-error\n specularImage,\n specularImageSize,\n specularMipCount,\n };\n\n return {\n imageList,\n textureOptionsList,\n component: componentData,\n };\n }\n\n /**\n * 创建高光 Cube Map 纹理\n * @param engine - 引擎\n * @param params - 天空盒参数\n * @returns 纹理\n */\n static async createSpecularCubeMap (engine: Engine, params: PSkyboxParams): Promise<Texture> {\n // const configOptions: TextureConfigOptions = {\n // wrapS: glContext.CLAMP_TO_EDGE,\n // wrapT: glContext.CLAMP_TO_EDGE,\n // magFilter: glContext.LINEAR,\n // minFilter: glContext.LINEAR_MIPMAP_LINEAR,\n // };\n\n if (params.type === 'url') {\n return WebGLHelper.createTextureCubeMipmapFromURL(engine, params.specularImage);\n } else {\n return WebGLHelper.createTextureCubeMipmapFromBuffer(engine, params.specularImage, params.specularImageSize);\n }\n }\n\n static getSpecularCubeMapData (params: PSkyboxParams) {\n const imageDatas: spec.Image[] = [];\n const mipmaps: spec.DataPath[][] = [];\n\n params.specularImage.forEach(cubemap => {\n const mipmap: spec.DataPath[] = [];\n\n cubemap.forEach(image => {\n const imageId = generateGUID();\n\n imageDatas.push({\n id: imageId,\n // @ts-expect-error\n url: image,\n });\n mipmap.push({ id: imageId });\n });\n mipmaps.push(mipmap);\n });\n const textureOptions: TextureSourceOptions = {\n id: generateGUID(),\n dataType: spec.DataType.Texture,\n sourceType: TextureSourceType.mipmaps,\n target: glContext.TEXTURE_CUBE_MAP,\n // @ts-expect-error\n mipmaps,\n ...WebGLHelper.cubemapMipTexConfig,\n };\n\n return {\n images: imageDatas,\n textureOptions,\n };\n }\n\n /**\n * 创建漫反射纹理\n * @param engine - 引擎\n * @param params - 天空盒参数\n * @returns 纹理或未定义\n */\n static async createDiffuseCubeMap (engine: Engine, params: PSkyboxParams): Promise<Texture | null> {\n if (params.diffuseImage === undefined) { return null; }\n\n if (params.type === 'url') {\n return WebGLHelper.createTextureCubeFromURL(engine, params.diffuseImage);\n } else {\n return WebGLHelper.createTextureCubeFromBuffer(engine, params.diffuseImage);\n }\n }\n\n static getDiffuseCubeMapData (params: PSkyboxParams) {\n if (params.diffuseImage === undefined) {\n return;\n }\n\n const imageDatas: spec.Image[] = [];\n const cubemap: spec.DataPath[] = [];\n\n params.diffuseImage.forEach(image => {\n const imageId = generateGUID();\n\n imageDatas.push({\n id: imageId,\n // @ts-expect-error\n url: image,\n });\n cubemap.push({ id: imageId });\n });\n\n const textureOptions: TextureSourceOptions = {\n id: generateGUID(),\n dataType: spec.DataType.Texture,\n sourceType: TextureSourceType.mipmaps,\n target: glContext.TEXTURE_CUBE_MAP,\n // @ts-expect-error\n mipmaps: [cubemap],\n ...WebGLHelper.cubemapTexConfig,\n };\n\n return {\n images: imageDatas,\n textureOptions,\n };\n }\n\n /**\n * 创建天空盒参数\n * @param skyboxType - 天空盒类型\n * @returns 天空盒参数\n */\n static getSkyboxParams (skyboxType = PSkyboxType.NFT): PSkyboxURLParams {\n const specularImage = this.getSpecularImageList(skyboxType);\n const params: PSkyboxURLParams = {\n type: 'url',\n renderable: true,\n intensity: 1.8,\n reflectionsIntensity: 1.8,\n irradianceCoeffs: this.getIrradianceCoeffs(skyboxType),\n diffuseImage: this.getDiffuseImageList(skyboxType, specularImage),\n specularImage: specularImage,\n specularImageSize: Math.pow(2, specularImage.length - 1),\n specularMipCount: specularImage.length,\n };\n\n return params;\n }\n\n // TODO: 待移除?\n private async checkCubeMapImage (imageList: string[]) {\n let lastImage!: HTMLImageElement;\n const specularImageLists: HTMLImageElement[][] = [];\n\n for (let i = 0; i < imageList.length; i++) {\n const image = await loadImage(imageList[i]);\n\n if (i > 0) {\n if (i % 6 === 0) {\n if (image.width * 2 !== lastImage.width || image.height * 2 !== lastImage.height) {\n throw new Error(`Invalid cube map list1: index ${i}, image0 ${lastImage}, image1 ${image}.`);\n }\n } else {\n if (image.width !== lastImage.width || image.height !== lastImage.height) {\n throw new Error(`Invalid cube map list2: index ${i}, image0 ${lastImage}, image1 ${image}.`);\n }\n }\n }\n if (i % 6 === 0) { specularImageLists.push([]); }\n const lastList = specularImageLists[specularImageLists.length - 1];\n\n lastList.push(image);\n lastImage = image;\n }\n }\n\n private static getIrradianceCoeffs (skyboxType: PSkyboxType): number[] | undefined {\n let dataArray: number[] = [];\n\n switch (skyboxType) {\n case PSkyboxType.NFT: {\n return undefined;\n }\n case PSkyboxType.FARM: dataArray = [\n 0.2665672302246094, 0.27008703351020813, 0.2836797833442688, -0.15421263873577118, -0.15587495267391205,\n -0.16371899843215942, 0.06483837962150574, 0.06468029320240021, 0.06616337597370148, -0.11598809063434601,\n -0.11796595901250839, -0.1261979341506958, 0.023678265511989594, 0.02456280030310154, 0.02591511607170105,\n -0.032404184341430664, -0.03217344358563423, -0.03126845508813858, 0.009165619499981403, 0.009345818310976028,\n 0.008521141484379768, -0.021998587995767593, -0.02203795686364174, -0.021759089082479477, 0.00046658870996907353,\n 0.0005610908847302198, 0.0007202711421996355,\n ];\n\n break;\n default: dataArray = [\n 0.37462672591209412, 0.35230118036270142, 0.33955901861190796, 0.12082185596227646, 0.18179306387901306,\n 0.26912716031074524, -0.020699946209788322, -0.0046484274789690971, 0.00797625258564949, -0.068421706557273865,\n -0.051390238106250763, -0.03317255899310112, 0.044127799570560455, 0.028159862384200096, 0.0074287452735006809,\n 0.078870773315429688, 0.067734844982624054, 0.047382339835166931, -0.012322401627898216, -0.015187464654445648,\n -0.020201763138175011, -0.1091032400727272, -0.0823250338435173, -0.046844951808452606, -0.057797044515609741,\n -0.066892541944980621, -0.08212742954492569,\n ];\n\n break;\n }\n\n return dataArray;\n }\n\n private static getDiffuseImageList (skyboxType: PSkyboxType, images: string[][]): string[] | undefined {\n if (skyboxType == PSkyboxType.NFT) {\n return images[images.length - 1];\n }\n\n return undefined;\n }\n\n private static getSpecularImageList (skyboxType: PSkyboxType): string[][] {\n const imageList: string[] = [];\n\n switch (skyboxType) {\n case PSkyboxType.FARM: imageList.push(...this.getSpecularImageListAntFarm());\n\n break;\n default: imageList.push(...this.getSpecularImageListNFT());\n\n break;\n }\n\n const levelList: string[][] = [];\n\n imageList.forEach((v, i) => {\n if (i % 6 === 0) {\n levelList.push([]);\n }\n const currentLevel = levelList[levelList.length - 1];\n\n currentLevel.push(v);\n });\n\n return levelList;\n }\n\n private static getSpecularImageListNFT (): string[] {\n return [\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img0.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img1.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img2.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img3.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img5.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img4.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img6.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img7.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img8.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img9.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img11.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img10.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img12.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img13.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img14.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img15.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img17.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img16.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img18.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img19.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img20.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img21.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img23.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img22.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img24.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img25.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img26.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img27.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img29.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img28.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img30.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img31.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img32.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img33.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img35.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img34.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img36.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img37.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img38.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img39.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img41.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img40.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img42.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img43.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img44.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img45.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img47.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img46.png',\n ];\n }\n\n private static getSpecularImageListAntFarm (): string[] {\n return [\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_32_0.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_32_1.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_32_2.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_32_3.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_32_4.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_32_5.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_16_0.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_16_1.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_16_2.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_16_3.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_16_4.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_16_5.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_8_0.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_8_1.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_8_2.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_8_3.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_8_4.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_8_5.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_4_0.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_4_1.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_4_2.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_4_3.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_4_4.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_4_5.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_2_0.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_2_1.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_2_2.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_2_3.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_2_4.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_2_5.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_1_0.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_1_1.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_1_2.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_1_3.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_1_4.png',\n 'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_1_5.png',\n ];\n }\n}\n\n","import type { Mesh, Geometry, TextureSourceOptions, RenderPass, spec, Engine } from '@galacean/effects';\nimport { Texture } from '@galacean/effects';\nimport type { ModelSkyboxOptions } from '../index';\nimport type { FBOOptions } from '../utility/ri-helper';\nimport type { PMaterialBase } from './material';\nimport type { PSkyboxParams } from './skybox';\nimport { PSkyboxCreator } from './skybox';\nimport { WebGLHelper, MeshHelper, PluginHelper } from '../utility/plugin-helper';\n\n/**\n * 合成缓存类,负责管理插件 WebGL 相关资源加载和创建\n */\nexport class CompositionCache {\n // TODO: 待移除?\n private loadSkybox = false;\n // 天空盒依赖的贴图资源\n private brdfLutTexture?: Texture;\n //\n private meshCache: Map<string, Mesh>;\n private textureCache: Map<string, Texture>;\n private geometryCache: Map<string, Geometry>;\n private renderPassCache: Map<string, RenderPass>;\n //\n private static brdfLutTexOptions?: TextureSourceOptions;\n private static skyboxOptions?: ModelSkyboxOptions;\n\n /**\n * 加载静态的纹理数据\n * @returns\n */\n static async loadStaticResources () {\n if (this.brdfLutTexOptions !== undefined) {\n // 避免重复创建\n return;\n }\n\n this.brdfLutTexOptions = await PSkyboxCreator.getBrdfLutTextureOptions();\n }\n\n /**\n * 创建天空盒数据,如果传入的 params 为空,会使用内置的天空盒参数\n * @param engine - 引擎\n * @param params - 天空盒参数\n * @returns 天空盒数据\n */\n static async genSkyboxOptions (engine: Engine, params?: PSkyboxParams): Promise<ModelSkyboxOptions> {\n let newParams = params;\n\n if (newParams === undefined) {\n newParams = PSkyboxCreator.getSkyboxParams();\n }\n\n CompositionCache.skyboxOptions = await PSkyboxCreator.createSkyboxOptions(engine, newParams);\n\n return CompositionCache.skyboxOptions;\n }\n\n constructor (private engine: Engine) {\n this.meshCache = new Map();\n this.textureCache = new Map();\n this.geometryCache = new Map();\n this.renderPassCache = new Map();\n }\n\n /**\n * 记录是否加载天空盒,缓存天空盒相关的查询纹理\n * @param loadSkybox - 是否加载天空盒\n */\n setup (loadSkybox: boolean) {\n this.loadSkybox = loadSkybox;\n\n if (this.brdfLutTexture === undefined || this.brdfLutTexture.isDestroyed) {\n if (CompositionCache.brdfLutTexOptions === undefined) {\n throw new Error('Please load brdfLutTexOptions at first.');\n }\n //\n const brdfLutTextureName = 'brdfLutTexture';\n\n this.brdfLutTexture = Texture.create(this.engine, CompositionCache.brdfLutTexOptions);\n this.deleteTexture(brdfLutTextureName);\n this.setTexture(brdfLutTextureName, this.brdfLutTexture);\n }\n }\n\n /**\n * 获取缓存的纹理对象\n * @param name - 名称\n * @returns 纹理对象\n */\n getTexture (name: string): Texture | undefined {\n return this.textureCache.get(name);\n }\n\n /**\n * 设置纹理对象缓存\n * @param name - 名称\n * @param tex - 纹理对象\n */\n setTexture (name: string, tex: Texture) {\n this.textureCache.set(name, tex);\n }\n\n /**\n * 获取或者创建纹理对象\n * @param name - 名称\n * @param options - 纹理参数\n * @returns 纹理对象\n */\n getOrCreateTexture (name: string, options: TextureSourceOptions): Texture {\n const tex = this.textureCache.get(name);\n\n if (tex !== undefined) {\n return tex;\n }\n const newTex = Texture.create(this.engine, options);\n\n this.textureCache.set(name, newTex);\n\n return newTex;\n }\n\n /**\n * 根据名称删除纹理对象\n * @param name - 名称\n * @returns 是否删除成功\n */\n deleteTexture (name: string): boolean {\n const tex = this.textureCache.get(name);\n\n if (tex !== undefined) {\n tex.dispose();\n }\n\n return this.textureCache.delete(name);\n }\n\n /**\n * 获取或者创建几何体\n * @param name - 名称\n * @param geomJson - 几何体参数\n * @param bins - 几何体数据\n * @returns 几何体\n */\n getOrCreateGeometry (name: string, geomJson: spec.GeometryOptionsJSON, bins: ArrayBuffer[]): Geometry {\n const cachedGeom = this.geometryCache.get(name);\n\n if (cachedGeom !== undefined) {\n return cachedGeom;\n }\n\n const geom = PluginHelper.createGeometry(this.engine, geomJson, bins);\n\n this.geometryCache.set(name, geom);\n\n return geom;\n }\n\n /**\n * 获取滤波 Mesh\n * @param name - 名称\n * @param material - 材质\n * @returns\n */\n getFilterMesh (name: string, material: PMaterialBase): Mesh {\n const cachedMesh = this.meshCache.get(name);\n\n if (cachedMesh !== undefined) {\n return cachedMesh;\n }\n\n const mesh = MeshHelper.createFilterMesh(this.engine, name, material);\n\n this.meshCache.set(name, mesh);\n\n return mesh;\n }\n\n getShadowBasePass (name: string, priority: number, meshList: Mesh[], fboOptions: FBOOptions): RenderPass {\n return this.getRenderPass(name, priority, meshList, fboOptions);\n }\n\n getShadowFilterPass (name: string, priority: number, meshList: Mesh[], fboOptions: FBOOptions): RenderPass {\n return this.getRenderPass(name, priority, meshList, fboOptions);\n }\n\n /**\n * 获取渲染 Pass\n * @param name - 名称\n * @param priority - 优先级\n * @param meshList - Mesh 列表\n * @param fboOptions - FBO 参数\n * @returns\n */\n getRenderPass (name: string, priority: number, meshList: Mesh[], fboOptions: FBOOptions): RenderPass {\n const cachedPass = this.renderPassCache.get(name);\n\n if (cachedPass !== undefined) {\n cachedPass.setMeshes([]);\n meshList.forEach(mesh => { cachedPass.addMesh(mesh); });\n\n return cachedPass;\n } else {\n const renderer = this.engine.renderer;\n const renderPass = WebGLHelper.createRenderPass(renderer, name, priority, meshList, fboOptions);\n\n this.renderPassCache.set(name, renderPass);\n\n return renderPass;\n }\n }\n\n /**\n * 销毁缓存,释放所有缓存的对象\n */\n dispose () {\n // @ts-expect-error\n this.engine = null;\n this.brdfLutTexture = undefined;\n this.meshCache.forEach(mesh => {\n WebGLHelper.deleteMesh(mesh);\n });\n this.meshCache.clear();\n //\n this.textureCache.forEach(texture => {\n WebGLHelper.deleteTexture(texture);\n });\n this.textureCache.clear();\n //\n this.geometryCache.forEach(geometry => {\n WebGLHelper.deleteGeometry(geometry);\n });\n this.geometryCache.clear();\n //\n this.renderPassCache.forEach(pass => {\n WebGLHelper.deleteRenderPass(pass);\n });\n this.renderPassCache.clear();\n }\n\n /**\n * 获取所有的渲染 Pass\n * @returns\n */\n getRenderPasses (): RenderPass[] {\n const resList: RenderPass[] = [];\n\n this.renderPassCache.forEach(pass => {\n resList.push(pass);\n });\n\n return resList;\n }\n\n /**\n * 获取纹理对象,用户 IBL 渲染\n * @returns\n */\n getBrdfLutTexture (): Texture | undefined {\n return this.brdfLutTexture;\n }\n\n /**\n * 获取天空盒参数\n * @returns\n */\n getSkyboxOptions (): ModelSkyboxOptions | undefined {\n return CompositionCache.skyboxOptions;\n }\n}\n\n","import type { GeometryProps, Engine } from '@galacean/effects';\nimport { glContext, Geometry, Material, Mesh, RenderPassAttachmentStorageType } from '@galacean/effects';\nimport type { Matrix4 } from '../runtime/math';\nimport { Vector2, Vector3 } from '../runtime/math';\n\n/**\n * FBO 选项类,负责构造 FBO 创建时的选项信息\n */\nexport class FBOOptions {\n /**\n * 分辨率\n */\n resolution: Vector2;\n /**\n * 颜色附件列表\n */\n colorAttachments: object[];\n /**\n * 深度附件\n */\n depthAttachment?: any;\n\n /**\n * 构造函数\n * @param options - FBO 参数\n */\n constructor (options: Record<string, any>) {\n this.resolution = options.resolution ?? new Vector2(512, 512);\n this.colorAttachments = options.colorAttachments ?? [];\n this.depthAttachment = options.depthAttachment;\n }\n\n /**\n * 添加深度附件\n * @param options - 深度附件参数\n */\n addDepthAttachment (options: Record<string, any>) {\n this.depthAttachment = {\n storageType: options.storageType ?? RenderPassAttachmentStorageType.depth_16_texture,\n };\n }\n\n /**\n * 添加默认深度附件,数据格式是 depth_16_texture\n */\n addDefaultDepthAttachment () {\n this.depthAttachment = { storageType: RenderPassAttachmentStorageType.depth_16_texture };\n }\n\n /**\n * 删除深度附件\n */\n deleteDepthAttachment () {\n this.depthAttachment = undefined;\n }\n\n /**\n * 添加颜色附件\n * @param options - 颜色附件参数\n */\n addColorAttachment (options: Record<string, any>) {\n this.colorAttachments.push({\n texture: {\n format: options.format ?? glContext.RGBA,\n type: options.type ?? glContext.HALF_FLOAT,\n minFilter: options.filter ?? glContext.LINEAR,\n magFilter: options.filter ?? glContext.LINEAR,\n },\n });\n }\n\n /**\n * 删除颜色附件,按照索引值\n * @param target - 颜色附件索引值\n */\n deleteColorAttachment (target: number) {\n if (target >= 0 && target < this.colorAttachments.length) {\n this.colorAttachments.splice(target, 1);\n }\n }\n\n /**\n * 获取视口大小\n */\n get viewport (): [number, number, number, number] {\n return [0, 0, this.resolution.x, this.resolution.y];\n }\n}\n\n/**\n * 包围盒 Mesh 类,负责 3D Mesh 测试包围盒的显示\n */\nexport class BoxMesh {\n /**\n * core 层 Mesh 对象\n */\n mesh: Mesh;\n\n /**\n * 构造函数,创建基础 Mesh 对象\n * @param engine - 引擎\n * @param priority - 优先级\n */\n constructor (engine: Engine, priority: number) {\n const material = Material.create(\n engine,\n {\n shader: {\n vertex: this.vertexShader,\n fragment: this.fragmentShader,\n shared: true,\n },\n }\n );\n\n material.depthTest = true;\n material.depthMask = true;\n this.mesh = Mesh.create(\n engine,\n {\n name: 'boxMesh',\n material,\n geometry: Geometry.create(engine, this.geometry),\n priority,\n }\n );\n }\n\n /**\n * 更新包围盒着色器 Uniform 数据\n * @param modelMatrix - 模型矩阵\n * @param viewProjMatrix - 相机投影矩阵\n * @param positions - 位置数组\n * @param lineColor - 线颜色\n */\n update (modelMatrix: Matrix4, viewProjMatrix: Matrix4, positions: Float32Array, lineColor: Vector3) {\n const material = this.mesh.material;\n\n material.setMatrix('effects_ObjectToWorld', modelMatrix);\n material.setMatrix('effects_MatrixVP', viewProjMatrix);\n for (let i = 0; i < positions.length; i += 3) {\n material.setVector3(`_PositionList[${i / 3}]`, Vector3.fromArray(positions, i));\n }\n material.setVector3('_LineColor', lineColor);\n }\n\n /**\n * 销毁,需要销毁 Mesh 对象\n */\n dispose () {\n this.mesh.dispose();\n // @ts-expect-error\n this.mesh = undefined;\n }\n\n /**\n * 获取顶点着色器代码\n */\n get vertexShader (): string {\n return `\n precision highp float;\n\n uniform mat4 effects_ObjectToWorld;\n uniform mat4 effects_MatrixVP;\n uniform vec3 _PositionList[8];\n attribute vec3 aPos;\n void main(){\n int index = int(aPos.x + 0.5);\n vec4 pos = effects_ObjectToWorld * vec4(_PositionList[index], 1);\n gl_Position = effects_MatrixVP * pos;\n }\n `;\n }\n\n /**\n * 获取片段着色器代码\n */\n get fragmentShader (): string {\n return `\n precision highp float;\n\n uniform vec3 _LineColor;\n void main(){\n gl_FragColor = vec4(_LineColor, 1);\n }\n `;\n }\n\n /**\n * 获取基础几何体\n */\n get geometry (): GeometryProps {\n const data = new Float32Array([0, 1, 2, 3, 4, 5, 6, 7]);\n const index = new Uint32Array([\n 0, 1, 1, 2, 2, 3, 3, 0,\n 4, 5, 5, 6, 6, 7, 7, 4,\n 0, 4, 1, 5, 2, 6, 3, 7,\n ]);\n\n return {\n attributes: {\n aPos: {\n type: glContext.FLOAT,\n size: 1,\n data,\n stride: Float32Array.BYTES_PER_ELEMENT,\n offset: 0,\n },\n },\n mode: glContext.LINES,\n indices: { data: index },\n drawStart: 0,\n drawCount: 24,\n };\n }\n}\n","/**\n * 双状态 Set,用于保存前一帧和当前帧的信息\n */\nexport class TwoStatesSet<T> {\n /**\n * 当前帧 Set\n */\n now: Set<T>;\n /**\n * 前一帧 Set\n */\n last: Set<T>;\n\n constructor () {\n this.now = new Set();\n this.last = new Set();\n }\n\n /**\n * 清空 last 和 now\n */\n clear () {\n this.now.clear();\n this.last.clear();\n }\n\n /**\n * 状态前进,当前变成 last,now 被清空\n */\n forward () {\n const temp = this.last;\n\n this.last = this.now;\n this.now = temp;\n this.now.clear();\n }\n\n /**\n * 遍历当前帧新加的元素\n *\n * @param callbackfn - 增加新元素的回调\n */\n forAddedItem (callbackfn: (value: T) => void) {\n this.now.forEach(item => {\n if (!this.last.has(item)) {\n callbackfn(item);\n }\n });\n }\n\n /**\n * 遍历当前帧删除的元素\n *\n * @param callbackfn - 删除旧元素的回调\n */\n forRemovedItem (callbackfn: (value: T) => void) {\n this.last.forEach(item => {\n if (!this.now.has(item)) {\n callbackfn(item);\n }\n });\n }\n\n /**\n * 遍历当前帧所有的元素\n *\n * @param callbackfn - 当前帧元素的回调\n */\n forNowItem (callbackfn: (value: T) => void) {\n this.now.forEach(item => {\n callbackfn(item);\n });\n }\n\n}\n","import type {\n Scene,\n SceneLoadOptions,\n Composition,\n RenderFrame,\n VFXItemProps,\n Engine,\n Component,\n Renderer,\n} from '@galacean/effects';\nimport {\n VFXItem,\n AbstractPlugin,\n spec,\n Behaviour,\n PLAYER_OPTIONS_ENV_EDITOR,\n effectsClass,\n GLSLVersion,\n Geometry,\n} from '@galacean/effects';\nimport { CompositionCache } from '../runtime/cache';\nimport { PluginHelper } from '../utility/plugin-helper';\nimport { PTransform, PSceneManager, PCoordinate, PBRShaderGUID, UnlitShaderGUID } from '../runtime';\nimport { DEG2RAD, Matrix4, Vector3 } from '../runtime/math';\nimport { VFX_ITEM_TYPE_3D } from './const';\nimport { ModelCameraComponent, ModelLightComponent, ModelMeshComponent } from './model-item';\nimport { fetchPBRShaderCode, fetchUnlitShaderCode } from '../utility';\n\n/**\n * Model 插件类,负责支持播放器中的 3D 功能\n */\nexport class ModelPlugin extends AbstractPlugin {\n /**\n * 插件名称\n */\n override name = 'model';\n /**\n * 合成缓存器\n */\n cache: CompositionCache;\n /**\n * 场景参数\n */\n sceneParams: Record<string, any>;\n\n /**\n * 整个 load 阶段都不会创建 GL 相关的对象,只创建 JS 对象\n * @param scene - 场景\n * @param options - 加载选项\n */\n static override async prepareResource (scene: Scene, options: SceneLoadOptions): Promise<void> {\n if (options.pluginData !== undefined) {\n const keyList = [\n 'compatibleMode',\n 'renderSkybox',\n 'visBoundingBox',\n 'autoAdjustScene',\n 'enableDynamicSort',\n 'renderMode3D',\n 'renderMode3DUVGridSize',\n ];\n const pluginData = options.pluginData;\n\n keyList.forEach(key => scene.storage[key] = pluginData[key]);\n }\n //\n const runtimeEnv = options.env ?? '';\n\n scene.storage['runtimeEnv'] = runtimeEnv;\n const compatibleMode = options.pluginData?.['compatibleMode'] ?? 'gltf';\n\n //\n PluginHelper.preprocessScene(scene, runtimeEnv, compatibleMode);\n await CompositionCache.loadStaticResources();\n }\n\n static override precompile (compositions: spec.Composition[], renderer: Renderer): Promise<void> {\n const isWebGL2 = renderer.engine.gpuCapability.level === 2;\n const pbrShaderCode = fetchPBRShaderCode();\n const unlitShaderCode = fetchUnlitShaderCode();\n const pbrShaderData: spec.ShaderData = {\n id: PBRShaderGUID,\n name: 'PBR Shader',\n dataType: spec.DataType.Shader,\n fragment: pbrShaderCode.fragmentShaderCode,\n vertex: pbrShaderCode.vertexShaderCode,\n // @ts-expect-error\n glslVersion: isWebGL2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n };\n const unlitShaderData: spec.ShaderData = {\n id: UnlitShaderGUID,\n name: 'Unlit Shader',\n dataType: spec.DataType.Shader,\n fragment: unlitShaderCode.fragmentShaderCode,\n vertex: unlitShaderCode.vertexShaderCode,\n // @ts-expect-error\n glslVersion: isWebGL2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n };\n\n renderer.engine.addEffectsObjectData(pbrShaderData);\n renderer.engine.addEffectsObjectData(unlitShaderData);\n\n return Promise.resolve();\n }\n\n /**\n * 创建 3D 场景管理器和缓存器\n * @param composition - 合成\n * @param scene - 场景\n */\n override onCompositionConstructed (composition: Composition, scene: Scene): void {\n this.sceneParams = scene.storage;\n\n const engine = composition.renderer.engine;\n\n this.cache = new CompositionCache(engine);\n this.cache.setup(false);\n // FIXME: 先注释元素参数的配置\n //PluginHelper.setupItem3DOptions(scene, this.cache, composition);\n }\n\n /**\n * 每次播放都会执行,包括重播,所以这里执行“小的销毁”和新的初始化\n * @param composition - 合成\n * @param renderFrame - 渲染帧\n */\n override onCompositionReset (composition: Composition, renderFrame: RenderFrame) {\n const props = {\n id: 'ModelPluginItem',\n name: 'ModelPluginItem',\n duration: 9999999,\n endBehavior: spec.END_BEHAVIOR_FORWARD,\n } as unknown as VFXItemProps;\n const item = new VFXItem(composition.getEngine(), props);\n\n composition.addItem(item);\n //\n const comp = item.addComponent(ModelPluginComponent);\n\n comp.fromData({ cache: this.cache });\n comp.initial(this.sceneParams);\n }\n\n /**\n * 合成销毁,同时销毁 3D 场景对象和缓存\n * @param composition - 合成\n */\n override onCompositionDestroyed (composition: Composition) {\n this.cache.dispose();\n // @ts-expect-error\n this.cache = null;\n // @ts-expect-error\n this.sceneParams = null;\n }\n}\n\nexport interface ModelPluginOptions {\n cache: CompositionCache,\n}\n\n/**\n * 插件组件类,实现特定的插件功能\n * @since 2.0.0\n * @internal\n */\n@effectsClass(spec.DataType.ModelPluginComponent)\nexport class ModelPluginComponent extends Behaviour {\n private runtimeEnv = PLAYER_OPTIONS_ENV_EDITOR;\n private compatibleMode = 'gltf';\n private renderSkybox = true;\n private visBoundingBox = false;\n private autoAdjustScene = false;\n /**\n * 渲染插件是否启用动态排序功能\n * 支持在渲染的时候对透明 Mesh 进行动态排序\n */\n private enableDynamicSort = false;\n /**\n * 3D 渲染模式,支持可视化渲染中间结果\n * none 表示正常的渲染结果\n */\n private renderMode3D = spec.RenderMode3D.none;\n /**\n * UV 渲染模式中,指定棋盘格的大小,相对于大小为 1 的纹理\n * 取值范围(0, 1)\n */\n private renderMode3DUVGridSize = 1 / 16;\n /**\n * 合成缓存器\n */\n cache: CompositionCache;\n /**\n * 场景管理器\n */\n scene: PSceneManager;\n\n /**\n * 构造函数,创建场景管理器\n * @param engine - 引擎\n * @param options - Mesh 参数\n */\n constructor (engine: Engine, options?: ModelPluginOptions) {\n super(engine);\n if (options) {\n this.fromData(options);\n }\n }\n\n /**\n * 组件后更新,合成相机和场景管理器更新\n * @param dt - 更新间隔\n */\n override lateUpdate (dt: number): void {\n const composition = this.item.composition as Composition;\n\n if (this.autoAdjustScene && this.scene.tickCount == 1) {\n // 自动计算场景中的相机位置\n // 更加相机的具体参数,计算出合适的相机观察位置\n // 但只会在第一帧进行更新,主要是用于测试使用\n const cameraObject = composition.camera;\n const cameraTransform = new PTransform().fromMatrix4(cameraObject.getViewMatrix());\n const cameraCoordinate = new PCoordinate().fromPTransform(cameraTransform);\n const cameraDirection = cameraCoordinate.zAxis.clone();\n const cameraFov = cameraObject.fov ?? 45;\n const cameraAspect = cameraObject.aspect ?? 1.0;\n //\n const sceneAABB = this.scene.getSceneAABB();\n const newAABB = sceneAABB.clone().applyMatrix4(cameraTransform.getMatrix());\n const newSize = newAABB.getSize(new Vector3()).multiply(0.5);\n const newWidth = newSize.x;\n const newHeight = newSize.y;\n const finalHeight = newHeight * Math.max(newWidth / newHeight / cameraAspect, 1.0);\n const center = sceneAABB.getCenter(new Vector3());\n const offset = finalHeight / Math.tan(cameraFov * 0.5 * DEG2RAD);\n const position = center.clone().add(cameraDirection.clone().multiply(offset + newSize.z));\n\n // 更新相机的位置,主要是composition的camera数据,以及camera item数据\n composition.camera.position = position;\n composition.items?.forEach(item => {\n if (item.type === VFX_ITEM_TYPE_3D) {\n const component = item.getComponent(ModelCameraComponent);\n\n if (component?.content) {\n const worldMatrix = item.transform.parentTransform?.getWorldMatrix() || Matrix4.IDENTITY.clone();\n const invWorldMatrix = worldMatrix.invert();\n const newPosition = invWorldMatrix.transformPoint(position);\n\n component.setTransform(newPosition);\n\n // 正式版本不会走到这个流程,只在测试时使用\n console.info(`Scene AABB [${sceneAABB.min.toArray()}], [${sceneAABB.max.toArray()}].`);\n console.info(`Update camera position [${newPosition.toArray()}].`);\n }\n }\n });\n }\n\n this.updateSceneCamera(composition);\n this.scene.tick(dt);\n }\n\n /**\n * 组件销毁,同时销毁场景管理器和缓存器\n */\n override onDestroy (): void {\n this.scene.dispose();\n // @ts-expect-error\n this.scene = null;\n // @ts-expect-error\n this.cache = null;\n }\n\n /**\n * 反序列化,创建场景管理器\n * @param date - 组件参数\n */\n override fromData (data: ModelPluginOptions): void {\n super.fromData(data);\n //\n const options = data;\n\n this.cache = options.cache;\n this.scene = new PSceneManager(this.engine);\n }\n\n /**\n * 组件初始化,初始化场景管理器并更新合成相机\n * @param sceneParams - 场景参数\n */\n initial (sceneParams: Record<string, any>) {\n this.runtimeEnv = sceneParams['runtimeEnv'] ?? this.runtimeEnv;\n this.compatibleMode = sceneParams['compatibleMode'] ?? this.compatibleMode;\n this.renderSkybox = sceneParams['renderSkybox'] ?? this.renderSkybox;\n this.visBoundingBox = sceneParams['visBoundingBox'] ?? this.visBoundingBox;\n this.autoAdjustScene = sceneParams['autoAdjustScene'] ?? this.autoAdjustScene;\n this.enableDynamicSort = sceneParams['enableDynamicSort'] ?? this.enableDynamicSort;\n this.renderMode3D = sceneParams['renderMode3D'] ?? this.renderMode3D;\n this.renderMode3DUVGridSize = sceneParams['renderMode3DUVGridSize'] ?? this.renderMode3DUVGridSize;\n\n const component = this.item.composition as Composition;\n\n this.scene.initial({\n componentName: `${component.id}`,\n renderer: this.engine.renderer,\n sceneCache: this.cache,\n runtimeEnv: this.runtimeEnv,\n compatibleMode: this.compatibleMode,\n visBoundingBox: this.visBoundingBox,\n enableDynamicSort: this.enableDynamicSort,\n renderMode3D: this.renderMode3D,\n renderMode3DUVGridSize: this.renderMode3DUVGridSize,\n renderSkybox: this.renderSkybox,\n lightItemCount: this.getLightItemCount(),\n maxJointCount: this.getMaxJointCount(),\n });\n this.updateSceneCamera(component);\n }\n\n /**\n * 更新 SceneManager 中渲染用的相机,相机参数来自 composition.camera\n *\n * @param composition - 当前合成对象\n * @param sceneManager - 当前合成对象绑定的 SceneManager\n */\n private updateSceneCamera (composition: Composition) {\n this.scene.updateDefaultCamera(composition.camera.getOptions(), composition.camera.getViewportMatrix());\n }\n\n private getLightItemCount (): number {\n let lightItemCount = 0;\n const items = this.item.composition?.items ?? [];\n\n items.forEach(item => {\n if (item.getComponent(ModelLightComponent)) {\n lightItemCount++;\n }\n });\n\n return lightItemCount;\n }\n\n private getMaxJointCount (): number {\n let maxJointCount = 0;\n const items = this.item.composition?.items ?? [];\n\n items.forEach(item => {\n const meshComp = item.getComponent(ModelMeshComponent);\n\n if (meshComp && meshComp.data) {\n const geometry = meshComp.data.geometry;\n\n if (geometry instanceof Geometry) {\n const skin = geometry.getSkinProps();\n\n if (skin.boneNames) {\n maxJointCount = Math.max(skin.boneNames.length, maxJointCount);\n }\n }\n }\n });\n\n return maxJointCount;\n }\n}\n\n/**\n * 获取场景管理器,从合成中查找\n * @param component\n * @returns\n */\nexport function getSceneManager (component?: Component): PSceneManager | undefined {\n const composition = component?.item?.composition;\n const pluginItem = composition?.getItemByName('ModelPluginItem');\n const pluginComp = pluginItem?.getComponent(ModelPluginComponent);\n\n return pluginComp?.scene;\n}\n","import type { Engine, VFXItem } from '@galacean/effects';\nimport { Behaviour, Transform, effectsClass, spec } from '@galacean/effects';\nimport type { ModelTreeContent, ModelTreeOptions } from '../index';\nimport { PAnimationManager } from '../runtime';\nimport { getSceneManager } from './model-plugin';\n\n/**\n * 场景树节点描述\n */\nexport interface ModelTreeNode {\n /**\n * 名称\n */\n name?: string,\n /**\n * 变换\n */\n transform: Transform,\n /**\n * 子节点\n */\n children: ModelTreeNode[],\n /**\n * 索引\n */\n id: string,\n /**\n * 场景树元素\n */\n tree: ModelTreeItem,\n}\n\n/**\n * 场景树元素类,支持插件中节点树相关的动画能力\n */\nexport class ModelTreeItem {\n private allNodes: ModelTreeNode[];\n private nodes: ModelTreeNode[];\n private cacheMap: Record<string, ModelTreeNode>;\n /**\n * 基础变换\n */\n readonly baseTransform: Transform;\n /**\n * 动画管理器\n */\n animationManager: PAnimationManager;\n\n /**\n * 构造函数,创建场景树结构\n * @param props - 场景树数据\n * @param owner - 场景树元素\n */\n constructor (props: ModelTreeOptions, owner: VFXItem) {\n this.baseTransform = owner.transform;\n this.animationManager = new PAnimationManager(props, owner);\n this.build(props);\n }\n\n /**\n * 场景树更新,主要是动画更新\n * @param dt - 时间间隔\n */\n tick (dt: number) {\n this.animationManager.tick(dt);\n }\n\n /**\n * 获取所有节点\n * @returns\n */\n getNodes () {\n return this.nodes;\n }\n\n /**\n * 根据节点编号,查询节点\n * @param nodeId - 节点编号\n * @returns\n */\n getNodeById (nodeId: string | number): ModelTreeNode | undefined {\n const cache = this.cacheMap;\n\n if (!cache[nodeId]) {\n const index = `^${nodeId}`;\n\n // @ts-expect-error\n cache[nodeId] = this.allNodes.find(node => node.id === index);\n }\n\n return cache[nodeId];\n }\n\n /**\n * 根据节点名称,查询节点\n * @param name - 名称\n * @returns\n */\n getNodeByName (name: string): ModelTreeNode | undefined {\n const cache = this.cacheMap;\n\n if (!cache[name]) {\n // @ts-expect-error\n cache[name] = this.allNodes.find(node => node.name === name);\n }\n\n return cache[name];\n }\n\n /**\n * 根据节点 id 查询节点变换,如果查询不到节点就直接返回基础变换\n * @param nodeId - 节点 id\n * @returns\n */\n getNodeTransform (nodeId: string): Transform {\n const node = this.getNodeById(nodeId);\n\n return node ? node.transform : this.baseTransform;\n }\n\n /**\n * 销毁场景树对象\n */\n dispose () {\n this.allNodes = [];\n this.nodes = [];\n this.cacheMap = {};\n // @ts-expect-error\n this.baseTransform = null;\n this.animationManager?.dispose();\n // @ts-expect-error\n this.animationManager = null;\n }\n\n private build (options: ModelTreeOptions) {\n const topTransform = this.baseTransform;\n const nodes: ModelTreeNode[] = options.nodes.map((node, i) => ({\n name: node.name || node.id || (i + ''),\n transform: new Transform({\n ...node.transform,\n valid: true,\n }, topTransform),\n id: `^${node.id || i}`,\n children: [],\n tree: this,\n }));\n\n this.cacheMap = {};\n nodes.forEach((node, i) => {\n const children = options.nodes[i].children;\n\n // @ts-expect-error\n node.transform.name = node.name;\n node.transform.setValid(true);\n if (children) {\n children.forEach(function (index) {\n const child = nodes[index];\n\n if (child && child !== node) {\n if (child.transform.parentTransform !== topTransform) {\n console.error('Node parent has been set.');\n }\n child.transform.parentTransform = node.transform;\n node.children.push(child);\n }\n });\n }\n });\n this.allNodes = nodes;\n this.nodes = options.children.map(i => nodes[i]);\n }\n}\n\n/**\n * 插件场景树组件类,实现 3D 场景树功能\n * @since 2.0.0\n */\n@effectsClass(spec.DataType.TreeComponent)\nexport class ModelTreeComponent extends Behaviour {\n /**\n * 内部节点树元素\n */\n content: ModelTreeItem;\n /**\n * 参数\n */\n options?: ModelTreeContent;\n\n /**\n * 构造函数,创建节点树元素\n * @param engine\n * @param options\n */\n constructor (engine: Engine, options?: ModelTreeContent) {\n super(engine);\n if (options) {\n this.fromData(options);\n }\n }\n\n /**\n * 反序列化,保存入参和创建节点树元素\n * @param options\n */\n override fromData (options: ModelTreeContent): void {\n super.fromData(options);\n this.options = options;\n this.createContent();\n }\n\n /**\n * 组件开始,查询合成中场景管理器并设置到动画管理器中\n */\n override start () {\n this.item.type = spec.ItemType.tree;\n this.content.baseTransform.setValid(true);\n const sceneManager = getSceneManager(this);\n\n if (sceneManager) {\n this.content.animationManager.setSceneManager(sceneManager);\n }\n }\n\n /**\n * 组件更新,内部对象更新\n * @param dt\n */\n override update (dt: number): void {\n // this.timeline?.getRenderData(time, true);\n // TODO: 需要使用lifetime\n this.content?.tick(dt);\n }\n\n /**\n * 组件销毁,内部对象销毁\n */\n override onDestroy (): void {\n this.content?.dispose();\n }\n\n /**\n * 创建内部场景树元素\n */\n createContent () {\n if (this.options) {\n const treeOptions = this.options.options.tree;\n\n this.content = new ModelTreeItem(treeOptions, this.item);\n }\n }\n\n /**\n * 获取元素的变换\n * @param itemId - 元素索引\n * @returns\n */\n getNodeTransform (itemId: string): Transform {\n if (this.content === undefined) {\n return this.transform;\n }\n\n const idWithSubfix = this.item.id + '^';\n\n if (itemId.indexOf(idWithSubfix) === 0) {\n const nodeId = itemId.substring(idWithSubfix.length);\n\n return this.content.getNodeTransform(nodeId);\n } else {\n return this.transform;\n }\n }\n}\n","import { AbstractPlugin } from '@galacean/effects';\n\n/**\n * 场景树插件类,支持 3D 相关的节点动画和骨骼动画等\n */\nexport class ModelTreePlugin extends AbstractPlugin {\n /**\n * 插件名称\n */\n override name = 'tree';\n /**\n * 高优先级更新\n */\n override order = 2;\n}\n\n","import type { CameraOptionsEx, spec } from '@galacean/effects';\n\nexport interface CameraGestureHandler {\n\n getCurrentTarget (): string,\n\n getCurrentType (): CameraGestureType,\n\n /**\n * 通过按键事件对相机进行平移\n * @param event - 键盘事件信息\n * @returns 当前的相机参数\n */\n onKeyEvent (event: CameraKeyEvent): CameraOptionsEx,\n\n /**\n * 在 XY 方向上平移相机开始函数,在鼠标按下时调用\n * @param x - 鼠标在 x 坐标上的值\n * @param y - 鼠标在 y 坐标上的值\n * @param width - 当前画布的宽度\n * @param height - 当前画布的高度\n * @param cameraID - 要控制的相机 item id\n * @returns 当前的相机参数\n */\n onXYMoveBegin (x: number, y: number, width: number, height: number, cameraID: string): CameraOptionsEx,\n\n /**\n * 在 XY 方向上平移相机开始函数,在鼠标按下拖拽时调用\n * @param x - 鼠标在 x 坐标上的值\n * @param y - 鼠标在 y 坐标上的值\n * @param speed - 移动速度,默认是 0.015\n * @returns 更新后的相机参数\n */\n onXYMoving (x: number, y: number, speed?: number): CameraOptionsEx,\n\n /**\n * 结束在 XY 方向上平移相机\n */\n onXYMoveEnd (): void,\n\n /**\n * 在 Z 方向上平移相机开始函数,类似缩放 3D 模型,在鼠标按下时调用\n * @param x - 鼠标在 x 坐标上的值\n * @param y - 鼠标在 y 坐标上的值\n * @param width - 当前画布的宽度\n * @param height - 当前画布的高度\n * @param cameraID - 要控制的相机 item id\n * @returns 当前的相机参数\n */\n onZMoveBegin (x: number, y: number, width: number, height: number, cameraID: string): CameraOptionsEx,\n\n /**\n * 在 Z 方向上平移相机开始函数,类似缩放 3D 模型,在鼠标按下拖拽时调用\n * @param x - 鼠标在 x 坐标上的值\n * @param y - 鼠标在 y 坐标上的值\n * @param speed - 移动速度,默认是 0.015\n * @returns 更新后的相机参数\n */\n onZMoving (x: number, y: number, speed?: number): CameraOptionsEx,\n\n /**\n * 结束在 Z 方向上平移相机\n */\n onZMoveEnd (): void,\n\n /**\n * 相机的自旋转,就是镜头漫游的效果,在鼠标按下时调用\n * @param x - 鼠标在 x 坐标上的值\n * @param y - 鼠标在 y 坐标上的值\n * @param width - 当前画布的宽度\n * @param height - 当前画布的高度\n * @param cameraID - 要控制的相机 item id\n * @returns 当前的相机参数\n */\n onRotateBegin (x: number, y: number, width: number, height: number, cameraID: string): CameraOptionsEx,\n\n /**\n * 相机的自旋转,在鼠标按下拖拽时调用\n * @param x - 鼠标在 x坐标上的值\n * @param y - 鼠标在y坐标上的值\n * @param speed - 移动速度,默认是 1\n * @returns 更新后的相机参数\n */\n onRotating (x: number, y: number, speed?: number): CameraOptionsEx,\n\n /**\n * 相机的自旋转\n */\n onRotateEnd (): void,\n\n /**\n * 相机绕某个点旋转,就是拖拽模型的效果,在鼠标按下时调用\n * @param x - 鼠标在 x 坐标上的值\n * @param y - 鼠标在 y 坐标上的值\n * @param width - 当前画布的宽度\n * @param height - 当前画布的高度\n * @param cameraID - 要控制的相机 item id\n * @returns 当前的相机参数\n */\n onRotatePointBegin (x: number, y: number, width: number, height: number, point: spec.vec3, cameraID: string): CameraOptionsEx,\n\n /**\n * 相机绕某个点旋转,在鼠标按下拖拽时调用\n * @param x - 鼠标在 x 坐标上的值\n * @param y - 鼠标在 y 坐标上的值\n * @param speed - 移动速度,默认是 1\n * @returns 更新后的相机参数\n */\n onRotatingPoint (x: number, y: number, speed?: number): CameraOptionsEx,\n\n /**\n * 相机绕某个点旋转\n */\n onRotatePointEnd (): void,\n\n /**\n * 相机移动到指定点\n * @param cameraID -相机 ID\n * @param position - 指定位置\n */\n moveTo (cameraID: string, position: spec.vec3): void,\n\n /**\n * 相机旋转到指定方向\n * @param cameraID - 相机ID\n * @param quat - 指定旋转\n */\n rotateTo (cameraID: string, quat: spec.vec4): void,\n\n /**\n * 相机对中心点进行聚焦,先从当前位置 LookAt 过去,然后移到距离中心点给定距离(默认是 5)的位置\n * @param cameraID - 相机 ID\n * @param point - 聚焦的中心点\n * @param distance - 聚焦的距离,默认是 5\n */\n onFocusPoint (cameraID: string, point: spec.vec3, distance?: number): void,\n\n}\n\nexport enum CameraGestureType {\n none,\n translate = 1,\n rotate_focus = 2,\n rotate_self = 3,\n scale = 4\n}\n\nexport interface CameraGestureHandlerParams {\n type: CameraGestureType,\n\n mouseEvent: boolean,\n\n // mouse position\n clientX: number,\n clientY: number,\n\n // canvas size\n clientWidth: number,\n clientHeight: number,\n\n //camera item id\n target: string,\n\n //rotate_focus point\n focusPoint?: spec.vec3,\n\n speed?: number, // default = 0.015\n}\n\nexport interface CameraKeyEvent {\n cameraID: string,\n xAxis?: -1 | 1,\n yAxis?: -1 | 1,\n zAxis?: -1 | 1,\n speed?: number,\n}\n","import type { Composition, CameraOptionsEx, spec, VFXItem } from '@galacean/effects';\nimport { Transform } from '@galacean/effects';\nimport type {\n CameraGestureHandler,\n CameraKeyEvent,\n CameraGestureHandlerParams,\n} from './protocol';\nimport { CameraGestureType } from './protocol';\nimport { PCoordinate, PTransform } from '../runtime/common';\nimport type { Euler } from '../runtime/math';\nimport { Quaternion, Vector3, Matrix4 } from '../runtime/math';\nimport { ModelCameraComponent } from '../plugin/model-item';\n\nexport class CameraGestureHandlerImp implements CameraGestureHandler {\n private cameraTransform = new PTransform();\n private cameraCoordiante = new PCoordinate();\n\n private startParams: CameraGestureHandlerParams = {\n type: CameraGestureType.none,\n mouseEvent: false,\n clientX: 0,\n clientY: 0,\n clientWidth: 512,\n clientHeight: 512,\n target: '',\n };\n\n constructor (\n private composition: Composition,\n ) { }\n\n getItem () {\n return this.composition.items?.find(item => item.name === this.getCurrentTarget());\n }\n\n getCurrentTarget (): string {\n return this.startParams.target;\n }\n\n getCurrentType (): CameraGestureType {\n return this.startParams.type;\n }\n\n onKeyEvent (event: CameraKeyEvent): CameraOptionsEx {\n // check event camera ID at first\n if (this.startParams.target !== event.cameraID) {\n this.startParams.target = event.cameraID;\n this.startParams.type = CameraGestureType.translate;\n }\n\n // can't find camera item, throw error message\n const item = this.getItem();\n\n if (item === undefined) {\n console.warn(`[CameraGestureHandlerImp] Unable to locate camera item with ID: ${this.startParams.target}.`);\n\n return this.composition.camera.getOptions();\n }\n\n const camera = this.composition.camera;\n const effectsTransfrom = new Transform({\n ...camera.getOptions(),\n valid: true,\n });\n const cameraTransform = new PTransform().fromEffectsTransform(effectsTransfrom);\n const cameraCoordiante = new PCoordinate().fromPTransform(cameraTransform);\n\n // compute move direction\n const xAxis = event.xAxis ?? 0;\n const yAxis = event.yAxis ?? 0;\n const zAxis = event.zAxis ?? 0;\n const dir = cameraCoordiante.xAxis.clone().multiply(xAxis);\n\n dir.add(cameraCoordiante.yAxis.clone().multiply(yAxis));\n dir.add(cameraCoordiante.zAxis.clone().multiply(zAxis));\n if (dir.lengthSquared() < 0.00001) {\n return camera.getOptions();\n }\n dir.normalize();\n\n // update camera position\n const speed = event.speed ?? 0.1;\n const pos = cameraTransform.getPosition();\n\n pos.add(dir.clone().multiply(speed));\n this.setTransform(item, pos);\n\n // update camera transform and coordinates\n if (this.startParams.type === CameraGestureType.rotate_self) {\n this.cameraTransform.setPosition(pos);\n this.cameraCoordiante.origin = pos;\n }\n\n return camera.getOptions();\n }\n\n onXYMoveBegin (x: number, y: number, width: number, height: number, cameraID: string): CameraOptionsEx {\n const args = {\n type: CameraGestureType.translate,\n mouseEvent: true,\n clientX: x,\n clientY: y,\n clientWidth: width,\n clientHeight: height,\n target: cameraID,\n };\n\n return this.startGesture(args);\n }\n\n onXYMoving (x: number, y: number, speed?: number): CameraOptionsEx {\n if (!this.startParams.mouseEvent) {\n return this.composition.camera.getOptions();\n }\n\n const arg0 = this.startParams;\n const arg = {\n type: CameraGestureType.translate,\n mouseEvent: true,\n clientX: x,\n clientY: y,\n clientWidth: arg0.clientWidth,\n clientHeight: arg0.clientHeight,\n target: arg0.target,\n speed: speed ?? 0.015,\n };\n\n return this.moveGesture(arg);\n }\n\n onXYMoveEnd () {\n this.endGesture();\n }\n\n onZMoveBegin (x: number, y: number, width: number, height: number, cameraID: string): CameraOptionsEx {\n const arg = {\n type: CameraGestureType.scale,\n mouseEvent: true,\n clientX: x,\n clientY: y,\n clientWidth: width,\n clientHeight: height,\n target: cameraID,\n };\n\n return this.startGesture(arg);\n }\n\n onZMoving (x: number, y: number, speed = 0.015): CameraOptionsEx {\n if (!this.startParams.mouseEvent) {\n return this.composition.camera.getOptions();\n }\n\n const arg0 = this.startParams;\n const arg = {\n type: CameraGestureType.scale,\n mouseEvent: true,\n clientX: x,\n clientY: y,\n clientWidth: arg0.clientWidth,\n clientHeight: arg0.clientHeight,\n target: arg0.target,\n speed,\n };\n\n return this.moveGesture(arg);\n }\n\n onZMoveEnd () {\n this.endGesture();\n }\n\n onRotateBegin (x: number, y: number, width: number, height: number, cameraID: string): CameraOptionsEx {\n const arg = {\n type: CameraGestureType.rotate_self,\n mouseEvent: true,\n clientX: x,\n clientY: y,\n clientWidth: width,\n clientHeight: height,\n target: cameraID,\n };\n\n return this.startGesture(arg);\n }\n\n onRotating (x: number, y: number, speed?: number): CameraOptionsEx {\n if (!this.startParams.mouseEvent) {\n return this.composition.camera.getOptions();\n }\n\n const arg0 = this.startParams;\n const arg = {\n type: CameraGestureType.rotate_self,\n mouseEvent: true,\n clientX: x,\n clientY: y,\n clientWidth: arg0.clientWidth,\n clientHeight: arg0.clientHeight,\n target: arg0.target,\n speed: speed ?? 1.5,\n };\n\n return this.moveGesture(arg);\n }\n\n onRotateEnd () {\n this.endGesture();\n }\n\n onRotatePointBegin (x: number, y: number, width: number, height: number, point: spec.vec3, cameraID: string): CameraOptionsEx {\n const arg = {\n type: CameraGestureType.rotate_focus,\n mouseEvent: true,\n clientX: x,\n clientY: y,\n clientWidth: width,\n clientHeight: height,\n focusPoint: point,\n target: cameraID,\n };\n\n return this.startGesture(arg);\n }\n\n onRotatingPoint (x: number, y: number, speed?: number): CameraOptionsEx {\n if (!this.startParams.mouseEvent) {\n return this.composition.camera.getOptions();\n }\n\n const arg0 = this.startParams;\n const arg = {\n type: CameraGestureType.rotate_focus,\n mouseEvent: true,\n clientX: x,\n clientY: y,\n clientWidth: arg0.clientWidth,\n clientHeight: arg0.clientHeight,\n focusPoint: arg0.focusPoint,\n target: arg0.target,\n speed: speed ?? 8.0,\n };\n\n return this.moveGesture(arg);\n }\n\n onRotatePointEnd (): void {\n this.endGesture();\n }\n\n moveTo (cameraID: string, position: spec.vec3): void {\n this.startParams.target = cameraID;\n this.startParams.type = CameraGestureType.none;\n const item = this.getItem();\n\n if (item === undefined) {\n console.warn('[CameraGestureHandlerImp] Can\\'t find camera item.');\n\n return;\n }\n\n this.setPosition(item, position);\n }\n\n rotateTo (cameraID: string, quat: spec.vec4): void {\n this.startParams.target = cameraID;\n this.startParams.type = CameraGestureType.none;\n const item = this.getItem();\n\n if (item === undefined) {\n console.warn('[CameraGestureHandlerImp] Can\\'t find camera item.');\n\n return;\n }\n\n this.setQuaternion(item, quat);\n }\n\n onFocusPoint (cameraID: string, point: spec.vec3, distance?: number): void {\n this.startParams.target = cameraID;\n this.startParams.type = CameraGestureType.none;\n\n const item = this.getItem();\n\n if (item === undefined) {\n console.warn('[CameraGestureHandlerImp] Can\\'t find camera item.');\n\n return;\n }\n const newDistance = distance ?? 5;\n const targetPoint = Vector3.fromArray(point);\n //\n const transform = new PTransform().fromEffectsTransform(item.transform);\n const coordinate = new PCoordinate().fromPTransform(transform);\n // FIXME: MATH\n const lookatDir = Vector3.fromArray(coordinate.zAxis.toArray()).multiply(1.0);\n //\n const newOffset = lookatDir.clone().multiply(newDistance);\n const newPosition = targetPoint.clone().add(newOffset);\n\n //\n this.setTransform(item, newPosition);\n //\n // z+方向优先\n // const cameraPos = Vector3.fromArray(item.transform.position);\n // const newLookatDir = targetPoint.clone().subVector(cameraPos).normalize();\n // const newOffset = newLookatDir.clone().multiplyScalar(newDistance);\n // const newPosition = targetPoint.clone().subVector(newOffset);\n // const newUpVector = Vector3.tryZUpVector(newLookatDir, new Vector3);\n // const viewMatrix = Matrix4.computeLookAt(newPosition, targetPoint, newUpVector, new Matrix4);\n // const tranform = new PTransform().fromMatrix4(viewMatrix);\n // const newRotation = tranform.rotation;\n // item.transform.setQuat(-newRotation.x, -newRotation.y, -newRotation.z, newRotation.w);\n // item.transform.setPosition(newPosition.x, newPosition.y, newPosition.z);\n //\n // 旋转优先\n // const cameraPos = Vector3.fromArray(item.transform.position);\n // const newLookatDir = targetPoint.clone().subVector(cameraPos).normalize();\n // const newOffset = newLookatDir.clone().multiplyScalar(newDistance);\n // const newPosition = targetPoint.clone().subVector(newOffset);\n // const oldTransform = new PTransform().fromEffectsTransform(item.transform);\n // const oldCoordinate = new PCoordinate().fromPTransform(oldTransform)\n // const oldLookatDir = oldCoordinate.zAxis.clone().multiplyScalar(-1.0);\n // const rotateAxis = oldLookatDir.cross(newLookatDir);\n // const sinTheta = rotateAxis.length();\n // const theta = Math.asin(sinTheta);\n // const deltaRotation = Quaternion.fromAxisAngle(rotateAxis, theta, new Quaternion);\n // const newRotation = Quaternion.multiply(deltaRotation, oldTransform.rotation, new Quaternion);\n // item.transform.setQuat(newRotation.x, newRotation.y, newRotation.z, newRotation.w);\n // item.transform.setPosition(newPosition.x, newPosition.y, newPosition.z);\n //\n //\n this.startParams.target = '';\n }\n\n getCameraTransform (): Transform {\n const camera = this.composition.camera;\n const transform = new Transform(camera.getOptions());\n\n transform.setValid(true);\n\n return transform;\n }\n\n private startGesture (args: CameraGestureHandlerParams): CameraOptionsEx {\n this.startParams = args;\n this.updateCameraTransform(this.composition.camera.getOptions());\n\n if (!this.getItem()) {\n console.warn('[CameraGestureHandlerImp] Invalid target specified in startGesture.');\n }\n\n return this.composition.camera.getOptions();\n }\n\n private moveGesture (arg: CameraGestureHandlerParams): CameraOptionsEx {\n if (this.getCurrentType() === arg.type) {\n const item = this.getItem();\n\n if (item === undefined) {\n console.warn('[CameraGestureHandlerImp] Can\\'t find camera item.');\n\n return this.composition.camera.getOptions();\n }\n const speed = arg.speed ?? 1.015;\n const xAxis = this.cameraCoordiante.xAxis;\n const yAxis = this.cameraCoordiante.yAxis;\n const zAxis = this.cameraCoordiante.zAxis;\n const dx = (arg.clientX - this.startParams.clientX);\n const dy = (arg.clientY - this.startParams.clientY);\n\n if (arg.type === CameraGestureType.translate) {\n const pos = this.cameraTransform.getPosition();\n const newPos = pos.clone();\n\n newPos.add(xAxis.clone().multiply(-dx * speed));\n newPos.add(yAxis.clone().multiply(dy * speed));\n item.transform.setPosition(newPos.x, newPos.y, newPos.z);\n this.setTransform(item, item.transform.position, item.transform.rotation);\n } else if (arg.type === CameraGestureType.scale) {\n const pos = this.cameraTransform.getPosition();\n const newPos = pos.clone();\n\n newPos.add(zAxis.clone().multiply(dy * speed));\n item.transform.setPosition(newPos.x, newPos.y, newPos.z);\n this.setTransform(item, item.transform.position, item.transform.rotation);\n } else if (arg.type === CameraGestureType.rotate_self) {\n const ndx = dx / arg.clientWidth;\n const ndy = dy / arg.clientHeight;\n const dxAngle = ndx * Math.PI * speed * 0.5;\n const dyAngle = ndy * Math.PI * speed * 0.5;\n\n const newRotation = Quaternion.fromAxisAngle(Vector3.Y, -dxAngle);\n // FIXME: MATH\n const tempRotation = Quaternion.fromAxisAngle(xAxis, -dyAngle);\n\n newRotation.multiply(tempRotation);\n // FIXME: MATH\n newRotation.multiply(this.cameraTransform.getRotation());\n item.transform.setQuaternion(newRotation.x, newRotation.y, newRotation.z, newRotation.w);\n this.setTransform(item, item.transform.position, item.transform.rotation);\n } else if (arg.type === CameraGestureType.rotate_focus) {\n const ndx = dx / arg.clientWidth;\n const ndy = dy / arg.clientHeight;\n const dxAngle = ndx * Math.PI * speed;\n const dyAngle = ndy * Math.PI * speed;\n const newRotation = Quaternion.fromAxisAngle(Vector3.Y, -dxAngle);\n const tempRotation = Quaternion.fromAxisAngle(xAxis, -dyAngle);\n\n newRotation.multiply(tempRotation);\n const rotateMatrix = newRotation.toMatrix4(new Matrix4());\n const targetPoint = Vector3.fromArray(arg.focusPoint as spec.vec3);\n const deltaPosition = this.cameraCoordiante.origin.clone().subtract(targetPoint);\n\n rotateMatrix.transformPoint(deltaPosition);\n const newPosition = deltaPosition.add(targetPoint);\n\n newRotation.multiply(this.cameraTransform.getRotation());\n item.transform.setPosition(newPosition.x, newPosition.y, newPosition.z);\n item.transform.setQuaternion(newRotation.x, newRotation.y, newRotation.z, newRotation.w);\n this.setTransform(item, newPosition, item.transform.rotation);\n } else {\n console.warn('[CameraGestureHandlerImp] Movement type not implemented.');\n }\n } else {\n console.warn(`[CameraGestureHandlerImp] Invalid move type specified: ${arg.type}`);\n }\n\n return this.composition.camera.getOptions();\n }\n\n private setTransform (item: VFXItem, position?: Vector3, rotation?: Euler) {\n const camera = item.getComponent(ModelCameraComponent);\n\n if (camera !== undefined) {\n camera.setTransform(position, rotation);\n }\n }\n\n private setPosition (item: VFXItem, position: spec.vec3) {\n item.transform.setPosition(...position);\n const camera = item.getComponent(ModelCameraComponent);\n\n if (camera !== undefined) {\n camera.updateMainCamera();\n }\n }\n\n private setQuaternion (item: VFXItem, quat: spec.vec4) {\n item.transform.setQuaternion(...quat);\n const camera = item.getComponent(ModelCameraComponent);\n\n if (camera !== undefined) {\n camera.updateMainCamera();\n }\n }\n\n private endGesture () {\n this.startParams.type = CameraGestureType.none;\n this.startParams.mouseEvent = false;\n this.startParams.target = '';\n }\n\n private updateCameraTransform (cameraOptions: CameraOptionsEx) {\n const effectsTransfrom = new Transform(cameraOptions);\n\n effectsTransfrom.setValid(true);\n\n this.cameraTransform.fromEffectsTransform(effectsTransfrom);\n this.cameraCoordiante.fromPTransform(this.cameraTransform);\n }\n}\n\nexport * from './protocol';\n","import * as EFFECTS from '@galacean/effects';\nimport type { spec } from '@galacean/effects';\nimport { VFXItem, logger, registerPlugin } from '@galacean/effects';\nimport { ModelPlugin, ModelTreePlugin } from './plugin';\n\nregisterPlugin<void>('tree', ModelTreePlugin, VFXItem, true);\nregisterPlugin<void>('model', ModelPlugin, VFXItem);\n\nexport const version = __VERSION__;\n\nexport type BaseTransform = spec.BaseItemTransform;\nexport type ModelBaseItem = spec.BaseItem;\nexport type ModelItemCamera = spec.ModelCameraItem;\nexport type ModelItemLight = spec.ModelLightItem;\nexport type ModelCameraContent = spec.ModelCameraContent;\nexport type ModelLightContent = spec.ModelLightContent;\nexport type ModelTextureTransform = spec.ModelTextureTransform;\nexport type ModelItemBoundingBox = spec.ModelItemBoundingBox;\nexport type ModelItemBoundingSphere = spec.ModelItemBoundingSphere;\nexport type ModelItemBounding = spec.ModelItemBounding;\nexport type ModelCameraOptions = spec.ModelCameraOptions;\nexport type ModelLightBaseOptions = spec.ModelLightBaseOptions;\nexport type ModelLightPointOptions = spec.ModelLightPointOptions;\nexport type ModelLightSpotOptions = spec.ModelLightSpotOptions;\nexport type ModelLightDirOptions = spec.ModelLightDirOptions;\nexport type ModelAmbientLightOptions = spec.ModelAmbientLightOptions;\nexport type ModelLightOptions = spec.ModelLightOptions;\n\nexport type ModelItemMesh = spec.ModelMeshItem<'studio'>;\nexport type ModelItemSkybox = spec.ModelSkyboxItem<'studio'>;\nexport type ModelItemTree = spec.ModelTreeItem<'studio'>;\nexport type ModelMeshContent = spec.ModelMeshItemContent<'studio'>;\nexport type ModelSkyboxContent = spec.SkyboxContent<'studio'>;\nexport type ModelMeshOptions = spec.ModelMeshOptions<'studio'>;\nexport type ModelSkinOptions = spec.SkinOptions<'studio'>;\nexport type ModelPrimitiveOptions = spec.PrimitiveOptions<'studio'>;\nexport type ModelMaterialUnlitOptions = spec.MaterialUnlitOptions<'studio'>;\nexport type ModelMaterialPBROptions = spec.MaterialPBROptions<'studio'>;\nexport type ModelMaterialHariOptions = spec.MaterialHairOptions<'studio'>;\nexport type ModelMaterialOptions = spec.MaterialOptions<'studio'>;\nexport type ModelSkyboxOptions = spec.SkyboxOptions<'studio'>;\nexport type ModelTreeOptions = spec.ModelTreeOptions<'studio'>;\nexport type ModelTreeContent = spec.ModelTreeContent<'studio'>;\nexport type ModelAnimTrackOptions = spec.ModelAnimTrackOptions<'studio'>;\nexport type ModelAnimationOptions = spec.ModelAnimationOptions<'studio'>;\n\nexport type ModelMeshSkinData = spec.SkinData;\nexport type ModelMeshMorphData = spec.MorphData;\nexport type ModelMeshPrimitiveData = spec.PrimitiveData;\nexport type ModelMeshComponentData = spec.ModelMeshComponentData;\nexport type ModelLightType = spec.LightType;\nexport type ModelLightComponentData = spec.ModelLightComponentData;\nexport type ModelCameraComponentData = spec.ModelCameraComponentData;\nexport type ModelSkyboxComponentData = spec.SkyboxComponentData;\nexport type AnimationComponentData = spec.AnimationComponentData;\n\nexport * from './gesture';\nexport * from './gltf';\nexport * from './plugin';\nexport * from './runtime';\nexport * from './utility';\n\nlogger.info(`Plugin model version: ${version}.`);\n\nif (version !== EFFECTS.version) {\n console.error(\n '注意:请统一 Model 插件与 Player 版本,不统一的版本混用会有不可预知的后果!',\n '\\nAttention: Please ensure the Model plugin is synchronized with the Player version. Mixing and matching incompatible versions may result in unpredictable consequences!'\n );\n}\n","import type {\n Engine, HitTestBoxParams, HitTestCustomParams, HitTestSphereParams, Renderer, VFXItem,\n} from '@galacean/effects';\nimport {\n HitTestType, Behaviour, RendererComponent, effectsClass, spec, AnimationClip,\n} from '@galacean/effects';\nimport type {\n ModelCameraComponentData, ModelItemBounding, ModelLightComponentData,\n ModelMeshComponentData, ModelSkyboxComponentData, AnimationComponentData,\n} from '../index';\nimport { VFX_ITEM_TYPE_3D } from '../index';\nimport type { PSceneManager } from '../runtime';\nimport { PCamera, PLight, PMesh, PSkybox } from '../runtime';\nimport type { Euler, Ray, Vector2 } from '../runtime/math';\nimport { Vector3 } from '../runtime/math';\nimport { RayIntersectsBoxWithRotation } from '../utility';\nimport { getSceneManager } from './model-plugin';\n\n/**\n * 插件 Mesh 组件类,支持 3D Mesh 渲染能力\n * @since 2.0.0\n */\n@effectsClass(spec.DataType.MeshComponent)\nexport class ModelMeshComponent extends RendererComponent {\n /**\n * 内部 Mesh 对象\n */\n content: PMesh;\n /**\n * 参数\n */\n data?: ModelMeshComponentData;\n /**\n * 包围盒\n */\n bounding?: ModelItemBounding;\n /**\n * 场景管理器\n */\n sceneManager?: PSceneManager;\n /**\n * morph 动画权重\n */\n morphWeights: number[] = [];\n\n /**\n * 构造函数,只保存传入参数,不在这里创建内部对象\n * @param engine - 引擎\n * @param data - Mesh 参数\n */\n constructor (engine: Engine, data?: ModelMeshComponentData) {\n super(engine);\n if (data) {\n this.fromData(data);\n }\n }\n\n /**\n * 组件开始,需要创建内部对象,更新父元素信息和添加到场景管理器中\n */\n override start (): void {\n this.sceneManager = getSceneManager(this);\n this.createContent();\n this.item.type = VFX_ITEM_TYPE_3D;\n this.priority = this.item.renderOrder;\n this.sceneManager?.addItem(this.content);\n if (this.item.parentId && this.item.parent) {\n this.content.updateParentInfo(this.item.parentId, this.item.parent);\n }\n this.setVisible(true);\n this.item.getHitTestParams = this.getHitTestParams;\n }\n\n /**\n * 组件更新,更新内部对象状态\n * @param dt - 更新间隔\n */\n override update (dt: number): void {\n if (this.sceneManager) {\n this.content.build(this.sceneManager);\n }\n\n this.content.update();\n }\n\n /**\n * 组件晚更新,晚更新内部对象状态\n * @param dt - 更新间隔\n */\n override lateUpdate (dt: number): void {\n this.content.lateUpdate();\n }\n\n /**\n * 组件渲染,需要检查可见性\n * @param renderer - 渲染器\n * @returns\n */\n override render (renderer: Renderer) {\n if (!this.getVisible() || !this.sceneManager) {\n return;\n }\n\n this.content.render(this.sceneManager, renderer);\n }\n\n /**\n * 组件销毁,需要重场景管理器中删除\n */\n override onDestroy (): void {\n this.sceneManager?.removeItem(this.content);\n this.sceneManager = undefined;\n this.content.dispose();\n }\n\n /**\n * 反序列化,记录传入参数\n * @param data - 组件参数\n */\n override fromData (data: ModelMeshComponentData): void {\n super.fromData(data);\n this.data = data;\n }\n\n /**\n * 创建内部对象\n */\n createContent () {\n if (this.data) {\n const bounding = this.data.interaction;\n\n this.bounding = bounding && JSON.parse(JSON.stringify(bounding));\n\n this.content = new PMesh(this.engine, this.item.name, this.data, this, this.item.parentId);\n }\n }\n\n /**\n * 设置当前 Mesh 的可见性。\n * @param visible - true:可见,false:不可见\n */\n setVisible (visible: boolean) {\n this.content?.onVisibleChanged(visible);\n }\n\n /**\n * 获取当前 Mesh 的可见性。\n */\n getVisible (): boolean {\n return this.content?.visible ?? false;\n }\n\n /**\n * 获取点击测试参数,根据元素包围盒进行相交测试,Mesh 对象会进行更加精确的点击测试\n * @param force - 是否强制进行点击测试\n * @returns 点击测试参数\n */\n getHitTestParams = (force?: boolean): HitTestBoxParams | HitTestSphereParams | HitTestCustomParams | undefined => {\n this.computeBoundingBox();\n const bounding = this.bounding;\n\n if (bounding && (force || Number.isInteger(bounding.behavior))) {\n const type = bounding.type;\n\n if (type === spec.ModelBoundingType.box) {\n if (this.content instanceof PMesh) {\n const mesh = this.content;\n const customHitTest: HitTestCustomParams = {\n behavior: bounding.behavior as number,\n type: HitTestType.custom,\n collect: function (ray: Ray, pointInCanvas: Vector2) {\n const result = mesh.hitTesting(ray.origin, ray.direction);\n\n return result;\n },\n };\n\n return customHitTest;\n } else {\n const worldMatrixData = this.transform.getWorldMatrix();\n const customHitTest: HitTestCustomParams = {\n behavior: bounding.behavior as number,\n type: HitTestType.custom,\n collect: function (ray: Ray, pointInCanvas: Vector2) {\n const result = RayIntersectsBoxWithRotation(ray, worldMatrixData, bounding);\n\n return result;\n },\n };\n\n return customHitTest;\n }\n } else if (type === spec.ModelBoundingType.sphere) {\n const pos = new Vector3();\n\n this.transform.assignWorldTRS(pos);\n const center = new Vector3();\n\n if (bounding.center) {\n center.setFromArray(bounding.center);\n }\n\n center.add(pos);\n\n return {\n type: type as unknown as HitTestType.sphere,\n behavior: bounding.behavior as number,\n radius: bounding.radius || 0,\n center,\n };\n }\n }\n };\n\n /**\n * 计算元素包围盒,只针对 Mesh 对象\n * @returns 包围盒\n */\n computeBoundingBox (): ModelItemBounding | undefined {\n if (this.content && this.content instanceof PMesh) {\n const worldMatrix = this.transform.getWorldMatrix();\n const bbox = this.content.computeBoundingBox(worldMatrix);\n const center = bbox.getCenter(new Vector3());\n const size = bbox.getSize(new Vector3());\n\n this.bounding = {\n behavior: this.bounding?.behavior,\n type: spec.ModelBoundingType.box,\n center: [center.x, center.y, center.z],\n size: [size.x, size.y, size.z],\n };\n\n return this.bounding;\n } else {\n return;\n }\n }\n}\n\n/**\n * 插件天空盒组件类,支持 3D 天空盒渲染能力\n * @since 2.0.0\n */\n@effectsClass(spec.DataType.SkyboxComponent)\nexport class ModelSkyboxComponent extends RendererComponent {\n /**\n * 内部天空盒对象\n */\n content: PSkybox;\n /**\n * 天空盒参数\n */\n data?: ModelSkyboxComponentData;\n /**\n * 场景管理器\n */\n sceneManager?: PSceneManager;\n\n /**\n * 构造函数,只保存传入参数,不在这里创建内部对象\n * @param engine - 引擎\n * @param data - Mesh 参数\n */\n constructor (engine: Engine, data?: ModelSkyboxComponentData) {\n super(engine);\n if (data) {\n this.fromData(data);\n }\n }\n\n /**\n * 组件开始,需要创建内部对象和添加到场景管理器中\n */\n override start (): void {\n this.createContent();\n this.item.type = VFX_ITEM_TYPE_3D;\n this.priority = this.item.renderOrder;\n this.sceneManager = getSceneManager(this);\n this.sceneManager?.addItem(this.content);\n this.setVisible(true);\n }\n\n /**\n * 组件渲染,需要检查可见性\n * @param renderer - 渲染器\n * @returns\n */\n override render (renderer: Renderer) {\n if (!this.getVisible() || !this.sceneManager) {\n return;\n }\n\n this.content.render(this.sceneManager, renderer);\n }\n\n /**\n * 组件销毁,需要重场景管理器中删除\n */\n override onDestroy (): void {\n this.sceneManager?.removeItem(this.content);\n this.sceneManager = undefined;\n this.content.dispose();\n }\n\n /**\n * 反序列化,记录传入参数\n * @param data - 组件参数\n */\n override fromData (data: ModelSkyboxComponentData): void {\n super.fromData(data);\n this.data = data;\n }\n\n /**\n * 创建内部对象\n */\n createContent () {\n if (this.data) {\n const skyboxData = this.data;\n\n this.content = new PSkybox(this.item.name, skyboxData, this);\n }\n }\n\n /**\n * 设置当前可见性。\n * @param visible - true:可见,false:不可见\n */\n setVisible (visible: boolean) {\n this.content?.onVisibleChanged(visible);\n }\n\n /**\n * 获取当前可见性。\n */\n getVisible (): boolean {\n return this.content?.visible ?? false;\n }\n}\n\n/**\n * 插件灯光组件类,支持 3D 灯光能力\n * @since 2.0.0\n */\n@effectsClass(spec.DataType.LightComponent)\nexport class ModelLightComponent extends Behaviour {\n /**\n * 内部灯光对象\n */\n content: PLight;\n /**\n * 参数\n */\n data?: ModelLightComponentData;\n\n /**\n * 构造函数,只保存传入参数,不在这里创建内部对象\n * @param engine - 引擎\n * @param data - Mesh 参数\n */\n constructor (engine: Engine, data?: ModelLightComponentData) {\n super(engine);\n if (data) {\n this.fromData(data);\n }\n }\n\n /**\n * 组件开始,需要创建内部对象和添加到场景管理器中\n */\n override start (): void {\n this.createContent();\n this.item.type = VFX_ITEM_TYPE_3D;\n const scene = getSceneManager(this);\n\n scene?.addItem(this.content);\n this.setVisible(true);\n }\n\n /**\n * 组件更新,更新内部对象状态\n * @param dt - 更新间隔\n */\n override update (dt: number): void {\n this.content.update();\n }\n\n /**\n * 组件销毁\n */\n override onDestroy (): void {\n this.content.dispose();\n }\n\n /**\n * 反序列化,记录传入参数\n * @param data - 组件参数\n */\n override fromData (data: ModelLightComponentData): void {\n super.fromData(data);\n\n this.data = data;\n }\n\n /**\n * 创建内部对象\n */\n createContent () {\n if (this.data) {\n const lightData = this.data;\n\n this.content = new PLight(this.item.name, lightData, this);\n }\n }\n\n /**\n * 设置当前可见性。\n * @param visible - true:可见,false:不可见\n */\n setVisible (visible: boolean) {\n this.content?.onVisibleChanged(visible);\n }\n\n /**\n * 获取当前 Mesh 的可见性。\n */\n getVisible (): boolean {\n return this.content?.visible ?? false;\n }\n}\n\n/**\n * 插件相机组件类,支持 3D 相机能力\n * @since 2.0.0\n */\n@effectsClass(spec.DataType.CameraComponent)\nexport class ModelCameraComponent extends Behaviour {\n /**\n * 内部相机对象\n */\n content: PCamera;\n /**\n * 参数\n */\n data?: ModelCameraComponentData;\n /**\n * 构造函数,只保存传入参数,不在这里创建内部对象\n * @param engine - 引擎\n * @param data - Mesh 参数\n */\n constructor (engine: Engine, data?: ModelCameraComponentData) {\n super(engine);\n if (data) {\n this.fromData(data);\n }\n }\n\n /**\n * 组件开始,需要创建内部对象和添加到场景管理器中\n */\n override start (): void {\n this.createContent();\n this.item.type = VFX_ITEM_TYPE_3D;\n const scene = getSceneManager(this);\n\n scene?.addItem(this.content);\n this.updateMainCamera();\n }\n\n /**\n * 组件更新,更新内部对象状态\n * @param dt - 更新间隔\n */\n override update (dt: number): void {\n this.content.update();\n this.updateMainCamera();\n }\n\n /**\n * 组件销毁\n */\n override onDestroy (): void {\n this.content?.dispose();\n }\n\n /**\n * 反序列化,记录传入参数\n * @param data - 组件参数\n */\n override fromData (data: ModelCameraComponentData): void {\n super.fromData(data);\n\n this.data = data;\n }\n\n /**\n * 创建内部对象\n */\n createContent () {\n if (this.data) {\n const cameraData = this.data;\n\n const width = this.engine.renderer.getWidth();\n const height = this.engine.renderer.getHeight();\n\n this.content = new PCamera(this.item.name, width, height, cameraData, this);\n }\n }\n\n /**\n * 更新合成主相机,更加当前相机元素状态\n */\n updateMainCamera () {\n this.content.matrix = this.transform.getWorldMatrix();\n const composition = this.item.composition;\n\n if (composition) {\n composition.camera.position = this.transform.position.clone();\n composition.camera.setQuat(this.transform.quat);\n composition.camera.near = this.content.nearPlane;\n composition.camera.far = this.content.farPlane;\n composition.camera.fov = this.content.fov;\n }\n }\n\n /**\n * 设置变换\n * @param position - 位置\n * @param rotation - 旋转\n */\n setTransform (position?: Vector3, rotation?: Euler): void {\n if (position) {\n this.transform.setPosition(position.x, position.y, position.z);\n }\n if (rotation) {\n this.transform.setRotation(rotation.x, rotation.y, rotation.z);\n }\n this.updateMainCamera();\n }\n}\n\n/**\n * 插件动画组件类,支持 3D 动画能力\n * @since 2.0.0\n */\n@effectsClass(spec.DataType.AnimationComponent)\nexport class AnimationComponent extends Behaviour {\n /**\n * 参数\n */\n data?: AnimationComponentData;\n\n elapsedTime = 0;\n animation = -1;\n clips: ModelAnimationClip[] = [];\n /**\n * 构造函数,只保存传入参数,不在这里创建内部对象\n * @param engine - 引擎\n */\n constructor (engine: Engine) {\n super(engine);\n }\n\n /**\n * 组件开始,需要创建内部对象和添加到场景管理器中\n */\n override start (): void {\n this.elapsedTime = 0;\n this.item.type = VFX_ITEM_TYPE_3D;\n }\n\n /**\n * 组件更新,更新内部对象状态\n * @param dt - 更新间隔\n */\n override update (dt: number): void {\n this.elapsedTime += dt * 0.001;\n if (this.animation >= 0 && this.animation < this.clips.length) {\n this.clips[this.animation].sampleAnimation(this.item, this.elapsedTime);\n }\n }\n\n /**\n * 组件销毁\n */\n override onDestroy (): void {\n\n }\n\n /**\n * 反序列化,记录传入参数\n * @param data - 组件参数\n */\n override fromData (data: AnimationComponentData): void {\n super.fromData(data);\n this.data = data;\n //\n this.name = data.name ?? '<empty>';\n this.animation = data.animation ?? -1;\n this.clips = [];\n data.animationClips.forEach(clipData => {\n const clipObj = new ModelAnimationClip(this.engine);\n\n clipObj.setFromAnimationClip(clipData as unknown as AnimationClip);\n this.clips.push(clipObj);\n });\n }\n}\n\nclass ModelAnimationClip extends AnimationClip {\n path2Node: Record<string, VFXItem> = {};\n\n override sampleAnimation (vfxItem: VFXItem, time: number) {\n const duration = vfxItem.duration;\n const life = Math.max(0, time) % duration;\n\n for (const curve of this.positionCurves) {\n const value = curve.keyFrames.getValue(life % this.duration);\n const target = this.getTargetItem(vfxItem, curve.path);\n\n target?.transform.setPosition(value.x, value.y, value.z);\n }\n\n for (const curve of this.rotationCurves) {\n const value = curve.keyFrames.getValue(life % this.duration);\n const target = this.getTargetItem(vfxItem, curve.path);\n\n target?.transform.setQuaternion(value.x, value.y, value.z, value.w);\n }\n\n for (const curve of this.scaleCurves) {\n const value = curve.keyFrames.getValue(life % this.duration);\n const target = this.getTargetItem(vfxItem, curve.path);\n\n target?.transform.setScale(value.x, value.y, value.z);\n }\n\n for (const curve of this.floatCurves) {\n const value = curve.keyFrames.getValue(life % this.duration);\n const target = this.getTargetItem(vfxItem, curve.path);\n\n if (curve.className === 'ModelMeshComponent') {\n const component = target?.getComponent(ModelMeshComponent);\n\n if (component) {\n const properties = curve.property.split('.');\n\n setProperty(component, properties, value);\n } else {\n console.error('Can\\'t find mesh component.');\n }\n } else {\n console.warn(`Ignore curve: className ${curve.className}.`);\n }\n }\n }\n\n setFromAnimationClip (clip: AnimationClip) {\n this.duration = clip.duration;\n this.positionCurves = clip.positionCurves.slice();\n this.rotationCurves = clip.rotationCurves.slice();\n this.scaleCurves = clip.scaleCurves.slice();\n this.floatCurves = clip.floatCurves.slice();\n }\n\n getTargetItem (rootItem: VFXItem, path: string) {\n if (this.path2Node[path]) {\n return this.path2Node[path];\n }\n\n let target = rootItem;\n const nameList = path.split('/');\n\n for (const name of nameList) {\n let findTag = false;\n\n for (const child of target.children) {\n if (child.name === name) {\n target = child;\n findTag = true;\n\n break;\n }\n }\n if (!findTag) {\n throw new Error(`Can't find path in tree ${rootItem.id}, ${path}.`);\n }\n }\n\n this.path2Node[path] = target;\n\n return target;\n }\n}\n\nfunction setProperty<T> (obj: Object, properties: string[], value: T) {\n const len = properties.length;\n let current: any = obj;\n\n for (let i = 0; i < len - 1; i++) {\n const propName = properties[i];\n\n if (!(propName in current) || typeof current[propName] !== 'object') {\n console.error(`Invalid properties ${properties}.`);\n\n return;\n }\n current = current[propName];\n }\n\n current[properties[len - 1]] = value;\n}\n","import type { Composition, Region, spec } from '@galacean/effects';\nimport type { Ray, Matrix4 } from '../runtime/math';\nimport { Vector3 } from '../runtime/math';\nimport type { ModelItemBounding, ModelItemBoundingBox } from '../index';\nimport { VFX_ITEM_TYPE_3D } from '../plugin/const';\nimport { ModelMeshComponent } from '../plugin/model-item';\n\n// 射线与带旋转的包围盒求交\n// function transformDirection (m: Matrix4, direction: Vector3) {\n// const x = direction.x;\n// const y = direction.y;\n// const z = direction.z;\n// const me = m.elements;\n// const result = new Vector3();\n\n// result.x = me[0] * x + me[4] * y + me[8] * z;\n// result.y = me[1] * x + me[5] * y + me[9] * z;\n// result.z = me[2] * x + me[6] * y + me[10] * z;\n\n// return result.normalize();\n\n// }\n\n/**\n * 带旋转的射线与包围盒求交\n * @param ray - 射线\n * @param matrixData - 矩阵\n * @param bounding - 包围盒\n * @returns 交点列表或者 undefined\n */\nfunction RayIntersectsBoxWithRotation (ray: Ray, matrixData: Matrix4, bounding: ModelItemBounding): Vector3[] | undefined {\n const local2World = matrixData;\n const world2Local = local2World.clone().invert();\n\n const newRay = ray.clone().applyMatrix(world2Local);\n const boxCenter = Vector3.fromArray(bounding.center!);\n const boxHalfSize = Vector3.fromArray((bounding as ModelItemBoundingBox).size!).multiply(0.5);\n const boxMin = boxCenter.clone().subtract(boxHalfSize);\n const boxMax = boxCenter.clone().add(boxHalfSize);\n const intersetPoint = newRay.intersectBox({ min: boxMin, max: boxMax }, new Vector3());\n\n if (intersetPoint !== undefined) {\n const insersetPointInWorld = local2World.transformPoint(intersetPoint);\n\n return [insersetPointInWorld];\n } else {\n return;\n }\n}\n\n/**\n * 射线与包围盒求交\n * @param ro - 射线原点\n * @param rd - 射线方向\n * @param bmin - 包围盒左下点\n * @param bmax - 包围盒右上点\n * @returns 交点参数或者 undefined\n */\nfunction RayBoxTesting (ro: Vector3, rd: Vector3, bmin: Vector3, bmax: Vector3): number | undefined {\n let tmin = 0, tmax = 0;\n let tymin = 0, tymax = 0;\n let tzmin = 0, tzmax = 0;\n const invdirx = 1 / rd.x;\n const invdiry = 1 / rd.y;\n const invdirz = 1 / rd.z;\n\n if (invdirx >= 0) {\n tmin = (bmin.x - ro.x) * invdirx;\n tmax = (bmax.x - ro.x) * invdirx;\n } else {\n tmin = (bmax.x - ro.x) * invdirx;\n tmax = (bmin.x - ro.x) * invdirx;\n }\n\n if (invdiry >= 0) {\n tymin = (bmin.y - ro.y) * invdiry;\n tymax = (bmax.y - ro.y) * invdiry;\n } else {\n tymin = (bmax.y - ro.y) * invdiry;\n tymax = (bmin.y - ro.y) * invdiry;\n }\n\n // These lines also handle the case where tmin or tmax is NaN\n // (result of 0 * Infinity). x !== x returns true if x is NaN\n if (tmin > tymax || tymin > tmax) {\n return;\n }\n\n if (tymin > tmin || tmin !== tmin) {\n tmin = tymin;\n }\n if (tymax < tmax || tmax !== tmax) {\n tmax = tymax;\n }\n\n if (invdirz >= 0) {\n tzmin = (bmin.z - ro.z) * invdirz;\n tzmax = (bmax.z - ro.z) * invdirz;\n } else {\n tzmin = (bmax.z - ro.z) * invdirz;\n tzmax = (bmin.z - ro.z) * invdirz;\n }\n\n if (tmin > tzmax || tzmin > tmax) {\n return;\n }\n if (tzmin > tmin || tmin !== tmin) {\n tmin = tzmin;\n }\n if (tzmax < tmax || tmax !== tmax) {\n //return point closest to the ray (positive side)\n tmax = tzmax;\n }\n\n if (tmax < 0) {\n return;\n }\n\n return tmin >= 0 ? tmin : tmax;\n}\n\nconst diff = new Vector3();\nconst edge1 = new Vector3();\nconst edge2 = new Vector3();\nconst normal = new Vector3();\n\n/**\n * 射线与三角形求交\n * @param ro - 射线原点\n * @param rd - 射线方向\n * @param a - 三角形点\n * @param b - 三角形点\n * @param c - 三角形点\n * @param backfaceCulling - 是否剔除背面\n * @returns 交点参数或者 undefined\n */\nfunction RayTriangleTesting (ro: Vector3, rd: Vector3, a: Vector3, b: Vector3, c: Vector3, backfaceCulling: boolean): number | undefined {\n // Compute the offset origin, edges, and normal.\n // from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n edge1.subtractVectors(b, a);\n edge2.subtractVectors(c, a);\n normal.crossVectors(edge1, edge2);\n // Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n // E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n //\t |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n //\t |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n //\t |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\n let DdN = rd.dot(normal);\n let sign = 0;\n\n if (DdN > 0) {\n if (backfaceCulling) { return; }\n sign = 1;\n } else if (DdN < 0) {\n sign = -1;\n DdN = -DdN;\n } else {\n return;\n }\n\n diff.subtractVectors(ro, a);\n\n edge2.crossVectors(diff, edge2);\n const DdQxE2 = sign * rd.dot(edge2); // b1 < 0, no intersection\n\n if (DdQxE2 < 0) {\n return;\n }\n\n edge1.crossVectors(edge1, diff);\n const DdE1xQ = sign * rd.dot(edge1); // b2 < 0, no intersection\n\n if (DdE1xQ < 0) {\n return;\n } // b1+b2 > 1, no intersection\n\n if (DdQxE2 + DdE1xQ > DdN) {\n return;\n } // Line intersects triangle, check if ray does.\n\n const QdN = -sign * diff.dot(normal); // t < 0, no intersection\n\n if (QdN < 0) {\n return;\n } // Ray intersects triangle.\n\n return QdN / DdN;\n}\n\n/**\n * 合成点击测试,支持获取多个交点,并按照远近排序\n * @param composition - 合成\n * @param x - 点击 x 坐标\n * @param y - 点击 y 坐标\n * @returns 点击信息列表\n */\nfunction CompositionHitTest (composition: Composition, x: number, y: number): Region[] {\n const regions = composition.hitTest(x, y, true);\n const ray = composition.getHitTestRay(x, y);\n\n if (regions.length <= 0) {\n return [];\n }\n\n const o = ray.origin;\n const d = ray.direction;\n const nums = regions.map((region, index) => {\n const p = region.position;\n //const p = (region.hitPositions as vec3[]) [index];\n const t: spec.vec3 = [0, 0, 0];\n\n for (let i = 0; i < 3; i++) {\n t[i] = (p.getElement(i) - o.getElement(i)) / d.getElement(i);\n }\n\n return [index, Math.max(...t)];\n });\n\n nums.sort(function (a, b) {\n const a1 = a[1] >= 0 ? a[1] : (a[1] + 1000000000);\n const b1 = b[1] >= 0 ? b[1] : (b[1] + 1000000000);\n\n return a1 - b1;\n });\n\n return nums.map(val => {\n return regions[val[0]];\n });\n}\n\n/**\n * 切换 3D Mesh 元素的包围盒显示标志\n * @param composition - 合成\n * @param itemId - 元素 id\n */\nfunction ToggleItemBounding (composition: Composition, itemId: string) {\n composition.items?.forEach(item => {\n if (item.type === VFX_ITEM_TYPE_3D) {\n const meshComponent = item.getComponent(ModelMeshComponent);\n\n if (meshComponent) {\n const mesh = meshComponent.content;\n\n if (item.id === itemId) {\n mesh.visBoundingBox = true;\n } else {\n mesh.visBoundingBox = false;\n }\n }\n }\n });\n}\n\nexport { RayIntersectsBoxWithRotation, RayBoxTesting, RayTriangleTesting, ToggleItemBounding, CompositionHitTest };\n","import type {\n Scene,\n Composition,\n Attribute,\n GeometryProps,\n TextureSourceOptions,\n TextureSourceCubeData,\n TextureConfigOptions,\n Texture2DSourceOptionsImage,\n TextureCubeSourceOptionsImageMipmaps,\n Engine,\n math,\n VFXItemData,\n} from '@galacean/effects';\nimport {\n Player,\n spec,\n Transform,\n glContext,\n Material,\n Mesh,\n Texture,\n Geometry,\n Renderer,\n TextureSourceType,\n getDefaultTextureFactory,\n RenderPass,\n RenderPassDestroyAttachmentType,\n TextureLoadAction,\n DestroyOptions,\n loadImage,\n PLAYER_OPTIONS_ENV_EDITOR,\n GLSLVersion,\n} from '@galacean/effects';\nimport { deserializeGeometry, typedArrayFromBinary } from '@galacean/effects-helper';\nimport type { GLTFCamera, GLTFImage, GLTFLight, GLTFTexture } from '@vvfx/resource-detection';\nimport type {\n ModelAnimationOptions,\n ModelMeshOptions,\n ModelMaterialOptions,\n ModelLightOptions,\n ModelCameraOptions,\n ModelSkyboxOptions,\n ModelSkinOptions,\n ModelPrimitiveOptions,\n ModelTextureTransform,\n ModelTreeOptions,\n ModelAnimTrackOptions,\n ModelMeshComponent,\n} from '../index';\nimport { Matrix3, Matrix4, Vector3, Vector4, DEG2RAD } from '../runtime/math';\nimport type { FBOOptions } from './ri-helper';\nimport type { PMaterialBase } from '../runtime/material';\nimport type { PImageBufferData } from '../runtime/skybox';\nimport { PGlobalState } from '../runtime/common';\nimport { RayTriangleTesting } from './hit-test-helper';\nimport { PMorph } from '../runtime/animation';\nimport type { CompositionCache } from '../runtime/cache';\n\ntype Box3 = math.Box3;\ntype VertexArray = Float32Array | Int32Array | Int16Array | Int8Array | Uint32Array | Uint16Array | Uint8Array;\n\n/**\n * WebGL 辅助类,负责 WebGL 相关对象的创建\n */\nexport class WebGLHelper {\n /**\n * 立方体纹理参数\n */\n static cubemapTexConfig: TextureConfigOptions = {\n name: 'cubemap texture',\n wrapS: glContext.CLAMP_TO_EDGE,\n wrapT: glContext.CLAMP_TO_EDGE,\n magFilter: glContext.LINEAR,\n minFilter: glContext.LINEAR,\n };\n /**\n * 立方体纹理参数,带 Mipmap 滤波\n */\n static cubemapMipTexConfig: TextureConfigOptions = {\n wrapS: glContext.CLAMP_TO_EDGE,\n wrapT: glContext.CLAMP_TO_EDGE,\n magFilter: glContext.LINEAR,\n minFilter: glContext.LINEAR_MIPMAP_LINEAR,\n };\n\n /**\n * 创建二维纹理对象\n * @param engine - 引擎\n * @param image - glTF 图像参数\n * @param texture - glTF 纹理参数\n * @param isBaseColor - 是否基础颜色\n * @param tiny3dMode - 是否 Tiny3d 模式\n * @returns 二维纹理对象\n */\n static async createTexture2D (engine: Engine, image: GLTFImage, texture: GLTFTexture, isBaseColor?: boolean, tiny3dMode?: boolean): Promise<Texture> {\n if (image.imageData === undefined) {\n console.error(`createTexture2D: Invalid image data from ${image}.`);\n\n // 这里不应该发生的,做个兜底\n return Texture.create(engine, {\n name: 'createTexture2D',\n sourceType: TextureSourceType.data,\n data: {\n data: new Uint8Array([255, 255, 255, 255]),\n width: 1,\n height: 1,\n },\n });\n }\n const blob = new Blob([image.imageData], { type: image.mimeType });\n const urlCreator = window.URL || window.webkitURL;\n const imageUrl = urlCreator.createObjectURL(blob);\n const imageObj = new Image();\n\n imageObj.src = imageUrl;\n\n return new Promise(function (resolve, reject) {\n imageObj.onload = () => {\n let minFilter: number = texture.minFilter ?? glContext.LINEAR_MIPMAP_LINEAR;\n let premultiplyAlpha = false;\n\n if (tiny3dMode) {\n //if (minFilter === glContext.NEAREST_MIPMAP_LINEAR\n // || minFilter === glContext.LINEAR_MIPMAP_NEAREST) {\n minFilter = glContext.LINEAR_MIPMAP_LINEAR;\n //}\n if (!WebGLHelper.isPow2(imageObj.width) || !WebGLHelper.isPow2(imageObj.height)) {\n minFilter = glContext.LINEAR;\n }\n //\n premultiplyAlpha = isBaseColor ? false : true;\n }\n\n let generateMipmap = false;\n\n if (minFilter == glContext.NEAREST_MIPMAP_NEAREST ||\n minFilter == glContext.LINEAR_MIPMAP_NEAREST ||\n minFilter == glContext.NEAREST_MIPMAP_LINEAR ||\n minFilter == glContext.LINEAR_MIPMAP_LINEAR) {\n generateMipmap = true;\n }\n\n const res = Texture.create(engine, {\n name: 'createTexture2D',\n wrapS: texture.wrapS ?? glContext.REPEAT,\n wrapT: texture.wrapT ?? glContext.REPEAT,\n magFilter: texture.magFilter ?? glContext.LINEAR,\n minFilter,\n anisotropic: 1,\n //flipY: tex.flipY,\n premultiplyAlpha,\n sourceType: TextureSourceType.image,\n image: imageObj,\n generateMipmap,\n });\n\n resolve(res);\n urlCreator.revokeObjectURL(imageUrl);\n };\n imageObj.onerror = reject;\n });\n }\n\n /**\n * 创建纹理对象列表\n * @param engine - 引擎\n * @param images - glTF 图像列表\n * @param textures - glTF 纹理参数列表\n * @returns 纹理对象列表\n */\n static async createTextureList (engine: Engine, images: GLTFImage[], textures: GLTFTexture[]): Promise<Texture[]> {\n const outTextures = await Promise.all(\n textures.map(tex => {\n return this.createTexture2D(engine, images[tex.source], tex);\n })\n );\n\n return outTextures;\n }\n\n /**\n * 获取立方体纹理数据\n * @param images - 图像数据列表\n * @returns\n */\n static async getTextureCubeData (images: PImageBufferData[]): Promise<TextureSourceCubeData> {\n const cubeData: TextureSourceCubeData = [\n await WebHelper.loadImageFromImageData(images[0]),\n await WebHelper.loadImageFromImageData(images[1]),\n await WebHelper.loadImageFromImageData(images[2]),\n await WebHelper.loadImageFromImageData(images[3]),\n await WebHelper.loadImageFromImageData(images[4]),\n await WebHelper.loadImageFromImageData(images[5]),\n ];\n\n return cubeData;\n }\n\n /**\n * 获取立方体纹理 Mipmap 数据\n * @param images - 图像数据二维列表\n * @returns 立方体纹理数据\n */\n static async getTextureCubeMipmapData (images: PImageBufferData[][]): Promise<TextureSourceCubeData[]> {\n const mipmaps: TextureSourceCubeData[] = [];\n\n for (let i = 0; i < images.length; i++) {\n mipmaps.push(await this.getTextureCubeData(images[i]));\n }\n\n return mipmaps;\n }\n\n /**\n * 从 URL 创建立方体纹理\n * @param engine - 引擎\n * @param cubeImage - 立方体图像 URL\n * @returns 纹理对象\n */\n static async createTextureCubeFromURL (engine: Engine, cubeImage: string[]): Promise<Texture> {\n const textureOptions = await getDefaultTextureFactory().loadSource(\n {\n type: TextureSourceType.image,\n target: glContext.TEXTURE_CUBE_MAP,\n map: cubeImage,\n },\n this.cubemapTexConfig,\n );\n\n return Texture.create(engine, textureOptions);\n }\n\n /**\n * 从 URL 创建带 Mipmap 立方体纹理\n * @param engine - 引擎\n * @param cubeImages - 立方体 Mipmap 图像 URL\n * @returns 纹理对象\n */\n static async createTextureCubeMipmapFromURL (engine: Engine, cubeImages: string[][]): Promise<Texture> {\n const textureOptions = await getDefaultTextureFactory().loadSource(\n {\n type: TextureSourceType.mipmaps,\n target: glContext.TEXTURE_CUBE_MAP,\n maps: cubeImages,\n },\n this.cubemapMipTexConfig,\n );\n\n return Texture.create(engine, textureOptions);\n }\n\n /**\n * 从缓冲区创建立方体纹理\n * @param engine - 引擎\n * @param cubeImages - 图像缓冲区数据列表\n * @returns 纹理对象\n */\n static async createTextureCubeFromBuffer (engine: Engine, cubeImages: PImageBufferData[]): Promise<Texture> {\n const cubemap = await WebGLHelper.getTextureCubeData(cubeImages);\n\n return Texture.create(\n engine,\n {\n name: 'createTextureCubeFromBuffer',\n sourceType: TextureSourceType.image,\n cube: cubemap,\n target: glContext.TEXTURE_CUBE_MAP,\n ...this.cubemapTexConfig,\n });\n }\n\n /**\n * 从缓冲区创建带 Mipmap 立方体纹理\n * @param engine - 引擎\n * @param cubeImages - 图像缓冲区数据二维列表\n * @param level0Size - 第 0 层 Mip 的图像大小\n * @returns 纹理对象\n */\n static async createTextureCubeMipmapFromBuffer (engine: Engine, cubeImages: PImageBufferData[][], level0Size: number): Promise<Texture> {\n const mipmaps = await WebGLHelper.getTextureCubeMipmapData(cubeImages);\n //\n let mipCount = 0;\n\n while (Math.pow(2, mipCount) < level0Size) {\n ++mipCount;\n }\n\n while (mipmaps.length <= mipCount) {\n const index = Math.pow(2, mipCount - mipmaps.length);\n const url = `https://gw.alipayobjects.com/zos/gltf-asset/67896749597915/img${index}.png`;\n const imageData = await loadImage(url);\n\n mipmaps.push([imageData, imageData, imageData, imageData, imageData, imageData]);\n }\n\n return Texture.create(\n engine,\n {\n name: 'createTextureCubeMipmapFromBuffer',\n sourceType: TextureSourceType.mipmaps,\n mipmaps,\n target: glContext.TEXTURE_CUBE_MAP,\n ...this.cubemapMipTexConfig,\n });\n }\n\n /**\n * 获取纹理对象\n * @param index - 索引\n * @param textures - 纹理数组\n * @returns 纹理获取或 undefined\n */\n static getTexture (index: number, textures: Texture[]): Texture | null {\n if (index < 0 || index >= textures.length) {\n return null;\n } else {\n return textures[index];\n }\n }\n\n /**\n * 从图像创建纹理\n * @param engine - 引擎\n * @param image - HTML 图像元素\n * @returns\n */\n static createTextureFromImage (engine: Engine, image: HTMLImageElement | HTMLCanvasElement): Texture {\n const options: TextureSourceOptions = {\n name: 'createTextureFromImage',\n image,\n sourceType: TextureSourceType.image,\n flipY: false,\n magFilter: glContext.LINEAR,\n minFilter: glContext.LINEAR,\n wrapT: glContext.REPEAT,\n wrapS: glContext.REPEAT,\n };\n\n return Texture.create(engine, options);\n }\n\n /**\n * 创建渲染 Pass\n * @param renderer - 渲染器\n * @param name - 名称\n * @param priority - 优先级\n * @param meshData - Mesh 数据或数据列表\n * @param fboOpts - FBO 参数\n * @returns\n */\n static createRenderPass (renderer: Renderer, name: string, priority: number, meshData: Mesh | Mesh[], fboOpts: FBOOptions): RenderPass {\n const meshList = meshData instanceof Mesh ? [meshData] : meshData;\n\n return new RenderPass(renderer, {\n name,\n priority,\n attachments: fboOpts.colorAttachments,\n depthStencilAttachment: fboOpts.depthAttachment,\n clearAction: {\n clearDepth: 1,\n clearStencil: 0,\n clearColor: [0, 0, 0, 0],\n colorAction: TextureLoadAction.clear,\n depthAction: TextureLoadAction.clear,\n },\n // storeAction: {\n // colorAction: TextureStoreAction.store,\n // },\n meshes: meshList,\n viewport: fboOpts.viewport,\n });\n }\n\n /**\n * 删除纹理\n * @param texture - 纹理对象\n */\n static deleteTexture (texture: Texture) {\n texture.dispose();\n }\n\n /**\n * 删除 Mesh\n * @param mesh - Mesh 对象\n */\n static deleteMesh (mesh: Mesh) {\n mesh.dispose({\n geometries: DestroyOptions.destroy,\n material: {\n textures: DestroyOptions.destroy,\n },\n });\n }\n\n /**\n * 删除几何\n * @param geometry - 几何体\n */\n static deleteGeometry (geometry: Geometry) {\n geometry.dispose();\n }\n\n /**\n * 删除渲染 Pass\n * @param pass - 渲染 Pass\n */\n static deleteRenderPass (pass: RenderPass) {\n pass.dispose({\n meshes: {\n geometries: DestroyOptions.destroy,\n material: {\n textures: DestroyOptions.destroy,\n },\n },\n depthStencilAttachment: RenderPassDestroyAttachmentType.force,\n colorAttachment: RenderPassDestroyAttachmentType.force,\n semantics: DestroyOptions.destroy,\n });\n }\n\n /**\n * 返回 Mesh 是否半透明\n * @param component - ModelMeshComponent 对象\n * @return 是否半透明\n */\n static isTransparentMesh (component: ModelMeshComponent): boolean {\n return component.material.blending === true;\n }\n\n /**\n * renderer 是否支持 Float 纹理\n * @param engine - 引擎对象\n * @returns\n */\n static isSupportFloatTexture (engine: Engine): boolean {\n const capability = engine.gpuCapability;\n\n return capability.detail.floatTexture !== 0;\n }\n\n /**\n * renderer 是否支持 HalfFloat 纹理\n * @returns\n */\n static isSupportHalfFloatTexture (engine: Engine): boolean {\n const capability = engine.gpuCapability;\n\n return capability.detail.halfFloatTexture !== 0;\n }\n\n /**\n * 是否 2 的幂次\n * @param v - 数值\n * @returns\n */\n static isPow2 (v: number): boolean {\n return !(v & (v - 1)) && (!!v);\n }\n}\n\n/**\n * Mesh 辅助类,负责 Mesh 相关的基础对象创建\n */\nexport class MeshHelper {\n /**\n * 创建滤波 Mesh\n * @param engine - 引擎\n * @param name - 名称\n * @param material - 3D 材质\n * @returns Mesh 对象\n */\n static createFilterMesh (engine: Engine, name: string, material: PMaterialBase): Mesh {\n const globalState = PGlobalState.getInstance();\n const vertexShader = material.vertexShaderCode;\n const fragmentShader = material.fragmentShaderCode;\n const geometry = Geometry.create(engine, MeshHelper.getPlaneGeometry());\n const isWebGL2 = engine.gpuCapability.level === 2;\n const effectsMaterial = Material.create(\n engine,\n {\n shader: {\n vertex: vertexShader,\n fragment: fragmentShader,\n shared: globalState.shaderShared,\n glslVersion: isWebGL2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n },\n }\n );\n\n material.setMaterialStates(effectsMaterial);\n\n return Mesh.create(\n engine,\n {\n name,\n worldMatrix: Matrix4.fromIdentity(),\n material: effectsMaterial,\n geometry,\n }\n );\n }\n\n /**\n * 获取平面的几何参数\n * @returns 几何参数\n */\n static getPlaneGeometry (): GeometryProps {\n const data = MeshHelper.getPlaneVertexArray();\n\n return {\n attributes: {\n aPos: {\n type: glContext.FLOAT,\n size: 3,\n data,\n stride: Float32Array.BYTES_PER_ELEMENT * 8,\n offset: 0,\n },\n aUV: {\n type: glContext.FLOAT,\n size: 2,\n stride: Float32Array.BYTES_PER_ELEMENT * 8,\n offset: Float32Array.BYTES_PER_ELEMENT * 3,\n dataSource: 'aPos',\n },\n aNormal: {\n type: glContext.FLOAT,\n size: 3,\n stride: Float32Array.BYTES_PER_ELEMENT * 8,\n offset: Float32Array.BYTES_PER_ELEMENT * 5,\n dataSource: 'aPos',\n },\n },\n drawStart: 0,\n drawCount: data.length / 8,\n };\n }\n\n /**\n * 获取平面顶点数组\n * @returns 浮点数组\n */\n static getPlaneVertexArray (): Float32Array {\n const halfSize = 1;\n\n return new Float32Array([\n -halfSize, -halfSize, 0, 0, 0, 0, 0, 1,\n halfSize, -halfSize, 0, 1, 0, 0, 0, 1,\n halfSize, halfSize, 0, 1, 1, 0, 0, 1,\n\n -halfSize, -halfSize, 0, 0, 0, 0, 0, 1,\n halfSize, halfSize, 0, 1, 1, 0, 0, 1,\n -halfSize, halfSize, 0, 0, 1, 0, 0, 1,\n ]);\n }\n}\n\nexport interface EffectsSceneInfo {\n loadSkybox?: boolean,\n}\n\n/**\n * 3D 插件辅助类,为插件提供基础的函数\n */\nexport class PluginHelper {\n /**\n * 创建 3D 灯光参数,从 glTF 灯光参数\n * @param light - glTF 灯光参数\n * @returns 3D 灯光参数\n */\n static createLightOptions (light: GLTFLight): ModelLightOptions {\n const color = light.color ?? [255, 255, 255, 255];\n\n if (light.type === 'point') {\n return {\n color,\n intensity: light.intensity ?? 1.0,\n //\n lightType: 'point',\n range: light.range ?? 0,\n };\n } else if (light.type === 'spot') {\n return {\n color,\n intensity: light.intensity ?? 1.0,\n //\n lightType: 'spot',\n range: light.range ?? 0,\n innerConeAngle: light.innerConeAngle ?? 0,\n outerConeAngle: light.outerConeAngle ?? Math.PI / 4.0,\n };\n } else { // \"directional\"\n return {\n color,\n intensity: light.intensity ?? 1.0,\n //\n lightType: 'directional',\n };\n }\n }\n\n /**\n * 创建 3D 相机参数,从 glTF 相机参数\n * @param camera - glTF 相机参数\n * @returns 3D 相机参数\n */\n static createCameraOptions (camera: GLTFCamera): ModelCameraOptions | undefined {\n if (camera.perspective === undefined) { return; }\n\n const p = camera.perspective;\n const options: ModelCameraOptions = {\n near: p.znear,\n far: p.zfar ?? 1000,\n fov: p.yfov,\n clipMode: 0,\n };\n\n return options;\n }\n\n /**\n * 转成播放器中 [0, 255] 区间的颜色值\n * @param color - RGB 颜色值\n * @returns RGB 颜色值\n */\n static toPlayerColor3 (color: spec.vec3): spec.vec3 {\n // [0, 1] => [0, 255]\n return [\n this.scaleTo255(color[0]),\n this.scaleTo255(color[1]),\n this.scaleTo255(color[2]),\n ];\n }\n\n /**\n * 转成播放器中 [0, 255] 区间的颜色值\n * @param color - RGBA 颜色值\n * @returns RGBA 颜色值\n */\n static toPlayerColor4 (color: spec.vec4): spec.vec4 {\n // [0, 1] => [0, 255]\n return [\n this.scaleTo255(color[0]),\n this.scaleTo255(color[1]),\n this.scaleTo255(color[2]),\n this.scaleTo255(color[3]),\n ];\n }\n\n /**\n * 转成插件中 [0, 1] 区间的颜色值\n * @param color - RGB 颜色值\n * @returns RGB 颜色值\n */\n static toPluginColor3 (color: spec.vec3): spec.vec3 {\n // [0, 255] => [0, 1]\n return [\n this.scaleTo1(color[0]),\n this.scaleTo1(color[1]),\n this.scaleTo1(color[2]),\n ];\n }\n\n /**\n * 转成插件中 [0, 1] 区间的颜色值\n * @param color - RGBA 颜色值\n * @returns RGBA 颜色值\n */\n static toPluginColor4 (color: spec.vec4): spec.vec4 {\n // [0, 255] => [0, 1]\n return [\n this.scaleTo1(color[0]),\n this.scaleTo1(color[1]),\n this.scaleTo1(color[2]),\n this.scaleTo1(color[3]),\n ];\n }\n\n /**\n * 创建 UV 变换矩阵,从 UV 变换参数中\n * @param stValue - UV 的缩放和平移参数\n * @param rotateValue - UV 的旋转参数\n * @returns 3阶变换矩阵\n */\n static createUVTransform (material: Material, stName: string, rotateName: string): Matrix3 {\n const stValue = material.getVector4(stName);\n const rotateValue = material.getFloat(rotateName);\n\n const res = Matrix3.fromIdentity();\n\n if (stValue) {\n res.setFromArray([\n 1, 0, 0,\n 0, 1, 0,\n stValue.z, stValue.w, 1,\n ]);\n }\n\n const temp = new Matrix3();\n\n if (rotateValue) {\n const cosTheta = Math.cos(rotateValue);\n const sinTheta = Math.sin(rotateValue);\n\n temp.setFromArray([\n cosTheta, sinTheta, 0,\n -sinTheta, cosTheta, 0,\n 0, 0, 1,\n ]);\n res.multiply(temp);\n }\n\n if (stValue) {\n temp.setFromArray([\n stValue.x, 0, 0,\n 0, stValue.y, 0,\n 0, 0, 1,\n ]);\n res.multiply(temp);\n }\n\n res.transpose();\n\n return res;\n }\n\n /**\n * 获取截断后的数值\n * @param val - 数值\n * @param minv - 最小值\n * @param maxv - 最大值\n * @returns\n */\n static clamp (val: number, minv: number, maxv: number): number {\n return Math.max(Math.min(val, maxv), minv);\n }\n\n /**\n * 转换成 [0, 255] 区间数值\n * @param val - [0, 1] 区间数值\n * @returns\n */\n static scaleTo255 (val: number): number {\n const intVal = Math.round(val * 255);\n\n return Math.max(0, Math.min(intVal, 255));\n }\n\n /**\n * 转换成 [0, 1] 区间数值\n * @param val - [0, 255] 区间数值\n * @returns\n */\n static scaleTo1 (val: number): number {\n const floatVal = val / 255.0;\n\n return Math.max(0.0, Math.min(floatVal, 1.0));\n }\n\n /**\n * 根据相机的位置、Y 轴旋转角度和目标点位置来计算相机变换,\n * 使得相机能够专注于目标点上\n * @param cameraPosition - 相机位置\n * @param YRotationAngle - Y 轴旋转角度\n * @param targetPoint - 目标点\n * @returns 相机变换\n */\n static focusOnPoint (cameraPosition: spec.vec3, YRotationAngle: number, targetPoint: spec.vec3) {\n const camPos = Vector3.fromArray(cameraPosition);\n const targetPos = Vector3.fromArray(targetPoint);\n const deltaPos = new Vector3().copyFrom(camPos).subtract(targetPos);\n const rotationMat = Matrix4.fromRotationAxis(new Vector3(0, 1, 0), YRotationAngle * DEG2RAD);\n\n rotationMat.transformPoint(deltaPos);\n const newCamPos = deltaPos.clone().add(targetPos);\n const viewMatrix = new Matrix4().lookAt(newCamPos, targetPos, new Vector3(0, 1, 0)).invert();\n const effectsTransform = new Transform();\n\n effectsTransform.setValid(true);\n effectsTransform.cloneFromMatrix(viewMatrix);\n\n return effectsTransform;\n }\n\n /**\n * 场景预处理,在移动端 3D 插件会对场景进行预处理,调整纹理参数\n * @param scene - 场景\n * @param runtimeEnv - 运行时环境\n * @param compatibleMode - 兼容模式\n * @param autoAdjustScene - 是否自动调整\n * @returns 场景信息描述\n */\n static preprocessScene (scene: Scene, runtimeEnv: string, compatibleMode: string): EffectsSceneInfo {\n const deviceEnv = (runtimeEnv !== PLAYER_OPTIONS_ENV_EDITOR);\n const tiny3dMode = (compatibleMode === 'tiny3d');\n // 默认skybox如何处理需要讨论\n const jsonScene = scene.jsonScene;\n\n if (!(jsonScene && jsonScene.textures && jsonScene.materials)) {\n // 安全检查\n return {};\n }\n\n const dataMap: Record<string, TextureSourceOptions> = {};\n\n scene.textureOptions.forEach(tex => {\n const id = tex.id;\n\n if (id) {\n dataMap[id] = tex;\n }\n });\n\n let loadSkybox = false;\n\n if (deviceEnv) {\n jsonScene.materials.forEach(mat => {\n this.preprocessTextureOptions(dataMap, mat.textures['_BaseColorSampler'], true, tiny3dMode);\n this.preprocessTextureOptions(dataMap, mat.textures['_MetallicRoughnessSampler'], false, tiny3dMode);\n this.preprocessTextureOptions(dataMap, mat.textures['_NormalSampler'], false, tiny3dMode);\n this.preprocessTextureOptions(dataMap, mat.textures['_OcclusionSampler'], false, tiny3dMode);\n this.preprocessTextureOptions(dataMap, mat.textures['_EmissiveSampler'], false, tiny3dMode);\n });\n jsonScene.components.forEach(comp => {\n if (comp.dataType === spec.DataType.SkyboxComponent) {\n loadSkybox = true;\n const skybox = comp as spec.SkyboxComponentData;\n\n if (skybox.diffuseImage) {\n this.preprocessTextureOptions(dataMap, skybox.diffuseImage, false, tiny3dMode);\n }\n if (skybox.specularImage) {\n this.preprocessTextureOptions(dataMap, skybox.specularImage, false, tiny3dMode);\n }\n }\n });\n }\n\n return { loadSkybox };\n }\n\n /**\n * 纹理参数预处理,设置环绕模式和滤波器\n * @param index - 纹理索引\n * @param textures - 纹理数组\n * @param isBaseColor - 是否基础颜色\n * @param tiny3dMode - 是否 Tiny3d 模式\n * @returns\n */\n static preprocessTextureOptions (dataMap: Record<string, TextureSourceOptions>, textureInfo: spec.MaterialTextureProperty | spec.DataPath, isBaseColor: boolean, tiny3dMode: boolean) {\n if (!tiny3dMode || !textureInfo) {\n return;\n }\n\n let texId;\n\n if ('texture' in textureInfo) {\n texId = textureInfo.texture.id;\n } else {\n texId = textureInfo.id;\n }\n\n if (!texId) {\n return;\n }\n\n const texOptions = dataMap[texId];\n\n if (!texOptions) {\n return;\n }\n\n if (texOptions.target === undefined || texOptions.target === glContext.TEXTURE_2D) {\n texOptions.wrapS = glContext.REPEAT;\n texOptions.wrapT = glContext.REPEAT;\n texOptions.magFilter = glContext.LINEAR;\n texOptions.minFilter = glContext.LINEAR_MIPMAP_LINEAR;\n if (!isBaseColor) {\n texOptions.premultiplyAlpha = true;\n }\n const newOptions = texOptions as Texture2DSourceOptionsImage;\n\n newOptions.generateMipmap = true;\n const image = newOptions.image;\n\n if (image && image.width && image.height) {\n if (!WebGLHelper.isPow2(image.width) || !WebGLHelper.isPow2(image.height)) {\n texOptions.minFilter = glContext.LINEAR;\n }\n }\n } else if (texOptions.target === glContext.TEXTURE_CUBE_MAP) {\n texOptions.wrapS = glContext.CLAMP_TO_EDGE;\n texOptions.wrapT = glContext.CLAMP_TO_EDGE;\n if ((texOptions as TextureCubeSourceOptionsImageMipmaps).mipmaps !== undefined) {\n if ((texOptions as TextureCubeSourceOptionsImageMipmaps).mipmaps.length === 1) {\n texOptions.magFilter = glContext.LINEAR;\n texOptions.minFilter = glContext.LINEAR;\n } else {\n texOptions.magFilter = glContext.LINEAR;\n texOptions.minFilter = glContext.LINEAR_MIPMAP_LINEAR;\n }\n } else {\n texOptions.magFilter = glContext.LINEAR;\n texOptions.minFilter = glContext.LINEAR;\n }\n }\n }\n\n /**\n * 设置 3D 元素参数,在播放器创建 3D 元素前\n * @param scene - 场景\n * @param cache - 缓存\n * @param composition - 合成\n * @returns\n */\n static setupItem3DOptions (scene: Scene, cache: CompositionCache, composition: Composition) {\n if (scene === undefined || scene.bins.length <= 0) {\n return;\n }\n\n const { jsonScene } = scene;\n const compIndexSet: Set<number> = new Set();\n\n if (jsonScene.compositionId === undefined) {\n compIndexSet.add(0);\n }\n\n jsonScene.compositions.forEach((comp, index) => {\n if (comp.id === jsonScene.compositionId || composition.refCompositionProps.has(comp.id)) {\n compIndexSet.add(index);\n }\n });\n\n compIndexSet.forEach(compIndex => {\n const sceneComp = jsonScene.compositions[compIndex];\n\n sceneComp.items.forEach(data => {\n const itemId = data.id;\n const item = composition.getEngine().jsonSceneData[itemId] as VFXItemData;\n\n if (item.type === spec.ItemType.mesh) {\n const meshItem = item as spec.ModelMeshItem<'json'>;\n const skin = meshItem.content.options.skin;\n const primitives = meshItem.content.options.primitives;\n\n primitives.forEach((prim, primId) => {\n if (prim.geometry instanceof Geometry) {\n // 可能已经创建,直接返回\n return;\n }\n\n const name = `Geom_C${compIndex}_I${itemId}_P${primId}`;\n const riGeometry = cache.getOrCreateGeometry(name, prim.geometry, scene.bins);\n const studioPrim = prim as spec.PrimitiveOptions<'studio'>;\n\n studioPrim.geometry = riGeometry;\n const material = prim.material;\n\n if (material.type === spec.MaterialType.pbr) {\n const studioMat = studioPrim.material as spec.MaterialPBROptions<'studio'>;\n\n studioMat.baseColorTexture = this.getTextureObj(composition.textures, material.baseColorTexture);\n studioMat.metallicRoughnessTexture = this.getTextureObj(composition.textures, material.metallicRoughnessTexture);\n studioMat.normalTexture = this.getTextureObj(composition.textures, material.normalTexture);\n studioMat.occlusionTexture = this.getTextureObj(composition.textures, material.occlusionTexture);\n studioMat.emissiveTexture = this.getTextureObj(composition.textures, material.emissiveTexture);\n } else {\n const studioMat = studioPrim.material as spec.MaterialUnlitOptions<'studio'>;\n\n studioMat.baseColorTexture = this.getTextureObj(composition.textures, material.baseColorTexture);\n }\n });\n\n if (skin !== undefined && skin.inverseBindMatrices !== undefined) {\n const studioSkin = skin as any as spec.SkinOptions<'studio'>;\n const inverseBindMatrices = typedArrayFromBinary(scene.bins, skin.inverseBindMatrices);\n\n if (inverseBindMatrices instanceof Float32Array) {\n studioSkin.inverseBindMatrices = inverseBindMatrices;\n } else {\n console.error(`setupItem3DOptions: Invalid inverseBindMatrices type, ${inverseBindMatrices}.`);\n }\n }\n } else if (item.type === spec.ItemType.tree) {\n const jsonItem = item as spec.ModelTreeItem<'json'>;\n const studioItem = item as spec.ModelTreeItem<'studio'>;\n const jsonAnimations = jsonItem.content.options.tree.animations;\n const studioAnimations = studioItem.content.options.tree.animations;\n\n if (jsonAnimations !== undefined && studioAnimations !== undefined) {\n jsonAnimations.forEach((jsonAnim, i) => {\n const studioAnim = studioAnimations[i];\n\n jsonAnim.tracks.forEach((jsonTrack, j) => {\n const inputArray = typedArrayFromBinary(scene.bins, jsonTrack.input);\n const outputArray = typedArrayFromBinary(scene.bins, jsonTrack.output);\n const studioTrack = studioAnim.tracks[j];\n\n if (inputArray instanceof Float32Array) {\n studioTrack.input = inputArray;\n } else {\n console.error(`setupItem3DOptions: Type of inputArray should be float32, ${inputArray}.`);\n }\n if (outputArray instanceof Float32Array) {\n studioTrack.output = outputArray;\n } else {\n console.error(`setupItem3DOptions: Type of outputArray should be float32, ${outputArray}.`);\n }\n });\n });\n }\n } else if (item.type === spec.ItemType.skybox) {\n const skybox = item as spec.ModelSkyboxItem<'json'>;\n const studioSkybox = item as spec.ModelSkyboxItem<'studio'>;\n const options = skybox.content.options;\n const studioOptions = studioSkybox.content.options;\n const specularImage = this.getTextureObj(composition.textures, options.specularImage);\n\n if (specularImage === undefined) {\n console.error(`setupItem3DOptions: skybox specualrImage is undefined, ${CheckerHelper.stringify(options)}.`);\n }\n studioOptions.specularImage = specularImage;\n //\n const diffuseImage = this.getTextureObj(composition.textures, options.diffuseImage);\n\n if (diffuseImage !== undefined) {\n studioOptions.diffuseImage = diffuseImage;\n }\n }\n });\n });\n\n }\n\n /**\n * 创建几何体,根据几何参数描述 JSON 和数据数组\n * @param engine - 引擎\n * @param geomJson - 几何参数描述 JSON\n * @param bins - 数据数组\n * @returns 几何体\n */\n static createGeometry (engine: Engine, geomJson: spec.GeometryOptionsJSON, bins: ArrayBuffer[]): Geometry {\n const geomOptions = deserializeGeometry(geomJson, bins);\n const attributes: Record<string, Attribute> = {};\n\n // 兼容代码,解决 attribute 的名称问题\n for (const attrib in geomOptions.attributes) {\n const attribData = geomOptions.attributes[attrib];\n const name = this.getAttributeName(attrib);\n\n attributes[name] = attribData;\n }\n geomOptions.attributes = attributes;\n\n return Geometry.create(engine, geomOptions);\n }\n\n /**\n * 索引数组类型转换\n * @param type - 类型\n * @param array - 索引数组\n * @returns 索引数组\n */\n static getIndexArray (type: number, array: spec.TypedArray) {\n switch (type) {\n case WebGLRenderingContext['UNSIGNED_INT']:\n return array as Uint32Array;\n case WebGLRenderingContext['UNSIGNED_SHORT']:\n return array as Uint16Array;\n case WebGLRenderingContext['UNSIGNED_BYTE']:\n return array as Uint8Array;\n default:\n console.error(`Invalid index attribute type ${type}.`);\n }\n }\n\n /**\n * 属性名称转换\n * @param name - 旧名称\n * @returns 新名称\n */\n static getAttributeName (name: string): string {\n switch (name) {\n case 'POSITION': return 'aPos';\n case 'NORMAL': return 'aNormal';\n case 'TANGENT': return 'aTangent';\n case 'TEXCOORD_0': return 'aUV';\n case 'TEXCOORD_1': return 'aUV2';\n case 'JOINTS_0': return 'aJoints';\n case 'WEIGHTS_0': return 'aWeights';\n }\n\n if (!name.startsWith('a')) {\n // aPos, aNormal, aTangent,\n // aUV, aUV2, aJoints, aWeights\n // aTargetXXX\n console.warn(`Unknown attribute name: ${name}.`);\n }\n\n return name;\n }\n\n /**\n * 获取纹理对象\n * @param textures - 纹理数组\n * @param index - 索引\n * @returns\n */\n static getTextureObj (textures: Texture[], index?: number): Texture | null {\n if (typeof index !== 'number') {\n return null;\n }\n\n if (index < 0 || index >= textures.length) {\n console.error(`Invalid index for textures: ${index}, ${textures.length}.`);\n }\n\n return textures[index];\n }\n}\n\n/**\n * Web 辅助类,负责 Web 相关的基础功能\n */\nexport class WebHelper {\n /**\n * 获取图像文件名,从 URL 链接中\n * @param url - 链接\n * @param ext - 扩展名\n * @returns\n */\n static getImageFileName (url: string, ext?: string): string {\n const begin = url.lastIndexOf('/');\n const end = url.lastIndexOf('.');\n const substr = url.substring(begin + 1, end);\n\n return ext ? substr + ext : substr;\n }\n\n /**\n * 获取当前时间字符串\n * @returns\n */\n static getCurrnetTimeStr (): string {\n const date = new Date(Date.now());\n const timeStr = date.toLocaleString('zh-CN');\n const ms = `${date.getMilliseconds()}`;\n\n return timeStr.split(/[ /:]+/).join('') + ms.padStart(3, '0');\n }\n\n /**\n * 将 URL 链接保存成文件\n * @param url - 链接\n * @param filename - 文件名\n */\n static saveFileForURL (url: string, filename: string) {\n const a = document.createElement('a');\n\n a.setAttribute('download', filename);\n a.target = '_blank';\n a.href = url;\n a.click();\n }\n\n /**\n * 创建播放器\n * @param manualRender - 是否手动渲染\n * @returns\n */\n static createPlayer (manualRender = true) {\n const canvas = document.createElement('canvas');\n\n canvas.width = 512;\n canvas.height = 512;\n\n return new Player({\n canvas,\n renderFramework: 'webgl2',\n env: PLAYER_OPTIONS_ENV_EDITOR,\n renderOptions: {\n willCaptureImage: true,\n },\n manualRender,\n });\n }\n\n /**\n * 休眠\n * @param ms - 时间,单位是毫秒\n * @returns\n */\n static async sleep (ms: number) {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n /**\n * 从 glTF 图像加载 HTML 图像元素\n * @param image - glTF 图像\n * @returns HTML 图像元素\n */\n static async loadImageFromGLTFImage (image: GLTFImage): Promise<HTMLImageElement> {\n return loadImage(new Blob([image.imageData], { type: image.mimeType }));\n }\n\n /**\n * 从图像缓存区数据加载 HTML 图像元素\n * @param image - 图像缓冲区数据\n * @returns\n */\n static async loadImageFromImageData (image: PImageBufferData): Promise<HTMLImageElement> {\n return loadImage(new Blob([image.data], { type: image.mimeType }));\n }\n\n /**\n * 获取画布渲染的内容,转成 PNG 图片数据\n * @param canvas - HTML 画布元素\n * @returns PNG 图片数据\n */\n static async getCanvasArrayBuffer (canvas: HTMLCanvasElement): Promise<ArrayBuffer> {\n return new Promise<ArrayBuffer>(function (resolve, reject) {\n canvas.toBlob(function (b) {\n if (b) {\n resolve(b.arrayBuffer());\n } else {\n reject(new Error('No canvas blob.'));\n }\n }, 'image/png', 1);\n });\n }\n\n /**\n * 从 HTML 图像、视频或位图图像对象获取图像数据\n * @param image - HTML 图像、视频或位图图像\n * @returns PNG 图片数据\n */\n static async getImageArrayBuffer (image: HTMLImageElement | ImageBitmap | HTMLVideoElement): Promise<ArrayBuffer> {\n const cvs = document.createElement('canvas');\n\n cvs.width = image.width;\n cvs.height = image.height;\n (cvs.getContext('2d') as CanvasRenderingContext2D).drawImage(image, 0, 0);\n\n return this.getCanvasArrayBuffer(cvs);\n }\n\n /**\n * 获取画布元素渲染结果\n * @param canvas - 画布元素\n * @returns\n */\n static getCanvasImageData (canvas: HTMLCanvasElement): ImageData {\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n\n return ctx.getImageData(0, 0, canvas.width, canvas.height);\n }\n\n /**\n * 翻转图像\n * @param imageData - 图像数据\n * @returns 翻转后的图像\n */\n static flipImageData (imageData: ImageData): ImageData {\n const flipped = document.createElement('canvas');\n const ctx = flipped.getContext('2d') as CanvasRenderingContext2D;\n\n flipped.width = imageData.width;\n flipped.height = imageData.height;\n // first put the imageData\n ctx.putImageData(imageData, 0, 0);\n // because we've got transparency\n ctx.globalCompositeOperation = 'copy';\n ctx.scale(1, -1); // Y flip\n ctx.translate(0, -imageData.height); // so we can draw at 0,0\n ctx.drawImage(flipped, 0, 0);\n // now we can restore the context to defaults if needed\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.globalCompositeOperation = 'source-over';\n\n return ctx.getImageData(0, 0, flipped.width, flipped.height);\n }\n\n /**\n * 从 HTML 图像、视频或位图图像对象获取翻转后的图像数据\n * @param image - HTML 图像、视频或位图图像\n * @returns PNG 图片数据\n */\n static getImageData (image: HTMLImageElement | ImageBitmap | HTMLVideoElement): ImageData {\n const cvs = document.createElement('canvas');\n\n cvs.width = image.width;\n cvs.height = image.height;\n const ctx = cvs.getContext('2d') as CanvasRenderingContext2D;\n\n ctx.drawImage(image, 0, 0);\n\n return this.flipImageData(ctx.getImageData(0, 0, cvs.width, cvs.height));\n }\n\n /**\n * 获取位图数据,从 HTML 画布元素\n * @param canvas - HTML 画布元素\n * @returns uint8 数组\n */\n static getWebGLCanvasImageBuffer (canvas: HTMLCanvasElement): Uint8Array {\n const ctx = canvas.getContext('webgl2') as WebGL2RenderingContext;\n const pixels = new Uint8Array(canvas.width * canvas.height * 4);\n\n ctx.readPixels(0, 0, canvas.width, canvas.height, ctx.RGBA, ctx.UNSIGNED_BYTE, pixels);\n\n return pixels;\n }\n}\n\n/**\n * 顶点属性缓冲区\n */\nexport class VertexAttribBuffer {\n /**\n * 顶点数组\n */\n data!: VertexArray;\n /**\n * 分量数\n */\n component = 0;\n /**\n * 长度\n */\n length = 0;\n /**\n * 偏移\n */\n offset = 0;\n /**\n * 步长\n */\n stride = 0;\n /**\n * 类型大小\n */\n typeSize = 0;\n\n /**\n * 获取包围盒,根据顶点数据\n * @param box - 包围盒,会被修改\n * @returns 包围盒\n */\n getBoundingBox (box: Box3) {\n let index = this.offset;\n const point = new Vector3();\n\n while (index + this.component <= this.length) {\n if (this.component == 2) {\n point.set(this.data[index], this.data[index + 1], 0);\n } else {\n point.set(this.data[index], this.data[index + 1], this.data[index + 2]);\n }\n box.expandByPoint(point);\n index += this.stride;\n }\n\n return box;\n }\n}\n\nclass AttributeArray {\n data!: spec.TypedArray;\n //\n length = 0;\n offset = 0;\n stride = 0;\n //\n typeSize = 0;\n compCount = 0;\n //\n signed = false;\n compressed = false;\n compressScale = 1.0;\n\n create (inAttrib: Attribute, inArray: spec.TypedArray) {\n switch (inAttrib.type) {\n case WebGLRenderingContext['INT']:\n this.typeSize = 4;\n this.signed = true;\n this.compressScale = 1 / 2147483647.0;\n\n break;\n case WebGLRenderingContext['SHORT']:\n this.typeSize = 2;\n this.signed = true;\n this.compressScale = 1 / 32767.0;\n\n break;\n default:\n this.typeSize = 4;\n this.signed = true;\n this.compressScale = 1.0;\n }\n\n this.data = inArray;\n this.length = this.data.length;\n this.compCount = inAttrib.size;\n //\n this.offset = inAttrib.offset ?? 0;\n if (this.offset > 0) {\n if (this.offset % this.typeSize !== 0) { console.error(`Invalid offset ${this.offset}, type size ${this.typeSize}.`); }\n this.offset = this.offset / this.typeSize;\n }\n //\n this.stride = inAttrib.stride ?? 0;\n if (this.stride > 0) {\n if (this.stride % this.typeSize !== 0) { console.error(`Invalid stride ${this.stride}, type size ${this.typeSize}.`); }\n this.stride = this.stride / this.typeSize;\n } else {\n this.stride = this.compCount;\n }\n //\n this.compressed = inAttrib.normalize === true;\n }\n\n getData (index: number): [number, number, number, number] | undefined {\n let offset = this.offset;\n\n offset += index * this.stride;\n if (offset + this.compCount > this.length) { return; }\n\n let res: [number, number, number, number];\n\n if (this.compCount === 2) {\n res = [this.data[offset], this.data[offset + 1], 0, 0];\n } else if (this.compCount === 3) {\n res = [this.data[offset], this.data[offset + 1], this.data[offset + 2], 0];\n } else {\n res = [this.data[offset], this.data[offset + 1], this.data[offset + 2], this.data[offset + 3]];\n }\n\n if (this.compressed) {\n for (let i = 0; i < this.compCount; i++) {\n res[i] *= this.compressScale;\n if (this.signed) {\n res[i] = Math.max(res[i], -1.0);\n }\n }\n }\n\n return res;\n }\n\n getLength (): number {\n return Math.round((this.length - this.offset) / this.stride);\n }\n}\n\n/**\n * 几何包围盒代理类\n */\nexport class GeometryBoxProxy {\n /**\n * 渲染开始索引\n */\n drawStart = 0;\n /**\n * 渲染索引数目\n */\n drawCount = 0;\n /**\n * 索引数组\n */\n index?: spec.TypedArray;\n /**\n * 位置数组\n */\n position!: AttributeArray;\n /**\n * 关节点数组\n */\n joint?: AttributeArray;\n /**\n * 权重数组\n */\n weight?: AttributeArray;\n /**\n * 绑定矩阵数组\n */\n bindMatrices: Matrix4[] = [];\n\n /**\n * 创建函数,根据几何体和绑定矩阵数组\n * @param geometry - 几何体\n * @param bindMatrices - 绑定矩阵数组\n */\n create (geometry: Geometry, bindMatrices: Matrix4[]) {\n this.drawStart = 0;\n this.drawCount = Math.abs(geometry.getDrawCount());\n // FIXME: 需要geometry中的attributes数组,GLGeometry有这个数组,其他的没有\n // @ts-expect-error\n const attributes = geometry.attributes as Record<string, Attribute>;\n\n //\n this.index = geometry.getIndexData();\n const positionAttrib = attributes['aPos'];\n const positionArray = geometry.getAttributeData('aPos') as spec.TypedArray;\n\n this.position = new AttributeArray();\n this.position.create(positionAttrib, positionArray);\n //\n const jointAttrib = attributes['aJoints'];\n const weightAttrib = attributes['aWeights'];\n\n if (jointAttrib !== undefined && weightAttrib !== undefined) {\n const jointArray = geometry.getAttributeData('aJoints') as spec.TypedArray;\n const weightArray = geometry.getAttributeData('aWeights') as spec.TypedArray;\n\n this.joint = new AttributeArray();\n this.joint.create(jointAttrib, jointArray);\n this.weight = new AttributeArray();\n this.weight.create(weightAttrib, weightArray);\n }\n this.bindMatrices = bindMatrices;\n }\n\n /**\n * 获取包围盒,如果有骨骼动画,需要先更新位置\n * @param box - 包围盒,会被修改\n * @returns 包围盒\n */\n getBoundingBox (box: Box3) {\n box.makeEmpty();\n const skinMat = new Matrix4();\n const hasAnim = this.joint !== undefined && this.weight !== undefined && this.bindMatrices.length > 0;\n\n const indexSet: Set<number> = new Set();\n\n if (this.index !== undefined) {\n for (let i = 0; i < this.drawCount; i++) {\n const j = this.drawStart + i;\n\n if (j < this.index.length) {\n indexSet.add(this.index[j]);\n }\n }\n } else {\n for (let i = 0; i < this.drawCount; i++) {\n indexSet.add(this.drawStart + i);\n }\n }\n\n indexSet.forEach(index => {\n const posData = this.position.getData(index);\n\n if (posData !== undefined) {\n const posVec = Vector3.fromArray(posData);\n\n if (hasAnim) {\n const jointData = this.joint?.getData(index);\n const weightData = this.weight?.getData(index);\n\n if (jointData !== undefined && weightData !== undefined) {\n skinMat.setZero();\n let findError = false;\n\n for (let i = 0; i < 4; i++) {\n if (weightData[i] === 0) {\n continue;\n }\n\n if (jointData[i] < 0 || jointData[i] >= this.bindMatrices.length) {\n findError = true;\n\n break;\n }\n\n const bindMat = this.bindMatrices[jointData[i]];\n\n skinMat.addScaledMatrix(bindMat, weightData[i]);\n }\n\n if (!findError) {\n const resVec = skinMat.transformVector4(new Vector4(posVec.x, posVec.y, posVec.z, 1.0));\n\n if (Math.abs(resVec.w) > 1e-4) {\n resVec.multiply(1.0 / resVec.w);\n posVec.set(resVec.x, resVec.y, resVec.z);\n }\n }\n }\n }\n\n box.expandByPoint(posVec);\n }\n });\n\n return box;\n }\n}\n\n/**\n * 点击测试代理类,\n */\nexport class HitTestingProxy {\n /**\n * 渲染开始索引\n */\n drawStart = 0;\n /**\n * 渲染索引数目\n */\n drawCount = 0;\n /**\n * 索引数组\n */\n index?: spec.TypedArray;\n /**\n * 位置数组\n */\n position!: AttributeArray;\n /**\n * 关节点数组\n */\n joint?: AttributeArray;\n /**\n * 权重数组\n */\n weight?: AttributeArray;\n /**\n * 是否双面\n */\n doubleSided = false;\n /**\n * 绑定矩阵数组\n */\n bindMatrices: Matrix4[] = [];\n /**\n * 是否有动画\n */\n hasAnimation = false;\n /**\n * 蒙皮矩阵\n */\n skinMatrix = new Matrix4();\n\n /**\n * 创建对象,传入几何体、是否双面和绑定矩阵列表\n * @param geometry - 几何体\n * @param doubleSided - 是否双面\n * @param bindMatrices - 绑定矩阵列表\n */\n create (geometry: Geometry, doubleSided: boolean, bindMatrices: Matrix4[]) {\n this.drawStart = 0;\n this.drawCount = Math.abs(geometry.getDrawCount());\n // FIXME: 需要geometry中的attributes数组,GLGeometry有这个数组,其他的没有\n // @ts-expect-error\n const attributes = geometry.attributes as Record<string, Attribute>;\n\n //\n this.index = geometry.getIndexData();\n const positionAttrib = attributes['aPos'];\n const positionArray = geometry.getAttributeData('aPos') as spec.TypedArray;\n\n this.position = new AttributeArray();\n this.position.create(positionAttrib, positionArray);\n //\n const jointAttrib = attributes['aJoints'];\n const weightAttrib = attributes['aWeights'];\n\n if (jointAttrib !== undefined && weightAttrib !== undefined) {\n const jointArray = geometry.getAttributeData('aJoints') as spec.TypedArray;\n const weightArray = geometry.getAttributeData('aWeights') as spec.TypedArray;\n\n this.joint = new AttributeArray();\n this.joint.create(jointAttrib, jointArray);\n this.weight = new AttributeArray();\n this.weight.create(weightAttrib, weightArray);\n }\n this.doubleSided = doubleSided;\n this.bindMatrices = bindMatrices;\n this.hasAnimation = this.joint !== undefined && this.weight !== undefined && this.bindMatrices.length > 0;\n }\n\n /**\n * 点击测试,返回射线参数值\n * @param rayOrigin - 射线原点\n * @param rayDirection - 射线方向\n * @returns 射线参数值或 undefined\n */\n getHitPoint (rayOrigin: Vector3, rayDirection: Vector3): number | undefined {\n let mint: number | undefined;\n const p0 = new Vector3(), p1 = new Vector3(), p2 = new Vector3();\n const q0 = new Vector4(), q1 = new Vector4(), q2 = new Vector4();\n const backfaceCulling = !this.doubleSided;\n\n for (let i = 0; i + 2 < this.drawCount; i += 3) {\n let i0 = this.drawStart + i;\n let i1 = this.drawStart + i + 1;\n let i2 = this.drawStart + i + 2;\n\n if (this.index !== undefined) {\n i0 = this.index[i0];\n i1 = this.index[i1];\n i2 = this.index[i2];\n }\n\n const r0 = this.getPosition(i0, p0, q0);\n const r1 = this.getPosition(i1, p1, q1);\n const r2 = this.getPosition(i2, p2, q2);\n\n if (!r0 || !r1 || !r2) {\n continue;\n }\n\n const t = RayTriangleTesting(rayOrigin, rayDirection, r0, r1, r2, backfaceCulling);\n\n if (t === undefined) {\n continue;\n }\n\n if (mint === undefined || mint > t) {\n mint = t;\n }\n }\n\n return mint;\n }\n\n /**\n * 获取顶点位置\n * @param index - 顶点索引\n * @param vec3 - 顶点位置,会被修改和返回\n * @param vec4 - 临时变量,用于骨骼动画时的计算\n * @returns 顶点位置\n */\n getPosition (index: number, vec3: Vector3, vec4: Vector4): Vector3 | null {\n const posData = this.position.getData(index);\n\n if (posData === undefined) {\n return null;\n }\n\n if (this.hasAnimation) {\n const jointData = this.joint?.getData(index);\n const weightData = this.weight?.getData(index);\n\n if (jointData !== undefined && weightData !== undefined) {\n const skinMat = this.skinMatrix;\n\n skinMat.setZero();\n for (let i = 0; i < 4; i++) {\n if (weightData[i] === 0) { continue; }\n\n const bindMat = this.bindMatrices[jointData[i]];\n\n skinMat.addScaledMatrix(bindMat, weightData[i]);\n }\n\n vec4.set(posData[0], posData[1], posData[2], 1.0);\n const resVec = skinMat.transformVector4(vec4);\n const scale = 1.0 / resVec.w;\n\n vec3.set(resVec.x * scale, resVec.y * scale, resVec.z * scale);\n }\n } else {\n vec3.set(posData[0], posData[1], posData[2]);\n }\n\n return vec3;\n }\n\n}\n\n/**\n * 检查辅助类,负责 3D 插件元素数据格式检查和报错\n */\nexport class CheckerHelper {\n /**\n * 检查数值\n * @param v - 数值\n * @returns\n */\n static checkNumber (v: number): boolean {\n return typeof v === 'number';\n }\n\n /**\n * 检查数值或未定义\n * @param v - 数值或未定义\n * @returns\n */\n static checkNumberUndef (v?: number): boolean {\n return v === undefined ? true : this.checkNumber(v);\n }\n\n /**\n * 检查 0 和 1 之间数值\n * @param v - 数值\n * @returns\n */\n static checkNumber01 (v: number): boolean {\n return this.checkNumber(v) && v >= 0 && v <= 1;\n }\n\n /**\n * 检查 0 和 1 之间数值或未定义\n * @param v - 数值或未定义\n * @returns\n */\n static checkNumber01Undef (v?: number): boolean {\n return v === undefined ? true : this.checkNumber01(v);\n }\n\n /**\n * 检查正数\n * @param v - 数值\n * @returns\n */\n static checkPositive (v: number): boolean {\n return this.checkNumber(v) && v > 0;\n }\n\n /**\n * 检查非负数\n * @param v - 数值\n * @returns\n */\n static checkNonnegative (v: number): boolean {\n return this.checkNumber(v) && v >= 0;\n }\n\n /**\n * 检查非负数或未定义\n * @param v - 数值\n * @returns\n */\n static checkNonnegativeUndef (v?: number): boolean {\n return v === undefined ? true : this.checkNonnegative(v);\n }\n\n /**\n * 检查布尔类型\n * @param v - 布尔值\n * @returns\n */\n static checkBoolean (v: boolean): boolean {\n return typeof v === 'boolean';\n }\n\n /**\n * 检查布尔类型或未定义\n * @param v - 布尔值或未定义\n * @returns\n */\n static checkBooleanUndef (v?: boolean): boolean {\n return v === undefined ? true : this.checkBoolean(v);\n }\n\n /**\n * 检查字符串类型\n * @param v - 字符串\n * @returns\n */\n static checkString (v: string): boolean {\n return typeof v === 'string';\n }\n\n /**\n * 检查字符串类型或未定义\n * @param v - 字符串或未定义\n * @returns\n */\n static checkStringUndef (v?: string): boolean {\n return v === undefined ? true : this.checkString(v);\n }\n\n /**\n * 检查浮点数组\n * @param v - 浮点数组\n * @returns\n */\n static checkFloat32Array (v: Float32Array): boolean {\n return v instanceof Float32Array;\n }\n\n /**\n * 检查浮点数组或未定义\n * @param v - 浮点数组或未定义\n * @returns\n */\n static checkFloat32ArrayUndef (v?: Float32Array): boolean {\n return v === undefined ? true : this.checkFloat32Array(v);\n }\n\n /**\n * 检查父节点索引\n * @param v - 数值或未定义\n * @returns\n */\n static checkParent (v?: number): boolean {\n if (v === undefined) { return true; }\n if (!this.checkNumber(v)) { return false; }\n\n return v >= 0;\n }\n\n /**\n * 检查纹理坐标\n * @param v - 纹理坐标或未定义\n * @returns\n */\n static checkTexCoord (v?: number): boolean {\n if (v === undefined) { return true; }\n if (!this.checkNumber(v)) { return false; }\n\n return v >= 0 && v <= 1;\n }\n\n /**\n * 检查二维向量\n * @param v - 二维向量\n * @returns\n */\n static checkVec2 (v: spec.vec2): boolean {\n if (!Array.isArray(v)) { return false; }\n if (v.length != 2) { return false; }\n\n return v.every(v => this.checkNumber(v));\n }\n\n /**\n * 检查二维向量或未定义\n * @param v - 二维向量或未定义\n * @returns\n */\n static checkVec2Undef (v?: spec.vec2): boolean {\n return v === undefined ? true : this.checkVec2(v);\n }\n\n /**\n * 检查三维向量\n * @param v - 三维向量\n * @returns\n */\n static checkVec3 (v: spec.vec3): boolean {\n if (!Array.isArray(v)) { return false; }\n if (v.length != 3) { return false; }\n\n return v.every(v => this.checkNumber(v));\n }\n\n /**\n * 检查三维非负向量\n * @param v - 三维向量\n * @returns\n */\n static checkNonnegative3 (v: spec.vec3): boolean {\n if (!Array.isArray(v)) { return false; }\n if (v.length != 3) { return false; }\n\n return v.every(v => this.checkNonnegative(v));\n }\n\n /**\n * 检查四维向量\n * @param v - 四维向量\n * @returns\n */\n static checkVec4 (v: spec.vec4): boolean {\n if (!Array.isArray(v)) { return false; }\n if (v.length != 4) { return false; }\n\n return v.every(v => this.checkNumber(v));\n }\n\n /**\n * 检查四维向量或未定义\n * @param v - 四维向量或未定义\n * @returns\n */\n static checkNonnegative4 (v: spec.vec4): boolean {\n if (!Array.isArray(v)) { return false; }\n if (v.length != 4) { return false; }\n\n return v.every(v => this.checkNonnegative(v));\n }\n\n /**\n * 检查数值数组\n * @param v - 数值数组\n * @returns\n */\n static checkNumberArray (v: number[]): boolean {\n if (!Array.isArray(v)) { return false; }\n\n return v.every(v => this.checkNumber(v));\n }\n\n /**\n * 检查纹理对象\n * @param v - 纹理对象\n * @returns\n */\n static checkTexture (v: Texture): boolean {\n if (v instanceof Texture) {\n if (v.isDestroyed) {\n console.error(`Texture is destroyed, ${v.name}.`);\n }\n\n return !v.isDestroyed;\n } else {\n return false;\n }\n }\n\n /**\n * 检查纹理对象或未定义\n * @param v - 纹理对象或未定义\n * @returns\n */\n static checkTextureUndef (v?: Texture): boolean {\n return v === undefined ? true : this.checkTexture(v);\n }\n\n /**\n * 检查纹理变换参数\n * @param v - 纹理变换参数\n * @returns\n */\n static checkTexTransform (v: ModelTextureTransform): boolean {\n if (!this.checkVec2Undef(v.offset)) { return false; }\n if (!this.checkNumberUndef(v.rotation)) { return false; }\n if (!this.checkVec2Undef(v.scale)) { return false; }\n\n if (v.scale !== undefined) {\n if (Math.abs(v.scale[0]) < 1e-5 || Math.abs(v.scale[1]) < 1e-5) {\n // check scale range\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * 检查纹理变换参数或未定义\n * @param v - 纹理变换参数或未定义\n * @returns\n */\n static checkTexTransformUndef (v?: ModelTextureTransform): boolean {\n return v === undefined ? true : this.checkTexTransform(v);\n }\n\n /**\n * 检查材质混合参数或未定义\n * @param v - 材质混合参数或未定义\n * @returns\n */\n static checkMatBlending (v?: spec.MaterialBlending): boolean {\n return v === undefined\n || v === spec.MaterialBlending.opaque\n || v === spec.MaterialBlending.masked\n || v === spec.MaterialBlending.translucent\n || v === spec.MaterialBlending.additive;\n }\n\n /**\n * 检查材质单双面模式或未定义\n * @param v - 材质单双面模式或未定义\n * @returns\n */\n static checkMatSide (v?: spec.SideMode): boolean {\n return v === undefined || v === spec.SideMode.BACK || v === spec.SideMode.DOUBLE || v === spec.SideMode.FRONT;\n }\n\n /**\n * 检查动画路径模式\n * @param v - 动画路径模式\n * @returns\n */\n static checkAnimPath (v: string): boolean {\n return v === 'translation' || v === 'rotation' || v === 'scale' || v === 'weights';\n }\n\n /**\n * 检查动画插值模式\n * @param v - 动画插值模式\n * @returns\n */\n static checkAnimInterp (v: string): boolean {\n return v === 'LINEAR' || v === 'STEP' || v === 'CUBICSPLINE';\n }\n\n /**\n * 检查几何体\n * @param v - 几何体\n * @param s - 蒙皮参数\n */\n static assertGeometry (v: Geometry, s?: ModelSkinOptions) {\n if (!(v instanceof Geometry)) {\n console.error(`Invalid geometry type ${this.stringify(v)}.`);\n }\n // @ts-expect-error\n if (v.isDestroyed === true) {\n console.error('Geometry object is destroyed.');\n }\n if (!this.checkNonnegative(v.getDrawStart())) {\n console.error(`Invalid geometry draw start: ${v.getDrawStart()}, ${this.stringify(v)}.`);\n }\n // // drawCount不再为负\n // if (!this.checkPositive(v.getDrawCount())) {\n // throw new Error(`Invalid geometry draw count: ${v.getDrawCount()}, ${this.stringify(v)}`);\n // }\n\n // Geometry具体内容检查,先忽略\n // const opts = v.options;\n // const drawCount = Math.abs(v.getDrawCount());\n\n // if (opts !== undefined && drawCount > 0) {\n // let maxLength = v.drawStart + drawCount;\n\n // if (opts.index !== undefined) {\n // const indexArray = opts.index.data;\n\n // if (indexArray.length < maxLength) {\n // throw new Error(`Index length(${indexArray.length}) is less than draw count(${maxLength}), ${this.stringify(v)}`);\n // }\n // let maxIndex = 0;\n\n // for (let i = 0; i < drawCount; i++) {\n // maxIndex = Math.max(indexArray[v.drawStart + i], maxIndex);\n // }\n // maxLength = maxIndex + 1;\n // }\n // const positionAttrib = opts.attributes['aPos'] as Attribute;\n\n // if (positionAttrib === undefined) {\n // throw new Error(`Position attribute is required, ${this.stringify(v)}`);\n // }\n // this.assertGeometryBuffer(v, 'aPos', maxLength);\n // this.assertGeometryBuffer(v, 'aNormal', maxLength);\n // this.assertGeometryBuffer(v, 'aTangent', maxLength);\n // this.assertGeometryBuffer(v, 'aUV', maxLength);\n // this.assertGeometryBuffer(v, 'aJoints', maxLength);\n // this.assertGeometryBuffer(v, 'aWeights', maxLength);\n\n // // 索引检查\n // if(s !== undefined){\n // const matLen = s.inverseBindMatrices?.length ?? 0;\n // if(matLen > 0){\n // const jointArray = this.createAttributeArray(v, \"aJoints\");\n // if(jointArray !== undefined){\n // for(let i = 0; i < maxLength; i++){\n // const data = jointArray.getData(i);\n // if(data === undefined) continue;\n // if(Math.max(...data) >= matLen){\n // throw new Error(`Joint index out of range: ${this.stringify(data)}, matrices: ${matLen}`);\n // }\n // }\n // }\n // }\n // }\n // }\n }\n\n /**\n * 检查几何体缓冲区\n * @param v - 几何体\n * @param name - 名称\n * @param drawCount - 渲染数目\n */\n static assertGeometryBuffer (v: Geometry, name: string, drawCount: number) {\n const attribArray = this.createAttributeArray(v, name);\n\n if (attribArray !== undefined) {\n if (attribArray.getLength() < drawCount) {\n console.error(`${name} Length(${attribArray.getLength()}) is less than draw count(${drawCount}), ${this.stringify(v)}.`);\n }\n }\n }\n\n /**\n * 创建属性数组\n * @param v - 几何体\n * @param name - 名称\n * @returns\n */\n static createAttributeArray (v: Geometry, name: string): AttributeArray | undefined {\n // @ts-expect-error\n const attributes = v.attributes;\n\n if (attributes === undefined) { return; }\n const dataAttrib = attributes[name];\n\n if (dataAttrib === undefined) { return; }\n const dataArray = v.getAttributeData(name);\n\n if (dataArray === undefined) { return; }\n //\n const attribArray = new AttributeArray();\n\n attribArray.create(dataAttrib as Attribute, dataArray);\n\n return attribArray;\n }\n\n /**\n * 检查蒙皮参数\n * @param v - 蒙皮参数\n */\n static assertModelSkinOptions (v: ModelSkinOptions) {\n if (!this.checkStringUndef(v.name)) { console.error(`Invalid skin name ${v.name}, ${this.stringify(v)}.`); }\n if (!this.checkNumberArray(v.joints)) { console.error(`Invalid skin joints ${v.joints}, ${this.stringify(v)}.`); }\n if (!this.checkNumberUndef(v.skeleton)) { console.error(`Invalid skin skeleton ${v.skeleton}, ${this.stringify(v)}.`); }\n if (!this.checkFloat32ArrayUndef(v.inverseBindMatrices)) { console.error(`Invalid skin inverseBindMatrices ${v.inverseBindMatrices}, ${this.stringify(v)}.`); }\n //\n if (v.inverseBindMatrices !== undefined) {\n if (v.inverseBindMatrices.length <= 0 || v.inverseBindMatrices.length % 16 !== 0) { console.error(`Invalid skin inverseBindMatrices length ${v.inverseBindMatrices}, ${this.stringify(v)}.`); }\n if (v.joints.length * 16 !== v.inverseBindMatrices.length) { console.error(`Mismatch: skin joints and inverseBindMatrices length, ${v.joints}, ${v.inverseBindMatrices}, ${this.stringify(v)}.`); }\n const mat = new Matrix4();\n\n for (let i = 0; i < v.inverseBindMatrices.length; i += 16) {\n for (let j = 0; j < 16; j++) {\n mat.elements[j] = v.inverseBindMatrices[i + j];\n }\n if (Math.abs(mat.determinant()) < 1e-5) {\n console.error(`Determinant of inverseBindMatrices is too small ${mat.determinant()}, index ${i / 16}, ${this.stringify(v)}.`);\n }\n }\n } else {\n if (v.joints.length <= 0) { console.error(`Invalid skin joints length ${v.joints}, ${this.stringify(v)}.`); }\n }\n }\n\n /**\n * 检查材质参数\n * @param v - 材质参数\n */\n static assertMatOptions (v: ModelMaterialOptions) {\n if (v.type === spec.MaterialType.unlit) {\n if (!this.checkString(v.name)) { console.error(`Invalid material name ${v.name}, ${this.stringify(v)}.`); }\n //\n if (!this.checkNonnegative4(v.baseColorFactor)) { console.error(`Invalid material baseColorFactor ${v.baseColorFactor}, ${this.stringify(v)}.`); }\n if (!this.checkTextureUndef(v.baseColorTexture)) { console.error(`Invalid material baseColorTexture ${v.baseColorTexture}, ${this.stringify(v)}.`); }\n if (!this.checkTexTransformUndef(v.baseColorTextureTransform)) { console.error(`Invalid material baseColorTextureTransform ${v.baseColorTextureTransform}, ${this.stringify(v)}.`); }\n if (!this.checkTexCoord(v.baseColorTextureCoordinate)) { console.error(`Invalid material baseColorTextureCoordinate ${v.baseColorTextureCoordinate}, ${this.stringify(v)}.`); }\n //\n if (!this.checkBooleanUndef(v.depthMask)) { console.error(`Invalid material depthMask ${v.depthMask}, ${this.stringify(v)}.`); }\n if (!this.checkMatBlending(v.blending)) { console.error(`Invalid material blending ${v.blending}, ${this.stringify(v)}.`); }\n if (!this.checkMatSide(v.side)) { console.error(`Invalid material side ${v.side}, ${this.stringify(v)}.`); }\n if (v.blending === spec.MaterialBlending.masked) {\n if (v.alphaCutOff === undefined) { console.error(`Material alphaCutOff is required for mask, ${this.stringify(v)}.`); }\n }\n if (!this.checkNumber01Undef(v.alphaCutOff)) { console.error(`Invalid material alphaCutOff ${v.alphaCutOff}, ${this.stringify(v)}.`); }\n } else if (v.type === spec.MaterialType.pbr) {\n if (!this.checkString(v.name)) { console.error(`Invalid material name ${v.name}, ${this.stringify(v)}.`); }\n //\n if (!this.checkNonnegative4(v.baseColorFactor)) { console.error(`Invalid material baseColorFactor ${v.baseColorFactor}, ${this.stringify(v)}.`); }\n if (!this.checkTextureUndef(v.baseColorTexture)) { console.error(`Invalid material baseColorTexture ${v.baseColorTexture}, ${this.stringify(v)}.`); }\n if (!this.checkTexTransformUndef(v.baseColorTextureTransform)) { console.error(`Invalid material baseColorTextureTransform ${v.baseColorTextureTransform}, ${this.stringify(v)}.`); }\n if (!this.checkTexCoord(v.baseColorTextureCoordinate)) { console.error(`Invalid material baseColorTextureCoordinate ${v.baseColorTextureCoordinate}, ${this.stringify(v)}.`); }\n //\n if (!this.checkBooleanUndef(v.useSpecularAA)) { console.error(`Invalid material useSpecularAA ${v.useSpecularAA}, ${this.stringify(v)}.`); }\n if (!this.checkNumber01(v.metallicFactor)) { console.error(`Invalid material metallicFactor ${v.metallicFactor}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.roughnessFactor)) { console.error(`Invalid material roughnessFactor ${v.roughnessFactor}, ${this.stringify(v)}.`); }\n if (!this.checkTextureUndef(v.metallicRoughnessTexture)) { console.error(`Invalid material metallicRoughnessTexture ${v.metallicRoughnessTexture}, ${this.stringify(v)}.`); }\n if (!this.checkTexTransformUndef(v.metallicRoughnessTextureTransform)) { console.error(`Invalid material metallicRoughnessTextureTransform ${v.metallicRoughnessTextureTransform}, ${this.stringify(v)}.`); }\n if (!this.checkTexCoord(v.metallicRoughnessTextureCoordinate)) { console.error(`Invalid material metallicRoughnessTextureCoordinate ${v.metallicRoughnessTextureCoordinate}, ${this.stringify(v)}.`); }\n //\n if (!this.checkTextureUndef(v.normalTexture)) { console.error(`Invalid material normalTexture ${v.normalTexture}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegativeUndef(v.normalTextureScale)) { console.error(`Invalid material normalTextureScale ${v.normalTextureScale}, ${this.stringify(v)}.`); }\n if (!this.checkTexTransformUndef(v.normalTextureTransform)) { console.error(`Invalid material normalTextureTransform ${v.normalTextureTransform}, ${this.stringify(v)}.`); }\n if (!this.checkTexCoord(v.normalTextureCoordinate)) { console.error(`Invalid material normalTextureCoordinate ${v.normalTextureCoordinate}, ${this.stringify(v)}.`); }\n //\n if (!this.checkTextureUndef(v.occlusionTexture)) { console.error(`Invalid material occlusionTexture ${v.occlusionTexture}, ${this.stringify(v)}.`); }\n if (!this.checkNumber01Undef(v.occlusionTextureStrength)) { console.error(`Invalid material occlusionTextureStrength ${v.occlusionTextureStrength}, ${this.stringify(v)}.`); }\n if (!this.checkTexTransformUndef(v.occlusionTextureTransform)) { console.error(`Invalid material occlusionTextureTransform ${v.occlusionTextureTransform}, ${this.stringify(v)}.`); }\n if (!this.checkTexCoord(v.occlusionTextureCoordinate)) { console.error(`Invalid material occlusionTextureCoordinate ${v.occlusionTextureCoordinate}, ${this.stringify(v)}.`); }\n //\n //\n if (!this.checkNonnegative4(v.emissiveFactor)) { console.error(`Invalid material emissiveFactor ${v.emissiveFactor}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.emissiveIntensity)) { console.error(`Invalid material emissiveIntensity ${v.emissiveIntensity}, ${this.stringify(v)}.`); }\n if (!this.checkTextureUndef(v.emissiveTexture)) { console.error(`Invalid material emissiveTexture ${v.emissiveTexture}, ${this.stringify(v)}.`); }\n if (!this.checkTexTransformUndef(v.emissiveTextureTransform)) { console.error(`Invalid material emissiveTextureTransform ${v.emissiveTextureTransform}, ${this.stringify(v)}.`); }\n if (!this.checkTexCoord(v.emissiveTextureCoordinate)) { console.error(`Invalid material emissiveTextureCoordinate ${v.emissiveTextureCoordinate}, ${this.stringify(v)}.`); }\n //\n if (!this.checkBooleanUndef(v.depthMask)) { console.error(`Invalid material depthMask ${v.depthMask}, ${this.stringify(v)}.`); }\n if (!this.checkMatBlending(v.blending)) { console.error(`Invalid material blending ${v.blending}, ${this.stringify(v)}.`); }\n if (!this.checkMatSide(v.side)) { console.error(`Invalid material side ${v.side}, ${this.stringify(v)}.`); }\n if (v.blending === spec.MaterialBlending.masked) {\n if (v.alphaCutOff === undefined) { console.error(`Material alphaCutOff is required for mask, ${this.stringify(v)}.`); }\n }\n if (!this.checkNumber01Undef(v.alphaCutOff)) { console.error(`Invalid material alphaCutOff ${v.alphaCutOff}, ${this.stringify(v)}.`); }\n } else {\n console.error(`Invalid material type ${this.stringify(v)}.`);\n }\n }\n\n /**\n * 检查 Primitive 参数\n * @param v - Primitive 参数\n * @param s - 蒙皮参数\n * @returns\n */\n static assertPrimOptions (v: ModelPrimitiveOptions, s?: ModelSkinOptions) {\n this.assertGeometry(v.geometry, s);\n this.assertMatOptions(v.material);\n\n return true;\n }\n\n /**\n * 检查 Model 插件 Mesh 参数\n * @param v - Model 插件 Mesh 参数\n */\n static assertModelMeshOptions (v: ModelMeshOptions) {\n if (!this.checkParent(v.parent)) { console.error(`Invalid mesh parent ${v.parent}, ${this.stringify(v)}.`); }\n\n if (v.skin !== undefined) { this.assertModelSkinOptions(v.skin); }\n\n const morphList: PMorph[] = [];\n\n for (let i = 0; i < v.primitives.length; i++) {\n const prim = v.primitives[i];\n\n if (!this.assertPrimOptions(prim)) {\n console.error(`Invalid primitive ${prim}, ${this.stringify(v)}.`);\n }\n const morph = new PMorph();\n\n morph.create(prim.geometry);\n morphList.push(morph);\n }\n\n for (let i = 1; i < morphList.length; i++) {\n const morph0 = morphList[i - 1];\n const morph1 = morphList[i];\n\n if (!morph0.equals(morph1)) {\n console.error(`Morph states mismatch: ${this.stringify(morph0)}, ${this.stringify(morph1)}, ${this.stringify(v)}.`);\n }\n }\n\n if (!this.checkBooleanUndef(v.hide)) { console.error(`Invalid mesh hide ${v.hide}, ${this.stringify(v)}.`); }\n }\n\n /**\n * 检查 Model 插件相机参数\n * @param v - Model 插件相机参数\n */\n static assertModelCameraOptions (v: ModelCameraOptions) {\n if (!this.checkParent(v.parent)) { console.error(`Invalid camera parent ${v.parent}, ${this.stringify(v)}.`); }\n if (!this.checkNumberUndef(v.aspect)) { console.error(`Invalid camera aspect ${v.aspect}, ${this.stringify(v)}.`); }\n if (!this.checkPositive(v.near)) { console.error(`Invalid camera near ${v.near}, ${this.stringify(v)}.`); }\n if (!this.checkPositive(v.far) || v.far <= v.near) { console.error(`Invalid camera far ${v.far}, ${this.stringify(v)}.`); }\n if (!this.checkPositive(v.fov)) { console.error(`Invalid camera fov ${v.fov}, ${this.stringify(v)}.`); }\n if (!this.checkNumber01(v.clipMode)) { console.error(`Invalid camera clipMode ${v.clipMode}, ${this.stringify(v)}.`); }\n }\n\n /**\n * 检查 Model 插件灯光参数\n * @param v - Model 插件灯光参数\n */\n static assertModelLightOptions (v: ModelLightOptions) {\n if (v.lightType === 'directional') {\n if (!this.checkParent(v.parent)) { console.error(`Invalid light parent ${v.parent}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative4(v.color)) { console.error(`Invalid light color ${v.color}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.intensity)) { console.error(`Invalid light intensity ${v.intensity}, ${this.stringify(v)}.`); }\n } else if (v.lightType === 'point') {\n if (!this.checkParent(v.parent)) { console.error(`Invalid light parent ${v.parent}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative4(v.color)) { console.error(`Invalid light color ${v.color}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.intensity)) { console.error(`Invalid light intensity ${v.intensity}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.range)) { console.error(`Invalid light range ${v.range}, ${this.stringify(v)}.`); }\n } else if (v.lightType === 'spot') {\n if (!this.checkParent(v.parent)) { console.error(`Invalid light parent ${v.parent}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative4(v.color)) { console.error(`Invalid light color ${v.color}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.intensity)) { console.error(`Invalid light intensity ${v.intensity}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.range)) { console.error(`Invalid light range ${v.range}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.innerConeAngle)) { console.error(`Invalid light innerConeAngle ${v.innerConeAngle}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.outerConeAngle)) { console.error(`Invalid light outerConeAngle ${v.outerConeAngle}, ${this.stringify(v)}.`); }\n } else if (v.lightType === 'ambient') {\n if (!this.checkParent(v.parent)) { console.error(`Invalid light parent ${v.parent}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative4(v.color)) { console.error(`Invalid light color ${v.color}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.intensity)) { console.error(`Invalid light intensity ${v.intensity}, ${this.stringify(v)}.`); }\n } else {\n console.error(`Invalid light type ${this.stringify(v)}.`);\n }\n }\n\n /**\n * 检查 Model 插件天空盒参数\n * @param v - Model 插件天空盒参数\n */\n static assertModelSkyboxOptions (v: ModelSkyboxOptions) {\n if (!this.checkBoolean(v.renderable)) { console.error(`Invalid skybox renderable ${v.renderable}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.intensity)) { console.error(`Invalid skybox intensity ${v.intensity}, ${this.stringify(v)}.`); }\n if (!this.checkNonnegative(v.reflectionsIntensity)) { console.error(`Invalid skybox reflectionsIntensity ${v.reflectionsIntensity}, ${this.stringify(v)}.`); }\n //\n const c = v.irradianceCoeffs;\n\n if (c !== undefined) {\n if (!Array.isArray(c) || c.length != 9) { console.error(`Invalid skybox irradianceCoeffs ${c}, ${this.stringify(v)}.`); }\n c.forEach(v => {\n if (!this.checkVec3(v as spec.vec3)) { console.error(`Invalid skybox irradianceCoeffs ${c}, ${this.stringify(v)}.`); }\n });\n } else if (v.diffuseImage !== undefined) {\n if (!this.checkTexture(v.diffuseImage)) { console.error(`Invalid skybox diffuseImage ${v.diffuseImage}, ${this.stringify(v)}.`); }\n } else {\n console.error(`Invalid skybox, irradianceCoeffs or diffuseImage should give one, ${this.stringify(v)}.`);\n }\n if (!this.checkTexture(v.specularImage)) { console.error(`Invalid skybox specularImage ${v.specularImage}, ${this.stringify(v)}.`); }\n if (!this.checkPositive(v.specularImageSize)) { console.error(`Invalid skybox specularImageSize ${v.specularImageSize}, ${this.stringify(v)}.`); }\n if (!this.checkPositive(v.specularMipCount)) { console.error(`Invalid skybox specularMipCount ${v.specularMipCount}, ${this.stringify(v)}.`); }\n if (this.pow2(v.specularMipCount) > v.specularImageSize) {\n console.error(`Invalid skybox specularMipCount or specularImageSize, ${this.stringify(v)}.`);\n }\n }\n\n /**\n * 检查 Model 插件动画轨道参数\n * @param v - Model 插件动画轨道参数\n * @returns\n */\n static checkModelAnimTrackOptions (v: ModelAnimTrackOptions) {\n if (!this.checkNonnegative(v.node)) {\n console.error(`Invalid track node ${v.node}, ${this.stringify(v)}`);\n\n return false;\n }\n if (!this.checkFloat32Array(v.input)) {\n console.error(`Invalid track input ${v.input}, ${this.stringify(v)}`);\n\n return false;\n }\n if (!this.checkFloat32Array(v.output)) {\n console.error(`Invalid track input ${v.output}, ${this.stringify(v)}`);\n\n return false;\n }\n if (!this.checkAnimPath(v.path)) {\n console.error(`Invalid track path ${v.path}, ${this.stringify(v)}`);\n\n return false;\n }\n if (!this.checkAnimInterp(v.interpolation)) {\n console.error(`Invalid track interpolation ${v.interpolation}, ${this.stringify(v)}`);\n\n return false;\n }\n\n return true;\n }\n\n /**\n * 检查 Model 插件动画参数\n * @param v - Model 插件动画参数\n */\n static assertModelAnimOptions (v: ModelAnimationOptions) {\n if (!this.checkStringUndef(v.name)) { console.error(`Invalid animation name ${v.name}, ${this.stringify(v)}.`); }\n if (!Array.isArray(v.tracks)) { console.error(`Invalid animation tracks ${v.tracks}, ${this.stringify(v)}.`); }\n v.tracks.forEach(t => {\n if (!this.checkModelAnimTrackOptions(t)) { console.error(`Invalid animation track ${t}, ${this.stringify(v)}.`); }\n });\n }\n\n /**\n * 检查场景树参数\n * @param v - 场景树参数\n */\n static assertTreeOptions (v: ModelTreeOptions) {\n if (!this.checkNumberUndef(v.animation)) { console.error(`Invalid tree animation ${v.animation}, ${this.stringify(v)}.`); }\n if (v.animations !== undefined) {\n if (!Array.isArray(v.animations)) { console.error(`Invalid tree animations ${v.animations}, ${this.stringify(v)}.`); }\n v.animations.forEach(anim => { this.assertModelAnimOptions(anim); });\n if (v.animation !== undefined) {\n if (v.animation < -1 || v.animation >= v.animations.length) { console.error(`Invalid tree animations ${v.animations}, ${this.stringify(v)}.`); }\n }\n }\n }\n\n /**\n * 将对象转成 JSON 字符串,需要忽略函数和渲染相关的对象\n * @param object - 目标对象\n * @returns\n */\n static stringify (object: any) {\n const simpleObject: { [k: string]: any } = {};\n\n for (const prop in object) {\n // if (typeof(object[prop]) == 'object'){\n // continue;\n // }\n if (prop === 'internal') {\n // 与WebGL相关的数据,可以忽略\n continue;\n }\n if (typeof (object[prop]) == 'function') {\n continue;\n }\n if (object[prop] instanceof Texture) {\n simpleObject[prop] = object[prop].name;\n continue;\n }\n if (object[prop] instanceof Geometry) {\n simpleObject[prop] = object[prop].name;\n continue;\n }\n if (object[prop] instanceof Renderer) {\n continue;\n }\n simpleObject[prop] = object[prop];\n }\n\n return JSON.stringify(simpleObject);\n }\n\n /**\n * 获取 2 的 index 指数结果\n * @param index - 指数\n * @returns\n */\n static pow2 (index: number): number {\n let res = 1;\n\n while (index-- > 0) { res *= 2; }\n\n return res;\n }\n}\n\n/**\n * 半精度浮点数组类\n */\nexport class Float16ArrayWrapper {\n /**\n * 大小\n */\n size: number;\n /**\n * 数组\n */\n data: Uint16Array;\n\n constructor (size: number) {\n this.size = size;\n this.data = new Uint16Array(size);\n }\n\n /**\n * 将类数值数组转成半进度浮点,并从起始索引开始添加\n * @param number - 类数值数组\n * @param startIndex - 起始索引\n */\n set (number: ArrayLike<number>, startIndex: number) {\n for (let i = 0; i < number.length; i++) {\n this.data[i + startIndex] = toHalf(number[i]);\n }\n }\n\n /**\n * 获取数组字节数\n */\n get bytes () {\n return this.size * 2;\n }\n}\n\nconst toHalf = (function () {\n\n const floatView = new Float32Array(1);\n const int32View = new Int32Array(floatView.buffer);\n\n /* This method is faster than the OpenEXR implementation (very often\n * used, eg. in Ogre), with the additional benefit of rounding, inspired\n * by James Tursa?s half-precision code. */\n return function toHalf (val: any) {\n\n floatView[0] = val;\n const x = int32View[0];\n\n let bits = (x >> 16) & 0x8000; /* Get the sign */\n let m = (x >> 12) & 0x07ff; /* Keep one extra bit for rounding */\n const e = (x >> 23) & 0xff; /* Using int is faster here */\n\n /* If zero, or denormal, or exponent underflows too much for a denormal\n * half, return signed zero. */\n if (e < 103) {\n return bits;\n }\n\n /* If NaN, return NaN. If Inf or exponent overflow, return Inf. */\n if (e > 142) {\n bits |= 0x7c00;\n /* If exponent was 0xff and one mantissa bit was set, it means NaN,\n * not Inf, so make sure we set one mantissa bit too. */\n bits |= ((e == 255) ? 0 : 1) && (x & 0x007fffff);\n\n return bits;\n }\n\n /* If exponent underflows but not too much, return a denormal */\n if (e < 113) {\n m |= 0x0800;\n /* Extra rounding may overflow and set mantissa to 0 and exponent\n * to 1, which is OK. */\n bits |= (m >> (114 - e)) + ((m >> (113 - e)) & 1);\n\n return bits;\n }\n\n bits |= ((e - 112) << 10) | (m >> 1);\n /* Extra rounding. An overflow will set mantissa to 0 and increment\n * the exponent, which is OK. */\n bits += m & 1;\n\n return bits;\n };\n\n}());\n\n","import type { Geometry, Engine, VFXItem, SkinProps } from '@galacean/effects';\nimport { glContext, Texture, TextureSourceType } from '@galacean/effects';\nimport type {\n ModelAnimTrackOptions,\n ModelAnimationOptions,\n ModelTreeOptions,\n} from '../index';\nimport { Matrix4 } from './math';\nimport { PObjectType } from './common';\nimport { PObject } from './object';\nimport type { InterpolationSampler } from './anim-sampler';\nimport { createAnimationSampler } from './anim-sampler';\nimport { Float16ArrayWrapper } from '../utility/plugin-helper';\nimport type { PSceneManager } from './scene';\nimport { ModelTreeComponent } from '../plugin';\n\nconst forceTextureSkinning = false;\n\n/**\n * 纹理数据模式,包含浮点和半精度浮点\n */\nexport enum TextureDataMode {\n none = 0,\n float,\n half_float,\n}\n\n/**\n * 蒙皮类,支持蒙皮动画\n */\nexport class PSkin extends PObject {\n /**\n * 场景树父元素\n */\n rootBoneItem?: VFXItem;\n /**\n * 骨骼索引\n */\n skeleton = 0;\n /**\n * 关节索引\n */\n jointItem: VFXItem[] = [];\n /**\n * 逆绑定矩阵\n */\n inverseBindMatrices: Matrix4[] = [];\n /**\n * 动画矩阵\n */\n animationMatrices: Matrix4[] = [];\n /**\n * 纹理数据模式\n */\n textureDataMode = TextureDataMode.none;\n /**\n * 最大骨骼数目\n */\n maxJointCount = 0;\n\n /**\n * 创建蒙皮对象\n * @param props - 蒙皮相关数据\n * @param engine - 引擎对象\n * @param rootBoneItem - 场景树父元素\n */\n create (props: SkinProps, engine: Engine, rootBoneItem: VFXItem, maxJointCount: number) {\n this.name = props.rootBoneName ?? 'Unnamed skin';\n this.type = PObjectType.skin;\n //\n this.rootBoneItem = rootBoneItem;\n this.skeleton = -1;\n this.jointItem = this.getJointItems(props, rootBoneItem);\n this.maxJointCount = Math.max(maxJointCount, this.jointItem.length);\n this.animationMatrices = [];\n //\n this.inverseBindMatrices = [];\n //\n this.textureDataMode = this.getTextureDataMode(this.maxJointCount, engine);\n const matList = props.inverseBindMatrices;\n\n if (matList !== undefined && matList.length > 0) {\n if (matList.length % 16 !== 0 || matList.length !== this.jointItem.length * 16) {\n throw new Error(`Invalid array length, invert bind matrices ${matList.length}, joint array ${this.jointItem.length}.`);\n }\n\n const matrixCount = matList.length / 16;\n\n for (let i = 0; i < matrixCount; i++) {\n const mat = Matrix4.fromArray(matList, i * 16);\n\n this.inverseBindMatrices.push(mat);\n }\n }\n }\n\n /**\n * 更新蒙皮矩阵\n */\n updateSkinMatrices () {\n this.animationMatrices = [];\n\n for (let i = 0; i < this.jointItem.length; i++) {\n const node = this.jointItem[i];\n\n // let parent = node?.transform.parentTransform;\n // while(parent !== undefined){\n // const pos = parent.position;\n // parent.setPosition(pos[0], pos[1], pos[2]);\n // parent = parent.parentTransform;\n // }\n\n const mat4 = node.transform.getWorldMatrix();\n\n this.animationMatrices.push(mat4.clone());\n }\n\n if (this.animationMatrices.length === this.inverseBindMatrices.length) {\n this.animationMatrices.forEach((mat, index) => {\n mat.multiply(this.inverseBindMatrices[index]);\n });\n } else {\n this.animationMatrices = this.inverseBindMatrices;\n console.error('Some error occured, replace skin animation matrices by invert bind matrices.');\n }\n }\n\n /**\n * 计算 Mesh 的动画矩阵\n * @param worldMatrix - 世界矩阵\n * @param matrixList - 矩阵列表\n * @param normalMatList - 法线矩阵列表\n */\n computeMeshAnimMatrices (worldMatrix: Matrix4, matrixList: Float32Array, normalMatList: Float32Array) {\n const inverseWorldMatrix = worldMatrix.clone().invert();\n const tempMatrix = new Matrix4();\n\n this.animationMatrices.forEach((mat, i) => {\n const localMatrix = tempMatrix.multiplyMatrices(inverseWorldMatrix, mat);\n\n localMatrix.elements.forEach((x, j) => matrixList[i * 16 + j] = x);\n //\n const normalMat = localMatrix.clone().invert().transpose();\n\n normalMat.elements.forEach((x, j) => normalMatList[i * 16 + j] = x);\n });\n }\n\n /**\n * 更新父元素\n * @param parentItem - 场景树父元素\n */\n updateParentItem (parentItem: VFXItem) {\n this.rootBoneItem = parentItem;\n }\n\n /**\n * 获取关节点数\n * @returns\n */\n getJointCount (): number {\n return this.jointItem.length;\n }\n\n /**\n * 是否纹理数据模式\n * @returns\n */\n isTextureDataMode (): boolean {\n return this.textureDataMode !== TextureDataMode.none;\n }\n\n /**\n * 销毁\n */\n override dispose (): void {\n this.rootBoneItem = undefined;\n this.jointItem = [];\n this.inverseBindMatrices = [];\n this.animationMatrices = [];\n }\n\n private getTextureDataMode (jointCount: number, engine: Engine): TextureDataMode {\n const uniformsRequiredForMostFeatures = 25;\n const detail = engine.gpuCapability.detail;\n const availableJointUniforms = detail.maxVertexUniforms - uniformsRequiredForMostFeatures;\n const uniformsRequiredPerJoint = 8;\n\n if (forceTextureSkinning || jointCount > Math.floor(availableJointUniforms / uniformsRequiredPerJoint)) {\n // 优先使用float,half_float在iOS 13.6上有精度问题\n if (detail.floatTexture) {\n return TextureDataMode.float;\n } else if (detail.halfFloatTexture) {\n return TextureDataMode.half_float;\n } else {\n throw new Error(`Too many joint count ${jointCount}, half float texture not support.`);\n }\n } else {\n return TextureDataMode.none;\n }\n }\n\n private getJointItems (props: SkinProps, rootBoneItem: VFXItem) {\n const name2Item = this.genNodeName(rootBoneItem);\n\n const jointItems: VFXItem[] = [];\n\n props.boneNames?.forEach(boneName => {\n const node = name2Item[boneName];\n\n if (!node) {\n throw new Error(`Can't find node of bone name ${boneName}.`);\n }\n jointItems.push(node);\n });\n\n return jointItems;\n }\n\n private genNodeName (node: VFXItem) {\n const name2Item: Record<string, VFXItem> = {};\n const nameList: string[] = [];\n\n name2Item[''] = node;\n for (const child of node.children) {\n this.genNodeNameDFS(child, nameList, name2Item);\n }\n\n return name2Item;\n }\n\n private genNodeNameDFS (node: VFXItem, nameList: string[], name2Item: Record<string, VFXItem>) {\n nameList.push(node.name);\n name2Item[nameList.join('/')] = node;\n for (const child of node.children) {\n this.genNodeNameDFS(child, nameList, name2Item);\n }\n nameList.pop();\n }\n}\n\n/**\n * Morph 动画类\n * 保存了动画状态相关的数据,包括 weights 数组数据\n * 增加了状态数据的检查,保证数据的正确性\n * Morph 动画非常消耗内存,谨慎使用。\n */\nexport class PMorph extends PObject {\n /**\n * weights 数组的长度,shader 中和更新的时候会用到\n * 范围要在 `[0, 8]` 之间,否则会报错。\n */\n morphWeightsLength = 0;\n /**\n * weights 数组的具体数据,来自动画控制器的每帧更新\n * 数组的长度必须和 morphWeightsLength 相同,否则会出错。\n */\n morphWeightsArray: number[] = [];\n /**\n * 是否有 Position 相关的 Morph 动画,shader 中需要知道\n */\n hasPositionMorph = false;\n /**\n * 是否有 Normal 相关的 Morph 动画,shader 中需要知道\n */\n hasNormalMorph = false;\n /**\n * 是否有 Tangent 相关的 Morph 动画,shader 中需要知道\n */\n hasTangentMorph = false;\n\n /**\n * 通过 Geometry 数据创建 Morph 动画相关状态,并进行必要的正确性检查\n * @param geometry - Mesh 的几何体,是否包含 Morph 动画都是可以的\n * @returns 是否创建成功\n */\n create (geometry: Geometry): boolean {\n this.name = this.genName('Morph target');\n this.type = PObjectType.morph;\n\n // 统计各个属性的在Morph中的数目\n const positionCount = this.getAttributeMorphCount(PMorph.positionNameList, geometry);\n const normalCount = this.getAttributeMorphCount(PMorph.normalNameList, geometry);\n const tangentCount = this.getAttributeMorphCount(PMorph.tangentNameList, geometry);\n const countList: number[] = [positionCount, normalCount, tangentCount];\n\n // 这里是拿到所有数目中非零的最小值,如果没有非零值,那就是直接是零\n this.morphWeightsLength = 0;\n countList.forEach(count => {\n if (count > 0) {\n if (this.morphWeightsLength === 0) {\n this.morphWeightsLength = count;\n } else {\n this.morphWeightsLength = Math.min(this.morphWeightsLength, count);\n }\n }\n });\n\n if (this.morphWeightsLength > 0) {\n // 有Morph动画,申请weights数据,判断各个属性是否有相关动画\n this.morphWeightsArray = Array(this.morphWeightsLength).fill(0);\n this.hasPositionMorph = positionCount == this.morphWeightsLength;\n this.hasNormalMorph = normalCount == this.morphWeightsLength;\n this.hasTangentMorph = tangentCount == this.morphWeightsLength;\n }\n\n /**\n * 这里是做正确性检查,特别是各个属性之间数目需要对上,否则就报错。\n * 还要注意最大数目不能超过5,否则也直接报错。\n * 后续考虑是否做个兼容,目前还是严格报错比较好。\n */\n\n if (positionCount > 0 && positionCount != this.morphWeightsLength) {\n console.error(`Position morph count mismatch: ${this.morphWeightsLength}, ${positionCount}.`);\n\n return false;\n }\n\n if (normalCount > 0 && normalCount != this.morphWeightsLength) {\n console.error(`Normal morph count mismatch: ${this.morphWeightsLength}, ${normalCount}.`);\n\n return false;\n }\n\n if (tangentCount > 0 && tangentCount != this.morphWeightsLength) {\n console.error(`Tangent morph count mismatch: ${this.morphWeightsLength}, ${tangentCount}.`);\n\n return false;\n }\n\n if (this.morphWeightsLength > 5) {\n console.error(`Tangent morph count should not greater than 5, current ${this.morphWeightsLength}.`);\n\n return false;\n }\n\n return true;\n }\n\n /**\n * 初始化 Morph target 的权重数组\n * @param weights - glTF Mesh 的权重数组,长度必须严格一致\n */\n initWeights (weights: number[]) {\n if (this.morphWeightsArray.length === 0) {\n return;\n }\n\n const morphWeights = this.morphWeightsArray;\n\n weights.forEach((val, index) => {\n if (index < morphWeights.length) {\n morphWeights[index] = val;\n }\n });\n }\n\n updateWeights (weights: number[]) {\n if (weights.length != this.morphWeightsArray.length) {\n console.error(`Length of morph weights mismatch: input ${weights.length}, internel ${this.morphWeightsArray.length}.`);\n\n return;\n }\n\n weights.forEach((value, index) => this.morphWeightsArray[index] = value);\n }\n\n /**\n * 当前状态是否有 Morph 动画:\n * 需要判断 weights 数组长度,以及 Position、Normal 和 Tangent 是否有动画\n * @returns 返回是否有 Morph 动画\n */\n hasMorph (): boolean {\n return this.morphWeightsLength > 0 && (this.hasPositionMorph || this.hasNormalMorph || this.hasTangentMorph);\n }\n\n /**\n * 两个 Morph 动画状态是否相等:\n * 这里只比较初始状态是否一样,不考虑 weights 数组的情况,提供给 Mesh 进行 Geometry 检查使用\n * @param morph - Morph 动画状态对象\n * @returns 返回两个 Morph 动画状态是否相等\n */\n equals (morph: PMorph): boolean {\n return this.morphWeightsLength === morph.morphWeightsLength\n && this.hasPositionMorph === morph.hasPositionMorph\n && this.hasNormalMorph === morph.hasNormalMorph\n && this.hasTangentMorph === morph.hasTangentMorph;\n }\n\n getMorphWeightsArray (): number[] {\n return this.morphWeightsArray;\n }\n\n /**\n * 统计 Geometry 中 Attribute 名称个数:\n * 主要用于统计 Morph 动画中新增的 Attribute 名称的个数,会作为最终的 weights 数组长度使用\n * @param attributeNameList - Attribute 名数组列表,只与 Morph Target 中的属性有关\n * @param geometry - Geometry 对象,是否有 Morph 动画都可以\n * @returns 存在的 Attribute 名称数目\n */\n getAttributeMorphCount (attributeNameList: string[], geometry: Geometry): number {\n for (let i = 0; i < attributeNameList.length; i++) {\n const val = attributeNameList[i];\n\n if (geometry.getAttributeData(val) === undefined) {\n return i;\n }\n }\n\n // 所有名称都找到了,所以要返回数组的长度\n return attributeNameList.length;\n }\n\n /**\n * Morph 动画中 Position 相关的 Attribute 名称\n */\n private static positionNameList = [\n 'aTargetPosition0',\n 'aTargetPosition1',\n 'aTargetPosition2',\n 'aTargetPosition3',\n 'aTargetPosition4',\n 'aTargetPosition5',\n 'aTargetPosition6',\n 'aTargetPosition7',\n ];\n\n /**\n * Morph 动画中 Normal 相关的 Attribute 名称\n */\n private static normalNameList = [\n 'aTargetNormal0',\n 'aTargetNormal1',\n 'aTargetNormal2',\n 'aTargetNormal3',\n 'aTargetNormal4',\n 'aTargetNormal5',\n 'aTargetNormal6',\n 'aTargetNormal7',\n ];\n\n /**\n * Morph 动画中 Tangent 相关的 Attribute 名称\n */\n private static tangentNameList = [\n 'aTargetTangent0',\n 'aTargetTangent1',\n 'aTargetTangent2',\n 'aTargetTangent3',\n 'aTargetTangent4',\n 'aTargetTangent5',\n 'aTargetTangent6',\n 'aTargetTangent7',\n ];\n}\n\n/**\n * 动画插值类型\n */\nexport enum PAnimInterpType {\n linear = 0,\n step,\n cubicSpline,\n}\n\n/**\n * 动画路径类型\n */\nexport enum PAnimPathType {\n translation = 0,\n rotation,\n scale,\n weights,\n}\n\n/**\n * 动画轨道类\n */\nexport class PAnimTrack {\n /**\n * 节点索引\n */\n node: number;\n /**\n * 时间数组\n */\n timeArray: Float32Array;\n /**\n * 数据数组\n */\n dataArray: Float32Array;\n /**\n * 路径类型\n */\n path = PAnimPathType.translation;\n /**\n * 插值类型\n */\n interp = PAnimInterpType.linear;\n /**\n * 分量\n */\n component: number;\n //\n private sampler?: InterpolationSampler;\n\n /**\n * 创建动画轨道对象\n * @param options - 动画轨道参数\n */\n constructor (options: ModelAnimTrackOptions) {\n const { node, input, output, path, interpolation } = options;\n\n this.node = node;\n this.timeArray = input;\n this.dataArray = output;\n //\n if (path === 'translation') {\n this.path = PAnimPathType.translation;\n this.component = 3;\n } else if (path === 'rotation') {\n this.path = PAnimPathType.rotation;\n this.component = 4;\n } else if (path === 'scale') {\n this.path = PAnimPathType.scale;\n this.component = 3;\n } else if (path === 'weights') {\n this.path = PAnimPathType.weights;\n this.component = this.dataArray.length / this.timeArray.length;\n // special checker for weights animation\n if (this.component <= 0) {\n console.error(`Invalid weights component: ${this.timeArray.length}, ${this.component}, ${this.dataArray.length}.`);\n } else if (this.timeArray.length * this.component != this.dataArray.length) {\n console.error(`Invalid weights array length: ${this.timeArray.length}, ${this.component}, ${this.dataArray.length}.`);\n }\n } else {\n // should never happened\n console.error(`Invalid path status: ${path}.`);\n }\n\n if (this.timeArray.length * this.component > this.dataArray.length) {\n throw new Error(`Data length mismatch: ${this.timeArray.length}, ${this.component}, ${this.dataArray.length}.`);\n }\n\n if (interpolation === 'LINEAR') {\n this.interp = PAnimInterpType.linear;\n } else if (interpolation === 'STEP') {\n this.interp = PAnimInterpType.step;\n } else {\n this.interp = PAnimInterpType.cubicSpline;\n }\n\n this.sampler = createAnimationSampler(\n this.getInterpInfo(), this.timeArray, this.dataArray, this.component, this.getPathInfo()\n );\n }\n\n /**\n * 销毁\n */\n dispose () {\n // @ts-expect-error\n this.timeArray = undefined;\n // @ts-expect-error\n this.dataArray = undefined;\n this.sampler?.dispose();\n this.sampler = undefined;\n }\n\n /**\n * 更新节点动画数据\n * @param time - 当前播放时间\n * @param treeItem - 节点树元素\n * @param sceneManager - 3D 场景管理器\n */\n tick (time: number, treeItem: VFXItem, sceneManager?: PSceneManager) {\n const treeComponent = treeItem.getComponent(ModelTreeComponent);\n const node = treeComponent?.content?.getNodeById(this.node);\n\n if (this.sampler !== undefined && node !== undefined) {\n const result = this.sampler.evaluate(time);\n\n switch (this.path) {\n case PAnimPathType.translation:\n node.transform.setPosition(result[0], result[1], result[2]);\n\n break;\n case PAnimPathType.rotation:\n node.transform.setQuaternion(result[0], result[1], result[2], result[3]);\n\n break;\n case PAnimPathType.scale:\n node.transform.setScale(result[0], result[1], result[2]);\n\n break;\n case PAnimPathType.weights:\n {\n /**\n * 先生成Mesh的父节点id,然后通过id查询Mesh对象\n * 最后更新Mesh对象权重数据\n */\n const parentId = this.genParentId(treeItem.id, this.node);\n const mesh = sceneManager?.queryMesh(parentId);\n\n if (mesh !== undefined) {\n mesh.updateMorphWeights(result);\n }\n\n }\n\n break;\n }\n } else {\n if (this.sampler !== undefined) {\n console.error('AnimTrack: error', this.sampler, node);\n }\n }\n }\n\n /**\n * 获取动画结束时间\n * @returns\n */\n getEndTime (): number {\n const index = this.timeArray.length - 1;\n\n return this.timeArray[index];\n }\n\n /**\n * 生成 Mesh 元素的父节点\n *\n * @param parentId - 父节点 id 名称\n * @param nodeIndex - Mesh 节点索引\n *\n * @returns 生成的 Mesh 节点名称\n */\n private genParentId (parentId: string, nodeIndex: number): string {\n return `${parentId}^${nodeIndex}`;\n }\n\n private getPathInfo (): string {\n if (this.path === PAnimPathType.scale) {\n return 'scale';\n } else if (this.path === PAnimPathType.rotation) {\n return 'rotation';\n } else {\n return 'translation';\n }\n }\n\n private getInterpInfo (): string {\n if (this.interp === PAnimInterpType.cubicSpline) {\n return 'CUBICSPLINE';\n } else if (this.interp === PAnimInterpType.step) {\n return 'STEP';\n } else {\n return 'LINEAR';\n }\n }\n}\n\n/**\n * 动画纹理类\n */\nexport class PAnimTexture {\n private isHalfFloat = true;\n //\n private width = 0;\n private height = 0;\n private buffer?: Float16ArrayWrapper;\n private texture?: Texture;\n\n constructor (private engine: Engine) {}\n\n /**\n * 创建动画纹理对象\n * @param jointCount - 骨骼数目\n * @param isHalfFloat - 是否半浮点精度\n * @param name - 名称\n */\n create (jointCount: number, isHalfFloat: boolean, name: string) {\n this.width = 4;\n this.height = jointCount;\n this.isHalfFloat = isHalfFloat;\n\n if (this.isHalfFloat) {\n this.buffer = new Float16ArrayWrapper(this.getSize() * 4);\n }\n\n const data = this.buffer?.data ?? new Float32Array(this.getSize() * 4);\n const type = this.isHalfFloat ? glContext.HALF_FLOAT : glContext.FLOAT;\n\n this.texture = Texture.create(\n this.engine,\n {\n name,\n data: {\n width: this.width,\n height: this.height,\n data,\n },\n target: glContext.TEXTURE_2D,\n format: glContext.RGBA,\n type,\n wrapS: glContext.CLAMP_TO_EDGE,\n wrapT: glContext.CLAMP_TO_EDGE,\n minFilter: glContext.NEAREST,\n magFilter: glContext.NEAREST,\n });\n }\n\n /**\n * 更新动画数据\n * @param buffer - 新的动画数据\n */\n update (buffer: Float32Array) {\n if (this.buffer !== undefined) {\n this.buffer.set(buffer, 0);\n }\n\n if (this.texture !== undefined) {\n this.texture.updateSource({\n sourceType: TextureSourceType.data,\n data: {\n width: this.width,\n height: this.height,\n data: this.buffer?.data ?? buffer,\n },\n target: glContext.TEXTURE_2D,\n });\n }\n\n }\n\n /**\n * 销毁\n */\n dispose () {\n // @ts-expect-error\n this.engine = null;\n this.buffer = undefined;\n this.texture?.dispose();\n }\n\n /**\n * 获取纹理大小\n * @returns\n */\n getSize () {\n return this.width * this.height;\n }\n\n /**\n * 获取纹理对象\n * @returns\n */\n getTexture () {\n return this.texture as Texture;\n }\n\n}\n\n/**\n * 动画类,负责动画数据创建、更新和销毁\n */\nexport class PAnimation extends PObject {\n private time = 0;\n private duration = 0;\n private tracks: PAnimTrack[] = [];\n\n /**\n * 创建动画对象\n * @param options - 动画参数\n */\n create (options: ModelAnimationOptions) {\n this.name = this.genName(options.name ?? 'Unnamed animation');\n this.type = PObjectType.animation;\n //\n this.time = 0;\n this.duration = 0;\n //\n this.tracks = [];\n options.tracks.forEach(inTrack => {\n const track = new PAnimTrack(inTrack);\n\n this.tracks.push(track);\n this.duration = Math.max(this.duration, track.getEndTime());\n });\n }\n\n /**\n * 动画更新\n * @param time - 当前时间\n * @param treeItem - 场景树元素\n * @param sceneManager - 3D 场景管理器\n */\n tick (time: number, treeItem: VFXItem, sceneManager?: PSceneManager) {\n this.time = time;\n // TODO: 这里时间事件定义不明确,先兼容原先实现\n const newTime = this.time % this.duration;\n\n this.tracks.forEach(track => {\n track.tick(newTime, treeItem, sceneManager);\n });\n }\n\n /**\n * 销毁\n */\n override dispose () {\n this.tracks.forEach(track => {\n track.dispose();\n });\n this.tracks = [];\n }\n}\n\n/**\n * 动画管理类,负责管理动画对象\n */\nexport class PAnimationManager extends PObject {\n private ownerItem: VFXItem;\n private animation = 0;\n private speed = 0;\n private delay = 0;\n private time = 0;\n private animations: PAnimation[] = [];\n private sceneManager?: PSceneManager;\n\n /**\n * 创建动画管理器\n * @param treeOptions - 场景树参数\n * @param ownerItem - 场景树所属元素\n */\n constructor (treeOptions: ModelTreeOptions, ownerItem: VFXItem) {\n super();\n this.name = this.genName(ownerItem.name ?? 'Unnamed tree');\n this.type = PObjectType.animationManager;\n //\n this.ownerItem = ownerItem;\n this.animation = treeOptions.animation ?? -1;\n this.speed = 1.0;\n this.delay = ownerItem.start ?? 0;\n this.animations = [];\n if (treeOptions.animations !== undefined) {\n treeOptions.animations.forEach(animOpts => {\n const anim = this.createAnimation(animOpts);\n\n this.animations.push(anim);\n });\n }\n }\n\n /**\n * 设置场景管理器\n * @param sceneManager - 场景管理器\n */\n setSceneManager (sceneManager: PSceneManager) {\n this.sceneManager = sceneManager;\n }\n\n /**\n * 创建动画对象\n * @param animationOpts - 动画参数\n * @returns 动画对象\n */\n createAnimation (animationOpts: ModelAnimationOptions) {\n const animation = new PAnimation();\n\n animation.create(animationOpts);\n\n return animation;\n }\n\n /**\n * 动画更新\n * @param deltaSeconds - 更新间隔\n */\n tick (deltaSeconds: number) {\n const newDeltaSeconds = deltaSeconds * this.speed * 0.001;\n\n this.time += newDeltaSeconds;\n // TODO: 需要合并到TreeItem中,通过lifetime进行计算\n const itemTime = this.time - this.delay;\n\n if (itemTime >= 0) {\n if (this.animation >= 0 && this.animation < this.animations.length) {\n const anim = this.animations[this.animation];\n\n anim.tick(itemTime, this.ownerItem, this.sceneManager);\n } else if (this.animation == -88888888) {\n this.animations.forEach(anim => {\n anim.tick(itemTime, this.ownerItem, this.sceneManager);\n });\n }\n }\n }\n\n /**\n * 销毁\n */\n override dispose () {\n // @ts-expect-error\n this.ownerItem = null;\n this.animations.forEach(anim => {\n anim.dispose();\n });\n this.animations = [];\n // @ts-expect-error\n this.sceneManager = null;\n }\n\n /**\n * 获取场景树元素\n * @returns\n */\n getTreeItem () {\n return this.ownerItem;\n }\n}\n","import type { math } from '@galacean/effects';\nimport { spec } from '@galacean/effects';\nimport type { ModelCameraComponentData } from '../index';\nimport { Vector2, Vector3, Matrix4 } from './math';\nimport { PObjectType } from './common';\nimport { PEntity } from './object';\nimport type { ModelCameraComponent } from '../plugin/model-item';\n\ntype Box3 = math.Box3;\ntype Quaternion = math.Quaternion;\n\nconst deg2rad = Math.PI / 180;\n\n/**\n * 相机类,支持基础的相机功能\n */\nexport class PCamera extends PEntity {\n /**\n * 所属的相机组件\n */\n owner?: ModelCameraComponent;\n /**\n * 画布宽度\n */\n width = 512;\n /**\n * 画布高度\n */\n height = 512;\n /**\n * 近裁剪平面\n */\n nearPlane = 0.001;\n /**\n * 远裁剪平面\n */\n farPlane = 1000;\n /**\n * Y 轴上视角\n */\n fov = 45;\n /**\n * 视图矩阵\n */\n viewportMatrix = Matrix4.fromIdentity();\n /**\n * 纵横比\n */\n aspect = 1.0;\n /**\n * 剪裁模式,默认是剪裁左右\n */\n clipMode = spec.CameraClipMode.landscape;\n /**\n * 投影矩阵\n */\n projectionMatrix: Matrix4 = new Matrix4();\n /**\n * 相机矩阵\n */\n viewMatrix: Matrix4 = new Matrix4();\n\n /**\n * 构造函数,创建相机对象\n * @param camera - 相机数据\n * @param width - 画布宽度\n * @param height - 画布高度\n * @param owner - 所属的相机组件\n */\n constructor (name: string, width: number, height: number, data: ModelCameraComponentData, owner?: ModelCameraComponent) {\n super();\n this.type = PObjectType.camera;\n this.visible = false;\n this.owner = owner;\n //\n this.name = name;\n this.width = width;\n this.height = height;\n\n this.nearPlane = data.near ?? 0.001;\n this.farPlane = data.far ?? 1000;\n this.fov = data.fov ?? 45;\n this.aspect = data.aspect ?? (this.width / this.height);\n this.clipMode = data.clipMode ?? spec.CameraClipMode.landscape;\n this.update();\n }\n\n /**\n * 更新相机矩阵和投影矩阵,从所属的元素中获取变换数据\n */\n override update () {\n if (this.owner !== undefined) {\n this.transform.fromEffectsTransform(this.owner.transform);\n }\n\n const reverse = this.clipMode === spec.CameraClipMode.portrait;\n\n this.projectionMatrix.perspective(this.fov * deg2rad, this.aspect, this.nearPlane, this.farPlane, reverse);\n this.projectionMatrix.premultiply(this.viewportMatrix);\n this.viewMatrix = this.matrix.invert();\n }\n\n /**\n * 获取新的透视矩阵,视角大小乘 1.25 倍\n * @param fov - 视角大小\n * @returns 投影矩阵\n */\n getNewProjectionMatrix (fov: number): Matrix4 {\n const reverse = this.clipMode === spec.CameraClipMode.portrait;\n\n return new Matrix4().perspective(Math.min(fov * 1.25, 140) * deg2rad, this.aspect, this.nearPlane, this.farPlane, reverse).premultiply(this.viewportMatrix);\n }\n\n /**\n * 计算视角中的包围盒大小\n * @param box - 包围盒\n * @returns 视角中的包围盒\n */\n computeViewAABB (box: Box3): Box3 {\n const tanTheta = Math.tan(this.fov * deg2rad * 0.5);\n const aspect = this.aspect;\n let yFarCoord = 0;\n let yNearCoord = 0;\n let xFarCoord = 0;\n let xNearCoord = 0;\n\n if (this.isReversed()) {\n xFarCoord = this.farPlane * tanTheta;\n xNearCoord = this.nearPlane * tanTheta;\n yFarCoord = xFarCoord / aspect;\n yNearCoord = xNearCoord / aspect;\n } else {\n yFarCoord = this.farPlane * tanTheta;\n yNearCoord = this.nearPlane * tanTheta;\n xFarCoord = aspect * yFarCoord;\n xNearCoord = aspect * yNearCoord;\n }\n\n box.makeEmpty();\n const matrix = this.matrix;\n\n box.expandByPoint(matrix.transformPoint(new Vector3(xFarCoord, yFarCoord, -this.farPlane)));\n box.expandByPoint(matrix.transformPoint(new Vector3(xFarCoord, -yFarCoord, -this.farPlane)));\n box.expandByPoint(matrix.transformPoint(new Vector3(-xFarCoord, yFarCoord, -this.farPlane)));\n box.expandByPoint(matrix.transformPoint(new Vector3(-xFarCoord, -yFarCoord, -this.farPlane)));\n //\n box.expandByPoint(matrix.transformPoint(new Vector3(xNearCoord, yNearCoord, -this.nearPlane)));\n box.expandByPoint(matrix.transformPoint(new Vector3(xNearCoord, -yNearCoord, -this.nearPlane)));\n box.expandByPoint(matrix.transformPoint(new Vector3(-xNearCoord, yNearCoord, -this.nearPlane)));\n box.expandByPoint(matrix.transformPoint(new Vector3(-xNearCoord, -yNearCoord, -this.nearPlane)));\n\n return box;\n }\n\n /**\n * 获取画布大小\n * @returns\n */\n getSize (): Vector2 {\n return new Vector2(this.width, this.height);\n }\n\n /**\n * 是否剪裁上下\n * @returns\n */\n isReversed (): boolean {\n return this.clipMode === spec.CameraClipMode.portrait;\n }\n\n /**\n * 获取眼睛位置\n * @returns\n */\n getEye (): Vector3 {\n return this.translation;\n }\n\n /**\n * 设置眼睛位置\n * @param val - 眼睛位置\n */\n setEye (val: Vector3) {\n this.translation = val;\n }\n}\n\n/**\n * 相机管理类,负责管理场景中的 3D 相机对象\n */\nexport class PCameraManager {\n private winWidth = 512;\n private winHeight = 512;\n private cameraList: PCamera[] = [];\n private defaultCamera;\n\n constructor () {\n this.defaultCamera = new PCamera(\n 'camera', 512, 512,\n {\n id: '0',\n dataType: 'camera' as spec.DataType,\n fov: 60,\n far: 1000,\n near: 0.001,\n clipMode: spec.CameraClipMode.portrait,\n item: { id: '0' },\n },\n );\n }\n\n /**\n * 初始化画布大小,更新默认相机\n * @param width - 画布宽度\n * @param height - 画布高度\n */\n initial (width: number, height: number) {\n this.winWidth = width;\n this.winHeight = height;\n\n const camera = this.defaultCamera;\n\n camera.width = width;\n camera.height = height;\n camera.aspect = width / height;\n camera.update();\n }\n\n /**\n * 插入相机数据,创建新的相机对象\n * @param name - 相机名称\n * @param data - 相机相关数据\n * @param owner - 相机所属组件\n * @returns 新的相机对象\n */\n insert (name: string, data: ModelCameraComponentData, owner?: ModelCameraComponent): PCamera {\n const camera = new PCamera(name, this.winWidth, this.winHeight, data, owner);\n\n this.cameraList.push(camera);\n\n return camera;\n }\n\n /**\n * 插入相机对象\n * @param camera - 相机对象\n */\n insertCamera (camera: PCamera) {\n this.cameraList.push(camera);\n }\n\n /**\n * 根据对象或者索引,删除相机对象\n * @param camera - 索引或相机对象\n */\n remove (camera: PCamera | number) {\n if (camera instanceof PCamera) {\n const findResult = this.cameraList.findIndex(item => {\n return item === camera;\n });\n\n if (findResult !== -1) {\n this.cameraList.splice(findResult, 1);\n }\n } else {\n if (camera >= 0 && camera < this.cameraList.length) {\n this.cameraList.splice(camera, 1);\n }\n }\n }\n\n /**\n * 销毁相机管理对象\n */\n dispose () {\n this.cameraList = [];\n }\n\n /**\n * 更新默认相机状态,并计算新的透视和相机矩阵\n * @param fov - 视角\n * @param viewportMatrix - 视图矩阵\n * @param aspect - 纵横比\n * @param nearPlane - 近裁剪平面\n * @param farPlane - 远裁剪平面\n * @param position - 位置\n * @param rotation - 旋转\n * @param clipMode - 剪裁模式\n */\n updateDefaultCamera (\n fov: number,\n viewportMatrix: Matrix4,\n aspect: number,\n nearPlane: number,\n farPlane: number,\n position: Vector3,\n rotation: Quaternion,\n clipMode: number,\n ) {\n this.defaultCamera.fov = fov;\n this.defaultCamera.viewportMatrix = viewportMatrix.clone();\n this.defaultCamera.aspect = aspect;\n this.defaultCamera.nearPlane = nearPlane;\n this.defaultCamera.farPlane = farPlane;\n this.defaultCamera.position = position;\n this.defaultCamera.rotation = rotation;\n this.defaultCamera.aspect = aspect;\n this.defaultCamera.clipMode = clipMode;\n this.defaultCamera.update();\n }\n\n /**\n * 获取相机对象列表\n * @returns\n */\n getCameraList (): PCamera[] {\n return this.cameraList;\n }\n\n /**\n * 获取默认相机对象\n * @returns\n */\n getDefaultCamera (): PCamera {\n return this.defaultCamera;\n }\n\n /**\n * 获取相机数目\n * @returns\n */\n getCameraCount (): number {\n return this.cameraList.length;\n }\n\n /**\n * 获取激活的相机对象\n * @returns\n */\n getActiveCamera (): PCamera {\n return this.defaultCamera;\n }\n\n /**\n * 获取画布纵横比\n * @returns\n */\n getAspect (): number {\n return this.winWidth / this.winHeight;\n }\n}\n\n","import { spec } from '@galacean/effects';\nimport type { ModelLightComponentData } from '../index';\nimport { Vector2, Vector3 } from './math';\nimport { PObjectType, PLightType } from './common';\nimport { PEntity } from './object';\nimport type { ModelLightComponent } from '../plugin/model-item';\n\n/**\n * 灯光类,支持 3D 场景中的灯光功能\n */\nexport class PLight extends PEntity {\n /**\n * 所属的灯光组件\n */\n owner?: ModelLightComponent;\n /**\n * 方向,仅用于方向光和聚光灯\n */\n direction: Vector3 = new Vector3(0, 0, 1);\n /**\n * 范围,仅用于点光源和聚光灯\n */\n range = 0;\n /**\n * 颜色\n */\n color: Vector3 = new Vector3(1, 1, 1);\n /**\n * 强度\n */\n intensity = 0;\n /**\n * 聚光灯外径\n */\n outerConeAngle = 0;\n /**\n * 聚光灯内径\n */\n innerConeAngle = 0;\n /**\n * 类型\n */\n lightType = PLightType.ambient;\n padding: Vector2 = new Vector2(0, 0);\n\n /**\n * 创建灯光对象\n * @param name - 灯光名称\n * @param data - 灯光相关数据\n * @param owner - 所属灯光组件\n */\n constructor (name: string, data: ModelLightComponentData, owner?: ModelLightComponent) {\n super();\n this.name = name;\n this.type = PObjectType.light;\n this.visible = false;\n this.owner = owner;\n this.direction = new Vector3(0, 0, -1);\n this.range = 0;\n this.outerConeAngle = 0;\n this.innerConeAngle = 0;\n //\n const { color } = data;\n\n this.color = new Vector3(\n color.r,\n color.g,\n color.b,\n );\n this.intensity = data.intensity;\n if (data.lightType === spec.LightType.point) {\n this.lightType = PLightType.point;\n this.range = data.range ?? -1;\n } else if (data.lightType === spec.LightType.spot) {\n this.lightType = PLightType.spot;\n this.range = data.range ?? -1;\n this.outerConeAngle = data.outerConeAngle ?? Math.PI;\n this.innerConeAngle = data.innerConeAngle ?? 0;\n } else if (data.lightType === spec.LightType.directional) {\n this.lightType = PLightType.directional;\n } else {\n this.lightType = PLightType.ambient;\n }\n this.update();\n }\n\n /**\n * 更新灯光变换\n */\n override update () {\n if (this.owner !== undefined) {\n this.transform.fromEffectsTransform(this.owner.transform);\n }\n }\n\n /**\n * 是否方向光\n * @returns\n */\n isDirectional (): boolean {\n return this.lightType === PLightType.directional;\n }\n\n /**\n * 是否点光源\n * @returns\n */\n isPoint (): boolean {\n return this.lightType === PLightType.point;\n }\n\n /**\n * 是否聚光灯\n * @returns\n */\n isSpot (): boolean {\n return this.lightType === PLightType.spot;\n }\n\n /**\n * 是否环境光\n * @returns\n */\n isAmbient (): boolean {\n return this.lightType === PLightType.ambient;\n }\n\n /**\n * 获取位置\n */\n override get position (): Vector3 {\n return this.translation;\n }\n\n /**\n * 获取世界坐标中的位置\n * @returns\n */\n getWorldPosition (): Vector3 {\n return this.translation;\n }\n\n /**\n * 获取世界坐标中的方向\n * @returns\n */\n getWorldDirection (): Vector3 {\n return this.matrix.transformNormal(this.direction, new Vector3());\n }\n}\n\n/**\n * 灯光管理类,负责 3D 场景灯光的管理\n */\nexport class PLightManager {\n /**\n * 灯光数组\n */\n lightList: PLight[] = [];\n\n constructor () {\n\n }\n /**\n * 通过灯光参数,创建灯光对象,并保存到灯光数组中\n * @param inLight - 灯光参数\n * @param owner - 所属灯光组件\n * @returns 插入的灯光对象\n */\n insertItem (name: string, inLight: ModelLightComponentData, owner?: ModelLightComponent): PLight {\n const light = new PLight(name, inLight, owner);\n\n this.lightList.push(light);\n\n return light;\n }\n\n /**\n * 插入灯光对象\n * @param inLight - 灯光对象\n * @returns 插入的灯光对象\n */\n insertLight (inLight: PLight): PLight {\n this.lightList.push(inLight);\n\n return inLight;\n }\n\n /**\n * 删除灯光对象,从灯光数组中查找对象并进行删除,如果没有找到就忽略\n * @param inLight - 删除的灯光对象\n */\n remove (inLight: PLight) {\n const findResult = this.lightList.findIndex(item => {\n return item === inLight;\n });\n\n if (findResult !== -1) {\n this.lightList.splice(findResult, 1);\n }\n }\n\n /**\n * 销毁\n */\n dispose () {\n this.lightList = [];\n }\n\n /**\n * 灯光数目\n */\n get lightCount (): number {\n return this.lightList.length;\n }\n\n}\n\n","export function _assert_this_initialized(self) {\n if (self === void 0) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\n return self;\n}\nexport { _assert_this_initialized as _ };\n","import type { Texture, Engine, math, VFXItem, Renderer, Geometry } from '@galacean/effects';\nimport { spec, Material, GLSLVersion } from '@galacean/effects';\nimport type { ModelMeshComponentData, ModelItemBounding } from '../index';\nimport { PObjectType, PMaterialType, PGlobalState } from './common';\nimport { PEntity } from './object';\nimport type { PMaterial } from './material';\nimport { PMaterialPBR, PMaterialUnlit, createPluginMaterial } from './material';\nimport { Matrix4, Vector3, Box3, Vector2 } from './math';\nimport { PSkin, PAnimTexture, PMorph, TextureDataMode } from './animation';\nimport type { PSceneManager, PSceneStates } from './scene';\nimport type { PSkybox } from './skybox';\nimport { GeometryBoxProxy, HitTestingProxy } from '../utility/plugin-helper';\nimport { BoxMesh } from '../utility/ri-helper';\nimport { RayBoxTesting } from '../utility/hit-test-helper';\nimport type { ModelTreeNode } from '../plugin';\nimport { ModelTreeComponent } from '../plugin';\nimport type { ModelMeshComponent } from '../plugin/model-item';\n\ntype Box3 = math.Box3;\n\n/**\n * Mesh 类,负责 Mesh 相关的骨骼动画和 PBR 渲染\n */\nexport class PMesh extends PEntity {\n /**\n * 所属的 Mesh 组件\n */\n owner?: ModelMeshComponent;\n /**\n * 父节点索引\n */\n parentIndex = -1;\n /**\n * 父元素\n */\n parentItem?: VFXItem;\n /**\n * 父元素索引\n */\n parentItemId?: string;\n rootBoneItem?: VFXItem;\n /**\n * 蒙皮\n */\n skin?: PSkin;\n /**\n * morph 动画状态数据,主要是 weights 数组\n */\n morph?: PMorph;\n /**\n * primitive 对象数组\n */\n subMeshes: PSubMesh[] = [];\n /**\n * 是否隐藏,默认是隐藏\n */\n hide = true;\n /**\n * 优先级\n */\n priority = 0;\n /**\n * 包围盒\n */\n boundingBox: Box3 = new Box3();\n /**\n * 是否显示包围盒\n */\n visBoundingBox = false;\n /**\n * 包围盒 Mesh\n */\n boundingBoxMesh?: BoxMesh;\n /**\n * 是否调用 Build\n */\n isBuilt = false;\n /**\n * 是否销毁\n */\n isDisposed = false;\n\n /**\n * 构造函数,创建 Mesh 对象,并与所属组件和父元素相关联\n * @param engine - 引擎\n * @param name - 名称\n * @param meshData - Mesh 参数\n * @param owner - 所属的 Mesh 组件\n * @param parentId - 父元素索引\n * @param parent - 父元素\n */\n constructor (\n private engine: Engine,\n name: string,\n meshData: ModelMeshComponentData,\n owner: ModelMeshComponent,\n parentId?: string,\n parent?: VFXItem,\n ) {\n super();\n const proxy = new EffectsMeshProxy(meshData, owner, parent);\n\n this.name = name;\n this.type = PObjectType.mesh;\n this.visible = false;\n this.owner = owner;\n //\n this.parentIndex = proxy.getParentIndex();\n this.parentItem = proxy.parentItem;\n this.parentItemId = parentId;\n this.rootBoneItem = meshData.rootBone as unknown as VFXItem;\n this.skin = proxy.getSkinObj(engine);\n this.morph = proxy.getMorphObj();\n this.hide = proxy.isHide();\n this.priority = owner?.item?.renderOrder || 0;\n //\n this.subMeshes = [];\n const geometry = proxy.getGeometry() as unknown as Geometry;\n const materials = owner?.materials ?? [];\n\n materials.forEach(material => {\n const subMesh = new PSubMesh(this.engine);\n\n subMesh.create(geometry, material, this);\n this.subMeshes.push(subMesh);\n });\n\n if (this.subMeshes.length <= 0) {\n console.warn(`No primitive inside mesh item ${name}.`);\n }\n\n this.boundingBox = this.getItemBoundingBox(meshData.interaction);\n }\n\n /**\n * 创建 GE 的 Mesh、Geometry 和 Material 对象\n * @param scene - 场景管理器\n * @returns\n */\n build (scene: PSceneManager) {\n if (this.isBuilt) {\n return;\n }\n\n this.isBuilt = true;\n this.subMeshes.forEach(prim => {\n prim.build(scene.maxLightCount, scene.skybox);\n });\n\n if (PGlobalState.getInstance().visBoundingBox) {\n this.boundingBoxMesh = new BoxMesh(this.engine, this.priority);\n }\n }\n\n /**\n * 更新变换数据和蒙皮数据\n */\n override update () {\n if (this.owner !== undefined) {\n this.transform.fromEffectsTransform(this.owner.transform);\n\n if (this.morph && this.morph.hasMorph() && this.owner.morphWeights.length > 0) {\n this.morph.updateWeights(this.owner.morphWeights);\n }\n }\n }\n\n /**\n * 更新骨骼动画\n */\n lateUpdate () {\n this.skin?.updateSkinMatrices();\n }\n\n /**\n * 渲染 Mesh 对象,需要将内部相关数据传给渲染器\n * @param scene - 场景\n * @param renderer - 渲染器\n */\n override render (scene: PSceneManager, renderer: Renderer) {\n this.updateMaterial(scene);\n\n this.subMeshes.forEach((subMesh, index) => {\n renderer.drawGeometry(\n subMesh.getEffectsGeometry(),\n subMesh.getEffectsMaterial(),\n index\n );\n });\n\n if (this.visBoundingBox && this.boundingBoxMesh !== undefined) {\n const mesh = this.boundingBoxMesh.mesh;\n\n renderer.drawGeometry(mesh.geometry, mesh.material);\n }\n }\n\n /**\n * 销毁,需要主动释放蒙皮、morph 和 Mesh 等相关的对象\n * @returns\n */\n override dispose () {\n if (this.isDisposed) {\n return;\n }\n\n super.dispose();\n\n this.owner = undefined;\n this.isDisposed = true;\n // @ts-expect-error\n this.engine = null;\n this.parentItem = undefined;\n this.skin?.dispose();\n this.skin = undefined;\n this.morph?.dispose();\n this.morph = undefined;\n this.subMeshes.forEach(prim => {\n prim.dispose();\n });\n this.subMeshes = [];\n this.boundingBoxMesh?.dispose();\n this.boundingBoxMesh = undefined;\n }\n\n /**\n * 更新 Morph 动画权重\n * 每帧都会更新 Morph 动画权重,需要小心检查 Morph 动画参数\n * 对于数组长度对不上的情况,直接报错\n *\n * @param weightsArray - Morph 动画的权重数组\n */\n updateMorphWeights (weightsArray: Float32Array) {\n if (this.morph === undefined || !this.morph.hasMorph()) {\n return;\n }\n\n const updatedArray = this.morph.morphWeightsArray;\n\n if (updatedArray === undefined) {\n return;\n }\n\n if (updatedArray.length != weightsArray.length) {\n throw new Error('Weight array length mismatch.');\n }\n\n for (let i = 0; i < updatedArray.length; i++) {\n updatedArray[i] = weightsArray[i];\n }\n }\n\n /**\n * 更新父 VFX 元素\n * @param parentId - 父元素索引\n * @param parentItem - 父 VFX 元素\n */\n updateParentInfo (parentId: string, parentItem: VFXItem) {\n this.parentItemId = parentId;\n this.parentItem = parentItem;\n if (this.skin !== undefined) {\n this.skin.updateParentItem(parentItem);\n }\n }\n\n /**\n * 根据当前场景状态更新内部材质数据\n * @param scene - 场景管理器\n */\n updateMaterial (scene: PSceneManager) {\n const worldMatrix = this.matrix;\n const normalMatrix = worldMatrix.clone().invert().transpose();\n const sceneStates = scene.sceneStates;\n\n this.subMeshes.forEach(prim => {\n prim.updateMaterial(worldMatrix, normalMatrix, sceneStates);\n });\n\n if (this.boundingBoxMesh !== undefined) {\n this.computeBoundingBox(worldMatrix);\n const lineColor = new Vector3(1, 1, 1);\n const minPos = this.boundingBox.min;\n const maxPos = this.boundingBox.max;\n const positions = new Float32Array([\n minPos.x, minPos.y, minPos.z,\n maxPos.x, minPos.y, minPos.z,\n maxPos.x, maxPos.y, minPos.z,\n minPos.x, maxPos.y, minPos.z,\n\n minPos.x, minPos.y, maxPos.z,\n maxPos.x, minPos.y, maxPos.z,\n maxPos.x, maxPos.y, maxPos.z,\n minPos.x, maxPos.y, maxPos.z,\n ]);\n\n this.boundingBoxMesh.update(worldMatrix, sceneStates.viewProjectionMatrix, positions, lineColor);\n }\n }\n\n /**\n * 点击测试,对于编辑器模式会进行精准的点击测试,否则就和内部的包围盒进行测试\n * @param rayOrigin - 射线原点\n * @param rayDirection - 射线方向\n * @returns 交点列表\n */\n hitTesting (rayOrigin: Vector3, rayDirection: Vector3): Vector3[] {\n const worldMatrix = this.matrix;\n const invWorldMatrix = worldMatrix.clone().invert();\n const newOrigin = invWorldMatrix.transformPoint(rayOrigin, new Vector3());\n const newDirection = invWorldMatrix.transformNormal(rayDirection, new Vector3());\n\n const bounding = this.boundingBox;\n const boxt = RayBoxTesting(newOrigin, newDirection, bounding.min, bounding.max);\n\n if (boxt === undefined) {\n return [];\n }\n\n let mint: number | undefined;\n\n if (PGlobalState.getInstance().isEditorEnv) {\n this.subMeshes.forEach(prim => {\n const primt = prim.hitTesting(newOrigin, newDirection, worldMatrix, invWorldMatrix);\n\n if (primt !== undefined) {\n if (mint === undefined || mint > primt) {\n mint = primt;\n }\n }\n });\n } else {\n mint = boxt;\n }\n\n if (mint === undefined) {\n return [];\n }\n\n newDirection.multiply(mint);\n newOrigin.add(newDirection);\n worldMatrix.transformPoint(newOrigin);\n\n return [newOrigin];\n }\n\n /**\n * 计算包围盒,根据传入的世界矩阵\n * @param worldMatrix - 世界矩阵\n * @returns\n */\n computeBoundingBox (worldMatrix: Matrix4): Box3 {\n const box = this.boundingBox.makeEmpty();\n const inverseWorldMatrix = worldMatrix.clone().invert();\n\n this.subMeshes.forEach(prim => {\n const subbox = prim.computeBoundingBox(inverseWorldMatrix);\n\n box.union(subbox);\n });\n\n return box;\n }\n\n private getItemBoundingBox (inBounding?: ModelItemBounding) {\n if (inBounding === undefined) {\n return new Box3();\n }\n\n if (inBounding.type === spec.ModelBoundingType.box) {\n const center = inBounding.center ?? [0, 0, 0];\n const size = inBounding.size ?? [0, 0, 0];\n const c = Vector3.fromArray(center);\n const hs = Vector3.fromArray(size).multiply(0.5);\n const minVector = c.clone().subtract(hs);\n const maxVector = c.clone().add(hs);\n\n return new Box3(minVector, maxVector);\n } else {\n const center = inBounding.center ?? [0, 0, 0];\n const halfRadius = (inBounding.radius ?? 0) * 0.5;\n const c = Vector3.fromArray(center);\n const minVector = c.clone().subtract(halfRadius);\n const maxVector = c.clone().add(halfRadius);\n\n return new Box3(minVector, maxVector);\n }\n }\n\n /**\n * 获取父节点 id\n * @returns\n */\n getParentId (): string | undefined {\n return this.parentItemId;\n }\n\n /**\n * 是否有蒙皮\n */\n get hasSkin (): boolean {\n return this.skin !== undefined;\n }\n\n}\n\n/**\n * PSubMesh 类,负责 Sub Mesh相关的功能,支持骨骼动画和 PBR 渲染\n */\nexport class PSubMesh {\n /**\n * 宿主 Mesh,包含了当前 Primitive\n */\n private parent?: PMesh;\n private skin?: PSkin; // from owner mesh\n /**\n * Morph 动画状态数据,来自 Mesh 对象,这里不创建不删除\n */\n private morph?: PMorph;\n private geometry: PGeometry;\n private material: PMaterial;\n //\n private jointMatrixList?: Float32Array;\n private jointNormalMatList?: Float32Array;\n private jointMatrixTexture?: PAnimTexture;\n private jointNormalMatTexture?: PAnimTexture;\n /**\n * 名称\n */\n name = '';\n /**\n * 渲染优先级\n */\n effectsPriority = 0;\n /**\n * 包围盒\n */\n boundingBox = new Box3();\n /**\n * 是否压缩,模式不压缩\n */\n isCompressed = false;\n\n constructor (private engine: Engine) {\n\n }\n\n /**\n * 创建 Primitive 对象\n * @param data - Primitive 参数\n * @param parent - 所属 Mesh 对象\n */\n create (geometry: Geometry, material: Material, parent: PMesh) {\n this.parent = parent;\n this.skin = parent.skin;\n this.morph = parent.morph;\n this.setGeometry(geometry);\n this.setMaterial(material);\n this.name = parent.name;\n this.effectsPriority = parent.priority;\n this.geometry.setHide(parent.hide);\n\n if (this.skin !== undefined) {\n const jointCount = this.skin.maxJointCount;\n\n this.jointMatrixList = new Float32Array(jointCount * 16);\n this.jointNormalMatList = new Float32Array(jointCount * 16);\n if (this.skin.isTextureDataMode()) {\n const isHalfFloat = this.skin.textureDataMode === TextureDataMode.half_float;\n\n this.jointMatrixTexture = new PAnimTexture(this.engine);\n this.jointNormalMatTexture = new PAnimTexture(this.engine);\n this.jointMatrixTexture.create(jointCount, isHalfFloat, 'jointMatrixTexture');\n this.jointNormalMatTexture.create(jointCount, isHalfFloat, 'jointNormalMatTexture');\n }\n } else {\n if (this.geometry.hasWeights() || this.geometry.hasJoints()) {\n // 最近出现发布后模型动画没播出来问题,\n // 是因为导出后 skin 属性丢失导致,所以增加这个检查\n console.warn('Geometry has weight and/or joint array, but the skin is missing.');\n }\n }\n\n this.isCompressed = this.geometry.isCompressed();\n\n //if (PGlobalState.getInstance().isTiny3dMode) {\n // if (this._material.isAdditive || this._material.isTranslucent()) { this.mriPriority += 10000; }\n //}\n }\n\n /**\n * 创建 GE Mesh、Geometry 和 Material 对象,用于后面的渲染\n * @param lightCount - 灯光数目\n * @param skybox - 天空盒\n */\n build (lightCount: number, skybox?: PSkybox) {\n const globalState = PGlobalState.getInstance();\n const primitiveMacroList = this.getMacroList(lightCount, true, skybox);\n const materialMacroList = this.material.getMacroList(primitiveMacroList);\n\n let material: Material;\n const isWebGL2 = PGlobalState.getInstance().isWebGL2;\n\n if (this.material.effectMaterial) {\n material = this.material.effectMaterial;\n\n materialMacroList.forEach(macro => {\n const { name, value } = macro;\n\n material.enableMacro(name, value);\n });\n\n this.material.setMaterialStates(material);\n } else {\n material = Material.create(\n this.engine,\n {\n shader: {\n vertex: this.material.vertexShaderCode,\n fragment: this.material.fragmentShaderCode,\n shared: globalState.shaderShared,\n glslVersion: isWebGL2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n },\n }\n );\n this.material.setMaterialStates(material);\n }\n }\n\n // TODO: 待移除?\n private getFeatureList (lightCount: number, pbrPass: boolean, skybox?: PSkybox): string[] {\n const featureList: string[] = [];\n\n if (this.geometry.hasNormals()) {\n featureList.push('HAS_NORMALS 1');\n }\n if (this.geometry.hasTangents()) {\n featureList.push('HAS_TANGENTS 1');\n }\n if (this.geometry.hasUVCoords(1)) {\n featureList.push('HAS_UV_SET1 1');\n }\n if (this.geometry.hasUVCoords(2)) {\n featureList.push('HAS_UV_SET2 1');\n }\n\n if (this.morph !== undefined && this.morph.hasMorph()) {\n // 存在 Morph 动画,需要配置 Morph 动画相关的 Shader 宏定义\n // USE_MORPHING 是总开关,WEIGHT_COUNT 是 weights 数组长度(Shader)\n featureList.push('USE_MORPHING');\n featureList.push(`WEIGHT_COUNT ${this.morph.morphWeightsLength}`);\n for (let i = 0; i < this.morph.morphWeightsLength; i++) {\n if (this.morph.hasPositionMorph) {\n featureList.push(`HAS_TARGET_POSITION${i}`);\n }\n if (this.morph.hasNormalMorph) {\n featureList.push(`HAS_TARGET_NORMAL${i}`);\n }\n if (this.morph.hasTangentMorph) {\n featureList.push(`HAS_TARGET_TANGENT${i}`);\n }\n }\n }\n\n if (this.skin !== undefined) {\n featureList.push('USE_SKINNING 1');\n featureList.push(`JOINT_COUNT ${this.skin.getJointCount()}`);\n featureList.push('HAS_JOINT_SET1 1');\n featureList.push('HAS_WEIGHT_SET1 1');\n if (this.skin.textureDataMode) { featureList.push('USE_SKINNING_TEXTURE 1'); }\n }\n\n if (this.material.materialType !== PMaterialType.unlit) {\n // let hasLight = false;\n\n if (lightCount > 0 && this.geometry.hasNormals()) {\n // hasLight = true;\n featureList.push('USE_PUNCTUAL 1');\n featureList.push(`LIGHT_COUNT ${lightCount}`);\n }\n\n if (skybox !== undefined && skybox.available) {\n // hasLight = true;\n featureList.push('USE_IBL 1');\n featureList.push('USE_TEX_LOD 1');\n if (skybox.hasDiffuseImage) {\n // do nothing\n } else {\n featureList.push('IRRADIANCE_COEFFICIENTS 1');\n }\n }\n\n // if(!hasLight){\n // featureList.push('MATERIAL_UNLIT 1');\n // }\n }\n\n // 渲染中间结果输出,用于渲染效果调试,支持 pbr 和 unlit\n const renderMode = PGlobalState.getInstance().renderMode3D;\n const outputDefine = this.getRenderMode3DDefine(renderMode);\n\n if (outputDefine !== undefined) {\n featureList.push('DEBUG_OUTPUT 1');\n featureList.push(`${outputDefine} 1`);\n }\n\n return featureList;\n }\n\n private getMacroList (lightCount: number, pbrPass: boolean, skybox?: PSkybox): MacroInfo[] {\n const macroList: MacroInfo[] = [];\n\n if (this.geometry.hasNormals()) {\n macroList.push({ name: 'HAS_NORMALS' });\n }\n if (this.geometry.hasTangents()) {\n macroList.push({ name: 'HAS_TANGENTS' });\n }\n if (this.geometry.hasUVCoords(1)) {\n macroList.push({ name: 'HAS_UV_SET1' });\n }\n if (this.geometry.hasUVCoords(2)) {\n macroList.push({ name: 'HAS_UV_SET2' });\n }\n\n if (this.morph !== undefined && this.morph.hasMorph()) {\n // 存在 Morph 动画,需要配置 Morph 动画相关的 Shader 宏定义\n // USE_MORPHING 是总开关,WEIGHT_COUNT 是 weights 数组长度(Shader)\n macroList.push({ name: 'USE_MORPHING' });\n macroList.push({ name: 'WEIGHT_COUNT', value: this.morph.morphWeightsLength });\n for (let i = 0; i < this.morph.morphWeightsLength; i++) {\n if (this.morph.hasPositionMorph) {\n macroList.push({ name: `HAS_TARGET_POSITION${i}` });\n }\n if (this.morph.hasNormalMorph) {\n macroList.push({ name: `HAS_TARGET_NORMAL${i}` });\n }\n if (this.morph.hasTangentMorph) {\n macroList.push({ name: `HAS_TARGET_TANGENT${i}` });\n }\n }\n }\n\n if (this.skin !== undefined) {\n macroList.push({ name: 'USE_SKINNING' });\n macroList.push({ name: 'JOINT_COUNT', value: this.skin.maxJointCount });\n macroList.push({ name: 'HAS_JOINT_SET1' });\n macroList.push({ name: 'HAS_WEIGHT_SET1' });\n if (this.skin.textureDataMode) {\n macroList.push({ name: 'USE_SKINNING_TEXTURE' });\n }\n }\n\n if (this.material.materialType !== PMaterialType.unlit) {\n if (lightCount > 0 && this.geometry.hasNormals()) {\n macroList.push({ name: 'USE_PUNCTUAL' });\n macroList.push({ name: 'LIGHT_COUNT', value: lightCount });\n }\n\n if (skybox !== undefined && skybox.available) {\n macroList.push({ name: 'USE_IBL' });\n macroList.push({ name: 'USE_TEX_LOD' });\n if (skybox.hasDiffuseImage) {\n // do nothing\n } else {\n macroList.push({ name: 'IRRADIANCE_COEFFICIENTS' });\n }\n }\n\n // if(!hasLight){\n // featureList.push('MATERIAL_UNLIT 1');\n // }\n }\n\n // 渲染中间结果输出,用于渲染效果调试,支持 pbr 和 unlit\n const renderMode = PGlobalState.getInstance().renderMode3D;\n const outputDefine = this.getRenderMode3DDefine(renderMode);\n\n if (outputDefine !== undefined) {\n macroList.push({ name: 'DEBUG_OUTPUT' });\n macroList.push({ name: outputDefine });\n }\n\n return macroList;\n }\n\n /**\n * 销毁,需要释放创建的 GE 对象\n */\n dispose () {\n // @ts-expect-error\n this.engine = null;\n this.parent = undefined;\n this.skin = undefined;\n this.morph = undefined;\n this.geometry.dispose();\n this.material.dispose();\n //\n this.jointMatrixList = undefined;\n this.jointNormalMatList = undefined;\n this.jointMatrixTexture?.dispose();\n this.jointMatrixTexture = undefined;\n this.jointNormalMatTexture?.dispose();\n this.jointNormalMatTexture = undefined;\n }\n\n /**\n * 更新内部 GE 材质着色器 Uniform 数据,根据场景状态\n * @param worldMatrix - 世界矩阵\n * @param nomralMatrix - 法线矩阵\n * @param sceneStates - 场景状态\n */\n updateMaterial (worldMatrix: Matrix4, nomralMatrix: Matrix4, sceneStates: PSceneStates) {\n this.updateUniformsByAnimation(worldMatrix, nomralMatrix);\n this.updateUniformsByScene(sceneStates);\n this.material.updateUniforms(this.getEffectsMaterial());\n }\n\n /**\n * 点击测试,先进行简单的包围合测试,然后再计算精准的点击测试,这个测试非常耗时不要在移动端上使用\n * @param newOrigin - 射线原点\n * @param newDirection - 射线方向\n * @param worldMatrix - 世界矩阵\n * @param invWorldMatrix - 逆世界矩阵\n * @returns 射线的 t 参数\n */\n hitTesting (newOrigin: Vector3, newDirection: Vector3, worldMatrix: Matrix4, invWorldMatrix: Matrix4) {\n const bounding = this.boundingBox;\n const boxt = RayBoxTesting(newOrigin, newDirection, bounding.min, bounding.max);\n const bindMatrices: Matrix4[] = [];\n\n if (boxt === undefined) {\n return;\n }\n\n if (this.skin !== undefined) {\n const animMatrices = this.skin.animationMatrices;\n\n animMatrices.forEach(mat => {\n bindMatrices.push(new Matrix4().multiplyMatrices(invWorldMatrix, mat));\n });\n }\n\n const proxy = new HitTestingProxy();\n const doubleSided = this.material.isBothSide();\n\n proxy.create(this.geometry.geometry, doubleSided, bindMatrices);\n\n return proxy.getHitPoint(newOrigin, newDirection);\n }\n\n /**\n * 计算包围盒\n * @param inverseWorldMatrix - 逆世界矩阵\n * @returns\n */\n computeBoundingBox (inverseWorldMatrix: Matrix4): Box3 {\n if (this.skin === undefined && !this.boundingBox.isEmpty()) {\n // 包围盒缓存了,直接返回计算的结果\n return this.boundingBox;\n }\n\n // 重新计算包围盒\n const bindMatrices: Matrix4[] = [];\n\n if (this.skin !== undefined) {\n const animMatrices = this.skin.animationMatrices;\n\n animMatrices.forEach(mat => {\n bindMatrices.push(new Matrix4().multiplyMatrices(inverseWorldMatrix, mat));\n });\n }\n\n const proxy = new GeometryBoxProxy();\n\n proxy.create(this.geometry.geometry, bindMatrices);\n\n return proxy.getBoundingBox(this.boundingBox);\n }\n\n /**\n * 渲染输出模式转成着色器中的宏定义\n * @param mode - 渲染输出模式\n * @returns 返回相应的宏定义\n */\n getRenderMode3DDefine (mode: spec.RenderMode3D): string | undefined {\n switch (mode) {\n case spec.RenderMode3D.uv:\n return 'DEBUG_UV';\n case spec.RenderMode3D.normal:\n return 'DEBUG_NORMAL';\n case spec.RenderMode3D.basecolor:\n return 'DEBUG_BASECOLOR';\n case spec.RenderMode3D.alpha:\n return 'DEBUG_ALPHA';\n case spec.RenderMode3D.metallic:\n return 'DEBUG_METALLIC';\n case spec.RenderMode3D.roughness:\n return 'DEBUG_ROUGHNESS';\n case spec.RenderMode3D.ao:\n return 'DEBUG_OCCLUSION';\n case spec.RenderMode3D.emissive:\n return 'DEBUG_EMISSIVE';\n }\n }\n\n private updateUniformsByAnimation (worldMatrix: Matrix4, normalMatrix: Matrix4) {\n const material = this.getEffectsMaterial();\n\n material.setMatrix('effects_ObjectToWorld', worldMatrix);\n material.setMatrix('_NormalMatrix', normalMatrix);\n //\n const skin = this.skin;\n\n if (skin !== undefined) {\n const jointMatrixList = this.jointMatrixList as Float32Array;\n const jointNormalMatList = this.jointNormalMatList as Float32Array;\n\n skin.computeMeshAnimMatrices(worldMatrix, jointMatrixList, jointNormalMatList);\n if (skin.textureDataMode) {\n const jointMatrixTexture = this.jointMatrixTexture as PAnimTexture;\n const jointNormalMatTexture = this.jointNormalMatTexture as PAnimTexture;\n\n jointMatrixTexture.update(jointMatrixList);\n jointNormalMatTexture.update(jointNormalMatList);\n material.setTexture('_jointMatrixSampler', jointMatrixTexture.getTexture());\n material.setTexture('_jointNormalMatrixSampler', jointNormalMatTexture.getTexture());\n } else {\n const jointMatrixNumbers: number[] = [];\n const jointNormalMatNumbers: number[] = [];\n\n jointMatrixList.forEach(val => jointMatrixNumbers.push(val));\n jointNormalMatList.forEach(val => jointNormalMatNumbers.push(val));\n material.setMatrixNumberArray('_jointMatrix', jointMatrixNumbers);\n material.setMatrixNumberArray('_jointNormalMatrix', jointNormalMatNumbers);\n }\n }\n\n // Morph 相关的数据更新,仅需要更新 weights 数组\n const morph = this.morph;\n\n if (morph !== undefined && morph.hasMorph()) {\n const morphWeights = morph.morphWeightsArray.slice();\n\n material.setFloats('_morphWeights', morphWeights);\n }\n }\n\n private updateUniformsByScene (sceneStates: PSceneStates) {\n const material = this.getEffectsMaterial();\n\n material.setMatrix('effects_MatrixVP', sceneStates.viewProjectionMatrix);\n material.setVector3('_Camera', sceneStates.cameraPosition);\n //\n if (!this.isUnlitMaterial()) {\n const { maxLightCount, lightList } = sceneStates;\n\n for (let i = 0; i < maxLightCount; i++) {\n if (i < lightList.length) {\n const light = lightList[i];\n const intensity = light.visible ? light.intensity : 0;\n\n material.setVector3(`_Lights[${i}].direction`, light.getWorldDirection());\n material.setFloat(`_Lights[${i}].range`, light.range);\n material.setVector3(`_Lights[${i}].color`, light.color);\n material.setFloat(`_Lights[${i}].intensity`, intensity);\n material.setVector3(`_Lights[${i}].position`, light.getWorldPosition());\n material.setFloat(`_Lights[${i}].innerConeCos`, Math.cos(light.innerConeAngle));\n material.setFloat(`_Lights[${i}].outerConeCos`, Math.cos(light.outerConeAngle));\n material.setInt(`_Lights[${i}].type`, light.lightType);\n material.setVector2(`_Lights[${i}].padding`, light.padding);\n } else {\n material.setVector3(`_Lights[${i}].direction`, Vector3.ZERO);\n material.setFloat(`_Lights[${i}].range`, 0);\n material.setVector3(`_Lights[${i}].color`, Vector3.ZERO);\n material.setFloat(`_Lights[${i}].intensity`, 0);\n material.setVector3(`_Lights[${i}].position`, Vector3.ZERO);\n material.setFloat(`_Lights[${i}].innerConeCos`, 0);\n material.setFloat(`_Lights[${i}].outerConeCos`, 0);\n material.setInt(`_Lights[${i}].type`, 99999);\n material.setVector2(`_Lights[${i}].padding`, Vector2.ZERO);\n }\n }\n\n const skybox = sceneStates.skybox;\n\n if (skybox !== undefined && skybox.available) {\n material.setVector2('_IblIntensity', new Vector2(skybox.currentIntensity, skybox.currentReflectionsIntensity));\n material.setTexture('_brdfLUT', skybox.brdfLUT as Texture);\n if (skybox.diffuseImage !== undefined) {\n material.setTexture('_DiffuseEnvSampler', skybox.diffuseImage);\n } else {\n const coeffs = skybox.irradianceCoeffs as number[][];\n const aliasName = ['l00', 'l1m1', 'l10', 'l11', 'l2m2', 'l2m1', 'l20', 'l21', 'l22'];\n\n aliasName.forEach((n, i) => {\n material.setVector3(`_shCoefficients.${n}`, Vector3.fromArray(coeffs[i] as spec.vec3));\n });\n }\n material.setInt('_MipCount', skybox.specularMipCount - 1);\n material.setTexture('_SpecularEnvSampler', skybox.specularImage);\n }\n }\n }\n\n /**\n * 是否有蒙皮\n * @returns\n */\n hasSkin (): boolean {\n return this.skin !== undefined;\n }\n\n /**\n * 获取 GE 几何体\n * @returns\n */\n getEffectsGeometry (): Geometry {\n return this.geometry.geometry;\n }\n\n /**\n * 设置几何体\n * @param val - 插件或 GE 几何体\n */\n setGeometry (val: PGeometry | Geometry) {\n if (val instanceof PGeometry) {\n this.geometry = val;\n } else {\n this.geometry = new PGeometry(val);\n }\n }\n\n /**\n * 设置材质\n * @param val - 插件材质对象或材质参数\n */\n setMaterial (val: PMaterial | Material) {\n if (val instanceof PMaterialUnlit) {\n this.material = val;\n } else if (val instanceof PMaterialPBR) {\n this.material = val;\n } else {\n this.material = createPluginMaterial(val);\n }\n }\n\n /**\n * 获取 GE 材质\n * @returns\n */\n getEffectsMaterial (): Material {\n return this.material.effectMaterial;\n }\n\n /**\n * 是否无光照材质\n * @returns\n */\n isUnlitMaterial (): boolean {\n return this.material.materialType === PMaterialType.unlit;\n }\n\n /**\n * 是否有 Morph 动画:\n * 需要注意 Morph 对象存在,但还是没有 Morph 动画的情况\n * @returns 返回是否有 Morph 动画\n */\n hasMorph (): boolean {\n if (this.morph === undefined) {\n return false;\n }\n\n return this.morph.hasMorph();\n }\n\n /**\n * 获取世界坐标下的包围盒\n * @returns\n */\n getWorldBoundingBox (): Box3 {\n if (this.parent === undefined) {\n if (this.boundingBox.isEmpty()) {\n this.computeBoundingBox(Matrix4.fromIdentity());\n }\n\n return this.boundingBox;\n } else {\n const matrix = this.parent.matrix;\n\n if (this.boundingBox.isEmpty()) {\n this.computeBoundingBox(matrix.clone().invert());\n }\n\n return this.boundingBox.clone().applyMatrix4(matrix);\n }\n }\n}\n\n/**\n * 3D 几何类\n */\nexport class PGeometry {\n /**\n * 属性名称数组\n */\n attributeNames: string[];\n\n /**\n * 创建 3D 几何体,根据 GE 几何体\n * @param geometry - GE 几何体\n */\n constructor (public geometry: Geometry) {\n this.attributeNames = geometry.getAttributeNames();\n }\n\n /**\n * 销毁\n */\n dispose () {\n // @ts-expect-error\n this.geometry = undefined;\n this.attributeNames = [];\n }\n\n /**\n * 是否有某个属性\n * @param name - 属性名\n * @returns\n */\n hasAttribute (name: string): boolean {\n const index = this.attributeNames.findIndex(item => {\n return item === name;\n });\n\n return index !== -1;\n }\n\n /**\n * 设置隐藏,通过修改几何体中的渲染数目\n * @param hide - 隐藏值\n */\n setHide (hide: boolean) {\n const geomExt = this.geometry as GeometryExt;\n\n if (geomExt.getDrawCount() === 0) {\n const indexArray = geomExt.getIndexData();\n\n if (indexArray !== undefined) {\n geomExt.setDrawCount(indexArray.length);\n }\n }\n if (hide) {\n if (geomExt.getDrawCount() >= 0) {\n geomExt.setDrawCount(-geomExt.getDrawCount());\n }\n } else {\n if (geomExt.getDrawCount() < 0) {\n geomExt.setDrawCount(-geomExt.getDrawCount());\n }\n }\n }\n\n /**\n * 是否压缩格式\n * @returns\n */\n isCompressed (): boolean {\n const positionAttrib = this.geometry.getAttributeData('aPos');\n\n if (positionAttrib === undefined) {\n return false;\n }\n\n // FIXME: get attributes from geometry\n //return positionAttrib.normalize === true;\n return false;\n }\n\n /**\n * 是否有位置属性\n * @returns\n */\n hasPositions (): boolean {\n return this.hasAttribute('aPos');\n }\n\n /**\n * 是否有法线属性\n * @returns\n */\n hasNormals (): boolean {\n return this.hasAttribute('aNormal');\n }\n\n /**\n * 是否有切线属性\n * @returns\n */\n hasTangents (): boolean {\n return this.hasAttribute('aTangent');\n }\n\n /**\n * 是否有纹理坐标属性\n * @param index - 纹理坐标索引\n * @returns\n */\n hasUVCoords (index: number): boolean {\n if (index === 1) {\n return this.hasAttribute('aUV');\n } else {\n return this.hasAttribute(`aUV${index}`);\n }\n }\n\n /**\n * 是否有颜色属性\n * @returns\n */\n hasColors (): boolean {\n return this.hasAttribute('aColor');\n }\n\n /**\n * 是否有关节点属性\n * @returns\n */\n hasJoints (): boolean {\n return this.hasAttribute('aJoints');\n }\n\n /**\n * 是否有权重属性\n * @returns\n */\n hasWeights (): boolean {\n return this.hasAttribute('aWeights');\n }\n}\n\nclass EffectsMeshProxy {\n data: ModelMeshComponentData;\n geometry: Geometry;\n rootBoneItem: VFXItem;\n morphObj: PMorph;\n\n constructor (\n public itemData: ModelMeshComponentData,\n public parentComponent: ModelMeshComponent,\n public parentItem?: VFXItem,\n ) {\n this.data = itemData;\n this.geometry = itemData.geometry as unknown as Geometry;\n this.rootBoneItem = itemData.rootBone as unknown as VFXItem;\n\n const morphObj = new PMorph();\n\n if (morphObj.create(this.geometry)) {\n // 设置初始权重数组\n if (itemData.morph?.weights) {\n morphObj.initWeights(itemData.morph?.weights);\n }\n\n this.morphObj = morphObj;\n }\n }\n\n hasMorphTarget (): boolean {\n return this.morphObj.hasMorph();\n }\n\n /**\n * 返回 Morph 对象\n * 需要先判断是否有 Morph 动画,如果没有就直接返回 undefined\n *\n * @returns 缓存的 Morph 对象,或者 undefined\n */\n getMorphObj (): PMorph | undefined {\n if (!this.hasMorphTarget()) {\n return;\n }\n\n return this.morphObj;\n }\n\n isHide (): boolean {\n return this.data.hide === true;\n }\n\n getParentNode (): ModelTreeNode | undefined {\n const nodeIndex = this.getParentIndex();\n const parentTree = this.parentItem?.getComponent(ModelTreeComponent);\n\n if (parentTree !== undefined && nodeIndex >= 0) {\n return parentTree.content.getNodeById(nodeIndex);\n }\n\n return undefined;\n }\n\n getParentIndex (): number {\n return -1;\n }\n\n getGeometry () {\n return this.data.geometry;\n }\n\n getMaterials () {\n return this.data.materials;\n }\n\n getMaterialCount () {\n return this.data.materials.length;\n }\n\n hasSkin (): boolean {\n const skin = this.geometry.getSkinProps();\n\n return !!(skin.rootBoneName && skin.boneNames && skin.inverseBindMatrices && this.rootBoneItem);\n }\n\n getSkinOpts () {\n return this.geometry.getSkinProps();\n }\n\n getSkinObj (engine: Engine): PSkin | undefined {\n const skin = this.getSkinOpts();\n\n if (skin.rootBoneName && skin.boneNames && skin.inverseBindMatrices && this.rootBoneItem) {\n const skinObj = new PSkin();\n const maxJointCount = this.parentComponent.sceneManager?.maxJointCount ?? 0;\n\n skinObj.create(skin, engine, this.rootBoneItem, maxJointCount);\n\n return skinObj;\n }\n\n return undefined;\n }\n}\n\nexport interface MacroInfo {\n name: string,\n value?: boolean | number,\n}\n\ninterface GeometryExt extends Geometry {\n newDrawCount?: number,\n}\n","import type { Mesh, Renderer, Texture, Engine, math, CameraOptionsEx } from '@galacean/effects';\nimport { Transform, spec, addItem, removeItem, PLAYER_OPTIONS_ENV_EDITOR } from '@galacean/effects';\nimport { PMesh } from './mesh';\nimport type { PCamera } from './camera';\nimport { PCameraManager } from './camera';\nimport { PLight, PLightManager } from './light';\nimport type { Vector3 } from './math';\nimport { Matrix4, Box3 } from './math';\nimport { PSkybox } from './skybox';\nimport { PTransform, PGlobalState, PObjectType } from './common';\nimport type { CompositionCache } from './cache';\nimport type { PEntity } from './object';\nimport { WebGLHelper } from '../utility/plugin-helper';\nimport { TwoStatesSet } from '../utility/ts-helper';\nimport type { ModelMeshComponent } from '../plugin';\n\ntype Box3 = math.Box3;\ntype Vector2 = math.Vector2;\n\n/**\n * 场景参数接口,初始化场景对象时使用\n */\nexport interface PSceneOptions {\n /**\n * 合成名称\n */\n componentName: string,\n /**\n * 渲染器\n */\n renderer: Renderer,\n /**\n * 场景缓存\n */\n sceneCache: CompositionCache,\n /**\n * 是否只渲染线框\n */\n wireframeOnly?: boolean,\n /**\n * 运行时环境\n */\n runtimeEnv?: string,\n /**\n * 兼容模式\n */\n compatibleMode?: string,\n /**\n * 是否可视化包围盒\n */\n visBoundingBox?: boolean,\n /**\n * 是否动态排序\n */\n enableDynamicSort?: boolean,\n /**\n * 3D 渲染模式\n */\n renderMode3D?: spec.RenderMode3D,\n /**\n * 3D 渲染模式中棋盘格大小\n */\n renderMode3DUVGridSize?: number,\n /**\n * 是否渲染天空盒\n */\n renderSkybox: boolean,\n /**\n * 灯光元素数目\n */\n lightItemCount: number,\n /**\n * 最大骨骼数目\n */\n maxJointCount: number,\n}\n\n/**\n * 场景状态接口,每次场景管理器 Tick 时都会生成\n */\nexport interface PSceneStates {\n /**\n * 时间间隔\n */\n deltaSeconds: number,\n /**\n * 相机对象\n */\n camera: PCamera,\n /**\n * 相机位置\n */\n cameraPosition: Vector3,\n /**\n * 相机矩阵\n */\n viewMatrix: Matrix4,\n /**\n * 投影矩阵\n */\n projectionMatrix: Matrix4,\n /**\n * 相机投影矩阵\n */\n viewProjectionMatrix: Matrix4,\n /**\n * 画布大小\n */\n winSize: Vector2,\n /**\n * 场景半径\n */\n sceneRadius: number,\n // for shadow\n shadowMapSizeInv?: Vector2,\n lightViewMatrix?: Matrix4,\n lightProjectionMatrix?: Matrix4,\n lightViewProjectionMatrix?: Matrix4,\n /**\n * 灯光对象列表\n */\n lightList: PLight[],\n /**\n * 最大灯光数目\n */\n maxLightCount: number,\n /**\n * 最大骨骼数目\n */\n maxJointCount: number,\n /**\n * 天空盒对象\n */\n skybox?: PSkybox,\n}\n\n/**\n * 场景管理类,如果存在 Model 插件中的元素才会创建\n */\nexport class PSceneManager {\n /**\n * 合成名称\n */\n compName: string;\n /**\n * 实体列表\n */\n itemList: PEntity[];\n /**\n * Mesh 列表\n */\n meshList: PMesh[];\n /**\n * 灯光管理器\n */\n lightManager: PLightManager;\n /**\n * 相机管理器\n */\n cameraManager: PCameraManager;\n /**\n * 是否动态排序 Mesh 渲染优先级\n * 默认 false,需要和 Tiny 对齐时为 true\n */\n enableDynamicSort: boolean;\n /**\n * IBL 渲染时的 BRDF 查询纹理\n */\n brdfLUT?: Texture;\n /**\n * 天空盒\n */\n skybox?: PSkybox;\n /**\n * Tick 次数\n */\n tickCount: number;\n /**\n * 最近 Tick 时间\n */\n lastTickSecond: number;\n /**\n * 当前场景包围盒缓存,在阴影渲染中使用\n */\n sceneAABBCache: Box3;\n /**\n * 场景前帧和当前帧渲染的 Mesh 集合\n */\n renderedMeshSet: TwoStatesSet<Mesh>;\n /**\n * 最多灯光数目\n */\n maxLightCount = 16;\n /**\n * 最大骨骼数目\n */\n maxJointCount = 0;\n /**\n * 场景状态\n */\n sceneStates: PSceneStates;\n\n private renderer?: Renderer;\n private sceneCache?: CompositionCache;\n private parentId2Mesh: Map<string, PMesh>;\n private renderSkybox = false;\n\n private engine: Engine;\n\n constructor (engine: Engine) {\n this.compName = 'SceneManger';\n this.itemList = [];\n this.meshList = [];\n this.engine = engine;\n this.lightManager = new PLightManager();\n this.cameraManager = new PCameraManager();\n this.parentId2Mesh = new Map();\n //\n this.enableDynamicSort = false;\n this.tickCount = 0;\n this.lastTickSecond = -1;\n //\n this.sceneAABBCache = new Box3();\n this.renderedMeshSet = new TwoStatesSet();\n }\n\n /**\n * 初始化场景管理器,设置全局状态\n * @param opts - 场景参数\n */\n initial (opts: PSceneOptions) {\n this.clean();\n this.compName = opts.componentName;\n this.renderer = opts.renderer;\n this.engine = opts.renderer.engine;\n this.sceneCache = opts.sceneCache;\n this.enableDynamicSort = opts.enableDynamicSort === true;\n this.renderSkybox = opts.renderSkybox;\n this.maxLightCount = opts.lightItemCount;\n this.maxJointCount = opts.maxJointCount;\n this.cameraManager.initial(this.renderer.getWidth(), this.renderer.getHeight());\n this.brdfLUT = this.sceneCache.getBrdfLutTexture();\n this.initGlobalState(opts);\n\n if (this.maxLightCount > 8) {\n console.warn(`Too many light items: ${this.maxLightCount} light(s).`);\n }\n }\n\n private initGlobalState (opts: PSceneOptions) {\n const capbility = this.engine.gpuCapability;\n const globalState = PGlobalState.getInstance();\n\n globalState.reset();\n globalState.isWebGL2 = capbility.level === 2;\n //globalState.shaderShared = composition.env === PLAYER_OPTIONS_ENV_EDITOR;\n globalState.runtimeEnv = opts.runtimeEnv ?? PLAYER_OPTIONS_ENV_EDITOR;\n globalState.compatibleMode = opts.compatibleMode ?? 'gltf';\n globalState.visBoundingBox = opts.visBoundingBox ?? false;\n globalState.renderMode3D = opts.renderMode3D ?? spec.RenderMode3D.none;\n globalState.renderMode3DUVGridSize = opts.renderMode3DUVGridSize ?? 1 / 16;\n }\n\n private clean () {\n this.dispose();\n //\n this.compName = '';\n this.renderer = undefined;\n this.sceneCache = undefined;\n this.itemList = [];\n this.meshList = [];\n\n this.lightManager = new PLightManager();\n this.cameraManager = new PCameraManager();\n this.parentId2Mesh = new Map();\n this.brdfLUT = undefined;\n this.skybox = undefined;\n this.lastTickSecond = -1;\n //\n this.tickCount = 0;\n this.renderedMeshSet = new TwoStatesSet();\n }\n\n /**\n * 销毁,需要销毁各种管理器和创建的 WebGL 资源\n */\n dispose () {\n this.itemList.forEach(item => item.dispose());\n this.itemList = [];\n this.meshList.forEach(mesh => mesh.dispose());\n this.meshList = [];\n this.lightManager.dispose();\n this.cameraManager.dispose();\n this.brdfLUT = undefined;\n this.skybox?.dispose();\n this.skybox = undefined;\n this.renderedMeshSet.clear();\n //\n this.renderer = undefined;\n this.sceneCache = undefined;\n // @ts-expect-error\n this.engine = undefined;\n this.parentId2Mesh.clear();\n }\n\n /**\n * 添加插件元素到场景中\n * @param item - 插件元素\n */\n addItem (item: PMesh | PCamera | PLight | PSkybox) {\n if (item instanceof PMesh) {\n const mesh = item;\n\n if (mesh.parentItemId !== undefined) {\n this.parentId2Mesh.set(mesh.parentItemId, mesh);\n }\n\n addItem(this.meshList, mesh);\n } else if (item instanceof PSkybox) {\n const skybox = item;\n\n skybox.setup(this.brdfLUT);\n if (!this.renderSkybox) {\n // renderable会控制天空盒是否作为背景渲染,来自用户(编辑器)的输入\n // this.renderSkybox是播放时候的控制参数。\n // -- 如果是false,会强制天空不渲染。\n // -- 如果是true,会按照用户设置来渲染天空盒。\n skybox.renderable = false;\n }\n this.skybox = skybox;\n } else if (item instanceof PLight) {\n this.lightManager.insertLight(item);\n } else {\n this.cameraManager.insertCamera(item);\n }\n\n addItem(this.itemList, item);\n }\n\n /**\n * 从场景中删除插件元素\n * @param item - 插件元素\n */\n removeItem (item: PMesh | PCamera | PLight | PSkybox) {\n if (item instanceof PMesh) {\n const mesh = item;\n\n if (mesh.parentItemId !== undefined) {\n this.parentId2Mesh.delete(mesh.parentItemId);\n }\n\n removeItem(this.meshList, mesh);\n } else if (item instanceof PSkybox) {\n this.skybox = undefined;\n } else if (item instanceof PLight) {\n this.lightManager.remove(item);\n } else {\n this.cameraManager.remove(item);\n }\n\n removeItem(this.itemList, item);\n }\n\n /**\n * 更新默认相机状态,根据传入的相机参数\n * @param camera - 相机参数\n */\n updateDefaultCamera (camera: CameraOptionsEx, viewportMatrix: Matrix4) {\n const effectsTransfrom = new Transform({\n ...camera,\n valid: true,\n });\n\n const newTransform = new PTransform().fromEffectsTransform(effectsTransfrom);\n\n this.cameraManager.updateDefaultCamera(\n camera.fov,\n viewportMatrix,\n camera.aspect,\n camera.near,\n camera.far,\n newTransform.getPosition(),\n newTransform.getRotation(),\n camera.clipMode,\n );\n }\n\n /**\n * 更新插件场景,需要更新内部的相关的插件对象,特别是 Mesh 对象的骨骼动画\n * 并将需要渲染的对象添加到渲染对象集合中\n * @param deltaTime - 更新间隔\n */\n tick (deltaTime: number) {\n const deltaSeconds = deltaTime;\n const camera = this.activeCamera;\n const viewMatrix = camera.viewMatrix;\n const projectionMatrix = camera.projectionMatrix;\n const viewProjectionMatrix = projectionMatrix.clone().multiply(viewMatrix);\n\n this.sceneStates = {\n deltaSeconds: deltaSeconds,\n //\n camera: camera,\n cameraPosition: camera.getEye(),\n viewMatrix: viewMatrix,\n projectionMatrix: projectionMatrix,\n viewProjectionMatrix: viewProjectionMatrix,\n winSize: camera.getSize(),\n sceneRadius: 1.0,\n //\n lightList: this.lightManager.lightList,\n maxLightCount: this.maxLightCount,\n maxJointCount: this.maxJointCount,\n skybox: this.skybox,\n };\n\n if (this.enableDynamicSort) {\n this.dynamicSortMeshes(this.sceneStates);\n }\n\n this.tickCount += 1;\n this.lastTickSecond += deltaSeconds;\n }\n\n /**\n * 动态调整 Mesh 渲染优先级\n * 主要是为了和 Tiny 渲染对齐,正常渲染不进行调整\n * @param states - 场景中的状态数据\n */\n dynamicSortMeshes (states: PSceneStates) {\n const meshComponents: ModelMeshComponent[] = [];\n const priorityList: number[] = [];\n\n this.meshList.forEach(mesh => {\n if (mesh.owner && mesh.owner.enabled) {\n const component = mesh.owner;\n\n meshComponents.push(component);\n priorityList.push(component.priority);\n }\n });\n\n priorityList.sort((a, b) => a - b);\n\n // 按照 Tiny 排序算法,对 Mesh 对象进行排序\n // 将透明和不透明物体拆开,从而渲染正确\n const viewMatrix = states.viewMatrix;\n\n meshComponents.sort((a: ModelMeshComponent, b: ModelMeshComponent) => {\n const atransparent = WebGLHelper.isTransparentMesh(a);\n const btransparent = WebGLHelper.isTransparentMesh(b);\n\n if (atransparent && btransparent) {\n const aposition = a.transform.getWorldPosition();\n const bposition = b.transform.getWorldPosition();\n const anewPos = viewMatrix.transformPoint(aposition);\n const bnewPos = viewMatrix.transformPoint(bposition);\n\n if (anewPos.z === bnewPos.z) { return a.priority - b.priority; } else { return anewPos.z - bnewPos.z; }\n } else if (atransparent) {\n return 1;\n } else if (btransparent) {\n return -1;\n } else {\n return a.priority - b.priority;\n }\n });\n\n let prePriority = -99999;\n\n // 重新赋值渲染优先级\n for (let i = 0; i < meshComponents.length; i++) {\n const mesh = meshComponents[i];\n const priority = priorityList[i];\n\n if (prePriority < priority) {\n prePriority = priority;\n mesh.priority = priority;\n } else {\n prePriority += 0.1;\n mesh.priority = prePriority;\n }\n }\n }\n\n /**\n * 查询场景中的 Mesh\n * 通过 parentId 查询 Mesh 对象,可能找不到 Mesh 对象\n * @param parentId - Item 中定义的 parentId\n * @returns 查询到的 PMesh,或者是没找到。如果 Mesh 不可见,也是没找到。\n */\n queryMesh (parentId: string): PMesh | undefined {\n const mesh = this.parentId2Mesh.get(parentId);\n\n if (mesh === undefined || !mesh.visible) {\n return;\n }\n\n return mesh;\n }\n\n /**\n * 获取场景的包围盒\n * @param box - 包围盒\n * @returns 场景的包围盒\n */\n getSceneAABB (box?: Box3): Box3 {\n const sceneBox = box ?? new Box3();\n\n this.itemList.forEach(item => {\n if (item.type === PObjectType.mesh) {\n const mesh = item as PMesh;\n\n if (mesh.owner) {\n const transform = mesh.owner.item.getWorldTransform();\n const worldMatrix = transform.getWorldMatrix();\n const meshBox = mesh.computeBoundingBox(worldMatrix);\n\n meshBox.applyMatrix4(worldMatrix);\n sceneBox.union(meshBox);\n } else {\n sceneBox.union(mesh.computeBoundingBox(Matrix4.fromIdentity()));\n }\n }\n });\n\n return sceneBox;\n }\n\n printDebugInfo () {\n console.info('@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@');\n console.info('@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@');\n this.meshList.forEach((mesh, index) => {\n console.info('Mesh: ', index, mesh);\n });\n this.cameraManager.getCameraList().forEach((cam, index) => {\n console.info('Camera: ', index, cam);\n });\n console.info('Default Camera: ', this.cameraManager.getDefaultCamera());\n this.lightManager.lightList.forEach((light, index) => {\n console.info('Light: ', index, light);\n });\n console.info('@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@');\n console.info('@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@');\n }\n\n /**\n * 获取渲染器\n * @returns\n */\n getRenderer (): Renderer {\n return this.renderer as Renderer;\n }\n\n /**\n * 获取场景中缓存\n * @returns\n */\n getSceneCache (): CompositionCache {\n return this.sceneCache as CompositionCache;\n }\n\n /**\n * 获取激活的相机\n */\n get activeCamera (): PCamera {\n return this.cameraManager.getActiveCamera();\n }\n\n /**\n * 获取灯光数目\n */\n get lightCount (): number {\n return this.lightManager.lightCount;\n }\n\n /**\n * 获取着色器灯光数目,最小是 10\n */\n get shaderLightCount (): number {\n return Math.min(10, this.lightManager.lightCount);\n }\n}\n\n","import {\n spec, generateGUID, Downloader, TextureSourceType, getStandardJSON, glContext,\n glType2VertexFormatType, isObject,\n} from '@galacean/effects';\nimport type {\n Engine, Renderer, JSONValue, TextureCubeSourceOptions, GeometryProps,\n} from '@galacean/effects';\nimport { deserializeGeometry, typedArrayFromBinary } from '@galacean/effects-helper';\nimport { PBRShaderGUID, UnlitShaderGUID, Color, Quaternion, Vector3 } from '../runtime';\nimport type { ModelTreeContent } from '../index';\n\nexport class JSONConverter {\n newScene: spec.JSONScene;\n\n engine: Engine;\n downloader: Downloader;\n treeInfo = new TreeInfo();\n\n constructor (\n public renderer: Renderer,\n public keepIBLData = true,\n ) {\n this.engine = renderer.engine;\n this.downloader = new Downloader();\n }\n\n async processScene (sceneData: string | Record<string | symbol, unknown>) {\n const sceneJSON = isObject(sceneData) ? sceneData : await this.loadJSON(sceneData);\n\n //@ts-expect-error\n if (!sceneJSON.textures) {\n //@ts-expect-error\n sceneJSON.textures = [];\n }\n //@ts-expect-error\n sceneJSON.textures.forEach(tex => {\n if (tex.source === undefined) {\n tex.source = 0;\n }\n });\n\n const oldScene = getStandardJSON(sceneJSON);\n const oldBinUrls = oldScene.bins ?? [];\n const binFiles: ArrayBuffer[] = [];\n\n if (oldScene.bins) {\n for (const bin of oldScene.bins) {\n binFiles.push(await this.loadBins(bin.url));\n }\n }\n // @ts-expect-error\n oldScene.bins = binFiles;\n\n const newScene: spec.JSONScene = {\n ...oldScene,\n version: '3.0',\n playerVersion: {\n web: '3.0',\n native: '3.0',\n },\n type: 'ge',\n compositions: [],\n images: [],\n textures: [],\n items: [],\n components: [],\n materials: [],\n shaders: [],\n geometries: [],\n };\n\n this.setImage(newScene, oldScene);\n await this.setTexture(newScene, oldScene);\n this.setComponent(newScene, oldScene);\n this.setItem(newScene, oldScene);\n this.setComposition(newScene, oldScene);\n\n newScene.bins = oldBinUrls;\n\n return newScene;\n }\n\n setImage (newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n const newImages: spec.Image[] = [];\n\n oldScene.images.forEach(image => {\n newImages.push(image);\n });\n\n newScene.images = newImages;\n }\n\n async setTexture (newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n const newTextures: spec.TextureDefine[] = [];\n const bins = oldScene.bins as unknown as ArrayBuffer[];\n\n if (oldScene.textures) {\n for (const tex of oldScene.textures as spec.SerializedTextureCube[]) {\n if (tex.target === 34067) {\n if (this.keepIBLData) {\n newTextures.push(tex);\n } else {\n const { mipmaps, target } = tex;\n const jobs = mipmaps.map(mipmap => Promise.all(mipmap.map(pointer => this.loadMipmapImage(pointer, bins))));\n const loadedMipmaps = await Promise.all(jobs);\n\n const newMipmaps = loadedMipmaps.map(mipmaps => mipmaps.map(img => {\n const id = generateGUID();\n const sceneImage: spec.Image = {\n url: img,\n id,\n };\n\n newScene.images.push(sceneImage);\n const dataPath: spec.DataPath = { id };\n\n return dataPath;\n }));\n\n const newTex = {\n keepImageSource: false,\n ...tex,\n ...{\n mipmaps: newMipmaps,\n sourceFrom: {\n target,\n type: TextureSourceType.mipmaps,\n mipmaps: mipmaps.map(mipmap => mipmap.map(pointer => [pointer[1][1], pointer[1][2]])),\n },\n } as TextureCubeSourceOptions,\n };\n\n // @ts-expect-error\n newTextures.push(newTex);\n }\n } else {\n // @ts-expect-error\n const source = tex.source as any;\n\n if (typeof source === 'number') {\n // @ts-expect-error\n tex.source = { id: newScene.images[source].id };\n }\n newTextures.push(tex);\n }\n }\n }\n\n newScene.textures = newTextures;\n }\n\n setComponent (newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n const newComponents = newScene.components;\n\n for (const comp of oldScene.components) {\n if (comp.dataType === spec.DataType.SkyboxComponent) {\n newComponents.push(this.createSkyboxComponent(comp, newScene));\n } else if (comp.dataType === spec.DataType.LightComponent) {\n newComponents.push(this.createLightComponent(comp, newScene));\n } else if (comp.dataType === spec.DataType.CameraComponent) {\n newComponents.push(comp);\n console.warn(`Camera component found: ${comp}.`);\n } else if (comp.dataType === spec.DataType.TreeComponent) {\n const treeComp = comp as unknown as ModelTreeContent;\n\n this.createItemsFromTreeComponent(comp, newScene, oldScene);\n treeComp.options.tree.animation = undefined;\n treeComp.options.tree.animations = undefined;\n newComponents.push(comp);\n } else if (comp.dataType !== spec.DataType.MeshComponent) {\n newComponents.push(comp);\n }\n }\n\n for (const comp of oldScene.components) {\n if (comp.dataType === spec.DataType.MeshComponent) {\n newComponents.push(this.createMeshComponent(comp, newScene, oldScene));\n }\n }\n }\n\n setItem (newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n\n }\n\n setComposition (newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n newScene.items = oldScene.items;\n newScene.items.push(...this.treeInfo.getAllTreeNodeList());\n newScene.compositionId = oldScene.compositionId;\n newScene.compositions = oldScene.compositions;\n\n newScene.items.forEach(item => {\n if (item.type === 'root' as spec.ItemType) {\n item.type = 'ECS' as spec.ItemType;\n }\n });\n\n newScene.compositions[0].items = newScene.items.map(item => {\n return { id: item.id } as spec.DataPath;\n });\n }\n\n private async loadJSON (url: string) {\n return new Promise<JSONValue>((resolve, reject) => {\n this.downloader.downloadJSON(\n url,\n resolve,\n (status, responseText) => {\n reject(new Error(`Failed to load JSON from URL '${url}': status ${status} - ${responseText}. Please check the URL or network settings.`));\n });\n });\n }\n\n private async loadBins (url: string) {\n return new Promise<ArrayBuffer>((resolve, reject) => {\n this.downloader.downloadBinary(\n url,\n resolve,\n (status, responseText) => {\n reject(`Couldn't load bins ${JSON.stringify(url)}: status ${status}, ${responseText}`);\n });\n });\n }\n\n private async loadMipmapImage (pointer: spec.BinaryPointer, bins: ArrayBuffer[]) {\n const [index, start, length] = pointer[1];\n const bin = bins[index];\n\n if (!bin) {\n throw new Error(`Invalid bin pointer: ${JSON.stringify(pointer)}.`);\n }\n\n return URL.createObjectURL((new Blob([new Uint8Array(bin, start, length)])));\n }\n\n private createSkyboxComponent (component: spec.ComponentData, scene: spec.JSONScene): spec.SkyboxComponentData {\n const skyboxOptions = (component as unknown as spec.SkyboxContent<'json'>).options;\n let irradianceCoeffs;\n\n if (skyboxOptions.irradianceCoeffs) {\n irradianceCoeffs = [];\n skyboxOptions.irradianceCoeffs.forEach(coeffs => irradianceCoeffs.push(...coeffs));\n }\n\n let diffuseImage;\n\n if (skyboxOptions.diffuseImage) {\n // @ts-expect-error\n diffuseImage = { id: scene.textures[skyboxOptions.diffuseImage].id } as spec.DataPath;\n }\n\n const skyboxComponent: spec.SkyboxComponentData = {\n id: component.id,\n dataType: component.dataType,\n item: component.item,\n renderable: skyboxOptions.renderable,\n intensity: skyboxOptions.intensity,\n reflectionsIntensity: skyboxOptions.reflectionsIntensity,\n irradianceCoeffs: irradianceCoeffs,\n diffuseImage,\n specularImage: {\n // @ts-expect-error\n id: scene.textures[skyboxOptions.specularImage].id,\n },\n specularImageSize: skyboxOptions.specularImageSize,\n specularMipCount: skyboxOptions.specularMipCount + 1,\n };\n\n return skyboxComponent;\n }\n\n private createMeshComponent (component: spec.ComponentData, newScene: spec.JSONScene, oldScene: spec.JSONScene): spec.ModelMeshComponentData {\n const meshOptions = (component as unknown as spec.ModelMeshItemContent<'json'>).options;\n\n const geometryPropsList: GeometryProps[] = [];\n const materialDatas: spec.MaterialData[] = [];\n\n meshOptions.primitives.forEach(prim => {\n const geomProps = deserializeGeometry(prim.geometry, oldScene.bins as unknown as ArrayBuffer[]);\n const material = this.getMaterialData(prim.material, oldScene);\n\n if (geomProps.indices?.data instanceof Uint8Array) {\n const oldIndices = geomProps.indices.data;\n const newIndices = new Uint16Array(oldIndices.length);\n\n for (let i = 0; i < oldIndices.length; i++) {\n newIndices[i] = oldIndices[i];\n }\n\n geomProps.indices.data = newIndices;\n }\n\n geometryPropsList.push(geomProps);\n materialDatas.push(material);\n });\n\n const geometryData = getGeometryDataFromPropsList(geometryPropsList);\n\n if (!geometryData) {\n throw new Error('No primitives available to process.');\n }\n\n newScene.geometries.push(geometryData);\n newScene.materials.push(...materialDatas);\n\n const meshComponent: spec.ModelMeshComponentData = {\n id: component.id,\n dataType: component.dataType,\n item: component.item,\n geometry: { id: geometryData.id },\n materials: materialDatas.map(mat => {\n const data: spec.DataPath = {\n id: mat.id,\n };\n\n return data;\n }),\n };\n\n if (meshOptions.skin) {\n let parentItemId = component.item.id;\n\n for (const item of oldScene.items) {\n if (item.id === component.item.id) {\n parentItemId = item.parentId as string;\n }\n }\n\n if (parentItemId === component.item.id) {\n throw new Error(`Can't item ${component.item}.`);\n }\n\n const treeItem = this.treeInfo.getTreeItemByNodeId(parentItemId);\n const treeNodeList = this.treeInfo.getTreeNodeListByNodeId(parentItemId);\n\n if (!treeItem || !treeNodeList) {\n throw new Error(`Failed to retrieve tree node list for item with ID ${component.item.id}. Ensure the item exists and has a valid tree structure.`);\n }\n const rootBoneItem = this.setupBoneData(geometryData, meshOptions.skin, oldScene, treeItem, treeNodeList);\n\n meshComponent.rootBone = { id: rootBoneItem.id };\n }\n\n if (meshOptions.weights !== undefined) {\n meshComponent.morph = {\n weights: meshOptions.weights,\n };\n }\n\n return meshComponent;\n }\n\n private createItemsFromTreeComponent (component: spec.ComponentData, newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n let treeItem = oldScene.items[0];\n\n oldScene.items.forEach(item => {\n if (item.id === component.item.id) {\n treeItem = item;\n }\n });\n\n const treeComp = component as unknown as ModelTreeContent;\n const treeData = treeComp.options.tree;\n const treeNodeList: spec.VFXItemData[] = [];\n\n treeData.nodes.forEach((node, index) => {\n const item: spec.VFXItemData = {\n id: generateGUID(),\n parentId: treeItem.id,\n name: node.name ?? `node${index}`,\n duration: treeItem.duration,\n // @ts-expect-error\n type: 'ECS',\n dataType: spec.DataType.VFXItemData,\n visible: treeItem.visible,\n endBehavior: treeItem.endBehavior,\n delay: treeItem.delay,\n content: {},\n renderLevel: treeItem.renderLevel,\n pn: treeItem.pn,\n pluginName: treeItem.pluginName,\n transform: this.getTransformData(node.transform),\n components: [],\n };\n\n treeNodeList.push(item);\n newScene.items.push(item);\n });\n\n treeData.nodes.forEach((node, index) => {\n const item = treeNodeList[index];\n\n node.children?.forEach(child => {\n const childItem = treeNodeList[child];\n\n childItem.parentId = item.id;\n });\n });\n\n oldScene.items.forEach(item => {\n if (item.parentId) {\n const index = item.parentId.indexOf('^');\n\n if (index >= 0) {\n const parentId = item.parentId.substring(0, index);\n const subIndex = +item.parentId.substring(index + 1);\n\n if (parentId === treeItem.id) {\n item.parentId = treeNodeList[subIndex].id;\n }\n }\n }\n });\n\n this.treeInfo.add(treeItem, treeNodeList);\n\n this.createAnimationComponent(treeData as any, treeItem, newScene, oldScene);\n }\n\n private createLightComponent (component: spec.ComponentData, scene: spec.JSONScene): spec.ModelLightComponentData {\n const lightOptions = (component as unknown as spec.ModelLightContent).options;\n\n const lightComponent: spec.ModelLightComponentData = {\n id: component.id,\n dataType: component.dataType,\n item: component.item,\n lightType: lightOptions.lightType as spec.LightType,\n color: {\n r: lightOptions.color[0] / 255.0,\n g: lightOptions.color[1] / 255.0,\n b: lightOptions.color[2] / 255.0,\n a: lightOptions.color[3] / 255.0,\n },\n intensity: lightOptions.intensity,\n };\n\n if (lightOptions.lightType === 'point') {\n lightComponent.range = lightOptions.range;\n } else if (lightOptions.lightType === 'spot') {\n lightComponent.range = lightOptions.range;\n lightComponent.innerConeAngle = lightOptions.innerConeAngle;\n lightComponent.outerConeAngle = lightOptions.outerConeAngle;\n }\n\n return lightComponent;\n }\n\n private createAnimationComponent (treeOptions: spec.ModelTreeOptions<'json'>, treeItem: spec.VFXItemData, newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n const { animation, animations } = treeOptions;\n\n const animationComponent: spec.AnimationComponentData = {\n id: generateGUID(),\n dataType: spec.DataType.AnimationComponent,\n item: { id: treeItem.id },\n animation,\n animationClips: [],\n };\n\n if (animations && animations.length) {\n // FIXME: calcuate tree item duration\n const bins = oldScene.bins as unknown as ArrayBuffer[];\n\n animations.forEach(anim => {\n const clipData: spec.AnimationClipData = {\n id: generateGUID(),\n name: anim.name,\n dataType: spec.DataType.AnimationClip,\n positionCurves: [],\n rotationCurves: [],\n scaleCurves: [],\n floatCurves: [],\n };\n\n let totalAnimationTime = 0;\n\n anim.tracks.forEach(track => {\n const inputArray = typedArrayFromBinary(bins, track.input) as Float32Array;\n\n totalAnimationTime = Math.max(totalAnimationTime, inputArray[inputArray.length - 1]);\n });\n\n anim.tracks.forEach(track => {\n const inputArray = typedArrayFromBinary(bins, track.input);\n const outputArray = typedArrayFromBinary(bins, track.output) as Float32Array;\n\n if (!(inputArray instanceof Float32Array)) {\n throw new Error(`Type of inputArray should be float32, ${inputArray}.`);\n }\n if (!(outputArray instanceof Float32Array)) {\n throw new Error(`Type of outputArray should be float32, ${outputArray}.`);\n }\n if (track.interpolation !== 'LINEAR') {\n throw new Error(`Invalid interpolation type ${track.interpolation}.`);\n }\n\n if (track.path === 'rotation') {\n const points: spec.vec4[] = [];\n const controlPoints: spec.vec4[] = [];\n const lineValue: spec.LineKeyframeValue[] = [];\n\n for (let i = 0; i < inputArray.length; i++) {\n points.push([\n outputArray[i * 4],\n outputArray[i * 4 + 1],\n outputArray[i * 4 + 2],\n outputArray[i * 4 + 3],\n ]);\n\n if (i > 0) {\n const p0 = Quaternion.fromArray(points[i - 1]);\n const p3 = Quaternion.fromArray(points[i]);\n const p1 = new Quaternion();\n const p2 = new Quaternion();\n\n p1.slerpQuaternions(p0, p3, 1 / 3);\n p2.slerpQuaternions(p0, p3, 2 / 3);\n\n controlPoints.push(p1.toArray());\n controlPoints.push(p2.toArray());\n }\n\n lineValue.push([\n spec.BezierKeyframeType.LINE,\n [inputArray[i], i],\n ]);\n }\n\n const node = this.treeInfo.getTreeNode(treeItem.id, track.node);\n const path = this.treeInfo.getNodePath(node.id);\n\n const keyFrames: spec.BezierCurveQuat = [\n spec.ValueType.BEZIER_CURVE_QUAT,\n [lineValue, points, controlPoints],\n ];\n\n clipData.rotationCurves.push({ path, keyFrames });\n } else if (track.path === 'weights') {\n const node = this.treeInfo.getTreeNode(treeItem.id, track.node);\n let path = this.treeInfo.getNodePath(node.id);\n\n if (node.components.length === 0) {\n for (let i = 0; i < oldScene.items.length; i++) {\n const child = oldScene.items[i];\n\n if (child.parentId === node.id) {\n path += '/' + child.name;\n\n break;\n }\n }\n }\n const component = outputArray.length / inputArray.length;\n\n for (let c = 0; c < component; c++) {\n const lineValue: spec.LineKeyframeValue[] = [];\n\n for (let i = 0; i < inputArray.length; i++) {\n lineValue.push([\n spec.BezierKeyframeType.LINE,\n [inputArray[i], outputArray[i * component + c]],\n ]);\n }\n\n const keyFrames: spec.BezierValue = [\n spec.ValueType.BEZIER_CURVE,\n lineValue,\n ];\n\n clipData.floatCurves.push({\n path,\n className: 'ModelMeshComponent',\n property: `morphWeights.${c}`,\n keyFrames,\n });\n }\n } else {\n const points: spec.vec3[] = [];\n const controlPoints: spec.vec3[] = [];\n const lineValue: spec.LineKeyframeValue[] = [];\n\n for (let i = 0; i < inputArray.length; i++) {\n points.push([\n outputArray[i * 3],\n outputArray[i * 3 + 1],\n outputArray[i * 3 + 2],\n ]);\n\n if (i > 0) {\n const p0 = Vector3.fromArray(points[i - 1]);\n const p3 = Vector3.fromArray(points[i]);\n const p1 = new Vector3().lerpVectors(p0, p3, 1 / 3);\n const p2 = new Vector3().lerpVectors(p0, p3, 2 / 3);\n\n controlPoints.push(p1.toArray());\n controlPoints.push(p2.toArray());\n }\n\n lineValue.push([\n spec.BezierKeyframeType.LINE,\n [inputArray[i], i],\n ]);\n }\n\n const node = this.treeInfo.getTreeNode(treeItem.id, track.node);\n const path = this.treeInfo.getNodePath(node.id);\n\n const keyFrames: spec.BezierCurvePath = [\n spec.ValueType.BEZIER_CURVE_PATH,\n [lineValue, points, controlPoints],\n ];\n\n if (track.path === 'translation') {\n clipData.positionCurves.push({ path, keyFrames });\n } else {\n clipData.scaleCurves.push({ path, keyFrames });\n }\n }\n });\n\n newScene.animations.push(clipData);\n\n animationComponent.animationClips.push({ id: clipData.id });\n });\n }\n\n treeItem.components.push({ id: animationComponent.id });\n newScene.components.push(animationComponent);\n }\n\n private getMaterialData (material: spec.MaterialOptions<'json'>, scene: spec.JSONScene) {\n if (material.type === spec.MaterialType.unlit) {\n const floats: Record<string, number> = {};\n\n if (material.alphaCutOff !== undefined) {\n floats['_AlphaCutoff'] = material.alphaCutOff;\n }\n const colors: Record<string, Color> = {\n '_BaseColorFactor': new Color(\n material.baseColorFactor[0],\n material.baseColorFactor[1],\n material.baseColorFactor[2],\n material.baseColorFactor[3],\n ).divide(255),\n };\n\n const textures: Record<string, spec.MaterialTextureProperty> = {};\n\n if (material.baseColorTexture) {\n textures['_BaseColorSampler'] = this.getTextureData(scene, floats, material.baseColorTexture, material.baseColorTextureTransform);\n }\n\n const newMaterial: spec.MaterialData = {\n id: generateGUID(),\n name: material.name,\n dataType: spec.DataType.Material,\n shader: {\n id: UnlitShaderGUID,\n },\n stringTags: {},\n macros: [],\n ints: {},\n floats,\n vector4s: {},\n colors,\n textures,\n };\n\n this.setupMaterial(material, newMaterial);\n\n return newMaterial;\n } else {\n const floats: Record<string, number> = {\n '_MetallicFactor': material.metallicFactor,\n '_RoughnessFactor': material.roughnessFactor,\n };\n\n if (material.useSpecularAA !== undefined) {\n floats['_SpecularAA'] = material.useSpecularAA ? 1 : 0;\n }\n if (material.normalTextureScale !== undefined) {\n floats['_NormalScale'] = material.normalTextureScale;\n }\n if (material.occlusionTextureStrength !== undefined) {\n floats['_OcclusionStrength'] = material.occlusionTextureStrength;\n }\n if (material.emissiveIntensity !== undefined) {\n floats['_EmissiveIntensity'] = material.emissiveIntensity;\n }\n if (material.alphaCutOff !== undefined) {\n floats['_AlphaCutoff'] = material.alphaCutOff;\n }\n const colors: Record<string, Color> = {\n '_BaseColorFactor': new Color(\n material.baseColorFactor[0],\n material.baseColorFactor[1],\n material.baseColorFactor[2],\n material.baseColorFactor[3],\n ).divide(255),\n '_EmissiveFactor': new Color(\n material.emissiveFactor[0],\n material.emissiveFactor[1],\n material.emissiveFactor[2],\n material.emissiveFactor[3],\n ).divide(255),\n };\n\n const textures: Record<string, spec.MaterialTextureProperty> = {};\n\n if (material.baseColorTexture) {\n textures['_BaseColorSampler'] = this.getTextureData(scene, floats, material.baseColorTexture, material.baseColorTextureTransform);\n }\n\n if (material.metallicRoughnessTexture) {\n textures['_MetallicRoughnessSampler'] = this.getTextureData(scene, floats, material.metallicRoughnessTexture, material.metallicRoughnessTextureTransform);\n }\n\n if (material.normalTexture) {\n textures['_NormalSampler'] = this.getTextureData(scene, floats, material.normalTexture, material.normalTextureTransform);\n }\n\n if (material.occlusionTexture) {\n textures['_OcclusionSampler'] = this.getTextureData(scene, floats, material.occlusionTexture, material.occlusionTextureTransform);\n }\n\n if (material.emissiveTexture) {\n textures['_EmissiveSampler'] = this.getTextureData(scene, floats, material.emissiveTexture, material.emissiveTextureTransform);\n }\n\n const newMaterial: spec.MaterialData = {\n id: generateGUID(),\n name: material.name,\n dataType: spec.DataType.Material,\n shader: {\n id: PBRShaderGUID,\n },\n stringTags: {},\n macros: [],\n ints: {},\n floats,\n vector4s: {},\n colors,\n textures,\n };\n\n this.setupMaterial(material, newMaterial);\n\n return newMaterial;\n }\n }\n\n private setupMaterial (oldMat: spec.MaterialOptions<'json'>, newMat: spec.MaterialData) {\n if (oldMat.blending === spec.MaterialBlending.translucent) {\n newMat.stringTags['RenderType'] = spec.RenderType.Transparent;\n } else {\n newMat.stringTags['RenderType'] = spec.RenderType.Opaque;\n }\n\n if (oldMat.blending === spec.MaterialBlending.masked) {\n newMat.floats['AlphaClip'] = 1;\n newMat.floats['_AlphaCutoff'] = oldMat.alphaCutOff ?? 0;\n } else {\n newMat.floats['AlphaClip'] = 0;\n }\n\n switch (oldMat.side) {\n case spec.SideMode.BACK:\n newMat.stringTags['RenderFace'] = spec.RenderFace.Back;\n\n break;\n case spec.SideMode.DOUBLE:\n newMat.stringTags['RenderFace'] = spec.RenderFace.Both;\n\n break;\n default:\n newMat.stringTags['RenderFace'] = spec.RenderFace.Front;\n }\n\n if (oldMat.type === spec.MaterialType.pbr) {\n newMat.floats['_SpecularAA'] = oldMat.useSpecularAA ? 1 : 0;\n }\n\n newMat.floats['ZWrite'] = oldMat.depthMask !== false ? 1 : 0;\n newMat.floats['ZTest'] = 1;\n }\n\n private getTextureData (scene: spec.JSONScene, floats: Record<string, number>, texIndex: number, texTransform?: spec.ModelTextureTransform) {\n const id = scene.textures![texIndex].id ?? '0';\n const texProperty: spec.MaterialTextureProperty = {\n texture: { id },\n };\n\n if (texTransform) {\n if (texTransform.scale) {\n texProperty.scale = {\n x: texTransform.scale[0],\n y: texTransform.scale[1],\n };\n }\n if (texTransform.offset) {\n texProperty.offset = {\n x: texTransform.offset[0],\n y: texTransform.offset[1],\n };\n }\n if (texTransform.rotation) {\n floats['_BaseColorRotation'] = texTransform.rotation;\n }\n }\n\n return texProperty;\n }\n\n private getTransformData (transform?: spec.BaseItemTransform) {\n const result: spec.TransformData = {\n position: { x: 0, y: 0, z: 0 },\n eulerHint: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n };\n\n if (transform?.position) {\n result.position.x = transform.position[0];\n result.position.y = transform.position[1];\n result.position.z = transform.position[2];\n }\n\n if (transform?.quat) {\n // @ts-expect-error\n result.quat = {};\n // @ts-expect-error\n result.quat.x = transform.quat[0];\n // @ts-expect-error\n result.quat.y = transform.quat[1];\n // @ts-expect-error\n result.quat.z = transform.quat[2];\n // @ts-expect-error\n result.quat.w = transform.quat[3];\n } else if (transform?.rotation) {\n result.eulerHint.x = transform.rotation[0];\n result.eulerHint.y = transform.rotation[1];\n result.eulerHint.z = transform.rotation[2];\n }\n\n if (transform?.scale) {\n result.scale.x = transform.scale[0];\n result.scale.y = transform.scale[1];\n result.scale.z = transform.scale[2];\n }\n\n return result;\n }\n\n private setupBoneData (geom: spec.GeometryData, skin: spec.SkinOptions<'json'>, oldScene: spec.JSONScene, treeItem: spec.VFXItemData, treeNodeList: spec.VFXItemData[]) {\n const bins = oldScene.bins as unknown as ArrayBuffer[];\n const { joints, skeleton, inverseBindMatrices } = skin;\n\n if (!inverseBindMatrices) {\n throw new Error(`'inverseBindMatrices' is undefined for the skin configuration: ${JSON.stringify(skin)}. Ensure 'inverseBindMatrices' is properly defined in your skin data.`);\n }\n const bindMatrixArray = typedArrayFromBinary(bins, inverseBindMatrices) as Float32Array;\n\n geom.inverseBindMatrices = Array.from(bindMatrixArray);\n\n const id2Node: Record<string, spec.VFXItemData> = {};\n\n let rootBoneItem = treeItem;\n\n if (skeleton !== undefined) {\n rootBoneItem = treeNodeList[skeleton];\n } else {\n console.warn('Root bone is missing for the skeleton. Defaulting to the primary tree item as the root bone.');\n }\n\n joints.forEach(joint => {\n const node = treeNodeList[joint];\n\n if (node !== rootBoneItem && node.parentId === rootBoneItem.parentId) {\n console.error('Invalid node detected for \\'rootBoneItem\\'. Adjusting \\'rootBoneItem\\' to the primary tree item. Please verify the tree structure.');\n\n rootBoneItem = treeItem;\n }\n });\n\n treeNodeList.forEach(node => {\n id2Node[node.id] = node;\n });\n\n geom.rootBoneName = rootBoneItem.name;\n\n const boneNames: string[] = [];\n\n joints.forEach(joint => {\n let currentItem = treeNodeList[joint];\n const nodeList: string[] = [];\n\n while (currentItem && currentItem != rootBoneItem) {\n nodeList.push(currentItem.name);\n if (currentItem.parentId) {\n currentItem = id2Node[currentItem.parentId];\n } else {\n break;\n }\n }\n\n boneNames.push(nodeList.reverse().join('/'));\n });\n\n geom.boneNames = boneNames;\n\n return rootBoneItem;\n }\n}\n\nclass TreeInfo {\n tree2NodeList: Record<string, spec.VFXItemData[]> = {};\n nodeList2Tree: Record<string, spec.VFXItemData> = {};\n nodeId2Node: Record<string, spec.VFXItemData> = {};\n node2Path: Record<string, string> = {};\n\n add (treeItem: spec.VFXItemData, treeNodeList: spec.VFXItemData[]) {\n if (this.tree2NodeList[treeItem.id]) {\n throw new Error(`Duplicate treeItem ID detected: ${treeItem.id}. Ensure each tree item has a unique ID.`);\n }\n\n this.tree2NodeList[treeItem.id] = treeNodeList;\n treeNodeList.forEach(node => {\n if (this.nodeList2Tree[node.id]) {\n throw new Error(`Duplicate tree node ID found: ${node.id}. Each node in the tree must have a unique ID.`);\n }\n this.nodeList2Tree[node.id] = treeItem;\n this.nodeId2Node[node.id] = node;\n });\n\n treeNodeList.forEach(node => {\n this.setNodePath(node);\n });\n }\n\n setNodePath (node: spec.VFXItemData) {\n if (node.parentId) {\n if (this.node2Path[node.parentId]) {\n this.node2Path[node.id] = this.node2Path[node.parentId] + '/' + node.name;\n } else if (this.nodeId2Node[node.parentId]) {\n this.setNodePath(this.nodeId2Node[node.parentId]);\n this.node2Path[node.id] = this.node2Path[node.parentId] + '/' + node.name;\n } else {\n this.node2Path[node.id] = node.name;\n }\n } else {\n this.node2Path[node.id] = node.name;\n }\n }\n\n getTreeNodeListByTreeId (id: string) {\n return this.tree2NodeList[id];\n }\n\n getTreeNodeListByNodeId (id: string) {\n const treeItem = this.nodeList2Tree[id];\n\n if (!treeItem) {\n throw new Error(`Invalid id ${id}.`);\n }\n\n return this.getTreeNodeListByTreeId(treeItem.id);\n }\n\n getTreeItemByNodeId (id: string) {\n return this.nodeList2Tree[id];\n }\n\n getTreeNode (treeId: string, nodeIndex: number) {\n const nodeList = this.getTreeNodeListByTreeId(treeId);\n\n return nodeList[nodeIndex];\n }\n\n getAllTreeNodeList () {\n const nodeList: spec.VFXItemData[] = [];\n\n Object.keys(this.tree2NodeList).forEach(key => {\n nodeList.push(...this.tree2NodeList[key]);\n });\n\n return nodeList;\n }\n\n getNodePath (id: string) {\n return this.node2Path[id];\n }\n}\n\nexport interface ModelData {\n vertices: spec.TypedArray,\n uvs: spec.TypedArray,\n normals: spec.TypedArray,\n indices: spec.TypedArray,\n name: string,\n}\n\nexport function getGeometryDataFromOptions (geomOptions: GeometryProps) {\n let vertexCount = 0;\n let verticesType: spec.VertexFormatType = spec.VertexFormatType.Float32;\n let verticesNormalize = false;\n let uvsType: spec.VertexFormatType = spec.VertexFormatType.Float32;\n let uvsNormalize = false;\n let normalsType: spec.VertexFormatType = spec.VertexFormatType.Float32;\n let normalsNormalize = false;\n const modelData: ModelData = {\n vertices: new Float32Array(),\n uvs: new Float32Array(),\n normals: new Float32Array(),\n indices: new Float32Array(),\n name: geomOptions.name ?? '<empty>',\n };\n\n for (const attrib in geomOptions.attributes) {\n const attribData = geomOptions.attributes[attrib];\n\n if (attrib === 'aPosition') {\n // @ts-expect-error\n vertexCount = attribData.data.length / attribData.size;\n // @ts-expect-error\n modelData.vertices = attribData.data;\n verticesNormalize = attribData.normalize ?? false;\n verticesType = glType2VertexFormatType(attribData.type ?? glContext.FLOAT);\n } else if (attrib === 'aNormal') {\n // @ts-expect-error\n modelData.normals = attribData.data;\n normalsNormalize = attribData.normalize ?? false;\n normalsType = glType2VertexFormatType(attribData.type ?? glContext.FLOAT);\n } else if (attrib === 'aUV1') {\n // @ts-expect-error\n modelData.uvs = attribData.data;\n uvsNormalize = attribData.normalize ?? false;\n uvsType = glType2VertexFormatType(attribData.type ?? glContext.FLOAT);\n }\n }\n\n const verticesOffset = getOffset(verticesType, 3, vertexCount);\n const uvsOffset = getOffset(uvsType, 2, vertexCount);\n const normalsOffset = getOffset(normalsType, 3, vertexCount);\n\n if (geomOptions.indices) {\n modelData.indices = geomOptions.indices.data;\n } else if (vertexCount <= 65535) {\n const indices = new Uint16Array(vertexCount);\n\n for (let i = 0; i < vertexCount; i++) {\n indices[i] = i;\n }\n modelData.indices = indices;\n } else {\n const indices = new Uint32Array(vertexCount);\n\n for (let i = 0; i < vertexCount; i++) {\n indices[i] = i;\n }\n modelData.indices = indices;\n }\n\n let indicesType: spec.IndexFormatType = spec.IndexFormatType.UInt16;\n\n if (modelData.indices.BYTES_PER_ELEMENT === 4) {\n indicesType = spec.IndexFormatType.UInt32;\n }\n\n const geometryData: spec.GeometryData = {\n id: generateGUID(),\n dataType: spec.DataType.Geometry,\n vertexData: {\n vertexCount: vertexCount,\n channels: [\n {\n semantic: spec.VertexBufferSemantic.Position,\n offset: 0,\n format: verticesType,\n dimension: 3,\n normalize: verticesNormalize,\n },\n {\n semantic: spec.VertexBufferSemantic.Uv,\n offset: verticesOffset,\n format: uvsType,\n dimension: 2,\n normalize: uvsNormalize,\n },\n {\n semantic: spec.VertexBufferSemantic.Normal,\n offset: verticesOffset + uvsOffset,\n format: normalsType,\n dimension: 3,\n normalize: normalsNormalize,\n },\n ],\n },\n subMeshes: [],\n mode: spec.GeometryType.TRIANGLES,\n indexFormat: indicesType,\n indexOffset: verticesOffset + uvsOffset + normalsOffset,\n buffer: encodeVertexData(modelData),\n };\n\n return geometryData;\n}\n\nexport function getGeometryDataFromPropsList (geomPropsList: GeometryProps[]) {\n if (geomPropsList.length <= 0) {\n return;\n }\n\n let totalCount = 0;\n const subMeshes: spec.SubMesh[] = [];\n\n for (let i = 0; i < geomPropsList.length; i++) {\n const count = getDrawCount(geomPropsList[i]);\n const offset = totalCount + (geomPropsList[i].drawStart ?? 0);\n const scale = geomPropsList[0].indices?.data.BYTES_PER_ELEMENT ?? 1;\n\n subMeshes.push({ offset: offset * scale, indexCount: count, vertexCount: count });\n if (i) {\n const geom0 = geomPropsList[0];\n const geom1 = geomPropsList[i];\n\n let isSame = true;\n\n Object.keys(geom0.attributes).forEach(name => {\n const attrib = geom0.attributes[name];\n // @ts-expect-error\n const array1 = attrib.data as spec.TypedArray;\n // @ts-expect-error\n const array2 = geom1.attributes[name].data as spec.TypedArray;\n\n if (array1.length !== array2.length || array1[0] !== array2[0]) {\n isSame = false;\n }\n });\n\n if (isSame) {\n if (geom0.indices && geom1.indices) {\n geom0.indices.data = mergeTypedArray(geom0.indices.data, geom1.indices.data);\n }\n } else {\n if (geom0.indices && geom1.indices) {\n const vertexCount = getVertexCount(geom0);\n\n geom0.indices.data = mergeTypedArray(geom0.indices.data, geom1.indices.data, vertexCount);\n }\n\n Object.keys(geom0.attributes).forEach(name => {\n const attrib = geom0.attributes[name];\n // @ts-expect-error\n const array1 = attrib.data as spec.TypedArray;\n // @ts-expect-error\n const array2 = geom1.attributes[name].data as spec.TypedArray;\n\n // @ts-expect-error\n attrib.data = mergeTypedArray(array1, array2);\n });\n }\n\n }\n totalCount = offset + count;\n }\n\n return createGeometryData(geomPropsList[0], subMeshes);\n}\n\nfunction getOffset (formatType: spec.VertexFormatType, dimension: number, count: number) {\n switch (formatType) {\n case spec.VertexFormatType.Int8:\n case spec.VertexFormatType.UInt8:\n return dimension * count;\n case spec.VertexFormatType.Int16:\n case spec.VertexFormatType.UInt16:\n return dimension * count * 2;\n default:\n return dimension * count * 4;\n }\n}\n\nfunction createGeometryData (props: GeometryProps, subMeshes: spec.SubMesh[]) {\n let totalByteLength = 0;\n\n for (const attrib in props.attributes) {\n const attribData = props.attributes[attrib];\n\n // @ts-expect-error\n totalByteLength += attribData.data.byteLength;\n }\n\n if (props.indices) {\n totalByteLength += props.indices.data.byteLength;\n }\n\n let vertexCount = 0;\n let bufferOffset = 0;\n const buffer = new Uint8Array(totalByteLength);\n const vertexChannels: spec.VertexChannel[] = [];\n\n for (const attrib in props.attributes) {\n const attribData = props.attributes[attrib];\n const semantic = vertexBufferSemanticMap[attrib] ?? attrib;\n\n // @ts-expect-error\n vertexCount = attribData.data.length / attribData.size;\n const vertexChannel: spec.VertexChannel = {\n semantic,\n offset: bufferOffset,\n format: glType2VertexFormatType(attribData.type ?? glContext.FLOAT),\n dimension: attribData.size,\n normalize: attribData.normalize,\n };\n\n vertexChannels.push(vertexChannel);\n // @ts-expect-error\n const data = attribData.data as spec.TypedArray;\n const subBuffer = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n\n buffer.set(subBuffer, bufferOffset);\n bufferOffset += subBuffer.byteLength;\n }\n\n const geometryData: spec.GeometryData = {\n id: generateGUID(),\n dataType: spec.DataType.Geometry,\n vertexData: {\n vertexCount: vertexCount,\n channels: vertexChannels,\n },\n subMeshes,\n mode: spec.GeometryType.TRIANGLES,\n indexFormat: spec.IndexFormatType.None,\n indexOffset: 0,\n buffer: '',\n };\n\n if (props.indices) {\n const indices = props.indices.data;\n const subBuffer = new Uint8Array(indices.buffer, indices.byteOffset, indices.byteLength);\n\n buffer.set(subBuffer, bufferOffset);\n geometryData.indexOffset = bufferOffset;\n if (indices instanceof Uint32Array) {\n geometryData.indexFormat = spec.IndexFormatType.UInt32;\n } else {\n geometryData.indexFormat = spec.IndexFormatType.UInt16;\n }\n }\n\n geometryData.buffer = toBase64String(buffer);\n\n return geometryData;\n}\n\nfunction encodeVertexData (modelData: ModelData): string {\n const vertices = new Uint8Array(modelData.vertices.buffer, modelData.vertices.byteOffset, modelData.vertices.byteLength);\n const uvs = new Uint8Array(modelData.uvs.buffer, modelData.uvs.byteOffset, modelData.uvs.byteLength);\n const normals = new Uint8Array(modelData.normals.buffer, modelData.normals.byteOffset, modelData.normals.byteLength);\n const indices = new Uint8Array(modelData.indices.buffer, modelData.indices.byteOffset, modelData.indices.byteLength);\n\n // 计算新 ArrayBuffer 的总大小(以字节为单位)\n const totalSize = vertices.byteLength + uvs.byteLength + normals.byteLength + indices.byteLength;\n\n // 创建一个足够大的 ArrayBuffer 来存储两个数组的数据\n const buffer = new ArrayBuffer(totalSize);\n\n // 创建一个视图来按照 Float32 格式写入数据\n let floatView = new Uint8Array(buffer, 0, vertices.byteLength);\n\n floatView.set(vertices);\n floatView = new Uint8Array(buffer, vertices.byteLength, uvs.byteLength);\n floatView.set(uvs);\n floatView = new Uint8Array(buffer, vertices.byteLength + uvs.byteLength, normals.byteLength);\n floatView.set(normals);\n\n // 创建一个视图来按照 Uint16 格式写入数据,紧接着 Float32 数据之后\n const uint16View = new Uint8Array(buffer, vertices.byteLength + uvs.byteLength + normals.byteLength, indices.byteLength);\n\n uint16View.set(indices);\n\n // 创建一个 Uint8Array 视图以便逐字节访问 ArrayBuffer 的数据\n const uint8View = new Uint8Array(buffer);\n\n // 将 Uint8Array 转换为二进制字符串\n let binaryString = '';\n\n for (let i = 0; i < uint8View.length; i++) {\n binaryString += String.fromCharCode(uint8View[i]);\n }\n\n // 使用 btoa 函数将二进制字符串转换为 Base64 编码的字符串\n return btoa(binaryString);\n}\n\nfunction toBase64String (array: Uint8Array) {\n // 将 Uint8Array 转换为二进制字符串\n let binaryString = '';\n\n for (let i = 0; i < array.length; i++) {\n binaryString += String.fromCharCode(array[i]);\n }\n\n // 使用 btoa 函数将二进制字符串转换为 Base64 编码的字符串\n return btoa(binaryString);\n}\n\nfunction getDrawCount (geomProps: GeometryProps) {\n if (geomProps.drawCount) {\n return geomProps.drawCount;\n } else if (geomProps.indices) {\n return geomProps.indices.data.length;\n } else {\n let drawCount = 0;\n\n // @ts-expect-error\n geomProps.attributes.forEach(attrib => {\n drawCount = attrib.data.length / attrib.size;\n });\n\n return drawCount;\n }\n}\n\nfunction getVertexCount (geomProps: GeometryProps) {\n let vertexCount = 0;\n\n Object.keys(geomProps.attributes).forEach(name => {\n const attrib = geomProps.attributes[name];\n\n // @ts-expect-error\n vertexCount = attrib.data.length / attrib.size;\n });\n\n return vertexCount;\n}\n\nfunction mergeTypedArray (array1: spec.TypedArray, array2: spec.TypedArray, offset?: number) {\n if (array1 instanceof Float32Array) {\n const result = new Float32Array(array1.length + array2.length);\n\n result.set(array1);\n result.set(array2, array1.length);\n\n return result;\n } else if (array1 instanceof Int32Array) {\n const result = new Int32Array(array1.length + array2.length);\n\n result.set(array1);\n result.set(array2, array1.length);\n\n return result;\n } else if (array1 instanceof Uint32Array) {\n const result = new Uint32Array(array1.length + array2.length);\n\n result.set(array1);\n result.set(array2, array1.length);\n if (offset) {\n for (let i = 0; i < array2.length; i++) {\n result[array1.length + i] += offset;\n }\n }\n\n return result;\n } else if (array1 instanceof Int16Array) {\n const result = new Int16Array(array1.length + array2.length);\n\n result.set(array1);\n result.set(array2, array1.length);\n\n return result;\n } else if (array1 instanceof Uint16Array) {\n const result = new Uint16Array(array1.length + array2.length);\n\n result.set(array1);\n result.set(array2, array1.length);\n if (offset) {\n for (let i = 0; i < array2.length; i++) {\n result[array1.length + i] += offset;\n }\n }\n\n return result;\n } else if (array1 instanceof Int8Array) {\n const result = new Int8Array(array1.length + array2.length);\n\n result.set(array1);\n result.set(array2, array1.length);\n\n return result;\n } else {\n const result = new Uint8Array(array1.length + array2.length);\n\n result.set(array1);\n result.set(array2, array1.length);\n\n return result;\n }\n}\n\nconst vertexBufferSemanticMap: Record<string, string> = {\n aPos: 'POSITION',\n aUV: 'TEXCOORD0',\n aUV2: 'TEXCOORD1',\n aNormal: 'NORMAL',\n aTangent: 'TANGENT',\n aColor: 'COLOR',\n aJoints: 'JOINTS',\n aWeights: 'WEIGHTS',\n //\n a_Position: 'POSITION',\n a_UV: 'TEXCOORD0',\n a_UV1: 'TEXCOORD0',\n a_UV2: 'TEXCOORD1',\n a_Normal: 'NORMAL',\n a_Tangent: 'TANGENT',\n a_Color: 'COLOR',\n a_Joints: 'JOINTS',\n a_Joint1: 'JOINTS',\n a_Weights: 'WEIGHTS',\n a_Weight1: 'WEIGHTS',\n //\n a_Target_Position0: 'POSITION_BS0',\n a_Target_Position1: 'POSITION_BS1',\n a_Target_Position2: 'POSITION_BS2',\n a_Target_Position3: 'POSITION_BS3',\n a_Target_Position4: 'POSITION_BS4',\n a_Target_Position5: 'POSITION_BS5',\n a_Target_Position6: 'POSITION_BS6',\n a_Target_Position7: 'POSITION_BS7',\n a_Target_Normal0: 'NORMAL_BS0',\n a_Target_Normal1: 'NORMAL_BS1',\n a_Target_Normal2: 'NORMAL_BS2',\n a_Target_Normal3: 'NORMAL_BS3',\n a_Target_Tangent0: 'TANGENT_BS0',\n a_Target_Tangent1: 'TANGENT_BS1',\n a_Target_Tangent2: 'TANGENT_BS2',\n a_Target_Tangent3: 'TANGENT_BS3',\n};\n","import { spec, generateGUID, glContext, addItem, loadImage, Transform, Geometry } from '@galacean/effects';\nimport type { TextureSourceOptions, TextureCubeSourceOptionsImageMipmaps, math, TransformProps, Engine, Texture, Attribute } from '@galacean/effects';\nimport type {\n SkyboxType, LoadSceneOptions, LoadSceneResult, Loader, ModelCamera, ModelLight, ModelSkybox, ModelImageLike,\n} from './protocol';\nimport type {\n ModelMeshComponentData,\n ModelSkyboxComponentData,\n ModelLightComponentData,\n ModelCameraComponentData,\n ModelAnimationOptions,\n ModelAnimTrackOptions,\n ModelMaterialOptions,\n ModelSkyboxOptions,\n ModelTreeOptions,\n ModelTextureTransform,\n} from '../index';\nimport {\n Vector3, Box3, Matrix4, Euler, PSkyboxCreator, PSkyboxType, UnlitShaderGUID, PBRShaderGUID,\n} from '../runtime';\nimport { LoaderHelper } from './loader-helper';\nimport { WebGLHelper } from '../utility';\nimport type { PImageBufferData, PSkyboxBufferParams } from '../runtime/skybox';\nimport type {\n GLTFSkin, GLTFMesh, GLTFImage, GLTFMaterial, GLTFTexture, GLTFScene, GLTFLight,\n GLTFCamera, GLTFAnimation, GLTFResources, GLTFImageBasedLight, GLTFPrimitive,\n GLTFBufferAttribute, GLTFBounds, GLTFTextureInfo,\n} from '@vvfx/resource-detection';\nimport type { CubeImage } from '@vvfx/resource-detection/dist/src/gltf-tools/gltf-image-based-light';\n\nexport interface LoaderOptions {\n compatibleMode?: 'gltf' | 'tiny3d',\n}\n\nexport function getDefaultEffectsGLTFLoader (engine: Engine, options?: LoaderOptions): Loader {\n if (!defaultGLTFLoader) {\n defaultGLTFLoader = new LoaderImpl();\n }\n\n (defaultGLTFLoader as LoaderImpl).initial(engine, options);\n\n return defaultGLTFLoader;\n}\n\nexport function setDefaultEffectsGLTFLoader (loader: Loader): void {\n defaultGLTFLoader = loader;\n}\n\nlet defaultGLTFLoader: Loader;\n\ntype Box3 = math.Box3;\n\nexport class LoaderImpl implements Loader {\n private sceneOptions: LoadSceneOptions;\n private loaderOptions: LoaderOptions;\n private gltfScene: GLTFScene;\n private gltfSkins: GLTFSkin[] = [];\n private gltfMeshs: GLTFMesh[] = [];\n private gltfLights: GLTFLight[] = [];\n private gltfCameras: GLTFCamera[] = [];\n private gltfImages: GLTFImage[] = [];\n private gltfTextures: GLTFTexture[] = [];\n private gltfMaterials: GLTFMaterial[] = [];\n private gltfAnimations: GLTFAnimation[] = [];\n private gltfImageBasedLights: GLTFImageBasedLight[] = [];\n\n composition: spec.CompositionData;\n timelineAssetId: string = '';\n images: spec.Image[] = [];\n imageElements: ModelImageLike[] = [];\n textures: spec.TextureDefine[] = [];\n items: spec.VFXItemData[] = [];\n components: spec.ComponentData[] = [];\n materials: spec.MaterialData[] = [];\n shaders: spec.ShaderData[] = [];\n geometries: spec.GeometryData[] = [];\n animations: spec.AnimationClipData[] = [];\n sceneAABB = new Box3();\n\n engine: Engine;\n\n constructor (composition?: spec.CompositionData) {\n if (composition) {\n this.composition = composition;\n } else {\n this.timelineAssetId = generateGUID();\n this.composition = {\n id: '1',\n name: 'test1',\n duration: 9999,\n endBehavior: spec.EndBehavior.restart,\n camera: {\n fov: 45,\n far: 2000,\n near: 0.001,\n position: [0, 0, 8],\n rotation: [0, 0, 0],\n clipMode: spec.CameraClipMode.portrait,\n },\n items: [],\n timelineAsset: { id: this.timelineAssetId },\n sceneBindings: [],\n };\n }\n }\n\n async loadScene (options: LoadSceneOptions): Promise<LoadSceneResult> {\n this.clear();\n this.sceneOptions = options;\n this.loaderOptions = { compatibleMode: options.gltf.compatibleMode };\n const gltfResource = options.gltf.resource;\n\n if (typeof gltfResource === 'string' || gltfResource instanceof Uint8Array) {\n throw new Error('Please load the resource using GLTFTools first.');\n }\n\n this.images = gltfResource.images.map(gltfImage => {\n const blob = new Blob([gltfImage.imageData.buffer], { type: gltfImage.mimeType ?? 'image/png' });\n\n return {\n id: gltfImage.id,\n url: URL.createObjectURL(blob),\n };\n });\n\n this.imageElements = await Promise.all(this.images.map(async image => {\n return loadImage(image.url);\n }));\n\n this.processGLTFResource(gltfResource, this.imageElements);\n this.gltfScene = gltfResource.scenes[0];\n this.gltfSkins = this.gltfScene.skins;\n this.gltfMeshs = gltfResource.meshes;\n this.gltfLights = this.gltfScene.lights;\n this.gltfCameras = this.gltfScene.cameras;\n this.gltfImages = gltfResource.images;\n this.gltfTextures = gltfResource.textures;\n this.gltfMaterials = gltfResource.materials;\n this.gltfAnimations = gltfResource.animations;\n this.gltfImageBasedLights = gltfResource.imageBasedLights;\n\n this.textures = this.gltfTextures.map(texture => {\n const textureOptions = texture.textureOptions;\n const source = textureOptions.source;\n\n if (typeof source === 'number') {\n // @ts-expect-error\n textureOptions.source = {\n id: this.images[source].id,\n };\n }\n\n return textureOptions;\n });\n this.materials = this.gltfMaterials.map(material => {\n return material.materialData;\n });\n\n gltfResource.meshes.forEach(mesh => {\n this.geometries.push(mesh.geometryData);\n });\n const gltfScene = gltfResource.scenes[0];\n\n gltfScene.meshesComponentData.forEach(mesh => this.checkMeshComponentData(mesh, gltfResource));\n\n this.components.push(...gltfScene.camerasComponentData);\n this.components.push(...gltfScene.lightsComponentData);\n this.components.push(...gltfScene.meshesComponentData);\n if (gltfScene.animationsComponentData.length === 1) {\n const component = gltfScene.animationsComponentData[0];\n\n if (!options.effects.playAllAnimation && options.effects.playAnimation !== undefined) {\n const clips = component.animationClips;\n const index = options.effects.playAnimation;\n\n if (index >= 0 && index < clips.length) {\n component.animationClips = [clips[index]];\n } else {\n component.animationClips = [];\n }\n }\n this.components.push(component);\n } else if (gltfScene.animationsComponentData.length > 1) {\n throw new Error(`Find many animation component data ${gltfScene.animationsComponentData.length}`);\n }\n\n this.animations = [];\n this.gltfAnimations.forEach(anim => {\n this.animations.push(anim.animationClipData);\n });\n\n this.items = [];\n\n await this.tryAddSkybox({\n skyboxType: options.gltf.skyboxType,\n renderable: options.gltf.skyboxVis,\n });\n\n this.items.push(...gltfResource.scenes[0].vfxItemData);\n this.items.forEach(item => {\n if (item.type === 'root' as spec.ItemType) {\n item.type = 'ECS' as spec.ItemType;\n }\n });\n\n return this.getLoadResult();\n }\n\n processGLTFResource (resource: GLTFResources, imageElements: ModelImageLike[]): void {\n const textureDataMap: Record<string, TextureSourceOptions> = {};\n const { textures, materials, scenes, imageBasedLights } = resource;\n\n textures.forEach(tex => {\n const texData = tex.textureOptions;\n const texId = (texData as unknown as spec.EffectsObjectData).id;\n\n if (texId) {\n if (textureDataMap[texId]) {\n console.error(`Duplicate GUID found: ${texId}, old ${textureDataMap[texId]}, new ${texData}.`);\n }\n textureDataMap[texId] = texData;\n } else {\n console.error(`No GUID in texture Data: ${texData}.`);\n }\n });\n\n const baseColorIdSet: Set<string> = new Set();\n const emissiveIdSet: Set<string> = new Set();\n\n materials.forEach(mat => {\n const materialData = mat.materialData;\n const baseColorTexture = materialData.textures['_BaseColorSampler']?.texture;\n const emissiveTexture = materialData.textures['_EmissiveSampler']?.texture;\n\n if (baseColorTexture) {\n baseColorIdSet.add(baseColorTexture.id);\n }\n if (emissiveTexture) {\n emissiveIdSet.add(emissiveTexture.id);\n }\n });\n\n let addTextures = 0;\n const textureIdMap: Record<string, string> = {};\n\n for (const baseColorId of baseColorIdSet) {\n if (emissiveIdSet.has(baseColorId)) {\n const texData = textures.find(tex => tex.textureOptions.id === baseColorId);\n\n if (texData) {\n const newId = generateGUID();\n const newTexData = texData.clone();\n\n newTexData.textureOptions.id = newId;\n textures.push(newTexData);\n textureDataMap[newId] = newTexData.textureOptions;\n textureIdMap[baseColorId] = newId;\n addTextures += 1;\n }\n }\n }\n\n if (addTextures > 0) {\n console.warn(`Add base color texture ${addTextures}`);\n }\n\n materials.forEach(mat => {\n const materialData = mat.materialData;\n\n this.processMaterialData(materialData);\n\n if (materialData.shader?.id === UnlitShaderGUID) {\n this.processMaterialTexture(materialData, '_BaseColorSampler', true, textureDataMap, imageElements);\n } else if (materialData.shader?.id === PBRShaderGUID) {\n const emissiveTexture = materialData.textures['_EmissiveSampler']?.texture;\n\n if (emissiveTexture && textureIdMap[emissiveTexture.id]) {\n emissiveTexture.id = textureIdMap[emissiveTexture.id];\n }\n\n this.processMaterialTexture(materialData, '_BaseColorSampler', true, textureDataMap, imageElements);\n this.processMaterialTexture(materialData, '_MetallicRoughnessSampler', false, textureDataMap, imageElements);\n this.processMaterialTexture(materialData, '_NormalSampler', false, textureDataMap, imageElements);\n this.processMaterialTexture(materialData, '_OcclusionSampler', false, textureDataMap, imageElements);\n this.processMaterialTexture(materialData, '_EmissiveSampler', false, textureDataMap, imageElements);\n }\n });\n\n const gltfScene = scenes[0];\n\n gltfScene.camerasComponentData.forEach(comp => this.processCameraComponentData(comp));\n gltfScene.lightsComponentData.forEach(comp => this.processLightComponentData(comp));\n\n const cubeTextures: TextureSourceOptions[] = [];\n\n imageBasedLights.forEach(ibl => {\n const data = ibl.imageBaseLightData;\n\n if (data.reflectionsIntensity === undefined) {\n data.reflectionsIntensity = data.intensity;\n }\n\n if (data.diffuseImage) {\n const diffuseTexture = textureDataMap[data.diffuseImage.id];\n\n addItem(cubeTextures, diffuseTexture);\n }\n if (data.specularImage) {\n const specularImage = textureDataMap[data.specularImage.id];\n\n addItem(cubeTextures, specularImage);\n }\n });\n\n cubeTextures.forEach(tex => {\n if (tex.target === glContext.TEXTURE_CUBE_MAP) {\n const cube = tex as TextureCubeSourceOptionsImageMipmaps;\n\n cube.mipmaps.forEach(mipmap => {\n [mipmap[4], mipmap[5]] = [mipmap[5], mipmap[4]];\n });\n\n if (cube.mipmaps.length === 1) {\n cube.minFilter = glContext.LINEAR;\n cube.magFilter = glContext.LINEAR;\n } else {\n cube.minFilter = glContext.LINEAR_MIPMAP_LINEAR;\n cube.magFilter = glContext.LINEAR;\n }\n }\n });\n }\n\n processComponentData (components: spec.EffectComponentData[]): void {\n components.forEach(comp => {\n if (comp.dataType === spec.DataType.LightComponent) {\n this.processLightComponentData(comp as unknown as ModelLightComponentData);\n } else if (comp.dataType === spec.DataType.CameraComponent) {\n this.processCameraComponentData(comp as unknown as ModelCameraComponentData);\n } else if (comp.dataType === spec.DataType.SkyboxComponent) {\n this.processSkyboxComponentData(comp as unknown as ModelSkyboxComponentData);\n }\n });\n }\n\n processLightComponentData (light: ModelLightComponentData): void {\n if (!light.color) {\n light.color = { r: 1, g: 1, b: 1, a: 1 };\n }\n\n if (!light.intensity) {\n light.intensity = 1;\n }\n\n if (light.lightType === spec.LightType.point) {\n if (!light.range) {\n light.range = 0;\n }\n } else if (light.lightType === spec.LightType.spot) {\n if (!light.range) {\n light.range = 0;\n }\n\n if (!light.innerConeAngle) {\n light.innerConeAngle = 0;\n }\n\n if (!light.outerConeAngle) {\n light.outerConeAngle = Math.PI / 4;\n }\n }\n }\n\n processCameraComponentData (camera: ModelCameraComponentData): void {\n if (camera.type === spec.CameraType.perspective) {\n if (camera.fov) {\n camera.fov *= Math.PI / 180;\n }\n }\n }\n\n processSkyboxComponentData (skybox: ModelSkyboxComponentData): void {\n if (skybox.intensity === undefined) {\n skybox.intensity = 1;\n }\n\n if (skybox.reflectionsIntensity === undefined) {\n skybox.reflectionsIntensity = 1;\n }\n }\n\n processMaterialData (material: spec.MaterialData): void {\n if (material.shader?.id === UnlitShaderGUID) {\n if (!material.colors['_BaseColorFactor']) {\n material.colors['_BaseColorFactor'] = { r: 1, g: 1, b: 1, a: 1 };\n }\n\n if (material.floats['_AlphaCutoff'] === undefined) {\n material.floats['_AlphaCutoff'] = 0;\n }\n\n if (material.floats['ZWrite'] === undefined) {\n material.floats['ZWrite'] = 1;\n }\n\n if (material.floats['ZTest'] === undefined) {\n material.floats['ZTest'] = 1;\n }\n\n if (!material.stringTags['RenderType']) {\n material.stringTags['RenderType'] = spec.RenderType.Opaque;\n }\n\n if (!material.stringTags['RenderFace']) {\n material.stringTags['RenderFace'] = spec.RenderFace.Front;\n }\n } else if (material.shader?.id === PBRShaderGUID) {\n if (!material.colors['_BaseColorFactor']) {\n material.colors['_BaseColorFactor'] = { r: 1, g: 1, b: 1, a: 1 };\n }\n\n if (material.floats['_SpecularAA'] === undefined) {\n material.floats['_SpecularAA'] = 0;\n }\n\n if (material.floats['_MetallicFactor'] === undefined) {\n material.floats['_MetallicFactor'] = 1;\n }\n\n if (material.floats['_RoughnessFactor'] === undefined) {\n material.floats['_RoughnessFactor'] = 0;\n }\n\n if (material.floats['_NormalScale'] === undefined) {\n material.floats['_NormalScale'] = 1;\n }\n\n if (material.floats['_OcclusionStrength'] === undefined) {\n material.floats['_OcclusionStrength'] = this.isTiny3dMode() ? 0 : 1;\n }\n\n if (!material.colors['_EmissiveFactor']) {\n material.colors['_EmissiveFactor'] = { r: 0, g: 0, b: 0, a: 1 };\n }\n\n if (material.floats['_EmissiveIntensity'] === undefined) {\n material.floats['_EmissiveIntensity'] = 1;\n }\n\n if (material.floats['_AlphaCutoff'] === undefined) {\n material.floats['_AlphaCutoff'] = 0;\n }\n\n if (material.floats['ZWrite'] === undefined) {\n material.floats['ZWrite'] = 1;\n }\n\n if (material.floats['ZTest'] === undefined) {\n material.floats['ZTest'] = 1;\n }\n\n if (!material.stringTags['RenderType']) {\n material.stringTags['RenderType'] = spec.RenderType.Opaque;\n }\n\n if (!material.stringTags['RenderFace']) {\n material.stringTags['RenderFace'] = spec.RenderFace.Front;\n }\n } else {\n console.error(`Encountered unknown shader ID in material with ID: ${material.id}.`);\n }\n }\n\n processTextureOptions (options: TextureSourceOptions, isBaseColor: boolean, image?: ModelImageLike): void {\n let premultiplyAlpha = false;\n let minFilter = options.minFilter ?? glContext.LINEAR_MIPMAP_LINEAR;\n\n if (this.isTiny3dMode()) {\n minFilter = glContext.LINEAR_MIPMAP_LINEAR;\n if (image) {\n if (!WebGLHelper.isPow2(image.width) || !WebGLHelper.isPow2(image.height)) {\n minFilter = glContext.LINEAR;\n }\n }\n\n premultiplyAlpha = isBaseColor ? false : true;\n }\n\n const generateMipmap = minFilter == glContext.NEAREST_MIPMAP_NEAREST\n || minFilter == glContext.LINEAR_MIPMAP_NEAREST\n || minFilter == glContext.NEAREST_MIPMAP_LINEAR\n || minFilter == glContext.LINEAR_MIPMAP_LINEAR;\n\n options.wrapS = options.wrapS ?? glContext.REPEAT;\n options.wrapT = options.wrapT ?? glContext.REPEAT;\n options.magFilter = options.magFilter ?? glContext.LINEAR;\n options.minFilter = minFilter;\n options.anisotropic = 1;\n options.premultiplyAlpha = premultiplyAlpha;\n options.generateMipmap = generateMipmap;\n }\n\n initial (engine: Engine, options?: LoaderOptions) {\n this.engine = engine;\n this.loaderOptions = options ?? {};\n }\n\n checkMeshComponentData (mesh: ModelMeshComponentData, resource: GLTFResources): void {\n if (mesh.materials.length <= 0) {\n throw new Error(`Submesh array is empty for mesh with ID: ${mesh.id}.`);\n }\n\n let geometryData: spec.GeometryData | undefined;\n\n resource.meshes.forEach(meshData => {\n if (meshData.geometryData.id === mesh.geometry.id) {\n geometryData = meshData.geometryData;\n }\n });\n\n if (geometryData === undefined) {\n throw new Error(`Unable to find geometry data for mesh with ID: ${mesh.geometry.id}.`);\n }\n\n if (geometryData.subMeshes.length !== mesh.materials.length) {\n throw new Error(`Mismatch between submeshes count (${geometryData.subMeshes.length}) and materials count (${mesh.materials.length}).`);\n }\n }\n\n processMaterialTexture (material: spec.MaterialData, textureName: string, isBaseColor: boolean, textureDataMap: Record<string, TextureSourceOptions>, imageElements: ModelImageLike[]) {\n const texture = material.textures[textureName];\n\n if (texture) {\n const id = texture.texture.id;\n const texData = textureDataMap[id];\n let imageObj: ModelImageLike | undefined;\n\n // @ts-expect-error\n if (typeof texData.source !== 'number') {\n // @ts-expect-error\n throw new Error(`Invalid texture option source data, ${texData.source}`);\n } else {\n // @ts-expect-error\n imageObj = imageElements[texData.source];\n }\n if (texData) {\n this.processTextureOptions(texData, isBaseColor, imageObj);\n }\n }\n }\n\n getLoadResult (): LoadSceneResult {\n const itemIds: spec.DataPath[] = [];\n\n this.items.forEach(item => itemIds.push({ id: item.id }));\n this.composition.items = itemIds;\n\n const jsonScene: spec.JSONScene = {\n version: '3.0',\n playerVersion: {\n web: '2.0',\n native: '2.0',\n },\n type: 'ge',\n compositionId: this.composition.id,\n compositions: [this.composition],\n images: this.images,\n shapes: [],\n plugins: ['model'],\n textures: this.textures,\n items: this.items,\n components: this.components,\n materials: this.materials,\n shaders: this.shaders,\n geometries: this.geometries,\n animations: this.animations,\n miscs: [\n {\n id: this.timelineAssetId,\n dataType: spec.DataType.TimelineAsset,\n },\n ],\n };\n\n const sceneAABB = this.computeSceneAABB();\n\n return {\n source: this.getRemarkString(),\n jsonScene,\n sceneAABB: {\n min: sceneAABB.min.toArray(),\n max: sceneAABB.max.toArray(),\n },\n };\n }\n\n addLight (data: ModelLight) {\n const itemId = generateGUID();\n const component: spec.ModelLightComponentData = {\n id: generateGUID(),\n item: { id: itemId },\n dataType: spec.DataType.LightComponent,\n //\n lightType: data.lightType,\n color: data.color,\n intensity: data.intensity,\n range: data.range,\n innerConeAngle: data.innerConeAngle,\n outerConeAngle: data.outerConeAngle,\n };\n const item: spec.VFXItemData = {\n id: itemId,\n name: data.name,\n duration: data.duration,\n type: spec.ItemType.light,\n pn: 0,\n visible: true,\n endBehavior: data.endBehavior,\n transform: {\n position: {\n x: data.position[0],\n y: data.position[1],\n z: data.position[2],\n },\n eulerHint: {\n x: data.rotation[0],\n y: data.rotation[1],\n z: data.rotation[2],\n },\n scale: {\n x: data.scale[0],\n y: data.scale[1],\n z: data.scale[2],\n },\n },\n components: [\n { id: component.id },\n ],\n content: {},\n dataType: spec.DataType.VFXItemData,\n };\n\n this.items.push(item);\n this.components.push(component);\n }\n\n addCamera (camera: ModelCamera) {\n const itemId = generateGUID();\n const component: spec.ModelCameraComponentData = {\n id: generateGUID(),\n item: { id: itemId },\n dataType: spec.DataType.CameraComponent,\n fov: camera.fov,\n near: camera.near,\n far: camera.far,\n clipMode: camera.clipMode,\n };\n const item: spec.VFXItemData = {\n id: itemId,\n name: camera.name,\n duration: camera.duration,\n // @ts-expect-error\n type: 'camera',\n pn: 0,\n visible: true,\n endBehavior: camera.endBehavior,\n transform: {\n position: {\n x: camera.position[0],\n y: camera.position[1],\n z: camera.position[2],\n },\n eulerHint: {\n x: camera.rotation[0],\n y: camera.rotation[1],\n z: camera.rotation[2],\n },\n scale: {\n x: 1,\n y: 1,\n z: 1,\n },\n },\n components: [\n { id: component.id },\n ],\n content: {},\n dataType: spec.DataType.VFXItemData,\n };\n\n this.items.push(item);\n this.components.push(component);\n }\n\n async tryAddSkybox (skybox: ModelSkybox) {\n if (this.gltfImageBasedLights.length > 0 && !this.ignoreSkybox()) {\n const ibl = this.gltfImageBasedLights[0];\n\n this.components.push(ibl.imageBaseLightData);\n } else if (skybox.skyboxType !== undefined) {\n const itemId = generateGUID();\n const skyboxInfo = this.createSkyboxComponentData(skybox.skyboxType as SkyboxType);\n const { imageList, textureOptionsList, component } = skyboxInfo;\n\n component.item.id = itemId;\n if (skybox.intensity !== undefined) {\n component.intensity = skybox.intensity;\n }\n if (skybox.reflectionsIntensity !== undefined) {\n component.reflectionsIntensity = skybox.reflectionsIntensity;\n }\n component.renderable = skybox.renderable ?? false;\n\n const item: spec.VFXItemData = {\n id: itemId,\n name: `Skybox-${skybox.skyboxType}`,\n duration: skybox.duration ?? 999,\n type: spec.ItemType.skybox,\n pn: 0,\n visible: true,\n endBehavior: spec.EndBehavior.freeze,\n transform: {\n position: {\n x: 0,\n y: 0,\n z: 0,\n },\n eulerHint: {\n x: 0,\n y: 0,\n z: 0,\n },\n scale: {\n x: 1,\n y: 1,\n z: 1,\n },\n },\n components: [\n { id: component.id },\n ],\n content: {},\n dataType: spec.DataType.VFXItemData,\n };\n\n this.images.push(...imageList);\n // @ts-expect-error\n this.textures.push(...textureOptionsList);\n this.items.push(item);\n this.components.push(component);\n }\n }\n\n createSkyboxComponentData (typeName: SkyboxType) {\n if (typeName !== 'NFT' && typeName !== 'FARM') {\n throw new Error(`Invalid skybox type specified: '${typeName}'. Valid types are: 'NFT', 'FARM'.`);\n }\n //\n const typ = typeName === 'NFT' ? PSkyboxType.NFT : PSkyboxType.FARM;\n const params = PSkyboxCreator.getSkyboxParams(typ);\n\n return PSkyboxCreator.createSkyboxComponentData(params);\n }\n\n private clear () {\n this.images = [];\n this.textures = [];\n this.items = [];\n this.components = [];\n this.materials = [];\n this.shaders = [];\n this.geometries = [];\n }\n\n private computeSceneAABB () {\n const geometryDataMap: Record<string, GLTFMesh> = {};\n\n this.gltfMeshs.forEach(mesh => {\n const id = mesh.geometryData.id;\n\n geometryDataMap[id] = mesh;\n });\n const componentDataMap: Record<string, GLTFMesh> = {};\n\n this.components.forEach(component => {\n if (component.dataType === spec.DataType.MeshComponent) {\n const meshComponent = component as spec.ModelMeshComponentData;\n\n componentDataMap[component.id] = geometryDataMap[meshComponent.geometry.id];\n }\n });\n\n const sceneAABB = new Box3();\n const parentTransformMap: Record<string, Transform> = {};\n\n this.items.forEach(item => {\n const parentId = item.parentId ?? '';\n const parentTransform = parentTransformMap[parentId] ?? new Transform();\n const props: TransformProps = {};\n\n if (item.transform) {\n props.position = new Vector3().copyFrom(item.transform.position);\n props.rotation = Euler.fromVector3(item.transform.eulerHint as Vector3);\n props.scale = new Vector3().copyFrom(item.transform.scale);\n }\n const transform = new Transform(props, parentTransform);\n\n parentTransformMap[item.id] = transform;\n item.components.forEach(component => {\n const mesh = componentDataMap[component.id];\n\n if (mesh && mesh.bounds) {\n const minPos = Vector3.fromArray(mesh.bounds.box.min);\n const maxPos = Vector3.fromArray(mesh.bounds.box.max);\n\n sceneAABB.union(new Box3(minPos, maxPos));\n }\n });\n });\n\n return sceneAABB;\n }\n\n /**\n * 按照传入的动画播放参数,计算需要播放的动画索引\n *\n * @param treeOptions 节点树属性,需要初始化animations列表。\n * @returns 返回计算的动画索引,-1表示没有动画需要播放,-88888888表示播放所有动画。\n */\n getPlayAnimationIndex (treeOptions: ModelTreeOptions): number {\n const animations = treeOptions.animations;\n\n if (animations === undefined || animations.length <= 0) {\n // 硬编码,内部指定的不播放动画的索引值\n return -1;\n }\n\n if (this.isPlayAllAnimation()) {\n // 硬编码,内部指定的播放全部动画的索引值\n return -88888888;\n }\n\n const animationInfo = this.sceneOptions.effects.playAnimation;\n\n if (animationInfo === undefined) {\n return -1;\n }\n\n if (typeof animationInfo === 'number') {\n if (animationInfo >= 0 && animationInfo < animations.length) {\n return animationInfo;\n } else {\n return -1;\n }\n } else {\n // typeof animationInfo === 'string'\n let animationIndex = -1;\n\n // 通过动画名字查找动画索引\n animations.forEach((anim, index) => {\n if (anim.name === animationInfo) {\n animationIndex = index;\n }\n });\n\n return animationIndex;\n }\n }\n\n isPlayAnimation (): boolean {\n return this.sceneOptions.effects.playAnimation !== undefined;\n }\n\n isPlayAllAnimation (): boolean {\n return this.sceneOptions.effects.playAllAnimation === true;\n }\n\n getRemarkString (): string {\n const remark = this.sceneOptions.gltf.remark;\n\n if (remark === undefined) {\n return 'Unknown';\n } else if (typeof remark === 'string') {\n return remark;\n } else {\n return 'BinaryBuffer';\n }\n }\n\n getCompositionDuration () {\n return this.composition.duration;\n }\n\n isTiny3dMode (): boolean {\n return this.loaderOptions.compatibleMode === 'tiny3d';\n }\n\n getItemDuration (): number {\n return this.sceneOptions.effects.duration ?? 9999;\n }\n\n getEndBehavior (): spec.EndBehavior {\n return this.sceneOptions.effects.endBehavior ?? spec.EndBehavior.restart;\n }\n\n getSkyboxType (): PSkyboxType | undefined {\n const typeName = this.sceneOptions.gltf.skyboxType;\n\n switch (typeName) {\n case 'NFT': return PSkyboxType.NFT;\n case 'FARM': return PSkyboxType.FARM;\n }\n }\n\n isSkyboxVis (): boolean {\n return this.sceneOptions.gltf.skyboxVis === true;\n }\n\n ignoreSkybox (): boolean {\n return this.sceneOptions.gltf.ignoreSkybox === true;\n }\n\n isEnvironmentTest (): boolean {\n if (typeof this.sceneOptions.gltf.remark === 'string') {\n return this.sceneOptions.gltf.remark.includes('EnvironmentTest');\n } else {\n return false;\n }\n }\n\n /**\n * for old scene compatibility\n */\n\n processLight (lights: GLTFLight[], fromGLTF: boolean): void {\n lights.forEach(l => {\n if (l.color === undefined) {\n if (fromGLTF) { l.color = [255, 255, 255, 255]; } else { l.color = [1, 1, 1, 1]; }\n } else {\n l.color[0] = this.scaleColorVal(l.color[0], fromGLTF);\n l.color[1] = this.scaleColorVal(l.color[1], fromGLTF);\n l.color[2] = this.scaleColorVal(l.color[2], fromGLTF);\n l.color[3] = this.scaleColorVal(l.color[3], fromGLTF);\n }\n });\n }\n\n processCamera (cameras: GLTFCamera[], fromGLTF: boolean): void {\n const scale = fromGLTF ? 180.0 / Math.PI : Math.PI / 180.0;\n\n cameras.forEach(camera => {\n if (camera.perspective !== undefined) {\n camera.perspective.yfov *= scale;\n }\n });\n }\n\n processMaterial (materials: GLTFMaterial[], fromGLTF: boolean): void {\n materials.forEach(mat => {\n if (mat.baseColorFactor === undefined) {\n if (fromGLTF) { mat.baseColorFactor = [255, 255, 255, 255]; } else { mat.baseColorFactor = [1, 1, 1, 1]; }\n } else {\n mat.baseColorFactor[0] = this.scaleColorVal(mat.baseColorFactor[0], fromGLTF);\n mat.baseColorFactor[1] = this.scaleColorVal(mat.baseColorFactor[1], fromGLTF);\n mat.baseColorFactor[2] = this.scaleColorVal(mat.baseColorFactor[2], fromGLTF);\n mat.baseColorFactor[3] = this.scaleColorVal(mat.baseColorFactor[3], fromGLTF);\n }\n\n if (mat.emissiveFactor === undefined) {\n if (fromGLTF) { mat.emissiveFactor = [255, 255, 255, 255]; } else { mat.emissiveFactor = [1, 1, 1, 1]; }\n } else {\n mat.emissiveFactor[0] = this.scaleColorVal(mat.emissiveFactor[0], fromGLTF);\n mat.emissiveFactor[1] = this.scaleColorVal(mat.emissiveFactor[1], fromGLTF);\n mat.emissiveFactor[2] = this.scaleColorVal(mat.emissiveFactor[2], fromGLTF);\n mat.emissiveFactor[3] = this.scaleColorVal(mat.emissiveFactor[3], fromGLTF);\n }\n\n if (fromGLTF && mat.occlusionTexture !== undefined && mat.occlusionTexture.strength === undefined) {\n mat.occlusionTexture.strength = this.isTiny3dMode() ? 0 : 1;\n }\n });\n }\n\n createTreeOptions (scene: GLTFScene): ModelTreeOptions {\n const nodeList = scene.nodes.map((node, nodeIndex) => {\n const children = node.children.map(child => {\n if (child.nodeIndex === undefined) { throw new Error(`Undefined nodeIndex for child ${child}`); }\n\n return child.nodeIndex;\n });\n let pos: spec.vec3 | undefined;\n let quat: spec.vec4 | undefined;\n let scale: spec.vec3 | undefined;\n\n if (node.matrix !== undefined) {\n if (node.matrix.length !== 16) { throw new Error(`Invalid matrix length ${node.matrix.length} for node ${node}`); }\n const mat = Matrix4.fromArray(node.matrix);\n const transform = mat.getTransform();\n\n pos = transform.translation.toArray();\n quat = transform.rotation.toArray();\n scale = transform.scale.toArray();\n } else {\n if (node.translation !== undefined) { pos = node.translation as spec.vec3; }\n if (node.rotation !== undefined) { quat = node.rotation as spec.vec4; }\n if (node.scale !== undefined) { scale = node.scale as spec.vec3; }\n }\n node.nodeIndex = nodeIndex;\n const treeNode: spec.TreeNodeOptions = {\n name: node.name,\n transform: {\n position: pos,\n quat: quat,\n scale: scale,\n },\n children: children,\n id: `${node.nodeIndex}`,\n // id: index, id不指定就是index,指定后就是指定的值\n };\n\n return treeNode;\n });\n\n const rootNodes = scene.rootNodes.map(root => {\n if (root.nodeIndex === undefined) { throw new Error(`Undefined nodeIndex for root ${root}`); }\n\n return root.nodeIndex;\n });\n\n const treeOptions: ModelTreeOptions = {\n nodes: nodeList,\n children: rootNodes,\n animation: -1,\n animations: [],\n };\n\n return treeOptions;\n }\n\n createAnimations (animations: GLTFAnimation[]): ModelAnimationOptions[] {\n return animations.map(anim => {\n const tracks = anim.channels.map(channel => {\n const track: ModelAnimTrackOptions = {\n input: channel.input.array as Float32Array,\n output: channel.output.array as Float32Array,\n node: channel.target.node,\n path: channel.target.path,\n interpolation: channel.interpolation,\n };\n\n return track;\n });\n\n const newAnim: ModelAnimationOptions = {\n name: anim.name,\n tracks: tracks,\n };\n\n return newAnim;\n });\n }\n\n createGeometry (primitive: GLTFPrimitive, hasSkinAnim: boolean): Geometry {\n const proxy = new GeometryProxy(this.engine, primitive, hasSkinAnim);\n\n return proxy.geometry;\n }\n\n createMaterial (material: GLTFMaterial): ModelMaterialOptions {\n const proxy = new MaterialProxy(material, [], this.isTiny3dMode());\n\n return proxy.material;\n }\n\n createTexture2D (image: GLTFImage, texture: GLTFTexture, isBaseColor: boolean): Promise<Texture> {\n return WebGLHelper.createTexture2D(this.engine, image, texture, isBaseColor, this.isTiny3dMode());\n }\n\n createTextureCube (cubeImages: CubeImage[], level0Size?: number): Promise<Texture> {\n if (cubeImages.length == 0) { throw new Error(`createTextureCube: Invalid cubeImages length ${cubeImages}`); }\n\n const mipmaps: PImageBufferData[][] = [];\n\n cubeImages.forEach(cubeImage => {\n if (cubeImage.length != 6) { throw new Error(`createTextureCube: cubeimage count should always be 6, ${cubeImage}`); }\n //\n const imgList: PImageBufferData[] = [];\n\n cubeImage.forEach(img => {\n if (img.imageData === undefined) { throw new Error(`createTextureCube: Invalid image data from ${img}`); }\n //\n imgList.push({\n type: 'buffer',\n data: img.imageData,\n mimeType: img.mimeType,\n });\n });\n\n if (this.isTiny3dMode()) {\n [imgList[4], imgList[5]] = [imgList[5], imgList[4]];\n }\n\n mipmaps.push(imgList);\n });\n //\n if (mipmaps.length == 1) {\n // no mipmaps\n return WebGLHelper.createTextureCubeFromBuffer(this.engine, mipmaps[0]);\n } else {\n // has mipmaps\n return WebGLHelper.createTextureCubeMipmapFromBuffer(this.engine, mipmaps, level0Size ?? Math.pow(2, mipmaps.length - 1));\n }\n }\n\n createSkybox (ibl: GLTFImageBasedLight): Promise<ModelSkyboxOptions> {\n const reflectionsIntensity = ibl.reflectionsIntensity ?? ibl.intensity;\n const irradianceCoeffs = ibl.irradianceCoefficients as number[][];\n const inSpecularImages = ibl.specularImages as CubeImage[];\n const specularImages = inSpecularImages.map(images => {\n const newImages = images.map(img => {\n const outImg: PImageBufferData = {\n type: 'buffer',\n data: img.imageData,\n mimeType: img.mimeType,\n };\n\n return outImg;\n });\n\n if (this.isTiny3dMode()) {\n [newImages[4], newImages[5]] = [newImages[5], newImages[4]];\n }\n\n return newImages;\n });\n const specularMipCount = specularImages.length - 1;\n const specularImageSize = ibl.specularImageSize ?? Math.pow(2, specularMipCount);\n\n const newIrradianceCoeffs: number[] = [];\n\n irradianceCoeffs.forEach(coeffs => {\n newIrradianceCoeffs.push(...coeffs);\n });\n\n const params: PSkyboxBufferParams = {\n type: 'buffer',\n renderable: this.isSkyboxVis(),\n intensity: ibl.intensity,\n reflectionsIntensity: reflectionsIntensity,\n irradianceCoeffs: newIrradianceCoeffs,\n specularImage: specularImages,\n specularMipCount: specularMipCount,\n specularImageSize: specularImageSize,\n };\n\n return PSkyboxCreator.createSkyboxOptions(this.engine, params);\n }\n\n createDefaultSkybox (typeName: SkyboxType): Promise<ModelSkyboxOptions> {\n if (typeName !== 'NFT' && typeName !== 'FARM') { throw new Error(`Invalid skybox type name ${typeName}`); }\n //\n const typ = typeName === 'NFT' ? PSkyboxType.NFT : PSkyboxType.FARM;\n const params = PSkyboxCreator.getSkyboxParams(typ);\n\n return PSkyboxCreator.createSkyboxOptions(this.engine, params);\n }\n\n scaleColorVal (val: number, fromGLTF: boolean): number {\n return fromGLTF ? LoaderHelper.scaleTo255(val) : LoaderHelper.scaleTo1(val);\n }\n\n scaleColorVec (vec: number[], fromGLTF: boolean): number[] {\n return vec.map(val => this.scaleColorVal(val, fromGLTF));\n }\n}\n\nexport function getPBRShaderProperties (): string {\n return `\n _BaseColorSampler (\"基础贴图\", 2D) = \"\" {}\n _BaseColorFactor (\"基础颜色\", Color) = (1, 1, 1, 1)\n _MetallicRoughnessSampler (\"金属贴图\", 2D) = \"\" {}\n _MetallicFactor (\"金属度\", Range(0, 1)) = 1\n _RoughnessFactor (\"粗糙度\", Range(0, 1)) = 1\n [Toggle] _SpecularAA (\"高光抗锯齿\", Float) = 0\n _NormalSampler (\"法线贴图\", 2D) = \"\" {}\n _NormalScale (\"法线贴图强度\", Range(0, 2)) = 1\n _OcclusionSampler (\"AO贴图\", 2D) = \"\" {}\n _OcclusionStrength (\"AO贴图强度\", Range(0, 1)) = 1\n _EmissiveSampler (\"自发光贴图\", 2D) = \"\" {}\n _EmissiveIntensity (\"自发光贴图强度\", Float) = 1\n _EmissiveFactor (\"自发光颜色\", Color) = (0, 0, 0, 1)\n _AlphaCutoff (\"Alpha裁剪值\", Range(0, 1)) = 0.5\n `;\n}\n\nexport function getUnlitShaderProperties (): string {\n return `\n _BaseColorSampler (\"基础贴图\", 2D) = \"\" {}\n _BaseColorFactor (\"基础颜色\", Color) = (1, 1, 1, 1)\n _AlphaCutoff (\"Alpha裁剪值\", Range(0, 1)) = 0.5\n `;\n}\n\nexport function getDefaultPBRMaterialData (): spec.MaterialData {\n const material: spec.MaterialData = {\n 'id': '00000000000000000000000000000000',\n 'name': 'PBR Material',\n 'dataType': spec.DataType.Material,\n 'stringTags': {\n 'RenderType': spec.RenderType.Opaque,\n 'RenderFace': 'Front',\n },\n 'macros': [],\n 'shader': {\n 'id': 'pbr00000000000000000000000000000',\n },\n 'ints': {\n\n },\n 'floats': {\n 'ZWrite': 1,\n 'ZTest': 1,\n '_SpecularAA': 0,\n '_MetallicFactor': 1,\n '_RoughnessFactor': 0.0,\n '_NormalScale': 1,\n '_OcclusionStrength': 1,\n '_EmissiveIntensity': 1,\n '_AlphaCutoff': 0.5,\n },\n 'vector4s': {\n\n },\n 'colors': {\n '_BaseColorFactor': {\n 'r': 1,\n 'g': 1,\n 'b': 1,\n 'a': 1,\n },\n '_EmissiveFactor': {\n 'r': 0,\n 'g': 0,\n 'b': 0,\n 'a': 1,\n },\n },\n 'textures': {\n\n },\n };\n\n return material;\n}\n\nexport function getDefaultUnlitMaterialData (): spec.MaterialData {\n const material: spec.MaterialData = {\n 'id': '00000000000000000000000000000000',\n 'name': 'Unlit Material',\n 'dataType': spec.DataType.Material,\n 'stringTags': {\n 'ZWrite': 'true',\n 'ZTest': 'true',\n 'RenderType': spec.RenderType.Opaque,\n 'Cull': 'Front',\n },\n 'macros': [],\n 'shader': {\n 'id': 'unlit000000000000000000000000000',\n },\n 'ints': {\n\n },\n 'floats': {\n '_AlphaCutoff': 0.5,\n },\n 'vector4s': {\n\n },\n 'colors': {\n '_BaseColorFactor': {\n 'r': 1,\n 'g': 1,\n 'b': 1,\n 'a': 1,\n },\n },\n 'textures': {\n\n },\n };\n\n return material;\n}\n\nclass GeometryProxy {\n\n constructor (\n private engine: Engine,\n private gltfGeometry: GLTFPrimitive,\n private hasSkinAnimation: boolean) {\n }\n\n get geometry (): Geometry {\n const attributes: Record<string, Attribute> = {};\n\n if (this.hasPosition) {\n const attrib = this.positionAttrib;\n\n attributes['a_Position'] = this._getBufferAttrib(attrib);\n } else {\n throw new Error('Position attribute missing');\n }\n if (this.hasNormal) {\n const attrib = this.normalAttrib;\n\n if (attrib !== undefined) {\n attributes['a_Normal'] = this._getBufferAttrib(attrib);\n }\n }\n if (this.hasTangent) {\n const attrib = this.tangentAttrib;\n\n if (attrib !== undefined) {\n attributes['a_Tangent'] = this._getBufferAttrib(attrib);\n }\n }\n this.texCoordList.forEach(val => {\n const attrib = this.texCoordAttrib(val);\n const attribName = `a_UV${val + 1}`;\n\n attributes[attribName] = this._getBufferAttrib(attrib);\n });\n if (this.hasSkinAnimation) {\n const jointAttrib = this.jointAttribute;\n\n if (jointAttrib !== undefined) {\n attributes['a_Joint1'] = this._getBufferAttrib(jointAttrib);\n }\n const weightAttrib = this.weightAttribute;\n\n if (weightAttrib !== undefined) {\n attributes['a_Weight1'] = this._getBufferAttrib(weightAttrib);\n }\n }\n\n /**\n * 设置Morph动画需要的Attribute,主要包括Position,Normal和Tangent\n */\n for (let i = 0; i < 8; i++) {\n const positionAttrib = this.getTargetPosition(i);\n\n if (positionAttrib !== undefined) {\n attributes[`a_Target_Position${i}`] = this._getBufferAttrib(positionAttrib);\n }\n\n const normalAttrib = this.getTargetNormal(i);\n\n if (normalAttrib !== undefined) {\n attributes[`a_Target_Normal${i}`] = this._getBufferAttrib(normalAttrib);\n }\n\n const tangentAttrib = this.getTargetTangent(i);\n\n if (tangentAttrib !== undefined) {\n attributes[`a_Target_Tangent${i}`] = this._getBufferAttrib(tangentAttrib);\n }\n }\n\n const indexArray = this.indexArray;\n\n if (indexArray !== undefined) {\n return Geometry.create(\n this.engine,\n {\n attributes: attributes,\n indices: { data: indexArray },\n drawStart: 0,\n drawCount: indexArray.length,\n mode: glContext.TRIANGLES,\n }\n );\n } else {\n return Geometry.create(\n this.engine,\n {\n attributes: attributes,\n drawStart: 0,\n drawCount: this.positionAttrib.array.length / 3,\n mode: glContext.TRIANGLES,\n }\n );\n }\n }\n\n private _getBufferAttrib (inAttrib: GLTFBufferAttribute): Attribute {\n const attrib: spec.AttributeWithData = {\n type: inAttrib.type,\n size: inAttrib.itemSize,\n //stride: inAttrib.stride,\n //offset: inAttrib.offset,\n data: inAttrib.array,\n normalize: inAttrib.normalized,\n };\n\n return attrib;\n }\n\n get positionAttrib () {\n return this.gltfGeometry.getPosition();\n }\n\n get normalAttrib () {\n return this.gltfGeometry.getNormal();\n }\n\n get tangentAttrib () {\n return this.gltfGeometry.getTangent();\n }\n\n texCoordAttrib (index: number) {\n return this.gltfGeometry.getTexCoord(index);\n }\n\n get jointAttribute () {\n return this.gltfGeometry.getJoints(0);\n }\n\n get weightAttribute () {\n return this.gltfGeometry.getWeights(0);\n }\n\n get hasPosition (): boolean {\n return this.positionAttrib !== undefined;\n }\n\n get hasNormal (): boolean {\n return this.normalAttrib !== undefined;\n }\n\n get hasTangent (): boolean {\n return this.tangentAttrib !== undefined;\n }\n\n get hasTexCoord (): boolean {\n return this.texCoordCount > 0;\n }\n\n get texCoordCount (): number {\n for (let i = 0; i < 10; i++) {\n if (this.texCoordAttrib(i) === undefined) { return i; }\n }\n\n return 0;\n }\n\n get hasJointAttribute (): boolean {\n return this.jointAttribute !== undefined;\n }\n\n get hasWeightAttribute (): boolean {\n return this.weightAttribute !== undefined;\n }\n\n get indexArray (): Uint8Array | Uint16Array | Uint32Array | undefined {\n if (this.gltfGeometry.indices === undefined) { return undefined; }\n\n switch (this.gltfGeometry.indices.type) {\n case WebGLRenderingContext['UNSIGNED_INT']:\n return this.gltfGeometry.indices.array as Uint32Array;\n case WebGLRenderingContext['UNSIGNED_SHORT']:\n return this.gltfGeometry.indices.array as Uint16Array;\n case WebGLRenderingContext['UNSIGNED_BYTE']:\n return this.gltfGeometry.indices.array as Uint8Array;\n }\n\n return undefined;\n }\n\n get indexCount (): number {\n if (this.gltfGeometry.indices !== undefined) { return this.gltfGeometry.indices.array.length; } else { return 0; }\n }\n\n get texCoordList (): number[] {\n const texCoords: number[] = [];\n\n for (let i = 0; i < 10; i++) {\n if (this.texCoordAttrib(i) !== undefined) {\n texCoords.push(i);\n } else {\n break;\n }\n }\n\n return texCoords;\n }\n\n getTargetPosition (index: number): GLTFBufferAttribute | undefined {\n return this.gltfGeometry.getAttribute(`POSITION${index}`);\n }\n\n getTargetNormal (index: number): GLTFBufferAttribute | undefined {\n return this.gltfGeometry.getAttribute(`NORMAL${index}`);\n }\n\n getTargetTangent (index: number): GLTFBufferAttribute | undefined {\n return this.gltfGeometry.getAttribute(`TANGENT${index}`);\n }\n\n}\n\nclass MaterialProxy {\n private gltfMaterial: GLTFMaterial;\n private textures: Texture[];\n // TODO: 待移除?\n private tiny3dMode: boolean;\n\n constructor (material: GLTFMaterial, textures: Texture[], tiny3dMode: boolean) {\n this.gltfMaterial = material;\n this.textures = textures;\n this.tiny3dMode = tiny3dMode;\n }\n\n get material (): ModelMaterialOptions {\n const mat = this.gltfMaterial;\n const isUnlit = GLTFHelper.isUnlitMaterial(mat);\n\n let blending = spec.MaterialBlending.opaque;\n\n switch (mat.alphaMode) {\n case 'OPAQUE':\n blending = spec.MaterialBlending.opaque;\n\n break;\n case 'MASK':\n blending = spec.MaterialBlending.masked;\n\n break;\n case 'BLEND':\n blending = spec.MaterialBlending.translucent;\n\n break;\n }\n\n const side = mat.doubleSided ? spec.SideMode.DOUBLE : spec.SideMode.FRONT;\n\n const enableShadow = false;\n\n const alphaCutOff = mat.alphaCutOff ?? 0.5;\n\n const name = mat.name;\n\n if (isUnlit) {\n return {\n name: name,\n type: spec.MaterialType.unlit,\n baseColorTexture: this.baseColorTextureObj,\n baseColorTextureCoordinate: this.baseColorTextureCoord,\n baseColorTextureTransform: this.baseColorTextureTransfrom,\n baseColorFactor: this.baseColorFactor,\n //\n depthMask: mat.extras?.depthMask,\n blending: blending,\n alphaCutOff: alphaCutOff,\n side: side,\n };\n } else {\n return {\n name: name,\n type: spec.MaterialType.pbr,\n baseColorTexture: this.baseColorTextureObj,\n baseColorTextureCoordinate: this.baseColorTextureCoord,\n baseColorTextureTransform: this.baseColorTextureTransfrom,\n baseColorFactor: this.baseColorFactor,\n //\n useSpecularAA: this.getSpecularAA(),\n //\n metallicRoughnessTexture: this.metallicRoughnessTextureObj,\n metallicRoughnessTextureCoordinate: this.metallicRoughnessTextureCoord,\n metallicRoughnessTextureTransform: this.metallicRoughnessTextureTransfrom,\n metallicFactor: this.metalicFactor,\n roughnessFactor: this.roughnessFactor,\n //\n normalTexture: this.normalTextureObj,\n normalTextureCoordinate: this.normalTextureCoord,\n normalTextureTransform: this.normalTextureTransfrom,\n normalTextureScale: this.normalTextureScale,\n //\n occlusionTexture: this.occlusionTextureObj,\n occlusionTextureCoordinate: this.occlusionTextureCoord,\n occlusionTextureTransform: this.occlusionTextureTransfrom,\n occlusionTextureStrength: this.occlusionTextureStrength,\n //\n emissiveTexture: this.emissiveTextureObj,\n emissiveTextureCoordinate: this.emissiveTextureCoord,\n emissiveTextureTransform: this.emissiveTextureTransfrom,\n emissiveFactor: this.emissiveFactor,\n emissiveIntensity: 1.0,\n //\n depthMask: mat.extras?.depthMask,\n blending: blending,\n alphaCutOff: alphaCutOff,\n side: side,\n enableShadow: enableShadow,\n };\n }\n }\n\n private getTextureObject (index: number): Texture | undefined {\n if (index < 0 || index >= this.textures.length) { return; }\n\n return this.textures[index];\n }\n\n getTextureObj (texInfo?: GLTFTextureInfo): Texture | undefined {\n return texInfo ? this.getTextureObject(texInfo.index) : undefined;\n }\n\n getTextureCoord (texInfo?: GLTFTextureInfo): number | undefined {\n return texInfo ? texInfo.texCoord : undefined;\n }\n\n getTextureTransform (texInfo?: GLTFTextureInfo): ModelTextureTransform | undefined {\n const transform = texInfo?.extensions?.KHR_texture_transform;\n\n if (transform === undefined) {\n return;\n }\n\n if (transform.offset === undefined && transform.rotation === undefined && transform.scale === undefined) {\n return;\n }\n\n return {\n offset: transform.offset,\n rotation: transform.rotation,\n scale: transform.scale,\n };\n }\n\n get baseColorTextureObj (): Texture | undefined {\n return this.getTextureObj(this.gltfMaterial.baseColorTexture);\n }\n\n get baseColorTextureCoord (): number | undefined {\n return this.getTextureCoord(this.gltfMaterial.baseColorTexture);\n }\n\n get baseColorTextureTransfrom (): ModelTextureTransform | undefined {\n return this.getTextureTransform(this.gltfMaterial.baseColorTexture);\n }\n\n get metallicRoughnessTextureObj (): Texture | undefined {\n return this.getTextureObj(this.gltfMaterial.metallicRoughnessTexture);\n }\n\n get metallicRoughnessTextureCoord (): number | undefined {\n return this.getTextureCoord(this.gltfMaterial.metallicRoughnessTexture);\n }\n\n get metallicRoughnessTextureTransfrom (): ModelTextureTransform | undefined {\n return this.getTextureTransform(this.gltfMaterial.metallicRoughnessTexture);\n }\n\n get normalTextureObj (): Texture | undefined {\n return this.getTextureObj(this.gltfMaterial.normalTexture);\n }\n\n get normalTextureCoord (): number | undefined {\n return this.getTextureCoord(this.gltfMaterial.normalTexture);\n }\n\n get normalTextureTransfrom (): ModelTextureTransform | undefined {\n return this.getTextureTransform(this.gltfMaterial.normalTexture);\n }\n\n get occlusionTextureObj (): Texture | undefined {\n return this.getTextureObj(this.gltfMaterial.occlusionTexture);\n }\n\n get occlusionTextureCoord (): number | undefined {\n return this.getTextureCoord(this.gltfMaterial.occlusionTexture);\n }\n\n get occlusionTextureTransfrom (): ModelTextureTransform | undefined {\n return this.getTextureTransform(this.gltfMaterial.occlusionTexture);\n }\n\n get emissiveTextureObj (): Texture | undefined {\n return this.getTextureObj(this.gltfMaterial.emissiveTexture);\n }\n\n get emissiveTextureCoord (): number | undefined {\n return this.getTextureCoord(this.gltfMaterial.emissiveTexture);\n }\n\n get emissiveTextureTransfrom (): ModelTextureTransform | undefined {\n return this.getTextureTransform(this.gltfMaterial.emissiveTexture);\n }\n\n get hasEmissive (): boolean {\n const factor = this.emissiveFactor;\n\n return factor[0] + factor[1] + factor[2] > 0;\n }\n\n get baseColorFactor (): [number, number, number, number] {\n const f = this.gltfMaterial.baseColorFactor;\n\n if (f === undefined || f.length != 4) { return [1, 1, 1, 1]; } else { return [f[0], f[1], f[2], f[3]]; }\n }\n\n getSpecularAA () {\n return this.gltfMaterial.extras?.useSpecularAA;\n }\n\n get metalicFactor (): number {\n return this.gltfMaterial.metallicFactor ?? 1;\n }\n\n get roughnessFactor (): number {\n return this.gltfMaterial.roughnessFactor ?? 1;\n }\n\n get normalTextureScale (): number {\n return this.gltfMaterial.normalTexture?.scale ?? 1;\n }\n\n get occlusionTextureStrength (): number {\n return this.gltfMaterial.occlusionTexture?.strength ?? 1;\n }\n\n get emissiveFactor (): [number, number, number, number] {\n const f = this.gltfMaterial.emissiveFactor;\n\n if (f === undefined || f.length != 4) {\n return [0, 0, 0, 1];\n } else {\n return [f[0], f[1], f[2], 1.0];\n }\n }\n\n}\n\nclass GLTFHelper {\n static isUnlitMaterial (mat: GLTFMaterial): boolean {\n return mat.extensions?.KHR_materials_unlit !== undefined;\n }\n\n static createBoxFromGLTFBound (bound: GLTFBounds): Box3 {\n const boxMin = Vector3.fromArray(bound.box.min as number[]);\n const boxMax = Vector3.fromArray(bound.box.max as number[]);\n\n return new Box3(boxMin, boxMax);\n }\n}\n"],"names":["Vector2","math","Vector3","Vector4","Matrix3","Matrix4","Color","Euler","EulerOrder","Quaternion","Box3","Sphere","Ray","DEG2RAD","LoaderHelper","getTransformFromMat4","mat","transform","getTransform","euler","rotation","toEuler","position","translation","toArray","scale","getEffectsTransformFromMat4","EffectsTransform","valid","cloneFromMatrix","getTransformFromTranslation","t","getTransformFromDirection","d","d0","fromArray","d1","clone","normalize","a","cross","length","b","dot","c","Math","acos","fromRotationAxis","getEffectsTransformFromDirection","getTransformFromTransDir","getEffectsTransformFromTransDir","getEulerFromQuat","q","quat","x","y","z","w","order","ZYX","setFromQuaternion","getQuatFromEuler","e","setFromEuler","toPlayerColor3","color","scaleTo255","toPlayerColor4","val","intVal","max","min","scaleTo1","floatVal","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_async_to_generator","fn","self","args","arguments","apply","err","undefined","_extends","Object","assign","target","i","source","prototype","hasOwnProperty","call","_instanceof","left","right","Symbol","hasInstance","_array_like_to_array","arr","len","arr2","Array","_unsupported_iterable_to_array","o","minLen","n","toString","slice","constructor","name","from","test","_create_for_of_iterator_helper_loose","allowArrayLike","it","iterator","next","bind","isArray","TypeError","__decorate","decorators","desc","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__generator","thisArg","body","_","label","sent","trys","ops","f","g","verb","v","step","op","pop","push","SuppressedError","suppressed","message","Error","deserializeGeometry","geometryProps","data","attributes","ret","indices","typedArrayFromBinary","index","keys","forEach","attribute","pointer","ctrlMap","i8","Int8Array","u8","Uint8Array","i16","Int16Array","u16","Uint16Array","f32","Float32Array","i32","Int32Array","u32","Uint32Array","binary","spec","ValueType","BINARY","start","byteLength","type","CTRL","BYTES_PER_ELEMENT","_set_prototype_of","p","setPrototypeOf","__proto__","_inherits","subClass","superClass","create","writable","configurable","InterpolationSampler","time","componentCount","cachedIndex","evaluate","pp","i1","t1","t0","validate_interval","seek","linear_scan","forward_scan","giveUpAt","copySampleValue","t1global","mid","intervalChanged","interpolate","dispose","values","stride","offset","result","LinearSampler","size","offset1","offset0","weight1","weight0","DiscreteSampler","QuaternionInner","slerpFlat","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","x1","y1","z1","w1","s","cos","dir","sqrSin","Number","EPSILON","sin","sqrt","atan2","tDir","QuaternionLinearSampler","alpha","end","createAnimationSampler","times","path","_defineProperties","props","descriptor","enumerable","_create_class","Constructor","protoProps","staticProps","PObjectType","PLightType","PTextureType","PMaterialType","PBlendMode","PFaceSideMode","PShadowType","PBRShaderGUID","UnlitShaderGUID","PTransform","fromMatrix4","matrix","setMatrix","fromEffectsTransform","trans","getWorldMatrix","effectsTrans","setValid","toEffectsTransform","getMatrix","fromBaseTransform","setTranslation","set","setRotation","setScale","getTranslation","getPosition","setPosition","getRotation","getScale","compose","res","PCoordinate","origin","xAxis","yAxis","zAxis","fromPTransform","invert","copyFrom","rotationMatrix","toMatrix4","fromRotationMatrix","me","elements","PGlobalState","isWebGL2","shaderShared","runtimeEnv","PLAYER_OPTIONS_ENV_EDITOR","compatibleMode","visBoundingBox","renderMode3D","RenderMode3D","none","renderMode3DUVGridSize","reset","hasRenderMode3D","getInstance","instance","isEditorEnv","isDeviceEnv","isTiny3dMode","isGLTFMode","objectIndex","PObject","isNone","isValid","genName","PEntity","_visible","_transform","deleted","update","render","scene","renderer","onVisibleChanged","visible","coordinate","coord","VFX_ITEM_TYPE_3D","StandardShaderSource","build","features","replace","map","join","ShaderFactory","registerInclude","animationVertGLSL","extensionsFragGLSL","toneMappingFragGLSL","texturesVertGLSL","functionsFragGLSL","shadowFragGLSL","shadowCommonVert","StandardShader","getVertexShaderCode","context","featureList","materialType","material","unlit","pbr","shadowBase","primitiveVert","skyboxFilter","skyboxVert","getFragmentShaderCode","metallicRoughnessFrag","shadowPassFrag","skyboxFrag","genVertexShaderCode","genFragmentShaderCode","environment","fetchPBRShaderCode","vertexShaderCode","fragmentShaderCode","fetchUnlitShaderCode","getPBRPassShaderCode","getShadowPassShaderCode","getSkyBoxShaderCode","getNormalVisShaderCode","getBasicVS","hasNormals","getSimpleFilterShaderCode","getQuadFilterVS","getGaussianBlurShaderCodeV2","params","hasUVs","PShaderManager","funcMap","Map","Helper","shadowFilter","normalVis","simpleFilter","genShaderCode","func","get","_instance","PMaterialBase","ZWrite","ZTest","renderType","RenderType","Opaque","alphaClip","alphaCutoff","renderFace","RenderFace","Front","getShaderFeatures","isAlphaClip","isOpaque","Both","getShaderMacros","macroList","updateUniforms","renderMode","uv","debugUVGridSize","setFloat","inFeatureList","finalFeatureList","getFeatureList","shaderManager","shaderResult","isEditorEvn","getMacroList","inMacroList","finalMacroList","setMaterialStates","Transparent","blending","depthTest","depthMask","blendEquation","glContext","FUNC_ADD","blendFunction","ONE","ONE_MINUS_SRC_ALPHA","setFaceSideStates","isBothSide","culling","isBackSide","cullFace","FRONT","frontFace","CCW","BACK","isTransparent","isFrontSide","Back","PMaterialUnlit","baseColorFactor","effectMaterial","baseColorTexture","getTexture","baseColorTextureTrans","PluginHelper","createUVTransform","getColor","getFloat","stringTags","hasBaseColorTexture","setInt","setMatrix3","getBaseColorTexture","setBaseColorTexture","getBaseColorFactor","setBaseColorFactor","PMaterialPBR","useSpecularAA","metallicFactor","roughnessFactor","normalTextureScale","occlusionTextureStrength","emissiveFactor","emissiveIntensity","metallicRoughnessTexture","metallicRoughnessTextureTrans","normalTexture","normalTextureTrans","occlusionTexture","occlusionTextureTrans","emissiveTexture","emissiveTextureTrans","hasMetallicRoughnessTexture","hasNormalTexture","hasOcclusionTexture","hasEmissiveTexture","hasEmissiveValue","getMetallicRoughnessTexture","setMetallicRoughnessTexture","getNormalTexture","setNormalTexture","getOcclusionTexture","setOcclusionTexture","getEmissiveTexture","setEmissiveTexture","luminance","getEmissiveFactor","setEmissiveFactor","getEmissiveIntensity","setEmissiveIntensity","createPluginMaterial","shader","getInstanceId","materialPBR","materialUnlit","PSkybox","owner","renderable","intensity","reflectionsIntensity","specularImageSize","specularMipCount","priority","isBuilt","skybox","irradianceCoeffs","diffuseImage","specularImage","item","renderOrder","setup","brdfLUT","skyboxMaterial","PMaterialSkyboxFilter","sceneCache","getSceneCache","skyboxMesh","getFilterMesh","updateMaterial","mesh","drawGeometry","geometry","sceneStates","camera","viewMatrix","newProjViewMatrix","getNewProjectionMatrix","fov","multiply","available","currentIntensity","currentReflectionsIntensity","hasDiffuseImage","hasIrradianceCoeffs","setVector2","setTexture","coeffs","aliasName","setVector3","PSkyboxType","PSkyboxCreator","checkCubeMapImage","imageList","lastImage","specularImageLists","image","lastList","loadImage","width","height","getBrdfLutTextureOptions","brdfURL","brdfLutImage","brdfLutOpts","wrapS","CLAMP_TO_EDGE","wrapT","magFilter","LINEAR","minFilter","anisotropic","sourceType","TextureSourceType","generateMipmap","flipY","premultiplyAlpha","createBrdfLutTexture","engine","brdfLutTexture","Texture","createSkyboxOptions","skyboxOptions","createSpecularCubeMap","createDiffuseCubeMap","createSkyboxComponentData","specularCubeData","getSpecularCubeMapData","diffuseCubeData","getDiffuseCubeMapData","textureOptionsList","images","textureOptions","id","componentData","generateGUID","dataType","DataType","SkyboxComponent","component","WebGLHelper","createTextureCubeMipmapFromURL","createTextureCubeMipmapFromBuffer","imageDatas","mipmaps","cubemap","mipmap","imageId","url","TEXTURE_CUBE_MAP","cubemapMipTexConfig","createTextureCubeFromURL","createTextureCubeFromBuffer","cubemapTexConfig","getSkyboxParams","skyboxType","getSpecularImageList","getIrradianceCoeffs","getDiffuseImageList","pow","dataArray","getSpecularImageListAntFarm","getSpecularImageListNFT","levelList","currentLevel","CompositionCache","loadSkybox","meshCache","textureCache","geometryCache","renderPassCache","isDestroyed","brdfLutTexOptions","brdfLutTextureName","deleteTexture","tex","getOrCreateTexture","options","newTex","delete","getOrCreateGeometry","geomJson","bins","cachedGeom","geom","createGeometry","cachedMesh","MeshHelper","createFilterMesh","getShadowBasePass","meshList","fboOptions","getRenderPass","getShadowFilterPass","cachedPass","setMeshes","addMesh","renderPass","createRenderPass","deleteMesh","clear","texture","deleteGeometry","pass","deleteRenderPass","getRenderPasses","resList","getBrdfLutTexture","getSkyboxOptions","loadStaticResources","genSkyboxOptions","newParams","BoxMesh","Material","vertex","vertexShader","fragment","fragmentShader","shared","Mesh","Geometry","modelMatrix","viewProjMatrix","positions","lineColor","aPos","FLOAT","mode","LINES","drawStart","drawCount","TwoStatesSet","now","Set","last","forward","temp","forAddedItem","callbackfn","has","forRemovedItem","forNowItem","ModelPlugin","onCompositionConstructed","composition","sceneParams","storage","cache","onCompositionReset","renderFrame","duration","endBehavior","END_BEHAVIOR_FORWARD","VFXItem","getEngine","addItem","comp","addComponent","ModelPluginComponent","fromData","initial","onCompositionDestroyed","prepareResource","keyList","pluginData","env","preprocessScene","precompile","compositions","gpuCapability","level","pbrShaderCode","unlitShaderCode","pbrShaderData","Shader","glslVersion","GLSLVersion","GLSL3","GLSL1","unlitShaderData","addEffectsObjectData","AbstractPlugin","renderSkybox","autoAdjustScene","enableDynamicSort","lateUpdate","dt","tickCount","cameraObject","cameraTransform","getViewMatrix","cameraCoordinate","cameraDirection","cameraFov","cameraAspect","aspect","sceneAABB","getSceneAABB","newAABB","applyMatrix4","newSize","getSize","newWidth","newHeight","finalHeight","center","getCenter","tan","add","items","getComponent","ModelCameraComponent","content","worldMatrix","parentTransform","IDENTITY","invWorldMatrix","newPosition","transformPoint","setTransform","console","updateSceneCamera","tick","onDestroy","PSceneManager","componentName","lightItemCount","getLightItemCount","maxJointCount","getMaxJointCount","updateDefaultCamera","getOptions","getViewportMatrix","ModelLightComponent","meshComp","ModelMeshComponent","skin","getSkinProps","boneNames","Behaviour","effectsClass","getSceneManager","pluginItem","getItemByName","pluginComp","ModelTreeItem","baseTransform","animationManager","PAnimationManager","getNodes","nodes","getNodeById","nodeId","cacheMap","allNodes","find","node","getNodeByName","getNodeTransform","topTransform","Transform","children","tree","child","ModelTreeComponent","createContent","ItemType","sceneManager","setSceneManager","treeOptions","itemId","idWithSubfix","indexOf","substring","TreeComponent","ModelTreePlugin","CameraGestureType","CameraGestureHandlerImp","cameraCoordiante","startParams","mouseEvent","clientX","clientY","clientWidth","clientHeight","getItem","getCurrentTarget","getCurrentType","onKeyEvent","event","cameraID","translate","warn","effectsTransfrom","lengthSquared","speed","pos","rotate_self","onXYMoveBegin","startGesture","onXYMoving","arg0","moveGesture","onXYMoveEnd","endGesture","onZMoveBegin","onZMoving","onZMoveEnd","onRotateBegin","onRotating","onRotateEnd","onRotatePointBegin","point","rotate_focus","focusPoint","onRotatingPoint","onRotatePointEnd","moveTo","rotateTo","setQuaternion","onFocusPoint","distance","newDistance","targetPoint","lookatDir","newOffset","getCameraTransform","updateCameraTransform","dx","dy","newPos","ndx","ndy","dxAngle","PI","dyAngle","newRotation","fromAxisAngle","Y","tempRotation","rotateMatrix","deltaPosition","subtract","updateMainCamera","cameraOptions","registerPlugin","version","logger","EFFECTS","morphWeights","getHitTestParams","force","computeBoundingBox","bounding","isInteger","behavior","ModelBoundingType","box","PMesh","customHitTest","HitTestType","custom","collect","ray","pointInCanvas","hitTesting","direction","worldMatrixData","RayIntersectsBoxWithRotation","sphere","assignWorldTRS","setFromArray","radius","parentId","parent","updateParentInfo","setVisible","getVisible","removeItem","interaction","JSON","parse","stringify","bbox","RendererComponent","MeshComponent","ModelSkyboxComponent","skyboxData","lightData","PLight","LightComponent","cameraData","getWidth","getHeight","PCamera","setQuat","near","nearPlane","far","farPlane","CameraComponent","AnimationComponent","elapsedTime","animation","clips","sampleAnimation","animationClips","clipData","clipObj","ModelAnimationClip","setFromAnimationClip","path2Node","vfxItem","life","positionCurves","curve","keyFrames","getValue","getTargetItem","rotationCurves","scaleCurves","floatCurves","className","properties","property","split","setProperty","clip","rootItem","nameList","findTag","AnimationClip","obj","current","propName","matrixData","local2World","world2Local","newRay","applyMatrix","boxCenter","boxHalfSize","boxMin","boxMax","intersetPoint","intersectBox","insersetPointInWorld","RayBoxTesting","ro","rd","bmin","bmax","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","diff","edge1","edge2","normal","RayTriangleTesting","backfaceCulling","subtractVectors","crossVectors","DdN","sign","DdQxE2","DdE1xQ","QdN","createTexture2D","isBaseColor","tiny3dMode","blob","urlCreator","imageUrl","imageObj","imageData","Blob","mimeType","window","URL","webkitURL","createObjectURL","Image","src","onload","LINEAR_MIPMAP_LINEAR","isPow2","NEAREST_MIPMAP_NEAREST","LINEAR_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","REPEAT","revokeObjectURL","onerror","createTextureList","textures","outTextures","all","getTextureCubeData","cubeData","WebHelper","loadImageFromImageData","getTextureCubeMipmapData","cubeImage","getDefaultTextureFactory","loadSource","cubeImages","maps","cube","level0Size","mipCount","createTextureFromImage","meshData","fboOpts","RenderPass","attachments","colorAttachments","depthStencilAttachment","depthAttachment","clearAction","clearDepth","clearStencil","clearColor","colorAction","TextureLoadAction","depthAction","meshes","viewport","geometries","DestroyOptions","destroy","RenderPassDestroyAttachmentType","colorAttachment","semantics","isTransparentMesh","isSupportFloatTexture","capability","detail","floatTexture","isSupportHalfFloatTexture","halfFloatTexture","globalState","getPlaneGeometry","effectsMaterial","fromIdentity","getPlaneVertexArray","aUV","dataSource","aNormal","halfSize","createLightOptions","light","lightType","range","innerConeAngle","outerConeAngle","createCameraOptions","perspective","znear","zfar","yfov","clipMode","toPluginColor3","toPluginColor4","stName","rotateName","stValue","getVector4","rotateValue","cosTheta","sinTheta","transpose","clamp","minv","maxv","round","focusOnPoint","cameraPosition","YRotationAngle","camPos","targetPos","deltaPos","rotationMat","newCamPos","lookAt","effectsTransform","deviceEnv","jsonScene","materials","dataMap","preprocessTextureOptions","components","textureInfo","texId","texOptions","TEXTURE_2D","newOptions","setupItem3DOptions","compIndexSet","compositionId","refCompositionProps","compIndex","sceneComp","jsonSceneData","meshItem","primitives","prim","primId","riGeometry","studioPrim","MaterialType","studioMat","getTextureObj","inverseBindMatrices","studioSkin","jsonItem","studioItem","jsonAnimations","animations","studioAnimations","jsonAnim","studioAnim","tracks","jsonTrack","j","inputArray","input","outputArray","output","studioTrack","studioSkybox","studioOptions","CheckerHelper","geomOptions","attrib","attribData","getAttributeName","getIndexArray","array","WebGLRenderingContext","startsWith","getImageFileName","ext","begin","lastIndexOf","substr","getCurrnetTimeStr","date","Date","timeStr","toLocaleString","ms","getMilliseconds","padStart","saveFileForURL","filename","document","createElement","setAttribute","href","click","createPlayer","manualRender","canvas","Player","renderFramework","renderOptions","willCaptureImage","sleep","setTimeout","loadImageFromGLTFImage","getCanvasArrayBuffer","toBlob","arrayBuffer","getImageArrayBuffer","cvs","getContext","drawImage","getCanvasImageData","ctx","getImageData","flipImageData","flipped","putImageData","globalCompositeOperation","getWebGLCanvasImageBuffer","pixels","readPixels","RGBA","UNSIGNED_BYTE","AttributeArray","typeSize","compCount","signed","compressed","compressScale","inAttrib","inArray","getData","getLength","GeometryBoxProxy","bindMatrices","abs","getDrawCount","getIndexData","positionAttrib","positionArray","getAttributeData","jointAttrib","weightAttrib","jointArray","weightArray","joint","weight","getBoundingBox","makeEmpty","skinMat","hasAnim","indexSet","posData","posVec","jointData","weightData","setZero","findError","bindMat","addScaledMatrix","resVec","transformVector4","expandByPoint","HitTestingProxy","doubleSided","hasAnimation","skinMatrix","getHitPoint","rayOrigin","rayDirection","mint","p0","p1","p2","q0","q1","q2","i0","i2","r0","r1","r2","vec3","vec4","checkNumber","checkNumberUndef","checkNumber01","checkNumber01Undef","checkPositive","checkNonnegative","checkNonnegativeUndef","checkBoolean","checkBooleanUndef","checkString","checkStringUndef","checkFloat32Array","checkFloat32ArrayUndef","checkParent","checkTexCoord","checkVec2","every","checkVec2Undef","checkVec3","checkNonnegative3","checkVec4","checkNonnegative4","checkNumberArray","checkTexture","checkTextureUndef","checkTexTransform","checkTexTransformUndef","checkMatBlending","MaterialBlending","opaque","masked","translucent","additive","checkMatSide","SideMode","DOUBLE","checkAnimPath","checkAnimInterp","assertGeometry","getDrawStart","assertGeometryBuffer","attribArray","createAttributeArray","dataAttrib","assertModelSkinOptions","joints","skeleton","determinant","assertMatOptions","baseColorTextureTransform","baseColorTextureCoordinate","side","alphaCutOff","metallicRoughnessTextureTransform","metallicRoughnessTextureCoordinate","normalTextureTransform","normalTextureCoordinate","occlusionTextureTransform","occlusionTextureCoordinate","emissiveTextureTransform","emissiveTextureCoordinate","assertPrimOptions","assertModelMeshOptions","morphList","morph","PMorph","morph0","morph1","equals","hide","assertModelCameraOptions","assertModelLightOptions","assertModelSkyboxOptions","pow2","checkModelAnimTrackOptions","interpolation","assertModelAnimOptions","assertTreeOptions","anim","object","simpleObject","prop","Renderer","Float16ArrayWrapper","number","startIndex","toHalf","bytes","floatView","int32View","buffer","bits","m","TextureDataMode","PSkin","jointItem","animationMatrices","textureDataMode","rootBoneItem","rootBoneName","getJointItems","getTextureDataMode","matList","matrixCount","updateSkinMatrices","mat4","computeMeshAnimMatrices","matrixList","normalMatList","inverseWorldMatrix","tempMatrix","localMatrix","multiplyMatrices","normalMat","updateParentItem","parentItem","getJointCount","isTextureDataMode","jointCount","uniformsRequiredForMostFeatures","availableJointUniforms","maxVertexUniforms","uniformsRequiredPerJoint","floor","name2Item","genNodeName","jointItems","boneName","genNodeNameDFS","morphWeightsLength","morphWeightsArray","hasPositionMorph","hasNormalMorph","hasTangentMorph","positionCount","getAttributeMorphCount","positionNameList","normalCount","normalNameList","tangentCount","tangentNameList","countList","count","fill","initWeights","weights","updateWeights","hasMorph","getMorphWeightsArray","attributeNameList","PAnimInterpType","PAnimPathType","PAnimTrack","interp","timeArray","sampler","getInterpInfo","getPathInfo","treeItem","treeComponent","genParentId","queryMesh","updateMorphWeights","getEndTime","nodeIndex","PAnimTexture","isHalfFloat","HALF_FLOAT","format","NEAREST","updateSource","PAnimation","inTrack","track","newTime","ownerItem","delay","animOpts","createAnimation","animationOpts","deltaSeconds","newDeltaSeconds","itemTime","getTreeItem","deg2rad","viewportMatrix","CameraClipMode","landscape","projectionMatrix","reverse","portrait","premultiply","computeViewAABB","tanTheta","yFarCoord","yNearCoord","xFarCoord","xNearCoord","isReversed","getEye","setEye","PCameraManager","winWidth","winHeight","cameraList","defaultCamera","insert","insertCamera","remove","findResult","findIndex","splice","getCameraList","getDefaultCamera","getCameraCount","getActiveCamera","getAspect","ambient","padding","LightType","spot","directional","isDirectional","isPoint","isSpot","isAmbient","getWorldPosition","getWorldDirection","transformNormal","PLightManager","lightList","insertItem","inLight","insertLight","lightCount","_assert_this_initialized","ReferenceError","parentIndex","subMeshes","boundingBox","isDisposed","proxy","EffectsMeshProxy","getParentIndex","parentItemId","rootBone","getSkinObj","getMorphObj","isHide","getGeometry","subMesh","PSubMesh","getItemBoundingBox","maxLightCount","boundingBoxMesh","getEffectsGeometry","getEffectsMaterial","weightsArray","updatedArray","normalMatrix","minPos","maxPos","viewProjectionMatrix","newOrigin","newDirection","boxt","primt","subbox","union","inBounding","hs","minVector","maxVector","halfRadius","getParentId","hasSkin","effectsPriority","isCompressed","setGeometry","setMaterial","setHide","jointMatrixList","jointNormalMatList","half_float","jointMatrixTexture","jointNormalMatTexture","hasWeights","hasJoints","primitiveMacroList","materialMacroList","macro","enableMacro","pbrPass","hasTangents","hasUVCoords","outputDefine","getRenderMode3DDefine","nomralMatrix","updateUniformsByAnimation","updateUniformsByScene","animMatrices","isEmpty","basecolor","metallic","roughness","ao","emissive","jointMatrixNumbers","jointNormalMatNumbers","setMatrixNumberArray","setFloats","isUnlitMaterial","ZERO","PGeometry","getWorldBoundingBox","attributeNames","getAttributeNames","hasAttribute","geomExt","indexArray","setDrawCount","hasPositions","hasColors","itemData","parentComponent","morphObj","hasMorphTarget","getParentNode","parentTree","getMaterials","getMaterialCount","getSkinOpts","skinObj","compName","itemList","lightManager","cameraManager","parentId2Mesh","lastTickSecond","sceneAABBCache","renderedMeshSet","opts","clean","initGlobalState","capbility","newTransform","deltaTime","activeCamera","winSize","sceneRadius","dynamicSortMeshes","states","meshComponents","priorityList","enabled","sort","atransparent","btransparent","aposition","bposition","anewPos","bnewPos","prePriority","sceneBox","getWorldTransform","meshBox","printDebugInfo","cam","getRenderer","shaderLightCount","JSONConverter","keepIBLData","treeInfo","TreeInfo","downloader","Downloader","processScene","sceneData","sceneJSON","oldScene","oldBinUrls","binFiles","bin","newScene","isObject","loadJSON","getStandardJSON","loadBins","playerVersion","web","native","shaders","setImage","setComponent","setItem","setComposition","newImages","newTextures","jobs","loadedMipmaps","newMipmaps","loadMipmapImage","img","sceneImage","dataPath","keepImageSource","sourceFrom","newComponents","createSkyboxComponent","createLightComponent","treeComp","createItemsFromTreeComponent","createMeshComponent","getAllTreeNodeList","downloadJSON","status","responseText","downloadBinary","skyboxComponent","meshOptions","geometryPropsList","materialDatas","geomProps","getMaterialData","oldIndices","newIndices","geometryData","getGeometryDataFromPropsList","meshComponent","getTreeItemByNodeId","treeNodeList","getTreeNodeListByNodeId","setupBoneData","treeData","VFXItemData","renderLevel","pn","pluginName","getTransformData","childItem","subIndex","createAnimationComponent","lightOptions","lightComponent","animationComponent","totalAnimationTime","points","controlPoints","lineValue","p3","slerpQuaternions","BezierKeyframeType","LINE","getTreeNode","getNodePath","BEZIER_CURVE_QUAT","BEZIER_CURVE","lerpVectors","BEZIER_CURVE_PATH","floats","colors","divide","getTextureData","newMaterial","macros","ints","vector4s","setupMaterial","oldMat","newMat","texIndex","texTransform","texProperty","eulerHint","bindMatrixArray","id2Node","currentItem","nodeList","tree2NodeList","nodeList2Tree","nodeId2Node","node2Path","setNodePath","getTreeNodeListByTreeId","treeId","getGeometryDataFromOptions","vertexCount","verticesType","VertexFormatType","Float32","verticesNormalize","uvsType","uvsNormalize","normalsType","normalsNormalize","modelData","vertices","uvs","normals","glType2VertexFormatType","verticesOffset","getOffset","uvsOffset","normalsOffset","indicesType","IndexFormatType","UInt16","UInt32","vertexData","channels","semantic","VertexBufferSemantic","Position","dimension","Uv","Normal","GeometryType","TRIANGLES","indexFormat","indexOffset","encodeVertexData","geomPropsList","totalCount","indexCount","geom0","geom1","isSame","array1","array2","mergeTypedArray","getVertexCount","createGeometryData","formatType","Int8","UInt8","Int16","totalByteLength","bufferOffset","vertexChannels","vertexBufferSemanticMap","vertexChannel","subBuffer","byteOffset","None","toBase64String","totalSize","ArrayBuffer","uint16View","uint8View","binaryString","String","fromCharCode","btoa","aUV2","aTangent","aColor","aJoints","aWeights","a_Position","a_UV","a_UV1","a_UV2","a_Normal","a_Tangent","a_Color","a_Joints","a_Joint1","a_Weights","a_Weight1","a_Target_Position0","a_Target_Position1","a_Target_Position2","a_Target_Position3","a_Target_Position4","a_Target_Position5","a_Target_Position6","a_Target_Position7","a_Target_Normal0","a_Target_Normal1","a_Target_Normal2","a_Target_Normal3","a_Target_Tangent0","a_Target_Tangent1","a_Target_Tangent2","a_Target_Tangent3","getDefaultEffectsGLTFLoader","defaultGLTFLoader","LoaderImpl","setDefaultEffectsGLTFLoader","loader","gltfSkins","gltfMeshs","gltfLights","gltfCameras","gltfImages","gltfTextures","gltfMaterials","gltfAnimations","gltfImageBasedLights","timelineAssetId","imageElements","EndBehavior","restart","timelineAsset","sceneBindings","loadScene","gltfResource","gltfScene","sceneOptions","loaderOptions","gltf","resource","gltfImage","processGLTFResource","scenes","skins","lights","cameras","imageBasedLights","materialData","meshesComponentData","checkMeshComponentData","camerasComponentData","lightsComponentData","animationsComponentData","effects","playAllAnimation","playAnimation","animationClipData","tryAddSkybox","skyboxVis","vfxItemData","getLoadResult","baseColorId","emissiveIdSet","texData","newId","newTexData","textureDataMap","textureIdMap","addTextures","baseColorIdSet","processMaterialData","processMaterialTexture","processCameraComponentData","processLightComponentData","cubeTextures","ibl","imageBaseLightData","diffuseTexture","processComponentData","processSkyboxComponentData","CameraType","processTextureOptions","textureName","itemIds","shapes","plugins","miscs","TimelineAsset","computeSceneAABB","getRemarkString","addLight","addCamera","skyboxInfo","ignoreSkybox","freeze","typeName","typ","NFT","FARM","geometryDataMap","componentDataMap","parentTransformMap","fromVector3","bounds","getPlayAnimationIndex","isPlayAllAnimation","animationInfo","animationIndex","isPlayAnimation","remark","getCompositionDuration","getItemDuration","getEndBehavior","getSkyboxType","isSkyboxVis","isEnvironmentTest","includes","processLight","fromGLTF","l","scaleColorVal","processCamera","processMaterial","strength","createTreeOptions","treeNode","rootNodes","root","createAnimations","channel","newAnim","primitive","hasSkinAnim","GeometryProxy","createMaterial","MaterialProxy","createTextureCube","imgList","createSkybox","irradianceCoefficients","inSpecularImages","specularImages","outImg","newIrradianceCoeffs","createDefaultSkybox","scaleColorVec","vec","getPBRShaderProperties","getUnlitShaderProperties","getDefaultPBRMaterialData","getDefaultUnlitMaterialData","gltfGeometry","hasSkinAnimation","_getBufferAttrib","itemSize","normalized","texCoordAttrib","getTexCoord","getTargetPosition","getAttribute","getTargetNormal","getTargetTangent","hasPosition","hasNormal","normalAttrib","hasTangent","tangentAttrib","texCoordList","attribName","jointAttribute","weightAttribute","getNormal","getTangent","getJoints","getWeights","hasTexCoord","texCoordCount","hasJointAttribute","hasWeightAttribute","texCoords","gltfMaterial","getTextureObject","texInfo","getTextureCoord","texCoord","getTextureTransform","extensions","KHR_texture_transform","getSpecularAA","extras","isUnlit","GLTFHelper","alphaMode","enableShadow","baseColorTextureObj","baseColorTextureCoord","baseColorTextureTransfrom","metallicRoughnessTextureObj","metallicRoughnessTextureCoord","metallicRoughnessTextureTransfrom","metalicFactor","normalTextureObj","normalTextureCoord","normalTextureTransfrom","occlusionTextureObj","occlusionTextureCoord","occlusionTextureTransfrom","emissiveTextureObj","emissiveTextureCoord","emissiveTextureTransfrom","hasEmissive","factor","KHR_materials_unlit","createBoxFromGLTFBound","bound"],"mappings":"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"}
|