@galacean/effects-plugin-model 2.0.0-alpha.12 → 2.0.0-alpha.13

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/plugin/const.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/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_inherits.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_instanceof.js","../../../node_modules/.pnpm/tslib@2.6.2/node_modules/tslib/tslib.es6.mjs","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_create_class.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_extends.js","../src/runtime/math.ts","../src/runtime/common.ts","../src/runtime/object.ts","../../../packages/effects-helper/dist/serialize/geometry.js","../src/runtime/anim-sampler.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/utility/ri-helper.ts","../src/runtime/mesh.ts","../src/utility/ts-helper.ts","../src/runtime/scene.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/utility/debug-helper.ts","../src/plugin/model-item.ts","../src/utility/hit-test-helper.ts","../src/utility/plugin-helper.ts","../src/runtime/material.ts","../src/runtime/skybox.ts","../src/runtime/cache.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/gltf/loader-helper.ts","../src/gltf/loader-impl.ts","../../../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","../src/gltf/json-converter.ts","../src/index.ts"],"sourcesContent":["import type { spec } from '@galacean/effects';\n\n/**\n * Model 插件元素类型\n */\nexport const VFX_ITEM_TYPE_3D = 'PluginModel' as spec.ItemType;\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 _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","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","/******************************************************************************\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","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","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","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 { 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 { 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","/**\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","import type { Geometry, Engine, VFXItemContent, VFXItem } from '@galacean/effects';\nimport { glContext, Texture, TextureSourceType } from '@galacean/effects';\nimport type {\n ModelSkinOptions,\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 parentItem?: VFXItem<VFXItemContent>;\n /**\n * 骨骼索引\n */\n skeleton = 0;\n /**\n * 关节索引\n */\n jointList: number[] = [];\n /**\n * 逆绑定矩阵\n */\n inverseBindMatrices: Matrix4[] = [];\n /**\n * 动画矩阵\n */\n animationMatrices: Matrix4[] = [];\n /**\n * 纹理数据模式\n */\n textureDataMode = TextureDataMode.none;\n\n /**\n * 创建蒙皮对象\n * @param options - 蒙皮相关数据\n * @param engine - 引擎对象\n * @param parentItem - 场景树父元素\n */\n create (options: ModelSkinOptions, engine: Engine, parentItem?: VFXItem<VFXItemContent>) {\n this.name = this.genName(options.name ?? 'Unnamed skin');\n this.type = PObjectType.skin;\n //\n this.parentItem = parentItem;\n this.skeleton = options.skeleton ?? -1;\n this.jointList = options.joints;\n this.animationMatrices = [];\n //\n this.inverseBindMatrices = [];\n\n //\n this.textureDataMode = this.getTextureDataMode(this.getJointCount(), engine);\n const matList = options.inverseBindMatrices;\n\n if (matList !== undefined && matList.length > 0) {\n if (matList.length % 16 !== 0 || matList.length !== this.jointList.length * 16) {\n throw new Error(`Invalid array length, invert bind matrices ${matList.length}, joint array ${this.jointList.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 const parentTree = this.parentItem?.getComponent(ModelTreeComponent);\n\n if (parentTree !== undefined) {\n for (let i = 0; i < this.jointList.length; i++) {\n const joint = this.jointList[i];\n const node = parentTree.content.getNodeById(joint);\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 if (node === undefined) {\n console.error(`Can't find joint ${joint} in node tree ${this.parentItem}.`);\n\n break;\n }\n const mat4 = node.transform.getWorldMatrix();\n\n this.animationMatrices.push(mat4.clone());\n }\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<VFXItemContent>) {\n this.parentItem = parentItem;\n }\n\n /**\n * 获取关节点数\n * @returns\n */\n getJointCount (): number {\n return this.jointList.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.parentItem = undefined;\n this.jointList = [];\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\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?: Float32Array;\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 = new Float32Array(this.morphWeightsLength);\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 override dispose (): void {\n this.morphWeightsArray = undefined;\n }\n\n /**\n * 初始化 Morph target 的权重数组\n * @param weights - glTF Mesh 的权重数组,长度必须严格一致\n */\n initWeights (weights: number[]) {\n if (this.morphWeightsArray === undefined) {\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 /**\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 (): Float32Array {\n return this.morphWeightsArray as Float32Array;\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<VFXItemContent>, 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<VFXItemContent>, 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<VFXItemContent>;\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<VFXItemContent>) {\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 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.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);\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 fovy - 视角\n * @param aspect - 纵横比\n * @param nearPlane - 近裁剪平面\n * @param farPlane - 远裁剪平面\n * @param position - 位置\n * @param rotation - 旋转\n * @param clipMode - 剪裁模式\n */\n updateDefaultCamera (\n fovy: number,\n aspect: number,\n nearPlane: number,\n farPlane: number,\n position: Vector3,\n rotation: Quaternion,\n clipMode: number,\n ) {\n this.defaultCamera.fov = fovy;\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 { 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('_ModelMatrix', modelMatrix);\n material.setMatrix('_ViewProjectionMatrix', 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 #version 100\n precision highp float;\n\n uniform mat4 _ModelMatrix;\n uniform mat4 _ViewProjectionMatrix;\n uniform vec3 _PositionList[8];\n attribute vec3 aPos;\n void main(){\n int index = int(aPos.x + 0.5);\n vec4 pos = _ModelMatrix * vec4(_PositionList[index], 1);\n gl_Position = _ViewProjectionMatrix * pos;\n }\n `;\n }\n\n /**\n * 获取片段着色器代码\n */\n get fragmentShader (): string {\n return `\n #version 100\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","import type { Texture, Engine, math, VFXItemContent, 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<VFXItemContent>;\n /**\n * 父元素索引\n */\n parentItemId?: string;\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<VFXItemContent>,\n ) {\n super();\n const proxy = new EffectsMeshProxy(meshData, 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.skin = proxy.getSkinObj(engine);\n this.morph = proxy.getMorphObj();\n this.hide = proxy.isHide();\n this.priority = owner?.item?.listIndex || 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 }\n\n /**\n * 渲染 Mesh 对象,需要将内部相关数据传给渲染器\n * @param scene - 场景\n * @param renderer - 渲染器\n */\n override render (scene: PSceneManager, renderer: Renderer) {\n this.skin?.updateSkinMatrices();\n this.updateMaterial(scene);\n\n this.subMeshes.forEach((subMesh, index) => {\n\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<VFXItemContent>) {\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.getJointCount();\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 * 着色器部分 Uniform 数据来自 uniformSemantics\n * @param lightCount - 灯光数目\n * @param uniformSemantics - Uniform 语义数据\n * @param skybox - 天空盒\n */\n build (lightCount: number, uniformSemantics: { [k: string]: any }, skybox?: PSkybox) {\n const globalState = PGlobalState.getInstance();\n const primitiveMacroList = this.getMacroList(lightCount, true, skybox);\n const materialMacroList = this.material.getMacroList(primitiveMacroList);\n const newSemantics = uniformSemantics ?? {};\n\n // FIXME: Semantics整体移除\n newSemantics['_ViewProjectionMatrix'] = 'VIEWPROJECTION';\n //newSemantics[\"uView\"] = 'VIEWINVERSE';\n newSemantics['_ModelMatrix'] = 'MODEL';\n newSemantics['uEditorTransform'] = 'EDITOR_TRANSFORM';\n let material: Material;\n const isWebGL2 = PGlobalState.getInstance().isWebGL2;\n\n if (this.material.effectMaterial) {\n material = this.material.effectMaterial;\n // FIXME: Semantics整体移除\n // @ts-expect-error\n material.uniformSemantics = newSemantics;\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 uniformSemantics: newSemantics,\n }\n );\n this.material.setMaterialStates(material);\n }\n }\n\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.getJointCount() });\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.isDoubleSide();\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('_ModelMatrix', 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 as Float32Array;\n const morphWeightNumbers: number[] = [];\n\n morphWeights.forEach(val => morphWeightNumbers.push(val));\n material.setFloats('_morphWeights', morphWeightNumbers);\n }\n }\n\n private updateUniformsByScene (sceneStates: PSceneStates) {\n const material = this.getEffectsMaterial();\n\n material.setMatrix('_ViewProjectionMatrix', 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 morphObj: PMorph;\n\n constructor (\n public itemData: ModelMeshComponentData,\n public parentItem?: VFXItem<VFXItemContent>,\n ) {\n this.data = itemData;\n this.morphObj = new PMorph();\n\n // FIXME: 支持Morph动画\n // Morph 对象创建,需要为每个 Primitive 中 Geometry 对象创建 Morph\n // 并且要求创建的 Morph 对象状态是相同的,否则就报错\n // let isSuccess = true;\n // const morphObj = new PMorph();\n // const { primitives, morph } = this.data;\n\n // primitives.forEach((prim, idx) => {\n // if (idx === 0) {\n // morphObj.create(prim.geometry as unknown as Geometry);\n // } else {\n // const tempMorph = new PMorph();\n\n // if (!tempMorph.create(prim.geometry as unknown as Geometry)) {\n // isSuccess = false;\n // } else {\n // if (!morphObj.equals(tempMorph)) {\n // isSuccess = false;\n // console.error(`Morpth target mismatch between primtives: ${JSON.stringify(morphObj)}, ${JSON.stringify(tempMorph)}`);\n // }\n // }\n // }\n // });\n\n // if (isSuccess) {\n // // 设置初始权重数组\n // if (morph?.weights !== undefined) {\n // morphObj.initWeights(morph.weights);\n // }\n\n // this.morphObj = morphObj;\n // } else {\n // this.morphObj = new PMorph();\n // }\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 // FIXME: skin\n //return this.options.skin !== undefined;\n return false;\n }\n\n getSkinOpts () {\n // FIXME: skin\n //return this.options.skin;\n return;\n }\n\n getSkinObj (engine: Engine): PSkin | undefined {\n const skin = this.getSkinOpts();\n\n if (skin !== undefined) {\n const skinObj = new PSkin();\n\n skinObj.create(skin, engine, this.parentItem);\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","/**\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 { 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 { Vector3, 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';\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 * 场景状态接口,每次场景管理器 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 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 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.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) {\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 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 skybox: this.skybox,\n };\n\n // if (this.enableDynamicSort) {\n // this.dynamicSortMeshes(states);\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 meshList: Mesh[] = [];\n const priorityList: number[] = [];\n const meshSet = this.renderedMeshSet.now;\n\n meshSet.forEach(mesh => {\n meshList.push(mesh);\n priorityList.push(mesh.priority);\n });\n priorityList.sort((a, b) => a - b);\n\n // 按照 Tiny 排序算法,对 Mesh 对象进行排序\n // 将透明和不透明物体拆开,从而渲染正确\n const viewMatrix = states.viewMatrix;\n\n meshList.sort((a: Mesh, b: Mesh) => {\n const atransparent = WebGLHelper.isTransparentMesh(a);\n const btransparent = WebGLHelper.isTransparentMesh(b);\n\n if (atransparent && btransparent) {\n const aposition = Vector3.fromArray(a.worldMatrix.elements, 12);\n const bposition = Vector3.fromArray(b.worldMatrix.elements, 12);\n const anewPos = viewMatrix.transformPoint(aposition);\n const bnewPos = viewMatrix.transformPoint(bposition);\n\n return anewPos.z - bnewPos.z;\n } else if (atransparent) {\n return 1;\n } else if (btransparent) {\n return -1;\n } else {\n return 0;\n }\n });\n\n // 重新赋值渲染优先级\n for (let i = 0; i < meshList.length; i++) {\n const mesh = meshList[i];\n const priority = priorityList[i];\n\n mesh.priority = priority;\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 { default as animationVertGLSL } from './standard/animation.vert.glsl';\nimport { default as extensionsFragGLSL } from './standard/extensions.frag.glsl';\nimport { default as tonemappingFragGLSL } from './standard/tonemapping.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 webglCompatibilityGLSL } from './standard/webglcompatibility.glsl';\nimport { default as shadowCommonVert } from './standard/shadowCommon.vert.glsl';\n\nconst glsl: Record<string, string> = {\n 'animation.vert.glsl': animationVertGLSL,\n 'extensions.frag.glsl': extensionsFragGLSL,\n 'tonemapping.frag.glsl': tonemappingFragGLSL,\n 'textures.vert.glsl': texturesVertGLSL,\n 'functions.frag.glsl': functionsFragGLSL,\n 'shadow.frag.glsl': shadowFragGLSL,\n 'webglCompatibility.glsl': webglCompatibilityGLSL,\n 'shadowCommon.vert.glsl': shadowCommonVert,\n};\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[], isWebGL2: boolean): string {\n let match: RegExpExecArray | null;\n\n while ((match = (/#include <(.+)>/gm).exec(source)) !== null) {\n source = source.replace(match[0], glsl[match[1]]);\n }\n\n source = source.replace(/#define FEATURES/,\n features.map(value => `#define ${value}`).join('\\n'));\n\n if (isWebGL2) { return '#version 300 es\\n' + source; } else { return '#version 100\\n' + source; }\n }\n\n export function getSourceCode (source: string, isWebGL2?: boolean): string {\n let match: RegExpExecArray | null;\n\n while ((match = (/#include <(.+)>/gm).exec(source)) !== null) {\n source = source.replace(match[0], glsl[match[1]]);\n }\n\n if (isWebGL2) {\n return '#version 300 es\\n' + source;\n } else {\n return '#version 100\\n' + source;\n }\n }\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/shadowpass.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 isWebGL2 = context.isWebGL2;\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, isWebGL2);\n case PMaterialType.skyboxFilter:\n return StandardShaderSource.build(skyboxVert, features, isWebGL2);\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 isWebGL2 = context.isWebGL2;\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, isWebGL2);\n case PMaterialType.shadowBase:\n return StandardShaderSource.build(shadowPassFrag, features, isWebGL2);\n case PMaterialType.skyboxFilter:\n return StandardShaderSource.build(skyboxFrag, features, isWebGL2);\n default:\n throw new Error(`Invalid material type ${materialType} for getFragmentShaderString!`);\n }\n }\n\n static genVertexShaderCode (materialType: PMaterialType, isWebGL2?: boolean): string {\n switch (materialType) {\n case PMaterialType.unlit:\n case PMaterialType.pbr:\n case PMaterialType.shadowBase:\n return StandardShaderSource.getSourceCode(primitiveVert, isWebGL2);\n case PMaterialType.skyboxFilter:\n return StandardShaderSource.getSourceCode(skyboxVert, isWebGL2);\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, isWebGL2?: boolean): string {\n switch (materialType) {\n case PMaterialType.unlit:\n case PMaterialType.pbr:\n return StandardShaderSource.getSourceCode(metallicRoughnessFrag, isWebGL2);\n case PMaterialType.shadowBase:\n return StandardShaderSource.getSourceCode(shadowPassFrag, isWebGL2);\n case PMaterialType.skyboxFilter:\n return StandardShaderSource.getSourceCode(skyboxFrag, isWebGL2);\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 (isWebGL2?: boolean): PShaderResults {\n const vertexShaderCode = StandardShader.genVertexShaderCode(PMaterialType.pbr, isWebGL2);\n const fragmentShaderCode = StandardShader.genFragmentShaderCode(PMaterialType.pbr, isWebGL2);\n\n return {\n vertexShaderCode,\n fragmentShaderCode,\n };\n}\n\nexport function fetchUnlitShaderCode (isWebGL2?: boolean): PShaderResults {\n const vertexShaderCode = StandardShader.genVertexShaderCode(PMaterialType.unlit, isWebGL2);\n const fragmentShaderCode = StandardShader.genFragmentShaderCode(PMaterialType.unlit, isWebGL2);\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 _ModelMatrix;\n uniform mat4 _ViewProjectionMatrix;\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 = _ModelMatrix * 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(_ModelMatrix * vec4(aNormal, 0)));\n #endif\n\n gl_Position = _ViewProjectionMatrix * 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 { Player } from '@galacean/effects';\nimport type { PMesh } from '../runtime/mesh';\nimport { VFX_ITEM_TYPE_3D } from '../plugin/const';\nimport { PObjectType } from '../runtime/common';\nimport { ModelMeshComponent } from '../plugin/model-item';\n\ntype WebGLContext = WebGL2RenderingContext | WebGLRenderingContext;\nconst HookSuffix = '_Native';\nconst number2GLName = new Map();\n\n/**\n * Hook WebGL 相关的 API 调用\n * @param ctx - WebGL 上下文\n */\nexport function HookOGLFunc (ctx: WebGLContext) {\n console.info('HookOGLFunc ' + Object.getPrototypeOf(ctx));\n let hookCount = 0;\n\n for (const name in Object.getPrototypeOf(ctx)) {\n if (name === 'getError') { continue; }\n\n if (typeof ctx[name as keyof WebGLContext] === 'function') {\n ++hookCount;\n //console.log(\"HookFunc \" + each);\n // @ts-expect-error\n ctx[name + HookSuffix] = ctx[name];\n // @ts-expect-error\n ctx[name] = GetHookFunc(ctx, name);\n }\n }\n console.info('HookCount ' + hookCount);\n\n GetNum2GLName(ctx);\n}\n\nfunction FormatFuncInfo (name: string, args: IArguments): string {\n const prefix = `${name}`;\n const argList: string[] = [];\n\n for (let i = 0; i < args.length; i++) {\n if (typeof args[i] == 'number' && number2GLName.has(args[i])) {\n argList.push(number2GLName.get(args[i]) + `(${args[i]})`);\n continue;\n }\n argList.push(args[i]?.toString());\n }\n\n return prefix + (argList.length > 0 ? '(' + argList.join(', ') + ')' : '()');\n}\n\nfunction FormatErrorInfo (error: GLenum): string {\n const err2Info = new Map();\n\n err2Info.set(WebGLRenderingContext.NO_ERROR, 'NO_ERROR');\n err2Info.set(WebGLRenderingContext.INVALID_ENUM, 'INVALID_ENUM');\n err2Info.set(WebGLRenderingContext.INVALID_VALUE, 'INVALID_VALUE');\n err2Info.set(WebGLRenderingContext.INVALID_OPERATION, 'INVALID_OPERATION');\n err2Info.set(WebGLRenderingContext.INVALID_FRAMEBUFFER_OPERATION, 'INVALID_FRAMEBUFFER_OPERATION');\n err2Info.set(WebGLRenderingContext.OUT_OF_MEMORY, 'OUT_OF_MEMORY');\n err2Info.set(WebGLRenderingContext.CONTEXT_LOST_WEBGL, 'CONTEXT_LOST_WEBGL');\n\n return (err2Info.get(error) ?? 'UNKNOWN_ERROR') + `(${error})`;\n}\n\nfunction GetHookFunc (ctx: WebGLContext, name: string) {\n function test () {\n //console.trace();\n // @ts-expect-error\n const ret = ctx[name + HookSuffix].apply(this, arguments);\n const error: GLenum = ctx.getError();\n\n if (error > 0) {\n console.info('OpenGLError: ' + FormatErrorInfo(error) + ' ===> ' + FormatFuncInfo(name, arguments));\n console.trace();\n } else {\n console.info(FormatFuncInfo(name, arguments));\n }\n\n return ret;\n }\n\n return test;\n}\n\nfunction GetNum2GLName (ctx: WebGLContext) {\n for (const name in Object.getPrototypeOf(ctx)) {\n if (typeof ctx[name as keyof WebGLContext] === 'number') {\n number2GLName.set(ctx[name as keyof WebGLContext], name);\n }\n }\n}\n\n/**\n * 获取播放器关联的 GPU 信息\n * @param player - 播放器\n * @returns\n */\nexport function getRendererGPUInfo (player: Player) {\n const instance = player.gpuCapability;\n\n return JSON.stringify(instance, undefined, 2);\n}\n\n/**\n * 获取播放器中 PMesh 对象列表\n * @param player - 播放器\n * @returns\n */\nexport function getPMeshList (player: Player) {\n const meshList: PMesh[] = [];\n\n const composition = player.getCompositions()[0];\n\n composition?.items.forEach(item => {\n if (item.type === VFX_ITEM_TYPE_3D) {\n const meshComponent = item.getComponent(ModelMeshComponent);\n\n if (meshComponent?.content.type === PObjectType.mesh) {\n meshList.push(meshComponent.content);\n }\n }\n });\n\n return meshList;\n}\n","import type {\n HitTestBoxParams,\n HitTestCustomParams,\n HitTestSphereParams,\n Engine,\n Renderer,\n TransformAnimationPlayable,\n} from '@galacean/effects';\nimport { HitTestType, ItemBehaviour, RendererComponent, TimelineComponent, effectsClass, spec } from '@galacean/effects';\nimport { Vector3 } from '../runtime/math';\nimport type { Ray, Euler, Vector2 } from '../runtime/math';\nimport type {\n ModelItemBounding,\n ModelMeshComponentData,\n ModelCameraComponentData,\n ModelSkyboxComponentData,\n ModelLightComponentData,\n} from '../index';\nimport { VFX_ITEM_TYPE_3D } from '../index';\nimport type { PSceneManager } from '../runtime';\nimport { PCamera, PLight, PMesh, PSkybox } from '../runtime';\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 /**\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.createContent();\n this.item.type = VFX_ITEM_TYPE_3D;\n this.priority = this.item.listIndex;\n this.sceneManager = getSceneManager(this);\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 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.listIndex;\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 ItemBehaviour {\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 ItemBehaviour {\n /**\n * 内部相机对象\n */\n content: PCamera;\n /**\n * 参数\n */\n data?: ModelCameraComponentData;\n /**\n * 时间轴组件\n */\n timeline?: TimelineComponent;\n\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 this.timeline = this.item.getComponent(TimelineComponent);\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 const clip = this.timeline?.findTrack('AnimationTrack')?.findClip('AnimationTimelineClip');\n\n if (position !== undefined) {\n this.transform.setPosition(position.x, position.y, position.z);\n if (clip) {\n (clip.playable as TransformAnimationPlayable).originalTransform.position = position.clone();\n }\n }\n if (rotation !== undefined) {\n this.transform.setRotation(rotation.x, rotation.y, rotation.z);\n if (clip) {\n (clip.playable as TransformAnimationPlayable).originalTransform.rotation = rotation.clone();\n }\n }\n this.updateMainCamera();\n }\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} 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 mesh - gl mesh 对象\n * @return 是否半透明\n */\n static isTransparentMesh (mesh: Mesh): boolean {\n return mesh.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 * @param uniformSemantics - 传入的 Uniform 数据\n * @returns Mesh 对象\n */\n static createFilterMesh (engine: Engine, name: string, material: PMaterialBase, uniformSemantics: { [k: string]: any }): 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 uniformSemantics,\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 (texOptions as Texture2DSourceOptionsImage).generateMipmap = true;\n if (!isBaseColor) {\n texOptions.premultiplyAlpha = true;\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 { 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\nexport enum RenderType {\n Opaque = 'Opaque',\n Mask = 'Mask',\n Blend = 'Blend',\n}\n\nexport enum CullMode {\n Front = 'Front',\n Back = 'Back',\n Double = 'Double',\n}\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: RenderType = RenderType.Opaque;\n /**\n * Alpha 测试截断值\n */\n alphaCutOff = 0.5;\n /**\n * 面侧模式,默认是正面\n */\n cullMode: CullMode = CullMode.Front;\n\n /**\n * 获取着色器特性列表,根据材质状态\n * @returns 特性列表\n */\n getShaderFeatures (): string[] {\n const featureList: string[] = [];\n\n if (this.isOpaque()) {\n featureList.push('ALPHAMODE_OPAQUE 1');\n } else if (this.isMasked()) {\n featureList.push('ALPHAMODE_MASK 1');\n }\n\n if (this.cullMode === CullMode.Double) {\n featureList.push('DOUBLE_SIDED 1');\n }\n\n return featureList;\n }\n\n getShaderMacros (): MacroInfo[] {\n const macroList: MacroInfo[] = [];\n\n if (this.isOpaque()) {\n macroList.push({ name: 'ALPHAMODE_OPAQUE' });\n } else if (this.isMasked()) {\n macroList.push({ name: 'ALPHAMODE_MASK' });\n }\n\n if (this.cullMode === CullMode.Double) {\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 const isWebGL2 = PGlobalState.getInstance().isWebGL2;\n\n if (isWebGL2) {\n finalFeatureList.push('WEBGL2');\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 const isWebGL2 = PGlobalState.getInstance().isWebGL2;\n\n if (isWebGL2) {\n finalMacroList.push({ name: 'WEBGL2' });\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 === RenderType.Blend) {\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.isDoubleSide()) {\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 === RenderType.Opaque;\n }\n\n /**\n * 是否遮罩\n * @returns\n */\n isMasked (): boolean {\n return this.renderType === RenderType.Mask;\n }\n\n /**\n * 是否半透明\n * @returns\n */\n isBlend (): boolean {\n return this.renderType === RenderType.Blend;\n }\n\n /**\n * 是否正面模式\n * @returns\n */\n isFrontSide (): boolean {\n return this.cullMode === CullMode.Front;\n }\n\n /**\n * 是否背面模式\n * @returns\n */\n isBackSide (): boolean {\n return this.cullMode === CullMode.Back;\n }\n\n /**\n * 是否双面模式\n * @returns\n */\n isDoubleSide (): boolean {\n return this.cullMode === CullMode.Double;\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.stringTags['ZWrite'] !== 'false';\n this.ZTest = material.stringTags['ZTest'] !== 'false';\n this.renderType = material.stringTags['RenderType'] as RenderType ?? RenderType.Opaque;\n this.alphaCutOff = material.getFloat('_AlphaCutoff') ?? 0;\n this.cullMode = material.stringTags['Cull'] as CullMode ?? CullMode.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.stringTags['ZWrite'] !== 'false';\n this.ZTest = material.stringTags['ZTest'] !== 'false';\n this.renderType = material.stringTags['RenderType'] as RenderType ?? RenderType.Opaque;\n this.alphaCutOff = material.getFloat('_AlphaCutoff') ?? 0;\n this.cullMode = material.stringTags['Cull'] as CullMode ?? CullMode.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?.listIndex || 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);\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 (engine: Engine, params: PSkyboxParams) {\n const specularCubeData = this.getSpecularCubeMapData(engine, params);\n const diffuseCubeData = this.getDiffuseCubeMapData(engine, 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 (engine: Engine, 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 (engine: Engine, 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 - 1,\n };\n\n return params;\n }\n\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 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 * @param uniformSemantics - Uniform 语义信息\n * @returns\n */\n getFilterMesh (name: string, material: PMaterialBase, uniformSemantics: Record<string, any>): 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, uniformSemantics);\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 {\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 ItemBehaviour,\n PLAYER_OPTIONS_ENV_EDITOR,\n effectsClass,\n GLSLVersion,\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 } 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(isWebGL2);\n const unlitShaderCode = fetchUnlitShaderCode(isWebGL2);\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 ItemBehaviour {\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: any): void {\n super.fromData(data);\n //\n const options = data as ModelPluginOptions;\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 });\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());\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\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 { Transform, ItemBehaviour, spec, effectsClass } from '@galacean/effects';\nimport type { TimelineComponent, VFXItemContent, Engine, VFXItem } from '@galacean/effects';\nimport type { ModelTreeOptions, ModelTreeContent } 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<VFXItemContent>) {\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 ItemBehaviour {\n /**\n * 内部节点树元素\n */\n content: ModelTreeItem;\n /**\n * 参数\n */\n options?: ModelTreeContent;\n /**\n * 时间轴组件\n */\n timeline?: TimelineComponent;\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, VFXItemContent } 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(`can't find camera item ${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: 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.scale,\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 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('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('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('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('invalid target');\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('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('not implement');\n }\n } else {\n console.warn('invalid move type');\n }\n\n return this.composition.camera.getOptions();\n }\n\n private setTransform (item: VFXItem<VFXItemContent>, 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<VFXItemContent>, 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<VFXItemContent>, 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 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","import type { TransformProps, Texture, Attribute, Engine, math } from '@galacean/effects';\nimport { Transform as EffectsTransform, spec, glContext, Geometry } from '@galacean/effects';\nimport type {\n Loader,\n LoaderOptions,\n SkyboxType,\n LoadSceneOptions,\n LoadSceneResult,\n} from './protocol';\nimport type {\n ModelAnimationOptions,\n ModelAnimTrackOptions,\n ModelMeshOptions,\n ModelCameraOptions,\n ModelMaterialOptions,\n ModelLightOptions,\n ModelSkyboxOptions,\n ModelItemBoundingBox,\n ModelBaseItem,\n ModelItemMesh,\n ModelItemLight,\n ModelItemCamera,\n ModelItemSkybox,\n ModelTreeOptions,\n ModelPrimitiveOptions,\n ModelItemTree,\n ModelSkinOptions,\n ModelTextureTransform,\n} from '../index';\nimport { Vector3, Box3, Matrix4 } from '../runtime/math';\nimport { LoaderHelper } from './loader-helper';\nimport { WebGLHelper, PluginHelper } from '../utility/plugin-helper';\nimport type {\n GLTFSkin,\n GLTFMesh,\n GLTFImage,\n GLTFMaterial,\n GLTFTexture,\n GLTFScene,\n GLTFPrimitive,\n GLTFBufferAttribute,\n GLTFTextureInfo,\n GLTFNode,\n GLTFLight,\n GLTFCamera,\n GLTFBounds,\n GLTFAnimation,\n GLTFImageBasedLight,\n} from '@vvfx/resource-detection';\nimport type { PImageBufferData, PSkyboxBufferParams } from '../runtime/skybox';\nimport { PSkyboxCreator, PSkyboxType } from '../runtime/skybox';\nimport type { CubeImage } from '@vvfx/resource-detection/dist/src/gltf-tools/gltf-image-based-light';\n\ntype Box3 = math.Box3;\n\nlet globalGLTFLoader: Loader;\n\nexport function getDefaultEffectsGLTFLoader (engine: Engine, options?: LoaderOptions): Loader {\n if (!globalGLTFLoader) {\n globalGLTFLoader = new LoaderImpl();\n }\n\n (globalGLTFLoader as LoaderImpl).initial(engine, options);\n\n return globalGLTFLoader;\n}\n\nexport function setDefaultEffectsGLTFLoader (loader: Loader): void {\n globalGLTFLoader = loader;\n}\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 private _textureManager?: TextureManager;\n private _skyboxOptions?: ModelSkyboxOptions;\n\n engine: Engine;\n\n initial (engine: Engine, options?: LoaderOptions) {\n this.engine = engine;\n this._loaderOptions = options ?? {};\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 unknown 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 params: PSkyboxBufferParams = {\n type: 'buffer',\n renderable: this.isSkyboxVis(),\n intensity: ibl.intensity,\n reflectionsIntensity: reflectionsIntensity,\n irradianceCoeffs: irradianceCoeffs,\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') {\n throw new Error(`Invalid skybox type name ${typeName}`);\n }\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 async loadScene (options: LoadSceneOptions): Promise<LoadSceneResult> {\n this._clear();\n this._sceneOptions = options;\n this.engine = options.effects.renderer?.engine as Engine;\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 resource by GLTFTools at first');\n }\n\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 await this._preprocess();\n const modelItems: ModelBaseItem[] = [];\n const treeId = 'sceneTree';\n\n modelItems.push(this._createItemTree(treeId, this._gltfScene));\n //\n const itemSkybox = this._createItemSkybox();\n\n if (itemSkybox !== undefined) { modelItems.push(itemSkybox); }\n\n this._gltfScene.nodes.forEach(node => {\n if (node.mesh !== undefined) {\n const itemMesh = this._createItemMesh(node, treeId);\n\n if (itemMesh !== undefined) { modelItems.push(itemMesh); }\n }\n if (node.light !== undefined) {\n const itemLight = this._createItemLight(node, treeId);\n\n if (itemLight !== undefined) { modelItems.push(itemLight); }\n }\n if (node.camera !== undefined) {\n const itemCamera = this._createItemCamera(node, treeId);\n\n if (itemCamera !== undefined) { modelItems.push(itemCamera); }\n }\n });\n\n const sceneAABB = new Box3();\n\n this._gltfScene.rootNodes.forEach(root => {\n const parentTransform = new EffectsTransform({\n valid: true,\n });\n\n this._computeSceneAABB(root, parentTransform, sceneAABB);\n });\n\n return {\n source: this.getRemarkString(),\n items: modelItems,\n sceneAABB: {\n min: sceneAABB.min.toArray(),\n max: sceneAABB.max.toArray(),\n },\n };\n }\n\n private async _preprocess () {\n this.getTextureManager().initial(this._gltfImages, this._gltfTextures);\n for (let i = 0; i < this._gltfMaterials.length; i++) {\n const mat = this._gltfMaterials[i];\n\n await this.tryAddTexture2D(i, mat.baseColorTexture, true);\n if (!GLTFHelper.isUnlitMaterial(mat)) {\n await this.tryAddTexture2D(i, mat.metallicRoughnessTexture, false);\n await this.tryAddTexture2D(i, mat.normalTexture, false);\n await this.tryAddTexture2D(i, mat.emissiveTexture, false);\n await this.tryAddTexture2D(i, mat.occlusionTexture, false);\n }\n }\n //\n if (this._gltfImageBasedLights.length > 0 && !this.ignoreSkybox()) {\n const ibl = this._gltfImageBasedLights[0];\n\n if (this.isEnvironmentTest()) {\n const inSpecularImages = ibl.specularImages as CubeImage[];\n\n inSpecularImages.forEach(images => {\n if (this.isTiny3dMode()) {\n [images[4], images[5]] = [images[5], images[4]];\n }\n [images[2], images[3]] = [images[3], images[2]];\n });\n }\n\n this._skyboxOptions = await this.createSkybox(ibl);\n } else {\n const skyboxType = this.getSkyboxType();\n\n if (skyboxType !== undefined) {\n const typeName = skyboxType === PSkyboxType.FARM ? 'FARM' : 'NFT';\n\n this._skyboxOptions = await this.createDefaultSkybox(typeName);\n }\n }\n if (this._skyboxOptions) { this._skyboxOptions.renderable = this.isSkyboxVis(); }\n //\n this._gltfData2PlayerData(this._gltfScene, this._gltfMaterials);\n }\n\n // FIXME: texInfo 可选,isBaseColor 不可选,顺序问题\n tryAddTexture2D (matIndex: number, texInfo: GLTFTextureInfo | undefined, isBaseColor: boolean) {\n if (texInfo === undefined) { return; }\n\n const cacheTex = this.getTexture2D(matIndex, texInfo, isBaseColor, true);\n\n if (cacheTex !== undefined) { return; }\n //\n const texIndex = texInfo.index;\n const tex = this._gltfTextures[texIndex];\n const img = this._gltfImages[tex.source];\n\n return WebGLHelper.createTexture2D(this.engine, img, tex, isBaseColor, this.isTiny3dMode()).then(tex => {\n this.getTextureManager().addTexture(matIndex, texIndex, tex, isBaseColor);\n });\n }\n\n // FIXME: 可选顺序问题\n getTexture2D (matIndex: number, texInfo: GLTFTextureInfo | undefined, isBaseColor: boolean, noWarning?: boolean): Texture | undefined {\n if (texInfo === undefined) { return; }\n const texIndex = texInfo.index;\n const tex = this.getTextureManager().getTexture(matIndex, texIndex, isBaseColor);\n\n if (tex === undefined && noWarning !== true) {\n console.warn(`Can't find texture for mat ${matIndex}, tex ${JSON.stringify(texInfo)}, basecolor ${isBaseColor}`);\n }\n\n return tex;\n }\n\n private _gltfData2PlayerData (scene: GLTFScene, materials: GLTFMaterial[]) {\n this.processCamera(scene.cameras, true);\n this.processLight(scene.lights, true);\n this.processMaterial(materials, true);\n }\n\n private _createItemTree (treeId: string, scene: GLTFScene): ModelItemTree {\n const treeOptions = this.createTreeOptions(scene);\n const animOptions = this.createAnimations(this._gltfAnimations);\n\n treeOptions.animations = animOptions;\n treeOptions.animation = this.getPlayAnimationIndex(treeOptions);\n\n const itemTree: ModelItemTree = {\n id: treeId,\n name: scene.name,\n duration: this.getItemDuration(),\n endBehavior: this.getItemEndBehavior(),\n type: spec.ItemType.tree,\n content: {\n options: {\n tree: treeOptions,\n },\n },\n };\n\n return itemTree;\n }\n\n private _createItemMesh (node: GLTFNode, parentId?: string): ModelItemMesh {\n const meshIndex = node.mesh;\n\n if (meshIndex === undefined) { throw new Error(`Invalid mesh index in node ${node}`); }\n\n let skin: ModelSkinOptions | undefined;\n\n if (node.skin !== undefined) {\n const gltfSkin = this._gltfSkins[node.skin];\n\n skin = {\n name: gltfSkin.name,\n joints: gltfSkin.jointIndexList,\n skeleton: gltfSkin.skeleton,\n inverseBindMatrices: gltfSkin.inverseBindMatrices as Float32Array,\n };\n }\n\n const mesh = this._gltfMeshs[meshIndex];\n const primitiveList = mesh.primitives.map(prim => {\n const matIndex = prim.material;\n const mat = this._gltfMaterials[matIndex];\n const geometry = this.createGeometry(prim, skin !== undefined);\n const material = this.createMaterial(mat);\n\n material.baseColorTexture = this.getTexture2D(matIndex, mat.baseColorTexture, true);\n if (material.type === spec.MaterialType.pbr) {\n material.metallicRoughnessTexture = this.getTexture2D(matIndex, mat.metallicRoughnessTexture, false);\n material.normalTexture = this.getTexture2D(matIndex, mat.normalTexture, false);\n material.emissiveTexture = this.getTexture2D(matIndex, mat.emissiveTexture, false);\n material.occlusionTexture = this.getTexture2D(matIndex, mat.occlusionTexture, false);\n }\n\n const primitiveOptions: ModelPrimitiveOptions = {\n geometry: geometry,\n material: material,\n };\n\n return primitiveOptions;\n });\n\n const meshOptions: ModelMeshOptions = {\n parent: node.nodeIndex,\n skin: skin,\n primitives: primitiveList,\n weights: mesh.weights,\n };\n const aabb = GLTFHelper.createBoxFromGLTFBound(mesh.bounds as GLTFBounds);\n const boxSize = aabb.getSize(new Vector3());\n const boxCenter = aabb.getCenter(new Vector3());\n const interaction: ModelItemBoundingBox = {\n behavior: spec.InteractBehavior.NOTIFY,\n type: spec.ModelBoundingType.box,\n size: [boxSize.x, boxSize.y, boxSize.z],\n center: [boxCenter.x, boxCenter.y, boxCenter.z],\n };\n const itemMesh: ModelItemMesh = {\n id: `mesh_ni${node.nodeIndex ?? 0}_mi${meshIndex}`,\n parentId: `${parentId}^${node.nodeIndex}`,\n name: mesh.name,\n duration: this.getItemDuration(),\n endBehavior: this.getItemEndBehavior(),\n type: spec.ItemType.mesh,\n pluginName: 'model',\n content: {\n options: meshOptions,\n interaction: interaction,\n },\n };\n\n return itemMesh;\n }\n\n private _createItemLight (node: GLTFNode, parentId?: string): ModelItemLight | undefined {\n const lightIndex = node.light;\n\n if (lightIndex === undefined) { return; }\n\n const light = this._gltfLights[lightIndex];\n const lightOptions = this.createLightOptions(light);\n const itemLight: ModelItemLight = {\n id: `light_ni${node.nodeIndex ?? 0}_li${lightIndex}`,\n parentId: `${parentId}^${node.nodeIndex}`,\n name: light.name ?? 'light',\n duration: this.getItemDuration(),\n endBehavior: this.getItemEndBehavior(),\n type: spec.ItemType.light,\n pluginName: 'model',\n content: {\n options: lightOptions,\n },\n };\n\n return itemLight;\n }\n\n private _createItemCamera (node: GLTFNode, parentId?: string): ModelItemCamera | undefined {\n const cameraIndex = node.camera;\n\n if (cameraIndex === undefined) { return; }\n\n const camera = this._gltfCameras[cameraIndex];\n const cameraOptions = this.createCameraOptions(camera);\n\n if (cameraOptions === undefined) { return; }\n\n const itemCamera: ModelItemCamera = {\n id: `camera_ni${node.nodeIndex ?? 0}_ci${cameraIndex}`,\n parentId: `${parentId}^${node.nodeIndex}`,\n name: camera.name ?? 'camera',\n duration: this.getItemDuration(),\n endBehavior: this.getItemEndBehavior(),\n type: 'camera',\n pluginName: 'model',\n content: {\n options: cameraOptions,\n },\n };\n\n return itemCamera;\n }\n\n private _createItemSkybox (): ModelItemSkybox | undefined {\n if (this._skyboxOptions === undefined) { return; }\n\n const itemSkybox: ModelItemSkybox = {\n id: 'skybox_0',\n name: 'skybox',\n duration: this.getItemDuration(),\n endBehavior: this.getItemEndBehavior(),\n type: spec.ItemType.skybox,\n pluginName: 'model',\n content: {\n options: this._skyboxOptions,\n },\n };\n\n return itemSkybox;\n }\n\n private _computeSceneAABB (node: GLTFNode, parentTransform: EffectsTransform, sceneAABB: Box3) {\n const transformData: TransformProps = {};\n\n if (node.matrix) {\n const trans = Matrix4.fromArray(node.matrix).getTransform();\n\n transformData.position = trans.translation.toArray();\n transformData.quat = trans.rotation.toArray();\n transformData.scale = trans.scale.toArray();\n } else {\n if (node.translation) { transformData.position = node.translation as spec.vec3; }\n if (node.rotation) { transformData.quat = node.rotation as spec.vec4; }\n if (node.scale) { transformData.scale = node.scale as spec.vec3; }\n }\n const nodeTransform = new EffectsTransform(transformData, parentTransform);\n\n nodeTransform.setValid(true);\n\n //\n if (node.mesh !== undefined) {\n const mesh = this._gltfMeshs[node.mesh];\n const meshAABB = GLTFHelper.createBoxFromGLTFBound(mesh.bounds as GLTFBounds);\n\n meshAABB.applyMatrix4(nodeTransform.getWorldMatrix());\n sceneAABB.union(meshAABB);\n }\n\n node.children.forEach(child => {\n this._computeSceneAABB(child, nodeTransform, sceneAABB);\n });\n }\n\n createLightOptions (light: GLTFLight): ModelLightOptions {\n return PluginHelper.createLightOptions(light);\n }\n\n createCameraOptions (camera: GLTFCamera): ModelCameraOptions | undefined {\n return PluginHelper.createCameraOptions(camera);\n }\n\n private _clear () {\n if (this._textureManager) {\n this._textureManager.dispose();\n this._textureManager = undefined;\n }\n this._textureManager = new TextureManager(this);\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 isTiny3dMode (): boolean {\n return this._loaderOptions.compatibleMode === 'tiny3d';\n }\n\n getTextureManager (): TextureManager {\n return this._textureManager as TextureManager;\n }\n\n getItemDuration (): number {\n return this._sceneOptions.effects.duration ?? 9999;\n }\n\n getItemEndBehavior (): spec.ItemEndBehavior {\n return this._sceneOptions.effects.endBehavior ?? spec.ItemEndBehavior.loop;\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\nclass TextureManager {\n private _owner: LoaderImpl;\n private _gltfImages: GLTFImage[];\n private _gltfTextures: GLTFTexture[];\n private _textureMap: Map<number, Texture>;\n\n constructor (owner: LoaderImpl) {\n this._owner = owner;\n this._gltfImages = [];\n this._gltfTextures = [];\n this._textureMap = new Map();\n }\n\n initial (gltfImages: GLTFImage[], gltfTextures: GLTFTexture[]) {\n this._gltfImages = gltfImages;\n this._gltfTextures = gltfTextures;\n this._textureMap.clear();\n }\n\n dispose () {\n this._textureMap.clear();\n }\n\n addTexture (matIndex: number, texIndex: number, tex: Texture, isBaseColor: boolean) {\n const index = isBaseColor ? matIndex * 100000 + texIndex : texIndex;\n\n this._textureMap.set(index, tex);\n }\n\n getTexture (matIndex: number, texIndex: number, isBaseColor: boolean): Texture | undefined {\n const index = isBaseColor ? matIndex * 100000 + texIndex : texIndex;\n\n return this._textureMap.get(index);\n }\n\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['aPos'] = 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['aNormal'] = this._getBufferAttrib(attrib);\n }\n }\n if (this.hasTangent) {\n const attrib = this.tangentAttrib;\n\n if (attrib !== undefined) {\n attributes['aTangent'] = this._getBufferAttrib(attrib);\n }\n }\n this.texCoordList.forEach(val => {\n const attrib = this.texCoordAttrib(val);\n const attribName = `aUV${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['aJoints'] = this._getBufferAttrib(jointAttrib);\n }\n const weightAttrib = this.weightAttribute;\n\n if (weightAttrib !== undefined) {\n attributes['aWeights'] = 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[`aTargetPosition${i}`] = this._getBufferAttrib(positionAttrib);\n }\n\n const normalAttrib = this.getTargetNormal(i);\n\n if (normalAttrib !== undefined) {\n attributes[`aTargetNormal${i}`] = this._getBufferAttrib(normalAttrib);\n }\n\n const tangentAttrib = this.getTargetTangent(i);\n\n if (tangentAttrib !== undefined) {\n attributes[`aTargetTangent${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 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) { return [0, 0, 0, 1]; } else { return [f[0], f[1], f[2], 1.0]; }\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\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","import { spec, generateGUID, Downloader, TextureSourceType, getStandardJSON, glType2VertexFormatType, glContext } from '@galacean/effects';\nimport type {\n Engine, Player, Renderer, JSONValue, TextureCubeSourceOptions, GeometryProps, SubMesh,\n} from '@galacean/effects';\nimport { CullMode, PBRShaderGUID, RenderType, UnlitShaderGUID } from '../runtime';\nimport { Color } from '../runtime/math';\nimport { deserializeGeometry } from '@galacean/effects-helper';\nimport type { ModelTreeContent } from '../index';\n\nexport class JSONConverter {\n newScene: spec.JSONScene;\n\n engine: Engine;\n renderer: Renderer;\n downloader: Downloader;\n treeItemList: spec.VFXItemData[] = [];\n\n constructor (player: Player) {\n this.engine = player.renderer.engine;\n this.renderer = player.renderer;\n this.downloader = new Downloader();\n }\n\n async processScene (sceneData: string | Object) {\n let sceneJSON;\n\n if (sceneData instanceof Object) {\n sceneJSON = sceneData;\n } else {\n sceneJSON = await this.loadJSON(sceneData);\n }\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 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 version: '3.0',\n playerVersion: {\n web: '3.0',\n native: '3.0',\n },\n type: 'ge',\n compositions: [],\n compositionId: oldScene.compositionId,\n images: [],\n shapes: oldScene.shapes,\n plugins: oldScene.plugins,\n textures: [],\n items: [],\n components: [],\n materials: [],\n shaders: [],\n geometries: [],\n };\n\n this.treeItemList = [];\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 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) {\n if (tex.target === 34067) {\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 } 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.MeshComponent) {\n newComponents.push(this.createMeshComponent(comp, newScene, oldScene));\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('Find camera component', 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 {\n newComponents.push(comp);\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.treeItemList);\n newScene.compositionId = oldScene.compositionId;\n newScene.compositions = oldScene.compositions;\n\n newScene.items.forEach(item => {\n // @ts-expect-error\n if (item.type === 'root') {\n // @ts-expect-error\n item.type = 'ECS';\n }\n });\n\n // @ts-expect-error\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(`Couldn't load JSON ${JSON.stringify(url)}: status ${status}, ${responseText}`));\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,\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');\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 rootBone: { id: '' },\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 treeItemList: spec.VFXItemData[] = [];\n\n treeData.nodes.forEach(node => {\n const item: spec.VFXItemData = {\n id: generateGUID(),\n parentId: treeItem.id,\n name: node.name ?? '<unnamed>',\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 treeItemList.push(item);\n newScene.items.push(item);\n });\n\n treeData.nodes.forEach((node, index) => {\n const item = treeItemList[index];\n\n node.children?.forEach(child => {\n const childItem = treeItemList[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 = treeItemList[subIndex].id;\n }\n }\n }\n });\n\n this.treeItemList.push(...treeItemList);\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 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: this.getStringTags(material),\n macros: [],\n ints: {},\n floats,\n vector4s: {},\n colors,\n textures,\n };\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: this.getStringTags(material),\n macros: [],\n ints: {},\n floats,\n vector4s: {},\n colors,\n textures,\n };\n\n return newMaterial;\n }\n }\n\n private getStringTags (material: spec.MaterialOptions<'json'>): Record<string, string> {\n const stringTags: Record<string, string> = {};\n\n stringTags['ZWrite'] = String(material.depthMask ?? true);\n stringTags['ZTest'] = String(true);\n if (material.blending === spec.MaterialBlending.masked) {\n stringTags['RenderType'] = RenderType.Mask;\n } else if (material.blending === spec.MaterialBlending.translucent) {\n stringTags['RenderType'] = RenderType.Blend;\n } else {\n stringTags['RenderType'] = RenderType.Opaque;\n }\n if (material.side === spec.SideMode.BACK) {\n stringTags['Cull'] = CullMode.Back;\n } else if (material.side === spec.SideMode.DOUBLE) {\n stringTags['Cull'] = CullMode.Double;\n } else {\n stringTags['Cull'] = CullMode.Front;\n }\n\n return stringTags;\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\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: 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, 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: 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];\n\n if (!semantic) {\n throw new Error(`Invalid attrib ${attrib}`);\n }\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.UInt16,\n indexOffset: -1,\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 }\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_Weights: '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};","import 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;\n\nexport * from './gesture';\nexport * from './gltf';\nexport * from './plugin';\nexport * from './runtime';\nexport * from './utility';\n\nlogger.info('plugin model version: ' + version);\n"],"names":["VFX_ITEM_TYPE_3D","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_async_to_generator","fn","self","args","arguments","apply","err","undefined","_set_prototype_of","o","p","Object","setPrototypeOf","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","writable","configurable","_instanceof","left","right","Symbol","hasInstance","__decorate","decorators","target","desc","c","length","r","getOwnPropertyDescriptor","d","Reflect","decorate","i","defineProperty","__generator","thisArg","body","_","label","sent","t","trys","ops","f","y","g","next","verb","iterator","n","v","step","op","call","pop","push","e","SuppressedError","suppressed","message","Error","name","_defineProperties","props","descriptor","enumerable","_create_class","Constructor","protoProps","staticProps","_extends","assign","source","hasOwnProperty","Vector2","math","Vector3","Vector4","Matrix3","Matrix4","Color","Euler","EulerOrder","Quaternion","Box3","Sphere","Ray","DEG2RAD","PObjectType","PLightType","PTextureType","PMaterialType","PBlendMode","PFaceSideMode","PShadowType","PBRShaderGUID","UnlitShaderGUID","PTransform","translation","rotation","scale","fromMatrix4","matrix","setMatrix","fromEffectsTransform","trans","EffectsTransform","getWorldMatrix","effectsTrans","valid","setValid","toEffectsTransform","transform","mat","getMatrix","cloneFromMatrix","fromBaseTransform","position","setTranslation","set","setRotation","setScale","getTranslation","val","x","z","getPosition","setPosition","getRotation","w","setFromEuler","ZYX","getScale","compose","res","getTransform","fromArray","PCoordinate","origin","xAxis","yAxis","zAxis","fromPTransform","invert","copyFrom","rotationMatrix","toMatrix4","fromRotationMatrix","me","elements","PGlobalState","isWebGL2","shaderShared","runtimeEnv","PLAYER_OPTIONS_ENV_EDITOR","compatibleMode","visBoundingBox","renderMode3D","spec","RenderMode3D","none","renderMode3DUVGridSize","reset","hasRenderMode3D","getInstance","instance","isEditorEnv","isDeviceEnv","isTiny3dMode","isGLTFMode","objectIndex","PObject","type","dispose","isNone","isValid","genName","PEntity","_visible","_transform","deleted","update","render","scene","renderer","onVisibleChanged","visible","coordinate","coord","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","ValueType","BINARY","Array","start","byteLength","slice","CTRL","BYTES_PER_ELEMENT","InterpolationSampler","time","componentCount","cachedIndex","evaluate","pp","i1","t1","t0","validate_interval","seek","linear_scan","forward_scan","giveUpAt","copySampleValue","t1global","mid","intervalChanged","interpolate","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","Math","sqrt","len","atan2","tDir","QuaternionLinearSampler","alpha","end","createAnimationSampler","times","path","TextureDataMode","PSkin","skeleton","jointList","inverseBindMatrices","animationMatrices","textureDataMode","options","engine","parentItem","skin","joints","getTextureDataMode","getJointCount","matList","matrixCount","updateSkinMatrices","parentTree","getComponent","ModelTreeComponent","joint","node","content","getNodeById","console","mat4","clone","multiply","computeMeshAnimMatrices","worldMatrix","matrixList","normalMatList","inverseWorldMatrix","tempMatrix","localMatrix","multiplyMatrices","j","normalMat","transpose","updateParentItem","isTextureDataMode","jointCount","uniformsRequiredForMostFeatures","detail","gpuCapability","availableJointUniforms","maxVertexUniforms","uniformsRequiredPerJoint","floor","floatTexture","halfFloatTexture","PMorph","morphWeightsLength","hasPositionMorph","hasNormalMorph","hasTangentMorph","geometry","morph","positionCount","getAttributeMorphCount","positionNameList","normalCount","normalNameList","tangentCount","tangentNameList","countList","count","min","morphWeightsArray","initWeights","weights","morphWeights","hasMorph","equals","getMorphWeightsArray","attributeNameList","getAttributeData","PAnimInterpType","PAnimPathType","PAnimTrack","interp","input","output","interpolation","timeArray","dataArray","component","sampler","getInterpInfo","getPathInfo","tick","treeItem","sceneManager","treeComponent","setQuaternion","parentId","genParentId","id","mesh","queryMesh","updateMorphWeights","getEndTime","nodeIndex","PAnimTexture","isHalfFloat","width","height","buffer","Float16ArrayWrapper","getSize","glContext","HALF_FLOAT","FLOAT","texture","Texture","TEXTURE_2D","format","RGBA","wrapS","CLAMP_TO_EDGE","wrapT","minFilter","NEAREST","magFilter","updateSource","sourceType","TextureSourceType","getTexture","PAnimation","duration","tracks","animation","inTrack","track","max","newTime","PAnimationManager","treeOptions","ownerItem","speed","delay","animations","animationManager","animOpts","anim","createAnimation","setSceneManager","animationOpts","deltaSeconds","newDeltaSeconds","itemTime","getTreeItem","deg2rad","PI","PCamera","owner","nearPlane","farPlane","fov","aspect","clipMode","CameraClipMode","landscape","projectionMatrix","viewMatrix","camera","near","far","reverse","portrait","perspective","getNewProjectionMatrix","computeViewAABB","box","tanTheta","tan","yFarCoord","yNearCoord","xFarCoord","xNearCoord","isReversed","makeEmpty","expandByPoint","transformPoint","getEye","setEye","PCameraManager","winWidth","winHeight","cameraList","defaultCamera","dataType","item","initial","insert","insertCamera","remove","findResult","findIndex","splice","updateDefaultCamera","fovy","getCameraList","getDefaultCamera","getCameraCount","getActiveCamera","getAspect","PLight","direction","range","color","intensity","outerConeAngle","innerConeAngle","lightType","ambient","padding","light","b","LightType","point","spot","directional","isDirectional","isPoint","isSpot","isAmbient","getWorldPosition","getWorldDirection","transformNormal","PLightManager","lightList","insertItem","inLight","insertLight","lightCount","_assert_this_initialized","ReferenceError","FBOOptions","resolution","colorAttachments","depthAttachment","addDepthAttachment","storageType","RenderPassAttachmentStorageType","depth_16_texture","addDefaultDepthAttachment","deleteDepthAttachment","addColorAttachment","filter","LINEAR","deleteColorAttachment","viewport","BoxMesh","priority","material","Material","shader","vertex","vertexShader","fragment","fragmentShader","shared","depthTest","depthMask","Mesh","Geometry","modelMatrix","viewProjMatrix","positions","lineColor","setVector3","aPos","mode","LINES","drawStart","drawCount","PMesh","meshData","parent","parentIndex","subMeshes","hide","boundingBox","isBuilt","isDisposed","proxy","EffectsMeshProxy","getParentIndex","parentItemId","getSkinObj","getMorphObj","isHide","listIndex","getGeometry","materials","subMesh","PSubMesh","warn","getItemBoundingBox","interaction","build","prim","maxLightCount","skybox","boundingBoxMesh","updateMaterial","drawGeometry","getEffectsGeometry","getEffectsMaterial","weightsArray","updatedArray","updateParentInfo","normalMatrix","sceneStates","computeBoundingBox","minPos","maxPos","viewProjectionMatrix","hitTesting","rayOrigin","rayDirection","invWorldMatrix","newOrigin","newDirection","bounding","boxt","RayBoxTesting","mint","primt","add","subbox","union","inBounding","ModelBoundingType","center","hs","minVector","subtract","maxVector","halfRadius","radius","getParentId","hasSkin","effectsPriority","isCompressed","setGeometry","setMaterial","setHide","jointMatrixList","jointNormalMatList","half_float","jointMatrixTexture","jointNormalMatTexture","hasWeights","hasJoints","uniformSemantics","globalState","primitiveMacroList","getMacroList","materialMacroList","newSemantics","effectMaterial","macro","enableMacro","setMaterialStates","vertexShaderCode","fragmentShaderCode","glslVersion","GLSLVersion","GLSL3","GLSL1","getFeatureList","pbrPass","featureList","hasNormals","hasTangents","hasUVCoords","materialType","unlit","available","hasDiffuseImage","renderMode","outputDefine","getRenderMode3DDefine","macroList","nomralMatrix","updateUniformsByAnimation","updateUniformsByScene","updateUniforms","bindMatrices","animMatrices","HitTestingProxy","doubleSided","isDoubleSide","getHitPoint","isEmpty","GeometryBoxProxy","getBoundingBox","uv","normal","basecolor","metallic","roughness","ao","emissive","setTexture","jointMatrixNumbers","jointNormalMatNumbers","setMatrixNumberArray","morphWeightNumbers","setFloats","cameraPosition","isUnlitMaterial","setFloat","setInt","setVector2","ZERO","currentIntensity","currentReflectionsIntensity","brdfLUT","diffuseImage","coeffs","irradianceCoeffs","aliasName","specularMipCount","specularImage","PGeometry","PMaterialUnlit","PMaterialPBR","createPluginMaterial","getWorldBoundingBox","fromIdentity","applyMatrix4","attributeNames","getAttributeNames","hasAttribute","geomExt","getDrawCount","indexArray","getIndexData","setDrawCount","positionAttrib","hasPositions","hasColors","itemData","morphObj","hasMorphTarget","getParentNode","getMaterials","getMaterialCount","getSkinOpts","skinObj","TwoStatesSet","now","Set","last","clear","forward","temp","forAddedItem","callbackfn","has","forRemovedItem","forNowItem","PSceneManager","renderSkybox","compName","itemList","meshList","lightManager","cameraManager","parentId2Mesh","Map","enableDynamicSort","tickCount","lastTickSecond","sceneAABBCache","renderedMeshSet","opts","clean","componentName","sceneCache","lightItemCount","getWidth","getHeight","getBrdfLutTexture","initGlobalState","capbility","level","addItem","PSkybox","setup","renderable","removeItem","delete","effectsTransfrom","Transform","newTransform","deltaTime","activeCamera","winSize","sceneRadius","dynamicSortMeshes","states","priorityList","meshSet","sort","a","atransparent","WebGLHelper","isTransparentMesh","btransparent","aposition","bposition","anewPos","bnewPos","get","getSceneAABB","sceneBox","getWorldTransform","meshBox","printDebugInfo","cam","getRenderer","getSceneCache","shaderLightCount","glsl","animationVertGLSL","extensionsFragGLSL","tonemappingFragGLSL","texturesVertGLSL","functionsFragGLSL","shadowFragGLSL","webglCompatibilityGLSL","shadowCommonVert","StandardShaderSource","features","match","exec","replace","map","join","getSourceCode","StandardShader","getVertexShaderCode","context","pbr","shadowBase","primitiveVert","skyboxFilter","skyboxVert","getFragmentShaderCode","metallicRoughnessFrag","shadowPassFrag","skyboxFrag","genVertexShaderCode","genFragmentShaderCode","environment","fetchPBRShaderCode","fetchUnlitShaderCode","getPBRPassShaderCode","getShadowPassShaderCode","getSkyBoxShaderCode","getQuadFilterShaderCode","getQuadFilterVS","getNormalVisShaderCode","getBasicVS","getDiffuseOnlyShaderCode","getKawaseBlurShaderCode","getSimpleFilterShaderCode","getGaussianBlurShaderCodeV2","getGaussianBlurShaderCodeV1","getTransparecyBaseShader","isVertexShader","getTransparecyFilterShader","params","hasUVs","PShaderManager","funcMap","Helper","shadowFilter","normalVis","simpleFilter","genShaderCode","func","_instance","HookSuffix","number2GLName","HookOGLFunc","ctx","getPrototypeOf","hookCount","GetHookFunc","GetNum2GLName","FormatFuncInfo","prefix","argList","toString","FormatErrorInfo","err2Info","WebGLRenderingContext","NO_ERROR","INVALID_ENUM","INVALID_VALUE","INVALID_OPERATION","INVALID_FRAMEBUFFER_OPERATION","OUT_OF_MEMORY","CONTEXT_LOST_WEBGL","test","getError","trace","getRendererGPUInfo","player","JSON","stringify","getPMeshList","composition","getCompositions","items","meshComponent","ModelMeshComponent","getHitTestParams","force","isInteger","behavior","customHitTest","HitTestType","custom","collect","ray","pointInCanvas","worldMatrixData","RayIntersectsBoxWithRotation","sphere","pos","assignWorldTRS","setFromArray","fromData","createContent","getSceneManager","setVisible","dt","getVisible","onDestroy","parse","bbox","getCenter","RendererComponent","effectsClass","DataType","MeshComponent","ModelSkyboxComponent","skyboxData","SkyboxComponent","ModelLightComponent","lightData","ItemBehaviour","LightComponent","ModelCameraComponent","timeline","TimelineComponent","updateMainCamera","cameraData","setQuat","quat","setTransform","clip","findTrack","findClip","playable","originalTransform","CameraComponent","matrixData","local2World","world2Local","newRay","applyMatrix","boxCenter","boxHalfSize","boxMin","boxMax","intersetPoint","intersectBox","insersetPointInWorld","ro","rd","bmin","bmax","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","diff","edge1","edge2","RayTriangleTesting","backfaceCulling","subtractVectors","crossVectors","DdN","dot","sign","DdQxE2","DdE1xQ","QdN","CompositionHitTest","regions","hitTest","getHitTestRay","nums","region","getElement","a1","b1","ToggleItemBounding","itemId","createTexture2D","image","isBaseColor","tiny3dMode","blob","urlCreator","imageUrl","imageObj","imageData","Blob","mimeType","window","URL","webkitURL","createObjectURL","Image","src","onload","LINEAR_MIPMAP_LINEAR","premultiplyAlpha","isPow2","generateMipmap","NEAREST_MIPMAP_NEAREST","LINEAR_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","REPEAT","anisotropic","revokeObjectURL","onerror","createTextureList","images","textures","outTextures","all","tex","getTextureCubeData","cubeData","WebHelper","loadImageFromImageData","getTextureCubeMipmapData","mipmaps","createTextureCubeFromURL","cubeImage","textureOptions","getDefaultTextureFactory","loadSource","TEXTURE_CUBE_MAP","cubemapTexConfig","createTextureCubeMipmapFromURL","cubeImages","maps","cubemapMipTexConfig","createTextureCubeFromBuffer","cubemap","cube","createTextureCubeMipmapFromBuffer","level0Size","mipCount","url","pow","loadImage","createTextureFromImage","flipY","createRenderPass","fboOpts","RenderPass","attachments","depthStencilAttachment","clearAction","clearDepth","clearStencil","clearColor","colorAction","TextureLoadAction","depthAction","meshes","deleteTexture","deleteMesh","geometries","DestroyOptions","destroy","deleteGeometry","deleteRenderPass","pass","RenderPassDestroyAttachmentType","colorAttachment","semantics","blending","isSupportFloatTexture","capability","isSupportHalfFloatTexture","MeshHelper","createFilterMesh","getPlaneGeometry","effectsMaterial","getPlaneVertexArray","aUV","dataSource","aNormal","halfSize","PluginHelper","createLightOptions","createCameraOptions","znear","zfar","yfov","toPlayerColor3","scaleTo255","toPlayerColor4","toPluginColor3","scaleTo1","toPluginColor4","createUVTransform","stName","rotateName","stValue","getVector4","rotateValue","getFloat","cosTheta","sinTheta","clamp","minv","maxv","intVal","round","floatVal","focusOnPoint","YRotationAngle","targetPoint","camPos","targetPos","deltaPos","rotationMat","fromRotationAxis","newCamPos","lookAt","effectsTransform","preprocessScene","deviceEnv","jsonScene","dataMap","loadSkybox","preprocessTextureOptions","components","comp","textureInfo","texId","texOptions","setupItem3DOptions","cache","bins","compIndexSet","compositionId","compositions","refCompositionProps","compIndex","sceneComp","getEngine","jsonSceneData","ItemType","meshItem","primitives","primId","riGeometry","getOrCreateGeometry","studioPrim","MaterialType","studioMat","baseColorTexture","getTextureObj","metallicRoughnessTexture","normalTexture","occlusionTexture","emissiveTexture","studioSkin","tree","jsonItem","studioItem","jsonAnimations","studioAnimations","jsonAnim","studioAnim","jsonTrack","inputArray","outputArray","studioTrack","studioSkybox","studioOptions","CheckerHelper","createGeometry","geomJson","geomOptions","attrib","attribData","getAttributeName","getIndexArray","array","startsWith","getImageFileName","ext","begin","lastIndexOf","substr","substring","getCurrnetTimeStr","date","Date","timeStr","toLocaleString","ms","getMilliseconds","split","padStart","saveFileForURL","filename","document","createElement","setAttribute","href","click","createPlayer","manualRender","canvas","Player","renderFramework","env","renderOptions","willCaptureImage","sleep","setTimeout","loadImageFromGLTFImage","getCanvasArrayBuffer","toBlob","arrayBuffer","getImageArrayBuffer","cvs","getContext","drawImage","getCanvasImageData","getImageData","flipImageData","flipped","putImageData","globalCompositeOperation","translate","getWebGLCanvasImageBuffer","pixels","readPixels","UNSIGNED_BYTE","VertexAttribBuffer","typeSize","AttributeArray","compCount","signed","compressed","compressScale","inAttrib","inArray","normalize","getData","getLength","abs","positionArray","jointAttrib","weightAttrib","jointArray","weightArray","weight","skinMat","hasAnim","indexSet","posData","posVec","jointData","weightData","setZero","findError","bindMat","addScaledMatrix","resVec","transformVector4","hasAnimation","skinMatrix","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","isArray","every","checkVec2Undef","checkVec3","checkNonnegative3","checkVec4","checkNonnegative4","checkNumberArray","checkTexture","isDestroyed","checkTextureUndef","checkTexTransform","checkTexTransformUndef","checkMatBlending","MaterialBlending","opaque","masked","translucent","additive","checkMatSide","SideMode","BACK","DOUBLE","FRONT","checkAnimPath","checkAnimInterp","assertGeometry","getDrawStart","assertGeometryBuffer","attribArray","createAttributeArray","dataAttrib","assertModelSkinOptions","determinant","assertMatOptions","baseColorFactor","baseColorTextureTransform","baseColorTextureCoordinate","side","alphaCutOff","useSpecularAA","metallicFactor","roughnessFactor","metallicRoughnessTextureTransform","metallicRoughnessTextureCoordinate","normalTextureScale","normalTextureTransform","normalTextureCoordinate","occlusionTextureStrength","occlusionTextureTransform","occlusionTextureCoordinate","emissiveFactor","emissiveIntensity","emissiveTextureTransform","emissiveTextureCoordinate","assertPrimOptions","assertModelMeshOptions","morphList","morph0","morph1","assertModelCameraOptions","assertModelLightOptions","assertModelSkyboxOptions","reflectionsIntensity","specularImageSize","pow2","checkModelAnimTrackOptions","assertModelAnimOptions","assertTreeOptions","object","simpleObject","prop","Renderer","number","startIndex","toHalf","bytes","floatView","int32View","bits","m","RenderType","CullMode","PMaterialBase","ZWrite","ZTest","renderType","cullMode","getShaderFeatures","isOpaque","isMasked","getShaderMacros","debugUVGridSize","inFeatureList","finalFeatureList","shaderManager","shaderResult","isEditorEvn","inMacroList","finalMacroList","blendEquation","FUNC_ADD","blendFunction","ONE","ONE_MINUS_SRC_ALPHA","setFaceSideStates","culling","isBackSide","cullFace","frontFace","CCW","isBlend","isFrontSide","baseColorTextureTrans","getColor","stringTags","hasBaseColorTexture","setMatrix3","getBaseColorTexture","setBaseColorTexture","getBaseColorFactor","setBaseColorFactor","metallicRoughnessTextureTrans","normalTextureTrans","occlusionTextureTrans","emissiveTextureTrans","hasMetallicRoughnessTexture","hasNormalTexture","hasOcclusionTexture","hasEmissiveTexture","hasEmissiveValue","getMetallicRoughnessTexture","setMetallicRoughnessTexture","getNormalTexture","setNormalTexture","getOcclusionTexture","setOcclusionTexture","getEmissiveTexture","setEmissiveTexture","luminance","getEmissiveFactor","setEmissiveFactor","getEmissiveIntensity","setEmissiveIntensity","getInstanceId","materialPBR","materialUnlit","skyboxMaterial","PMaterialSkyboxFilter","skyboxMesh","getFilterMesh","newProjViewMatrix","hasIrradianceCoeffs","PSkyboxType","PSkyboxCreator","checkCubeMapImage","imageList","lastImage","specularImageLists","lastList","getBrdfLutTextureOptions","brdfURL","brdfLutImage","brdfLutOpts","createBrdfLutTexture","brdfLutTexture","createSkyboxOptions","skyboxOptions","createSpecularCubeMap","createDiffuseCubeMap","createSkyboxComponentData","specularCubeData","getSpecularCubeMapData","diffuseCubeData","getDiffuseCubeMapData","textureOptionsList","componentData","generateGUID","imageDatas","mipmap","imageId","getSkyboxParams","skyboxType","getSpecularImageList","getIrradianceCoeffs","getDiffuseImageList","getSpecularImageListAntFarm","getSpecularImageListNFT","levelList","currentLevel","CompositionCache","meshCache","textureCache","geometryCache","renderPassCache","brdfLutTexOptions","brdfLutTextureName","getOrCreateTexture","newTex","cachedGeom","geom","cachedMesh","getShadowBasePass","fboOptions","getRenderPass","getShadowFilterPass","cachedPass","setMeshes","addMesh","renderPass","getRenderPasses","resList","getSkyboxOptions","loadStaticResources","genSkyboxOptions","newParams","ModelPlugin","onCompositionConstructed","sceneParams","storage","onCompositionReset","renderFrame","endBehavior","END_BEHAVIOR_FORWARD","VFXItem","addComponent","ModelPluginComponent","onCompositionDestroyed","prepareResource","keyList","pluginData","precompile","pbrShaderCode","unlitShaderCode","pbrShaderData","Shader","unlitShaderData","addEffectsObjectData","AbstractPlugin","autoAdjustScene","lateUpdate","cameraObject","cameraTransform","getViewMatrix","cameraCoordinate","cameraDirection","cameraFov","cameraAspect","sceneAABB","newAABB","newSize","newWidth","newHeight","finalHeight","parentTransform","IDENTITY","newPosition","toArray","updateSceneCamera","getLightItemCount","getOptions","pluginItem","getItemByName","pluginComp","ModelTreeItem","baseTransform","getNodes","nodes","nodeId","cacheMap","allNodes","find","getNodeByName","getNodeTransform","topTransform","children","child","idWithSubfix","indexOf","TreeComponent","ModelTreePlugin","order","CameraGestureType","CameraGestureHandlerImp","cameraCoordiante","startParams","mouseEvent","clientX","clientY","clientWidth","clientHeight","getItem","getCurrentTarget","getCurrentType","onKeyEvent","event","cameraID","lengthSquared","rotate_self","onXYMoveBegin","startGesture","onXYMoving","arg0","moveGesture","onXYMoveEnd","endGesture","onZMoveBegin","onZMoving","onZMoveEnd","onRotateBegin","onRotating","onRotateEnd","onRotatePointBegin","rotate_focus","focusPoint","onRotatingPoint","onRotatePointEnd","moveTo","rotateTo","onFocusPoint","distance","newDistance","lookatDir","newOffset","getCameraTransform","updateCameraTransform","dx","dy","newPos","ndx","ndy","dxAngle","dyAngle","newRotation","fromAxisAngle","Y","tempRotation","rotateMatrix","deltaPosition","cameraOptions","LoaderHelper","getTransformFromMat4","euler","toEuler","getEffectsTransformFromMat4","getTransformFromTranslation","getTransformFromDirection","d0","d1","cross","acos","getEffectsTransformFromDirection","getTransformFromTransDir","getEffectsTransformFromTransDir","getEulerFromQuat","q","setFromQuaternion","getQuatFromEuler","globalGLTFLoader","getDefaultEffectsGLTFLoader","LoaderImpl","setDefaultEffectsGLTFLoader","loader","_loaderOptions","processLight","lights","fromGLTF","l","scaleColorVal","processCamera","cameras","processMaterial","strength","createTreeOptions","nodeList","treeNode","rootNodes","root","createAnimations","channels","channel","newAnim","primitive","hasSkinAnim","GeometryProxy","createMaterial","MaterialProxy","createTextureCube","imgList","img","createSkybox","ibl","irradianceCoefficients","inSpecularImages","specularImages","newImages","outImg","isSkyboxVis","createDefaultSkybox","typeName","typ","NFT","FARM","scaleColorVec","vec","loadScene","gltfResource","modelItems","treeId","itemSkybox","_clear","_sceneOptions","effects","gltf","resource","_gltfScene","scenes","_gltfSkins","skins","_gltfMeshs","_gltfLights","_gltfCameras","_gltfImages","_gltfTextures","_gltfMaterials","_gltfAnimations","_gltfImageBasedLights","imageBasedLights","_preprocess","_createItemTree","_createItemSkybox","itemMesh","_createItemMesh","itemLight","_createItemLight","itemCamera","_createItemCamera","_computeSceneAABB","getRemarkString","getTextureManager","tryAddTexture2D","GLTFHelper","ignoreSkybox","isEnvironmentTest","_skyboxOptions","getSkyboxType","_gltfData2PlayerData","matIndex","texInfo","cacheTex","getTexture2D","texIndex","addTexture","noWarning","animOptions","getPlayAnimationIndex","itemTree","getItemDuration","getItemEndBehavior","meshIndex","gltfSkin","jointIndexList","primitiveList","primitiveOptions","meshOptions","aabb","createBoxFromGLTFBound","bounds","boxSize","InteractBehavior","NOTIFY","pluginName","lightIndex","lightOptions","cameraIndex","transformData","nodeTransform","meshAABB","_textureManager","TextureManager","isPlayAllAnimation","animationInfo","playAnimation","animationIndex","isPlayAnimation","playAllAnimation","remark","ItemEndBehavior","loop","skyboxVis","includes","_owner","_textureMap","gltfImages","gltfTextures","gltfGeometry","hasSkinAnimation","_getBufferAttrib","itemSize","normalized","texCoordAttrib","getTexCoord","getTargetPosition","getAttribute","getTargetNormal","getTargetTangent","hasPosition","hasNormal","normalAttrib","hasTangent","tangentAttrib","texCoordList","attribName","jointAttribute","weightAttribute","TRIANGLES","getNormal","getTangent","getJoints","getWeights","hasTexCoord","texCoordCount","hasJointAttribute","hasWeightAttribute","indexCount","texCoords","gltfMaterial","getTextureObject","getTextureCoord","texCoord","getTextureTransform","extensions","KHR_texture_transform","getSpecularAA","extras","isUnlit","alphaMode","enableShadow","baseColorTextureObj","baseColorTextureCoord","baseColorTextureTransfrom","metallicRoughnessTextureObj","metallicRoughnessTextureCoord","metallicRoughnessTextureTransfrom","metalicFactor","normalTextureObj","normalTextureCoord","normalTextureTransfrom","occlusionTextureObj","occlusionTextureCoord","occlusionTextureTransfrom","emissiveTextureObj","emissiveTextureCoord","emissiveTextureTransfrom","hasEmissive","factor","KHR_materials_unlit","bound","_array_like_to_array","arr","arr2","_unsupported_iterable_to_array","minLen","from","_create_for_of_iterator_helper_loose","allowArrayLike","it","bind","JSONConverter","treeItemList","downloader","Downloader","processScene","sceneData","sceneJSON","oldScene","binFiles","bin","newScene","loadJSON","getStandardJSON","loadBins","version","playerVersion","web","native","shapes","plugins","shaders","setImage","setComponent","setItem","setComposition","newTextures","jobs","loadedMipmaps","newMipmaps","loadMipmapImage","sceneImage","dataPath","keepImageSource","sourceFrom","newComponents","createSkyboxComponent","createMeshComponent","createLightComponent","treeComp","createItemsFromTreeComponent","downloadJSON","status","responseText","downloadBinary","skyboxComponent","geometryPropsList","materialDatas","geomProps","getMaterialData","oldIndices","newIndices","geometryData","getGeometryDataFromPropsList","rootBone","treeData","VFXItemData","renderLevel","pn","getTransformData","childItem","subIndex","lightComponent","floats","colors","divide","getTextureData","newMaterial","getStringTags","macros","ints","vector4s","String","Mask","Blend","Opaque","Back","Double","Front","texTransform","texProperty","eulerHint","getGeometryDataFromOptions","vertexCount","verticesType","VertexFormatType","Float32","verticesNormalize","uvsType","uvsNormalize","normalsType","normalsNormalize","modelData","vertices","uvs","normals","glType2VertexFormatType","verticesOffset","getOffset","uvsOffset","normalsOffset","indicesType","IndexFormatType","UInt16","UInt32","vertexData","semantic","VertexBufferSemantic","Position","dimension","Uv","Normal","GeometryType","indexFormat","indexOffset","encodeVertexData","geomPropsList","totalCount","geom0","geom1","isSame","array1","array2","mergeTypedArray","getVertexCount","createGeometryData","formatType","Int8","UInt8","Int16","totalByteLength","bufferOffset","vertexChannels","vertexBufferSemanticMap","vertexChannel","subBuffer","byteOffset","toBase64String","totalSize","ArrayBuffer","uint16View","uint8View","binaryString","fromCharCode","btoa","aUV2","aTangent","aColor","aJoints","aWeights","a_Position","a_UV","a_UV1","a_UV2","a_Normal","a_Tangent","a_Color","a_Joints","a_Weights","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","registerPlugin","logger"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/plugin/const.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/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_inherits.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_instanceof.js","../../../node_modules/.pnpm/tslib@2.6.2/node_modules/tslib/tslib.es6.mjs","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_create_class.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_extends.js","../src/runtime/math.ts","../src/runtime/common.ts","../src/runtime/object.ts","../../../packages/effects-helper/dist/serialize/geometry.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","../src/runtime/anim-sampler.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/utility/ri-helper.ts","../src/runtime/mesh.ts","../src/utility/ts-helper.ts","../src/runtime/scene.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/utility/debug-helper.ts","../src/plugin/model-item.ts","../src/utility/hit-test-helper.ts","../src/utility/plugin-helper.ts","../src/runtime/material.ts","../src/runtime/skybox.ts","../src/runtime/cache.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/gltf/loader-helper.ts","../src/gltf/loader-impl.ts","../src/gltf/json-converter.ts","../src/index.ts"],"sourcesContent":["import type { spec } from '@galacean/effects';\n\n/**\n * Model 插件元素类型\n */\nexport const VFX_ITEM_TYPE_3D = 'PluginModel' as spec.ItemType;\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 _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","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","/******************************************************************************\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","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","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","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 { 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 { 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 _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","/**\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","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 * @param props - 蒙皮相关数据\n * @param engine - 引擎对象\n * @param rootBoneItem - 场景树父元素\n */\n create (props: SkinProps, engine: Engine, rootBoneItem: VFXItem) {\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.animationMatrices = [];\n //\n this.inverseBindMatrices = [];\n //\n this.textureDataMode = this.getTextureDataMode(this.getJointCount(), 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 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.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);\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 fovy - 视角\n * @param aspect - 纵横比\n * @param nearPlane - 近裁剪平面\n * @param farPlane - 远裁剪平面\n * @param position - 位置\n * @param rotation - 旋转\n * @param clipMode - 剪裁模式\n */\n updateDefaultCamera (\n fovy: number,\n aspect: number,\n nearPlane: number,\n farPlane: number,\n position: Vector3,\n rotation: Quaternion,\n clipMode: number,\n ) {\n this.defaultCamera.fov = fovy;\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 { 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('_ModelMatrix', modelMatrix);\n material.setMatrix('_ViewProjectionMatrix', 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 #version 100\n precision highp float;\n\n uniform mat4 _ModelMatrix;\n uniform mat4 _ViewProjectionMatrix;\n uniform vec3 _PositionList[8];\n attribute vec3 aPos;\n void main(){\n int index = int(aPos.x + 0.5);\n vec4 pos = _ModelMatrix * vec4(_PositionList[index], 1);\n gl_Position = _ViewProjectionMatrix * pos;\n }\n `;\n }\n\n /**\n * 获取片段着色器代码\n */\n get fragmentShader (): string {\n return `\n #version 100\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","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, 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?.listIndex || 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 * 渲染 Mesh 对象,需要将内部相关数据传给渲染器\n * @param scene - 场景\n * @param renderer - 渲染器\n */\n override render (scene: PSceneManager, renderer: Renderer) {\n this.skin?.updateSkinMatrices();\n this.updateMaterial(scene);\n\n this.subMeshes.forEach((subMesh, index) => {\n\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.getJointCount();\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 * 着色器部分 Uniform 数据来自 uniformSemantics\n * @param lightCount - 灯光数目\n * @param uniformSemantics - Uniform 语义数据\n * @param skybox - 天空盒\n */\n build (lightCount: number, uniformSemantics: { [k: string]: any }, skybox?: PSkybox) {\n const globalState = PGlobalState.getInstance();\n const primitiveMacroList = this.getMacroList(lightCount, true, skybox);\n const materialMacroList = this.material.getMacroList(primitiveMacroList);\n const newSemantics = uniformSemantics ?? {};\n\n // FIXME: Semantics整体移除\n newSemantics['_ViewProjectionMatrix'] = 'VIEWPROJECTION';\n //newSemantics[\"uView\"] = 'VIEWINVERSE';\n newSemantics['_ModelMatrix'] = 'MODEL';\n newSemantics['uEditorTransform'] = 'EDITOR_TRANSFORM';\n let material: Material;\n const isWebGL2 = PGlobalState.getInstance().isWebGL2;\n\n if (this.material.effectMaterial) {\n material = this.material.effectMaterial;\n // FIXME: Semantics整体移除\n // @ts-expect-error\n material.uniformSemantics = newSemantics;\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 uniformSemantics: newSemantics,\n }\n );\n this.material.setMaterialStates(material);\n }\n }\n\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.getJointCount() });\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.isDoubleSide();\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('_ModelMatrix', 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('_ViewProjectionMatrix', 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 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\n skinObj.create(skin, engine, this.rootBoneItem);\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","/**\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 { 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 { Vector3, 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';\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 * 场景状态接口,每次场景管理器 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 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 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.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) {\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 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 skybox: this.skybox,\n };\n\n // if (this.enableDynamicSort) {\n // this.dynamicSortMeshes(states);\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 meshList: Mesh[] = [];\n const priorityList: number[] = [];\n const meshSet = this.renderedMeshSet.now;\n\n meshSet.forEach(mesh => {\n meshList.push(mesh);\n priorityList.push(mesh.priority);\n });\n priorityList.sort((a, b) => a - b);\n\n // 按照 Tiny 排序算法,对 Mesh 对象进行排序\n // 将透明和不透明物体拆开,从而渲染正确\n const viewMatrix = states.viewMatrix;\n\n meshList.sort((a: Mesh, b: Mesh) => {\n const atransparent = WebGLHelper.isTransparentMesh(a);\n const btransparent = WebGLHelper.isTransparentMesh(b);\n\n if (atransparent && btransparent) {\n const aposition = Vector3.fromArray(a.worldMatrix.elements, 12);\n const bposition = Vector3.fromArray(b.worldMatrix.elements, 12);\n const anewPos = viewMatrix.transformPoint(aposition);\n const bnewPos = viewMatrix.transformPoint(bposition);\n\n return anewPos.z - bnewPos.z;\n } else if (atransparent) {\n return 1;\n } else if (btransparent) {\n return -1;\n } else {\n return 0;\n }\n });\n\n // 重新赋值渲染优先级\n for (let i = 0; i < meshList.length; i++) {\n const mesh = meshList[i];\n const priority = priorityList[i];\n\n mesh.priority = priority;\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 { default as animationVertGLSL } from './standard/animation.vert.glsl';\nimport { default as extensionsFragGLSL } from './standard/extensions.frag.glsl';\nimport { default as tonemappingFragGLSL } from './standard/tonemapping.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 webglCompatibilityGLSL } from './standard/webglcompatibility.glsl';\nimport { default as shadowCommonVert } from './standard/shadowCommon.vert.glsl';\n\nconst glsl: Record<string, string> = {\n 'animation.vert.glsl': animationVertGLSL,\n 'extensions.frag.glsl': extensionsFragGLSL,\n 'tonemapping.frag.glsl': tonemappingFragGLSL,\n 'textures.vert.glsl': texturesVertGLSL,\n 'functions.frag.glsl': functionsFragGLSL,\n 'shadow.frag.glsl': shadowFragGLSL,\n 'webglCompatibility.glsl': webglCompatibilityGLSL,\n 'shadowCommon.vert.glsl': shadowCommonVert,\n};\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[], isWebGL2: boolean): string {\n let match: RegExpExecArray | null;\n\n while ((match = (/#include <(.+)>/gm).exec(source)) !== null) {\n source = source.replace(match[0], glsl[match[1]]);\n }\n\n source = source.replace(/#define FEATURES/,\n features.map(value => `#define ${value}`).join('\\n'));\n\n if (isWebGL2) { return '#version 300 es\\n' + source; } else { return '#version 100\\n' + source; }\n }\n\n export function getSourceCode (source: string, isWebGL2?: boolean): string {\n let match: RegExpExecArray | null;\n\n while ((match = (/#include <(.+)>/gm).exec(source)) !== null) {\n source = source.replace(match[0], glsl[match[1]]);\n }\n\n if (isWebGL2) {\n return '#version 300 es\\n' + source;\n } else {\n return '#version 100\\n' + source;\n }\n }\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/shadowpass.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 isWebGL2 = context.isWebGL2;\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, isWebGL2);\n case PMaterialType.skyboxFilter:\n return StandardShaderSource.build(skyboxVert, features, isWebGL2);\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 isWebGL2 = context.isWebGL2;\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, isWebGL2);\n case PMaterialType.shadowBase:\n return StandardShaderSource.build(shadowPassFrag, features, isWebGL2);\n case PMaterialType.skyboxFilter:\n return StandardShaderSource.build(skyboxFrag, features, isWebGL2);\n default:\n throw new Error(`Invalid material type ${materialType} for getFragmentShaderString!`);\n }\n }\n\n static genVertexShaderCode (materialType: PMaterialType, isWebGL2?: boolean): string {\n switch (materialType) {\n case PMaterialType.unlit:\n case PMaterialType.pbr:\n case PMaterialType.shadowBase:\n return StandardShaderSource.getSourceCode(primitiveVert, isWebGL2);\n case PMaterialType.skyboxFilter:\n return StandardShaderSource.getSourceCode(skyboxVert, isWebGL2);\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, isWebGL2?: boolean): string {\n switch (materialType) {\n case PMaterialType.unlit:\n case PMaterialType.pbr:\n return StandardShaderSource.getSourceCode(metallicRoughnessFrag, isWebGL2);\n case PMaterialType.shadowBase:\n return StandardShaderSource.getSourceCode(shadowPassFrag, isWebGL2);\n case PMaterialType.skyboxFilter:\n return StandardShaderSource.getSourceCode(skyboxFrag, isWebGL2);\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 (isWebGL2?: boolean): PShaderResults {\n const vertexShaderCode = StandardShader.genVertexShaderCode(PMaterialType.pbr, isWebGL2);\n const fragmentShaderCode = StandardShader.genFragmentShaderCode(PMaterialType.pbr, isWebGL2);\n\n return {\n vertexShaderCode,\n fragmentShaderCode,\n };\n}\n\nexport function fetchUnlitShaderCode (isWebGL2?: boolean): PShaderResults {\n const vertexShaderCode = StandardShader.genVertexShaderCode(PMaterialType.unlit, isWebGL2);\n const fragmentShaderCode = StandardShader.genFragmentShaderCode(PMaterialType.unlit, isWebGL2);\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 _ModelMatrix;\n uniform mat4 _ViewProjectionMatrix;\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 = _ModelMatrix * 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(_ModelMatrix * vec4(aNormal, 0)));\n #endif\n\n gl_Position = _ViewProjectionMatrix * 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 { Player } from '@galacean/effects';\nimport type { PMesh } from '../runtime/mesh';\nimport { VFX_ITEM_TYPE_3D } from '../plugin/const';\nimport { PObjectType } from '../runtime/common';\nimport { ModelMeshComponent } from '../plugin/model-item';\n\ntype WebGLContext = WebGL2RenderingContext | WebGLRenderingContext;\nconst HookSuffix = '_Native';\nconst number2GLName = new Map();\n\n/**\n * Hook WebGL 相关的 API 调用\n * @param ctx - WebGL 上下文\n */\nexport function HookOGLFunc (ctx: WebGLContext) {\n console.info('HookOGLFunc ' + Object.getPrototypeOf(ctx));\n let hookCount = 0;\n\n for (const name in Object.getPrototypeOf(ctx)) {\n if (name === 'getError') { continue; }\n\n if (typeof ctx[name as keyof WebGLContext] === 'function') {\n ++hookCount;\n //console.log(\"HookFunc \" + each);\n // @ts-expect-error\n ctx[name + HookSuffix] = ctx[name];\n // @ts-expect-error\n ctx[name] = GetHookFunc(ctx, name);\n }\n }\n console.info('HookCount ' + hookCount);\n\n GetNum2GLName(ctx);\n}\n\nfunction FormatFuncInfo (name: string, args: IArguments): string {\n const prefix = `${name}`;\n const argList: string[] = [];\n\n for (let i = 0; i < args.length; i++) {\n if (typeof args[i] == 'number' && number2GLName.has(args[i])) {\n argList.push(number2GLName.get(args[i]) + `(${args[i]})`);\n continue;\n }\n argList.push(args[i]?.toString());\n }\n\n return prefix + (argList.length > 0 ? '(' + argList.join(', ') + ')' : '()');\n}\n\nfunction FormatErrorInfo (error: GLenum): string {\n const err2Info = new Map();\n\n err2Info.set(WebGLRenderingContext.NO_ERROR, 'NO_ERROR');\n err2Info.set(WebGLRenderingContext.INVALID_ENUM, 'INVALID_ENUM');\n err2Info.set(WebGLRenderingContext.INVALID_VALUE, 'INVALID_VALUE');\n err2Info.set(WebGLRenderingContext.INVALID_OPERATION, 'INVALID_OPERATION');\n err2Info.set(WebGLRenderingContext.INVALID_FRAMEBUFFER_OPERATION, 'INVALID_FRAMEBUFFER_OPERATION');\n err2Info.set(WebGLRenderingContext.OUT_OF_MEMORY, 'OUT_OF_MEMORY');\n err2Info.set(WebGLRenderingContext.CONTEXT_LOST_WEBGL, 'CONTEXT_LOST_WEBGL');\n\n return (err2Info.get(error) ?? 'UNKNOWN_ERROR') + `(${error})`;\n}\n\nfunction GetHookFunc (ctx: WebGLContext, name: string) {\n function test () {\n //console.trace();\n // @ts-expect-error\n const ret = ctx[name + HookSuffix].apply(this, arguments);\n const error: GLenum = ctx.getError();\n\n if (error > 0) {\n console.info('OpenGLError: ' + FormatErrorInfo(error) + ' ===> ' + FormatFuncInfo(name, arguments));\n console.trace();\n } else {\n console.info(FormatFuncInfo(name, arguments));\n }\n\n return ret;\n }\n\n return test;\n}\n\nfunction GetNum2GLName (ctx: WebGLContext) {\n for (const name in Object.getPrototypeOf(ctx)) {\n if (typeof ctx[name as keyof WebGLContext] === 'number') {\n number2GLName.set(ctx[name as keyof WebGLContext], name);\n }\n }\n}\n\n/**\n * 获取播放器关联的 GPU 信息\n * @param player - 播放器\n * @returns\n */\nexport function getRendererGPUInfo (player: Player) {\n const instance = player.gpuCapability;\n\n return JSON.stringify(instance, undefined, 2);\n}\n\n/**\n * 获取播放器中 PMesh 对象列表\n * @param player - 播放器\n * @returns\n */\nexport function getPMeshList (player: Player) {\n const meshList: PMesh[] = [];\n\n const composition = player.getCompositions()[0];\n\n composition?.items.forEach(item => {\n if (item.type === VFX_ITEM_TYPE_3D) {\n const meshComponent = item.getComponent(ModelMeshComponent);\n\n if (meshComponent?.content.type === PObjectType.mesh) {\n meshList.push(meshComponent.content);\n }\n }\n });\n\n return meshList;\n}\n","import type {\n Engine,\n HitTestBoxParams,\n HitTestCustomParams,\n HitTestSphereParams,\n Renderer,\n VFXItem,\n} from '@galacean/effects';\nimport { HitTestType, ItemBehaviour, RendererComponent, effectsClass, spec, AnimationClip } from '@galacean/effects';\nimport type {\n ModelCameraComponentData,\n ModelItemBounding,\n ModelLightComponentData,\n ModelMeshComponentData,\n ModelSkyboxComponentData,\n 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.createContent();\n this.item.type = VFX_ITEM_TYPE_3D;\n this.priority = this.item.listIndex;\n this.sceneManager = getSceneManager(this);\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 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.listIndex;\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 ItemBehaviour {\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 ItemBehaviour {\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 ItemBehaviour {\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 maxTime = curve.keyFrames.getMaxTime();\n const value = curve.keyFrames.getValue(life % maxTime);\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 maxTime = curve.keyFrames.getMaxTime();\n const value = curve.keyFrames.getValue(life % maxTime);\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 maxTime = curve.keyFrames.getMaxTime();\n const value = curve.keyFrames.getValue(life % maxTime);\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 maxTime = curve.keyFrames.getMaxTime();\n const value = curve.keyFrames.getValue(life % maxTime);\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.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} 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 mesh - gl mesh 对象\n * @return 是否半透明\n */\n static isTransparentMesh (mesh: Mesh): boolean {\n return mesh.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 * @param uniformSemantics - 传入的 Uniform 数据\n * @returns Mesh 对象\n */\n static createFilterMesh (engine: Engine, name: string, material: PMaterialBase, uniformSemantics: { [k: string]: any }): 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 uniformSemantics,\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 (texOptions as Texture2DSourceOptionsImage).generateMipmap = true;\n if (!isBaseColor) {\n texOptions.premultiplyAlpha = true;\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 { 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\nexport enum RenderType {\n Opaque = 'Opaque',\n Mask = 'Mask',\n Blend = 'Blend',\n}\n\nexport enum CullMode {\n Front = 'Front',\n Back = 'Back',\n Double = 'Double',\n}\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: RenderType = RenderType.Opaque;\n /**\n * Alpha 测试截断值\n */\n alphaCutOff = 0.5;\n /**\n * 面侧模式,默认是正面\n */\n cullMode: CullMode = CullMode.Front;\n\n /**\n * 获取着色器特性列表,根据材质状态\n * @returns 特性列表\n */\n getShaderFeatures (): string[] {\n const featureList: string[] = [];\n\n if (this.isOpaque()) {\n featureList.push('ALPHAMODE_OPAQUE 1');\n } else if (this.isMasked()) {\n featureList.push('ALPHAMODE_MASK 1');\n }\n\n if (this.cullMode === CullMode.Double) {\n featureList.push('DOUBLE_SIDED 1');\n }\n\n return featureList;\n }\n\n getShaderMacros (): MacroInfo[] {\n const macroList: MacroInfo[] = [];\n\n if (this.isOpaque()) {\n macroList.push({ name: 'ALPHAMODE_OPAQUE' });\n } else if (this.isMasked()) {\n macroList.push({ name: 'ALPHAMODE_MASK' });\n }\n\n if (this.cullMode === CullMode.Double) {\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 const isWebGL2 = PGlobalState.getInstance().isWebGL2;\n\n if (isWebGL2) {\n finalFeatureList.push('WEBGL2');\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 const isWebGL2 = PGlobalState.getInstance().isWebGL2;\n\n if (isWebGL2) {\n finalMacroList.push({ name: 'WEBGL2' });\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 === RenderType.Blend) {\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.isDoubleSide()) {\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 === RenderType.Opaque;\n }\n\n /**\n * 是否遮罩\n * @returns\n */\n isMasked (): boolean {\n return this.renderType === RenderType.Mask;\n }\n\n /**\n * 是否半透明\n * @returns\n */\n isBlend (): boolean {\n return this.renderType === RenderType.Blend;\n }\n\n /**\n * 是否正面模式\n * @returns\n */\n isFrontSide (): boolean {\n return this.cullMode === CullMode.Front;\n }\n\n /**\n * 是否背面模式\n * @returns\n */\n isBackSide (): boolean {\n return this.cullMode === CullMode.Back;\n }\n\n /**\n * 是否双面模式\n * @returns\n */\n isDoubleSide (): boolean {\n return this.cullMode === CullMode.Double;\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.stringTags['ZWrite'] !== 'false';\n this.ZTest = material.stringTags['ZTest'] !== 'false';\n this.renderType = material.stringTags['RenderType'] as RenderType ?? RenderType.Opaque;\n this.alphaCutOff = material.getFloat('_AlphaCutoff') ?? 0;\n this.cullMode = material.stringTags['Cull'] as CullMode ?? CullMode.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.stringTags['ZWrite'] !== 'false';\n this.ZTest = material.stringTags['ZTest'] !== 'false';\n this.renderType = material.stringTags['RenderType'] as RenderType ?? RenderType.Opaque;\n this.alphaCutOff = material.getFloat('_AlphaCutoff') ?? 0;\n this.cullMode = material.stringTags['Cull'] as CullMode ?? CullMode.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?.listIndex || 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);\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 (engine: Engine, params: PSkyboxParams) {\n const specularCubeData = this.getSpecularCubeMapData(engine, params);\n const diffuseCubeData = this.getDiffuseCubeMapData(engine, 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 (engine: Engine, 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 (engine: Engine, 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 - 1,\n };\n\n return params;\n }\n\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 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 * @param uniformSemantics - Uniform 语义信息\n * @returns\n */\n getFilterMesh (name: string, material: PMaterialBase, uniformSemantics: Record<string, any>): 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, uniformSemantics);\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 {\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 ItemBehaviour,\n PLAYER_OPTIONS_ENV_EDITOR,\n effectsClass,\n GLSLVersion,\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 } 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(isWebGL2);\n const unlitShaderCode = fetchUnlitShaderCode(isWebGL2);\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 ItemBehaviour {\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: any): void {\n super.fromData(data);\n //\n const options = data as ModelPluginOptions;\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 });\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());\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\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 { ItemBehaviour, 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 ItemBehaviour {\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(`can't find camera item ${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: 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.scale,\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 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('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('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('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('invalid target');\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('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('not implement');\n }\n } else {\n console.warn('invalid move 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 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","import type { TransformProps, Texture, Attribute, Engine, math } from '@galacean/effects';\nimport { Transform as EffectsTransform, spec, glContext, Geometry } from '@galacean/effects';\nimport type {\n Loader,\n LoaderOptions,\n SkyboxType,\n LoadSceneOptions,\n LoadSceneResult,\n} from './protocol';\nimport type {\n ModelAnimationOptions,\n ModelAnimTrackOptions,\n ModelMeshOptions,\n ModelCameraOptions,\n ModelMaterialOptions,\n ModelLightOptions,\n ModelSkyboxOptions,\n ModelItemBoundingBox,\n ModelBaseItem,\n ModelItemMesh,\n ModelItemLight,\n ModelItemCamera,\n ModelItemSkybox,\n ModelTreeOptions,\n ModelPrimitiveOptions,\n ModelItemTree,\n ModelSkinOptions,\n ModelTextureTransform,\n} from '../index';\nimport { Vector3, Box3, Matrix4 } from '../runtime/math';\nimport { LoaderHelper } from './loader-helper';\nimport { WebGLHelper, PluginHelper } from '../utility/plugin-helper';\nimport type {\n GLTFSkin,\n GLTFMesh,\n GLTFImage,\n GLTFMaterial,\n GLTFTexture,\n GLTFScene,\n GLTFPrimitive,\n GLTFBufferAttribute,\n GLTFTextureInfo,\n GLTFNode,\n GLTFLight,\n GLTFCamera,\n GLTFBounds,\n GLTFAnimation,\n GLTFImageBasedLight,\n} from '@vvfx/resource-detection';\nimport type { PImageBufferData, PSkyboxBufferParams } from '../runtime/skybox';\nimport { PSkyboxCreator, PSkyboxType } from '../runtime/skybox';\nimport type { CubeImage } from '@vvfx/resource-detection/dist/src/gltf-tools/gltf-image-based-light';\n\ntype Box3 = math.Box3;\n\nlet globalGLTFLoader: Loader;\n\nexport function getDefaultEffectsGLTFLoader (engine: Engine, options?: LoaderOptions): Loader {\n if (!globalGLTFLoader) {\n globalGLTFLoader = new LoaderImpl();\n }\n\n (globalGLTFLoader as LoaderImpl).initial(engine, options);\n\n return globalGLTFLoader;\n}\n\nexport function setDefaultEffectsGLTFLoader (loader: Loader): void {\n globalGLTFLoader = loader;\n}\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 private _textureManager?: TextureManager;\n private _skyboxOptions?: ModelSkyboxOptions;\n\n engine: Engine;\n\n initial (engine: Engine, options?: LoaderOptions) {\n this.engine = engine;\n this._loaderOptions = options ?? {};\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 unknown 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 params: PSkyboxBufferParams = {\n type: 'buffer',\n renderable: this.isSkyboxVis(),\n intensity: ibl.intensity,\n reflectionsIntensity: reflectionsIntensity,\n irradianceCoeffs: irradianceCoeffs,\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') {\n throw new Error(`Invalid skybox type name ${typeName}`);\n }\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 async loadScene (options: LoadSceneOptions): Promise<LoadSceneResult> {\n this._clear();\n this._sceneOptions = options;\n this.engine = options.effects.renderer?.engine as Engine;\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 resource by GLTFTools at first');\n }\n\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 await this._preprocess();\n const modelItems: ModelBaseItem[] = [];\n const treeId = 'sceneTree';\n\n modelItems.push(this._createItemTree(treeId, this._gltfScene));\n //\n const itemSkybox = this._createItemSkybox();\n\n if (itemSkybox !== undefined) { modelItems.push(itemSkybox); }\n\n this._gltfScene.nodes.forEach(node => {\n if (node.mesh !== undefined) {\n const itemMesh = this._createItemMesh(node, treeId);\n\n if (itemMesh !== undefined) { modelItems.push(itemMesh); }\n }\n if (node.light !== undefined) {\n const itemLight = this._createItemLight(node, treeId);\n\n if (itemLight !== undefined) { modelItems.push(itemLight); }\n }\n if (node.camera !== undefined) {\n const itemCamera = this._createItemCamera(node, treeId);\n\n if (itemCamera !== undefined) { modelItems.push(itemCamera); }\n }\n });\n\n const sceneAABB = new Box3();\n\n this._gltfScene.rootNodes.forEach(root => {\n const parentTransform = new EffectsTransform({\n valid: true,\n });\n\n this._computeSceneAABB(root, parentTransform, sceneAABB);\n });\n\n return {\n source: this.getRemarkString(),\n items: modelItems,\n sceneAABB: {\n min: sceneAABB.min.toArray(),\n max: sceneAABB.max.toArray(),\n },\n };\n }\n\n private async _preprocess () {\n this.getTextureManager().initial(this._gltfImages, this._gltfTextures);\n for (let i = 0; i < this._gltfMaterials.length; i++) {\n const mat = this._gltfMaterials[i];\n\n await this.tryAddTexture2D(i, mat.baseColorTexture, true);\n if (!GLTFHelper.isUnlitMaterial(mat)) {\n await this.tryAddTexture2D(i, mat.metallicRoughnessTexture, false);\n await this.tryAddTexture2D(i, mat.normalTexture, false);\n await this.tryAddTexture2D(i, mat.emissiveTexture, false);\n await this.tryAddTexture2D(i, mat.occlusionTexture, false);\n }\n }\n //\n if (this._gltfImageBasedLights.length > 0 && !this.ignoreSkybox()) {\n const ibl = this._gltfImageBasedLights[0];\n\n if (this.isEnvironmentTest()) {\n const inSpecularImages = ibl.specularImages as CubeImage[];\n\n inSpecularImages.forEach(images => {\n if (this.isTiny3dMode()) {\n [images[4], images[5]] = [images[5], images[4]];\n }\n [images[2], images[3]] = [images[3], images[2]];\n });\n }\n\n this._skyboxOptions = await this.createSkybox(ibl);\n } else {\n const skyboxType = this.getSkyboxType();\n\n if (skyboxType !== undefined) {\n const typeName = skyboxType === PSkyboxType.FARM ? 'FARM' : 'NFT';\n\n this._skyboxOptions = await this.createDefaultSkybox(typeName);\n }\n }\n if (this._skyboxOptions) { this._skyboxOptions.renderable = this.isSkyboxVis(); }\n //\n this._gltfData2PlayerData(this._gltfScene, this._gltfMaterials);\n }\n\n // FIXME: texInfo 可选,isBaseColor 不可选,顺序问题\n tryAddTexture2D (matIndex: number, texInfo: GLTFTextureInfo | undefined, isBaseColor: boolean) {\n if (texInfo === undefined) { return; }\n\n const cacheTex = this.getTexture2D(matIndex, texInfo, isBaseColor, true);\n\n if (cacheTex !== undefined) { return; }\n //\n const texIndex = texInfo.index;\n const tex = this._gltfTextures[texIndex];\n const img = this._gltfImages[tex.source];\n\n return WebGLHelper.createTexture2D(this.engine, img, tex, isBaseColor, this.isTiny3dMode()).then(tex => {\n this.getTextureManager().addTexture(matIndex, texIndex, tex, isBaseColor);\n });\n }\n\n // FIXME: 可选顺序问题\n getTexture2D (matIndex: number, texInfo: GLTFTextureInfo | undefined, isBaseColor: boolean, noWarning?: boolean): Texture | undefined {\n if (texInfo === undefined) { return; }\n const texIndex = texInfo.index;\n const tex = this.getTextureManager().getTexture(matIndex, texIndex, isBaseColor);\n\n if (tex === undefined && noWarning !== true) {\n console.warn(`Can't find texture for mat ${matIndex}, tex ${JSON.stringify(texInfo)}, basecolor ${isBaseColor}`);\n }\n\n return tex;\n }\n\n private _gltfData2PlayerData (scene: GLTFScene, materials: GLTFMaterial[]) {\n this.processCamera(scene.cameras, true);\n this.processLight(scene.lights, true);\n this.processMaterial(materials, true);\n }\n\n private _createItemTree (treeId: string, scene: GLTFScene): ModelItemTree {\n const treeOptions = this.createTreeOptions(scene);\n const animOptions = this.createAnimations(this._gltfAnimations);\n\n treeOptions.animations = animOptions;\n treeOptions.animation = this.getPlayAnimationIndex(treeOptions);\n\n const itemTree: ModelItemTree = {\n id: treeId,\n name: scene.name,\n duration: this.getItemDuration(),\n endBehavior: this.getItemEndBehavior(),\n type: spec.ItemType.tree,\n content: {\n options: {\n tree: treeOptions,\n },\n },\n };\n\n return itemTree;\n }\n\n private _createItemMesh (node: GLTFNode, parentId?: string): ModelItemMesh {\n const meshIndex = node.mesh;\n\n if (meshIndex === undefined) { throw new Error(`Invalid mesh index in node ${node}`); }\n\n let skin: ModelSkinOptions | undefined;\n\n if (node.skin !== undefined) {\n const gltfSkin = this._gltfSkins[node.skin];\n\n skin = {\n name: gltfSkin.name,\n joints: gltfSkin.jointIndexList,\n skeleton: gltfSkin.skeleton,\n inverseBindMatrices: gltfSkin.inverseBindMatrices as Float32Array,\n };\n }\n\n const mesh = this._gltfMeshs[meshIndex];\n const primitiveList = mesh.primitives.map(prim => {\n const matIndex = prim.material;\n const mat = this._gltfMaterials[matIndex];\n const geometry = this.createGeometry(prim, skin !== undefined);\n const material = this.createMaterial(mat);\n\n material.baseColorTexture = this.getTexture2D(matIndex, mat.baseColorTexture, true);\n if (material.type === spec.MaterialType.pbr) {\n material.metallicRoughnessTexture = this.getTexture2D(matIndex, mat.metallicRoughnessTexture, false);\n material.normalTexture = this.getTexture2D(matIndex, mat.normalTexture, false);\n material.emissiveTexture = this.getTexture2D(matIndex, mat.emissiveTexture, false);\n material.occlusionTexture = this.getTexture2D(matIndex, mat.occlusionTexture, false);\n }\n\n const primitiveOptions: ModelPrimitiveOptions = {\n geometry: geometry,\n material: material,\n };\n\n return primitiveOptions;\n });\n\n const meshOptions: ModelMeshOptions = {\n parent: node.nodeIndex,\n skin: skin,\n primitives: primitiveList,\n weights: mesh.weights,\n };\n const aabb = GLTFHelper.createBoxFromGLTFBound(mesh.bounds as GLTFBounds);\n const boxSize = aabb.getSize(new Vector3());\n const boxCenter = aabb.getCenter(new Vector3());\n const interaction: ModelItemBoundingBox = {\n behavior: spec.InteractBehavior.NOTIFY,\n type: spec.ModelBoundingType.box,\n size: [boxSize.x, boxSize.y, boxSize.z],\n center: [boxCenter.x, boxCenter.y, boxCenter.z],\n };\n const itemMesh: ModelItemMesh = {\n id: `mesh_ni${node.nodeIndex ?? 0}_mi${meshIndex}`,\n parentId: `${parentId}^${node.nodeIndex}`,\n name: mesh.name,\n duration: this.getItemDuration(),\n endBehavior: this.getItemEndBehavior(),\n type: spec.ItemType.mesh,\n pluginName: 'model',\n content: {\n options: meshOptions,\n interaction: interaction,\n },\n };\n\n return itemMesh;\n }\n\n private _createItemLight (node: GLTFNode, parentId?: string): ModelItemLight | undefined {\n const lightIndex = node.light;\n\n if (lightIndex === undefined) { return; }\n\n const light = this._gltfLights[lightIndex];\n const lightOptions = this.createLightOptions(light);\n const itemLight: ModelItemLight = {\n id: `light_ni${node.nodeIndex ?? 0}_li${lightIndex}`,\n parentId: `${parentId}^${node.nodeIndex}`,\n name: light.name ?? 'light',\n duration: this.getItemDuration(),\n endBehavior: this.getItemEndBehavior(),\n type: spec.ItemType.light,\n pluginName: 'model',\n content: {\n options: lightOptions,\n },\n };\n\n return itemLight;\n }\n\n private _createItemCamera (node: GLTFNode, parentId?: string): ModelItemCamera | undefined {\n const cameraIndex = node.camera;\n\n if (cameraIndex === undefined) { return; }\n\n const camera = this._gltfCameras[cameraIndex];\n const cameraOptions = this.createCameraOptions(camera);\n\n if (cameraOptions === undefined) { return; }\n\n const itemCamera: ModelItemCamera = {\n id: `camera_ni${node.nodeIndex ?? 0}_ci${cameraIndex}`,\n parentId: `${parentId}^${node.nodeIndex}`,\n name: camera.name ?? 'camera',\n duration: this.getItemDuration(),\n endBehavior: this.getItemEndBehavior(),\n type: 'camera',\n pluginName: 'model',\n content: {\n options: cameraOptions,\n },\n };\n\n return itemCamera;\n }\n\n private _createItemSkybox (): ModelItemSkybox | undefined {\n if (this._skyboxOptions === undefined) { return; }\n\n const itemSkybox: ModelItemSkybox = {\n id: 'skybox_0',\n name: 'skybox',\n duration: this.getItemDuration(),\n endBehavior: this.getItemEndBehavior(),\n type: spec.ItemType.skybox,\n pluginName: 'model',\n content: {\n options: this._skyboxOptions,\n },\n };\n\n return itemSkybox;\n }\n\n private _computeSceneAABB (node: GLTFNode, parentTransform: EffectsTransform, sceneAABB: Box3) {\n const transformData: TransformProps = {};\n\n if (node.matrix) {\n const trans = Matrix4.fromArray(node.matrix).getTransform();\n\n transformData.position = trans.translation.toArray();\n transformData.quat = trans.rotation.toArray();\n transformData.scale = trans.scale.toArray();\n } else {\n if (node.translation) { transformData.position = node.translation as spec.vec3; }\n if (node.rotation) { transformData.quat = node.rotation as spec.vec4; }\n if (node.scale) { transformData.scale = node.scale as spec.vec3; }\n }\n const nodeTransform = new EffectsTransform(transformData, parentTransform);\n\n nodeTransform.setValid(true);\n\n //\n if (node.mesh !== undefined) {\n const mesh = this._gltfMeshs[node.mesh];\n const meshAABB = GLTFHelper.createBoxFromGLTFBound(mesh.bounds as GLTFBounds);\n\n meshAABB.applyMatrix4(nodeTransform.getWorldMatrix());\n sceneAABB.union(meshAABB);\n }\n\n node.children.forEach(child => {\n this._computeSceneAABB(child, nodeTransform, sceneAABB);\n });\n }\n\n createLightOptions (light: GLTFLight): ModelLightOptions {\n return PluginHelper.createLightOptions(light);\n }\n\n createCameraOptions (camera: GLTFCamera): ModelCameraOptions | undefined {\n return PluginHelper.createCameraOptions(camera);\n }\n\n private _clear () {\n if (this._textureManager) {\n this._textureManager.dispose();\n this._textureManager = undefined;\n }\n this._textureManager = new TextureManager(this);\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 isTiny3dMode (): boolean {\n return this._loaderOptions.compatibleMode === 'tiny3d';\n }\n\n getTextureManager (): TextureManager {\n return this._textureManager as TextureManager;\n }\n\n getItemDuration (): number {\n return this._sceneOptions.effects.duration ?? 9999;\n }\n\n getItemEndBehavior (): spec.ItemEndBehavior {\n return this._sceneOptions.effects.endBehavior ?? spec.ItemEndBehavior.loop;\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\nclass TextureManager {\n private _owner: LoaderImpl;\n private _gltfImages: GLTFImage[];\n private _gltfTextures: GLTFTexture[];\n private _textureMap: Map<number, Texture>;\n\n constructor (owner: LoaderImpl) {\n this._owner = owner;\n this._gltfImages = [];\n this._gltfTextures = [];\n this._textureMap = new Map();\n }\n\n initial (gltfImages: GLTFImage[], gltfTextures: GLTFTexture[]) {\n this._gltfImages = gltfImages;\n this._gltfTextures = gltfTextures;\n this._textureMap.clear();\n }\n\n dispose () {\n this._textureMap.clear();\n }\n\n addTexture (matIndex: number, texIndex: number, tex: Texture, isBaseColor: boolean) {\n const index = isBaseColor ? matIndex * 100000 + texIndex : texIndex;\n\n this._textureMap.set(index, tex);\n }\n\n getTexture (matIndex: number, texIndex: number, isBaseColor: boolean): Texture | undefined {\n const index = isBaseColor ? matIndex * 100000 + texIndex : texIndex;\n\n return this._textureMap.get(index);\n }\n\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['aPos'] = 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['aNormal'] = this._getBufferAttrib(attrib);\n }\n }\n if (this.hasTangent) {\n const attrib = this.tangentAttrib;\n\n if (attrib !== undefined) {\n attributes['aTangent'] = this._getBufferAttrib(attrib);\n }\n }\n this.texCoordList.forEach(val => {\n const attrib = this.texCoordAttrib(val);\n const attribName = `aUV${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['aJoints'] = this._getBufferAttrib(jointAttrib);\n }\n const weightAttrib = this.weightAttribute;\n\n if (weightAttrib !== undefined) {\n attributes['aWeights'] = 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[`aTargetPosition${i}`] = this._getBufferAttrib(positionAttrib);\n }\n\n const normalAttrib = this.getTargetNormal(i);\n\n if (normalAttrib !== undefined) {\n attributes[`aTargetNormal${i}`] = this._getBufferAttrib(normalAttrib);\n }\n\n const tangentAttrib = this.getTargetTangent(i);\n\n if (tangentAttrib !== undefined) {\n attributes[`aTargetTangent${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 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) { return [0, 0, 0, 1]; } else { return [f[0], f[1], f[2], 1.0]; }\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\n","import { spec, generateGUID, Downloader, TextureSourceType, getStandardJSON, glType2VertexFormatType, glContext } from '@galacean/effects';\nimport type {\n Engine, Player, Renderer, JSONValue, TextureCubeSourceOptions, GeometryProps,\n} from '@galacean/effects';\nimport { PBRShaderGUID, UnlitShaderGUID } from '../runtime';\nimport { Color, Quaternion, Vector3 } from '../runtime/math';\nimport { deserializeGeometry } from '@galacean/effects-helper';\nimport type { ModelTreeContent } from '../index';\nimport { typedArrayFromBinary } from '@galacean/effects-helper';\n\nexport class JSONConverter {\n newScene: spec.JSONScene;\n\n engine: Engine;\n renderer: Renderer;\n downloader: Downloader;\n treeInfo = new TreeInfo();\n\n constructor (player: Player) {\n this.engine = player.renderer.engine;\n this.renderer = player.renderer;\n this.downloader = new Downloader();\n }\n\n async processScene (sceneData: string | Object) {\n let sceneJSON;\n\n if (sceneData instanceof Object) {\n sceneJSON = sceneData;\n } else {\n sceneJSON = await this.loadJSON(sceneData);\n }\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 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 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) {\n if (tex.target === 34067) {\n const { mipmaps, target } = tex as spec.SerializedTextureCube;\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 } 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('Find camera component', 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 // @ts-expect-error\n if (item.type === 'root') {\n // @ts-expect-error\n item.type = 'ECS';\n }\n });\n\n // @ts-expect-error\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(`Couldn't load JSON ${JSON.stringify(url)}: status ${status}, ${responseText}`));\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,\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');\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(`Can't find tree node list for ${component.item}`);\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['_Cutoff'] = 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.stringTags['ZWrite'] = String(oldMat.depthMask ?? true);\n newMat.stringTags['ZTest'] = String(true);\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 ${skin}`);\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');\n }\n\n joints.forEach(joint => {\n const node = treeNodeList[joint];\n\n if (node !== rootBoneItem && node.parentId === rootBoneItem.parentId) {\n console.error('Find invalid node for rootBoneItem and adjust rootBoneItem');\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(`Find duplicate treeItem id: ${treeItem.id}`);\n }\n\n this.tree2NodeList[treeItem.id] = treeNodeList;\n treeNodeList.forEach(node => {\n if (this.nodeList2Tree[node.id]) {\n throw new Error(`Find duplicate tree node id: ${node.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];\n\n if (!semantic) {\n throw new Error(`Invalid attrib ${attrib}`);\n }\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.UInt16,\n indexOffset: -1,\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 }\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 type { spec } from '@galacean/effects';\nimport { VFXItem, logger, registerPlugin, version as playerVersion } 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 !== playerVersion) {\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"],"names":["VFX_ITEM_TYPE_3D","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_async_to_generator","fn","self","args","arguments","apply","err","undefined","_set_prototype_of","o","p","Object","setPrototypeOf","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","writable","configurable","_instanceof","left","right","Symbol","hasInstance","__decorate","decorators","target","desc","c","length","r","getOwnPropertyDescriptor","d","Reflect","decorate","i","defineProperty","__generator","thisArg","body","_","label","sent","t","trys","ops","f","y","g","next","verb","iterator","n","v","step","op","call","pop","push","e","SuppressedError","suppressed","message","Error","name","_defineProperties","props","descriptor","enumerable","_create_class","Constructor","protoProps","staticProps","_extends","assign","source","hasOwnProperty","Vector2","math","Vector3","Vector4","Matrix3","Matrix4","Color","Euler","EulerOrder","Quaternion","Box3","Sphere","Ray","DEG2RAD","PObjectType","PLightType","PTextureType","PMaterialType","PBlendMode","PFaceSideMode","PShadowType","PBRShaderGUID","UnlitShaderGUID","PTransform","translation","rotation","scale","fromMatrix4","matrix","setMatrix","fromEffectsTransform","trans","EffectsTransform","getWorldMatrix","effectsTrans","valid","setValid","toEffectsTransform","transform","mat","getMatrix","cloneFromMatrix","fromBaseTransform","position","setTranslation","set","setRotation","setScale","getTranslation","val","x","z","getPosition","setPosition","getRotation","w","setFromEuler","ZYX","getScale","compose","res","getTransform","fromArray","PCoordinate","origin","xAxis","yAxis","zAxis","fromPTransform","invert","copyFrom","rotationMatrix","toMatrix4","fromRotationMatrix","me","elements","PGlobalState","isWebGL2","shaderShared","runtimeEnv","PLAYER_OPTIONS_ENV_EDITOR","compatibleMode","visBoundingBox","renderMode3D","spec","RenderMode3D","none","renderMode3DUVGridSize","reset","hasRenderMode3D","getInstance","instance","isEditorEnv","isDeviceEnv","isTiny3dMode","isGLTFMode","objectIndex","PObject","type","dispose","isNone","isValid","genName","PEntity","_visible","_transform","deleted","update","render","scene","renderer","onVisibleChanged","visible","coordinate","coord","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","ValueType","BINARY","Array","start","byteLength","slice","CTRL","BYTES_PER_ELEMENT","_array_like_to_array","arr","len","arr2","_unsupported_iterable_to_array","minLen","toString","from","test","_create_for_of_iterator_helper_loose","allowArrayLike","it","bind","isArray","InterpolationSampler","time","componentCount","cachedIndex","evaluate","pp","i1","t1","t0","validate_interval","seek","linear_scan","forward_scan","giveUpAt","copySampleValue","t1global","mid","intervalChanged","interpolate","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","Math","sqrt","atan2","tDir","QuaternionLinearSampler","alpha","end","createAnimationSampler","times","path","TextureDataMode","PSkin","skeleton","jointItem","inverseBindMatrices","animationMatrices","textureDataMode","engine","rootBoneItem","rootBoneName","skin","getJointItems","getTextureDataMode","getJointCount","matList","matrixCount","updateSkinMatrices","node","mat4","clone","multiply","console","computeMeshAnimMatrices","worldMatrix","matrixList","normalMatList","inverseWorldMatrix","tempMatrix","localMatrix","multiplyMatrices","j","normalMat","transpose","updateParentItem","parentItem","isTextureDataMode","jointCount","uniformsRequiredForMostFeatures","detail","gpuCapability","availableJointUniforms","maxVertexUniforms","uniformsRequiredPerJoint","floor","floatTexture","halfFloatTexture","name2Item","genNodeName","jointItems","boneNames","boneName","nameList","children","child","genNodeNameDFS","join","PMorph","morphWeightsLength","morphWeightsArray","hasPositionMorph","hasNormalMorph","hasTangentMorph","geometry","morph","positionCount","getAttributeMorphCount","positionNameList","normalCount","normalNameList","tangentCount","tangentNameList","countList","count","min","fill","initWeights","weights","morphWeights","updateWeights","hasMorph","equals","getMorphWeightsArray","attributeNameList","getAttributeData","PAnimInterpType","PAnimPathType","PAnimTrack","options","interp","input","output","interpolation","timeArray","dataArray","component","sampler","getInterpInfo","getPathInfo","tick","treeItem","sceneManager","treeComponent","getComponent","ModelTreeComponent","content","getNodeById","setQuaternion","parentId","genParentId","id","mesh","queryMesh","updateMorphWeights","getEndTime","nodeIndex","PAnimTexture","isHalfFloat","width","height","buffer","Float16ArrayWrapper","getSize","glContext","HALF_FLOAT","FLOAT","texture","Texture","TEXTURE_2D","format","RGBA","wrapS","CLAMP_TO_EDGE","wrapT","minFilter","NEAREST","magFilter","updateSource","sourceType","TextureSourceType","getTexture","PAnimation","duration","tracks","animation","inTrack","track","max","newTime","PAnimationManager","treeOptions","ownerItem","speed","delay","animations","animationManager","animOpts","anim","createAnimation","setSceneManager","animationOpts","deltaSeconds","newDeltaSeconds","itemTime","getTreeItem","deg2rad","PI","PCamera","owner","nearPlane","farPlane","fov","aspect","clipMode","CameraClipMode","landscape","projectionMatrix","viewMatrix","camera","near","far","reverse","portrait","perspective","getNewProjectionMatrix","computeViewAABB","box","tanTheta","tan","yFarCoord","yNearCoord","xFarCoord","xNearCoord","isReversed","makeEmpty","expandByPoint","transformPoint","getEye","setEye","PCameraManager","winWidth","winHeight","cameraList","defaultCamera","dataType","item","initial","insert","insertCamera","remove","findResult","findIndex","splice","updateDefaultCamera","fovy","getCameraList","getDefaultCamera","getCameraCount","getActiveCamera","getAspect","PLight","direction","range","color","intensity","outerConeAngle","innerConeAngle","lightType","ambient","padding","light","b","LightType","point","spot","directional","isDirectional","isPoint","isSpot","isAmbient","getWorldPosition","getWorldDirection","transformNormal","PLightManager","lightList","insertItem","inLight","insertLight","lightCount","_assert_this_initialized","ReferenceError","FBOOptions","resolution","colorAttachments","depthAttachment","addDepthAttachment","storageType","RenderPassAttachmentStorageType","depth_16_texture","addDefaultDepthAttachment","deleteDepthAttachment","addColorAttachment","filter","LINEAR","deleteColorAttachment","viewport","BoxMesh","priority","material","Material","shader","vertex","vertexShader","fragment","fragmentShader","shared","depthTest","depthMask","Mesh","Geometry","modelMatrix","viewProjMatrix","positions","lineColor","setVector3","aPos","mode","LINES","drawStart","drawCount","PMesh","meshData","parent","parentIndex","subMeshes","hide","boundingBox","isBuilt","isDisposed","proxy","EffectsMeshProxy","getParentIndex","parentItemId","rootBone","getSkinObj","getMorphObj","isHide","listIndex","getGeometry","materials","subMesh","PSubMesh","warn","getItemBoundingBox","interaction","build","prim","maxLightCount","skybox","boundingBoxMesh","updateMaterial","drawGeometry","getEffectsGeometry","getEffectsMaterial","weightsArray","updatedArray","updateParentInfo","normalMatrix","sceneStates","computeBoundingBox","minPos","maxPos","viewProjectionMatrix","hitTesting","rayOrigin","rayDirection","invWorldMatrix","newOrigin","newDirection","bounding","boxt","RayBoxTesting","mint","primt","add","subbox","union","inBounding","ModelBoundingType","center","hs","minVector","subtract","maxVector","halfRadius","radius","getParentId","hasSkin","effectsPriority","isCompressed","setGeometry","setMaterial","setHide","jointMatrixList","jointNormalMatList","half_float","jointMatrixTexture","jointNormalMatTexture","hasWeights","hasJoints","uniformSemantics","globalState","primitiveMacroList","getMacroList","materialMacroList","newSemantics","effectMaterial","macro","enableMacro","setMaterialStates","vertexShaderCode","fragmentShaderCode","glslVersion","GLSLVersion","GLSL3","GLSL1","getFeatureList","pbrPass","featureList","hasNormals","hasTangents","hasUVCoords","materialType","unlit","available","hasDiffuseImage","renderMode","outputDefine","getRenderMode3DDefine","macroList","nomralMatrix","updateUniformsByAnimation","updateUniformsByScene","updateUniforms","bindMatrices","animMatrices","HitTestingProxy","doubleSided","isDoubleSide","getHitPoint","isEmpty","GeometryBoxProxy","getBoundingBox","uv","normal","basecolor","metallic","roughness","ao","emissive","setTexture","jointMatrixNumbers","jointNormalMatNumbers","setMatrixNumberArray","setFloats","cameraPosition","isUnlitMaterial","setFloat","setInt","setVector2","ZERO","currentIntensity","currentReflectionsIntensity","brdfLUT","diffuseImage","coeffs","irradianceCoeffs","aliasName","specularMipCount","specularImage","PGeometry","PMaterialUnlit","PMaterialPBR","createPluginMaterial","getWorldBoundingBox","fromIdentity","applyMatrix4","attributeNames","getAttributeNames","hasAttribute","geomExt","getDrawCount","indexArray","getIndexData","setDrawCount","positionAttrib","hasPositions","hasColors","itemData","morphObj","hasMorphTarget","getParentNode","parentTree","getMaterials","getMaterialCount","getSkinProps","getSkinOpts","skinObj","TwoStatesSet","now","Set","last","clear","forward","temp","forAddedItem","callbackfn","has","forRemovedItem","forNowItem","PSceneManager","renderSkybox","compName","itemList","meshList","lightManager","cameraManager","parentId2Mesh","Map","enableDynamicSort","tickCount","lastTickSecond","sceneAABBCache","renderedMeshSet","opts","clean","componentName","sceneCache","lightItemCount","getWidth","getHeight","getBrdfLutTexture","initGlobalState","capbility","level","addItem","PSkybox","setup","renderable","removeItem","delete","effectsTransfrom","Transform","newTransform","deltaTime","activeCamera","winSize","sceneRadius","dynamicSortMeshes","states","priorityList","meshSet","sort","a","atransparent","WebGLHelper","isTransparentMesh","btransparent","aposition","bposition","anewPos","bnewPos","get","getSceneAABB","sceneBox","getWorldTransform","meshBox","printDebugInfo","cam","getRenderer","getSceneCache","shaderLightCount","glsl","animationVertGLSL","extensionsFragGLSL","tonemappingFragGLSL","texturesVertGLSL","functionsFragGLSL","shadowFragGLSL","webglCompatibilityGLSL","shadowCommonVert","StandardShaderSource","features","match","exec","replace","map","getSourceCode","StandardShader","getVertexShaderCode","context","pbr","shadowBase","primitiveVert","skyboxFilter","skyboxVert","getFragmentShaderCode","metallicRoughnessFrag","shadowPassFrag","skyboxFrag","genVertexShaderCode","genFragmentShaderCode","environment","fetchPBRShaderCode","fetchUnlitShaderCode","getPBRPassShaderCode","getShadowPassShaderCode","getSkyBoxShaderCode","getQuadFilterShaderCode","getQuadFilterVS","getNormalVisShaderCode","getBasicVS","getDiffuseOnlyShaderCode","getKawaseBlurShaderCode","getSimpleFilterShaderCode","getGaussianBlurShaderCodeV2","getGaussianBlurShaderCodeV1","getTransparecyBaseShader","isVertexShader","getTransparecyFilterShader","params","hasUVs","PShaderManager","funcMap","Helper","shadowFilter","normalVis","simpleFilter","genShaderCode","func","_instance","HookSuffix","number2GLName","HookOGLFunc","ctx","getPrototypeOf","hookCount","GetHookFunc","GetNum2GLName","FormatFuncInfo","prefix","argList","FormatErrorInfo","err2Info","WebGLRenderingContext","NO_ERROR","INVALID_ENUM","INVALID_VALUE","INVALID_OPERATION","INVALID_FRAMEBUFFER_OPERATION","OUT_OF_MEMORY","CONTEXT_LOST_WEBGL","getError","trace","getRendererGPUInfo","player","JSON","stringify","getPMeshList","composition","getCompositions","items","meshComponent","ModelMeshComponent","getHitTestParams","force","isInteger","behavior","customHitTest","HitTestType","custom","collect","ray","pointInCanvas","worldMatrixData","RayIntersectsBoxWithRotation","sphere","pos","assignWorldTRS","setFromArray","fromData","createContent","getSceneManager","setVisible","dt","getVisible","onDestroy","parse","bbox","getCenter","RendererComponent","effectsClass","DataType","MeshComponent","ModelSkyboxComponent","skyboxData","SkyboxComponent","ModelLightComponent","lightData","ItemBehaviour","LightComponent","ModelCameraComponent","updateMainCamera","cameraData","setQuat","quat","setTransform","CameraComponent","AnimationComponent","elapsedTime","clips","sampleAnimation","animationClips","clipData","clipObj","ModelAnimationClip","setFromAnimationClip","path2Node","vfxItem","life","positionCurves","curve","maxTime","keyFrames","getMaxTime","getValue","getTargetItem","rotationCurves","scaleCurves","floatCurves","className","properties","property","split","setProperty","clip","rootItem","findTag","AnimationClip","obj","current","propName","matrixData","local2World","world2Local","newRay","applyMatrix","boxCenter","boxHalfSize","boxMin","boxMax","intersetPoint","intersectBox","insersetPointInWorld","ro","rd","bmin","bmax","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","diff","edge1","edge2","RayTriangleTesting","backfaceCulling","subtractVectors","crossVectors","DdN","dot","sign","DdQxE2","DdE1xQ","QdN","CompositionHitTest","regions","hitTest","getHitTestRay","nums","region","getElement","a1","b1","ToggleItemBounding","itemId","createTexture2D","image","isBaseColor","tiny3dMode","blob","urlCreator","imageUrl","imageObj","imageData","Blob","mimeType","window","URL","webkitURL","createObjectURL","Image","src","onload","LINEAR_MIPMAP_LINEAR","premultiplyAlpha","isPow2","generateMipmap","NEAREST_MIPMAP_NEAREST","LINEAR_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","REPEAT","anisotropic","revokeObjectURL","onerror","createTextureList","images","textures","outTextures","all","tex","getTextureCubeData","cubeData","WebHelper","loadImageFromImageData","getTextureCubeMipmapData","mipmaps","createTextureCubeFromURL","cubeImage","textureOptions","getDefaultTextureFactory","loadSource","TEXTURE_CUBE_MAP","cubemapTexConfig","createTextureCubeMipmapFromURL","cubeImages","maps","cubemapMipTexConfig","createTextureCubeFromBuffer","cubemap","cube","createTextureCubeMipmapFromBuffer","level0Size","mipCount","url","pow","loadImage","createTextureFromImage","flipY","createRenderPass","fboOpts","RenderPass","attachments","depthStencilAttachment","clearAction","clearDepth","clearStencil","clearColor","colorAction","TextureLoadAction","depthAction","meshes","deleteTexture","deleteMesh","geometries","DestroyOptions","destroy","deleteGeometry","deleteRenderPass","pass","RenderPassDestroyAttachmentType","colorAttachment","semantics","blending","isSupportFloatTexture","capability","isSupportHalfFloatTexture","MeshHelper","createFilterMesh","getPlaneGeometry","effectsMaterial","getPlaneVertexArray","aUV","dataSource","aNormal","halfSize","PluginHelper","createLightOptions","createCameraOptions","znear","zfar","yfov","toPlayerColor3","scaleTo255","toPlayerColor4","toPluginColor3","scaleTo1","toPluginColor4","createUVTransform","stName","rotateName","stValue","getVector4","rotateValue","getFloat","cosTheta","sinTheta","clamp","minv","maxv","intVal","round","floatVal","focusOnPoint","YRotationAngle","targetPoint","camPos","targetPos","deltaPos","rotationMat","fromRotationAxis","newCamPos","lookAt","effectsTransform","preprocessScene","deviceEnv","jsonScene","dataMap","loadSkybox","preprocessTextureOptions","components","comp","textureInfo","texId","texOptions","setupItem3DOptions","cache","bins","compIndexSet","compositionId","compositions","refCompositionProps","compIndex","sceneComp","getEngine","jsonSceneData","ItemType","meshItem","primitives","primId","riGeometry","getOrCreateGeometry","studioPrim","MaterialType","studioMat","baseColorTexture","getTextureObj","metallicRoughnessTexture","normalTexture","occlusionTexture","emissiveTexture","studioSkin","tree","jsonItem","studioItem","jsonAnimations","studioAnimations","jsonAnim","studioAnim","jsonTrack","inputArray","outputArray","studioTrack","studioSkybox","studioOptions","CheckerHelper","createGeometry","geomJson","geomOptions","attrib","attribData","getAttributeName","getIndexArray","array","startsWith","getImageFileName","ext","begin","lastIndexOf","substr","substring","getCurrnetTimeStr","date","Date","timeStr","toLocaleString","ms","getMilliseconds","padStart","saveFileForURL","filename","document","createElement","setAttribute","href","click","createPlayer","manualRender","canvas","Player","renderFramework","env","renderOptions","willCaptureImage","sleep","setTimeout","loadImageFromGLTFImage","getCanvasArrayBuffer","toBlob","arrayBuffer","getImageArrayBuffer","cvs","getContext","drawImage","getCanvasImageData","getImageData","flipImageData","flipped","putImageData","globalCompositeOperation","translate","getWebGLCanvasImageBuffer","pixels","readPixels","UNSIGNED_BYTE","VertexAttribBuffer","typeSize","AttributeArray","compCount","signed","compressed","compressScale","inAttrib","inArray","normalize","getData","getLength","abs","positionArray","jointAttrib","weightAttrib","jointArray","weightArray","joint","weight","skinMat","hasAnim","indexSet","posData","posVec","jointData","weightData","setZero","findError","bindMat","addScaledMatrix","resVec","transformVector4","hasAnimation","skinMatrix","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","isDestroyed","checkTextureUndef","checkTexTransform","checkTexTransformUndef","checkMatBlending","MaterialBlending","opaque","masked","translucent","additive","checkMatSide","SideMode","BACK","DOUBLE","FRONT","checkAnimPath","checkAnimInterp","assertGeometry","getDrawStart","assertGeometryBuffer","attribArray","createAttributeArray","dataAttrib","assertModelSkinOptions","joints","determinant","assertMatOptions","baseColorFactor","baseColorTextureTransform","baseColorTextureCoordinate","side","alphaCutOff","useSpecularAA","metallicFactor","roughnessFactor","metallicRoughnessTextureTransform","metallicRoughnessTextureCoordinate","normalTextureScale","normalTextureTransform","normalTextureCoordinate","occlusionTextureStrength","occlusionTextureTransform","occlusionTextureCoordinate","emissiveFactor","emissiveIntensity","emissiveTextureTransform","emissiveTextureCoordinate","assertPrimOptions","assertModelMeshOptions","morphList","morph0","morph1","assertModelCameraOptions","assertModelLightOptions","assertModelSkyboxOptions","reflectionsIntensity","specularImageSize","pow2","checkModelAnimTrackOptions","assertModelAnimOptions","assertTreeOptions","object","simpleObject","prop","Renderer","number","startIndex","toHalf","bytes","floatView","int32View","bits","m","RenderType","CullMode","PMaterialBase","ZWrite","ZTest","renderType","cullMode","getShaderFeatures","isOpaque","isMasked","getShaderMacros","debugUVGridSize","inFeatureList","finalFeatureList","shaderManager","shaderResult","isEditorEvn","inMacroList","finalMacroList","blendEquation","FUNC_ADD","blendFunction","ONE","ONE_MINUS_SRC_ALPHA","setFaceSideStates","culling","isBackSide","cullFace","frontFace","CCW","isBlend","isFrontSide","baseColorTextureTrans","getColor","stringTags","hasBaseColorTexture","setMatrix3","getBaseColorTexture","setBaseColorTexture","getBaseColorFactor","setBaseColorFactor","metallicRoughnessTextureTrans","normalTextureTrans","occlusionTextureTrans","emissiveTextureTrans","hasMetallicRoughnessTexture","hasNormalTexture","hasOcclusionTexture","hasEmissiveTexture","hasEmissiveValue","getMetallicRoughnessTexture","setMetallicRoughnessTexture","getNormalTexture","setNormalTexture","getOcclusionTexture","setOcclusionTexture","getEmissiveTexture","setEmissiveTexture","luminance","getEmissiveFactor","setEmissiveFactor","getEmissiveIntensity","setEmissiveIntensity","getInstanceId","materialPBR","materialUnlit","skyboxMaterial","PMaterialSkyboxFilter","skyboxMesh","getFilterMesh","newProjViewMatrix","hasIrradianceCoeffs","PSkyboxType","PSkyboxCreator","checkCubeMapImage","imageList","lastImage","specularImageLists","lastList","getBrdfLutTextureOptions","brdfURL","brdfLutImage","brdfLutOpts","createBrdfLutTexture","brdfLutTexture","createSkyboxOptions","skyboxOptions","createSpecularCubeMap","createDiffuseCubeMap","createSkyboxComponentData","specularCubeData","getSpecularCubeMapData","diffuseCubeData","getDiffuseCubeMapData","textureOptionsList","componentData","generateGUID","imageDatas","mipmap","imageId","getSkyboxParams","skyboxType","getSpecularImageList","getIrradianceCoeffs","getDiffuseImageList","getSpecularImageListAntFarm","getSpecularImageListNFT","levelList","currentLevel","CompositionCache","meshCache","textureCache","geometryCache","renderPassCache","brdfLutTexOptions","brdfLutTextureName","getOrCreateTexture","newTex","cachedGeom","geom","cachedMesh","getShadowBasePass","fboOptions","getRenderPass","getShadowFilterPass","cachedPass","setMeshes","addMesh","renderPass","getRenderPasses","resList","getSkyboxOptions","loadStaticResources","genSkyboxOptions","newParams","ModelPlugin","onCompositionConstructed","sceneParams","storage","onCompositionReset","renderFrame","endBehavior","END_BEHAVIOR_FORWARD","VFXItem","addComponent","ModelPluginComponent","onCompositionDestroyed","prepareResource","keyList","pluginData","precompile","pbrShaderCode","unlitShaderCode","pbrShaderData","Shader","unlitShaderData","addEffectsObjectData","AbstractPlugin","autoAdjustScene","lateUpdate","cameraObject","cameraTransform","getViewMatrix","cameraCoordinate","cameraDirection","cameraFov","cameraAspect","sceneAABB","newAABB","newSize","newWidth","newHeight","finalHeight","parentTransform","IDENTITY","newPosition","toArray","updateSceneCamera","getLightItemCount","getOptions","pluginItem","getItemByName","pluginComp","ModelTreeItem","baseTransform","getNodes","nodes","nodeId","cacheMap","allNodes","find","getNodeByName","getNodeTransform","topTransform","idWithSubfix","indexOf","TreeComponent","ModelTreePlugin","order","CameraGestureType","CameraGestureHandlerImp","cameraCoordiante","startParams","mouseEvent","clientX","clientY","clientWidth","clientHeight","getItem","getCurrentTarget","getCurrentType","onKeyEvent","event","cameraID","lengthSquared","rotate_self","onXYMoveBegin","startGesture","onXYMoving","arg0","moveGesture","onXYMoveEnd","endGesture","onZMoveBegin","onZMoving","onZMoveEnd","onRotateBegin","onRotating","onRotateEnd","onRotatePointBegin","rotate_focus","focusPoint","onRotatingPoint","onRotatePointEnd","moveTo","rotateTo","onFocusPoint","distance","newDistance","lookatDir","newOffset","getCameraTransform","updateCameraTransform","dx","dy","newPos","ndx","ndy","dxAngle","dyAngle","newRotation","fromAxisAngle","Y","tempRotation","rotateMatrix","deltaPosition","cameraOptions","LoaderHelper","getTransformFromMat4","euler","toEuler","getEffectsTransformFromMat4","getTransformFromTranslation","getTransformFromDirection","d0","d1","cross","acos","getEffectsTransformFromDirection","getTransformFromTransDir","getEffectsTransformFromTransDir","getEulerFromQuat","q","setFromQuaternion","getQuatFromEuler","globalGLTFLoader","getDefaultEffectsGLTFLoader","LoaderImpl","setDefaultEffectsGLTFLoader","loader","_loaderOptions","processLight","lights","fromGLTF","l","scaleColorVal","processCamera","cameras","processMaterial","strength","createTreeOptions","nodeList","treeNode","rootNodes","root","createAnimations","channels","channel","newAnim","primitive","hasSkinAnim","GeometryProxy","createMaterial","MaterialProxy","createTextureCube","imgList","img","createSkybox","ibl","irradianceCoefficients","inSpecularImages","specularImages","newImages","outImg","isSkyboxVis","createDefaultSkybox","typeName","typ","NFT","FARM","scaleColorVec","vec","loadScene","gltfResource","modelItems","treeId","itemSkybox","_clear","_sceneOptions","effects","gltf","resource","_gltfScene","scenes","_gltfSkins","skins","_gltfMeshs","_gltfLights","_gltfCameras","_gltfImages","_gltfTextures","_gltfMaterials","_gltfAnimations","_gltfImageBasedLights","imageBasedLights","_preprocess","_createItemTree","_createItemSkybox","itemMesh","_createItemMesh","itemLight","_createItemLight","itemCamera","_createItemCamera","_computeSceneAABB","getRemarkString","getTextureManager","tryAddTexture2D","GLTFHelper","ignoreSkybox","isEnvironmentTest","_skyboxOptions","getSkyboxType","_gltfData2PlayerData","matIndex","texInfo","cacheTex","getTexture2D","texIndex","addTexture","noWarning","animOptions","getPlayAnimationIndex","itemTree","getItemDuration","getItemEndBehavior","meshIndex","gltfSkin","jointIndexList","primitiveList","primitiveOptions","meshOptions","aabb","createBoxFromGLTFBound","bounds","boxSize","InteractBehavior","NOTIFY","pluginName","lightIndex","lightOptions","cameraIndex","transformData","nodeTransform","meshAABB","_textureManager","TextureManager","isPlayAllAnimation","animationInfo","playAnimation","animationIndex","isPlayAnimation","playAllAnimation","remark","ItemEndBehavior","loop","skyboxVis","includes","_owner","_textureMap","gltfImages","gltfTextures","gltfGeometry","hasSkinAnimation","_getBufferAttrib","itemSize","normalized","texCoordAttrib","getTexCoord","getTargetPosition","getAttribute","getTargetNormal","getTargetTangent","hasPosition","hasNormal","normalAttrib","hasTangent","tangentAttrib","texCoordList","attribName","jointAttribute","weightAttribute","TRIANGLES","getNormal","getTangent","getJoints","getWeights","hasTexCoord","texCoordCount","hasJointAttribute","hasWeightAttribute","indexCount","texCoords","gltfMaterial","getTextureObject","getTextureCoord","texCoord","getTextureTransform","extensions","KHR_texture_transform","getSpecularAA","extras","isUnlit","alphaMode","enableShadow","baseColorTextureObj","baseColorTextureCoord","baseColorTextureTransfrom","metallicRoughnessTextureObj","metallicRoughnessTextureCoord","metallicRoughnessTextureTransfrom","metalicFactor","normalTextureObj","normalTextureCoord","normalTextureTransfrom","occlusionTextureObj","occlusionTextureCoord","occlusionTextureTransfrom","emissiveTextureObj","emissiveTextureCoord","emissiveTextureTransfrom","hasEmissive","factor","KHR_materials_unlit","bound","JSONConverter","treeInfo","TreeInfo","downloader","Downloader","processScene","sceneData","sceneJSON","oldScene","binFiles","bin","newScene","loadJSON","getStandardJSON","loadBins","version","playerVersion","web","native","shaders","setImage","setComponent","setItem","setComposition","newTextures","jobs","loadedMipmaps","newMipmaps","loadMipmapImage","sceneImage","dataPath","keepImageSource","sourceFrom","newComponents","createSkyboxComponent","createLightComponent","treeComp","createItemsFromTreeComponent","createMeshComponent","getAllTreeNodeList","downloadJSON","status","responseText","downloadBinary","skyboxComponent","geometryPropsList","materialDatas","geomProps","getMaterialData","oldIndices","newIndices","geometryData","getGeometryDataFromPropsList","getTreeItemByNodeId","treeNodeList","getTreeNodeListByNodeId","setupBoneData","treeData","VFXItemData","renderLevel","pn","getTransformData","childItem","subIndex","createAnimationComponent","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","Transparent","Opaque","RenderFace","Back","Both","Front","String","texTransform","texProperty","eulerHint","bindMatrixArray","id2Node","currentItem","tree2NodeList","nodeList2Tree","nodeId2Node","node2Path","setNodePath","getTreeNodeListByTreeId","getGeometryDataFromOptions","vertexCount","verticesType","VertexFormatType","Float32","verticesNormalize","uvsType","uvsNormalize","normalsType","normalsNormalize","modelData","vertices","uvs","normals","glType2VertexFormatType","verticesOffset","getOffset","uvsOffset","normalsOffset","indicesType","IndexFormatType","UInt16","UInt32","vertexData","semantic","VertexBufferSemantic","Position","dimension","Uv","Normal","GeometryType","indexFormat","indexOffset","encodeVertexData","geomPropsList","totalCount","geom0","geom1","isSame","array1","array2","mergeTypedArray","getVertexCount","createGeometryData","formatType","Int8","UInt8","Int16","totalByteLength","bufferOffset","vertexChannels","vertexBufferSemanticMap","vertexChannel","subBuffer","byteOffset","toBase64String","totalSize","ArrayBuffer","uint16View","uint8View","binaryString","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","registerPlugin","logger"],"mappings":"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"}