{"version":3,"file":"loader.mjs","sources":["../src/runtime/math.ts","../src/gltf/loader-helper.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_async_to_generator.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_extends.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_instanceof.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_array_like_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../../packages/effects-helper/dist/serialize/geometry.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_inherits.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_class.js","../src/runtime/common.ts","../src/runtime/object.ts","../src/plugin/const.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_reflect_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_get_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_function.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_wrap_native_super.js","../src/utility/ri-helper.ts","../src/runtime/shader-libs/standard-shader-source.ts","../src/runtime/shader-libs/standard-shader.ts","../src/utility/shader-helper.ts","../src/utility/ts-helper.ts","../src/plugin/model-plugin.ts","../src/plugin/model-tree-component.ts","../src/gesture/protocol.ts","../src/gesture/index.ts","../src/index.ts","../src/plugin/model-item.ts","../src/utility/hit-test-helper.ts","../src/utility/plugin-helper.ts","../src/runtime/animation.ts","../src/runtime/shader.ts","../src/runtime/material.ts","../src/runtime/skybox.ts","../src/runtime/cache.ts","../src/runtime/camera.ts","../src/runtime/light.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_assert_this_initialized.js","../src/runtime/mesh.ts","../src/runtime/scene.ts","../src/gltf/json-converter.ts","../src/gltf/loader-impl.ts"],"sourcesContent":["import { math } from '@galacean/effects';\n\nexport const {\n  Vector2, Vector3, Vector4, Matrix3, Matrix4, Color, Euler, EulerOrder, Quaternion,\n  Box3, Sphere, Ray, DEG2RAD,\n} = math;\n\nexport type Ray = math.Ray;\nexport type Euler = math.Euler;\nexport type Vector2 = math.Vector2;\nexport type Vector3 = math.Vector3;\nexport type Vector4 = math.Vector4;\nexport type Matrix3 = math.Matrix3;\nexport type Matrix4 = math.Matrix4;\nexport type Color = math.Color;\nexport type Quaternion = math.Quaternion;\n","import type { spec } from '@galacean/effects';\nimport { Transform as EffectsTransform } from '@galacean/effects';\nimport type { BaseTransform as Transform } from '../index';\nimport { Vector3, Matrix4, Quaternion, Euler, EulerOrder } from '../runtime/math';\n\nexport class LoaderHelper {\n  static getTransformFromMat4 (mat: Matrix4): Transform {\n    const transform = mat.getTransform();\n    const euler = transform.rotation.toEuler(new Euler());\n\n    return {\n      position: transform.translation.toArray(),\n      rotation: euler.toArray(),\n      scale: transform.scale.toArray(),\n    };\n  }\n\n  static getEffectsTransformFromMat4 (mat: Matrix4): Transform {\n    const transform = new EffectsTransform({\n      valid: true,\n    });\n\n    transform.cloneFromMatrix(mat);\n\n    return {\n      position: transform.position.toArray(),\n      rotation: transform.rotation.toArray(),\n      scale: transform.scale.toArray(),\n    };\n  }\n\n  static getTransformFromTranslation (t: Vector3): Transform {\n    return {\n      position: t.toArray(),\n    };\n  }\n\n  static getTransformFromDirection (d: Vector3): Transform {\n    const d0 = Vector3.fromArray([1, 0, 0]);\n    const d1 = d.clone().normalize();\n    const a = d0.clone().cross(d1);\n\n    if (a.length() < 0.01) { return {}; }\n\n    a.normalize();\n    const b = d1.dot(d0);\n    const c = Math.acos(b);\n\n    const mat = Matrix4.fromRotationAxis(a, c);\n\n    return LoaderHelper.getTransformFromMat4(mat);\n  }\n\n  static getEffectsTransformFromDirection (d: Vector3): Transform {\n    const d0 = Vector3.fromArray([0, 0, 1]);\n    const d1 = d.clone().normalize();\n    const a = d0.clone().cross(d1);\n\n    if (a.length() < 0.01) { return {}; }\n\n    a.normalize();\n    const b = d1.dot(d0);\n    const c = Math.acos(b);\n\n    const mat = Matrix4.fromRotationAxis(a, c);\n\n    return LoaderHelper.getEffectsTransformFromMat4(mat);\n  }\n\n  static getTransformFromTransDir (t: Vector3, d: Vector3): Transform {\n    const transform = LoaderHelper.getTransformFromDirection(d);\n\n    transform.position = t.toArray();\n\n    return transform;\n  }\n\n  static getEffectsTransformFromTransDir (t: Vector3, d: Vector3): Transform {\n    const transform = LoaderHelper.getEffectsTransformFromDirection(d);\n\n    transform.position = t.toArray();\n\n    return transform;\n  }\n\n  static getEulerFromQuat (q: Quaternion): [number, number, number] {\n    const euler = new Euler();\n    const quat = new Quaternion(q.x, q.y, q.z, q.w);\n\n    euler.order = EulerOrder.ZYX;\n    euler.setFromQuaternion(quat);\n\n    return [euler.x, euler.y, euler.z];\n  }\n\n  static getQuatFromEuler (e: Euler): [number, number, number, number] {\n    const quat = new Quaternion();\n\n    quat.setFromEuler(e);\n\n    return [quat.x, quat.y, quat.z, quat.w];\n  }\n\n  static toPlayerColor3 (color: spec.vec3): spec.vec3 {\n    // [0, 1] => [0, 255]\n    return [\n      LoaderHelper.scaleTo255(color[0]),\n      LoaderHelper.scaleTo255(color[1]),\n      LoaderHelper.scaleTo255(color[2]),\n    ];\n  }\n\n  static toPlayerColor4 (color: spec.vec4): spec.vec4 {\n    // [0, 1] => [0, 255]\n    return [\n      LoaderHelper.scaleTo255(color[0]),\n      LoaderHelper.scaleTo255(color[1]),\n      LoaderHelper.scaleTo255(color[2]),\n      LoaderHelper.scaleTo255(color[3]),\n    ];\n  }\n\n  static scaleTo255 (val: number): number {\n    const intVal = val * 255;\n\n    return Math.max(0, Math.min(intVal, 255));\n  }\n\n  static scaleTo1 (val: number): number {\n    const floatVal = val / 255.0;\n\n    return Math.max(0.0, Math.min(floatVal, 1.0));\n  }\n}\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n    try {\n        var info = gen[key](arg);\n        var value = info.value;\n    } catch (error) {\n        reject(error);\n        return;\n    }\n    if (info.done) resolve(value);\n    else Promise.resolve(value).then(_next, _throw);\n}\nfunction _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","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","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","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 { _ as _array_like_to_array } from \"./_array_like_to_array.js\";\n\nfunction _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 { _ as _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nfunction _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n    var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n    if (it) return (it = it.call(o)).next.bind(it);\n    // Fallback for engines without symbol support\n    if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n        if (it) o = it;\n\n        var i = 0;\n\n        return function() {\n            if (i >= o.length) return { done: true };\n\n            return { done: false, value: o[i++] };\n        };\n    }\n\n    throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _create_for_of_iterator_helper_loose as _ };\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\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 = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"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 = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\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\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\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, inner;\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      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\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  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\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  __rewriteRelativeImportExtension,\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","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 { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _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","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}\nfunction _create_class(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n\n    return Constructor;\n}\nexport { _create_class as _ };\n","import { Transform as EffectsTransform, PLAYER_OPTIONS_ENV_EDITOR, spec } from '@galacean/effects';\nimport { Quaternion, Euler, Vector3, Matrix4, EulerOrder } from './math';\nimport type { BaseTransform } from '../index';\n\n/**\n * Model 插件中的对象类型\n */\nexport enum PObjectType {\n  none = 0,\n  mesh,\n  texture,\n  material,\n  light,\n  camera,\n  skybox,\n  skin,\n  morph,\n  skeleton,\n  animation,\n  animationManager,\n  reference,\n}\n\n/**\n * 灯光类型\n */\nexport enum PLightType {\n  directional = 0,\n  point,\n  spot,\n  ambient,\n}\n\n/**\n * 纹理类型\n */\nexport enum PTextureType {\n  none = 0,\n  t2d,\n  t3d,\n  cube,\n}\n\n/**\n * 材质类型\n */\nexport enum PMaterialType {\n  none = 0,\n  unlit,\n  pbr,\n  //phong,\n  normalVis,\n  simpleFilter,\n  shadowBase,\n  shadowFilter,\n  //\n  skyboxFilter,\n}\n\n/**\n * 混合模式\n */\nexport enum PBlendMode {\n  opaque = 0,\n  masked,\n  translucent,\n  additive,\n}\n\n/**\n * 面片朝向模式\n */\nexport enum PFaceSideMode {\n  both = 0,\n  front,\n  back,\n}\n\nexport enum PShadowType {\n  none = 0,\n  standard,\n  variance,\n  expVariance,\n}\n\nexport const PBRShaderGUID = spec.BuiltinObjectGUID.PBRShader;\nexport const UnlitShaderGUID = spec.BuiltinObjectGUID.UnlitShader;\n\n/**\n * 插件变换类\n */\nexport class PTransform {\n  private translation = new Vector3(0, 0, 0);\n  private rotation = new Quaternion(0, 0, 0, 1);\n  private scale = new Vector3(1, 1, 1);\n\n  /**\n   * 从矩阵设置数据\n   * @param matrix - 4阶矩阵\n   * @returns\n   */\n  fromMatrix4 (matrix: Matrix4) {\n    this.setMatrix(matrix);\n\n    return this;\n  }\n\n  /**\n   * 从 GE 变换设置数据\n   * @param trans - GE 变换对象或数据\n   * @returns\n   */\n  fromEffectsTransform (trans: EffectsTransform | BaseTransform) {\n    if (trans instanceof EffectsTransform) {\n      this.setMatrix(trans.getWorldMatrix());\n    } else {\n      const effectsTrans = new EffectsTransform({\n        ...trans,\n        valid: true,\n      });\n\n      effectsTrans.setValid(true);\n\n      this.setMatrix(effectsTrans.getWorldMatrix());\n    }\n\n    return this;\n  }\n\n  /**\n   * 转成 GE 变换对象\n   * @param transform - GE 变换对象\n   * @returns\n   */\n  toEffectsTransform (transform: EffectsTransform) {\n    const mat = this.getMatrix();\n\n    transform.cloneFromMatrix(mat);\n\n    return transform;\n  }\n\n  /**\n   * 通过 GE 变换参数设置\n   * @param trans - GE 变换参数\n   * @returns\n   */\n  fromBaseTransform (trans: BaseTransform) {\n    if (trans.position) {\n      this.setTranslation(trans.position);\n    } else {\n      this.translation.set(0, 0, 0);\n    }\n\n    if (trans.rotation) {\n      this.setRotation(trans.rotation);\n    } else {\n      this.rotation.set(0, 0, 0, 1);\n    }\n\n    if (trans.scale) {\n      this.setScale(trans.scale);\n    } else {\n      this.scale.set(1, 1, 1);\n    }\n\n    return this;\n  }\n\n  /**\n   * 获取平移\n   * @returns\n   */\n  getTranslation (): Vector3 {\n    return this.translation;\n  }\n\n  /**\n   * 设置平移\n   * @param val - 平移\n   */\n  setTranslation (val: Vector3 | spec.vec3) {\n    if (val instanceof Vector3) {\n      this.translation.set(val.x, val.y, val.z);\n    } else {\n      this.translation.set(val[0], val[1], val[2]);\n    }\n  }\n\n  /**\n   * 获取位置\n   * @returns\n   */\n  getPosition (): Vector3 {\n    return this.translation;\n  }\n\n  /**\n   * 设置位置\n   * @param val - 位置\n   */\n  setPosition (val: Vector3 | spec.vec3) {\n    if (val instanceof Vector3) {\n      this.translation.set(val.x, val.y, val.z);\n    } else {\n      this.translation.set(val[0], val[1], val[2]);\n    }\n  }\n\n  /**\n   * 获取旋转\n   * @returns\n   */\n  getRotation (): Quaternion {\n    return this.rotation;\n  }\n\n  /**\n   * 设置旋转\n   * @param val - 旋转，可能是四元数或欧拉角\n   */\n  setRotation (val: Quaternion | Euler | Vector3 | spec.vec4 | spec.vec3) {\n    if (val instanceof Quaternion) {\n      this.rotation.set(val.x, val.y, val.z, val.w);\n    } else if (val instanceof Euler) {\n      this.rotation.setFromEuler(val);\n    } else if (val instanceof Vector3) {\n      this.rotation.setFromEuler(new Euler(val.x, val.y, val.z, EulerOrder.ZYX));\n    } else if (val.length === 4) {\n      this.rotation.set(val[0], val[1], val[2], val[3]);\n    } else {\n      this.rotation.setFromEuler(new Euler(val[0], val[1], val[2], EulerOrder.ZYX));\n    }\n  }\n\n  /**\n   * 获取缩放\n   * @returns\n   */\n  getScale (): Vector3 {\n    return this.scale;\n  }\n\n  /**\n   * 设置缩放\n   * @param val - 缩放\n   */\n  setScale (val: Vector3 | spec.vec3) {\n    if (val instanceof Vector3) {\n      this.scale.set(val.x, val.y, val.z);\n    } else {\n      this.scale.set(val[0], val[1], val[2]);\n    }\n  }\n\n  /**\n   * 获取矩阵\n   * @returns\n   */\n  getMatrix (): Matrix4 {\n    return new Matrix4().compose(this.getTranslation(), this.getRotation(), this.getScale());\n  }\n\n  /**\n   * 设置矩阵\n   * @param mat - 4阶矩阵\n   */\n  setMatrix (mat: Matrix4 | spec.mat4) {\n    if (mat instanceof Matrix4) {\n      const res = mat.getTransform();\n\n      this.setTranslation(res.translation);\n      this.setRotation(res.rotation);\n      this.setScale(res.scale);\n    } else {\n      const res = Matrix4.fromArray(mat).getTransform();\n\n      this.setTranslation(res.translation);\n      this.setRotation(res.rotation);\n      this.setScale(res.scale);\n    }\n  }\n}\n\n/**\n * 坐标系类\n */\nexport class PCoordinate {\n  /**\n   * 原点\n   */\n  origin: Vector3;\n  /**\n   * X 轴\n   */\n  xAxis: Vector3;\n  /**\n   * Y 轴\n   */\n  yAxis: Vector3;\n  /**\n   * Z 轴\n   */\n  zAxis: Vector3;\n\n  constructor () {\n    this.origin = new Vector3(0, 0, 0);\n    this.xAxis = new Vector3(1, 0, 0);\n    this.yAxis = new Vector3(0, 1, 0);\n    this.zAxis = new Vector3(0, 0, 1);\n  }\n\n  /**\n   * 从插件变换创建坐标系\n   * @param trans - 变换\n   * @param invert - 是否旋转取反\n   * @returns 坐标系对象\n   */\n  fromPTransform (trans: PTransform, invert = false) {\n    this.origin.copyFrom(trans.getPosition());\n    const rotationMatrix = trans.getRotation().toMatrix4(new Matrix4());\n\n    if (invert) {\n      rotationMatrix.invert();\n    }\n    this.fromRotationMatrix(rotationMatrix);\n\n    return this;\n  }\n\n  /**\n   * 从旋转矩阵创建坐标系\n   * @param matrix - 矩阵\n   */\n  fromRotationMatrix (matrix: Matrix4) {\n    const me = matrix.elements;\n\n    this.xAxis.set(me[0], me[1], me[2]);\n    this.yAxis.set(me[4], me[5], me[6]);\n    this.zAxis.set(me[8], me[9], me[10]);\n  }\n}\n\n/**\n * 全局状态\n */\nexport class PGlobalState {\n  /**\n   * 是否 WebGL2\n   */\n  isWebGL2: boolean;\n  /**\n   * 是否共享 Shader\n   */\n  shaderShared: boolean;\n  /**\n   * 运行时环境，编辑器模式或设备模式\n   */\n  runtimeEnv: string;\n  /**\n   * 兼容模式，glTF 模式或 Tiny3d 模式\n   */\n  compatibleMode: string;\n  /**\n   * 是否显示包围盒\n   */\n  visBoundingBox: boolean;\n  /**\n   * 渲染输出结果模式，可以换中间渲染数据\n   */\n  renderMode3D: spec.RenderMode3D;\n  /**\n   * UV结果输出时，棋盘格的大小控制，范围(0, 1)\n   */\n  renderMode3DUVGridSize: number;\n\n  // singleton related code\n  private static instance: PGlobalState;\n\n  /**\n   * 获取单例\n   * @returns\n   */\n  static getInstance (): PGlobalState {\n    // Do you need arguments? Make it a regular static method instead.\n    return this.instance || (this.instance = new this());\n  }\n\n  private constructor () {\n    this.isWebGL2 = false;\n    this.shaderShared = true;\n    this.runtimeEnv = PLAYER_OPTIONS_ENV_EDITOR;\n    this.compatibleMode = 'gltf';\n    this.visBoundingBox = false;\n    this.renderMode3D = spec.RenderMode3D.none;\n    this.renderMode3DUVGridSize = 1 / 16;\n  }\n\n  /**\n   * 重置数据\n   */\n  reset () {\n    this.isWebGL2 = false;\n    this.shaderShared = true;\n    this.runtimeEnv = PLAYER_OPTIONS_ENV_EDITOR;\n    this.compatibleMode = 'gltf';\n    this.visBoundingBox = false;\n    this.renderMode3D = spec.RenderMode3D.none;\n    this.renderMode3DUVGridSize = 1 / 16;\n  }\n\n  /**\n   * 是否可视化渲染中间结果\n   */\n  hasRenderMode3D () {\n    return this.renderMode3D !== spec.RenderMode3D.none;\n  }\n\n  /**\n   * 是否编辑器模式\n   */\n  get isEditorEnv () {\n    return this.runtimeEnv === PLAYER_OPTIONS_ENV_EDITOR;\n  }\n\n  /**\n   * 是否设备模式\n   */\n  get isDeviceEnv () {\n    return !this.isEditorEnv;\n  }\n\n  /**\n   * 是否 Tiny3d 模式\n   */\n  get isTiny3dMode () {\n    return this.compatibleMode === 'tiny3d';\n  }\n\n  /**\n   * 是否 glTF 模式\n   */\n  get isGLTFMode () {\n    return !this.isTiny3dMode;\n  }\n}\n\n","import type { spec, Renderer } from '@galacean/effects';\nimport type { BaseTransform } from '../index';\nimport type { Quaternion, Euler, Vector3, Matrix4 } from './math';\nimport { PObjectType, PTransform, PCoordinate } from './common';\nimport type { PSceneManager } from './scene';\n\nlet objectIndex = 1;\n\n/**\n * 抽象对象类，提供公共的成员变量和成员函数\n */\nexport abstract class PObject {\n  /**\n   * 名称\n   */\n  name = 'Unnamed Object';\n  /**\n   * 类型\n   */\n  type: PObjectType = PObjectType.none;\n\n  // create () {\n  //   // create everything in this object\n  // }\n\n  /**\n   * 销毁\n   */\n  dispose () {\n    // delete everything in this object\n  }\n\n  /**\n   * 是否空对象\n   * @returns\n   */\n  isNone () {\n    return this.type === PObjectType.none;\n  }\n\n  /**\n   * 是否有效，也就是类型不是 PObjectType.none\n   * @returns\n   */\n  isValid (): boolean {\n    return this.type !== PObjectType.none;\n  }\n\n  protected genName (name: string): string {\n    return `${name}_@${objectIndex++}`;\n  }\n}\n\n/**\n * 抽象实体类，支持可见性、变换和所属 VFX 元素\n */\nexport abstract class PEntity extends PObject {\n  private _visible = false;\n  private _transform = new PTransform();\n  /**\n   * 是否删除\n   */\n  deleted = false;\n\n  /**\n   * 逻辑更新\n   */\n  update () {\n\n  }\n\n  /**\n   * 渲染对象\n   * @param scene - 场景管理器\n   * @param renderer 渲染器\n   */\n  render (scene: PSceneManager, renderer: Renderer) {\n    // OVERRIDE\n  }\n\n  /**\n   * 外部改变可见性时的回调\n   * @param visible - 可见性\n   */\n  onVisibleChanged (visible: boolean) {\n    this.visible = visible;\n  }\n\n  /**\n   * 仅标记不可见和删除状态，但不进行 WebGL 相关资源的释放\n   * 最终释放 WebGL 相关资源是在 plugin destroy 的时候\n   */\n  override dispose () {\n    super.dispose();\n    this.visible = false;\n    this.deleted = true;\n  }\n\n  /**\n   * 获取可见性，如果实体非法也是不可见\n   */\n  get visible (): boolean {\n    return this._visible && this.isValid();\n  }\n\n  /**\n   * 设置可见性\n   */\n  set visible (val: boolean) {\n    this._visible = val;\n  }\n\n  /**\n   * 获取变换\n   */\n  get transform (): PTransform {\n    return this._transform;\n  }\n\n  /**\n   * 设置变换，可以传入插件变换对象或变换参数\n   */\n  set transform (val: PTransform | BaseTransform) {\n    if (val instanceof PTransform) {\n      this._transform = val;\n    } else {\n      if (val.position !== undefined) {\n        this._transform.setTranslation(val.position);\n      }\n      if (val.rotation !== undefined) {\n        this._transform.setRotation(val.rotation);\n      }\n      if (val.scale !== undefined) {\n        this._transform.setScale(val.scale);\n      }\n    }\n  }\n\n  /**\n   * 获取位移\n   */\n  get translation (): Vector3 {\n    return this._transform.getTranslation();\n  }\n\n  /**\n   * 设置位移\n   */\n  set translation (val: Vector3 | spec.vec3) {\n    this._transform.setTranslation(val);\n  }\n\n  /**\n   * 获取位置\n   */\n  get position (): Vector3 {\n    return this._transform.getTranslation();\n  }\n\n  /**\n   * 设置位置\n   */\n  set position (val: Vector3 | spec.vec3) {\n    this._transform.setTranslation(val);\n  }\n\n  /**\n   * 获取旋转\n   */\n  get rotation (): Quaternion {\n    return this._transform.getRotation();\n  }\n\n  /**\n   * 设置旋转\n   */\n  set rotation (val: Quaternion | Euler | Vector3 | spec.vec4 | spec.vec3) {\n    this._transform.setRotation(val);\n  }\n\n  /**\n   * 获取缩放\n   */\n  get scale (): Vector3 {\n    return this._transform.getScale();\n  }\n\n  /**\n   * 设置缩放\n   */\n  set scale (val: Vector3 | spec.vec3) {\n    this._transform.setScale(val);\n  }\n\n  /**\n   * 获取矩阵\n   */\n  get matrix (): Matrix4 {\n    return this._transform.getMatrix();\n  }\n\n  /**\n   * 设置矩阵\n   */\n  set matrix (val: Matrix4) {\n    this._transform.setMatrix(val);\n  }\n\n  /**\n   * 获取坐标系\n   */\n  get coordinate () {\n    const coord = new PCoordinate();\n\n    coord.fromPTransform(this._transform);\n\n    return coord;\n  }\n\n}\n\n","import type { spec } from '@galacean/effects';\n\n/**\n * Model 插件元素类型\n */\nexport const VFX_ITEM_TYPE_3D = 'PluginModel' as spec.ItemType;\n","function _is_native_reflect_construct() {\n    // Since Reflect.construct can't be properly polyfilled, some\n    // implementations (e.g. core-js@2) don't set the correct internal slots.\n    // Those polyfills don't allow us to subclass built-ins, so we need to\n    // use our fallback implementation.\n    try {\n        // If the internal slots aren't set, this throws an error similar to\n        //   TypeError: this is not a Boolean object.\n        var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n    } catch (_) {}\n    return (_is_native_reflect_construct = function() {\n        return !!result;\n    })();\n}\n\nexport { _is_native_reflect_construct as _ };\n","import { _ as _is_native_reflect_construct } from \"./_is_native_reflect_construct.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\nfunction _construct(Parent, args, Class) {\n    if (_is_native_reflect_construct()) _construct = Reflect.construct;\n    else {\n        _construct = function construct(Parent, args, Class) {\n            var a = [null];\n            a.push.apply(a, args);\n            var Constructor = Function.bind.apply(Parent, a);\n            var instance = new Constructor();\n\n            if (Class) _set_prototype_of(instance, Class.prototype);\n\n            return instance;\n        };\n    }\n\n    return _construct.apply(null, arguments);\n}\nexport { _construct as _ };\n","function _get_prototype_of(o) {\n    _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {\n        return o.__proto__ || Object.getPrototypeOf(o);\n    };\n\n    return _get_prototype_of(o);\n}\nexport { _get_prototype_of as _ };\n","function _is_native_function(fn) {\n    return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nexport { _is_native_function as _ };\n","import { _ as _construct } from \"./_construct.js\";\nimport { _ as _get_prototype_of } from \"./_get_prototype_of.js\";\nimport { _ as _is_native_function } from \"./_is_native_function.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _wrap_native_super(Class) {\n    var _cache = typeof Map === \"function\" ? new Map() : undefined;\n    _wrap_native_super = function(Class) {\n        if (Class === null || !_is_native_function(Class)) return Class;\n        if (typeof Class !== \"function\") throw new TypeError(\"Super expression must either be null or a function\");\n        if (typeof _cache !== \"undefined\") {\n            if (_cache.has(Class)) return _cache.get(Class);\n            _cache.set(Class, Wrapper);\n        }\n\n        function Wrapper() {\n            return _construct(Class, arguments, _get_prototype_of(this).constructor);\n        }\n        Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } });\n\n        return _set_prototype_of(Wrapper, Class);\n    };\n\n    return _wrap_native_super(Class);\n}\nexport { _wrap_native_super 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('effects_ObjectToWorld', modelMatrix);\n    for (let i = 0; i < positions.length; i += 3) {\n      material.setVector3(`_PositionList[${i / 3}]`, Vector3.fromArray(positions, i));\n    }\n    material.setVector3('_LineColor', lineColor);\n  }\n\n  /**\n   * 销毁，需要销毁 Mesh 对象\n   */\n  dispose () {\n    this.mesh.dispose();\n    // @ts-expect-error\n    this.mesh = undefined;\n  }\n\n  /**\n   * 获取顶点着色器代码\n   */\n  get vertexShader (): string {\n    return `\n      precision highp float;\n\n      uniform mat4 effects_ObjectToWorld;\n      uniform mat4 effects_MatrixVP;\n      uniform vec3 _PositionList[8];\n      attribute vec3 aPos;\n      void main(){\n        int index = int(aPos.x + 0.5);\n        vec4 pos = effects_ObjectToWorld * vec4(_PositionList[index], 1);\n        gl_Position = effects_MatrixVP * pos;\n      }\n    `;\n  }\n\n  /**\n   * 获取片段着色器代码\n   */\n  get fragmentShader (): string {\n    return `\n      precision highp float;\n\n      uniform vec3 _LineColor;\n      void main(){\n        gl_FragColor = vec4(_LineColor, 1);\n      }\n    `;\n  }\n\n  /**\n   * 获取基础几何体\n   */\n  get geometry (): GeometryProps {\n    const data = new Float32Array([0, 1, 2, 3, 4, 5, 6, 7]);\n    const index = new Uint32Array([\n      0, 1, 1, 2, 2, 3, 3, 0,\n      4, 5, 5, 6, 6, 7, 7, 4,\n      0, 4, 1, 5, 2, 6, 3, 7,\n    ]);\n\n    return {\n      attributes: {\n        aPos: {\n          type: glContext.FLOAT,\n          size: 1,\n          data,\n          stride: Float32Array.BYTES_PER_ELEMENT,\n          offset: 0,\n        },\n      },\n      mode: glContext.LINES,\n      indices: { data: index },\n      drawStart: 0,\n      drawCount: 24,\n    };\n  }\n}\n","import { ShaderFactory } from '@galacean/effects';\nimport { default as animationVertGLSL } from './standard/animation.vert.glsl';\nimport { default as extensionsFragGLSL } from './standard/extensions.frag.glsl';\nimport { default as toneMappingFragGLSL } from './standard/tone-mapping.frag.glsl';\nimport { default as texturesVertGLSL } from './standard/textures.vert.glsl';\nimport { default as functionsFragGLSL } from './standard/functions.frag.glsl';\nimport { default as shadowFragGLSL } from './standard/shadow.frag.glsl';\nimport { default as shadowCommonVert } from './standard/shadow-common.vert.glsl';\n\n/**\n * GLSL 着色器代码编译预处理\n */\nexport namespace StandardShaderSource {\n  /**\n   * GLSL 代码预处理和生成最终代码\n   * @param source - GLSL 代码\n   * @param features - 宏定义\n   * @param isWebGL2 - 是否 WebGL2\n   * @returns 最终代码\n   */\n  export function build (source: string, features: string[]): string {\n\n    source = source.replace(/#define FEATURES/,\n      features.map(value => `#define ${value}`).join('\\n'));\n\n    return source;\n  }\n}\n\nShaderFactory.registerInclude('animation.vert.glsl', animationVertGLSL);\nShaderFactory.registerInclude('extensions.frag.glsl', extensionsFragGLSL);\nShaderFactory.registerInclude('tone-mapping.frag.glsl', toneMappingFragGLSL);\nShaderFactory.registerInclude('textures.vert.glsl', texturesVertGLSL);\nShaderFactory.registerInclude('functions.frag.glsl', functionsFragGLSL);\nShaderFactory.registerInclude('shadow.frag.glsl', shadowFragGLSL);\nShaderFactory.registerInclude('shadow-common.vert.glsl', shadowCommonVert);\n\n","import { default as primitiveVert } from './standard/primitive.vert.glsl';\nimport { default as metallicRoughnessFrag } from './standard/metallic-roughness.frag.glsl';\nimport { default as shadowPassFrag } from './standard/shadow-pass.frag.glsl';\nimport { default as skyboxVert } from './standard/skybox.vert.glsl';\nimport { default as skyboxFrag } from './standard/skybox.frag.glsl';\nimport { StandardShaderSource } from './standard-shader-source';\nimport { PMaterialType } from '../common';\nimport type { PShaderContext } from '../shader';\n\n/**\n * 着色器代码生成类\n */\nexport class StandardShader {\n  /**\n   * WebGL 环境\n   */\n  static environment = 'webgl1';\n\n  /**\n   * 获取顶点着色器代码\n   * @param context - 着色器上下文\n   * @returns\n   */\n  static getVertexShaderCode (context: PShaderContext): string {\n    const features = context.featureList;\n    const materialType = context.material.materialType;\n\n    switch (materialType) {\n      case PMaterialType.unlit:\n      case PMaterialType.pbr:\n      case PMaterialType.shadowBase:\n        return StandardShaderSource.build(primitiveVert, features);\n      case PMaterialType.skyboxFilter:\n        return StandardShaderSource.build(skyboxVert, features);\n      default:\n        throw new Error(`Invalid material type ${materialType} for getVertexShaderString!`);\n    }\n  }\n\n  /**\n   * 获取片段着色器代码\n   * @param context - 着色器上下文\n   * @returns\n   */\n  static getFragmentShaderCode (context: PShaderContext): string {\n    const features = context.featureList;\n    const materialType = context.material.materialType;\n\n    switch (materialType) {\n      case PMaterialType.unlit:\n      case PMaterialType.pbr:\n        return StandardShaderSource.build(metallicRoughnessFrag, features);\n      case PMaterialType.shadowBase:\n        return StandardShaderSource.build(shadowPassFrag, features);\n      case PMaterialType.skyboxFilter:\n        return StandardShaderSource.build(skyboxFrag, features);\n      default:\n        throw new Error(`Invalid material type ${materialType} for getFragmentShaderString!`);\n    }\n  }\n\n  static genVertexShaderCode (materialType: PMaterialType): string {\n    switch (materialType) {\n      case PMaterialType.unlit:\n      case PMaterialType.pbr:\n      case PMaterialType.shadowBase:\n        return primitiveVert;\n      case PMaterialType.skyboxFilter:\n        return skyboxVert;\n      default:\n        throw new Error(`Invalid material type ${materialType} for genVertexShaderCode!`);\n    }\n  }\n\n  /**\n   * 获取片段着色器代码\n   * @param materialType - 材质类型\n   * @returns\n   */\n  static genFragmentShaderCode (materialType: PMaterialType): string {\n    switch (materialType) {\n      case PMaterialType.unlit:\n      case PMaterialType.pbr:\n        return metallicRoughnessFrag;\n      case PMaterialType.shadowBase:\n        return shadowPassFrag;\n      case PMaterialType.skyboxFilter:\n        return skyboxFrag;\n      default:\n        throw new Error(`Invalid material type ${materialType} for genFragmentShaderCode!`);\n    }\n  }\n\n}\n","import { StandardShader } from '../runtime/shader-libs/standard-shader';\nimport type { PShaderContext, PShaderResults } from '../runtime/shader';\nimport { PMaterialType } from '../runtime';\n\nexport function fetchPBRShaderCode (): PShaderResults {\n  const vertexShaderCode = StandardShader.genVertexShaderCode(PMaterialType.pbr);\n  const fragmentShaderCode = StandardShader.genFragmentShaderCode(PMaterialType.pbr);\n\n  return {\n    vertexShaderCode,\n    fragmentShaderCode,\n  };\n}\n\nexport function fetchUnlitShaderCode (): PShaderResults {\n  const vertexShaderCode = StandardShader.genVertexShaderCode(PMaterialType.unlit);\n  const fragmentShaderCode = StandardShader.genFragmentShaderCode(PMaterialType.unlit);\n\n  return {\n    vertexShaderCode,\n    fragmentShaderCode,\n  };\n}\n\n/**\n * 获取 PBR 材质着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getPBRPassShaderCode (context: PShaderContext): PShaderResults {\n  const vertexShaderCode = StandardShader.getVertexShaderCode(context);\n  const fragmentShaderCode = StandardShader.getFragmentShaderCode(context);\n\n  return {\n    vertexShaderCode: vertexShaderCode,\n    fragmentShaderCode: fragmentShaderCode,\n  };\n}\n\nexport function getShadowPassShaderCode (context: PShaderContext): PShaderResults {\n  const vertexShaderCode = StandardShader.getVertexShaderCode(context);\n  const fragmentShaderCode = StandardShader.getFragmentShaderCode(context);\n\n  return {\n    vertexShaderCode: vertexShaderCode,\n    fragmentShaderCode: fragmentShaderCode,\n  };\n}\n\n/**\n * 获取天空盒着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getSkyBoxShaderCode (context: PShaderContext): PShaderResults {\n  const vertexShaderCode = StandardShader.getVertexShaderCode(context);\n  const fragmentShaderCode = StandardShader.getFragmentShaderCode(context);\n\n  return {\n    vertexShaderCode: vertexShaderCode,\n    fragmentShaderCode: fragmentShaderCode,\n  };\n}\n\n/**\n * 获取四边形滤波着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getQuadFilterShaderCode (context: PShaderContext): PShaderResults {\n  const fragmentShaderCode = `\n    #version 100\n    precision highp float;\n    uniform sampler2D _ColorSampler;\n\n    varying vec2 v_UVCoord1;\n    void main(){\n      gl_FragColor = texture2D(_ColorSampler, v_UVCoord1);\n    }\n  `;\n\n  return {\n    vertexShaderCode: getQuadFilterVS(),\n    fragmentShaderCode: fragmentShaderCode,\n  };\n}\n\n/**\n * 获取法线可视化着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getNormalVisShaderCode (context: PShaderContext): PShaderResults {\n  const fragmentShaderCode = `\n    #version 100\n    precision highp float;\n    varying vec3 v_Normal;\n    void main(){\n      gl_FragColor = vec4(v_Normal * 0.5 + 0.5, 1);\n    }\n  `;\n\n  return {\n    vertexShaderCode: getBasicVS({ hasNormals: true }),\n    fragmentShaderCode: fragmentShaderCode,\n  };\n}\n\n/**\n * 获取仅漫反射着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getDiffuseOnlyShaderCode (context: PShaderContext): PShaderResults {\n  const fragmentShaderCode = `\n    #version 100\n    precision highp float;\n    varying vec3 v_Normal;\n    void main(){\n      vec3 lightDir = normalize(vec3(1, 1, 1));\n      gl_FragColor = vec4(max(0.0, dot(v_Normal, lightDir)) * 0.8);\n    }\n  `;\n\n  return {\n    vertexShaderCode: getBasicVS({ hasNormals: true }),\n    fragmentShaderCode: fragmentShaderCode,\n  };\n}\n\n/**\n * 获取 Kawase 模糊着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getKawaseBlurShaderCode (context: PShaderContext): PShaderResults {\n  const fragmentShaderCode = `\n    #version 100\n    precision highp float;\n    uniform float _Offset;\n    uniform vec2 _TextureSizeInv;\n    uniform sampler2D _TexturSampler;\n\n    varying vec2 v_UVCoord1;\n    void main() {\n      vec4 color = vec4(0.0);\n      color += texture2D(_TexturSampler, v_UVCoord1 + vec2(-_Offset-0.5,-_Offset-0.5) * _TextureSizeInv);\n      color += texture2D(_TexturSampler, v_UVCoord1 + vec2(-_Offset-0.5, _Offset+0.5) * _TextureSizeInv);\n      color += texture2D(_TexturSampler, v_UVCoord1 + vec2( _Offset+0.5,-_Offset-0.5) * _TextureSizeInv);\n      color += texture2D(_TexturSampler, v_UVCoord1 + vec2( _Offset+0.5, _Offset+0.5) * _TextureSizeInv);\n      gl_FragColor = color * 0.25;\n    }\n  `;\n\n  return {\n    vertexShaderCode: getQuadFilterVS(),\n    fragmentShaderCode: fragmentShaderCode,\n  };\n}\n\n/**\n * 获取简单滤波着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getSimpleFilterShaderCode (context: PShaderContext): PShaderResults {\n  const fragmentShaderCode = `\n    #version 100\n    precision highp float;\n    uniform sampler2D _FilterSampler;\n\n    varying vec2 v_UVCoord1;\n    void main() {\n      gl_FragColor = texture2D(_FilterSampler, v_UVCoord1) * vec4(0.5);\n    }\n  `;\n\n  return {\n    vertexShaderCode: getQuadFilterVS(),\n    fragmentShaderCode: fragmentShaderCode,\n  };\n}\n\n/**\n * 获取高斯模糊着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getGaussianBlurShaderCodeV2 (context: PShaderContext): PShaderResults {\n  const fragmentShaderCode = `\n    #version 100\n    precision highp float;\n    uniform vec2 _BlurScale;\n    uniform sampler2D _FilterSampler;\n\n    varying vec2 v_UVCoord1;\n    void main() {\n      vec4 color = vec4(0);\n      vec2 offset0 = vec2(0.53805) * _BlurScale.xy;\n      vec2 offset1 = vec2(2.06278) * _BlurScale.xy;\n      color += (texture2D(_FilterSampler, v_UVCoord1 + offset0) + texture2D(_FilterSampler, v_UVCoord1 - offset0)) * 0.44908;\n      color += (texture2D(_FilterSampler, v_UVCoord1 + offset1) + texture2D(_FilterSampler, v_UVCoord1 - offset1)) * 0.05092;\n      gl_FragColor = color;\n    }\n  `;\n\n  return {\n    vertexShaderCode: getQuadFilterVS(),\n    fragmentShaderCode: fragmentShaderCode,\n  };\n}\n\n/**\n * 获取高斯模糊着色器代码\n * @param context - 着色器上下文\n * @returns\n */\nexport function getGaussianBlurShaderCodeV1 (context: PShaderContext): PShaderResults {\n  const fragmentShaderCode = `\n    #version 100\n    precision highp float;\n    uniform vec2 _BlurScale;\n    uniform sampler2D _FilterSampler;\n\n    varying vec2 v_UVCoord1;\n    void main() {\n      vec4 color = vec4(0.0);\n      color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(-3.0) * _BlurScale.xy)) * (1.0/64.0);\n      color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(-2.0) * _BlurScale.xy)) * (6.0/64.0);\n      color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(-1.0) * _BlurScale.xy)) * (15.0/64.0);\n      color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(+0.0) * _BlurScale.xy)) * (20.0/64.0);\n      color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(+1.0) * _BlurScale.xy)) * (15.0/64.0);\n      color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(+2.0) * _BlurScale.xy)) * (6.0/64.0);\n      color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(+3.0) * _BlurScale.xy)) * (1.0/64.0);\n      gl_FragColor = color;\n    }\n  `;\n\n  return {\n    vertexShaderCode: getQuadFilterVS(),\n    fragmentShaderCode: fragmentShaderCode,\n  };\n}\n\n/**\n * 获取透明效果着色器代码\n * @param isVertexShader - 是否顶点着色器\n * @returns\n */\nexport function getTransparecyBaseShader (isVertexShader: boolean): string {\n  if (isVertexShader) {\n    return getBasicVS({ hasNormals: true });\n  } else {\n    return `\n    #version 100\n    #extension GL_EXT_draw_buffers: require\n\n    precision highp float;\n    uniform vec4 _BaseColorFactor;\n\n    #ifdef HAS_UVS\n    uniform sampler2D _BaseColorSampler;\n    varying vec2 v_UVCoord1;\n    #endif\n\n    varying vec3 v_Normal;\n\n    float weight(float z, float a) {\n      return clamp(pow(min(1.0, a * 10.0) + 0.01, 3.0) * 1e8 * pow(1.0 - z * 0.9, 3.0), 1e-2, 3e3);\n    }\n\n    void main() {\n      vec4 color = _BaseColorFactor;\n\n      #ifdef HAS_UVS\n      color *= texture2D(_BaseColorSampler, v_UVCoord1);\n      #endif\n\n      color.rgb *= color.a * dot(normalize(v_Normal), normalize(vec3(0, 1, 3))) * 5.0;\n      float w = weight(gl_FragCoord.z, color.a);\n      gl_FragData[0] = vec4(color.rgb * w, color.a);\n      gl_FragData[1] = vec4(color.a * w);\n    }\n    `;\n  }\n}\n\n/**\n * 获取透明效果滤波着色器代码\n * @param isVertexShader - 是否顶点着色器\n * @returns\n */\nexport function getTransparecyFilterShader (isVertexShader: boolean): string {\n  if (isVertexShader) {\n    return getQuadFilterVS();\n  } else {\n    return `\n    #version 100\n    precision highp float;\n    uniform sampler2D _AccumColorSampler;\n    uniform sampler2D _AccumAlphaSampler;\n\n    varying vec2 v_UVCoord1;\n    void main() {\n      vec4 accumColor = texture2D(_AccumColorSampler, v_UVCoord1);\n      vec4 accumAlpha = texture2D(_AccumAlphaSampler, v_UVCoord1);\n      float finalAlpha = 1.0 - accumColor.a;\n      vec3 finalColor = accumColor.rgb / clamp(accumAlpha.r, 0.001, 50000.0);\n      gl_FragColor = vec4(finalColor, finalAlpha);\n    }\n    `;\n  }\n}\n\nfunction getBasicVS (params: Record<string, boolean> = {}): string {\n  const featureList: string[] = ['#version 100'];\n\n  if (params.hasUVs) { featureList.push('#define HAS_UVS 1'); }\n  if (params.hasNormals) { featureList.push('#define HAS_NORMALS 1'); }\n\n  featureList.push(`\n    precision highp float;\n\n    uniform mat4 effects_ObjectToWorld;\n    uniform mat4 effects_MatrixVP;\n    attribute vec3 aPos;\n    varying vec3 v_Position;\n\n    #ifdef HAS_UVS\n    attribute vec2 aUV;\n    varying vec2 v_UVCoord1;\n    #endif\n\n    #ifdef HAS_NORMALS\n    uniform mat4 _NormalMatrix;\n    attribute vec3 aNormal;\n    varying vec3 v_Normal;\n    #endif\n\n    void main(){\n      vec4 pos = effects_ObjectToWorld * vec4(aPos, 1);\n      v_Position = pos.xyz / pos.w;\n\n      #ifdef HAS_UVS\n      v_UVCoord1 = aUV;\n      #endif\n\n      #ifdef HAS_NORMALS\n      v_Normal = normalize(vec3(effects_ObjectToWorld * vec4(aNormal, 0)));\n      #endif\n\n      gl_Position = effects_MatrixVP * pos;\n    }\n  `);\n\n  return featureList.join('\\n');\n}\n\nfunction getQuadFilterVS (): string {\n  return `\n    #version 100\n    precision highp float;\n    attribute vec3 aPos;\n    attribute vec2 aUV;\n\n    varying vec2 v_UVCoord1;\n    void main(){\n      v_UVCoord1 = aUV;\n      gl_Position = vec4(aPos.xy, 0.0, 1.0);\n    }\n  `;\n}\n","/**\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 { Scene, SceneLoadOptions, Composition, Engine, Component } from '@galacean/effects';\nimport {\n  VFXItem, Plugin, spec, Behaviour, PLAYER_OPTIONS_ENV_EDITOR, effectsClass,\n  GLSLVersion, Geometry,\n} from '@galacean/effects';\nimport {\n  CompositionCache, PTransform, PSceneManager, PCoordinate, PBRShaderGUID,\n  UnlitShaderGUID, DEG2RAD, Matrix4, Vector3,\n} from '../runtime';\nimport { VFX_ITEM_TYPE_3D } from './const';\nimport { ModelCameraComponent, ModelLightComponent, ModelMeshComponent } from './model-item';\nimport { fetchPBRShaderCode, fetchUnlitShaderCode, PluginHelper } from '../utility';\n\n/**\n * Model 插件类，负责支持播放器中的 3D 功能\n */\nexport class ModelPlugin extends Plugin {\n  /**\n   * 插件名称\n   */\n  override name = 'model';\n\n  override async onAssetsLoadStart (scene: Scene, options?: SceneLoadOptions | undefined): Promise<void> {\n    await CompositionCache.loadStaticResources();\n  }\n\n  /**\n   * 整个 load 阶段都不会创建 GL 相关的对象，只创建 JS 对象\n   * @param scene - 场景\n   * @param options - 加载选项\n   */\n  override onAssetsLoadFinish (scene: Scene, options: SceneLoadOptions, engine: Engine): 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    // Add PBR and Unlit shader data\n    const isWebGL2 = engine.gpuCapability.level === 2;\n    const pbrShaderCode = fetchPBRShaderCode();\n    const unlitShaderCode = fetchUnlitShaderCode();\n    const pbrShaderData: spec.ShaderData = {\n      id: PBRShaderGUID,\n      name: 'PBR Shader',\n      dataType: spec.DataType.Shader,\n      fragment: pbrShaderCode.fragmentShaderCode,\n      vertex: pbrShaderCode.vertexShaderCode,\n      // @ts-expect-error\n      glslVersion: isWebGL2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n    };\n    const unlitShaderData: spec.ShaderData = {\n      id: UnlitShaderGUID,\n      name: 'Unlit Shader',\n      dataType: spec.DataType.Shader,\n      fragment: unlitShaderCode.fragmentShaderCode,\n      vertex: unlitShaderCode.vertexShaderCode,\n      // @ts-expect-error\n      glslVersion: isWebGL2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n    };\n\n    engine.addEffectsObjectData(pbrShaderData);\n    engine.addEffectsObjectData(unlitShaderData);\n  }\n\n  /**\n   * 创建 3D 场景管理器和缓存器\n   * @param composition - 合成\n   * @param scene - 场景\n   */\n  override onCompositionCreated (composition: Composition, scene?: Scene): void {\n    const props = {\n      id: 'ModelPluginItem',\n      name: 'ModelPluginItem',\n      duration: 9999999,\n      endBehavior: spec.END_BEHAVIOR_FORWARD,\n    } as unknown as spec.Item;\n    const item = new VFXItem(composition.engine, props);\n\n    composition.addItem(item);\n    const modelPluginComponent = item.addComponent(ModelPluginComponent);\n\n    modelPluginComponent.sceneParams = scene?.storage ?? {};\n  }\n}\n\n/**\n * 插件组件类，实现特定的插件功能\n * @since 2.0.0\n * @internal\n */\n@effectsClass(spec.DataType.ModelPluginComponent)\nexport class ModelPluginComponent extends Behaviour {\n  private runtimeEnv = PLAYER_OPTIONS_ENV_EDITOR;\n  private compatibleMode = 'gltf';\n  private renderSkybox = true;\n  private visBoundingBox = false;\n  private autoAdjustScene = false;\n  /**\n   * 渲染插件是否启用动态排序功能\n   * 支持在渲染的时候对透明 Mesh 进行动态排序\n   */\n  private enableDynamicSort = false;\n  /**\n   * 3D 渲染模式，支持可视化渲染中间结果\n   * none 表示正常的渲染结果\n   */\n  private renderMode3D = spec.RenderMode3D.none;\n  /**\n   * UV 渲染模式中，指定棋盘格的大小，相对于大小为 1 的纹理\n   * 取值范围(0, 1)\n   */\n  private renderMode3DUVGridSize = 1 / 16;\n  /**\n   * 合成缓存器\n   */\n  private cache: CompositionCache;\n  /**\n   * 场景管理器\n   */\n  scene: PSceneManager;\n\n  sceneParams: Record<string, any>;\n\n  /**\n   * 构造函数，创建场景管理器\n   * @param engine - 引擎\n   * @param options - Mesh 参数\n   */\n  constructor (engine: Engine) {\n    super(engine);\n  }\n\n  override onAwake (): void {\n    this.cache = new CompositionCache(this.engine);\n    this.cache.setup(false);\n    this.scene = new PSceneManager(this.engine);\n    this.initial(this.sceneParams);\n  }\n\n  /**\n   * 组件后更新，合成相机和场景管理器更新\n   * @param dt - 更新间隔\n   */\n  override onLateUpdate (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    this.cache.dispose();\n    // @ts-expect-error\n    this.cache = null;\n  }\n\n  /**\n   * 组件初始化，初始化场景管理器并更新合成相机\n   * @param sceneParams - 场景参数\n   */\n  initial (sceneParams: Record<string, any>) {\n    this.runtimeEnv = sceneParams['runtimeEnv'] ?? this.runtimeEnv;\n    this.compatibleMode = sceneParams['compatibleMode'] ?? this.compatibleMode;\n    this.renderSkybox = sceneParams['renderSkybox'] ?? this.renderSkybox;\n    this.visBoundingBox = sceneParams['visBoundingBox'] ?? this.visBoundingBox;\n    this.autoAdjustScene = sceneParams['autoAdjustScene'] ?? this.autoAdjustScene;\n    this.enableDynamicSort = sceneParams['enableDynamicSort'] ?? this.enableDynamicSort;\n    this.renderMode3D = sceneParams['renderMode3D'] ?? this.renderMode3D;\n    this.renderMode3DUVGridSize = sceneParams['renderMode3DUVGridSize'] ?? this.renderMode3DUVGridSize;\n\n    const component = this.item.composition as Composition;\n\n    this.scene.initial({\n      componentName: `${component.id}`,\n      renderer: this.engine.renderer,\n      sceneCache: this.cache,\n      runtimeEnv: this.runtimeEnv,\n      compatibleMode: this.compatibleMode,\n      visBoundingBox: this.visBoundingBox,\n      enableDynamicSort: this.enableDynamicSort,\n      renderMode3D: this.renderMode3D,\n      renderMode3DUVGridSize: this.renderMode3DUVGridSize,\n      renderSkybox: this.renderSkybox,\n      lightItemCount: this.getLightItemCount(),\n      maxJointCount: this.getMaxJointCount(this.item.composition?.items ?? []),\n    });\n    this.updateSceneCamera(component);\n  }\n\n  /**\n   * 更新 SceneManager 中渲染用的相机，相机参数来自 composition.camera\n   *\n   * @param composition - 当前合成对象\n   * @param sceneManager - 当前合成对象绑定的 SceneManager\n   */\n  private updateSceneCamera (composition: Composition) {\n    this.scene.updateDefaultCamera(composition.camera.getOptions(), composition.camera.getViewportMatrix());\n  }\n\n  private getLightItemCount (): number {\n    let lightItemCount = 0;\n    const items = this.item.composition?.items ?? [];\n\n    items.forEach(item => {\n      if (item.getComponent(ModelLightComponent)) {\n        lightItemCount++;\n      }\n    });\n\n    return lightItemCount;\n  }\n\n  private getMaxJointCount (items: VFXItem[]): number {\n    let maxJointCount = 0;\n\n    items.forEach(item => {\n      const meshComp = item.getComponent(ModelMeshComponent);\n\n      if (meshComp && meshComp.data) {\n        const geometry = meshComp.data.geometry;\n\n        if (geometry instanceof Geometry) {\n          const skin = geometry.getSkinProps();\n\n          if (skin.boneNames) {\n            maxJointCount = Math.max(skin.boneNames.length, maxJointCount);\n          }\n        }\n      }\n      if (item.children.length !== 0) {\n        maxJointCount = Math.max(this.getMaxJointCount(item.children), maxJointCount);\n      }\n    });\n\n    return maxJointCount;\n  }\n}\n\n/**\n * 获取场景管理器，从合成中查找\n * @param component\n * @returns\n */\nexport function getSceneManager (component?: Component): PSceneManager | undefined {\n  const composition = component?.item?.composition;\n  const pluginItem = composition?.getItemByName('ModelPluginItem');\n  const pluginComp = pluginItem?.getComponent(ModelPluginComponent);\n\n  return pluginComp?.scene;\n}\n","import type { Engine } from '@galacean/effects';\nimport { Behaviour, effectsClass, spec } from '@galacean/effects';\nimport type { ModelTreeContent } from '../index';\n\n// TODO: Move to spec\ninterface ModelTreeComponentData extends spec.ComponentData, ModelTreeContent {}\n\n/**\n * 插件场景树组件类，实现 3D 场景树功能\n *\n * FIXME: 有些发布的新JSON包含TreeComponent，这里做兼容处理，否则会报错\n * @since 2.1.0\n */\n@effectsClass(spec.DataType.TreeComponent)\nexport class ModelTreeComponent extends Behaviour {\n  /**\n   * 参数\n   */\n  options?: ModelTreeContent;\n\n  /**\n   * 构造函数，创建节点树元素\n   * @param engine\n   * @param options\n   */\n  constructor (engine: Engine, options?: ModelTreeComponentData) {\n    super(engine);\n    if (options) {\n      this.fromData(options);\n    }\n  }\n\n  /**\n   * 反序列化，保存入参和创建节点树元素\n   * @param options\n   */\n  override fromData (options: ModelTreeComponentData): void {\n    super.fromData(options);\n    this.options = options;\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  updateComposition (composition: Composition) {\n    this.composition = composition;\n  }\n\n  getItem () {\n    return this.composition.items?.find(item => item.name === this.getCurrentTarget());\n  }\n\n  getCurrentTarget (): string {\n    return this.startParams.target;\n  }\n\n  getCurrentType (): CameraGestureType {\n    return this.startParams.type;\n  }\n\n  onKeyEvent (event: CameraKeyEvent): CameraOptionsEx {\n    // check event camera ID at first\n    if (this.startParams.target !== event.cameraID) {\n      this.startParams.target = event.cameraID;\n      this.startParams.type = CameraGestureType.translate;\n    }\n\n    // can't find camera item, throw error message\n    const item = this.getItem();\n\n    if (item === undefined) {\n      console.warn(`[CameraGestureHandlerImp] Unable to locate camera item with ID: ${this.startParams.target}.`);\n\n      return this.composition.camera.getOptions();\n    }\n\n    const camera = this.composition.camera;\n    const effectsTransfrom = new Transform({\n      ...camera.getOptions(),\n      valid: true,\n    });\n    const cameraTransform = new PTransform().fromEffectsTransform(effectsTransfrom);\n    const cameraCoordiante = new PCoordinate().fromPTransform(cameraTransform);\n\n    // compute move direction\n    const xAxis = event.xAxis ?? 0;\n    const yAxis = event.yAxis ?? 0;\n    const zAxis = event.zAxis ?? 0;\n    const dir = cameraCoordiante.xAxis.clone().multiply(xAxis);\n\n    dir.add(cameraCoordiante.yAxis.clone().multiply(yAxis));\n    dir.add(cameraCoordiante.zAxis.clone().multiply(zAxis));\n    if (dir.lengthSquared() < 0.00001) {\n      return camera.getOptions();\n    }\n    dir.normalize();\n\n    // update camera position\n    const speed = event.speed ?? 0.1;\n    const pos = cameraTransform.getPosition();\n\n    pos.add(dir.clone().multiply(speed));\n    this.setTransform(item, pos);\n\n    // update camera transform and coordinates\n    if (this.startParams.type === CameraGestureType.rotate_self) {\n      this.cameraTransform.setPosition(pos);\n      this.cameraCoordiante.origin = pos;\n    }\n\n    return camera.getOptions();\n  }\n\n  onXYMoveBegin (x: number, y: number, width: number, height: number, cameraID: string): CameraOptionsEx {\n    const args = {\n      type: CameraGestureType.translate,\n      mouseEvent: true,\n      clientX: x,\n      clientY: y,\n      clientWidth: width,\n      clientHeight: height,\n      target: cameraID,\n    };\n\n    return this.startGesture(args);\n  }\n\n  onXYMoving (x: number, y: number, speed?: number): CameraOptionsEx {\n    if (!this.startParams.mouseEvent) {\n      return this.composition.camera.getOptions();\n    }\n\n    const arg0 = this.startParams;\n    const arg = {\n      type: CameraGestureType.translate,\n      mouseEvent: true,\n      clientX: x,\n      clientY: y,\n      clientWidth: arg0.clientWidth,\n      clientHeight: arg0.clientHeight,\n      target: arg0.target,\n      speed: speed ?? 0.015,\n    };\n\n    return this.moveGesture(arg);\n  }\n\n  onXYMoveEnd () {\n    this.endGesture();\n  }\n\n  onZMoveBegin (x: number, y: number, width: number, height: number, cameraID: string): CameraOptionsEx {\n    const arg = {\n      type: CameraGestureType.scale,\n      mouseEvent: true,\n      clientX: x,\n      clientY: y,\n      clientWidth: width,\n      clientHeight: height,\n      target: cameraID,\n    };\n\n    return this.startGesture(arg);\n  }\n\n  onZMoving (x: number, y: number, speed = 0.015): CameraOptionsEx {\n    if (!this.startParams.mouseEvent) {\n      return this.composition.camera.getOptions();\n    }\n\n    const arg0 = this.startParams;\n    const arg = {\n      type: CameraGestureType.scale,\n      mouseEvent: true,\n      clientX: x,\n      clientY: y,\n      clientWidth: arg0.clientWidth,\n      clientHeight: arg0.clientHeight,\n      target: arg0.target,\n      speed,\n    };\n\n    return this.moveGesture(arg);\n  }\n\n  onZMoveEnd () {\n    this.endGesture();\n  }\n\n  onRotateBegin (x: number, y: number, width: number, height: number, cameraID: string): CameraOptionsEx {\n    const arg = {\n      type: CameraGestureType.rotate_self,\n      mouseEvent: true,\n      clientX: x,\n      clientY: y,\n      clientWidth: width,\n      clientHeight: height,\n      target: cameraID,\n    };\n\n    return this.startGesture(arg);\n  }\n\n  onRotating (x: number, y: number, speed?: number): CameraOptionsEx {\n    if (!this.startParams.mouseEvent) {\n      return this.composition.camera.getOptions();\n    }\n\n    const arg0 = this.startParams;\n    const arg = {\n      type: CameraGestureType.rotate_self,\n      mouseEvent: true,\n      clientX: x,\n      clientY: y,\n      clientWidth: arg0.clientWidth,\n      clientHeight: arg0.clientHeight,\n      target: arg0.target,\n      speed: speed ?? 1.5,\n    };\n\n    return this.moveGesture(arg);\n  }\n\n  onRotateEnd () {\n    this.endGesture();\n  }\n\n  onRotatePointBegin (x: number, y: number, width: number, height: number, point: spec.vec3, cameraID: string): CameraOptionsEx {\n    const arg = {\n      type: CameraGestureType.rotate_focus,\n      mouseEvent: true,\n      clientX: x,\n      clientY: y,\n      clientWidth: width,\n      clientHeight: height,\n      focusPoint: point,\n      target: cameraID,\n    };\n\n    return this.startGesture(arg);\n  }\n\n  onRotatingPoint (x: number, y: number, speed?: number): CameraOptionsEx {\n    if (!this.startParams.mouseEvent) {\n      return this.composition.camera.getOptions();\n    }\n\n    const arg0 = this.startParams;\n    const arg = {\n      type: CameraGestureType.rotate_focus,\n      mouseEvent: true,\n      clientX: x,\n      clientY: y,\n      clientWidth: arg0.clientWidth,\n      clientHeight: arg0.clientHeight,\n      focusPoint: arg0.focusPoint,\n      target: arg0.target,\n      speed: speed ?? 8.0,\n    };\n\n    return this.moveGesture(arg);\n  }\n\n  onRotatePointEnd (): void {\n    this.endGesture();\n  }\n\n  moveTo (cameraID: string, position: spec.vec3): void {\n    this.startParams.target = cameraID;\n    this.startParams.type = CameraGestureType.none;\n    const item = this.getItem();\n\n    if (item === undefined) {\n      console.warn('[CameraGestureHandlerImp] Can\\'t find camera item.');\n\n      return;\n    }\n\n    this.setPosition(item, position);\n  }\n\n  rotateTo (cameraID: string, quat: spec.vec4): void {\n    this.startParams.target = cameraID;\n    this.startParams.type = CameraGestureType.none;\n    const item = this.getItem();\n\n    if (item === undefined) {\n      console.warn('[CameraGestureHandlerImp] Can\\'t find camera item.');\n\n      return;\n    }\n\n    this.setQuaternion(item, quat);\n  }\n\n  onFocusPoint (cameraID: string, point: spec.vec3, distance?: number): void {\n    this.startParams.target = cameraID;\n    this.startParams.type = CameraGestureType.none;\n\n    const item = this.getItem();\n\n    if (item === undefined) {\n      console.warn('[CameraGestureHandlerImp] Can\\'t find camera item.');\n\n      return;\n    }\n    const newDistance = distance ?? 5;\n    const targetPoint = Vector3.fromArray(point);\n    //\n    const transform = new PTransform().fromEffectsTransform(item.transform);\n    const coordinate = new PCoordinate().fromPTransform(transform);\n    // FIXME: MATH\n    const lookatDir = Vector3.fromArray(coordinate.zAxis.toArray()).multiply(1.0);\n    //\n    const newOffset = lookatDir.clone().multiply(newDistance);\n    const newPosition = targetPoint.clone().add(newOffset);\n\n    //\n    this.setTransform(item, newPosition);\n    //\n    // z+方向优先\n    // const cameraPos = Vector3.fromArray(item.transform.position);\n    // const newLookatDir = targetPoint.clone().subVector(cameraPos).normalize();\n    // const newOffset = newLookatDir.clone().multiplyScalar(newDistance);\n    // const newPosition = targetPoint.clone().subVector(newOffset);\n    // const newUpVector = Vector3.tryZUpVector(newLookatDir, new Vector3);\n    // const viewMatrix = Matrix4.computeLookAt(newPosition, targetPoint, newUpVector, new Matrix4);\n    // const tranform = new PTransform().fromMatrix4(viewMatrix);\n    // const newRotation = tranform.rotation;\n    // item.transform.setQuat(-newRotation.x, -newRotation.y, -newRotation.z, newRotation.w);\n    // item.transform.setPosition(newPosition.x, newPosition.y, newPosition.z);\n    //\n    // 旋转优先\n    // const cameraPos = Vector3.fromArray(item.transform.position);\n    // const newLookatDir = targetPoint.clone().subVector(cameraPos).normalize();\n    // const newOffset = newLookatDir.clone().multiplyScalar(newDistance);\n    // const newPosition = targetPoint.clone().subVector(newOffset);\n    // const oldTransform = new PTransform().fromEffectsTransform(item.transform);\n    // const oldCoordinate = new PCoordinate().fromPTransform(oldTransform)\n    // const oldLookatDir = oldCoordinate.zAxis.clone().multiplyScalar(-1.0);\n    // const rotateAxis = oldLookatDir.cross(newLookatDir);\n    // const sinTheta = rotateAxis.length();\n    // const theta = Math.asin(sinTheta);\n    // const deltaRotation = Quaternion.fromAxisAngle(rotateAxis, theta, new Quaternion);\n    // const newRotation = Quaternion.multiply(deltaRotation, oldTransform.rotation, new Quaternion);\n    // item.transform.setQuat(newRotation.x, newRotation.y, newRotation.z, newRotation.w);\n    // item.transform.setPosition(newPosition.x, newPosition.y, newPosition.z);\n    //\n    //\n    this.startParams.target = '';\n  }\n\n  getCameraTransform (): Transform {\n    const camera = this.composition.camera;\n    const transform = new Transform(camera.getOptions());\n\n    transform.setValid(true);\n\n    return transform;\n  }\n\n  private startGesture (args: CameraGestureHandlerParams): CameraOptionsEx {\n    this.startParams = args;\n    this.updateCameraTransform(this.composition.camera.getOptions());\n\n    if (!this.getItem()) {\n      console.warn('[CameraGestureHandlerImp] Invalid target specified in startGesture.');\n    }\n\n    return this.composition.camera.getOptions();\n  }\n\n  private moveGesture (arg: CameraGestureHandlerParams): CameraOptionsEx {\n    if (this.getCurrentType() === arg.type) {\n      const item = this.getItem();\n\n      if (item === undefined) {\n        console.warn('[CameraGestureHandlerImp] Can\\'t find camera item.');\n\n        return this.composition.camera.getOptions();\n      }\n      const speed = arg.speed ?? 1.015;\n      const xAxis = this.cameraCoordiante.xAxis;\n      const yAxis = this.cameraCoordiante.yAxis;\n      const zAxis = this.cameraCoordiante.zAxis;\n      const dx = (arg.clientX - this.startParams.clientX);\n      const dy = (arg.clientY - this.startParams.clientY);\n\n      if (arg.type === CameraGestureType.translate) {\n        const pos = this.cameraTransform.getPosition();\n        const newPos = pos.clone();\n\n        newPos.add(xAxis.clone().multiply(-dx * speed));\n        newPos.add(yAxis.clone().multiply(dy * speed));\n        item.transform.setPosition(newPos.x, newPos.y, newPos.z);\n        this.setTransform(item, item.transform.position, item.transform.rotation);\n      } else if (arg.type === CameraGestureType.scale) {\n        const pos = this.cameraTransform.getPosition();\n        const newPos = pos.clone();\n\n        newPos.add(zAxis.clone().multiply(dy * speed));\n        item.transform.setPosition(newPos.x, newPos.y, newPos.z);\n        this.setTransform(item, item.transform.position, item.transform.rotation);\n      } else if (arg.type === CameraGestureType.rotate_self) {\n        const ndx = dx / arg.clientWidth;\n        const ndy = dy / arg.clientHeight;\n        const dxAngle = ndx * Math.PI * speed * 0.5;\n        const dyAngle = ndy * Math.PI * speed * 0.5;\n\n        const newRotation = Quaternion.fromAxisAngle(Vector3.Y, -dxAngle);\n        // FIXME: MATH\n        const tempRotation = Quaternion.fromAxisAngle(xAxis, -dyAngle);\n\n        newRotation.multiply(tempRotation);\n        // FIXME: MATH\n        newRotation.multiply(this.cameraTransform.getRotation());\n        item.transform.setQuaternion(newRotation.x, newRotation.y, newRotation.z, newRotation.w);\n        this.setTransform(item, item.transform.position, item.transform.rotation);\n      } else if (arg.type === CameraGestureType.rotate_focus) {\n        const ndx = dx / arg.clientWidth;\n        const ndy = dy / arg.clientHeight;\n        const dxAngle = ndx * Math.PI * speed;\n        const dyAngle = ndy * Math.PI * speed;\n        const newRotation = Quaternion.fromAxisAngle(Vector3.Y, -dxAngle);\n        const tempRotation = Quaternion.fromAxisAngle(xAxis, -dyAngle);\n\n        newRotation.multiply(tempRotation);\n        const rotateMatrix = newRotation.toMatrix4(new Matrix4());\n        const targetPoint = Vector3.fromArray(arg.focusPoint as spec.vec3);\n        const deltaPosition = this.cameraCoordiante.origin.clone().subtract(targetPoint);\n\n        rotateMatrix.transformPoint(deltaPosition);\n        const newPosition = deltaPosition.add(targetPoint);\n\n        newRotation.multiply(this.cameraTransform.getRotation());\n        item.transform.setPosition(newPosition.x, newPosition.y, newPosition.z);\n        item.transform.setQuaternion(newRotation.x, newRotation.y, newRotation.z, newRotation.w);\n        this.setTransform(item, newPosition, item.transform.rotation);\n      } else {\n        console.warn('[CameraGestureHandlerImp] Movement type not implemented.');\n      }\n    } else {\n      console.warn(`[CameraGestureHandlerImp] Invalid move type specified: ${arg.type}`);\n    }\n\n    return this.composition.camera.getOptions();\n  }\n\n  private setTransform (item: VFXItem, position?: Vector3, rotation?: Euler) {\n    const camera = item.getComponent(ModelCameraComponent);\n\n    if (camera !== undefined) {\n      camera.setTransform(position, rotation);\n    }\n  }\n\n  private setPosition (item: VFXItem, position: spec.vec3) {\n    item.transform.setPosition(...position);\n    const camera = item.getComponent(ModelCameraComponent);\n\n    if (camera !== undefined) {\n      camera.updateMainCamera();\n    }\n  }\n\n  private setQuaternion (item: VFXItem, quat: spec.vec4) {\n    item.transform.setQuaternion(...quat);\n    const camera = item.getComponent(ModelCameraComponent);\n\n    if (camera !== undefined) {\n      camera.updateMainCamera();\n    }\n  }\n\n  private endGesture () {\n    this.startParams.type = CameraGestureType.none;\n    this.startParams.mouseEvent = false;\n    this.startParams.target = '';\n  }\n\n  private updateCameraTransform (cameraOptions: CameraOptionsEx) {\n    const effectsTransfrom = new Transform(cameraOptions);\n\n    effectsTransfrom.setValid(true);\n\n    this.cameraTransform.fromEffectsTransform(effectsTransfrom);\n    this.cameraCoordiante.fromPTransform(this.cameraTransform);\n  }\n}\n\nexport * from './protocol';\n","import * as EFFECTS from '@galacean/effects';\nimport type { spec } from '@galacean/effects';\nimport { logger, registerPlugin } from '@galacean/effects';\nimport { ModelPlugin } from './plugin';\n\nregisterPlugin('model', ModelPlugin);\n\n/**\n * 插件版本号\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 ModelMeshContent = spec.ModelMeshItemContent<'studio'>;\nexport type ModelSkyboxContent = spec.SkyboxContent<'studio'>;\nexport type ModelMeshOptions = spec.ModelMeshOptions<'studio'>;\nexport type ModelSkinOptions = spec.SkinOptions<'studio'>;\nexport type ModelPrimitiveOptions = spec.PrimitiveOptions<'studio'>;\nexport type ModelMaterialUnlitOptions = spec.MaterialUnlitOptions<'studio'>;\nexport type ModelMaterialPBROptions = spec.MaterialPBROptions<'studio'>;\nexport type ModelMaterialHariOptions = spec.MaterialHairOptions<'studio'>;\nexport type ModelMaterialOptions = spec.MaterialOptions<'studio'>;\nexport type ModelSkyboxOptions = spec.SkyboxOptions<'studio'>;\nexport type ModelTreeOptions = spec.ModelTreeOptions<'studio'>;\nexport type ModelTreeContent = spec.ModelTreeContent<'studio'>;\nexport type ModelAnimTrackOptions = spec.ModelAnimTrackOptions<'studio'>;\nexport type ModelAnimationOptions = spec.ModelAnimationOptions<'studio'>;\n\nexport type ModelMeshSkinData = spec.SkinData;\nexport type ModelMeshMorphData = spec.MorphData;\nexport type ModelMeshPrimitiveData = spec.PrimitiveData;\nexport type ModelMeshComponentData = spec.ModelMeshComponentData;\nexport type ModelLightType = spec.LightType;\nexport type ModelLightComponentData = spec.ModelLightComponentData;\nexport type ModelCameraComponentData = spec.ModelCameraComponentData;\nexport type ModelSkyboxComponentData = spec.SkyboxComponentData;\nexport type AnimationComponentData = spec.AnimationComponentData;\n\nexport * from './gesture';\nexport * from './gltf';\nexport * from './plugin';\nexport * from './runtime';\nexport * from './utility';\n\nlogger.info(`Plugin model version: ${version}.`);\n\nif (version !== EFFECTS.version) {\n  console.error(\n    '注意：请统一 Model 插件与 Player 版本，不统一的版本混用会有不可预知的后果！',\n    '\\nAttention: Please ensure the Model plugin is synchronized with the Player version. Mixing and matching incompatible versions may result in unpredictable consequences!'\n  );\n}\n","import type {\n  Engine, HitTestBoxParams, HitTestCustomParams, HitTestSphereParams, Renderer, VFXItem,\n} from '@galacean/effects';\nimport {\n  HitTestType, Behaviour, RendererComponent, effectsClass, spec, AnimationClip,\n} from '@galacean/effects';\nimport type {\n  ModelCameraComponentData, ModelItemBounding, ModelLightComponentData,\n  ModelMeshComponentData, ModelSkyboxComponentData, AnimationComponentData,\n} from '../index';\nimport { VFX_ITEM_TYPE_3D } from '../index';\nimport type { PSceneManager, Euler, Ray, Vector2 } from '../runtime';\nimport { PCamera, PLight, PMesh, PSkybox, Vector3 } from '../runtime';\nimport { RayIntersectsBoxWithRotation } from '../utility';\nimport { getSceneManager } from './model-plugin';\n\n/**\n * 插件 Mesh 组件类，支持 3D Mesh 渲染能力\n * @since 2.0.0\n */\n@effectsClass(spec.DataType.MeshComponent)\nexport class ModelMeshComponent extends RendererComponent {\n  /**\n   * 内部 Mesh 对象\n   */\n  content: PMesh;\n  /**\n   * 参数\n   */\n  data?: ModelMeshComponentData;\n  /**\n   * 包围盒\n   */\n  bounding?: ModelItemBounding;\n  /**\n   * 场景管理器\n   */\n  sceneManager?: PSceneManager;\n  /**\n   * morph 动画权重\n   */\n  morphWeights: number[] = [];\n\n  private firstUpdate = true;\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 onStart (): void {\n    this.sceneManager = getSceneManager(this);\n    this.createContent();\n    this.item.type = VFX_ITEM_TYPE_3D;\n    this.priority = this.item.renderOrder;\n    this.sceneManager?.addItem(this.content);\n    if (this.item.parentId && this.item.parent) {\n      this.content.updateParentInfo(this.item.parentId, this.item.parent);\n    }\n    this.setVisible(true);\n    this.item.getHitTestParams = this.getHitTestParams;\n  }\n\n  /**\n   * 组件更新，更新内部对象状态\n   * @param dt - 更新间隔\n   */\n  override onUpdate (dt: number): void {\n    if (this.sceneManager) {\n      this.content.build(this.sceneManager);\n\n      if (this.firstUpdate) {\n        this.materials = this.content.subMeshes.map(subMesh => subMesh.getEffectsMaterial());\n        this.firstUpdate = false;\n      }\n    }\n\n    this.content.update();\n  }\n\n  /**\n   * 组件晚更新，晚更新内部对象状态\n   * @param dt - 更新间隔\n   */\n  override onLateUpdate (dt: number): void {\n    this.content.lateUpdate();\n  }\n\n  /**\n   * 组件渲染，需要检查可见性\n   * @param renderer - 渲染器\n   * @returns\n   */\n  override render (renderer: Renderer) {\n    if (!this.getVisible() || !this.sceneManager) {\n      return;\n    }\n\n    this.maskManager.drawStencilMask(renderer, this);\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 = {\n      ...data,\n      materials: [],\n    };\n\n    this.data.rootBone = data.rootBone ? this.engine.findObject(data.rootBone) : undefined;\n    this.data.geometry = this.engine.findObject(data.geometry);\n\n    if (data.materials) {\n      for (let i = 0; i < data.materials.length; i++) {\n        this.data.materials[i] = this.engine.findObject(data.materials[i]);\n      }\n    }\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            clipMasks:this.frameClipMasks,\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            clipMasks:this.frameClipMasks,\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          clipMasks:this.frameClipMasks,\n        };\n      }\n    }\n  };\n\n  /**\n   * 计算元素包围盒，只针对 Mesh 对象\n   * @returns 包围盒\n   */\n  computeBoundingBox (): ModelItemBounding | undefined {\n    if (this.content && this.content instanceof PMesh) {\n      const worldMatrix = this.transform.getWorldMatrix();\n      const bbox = this.content.computeBoundingBox(worldMatrix);\n      const center = bbox.getCenter(new Vector3());\n      const size = bbox.getSize(new Vector3());\n\n      this.bounding = {\n        behavior: this.bounding?.behavior,\n        type: spec.ModelBoundingType.box,\n        center: [center.x, center.y, center.z],\n        size: [size.x, size.y, size.z],\n      };\n\n      return this.bounding;\n    } else {\n      return;\n    }\n  }\n}\n\n/**\n * 插件天空盒组件类，支持 3D 天空盒渲染能力\n * @since 2.0.0\n */\n@effectsClass(spec.DataType.SkyboxComponent)\nexport class ModelSkyboxComponent extends RendererComponent {\n  /**\n   * 内部天空盒对象\n   */\n  content: PSkybox;\n  /**\n   * 天空盒参数\n   */\n  data?: ModelSkyboxComponentData;\n  /**\n   * 场景管理器\n   */\n  sceneManager?: PSceneManager;\n\n  /**\n   * 构造函数，只保存传入参数，不在这里创建内部对象\n   * @param engine - 引擎\n   * @param data - Mesh 参数\n   */\n  constructor (engine: Engine, data?: ModelSkyboxComponentData) {\n    super(engine);\n    if (data) {\n      this.fromData(data);\n    }\n  }\n\n  /**\n   * 组件开始，需要创建内部对象和添加到场景管理器中\n   */\n  override onStart (): void {\n    this.createContent();\n    this.item.type = VFX_ITEM_TYPE_3D;\n    this.priority = this.item.renderOrder;\n    this.sceneManager = getSceneManager(this);\n    this.sceneManager?.addItem(this.content);\n    this.setVisible(true);\n\n    if (this.content.skyboxMesh) {\n      this.materials = [this.content.skyboxMesh.material];\n    }\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.maskManager.drawStencilMask(renderer, this);\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\n    data.diffuseImage = data.diffuseImage ? this.engine.findObject(data.diffuseImage) : undefined;\n    data.specularImage = this.engine.findObject(data.specularImage);\n    this.data = data;\n  }\n\n  /**\n   * 创建内部对象\n   */\n  createContent () {\n    if (this.data) {\n      const skyboxData = this.data;\n\n      this.content = new PSkybox(this.item.name, skyboxData, this);\n    }\n  }\n\n  /**\n   * 设置当前可见性。\n   * @param visible - true：可见，false：不可见\n   */\n  setVisible (visible: boolean) {\n    this.content?.onVisibleChanged(visible);\n  }\n\n  /**\n   * 获取当前可见性。\n   */\n  getVisible (): boolean {\n    return this.content?.visible ?? false;\n  }\n}\n\n/**\n * 插件灯光组件类，支持 3D 灯光能力\n * @since 2.0.0\n */\n@effectsClass(spec.DataType.LightComponent)\nexport class ModelLightComponent extends Behaviour {\n  /**\n   * 内部灯光对象\n   */\n  content: PLight;\n  /**\n   * 参数\n   */\n  data?: ModelLightComponentData;\n\n  /**\n   * 构造函数，只保存传入参数，不在这里创建内部对象\n   * @param engine - 引擎\n   * @param data - Mesh 参数\n   */\n  constructor (engine: Engine, data?: ModelLightComponentData) {\n    super(engine);\n    if (data) {\n      this.fromData(data);\n    }\n  }\n\n  /**\n   * 组件开始，需要创建内部对象和添加到场景管理器中\n   */\n  override onStart (): 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 onUpdate (dt: number): void {\n    this.content.update();\n  }\n\n  /**\n   * 组件销毁\n   */\n  override onDestroy (): void {\n    this.content.dispose();\n  }\n\n  /**\n   * 反序列化，记录传入参数\n   * @param data - 组件参数\n   */\n  override fromData (data: ModelLightComponentData): void {\n    super.fromData(data);\n\n    this.data = data;\n  }\n\n  /**\n   * 创建内部对象\n   */\n  createContent () {\n    if (this.data) {\n      const lightData = this.data;\n\n      this.content = new PLight(this.item.name, lightData, this);\n    }\n  }\n\n  /**\n   * 设置当前可见性。\n   * @param visible - true：可见，false：不可见\n   */\n  setVisible (visible: boolean) {\n    this.content?.onVisibleChanged(visible);\n  }\n\n  /**\n   * 获取当前 Mesh 的可见性。\n   */\n  getVisible (): boolean {\n    return this.content?.visible ?? false;\n  }\n}\n\n/**\n * 插件相机组件类，支持 3D 相机能力\n * @since 2.0.0\n */\n@effectsClass(spec.DataType.CameraComponent)\nexport class ModelCameraComponent extends Behaviour {\n  /**\n   * 内部相机对象\n   */\n  content: PCamera;\n  /**\n   * 参数\n   */\n  data?: ModelCameraComponentData;\n  /**\n   * 构造函数，只保存传入参数，不在这里创建内部对象\n   * @param engine - 引擎\n   * @param data - Mesh 参数\n   */\n  constructor (engine: Engine, data?: ModelCameraComponentData) {\n    super(engine);\n    if (data) {\n      this.fromData(data);\n    }\n  }\n\n  /**\n   * 组件开始，需要创建内部对象和添加到场景管理器中\n   */\n  override onStart (): 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 onUpdate (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.near = this.content.nearPlane;\n      composition.camera.far = this.content.farPlane;\n      composition.camera.fov = this.content.fov;\n\n      composition.camera.setTransform(this.transform);\n    }\n  }\n\n  /**\n   * 设置变换\n   * @param position - 位置\n   * @param rotation - 旋转\n   */\n  setTransform (position?: Vector3, rotation?: Euler): void {\n    if (position) {\n      this.transform.setPosition(position.x, position.y, position.z);\n    }\n    if (rotation) {\n      this.transform.setRotation(rotation.x, rotation.y, rotation.z);\n    }\n    this.updateMainCamera();\n  }\n}\n\n/**\n * 插件动画组件类，支持 3D 动画能力\n * @since 2.0.0\n */\n@effectsClass(spec.DataType.AnimationComponent)\nexport class AnimationComponent extends Behaviour {\n  /**\n   * 参数\n   */\n  data?: AnimationComponentData;\n\n  elapsedTime = 0;\n  animation = -1;\n  clips: ModelAnimationClip[] = [];\n  /**\n   * 构造函数，只保存传入参数，不在这里创建内部对象\n   * @param engine - 引擎\n   */\n  constructor (engine: Engine) {\n    super(engine);\n  }\n\n  /**\n   * 组件开始，需要创建内部对象和添加到场景管理器中\n   */\n  override onStart (): void {\n    this.elapsedTime = 0;\n    this.item.type = VFX_ITEM_TYPE_3D;\n  }\n\n  /**\n   * 组件更新，更新内部对象状态\n   * @param dt - 更新间隔\n   */\n  override onUpdate (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      const animationClip = this.engine.findObject<AnimationClip>(clipData);\n\n      clipObj.setFromAnimationClip(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 = this.duration;\n    const life = Math.max(0, time) % duration;\n\n    for (const curve of this.positionCurves) {\n      const value = curve.keyFrames.getValue(life % this.duration);\n      const target = this.getTargetItem(vfxItem, curve.path);\n\n      target?.transform.setPosition(value.x, value.y, value.z);\n    }\n\n    for (const curve of this.rotationCurves) {\n      const value = curve.keyFrames.getValue(life % this.duration);\n      const target = this.getTargetItem(vfxItem, curve.path);\n\n      target?.transform.setQuaternion(value.x, value.y, value.z, value.w);\n    }\n\n    for (const curve of this.scaleCurves) {\n      const value = curve.keyFrames.getValue(life % this.duration);\n      const target = this.getTargetItem(vfxItem, curve.path);\n\n      target?.transform.setScale(value.x, value.y, value.z);\n    }\n\n    for (const curve of this.floatCurves) {\n      const value = curve.keyFrames.getValue(life % this.duration);\n      const target = this.getTargetItem(vfxItem, curve.path);\n\n      if (curve.className === 'ModelMeshComponent') {\n        const component = target?.getComponent(ModelMeshComponent);\n\n        if (component) {\n          const properties = curve.property.split('.');\n\n          setProperty(component, properties, value);\n        } else {\n          console.error('Can\\'t find mesh component.');\n        }\n      } else {\n        console.warn(`Ignore curve: className ${curve.className}.`);\n      }\n    }\n  }\n\n  setFromAnimationClip (clip: AnimationClip) {\n    this.duration = clip.duration;\n    this.positionCurves = clip.positionCurves.slice();\n    this.rotationCurves = clip.rotationCurves.slice();\n    this.scaleCurves = clip.scaleCurves.slice();\n    this.floatCurves = clip.floatCurves.slice();\n  }\n\n  getTargetItem (rootItem: VFXItem, path: string) {\n    if (this.path2Node[path]) {\n      return this.path2Node[path];\n    }\n\n    let target = rootItem;\n    const nameList = path.split('/');\n\n    for (const name of nameList) {\n      let findTag = false;\n\n      for (const child of target.children) {\n        if (child.name === name) {\n          target = child;\n          findTag = true;\n\n          break;\n        }\n      }\n      if (!findTag) {\n        throw new Error(`Can't find path in tree ${rootItem.id}, ${path}.`);\n      }\n    }\n\n    this.path2Node[path] = target;\n\n    return target;\n  }\n}\n\nfunction setProperty<T> (obj: Object, properties: string[], value: T) {\n  const len = properties.length;\n  let current: any = obj;\n\n  for (let i = 0; i < len - 1; i++) {\n    const propName = properties[i];\n\n    if (!(propName in current) || typeof current[propName] !== 'object') {\n      console.error(`Invalid properties ${properties}.`);\n\n      return;\n    }\n    current = current[propName];\n  }\n\n  current[properties[len - 1]] = value;\n}\n","import type { Composition, Region, spec } from '@galacean/effects';\nimport type { Ray, Matrix4 } from '../runtime/math';\nimport { Vector3 } from '../runtime/math';\nimport type { ModelItemBounding, ModelItemBoundingBox } from '../index';\nimport { VFX_ITEM_TYPE_3D } from '../plugin/const';\nimport { ModelMeshComponent } from '../plugin/model-item';\n\n// 射线与带旋转的包围盒求交\n// function transformDirection (m: Matrix4, direction: Vector3) {\n//   const x = direction.x;\n//   const y = direction.y;\n//   const z = direction.z;\n//   const me = m.elements;\n//   const result = new Vector3();\n\n//   result.x = me[0] * x + me[4] * y + me[8] * z;\n//   result.y = me[1] * x + me[5] * y + me[9] * z;\n//   result.z = me[2] * x + me[6] * y + me[10] * z;\n\n//   return result.normalize();\n\n// }\n\n/**\n * 带旋转的射线与包围盒求交\n * @param ray - 射线\n * @param matrixData - 矩阵\n * @param bounding - 包围盒\n * @returns 交点列表或者 undefined\n */\nfunction RayIntersectsBoxWithRotation (ray: Ray, matrixData: Matrix4, bounding: ModelItemBounding): Vector3[] | undefined {\n  const local2World = matrixData;\n  const world2Local = local2World.clone().invert();\n\n  const newRay = ray.clone().applyMatrix(world2Local);\n  const boxCenter = Vector3.fromArray(bounding.center!);\n  const boxHalfSize = Vector3.fromArray((bounding as ModelItemBoundingBox).size!).multiply(0.5);\n  const boxMin = boxCenter.clone().subtract(boxHalfSize);\n  const boxMax = boxCenter.clone().add(boxHalfSize);\n  const intersetPoint = newRay.intersectBox({ min: boxMin, max: boxMax }, new Vector3());\n\n  if (intersetPoint !== undefined) {\n    const insersetPointInWorld = local2World.transformPoint(intersetPoint);\n\n    return [insersetPointInWorld];\n  } else {\n    return;\n  }\n}\n\n/**\n * 射线与包围盒求交\n * @param ro - 射线原点\n * @param rd - 射线方向\n * @param bmin - 包围盒左下点\n * @param bmax - 包围盒右上点\n * @returns 交点参数或者 undefined\n */\nfunction RayBoxTesting (ro: Vector3, rd: Vector3, bmin: Vector3, bmax: Vector3): number | undefined {\n  let tmin = 0, tmax = 0;\n  let tymin = 0, tymax = 0;\n  let tzmin = 0, tzmax = 0;\n  const invdirx = 1 / rd.x;\n  const invdiry = 1 / rd.y;\n  const invdirz = 1 / rd.z;\n\n  if (invdirx >= 0) {\n    tmin = (bmin.x - ro.x) * invdirx;\n    tmax = (bmax.x - ro.x) * invdirx;\n  } else {\n    tmin = (bmax.x - ro.x) * invdirx;\n    tmax = (bmin.x - ro.x) * invdirx;\n  }\n\n  if (invdiry >= 0) {\n    tymin = (bmin.y - ro.y) * invdiry;\n    tymax = (bmax.y - ro.y) * invdiry;\n  } else {\n    tymin = (bmax.y - ro.y) * invdiry;\n    tymax = (bmin.y - ro.y) * invdiry;\n  }\n\n  // These lines also handle the case where tmin or tmax is NaN\n  // (result of 0 * Infinity). x !== x returns true if x is NaN\n  if (tmin > tymax || tymin > tmax) {\n    return;\n  }\n\n  if (tymin > tmin || tmin !== tmin) {\n    tmin = tymin;\n  }\n  if (tymax < tmax || tmax !== tmax) {\n    tmax = tymax;\n  }\n\n  if (invdirz >= 0) {\n    tzmin = (bmin.z - ro.z) * invdirz;\n    tzmax = (bmax.z - ro.z) * invdirz;\n  } else {\n    tzmin = (bmax.z - ro.z) * invdirz;\n    tzmax = (bmin.z - ro.z) * invdirz;\n  }\n\n  if (tmin > tzmax || tzmin > tmax) {\n    return;\n  }\n  if (tzmin > tmin || tmin !== tmin) {\n    tmin = tzmin;\n  }\n  if (tzmax < tmax || tmax !== tmax) {\n    //return point closest to the ray (positive side)\n    tmax = tzmax;\n  }\n\n  if (tmax < 0) {\n    return;\n  }\n\n  return tmin >= 0 ? tmin : tmax;\n}\n\nconst diff = new Vector3();\nconst edge1 = new Vector3();\nconst edge2 = new Vector3();\nconst normal = new Vector3();\n\n/**\n * 射线与三角形求交\n * @param ro - 射线原点\n * @param rd - 射线方向\n * @param a - 三角形点\n * @param b - 三角形点\n * @param c - 三角形点\n * @param backfaceCulling - 是否剔除背面\n * @returns 交点参数或者 undefined\n */\nfunction RayTriangleTesting (ro: Vector3, rd: Vector3, a: Vector3, b: Vector3, c: Vector3, backfaceCulling: boolean): number | undefined {\n  // Compute the offset origin, edges, and normal.\n  // from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n  edge1.subtractVectors(b, a);\n  edge2.subtractVectors(c, a);\n  normal.crossVectors(edge1, edge2);\n  // Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n  // E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n  //\t |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n  //\t |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n  //\t |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\n  let DdN = rd.dot(normal);\n  let sign = 0;\n\n  if (DdN > 0) {\n    if (backfaceCulling) { return; }\n    sign = 1;\n  } else if (DdN < 0) {\n    sign = -1;\n    DdN = -DdN;\n  } else {\n    return;\n  }\n\n  diff.subtractVectors(ro, a);\n\n  edge2.crossVectors(diff, edge2);\n  const DdQxE2 = sign * rd.dot(edge2); // b1 < 0, no intersection\n\n  if (DdQxE2 < 0) {\n    return;\n  }\n\n  edge1.crossVectors(edge1, diff);\n  const DdE1xQ = sign * rd.dot(edge1); // b2 < 0, no intersection\n\n  if (DdE1xQ < 0) {\n    return;\n  } // b1+b2 > 1, no intersection\n\n  if (DdQxE2 + DdE1xQ > DdN) {\n    return;\n  } // Line intersects triangle, check if ray does.\n\n  const QdN = -sign * diff.dot(normal); // t < 0, no intersection\n\n  if (QdN < 0) {\n    return;\n  } // Ray intersects triangle.\n\n  return QdN / DdN;\n}\n\n/**\n * 合成点击测试，支持获取多个交点，并按照远近排序\n * @param composition - 合成\n * @param x - 点击 x 坐标\n * @param y - 点击 y 坐标\n * @returns 点击信息列表\n */\nfunction CompositionHitTest (composition: Composition, x: number, y: number): Region[] {\n  const regions = composition.hitTest(x, y, true);\n  const ray = composition.getHitTestRay(x, y);\n\n  if (regions.length <= 0) {\n    return [];\n  }\n\n  const o = ray.origin;\n  const d = ray.direction;\n  const nums = regions.map((region, index) => {\n    const p = region.position;\n    //const p = (region.hitPositions as vec3[]) [index];\n    const t: spec.vec3 = [0, 0, 0];\n\n    for (let i = 0; i < 3; i++) {\n      t[i] = (p.getElement(i) - o.getElement(i)) / d.getElement(i);\n    }\n\n    return [index, Math.max(...t)];\n  });\n\n  nums.sort(function (a, b) {\n    const a1 = a[1] >= 0 ? a[1] : (a[1] + 1000000000);\n    const b1 = b[1] >= 0 ? b[1] : (b[1] + 1000000000);\n\n    return a1 - b1;\n  });\n\n  return nums.map(val => {\n    return regions[val[0]];\n  });\n}\n\n/**\n * 切换 3D Mesh 元素的包围盒显示标志\n * @param composition - 合成\n * @param itemId - 元素 id\n */\nfunction ToggleItemBounding (composition: Composition, itemId: string) {\n  composition.items?.forEach(item => {\n    if (item.type === VFX_ITEM_TYPE_3D) {\n      const meshComponent = item.getComponent(ModelMeshComponent);\n\n      if (meshComponent) {\n        const mesh = meshComponent.content;\n\n        if (item.id === itemId) {\n          mesh.visBoundingBox = true;\n        } else {\n          mesh.visBoundingBox = false;\n        }\n      }\n    }\n  });\n}\n\nexport { RayIntersectsBoxWithRotation, RayBoxTesting, RayTriangleTesting, ToggleItemBounding, CompositionHitTest };\n","import type {\n  Scene, Attribute, GeometryProps, TextureSourceOptions, TextureSourceCubeData,\n  TextureConfigOptions, Texture2DSourceOptionsImage, TextureCubeSourceOptionsImageMipmaps,\n  Engine, math,\n  RenderPass } from '@galacean/effects';\nimport {\n  Player, spec, Transform, glContext, Material, Mesh, Texture, Geometry, Renderer,\n  TextureSourceType, getDefaultTextureFactory, RenderPassDestroyAttachmentType,\n  DestroyOptions, loadImage, PLAYER_OPTIONS_ENV_EDITOR, GLSLVersion,\n} from '@galacean/effects';\nimport { deserializeGeometry } from '@galacean/effects-helper';\nimport type { GLTFCamera, GLTFImage, GLTFLight, GLTFTexture } from '@vvfx/resource-detection';\nimport type {\n  ModelAnimationOptions, ModelMeshOptions, ModelMaterialOptions, ModelLightOptions,\n  ModelCameraOptions, ModelSkyboxOptions, ModelSkinOptions, ModelPrimitiveOptions,\n  ModelTextureTransform, ModelTreeOptions, ModelAnimTrackOptions, ModelMeshComponent,\n} from '../index';\nimport type { PMaterialBase, PImageBufferData } from '../runtime';\nimport { Matrix3, Matrix4, Vector3, Vector4, DEG2RAD, PMorph, PGlobalState } from '../runtime';\nimport { RayTriangleTesting } from './hit-test-helper';\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   * 删除纹理\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    });\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      },\n      depthStencilAttachment: RenderPassDestroyAttachmentType.force,\n      colorAttachment: RenderPassDestroyAttachmentType.force,\n    });\n  }\n\n  /**\n   * 返回 Mesh 是否半透明\n   * @param component - ModelMeshComponent 对象\n   * @return 是否半透明\n   */\n  static isTransparentMesh (component: ModelMeshComponent): boolean {\n    return component.material.blending === true;\n  }\n\n  /**\n   * renderer 是否支持 Float 纹理\n   * @param engine - 引擎对象\n   * @returns\n   */\n  static isSupportFloatTexture (engine: Engine): boolean {\n    const capability = engine.gpuCapability;\n\n    return capability.detail.floatTexture !== 0;\n  }\n\n  /**\n   * renderer 是否支持 HalfFloat 纹理\n   * @returns\n   */\n  static isSupportHalfFloatTexture (engine: Engine): boolean {\n    const capability = engine.gpuCapability;\n\n    return capability.detail.halfFloatTexture !== 0;\n  }\n\n  /**\n   * 是否 2 的幂次\n   * @param v - 数值\n   * @returns\n   */\n  static isPow2 (v: number): boolean {\n    return !(v & (v - 1)) && (!!v);\n  }\n}\n\n/**\n * Mesh 辅助类，负责 Mesh 相关的基础对象创建\n */\nexport class MeshHelper {\n  /**\n   * 创建滤波 Mesh\n   * @param engine - 引擎\n   * @param name - 名称\n   * @param material - 3D 材质\n   * @returns Mesh 对象\n   */\n  static createFilterMesh (engine: Engine, name: string, material: PMaterialBase): Mesh {\n    const globalState = PGlobalState.getInstance();\n    const vertexShader = material.vertexShaderCode;\n    const fragmentShader = material.fragmentShaderCode;\n    const geometry = Geometry.create(engine, MeshHelper.getPlaneGeometry());\n    const isWebGL2 = engine.gpuCapability.level === 2;\n    const effectsMaterial = Material.create(\n      engine,\n      {\n        shader: {\n          vertex: vertexShader,\n          fragment: fragmentShader,\n          shared: globalState.shaderShared,\n          glslVersion: isWebGL2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n        },\n      }\n    );\n\n    material.setMaterialStates(effectsMaterial);\n\n    return Mesh.create(\n      engine,\n      {\n        name,\n        worldMatrix: Matrix4.fromIdentity(),\n        material: effectsMaterial,\n        geometry,\n      }\n    );\n  }\n\n  /**\n   * 获取平面的几何参数\n   * @returns 几何参数\n   */\n  static getPlaneGeometry (): GeometryProps {\n    const data = MeshHelper.getPlaneVertexArray();\n\n    return {\n      attributes: {\n        aPos: {\n          type: glContext.FLOAT,\n          size: 3,\n          data,\n          stride: Float32Array.BYTES_PER_ELEMENT * 8,\n          offset: 0,\n        },\n        aUV: {\n          type: glContext.FLOAT,\n          size: 2,\n          stride: Float32Array.BYTES_PER_ELEMENT * 8,\n          offset: Float32Array.BYTES_PER_ELEMENT * 3,\n          dataSource: 'aPos',\n        },\n        aNormal: {\n          type: glContext.FLOAT,\n          size: 3,\n          stride: Float32Array.BYTES_PER_ELEMENT * 8,\n          offset: Float32Array.BYTES_PER_ELEMENT * 5,\n          dataSource: 'aPos',\n        },\n      },\n      drawStart: 0,\n      drawCount: data.length / 8,\n    };\n  }\n\n  /**\n   * 获取平面顶点数组\n   * @returns 浮点数组\n   */\n  static getPlaneVertexArray (): Float32Array {\n    const halfSize = 1;\n\n    return new Float32Array([\n      -halfSize, -halfSize, 0, 0, 0, 0, 0, 1,\n      halfSize, -halfSize, 0, 1, 0, 0, 0, 1,\n      halfSize, halfSize, 0, 1, 1, 0, 0, 1,\n\n      -halfSize, -halfSize, 0, 0, 0, 0, 0, 1,\n      halfSize, halfSize, 0, 1, 1, 0, 0, 1,\n      -halfSize, halfSize, 0, 0, 1, 0, 0, 1,\n    ]);\n  }\n}\n\nexport interface EffectsSceneInfo {\n  loadSkybox?: boolean,\n}\n\n/**\n * 3D 插件辅助类，为插件提供基础的函数\n */\nexport class PluginHelper {\n  /**\n   * 创建 3D 灯光参数，从 glTF 灯光参数\n   * @param light - glTF 灯光参数\n   * @returns 3D 灯光参数\n   */\n  static createLightOptions (light: GLTFLight): ModelLightOptions {\n    const color = light.color ?? [255, 255, 255, 255];\n\n    if (light.type === 'point') {\n      return {\n        color,\n        intensity: light.intensity ?? 1.0,\n        //\n        lightType: 'point',\n        range: light.range ?? 0,\n      };\n    } else if (light.type === 'spot') {\n      return {\n        color,\n        intensity: light.intensity ?? 1.0,\n        //\n        lightType: 'spot',\n        range: light.range ?? 0,\n        innerConeAngle: light.innerConeAngle ?? 0,\n        outerConeAngle: light.outerConeAngle ?? Math.PI / 4.0,\n      };\n    } else { // \"directional\"\n      return {\n        color,\n        intensity: light.intensity ?? 1.0,\n        //\n        lightType: 'directional',\n      };\n    }\n  }\n\n  /**\n   * 创建 3D 相机参数，从 glTF 相机参数\n   * @param camera - glTF 相机参数\n   * @returns 3D 相机参数\n   */\n  static createCameraOptions (camera: GLTFCamera): ModelCameraOptions | undefined {\n    if (camera.perspective === undefined) { return; }\n\n    const p = camera.perspective;\n    const options: ModelCameraOptions = {\n      near: p.znear,\n      far: p.zfar ?? 1000,\n      fov: p.yfov,\n      clipMode: 0,\n    };\n\n    return options;\n  }\n\n  /**\n   * 转成播放器中 [0, 255] 区间的颜色值\n   * @param color - RGB 颜色值\n   * @returns RGB 颜色值\n   */\n  static toPlayerColor3 (color: spec.vec3): spec.vec3 {\n    // [0, 1] => [0, 255]\n    return [\n      this.scaleTo255(color[0]),\n      this.scaleTo255(color[1]),\n      this.scaleTo255(color[2]),\n    ];\n  }\n\n  /**\n   * 转成播放器中 [0, 255] 区间的颜色值\n   * @param color - RGBA 颜色值\n   * @returns RGBA 颜色值\n   */\n  static toPlayerColor4 (color: spec.vec4): spec.vec4 {\n    // [0, 1] => [0, 255]\n    return [\n      this.scaleTo255(color[0]),\n      this.scaleTo255(color[1]),\n      this.scaleTo255(color[2]),\n      this.scaleTo255(color[3]),\n    ];\n  }\n\n  /**\n   * 转成插件中 [0, 1] 区间的颜色值\n   * @param color - RGB 颜色值\n   * @returns RGB 颜色值\n   */\n  static toPluginColor3 (color: spec.vec3): spec.vec3 {\n    // [0, 255] => [0, 1]\n    return [\n      this.scaleTo1(color[0]),\n      this.scaleTo1(color[1]),\n      this.scaleTo1(color[2]),\n    ];\n  }\n\n  /**\n   * 转成插件中 [0, 1] 区间的颜色值\n   * @param color - RGBA 颜色值\n   * @returns RGBA 颜色值\n   */\n  static toPluginColor4 (color: spec.vec4): spec.vec4 {\n    // [0, 255] => [0, 1]\n    return [\n      this.scaleTo1(color[0]),\n      this.scaleTo1(color[1]),\n      this.scaleTo1(color[2]),\n      this.scaleTo1(color[3]),\n    ];\n  }\n\n  /**\n   * 创建 UV 变换矩阵，从 UV 变换参数中\n   * @param stValue - UV 的缩放和平移参数\n   * @param rotateValue - UV 的旋转参数\n   * @returns 3阶变换矩阵\n   */\n  static createUVTransform (material: Material, stName: string, rotateName: string): Matrix3 {\n    const stValue = material.getVector4(stName);\n    const rotateValue = material.getFloat(rotateName);\n\n    const res = Matrix3.fromIdentity();\n\n    if (stValue) {\n      res.setFromArray([\n        1, 0, 0,\n        0, 1, 0,\n        stValue.z, stValue.w, 1,\n      ]);\n    }\n\n    const temp = new Matrix3();\n\n    if (rotateValue) {\n      const cosTheta = Math.cos(rotateValue);\n      const sinTheta = Math.sin(rotateValue);\n\n      temp.setFromArray([\n        cosTheta, sinTheta, 0,\n        -sinTheta, cosTheta, 0,\n        0, 0, 1,\n      ]);\n      res.multiply(temp);\n    }\n\n    if (stValue) {\n      temp.setFromArray([\n        stValue.x, 0, 0,\n        0, stValue.y, 0,\n        0, 0, 1,\n      ]);\n      res.multiply(temp);\n    }\n\n    res.transpose();\n\n    return res;\n  }\n\n  /**\n   * 获取截断后的数值\n   * @param val - 数值\n   * @param minv - 最小值\n   * @param maxv - 最大值\n   * @returns\n   */\n  static clamp (val: number, minv: number, maxv: number): number {\n    return Math.max(Math.min(val, maxv), minv);\n  }\n\n  /**\n   * 转换成 [0, 255] 区间数值\n   * @param val - [0, 1] 区间数值\n   * @returns\n   */\n  static scaleTo255 (val: number): number {\n    const intVal = Math.round(val * 255);\n\n    return Math.max(0, Math.min(intVal, 255));\n  }\n\n  /**\n   * 转换成 [0, 1] 区间数值\n   * @param val - [0, 255] 区间数值\n   * @returns\n   */\n  static scaleTo1 (val: number): number {\n    const floatVal = val / 255.0;\n\n    return Math.max(0.0, Math.min(floatVal, 1.0));\n  }\n\n  /**\n   * 根据相机的位置、Y 轴旋转角度和目标点位置来计算相机变换，\n   * 使得相机能够专注于目标点上\n   * @param cameraPosition - 相机位置\n   * @param YRotationAngle - Y 轴旋转角度\n   * @param targetPoint - 目标点\n   * @returns 相机变换\n   */\n  static focusOnPoint (cameraPosition: spec.vec3, YRotationAngle: number, targetPoint: spec.vec3) {\n    const camPos = Vector3.fromArray(cameraPosition);\n    const targetPos = Vector3.fromArray(targetPoint);\n    const deltaPos = new Vector3().copyFrom(camPos).subtract(targetPos);\n    const rotationMat = Matrix4.fromRotationAxis(new Vector3(0, 1, 0), YRotationAngle * DEG2RAD);\n\n    rotationMat.transformPoint(deltaPos);\n    const newCamPos = deltaPos.clone().add(targetPos);\n    const viewMatrix = new Matrix4().lookAt(newCamPos, targetPos, new Vector3(0, 1, 0)).invert();\n    const effectsTransform = new Transform();\n\n    effectsTransform.setValid(true);\n    effectsTransform.cloneFromMatrix(viewMatrix);\n\n    return effectsTransform;\n  }\n\n  /**\n   * 场景预处理，在移动端 3D 插件会对场景进行预处理，调整纹理参数\n   * @param scene - 场景\n   * @param runtimeEnv - 运行时环境\n   * @param compatibleMode - 兼容模式\n   * @param autoAdjustScene - 是否自动调整\n   * @returns 场景信息描述\n   */\n  static preprocessScene (scene: Scene, runtimeEnv: string, compatibleMode: string): EffectsSceneInfo {\n    const deviceEnv = (runtimeEnv !== PLAYER_OPTIONS_ENV_EDITOR);\n    const tiny3dMode = (compatibleMode === 'tiny3d');\n    // 默认skybox如何处理需要讨论\n    const jsonScene = scene.jsonScene;\n\n    if (!(jsonScene && jsonScene.textures && jsonScene.materials)) {\n      // 安全检查\n      return {};\n    }\n\n    const dataMap: Record<string, TextureSourceOptions> = {};\n\n    scene.textureOptions.forEach(tex => {\n      const id = tex.id;\n\n      if (id) {\n        dataMap[id] = tex;\n      }\n    });\n\n    let loadSkybox = false;\n\n    if (deviceEnv) {\n      jsonScene.materials.forEach(mat => {\n        this.preprocessTextureOptions(dataMap, mat.textures['_BaseColorSampler'], true, tiny3dMode);\n        this.preprocessTextureOptions(dataMap, mat.textures['_MetallicRoughnessSampler'], false, tiny3dMode);\n        this.preprocessTextureOptions(dataMap, mat.textures['_NormalSampler'], false, tiny3dMode);\n        this.preprocessTextureOptions(dataMap, mat.textures['_OcclusionSampler'], false, tiny3dMode);\n        this.preprocessTextureOptions(dataMap, mat.textures['_EmissiveSampler'], false, tiny3dMode);\n      });\n      jsonScene.components.forEach(comp => {\n        if (comp.dataType === spec.DataType.SkyboxComponent) {\n          loadSkybox = true;\n          const skybox = comp as spec.SkyboxComponentData;\n\n          if (skybox.diffuseImage) {\n            this.preprocessTextureOptions(dataMap, skybox.diffuseImage, false, tiny3dMode);\n          }\n          if (skybox.specularImage) {\n            this.preprocessTextureOptions(dataMap, skybox.specularImage, false, tiny3dMode);\n          }\n        }\n      });\n    }\n\n    return { loadSkybox };\n  }\n\n  /**\n   * 纹理参数预处理，设置环绕模式和滤波器\n   * @param index - 纹理索引\n   * @param textures - 纹理数组\n   * @param isBaseColor - 是否基础颜色\n   * @param tiny3dMode - 是否 Tiny3d 模式\n   * @returns\n   */\n  static preprocessTextureOptions (dataMap: Record<string, TextureSourceOptions>, textureInfo: spec.MaterialTextureProperty | spec.DataPath, isBaseColor: boolean, tiny3dMode: boolean) {\n    if (!tiny3dMode || !textureInfo) {\n      return;\n    }\n\n    let texId;\n\n    if ('texture' in textureInfo) {\n      texId = textureInfo.texture.id;\n    } else {\n      texId = textureInfo.id;\n    }\n\n    if (!texId) {\n      return;\n    }\n\n    const texOptions = dataMap[texId];\n\n    if (!texOptions) {\n      return;\n    }\n\n    if (texOptions.target === undefined || texOptions.target === glContext.TEXTURE_2D) {\n      texOptions.wrapS = glContext.REPEAT;\n      texOptions.wrapT = glContext.REPEAT;\n      texOptions.magFilter = glContext.LINEAR;\n      texOptions.minFilter = glContext.LINEAR_MIPMAP_LINEAR;\n      if (!isBaseColor) {\n        texOptions.premultiplyAlpha = true;\n      }\n      const newOptions = texOptions as Texture2DSourceOptionsImage;\n\n      newOptions.generateMipmap = true;\n      const image = newOptions.image;\n\n      if (image && image.width && image.height) {\n        if (!WebGLHelper.isPow2(image.width) || !WebGLHelper.isPow2(image.height)) {\n          texOptions.minFilter = glContext.LINEAR;\n        }\n      }\n    } else if (texOptions.target === glContext.TEXTURE_CUBE_MAP) {\n      texOptions.wrapS = glContext.CLAMP_TO_EDGE;\n      texOptions.wrapT = glContext.CLAMP_TO_EDGE;\n      if ((texOptions as TextureCubeSourceOptionsImageMipmaps).mipmaps !== undefined) {\n        if ((texOptions as TextureCubeSourceOptionsImageMipmaps).mipmaps.length === 1) {\n          texOptions.magFilter = glContext.LINEAR;\n          texOptions.minFilter = glContext.LINEAR;\n        } else {\n          texOptions.magFilter = glContext.LINEAR;\n          texOptions.minFilter = glContext.LINEAR_MIPMAP_LINEAR;\n        }\n      } else {\n        texOptions.magFilter = glContext.LINEAR;\n        texOptions.minFilter = glContext.LINEAR;\n      }\n    }\n  }\n\n  /**\n   * 创建几何体，根据几何参数描述 JSON 和数据数组\n   * @param engine - 引擎\n   * @param geomJson - 几何参数描述 JSON\n   * @param bins - 数据数组\n   * @returns 几何体\n   */\n  static createGeometry (engine: Engine, geomJson: spec.GeometryOptionsJSON, bins: ArrayBuffer[]): Geometry {\n    const geomOptions = deserializeGeometry(geomJson, bins);\n    const attributes: Record<string, Attribute> = {};\n\n    // 兼容代码，解决 attribute 的名称问题\n    for (const attrib in geomOptions.attributes) {\n      const attribData = geomOptions.attributes[attrib];\n      const name = this.getAttributeName(attrib);\n\n      attributes[name] = attribData;\n    }\n    geomOptions.attributes = attributes;\n\n    return Geometry.create(engine, geomOptions);\n  }\n\n  /**\n   * 索引数组类型转换\n   * @param type - 类型\n   * @param array - 索引数组\n   * @returns 索引数组\n   */\n  static getIndexArray (type: number, array: spec.TypedArray) {\n    switch (type) {\n      case WebGLRenderingContext['UNSIGNED_INT']:\n        return array as Uint32Array;\n      case WebGLRenderingContext['UNSIGNED_SHORT']:\n        return array as Uint16Array;\n      case WebGLRenderingContext['UNSIGNED_BYTE']:\n        return array as Uint8Array;\n      default:\n        console.error(`Invalid index attribute type ${type}.`);\n    }\n  }\n\n  /**\n   * 属性名称转换\n   * @param name - 旧名称\n   * @returns 新名称\n   */\n  static getAttributeName (name: string): string {\n    switch (name) {\n      case 'POSITION': return 'aPos';\n      case 'NORMAL': return 'aNormal';\n      case 'TANGENT': return 'aTangent';\n      case 'TEXCOORD_0': return 'aUV';\n      case 'TEXCOORD_1': return 'aUV2';\n      case 'JOINTS_0': return 'aJoints';\n      case 'WEIGHTS_0': return 'aWeights';\n    }\n\n    if (!name.startsWith('a')) {\n      // aPos, aNormal, aTangent,\n      // aUV, aUV2, aJoints, aWeights\n      // aTargetXXX\n      console.warn(`Unknown attribute name: ${name}.`);\n    }\n\n    return name;\n  }\n\n  /**\n   * 获取纹理对象\n   * @param textures - 纹理数组\n   * @param index - 索引\n   * @returns\n   */\n  static getTextureObj (textures: Texture[], index?: number): Texture | null {\n    if (typeof index !== 'number') {\n      return null;\n    }\n\n    if (index < 0 || index >= textures.length) {\n      console.error(`Invalid index for textures: ${index}, ${textures.length}.`);\n    }\n\n    return textures[index];\n  }\n}\n\n/**\n * Web 辅助类，负责 Web 相关的基础功能\n */\nexport class WebHelper {\n  /**\n   * 获取图像文件名，从 URL 链接中\n   * @param url - 链接\n   * @param ext - 扩展名\n   * @returns\n   */\n  static getImageFileName (url: string, ext?: string): string {\n    const begin = url.lastIndexOf('/');\n    const end = url.lastIndexOf('.');\n    const substr = url.substring(begin + 1, end);\n\n    return ext ? substr + ext : substr;\n  }\n\n  /**\n   * 获取当前时间字符串\n   * @returns\n   */\n  static getCurrnetTimeStr (): string {\n    const date = new Date(Date.now());\n    const timeStr = date.toLocaleString('zh-CN');\n    const ms = `${date.getMilliseconds()}`;\n\n    return timeStr.split(/[ /:]+/).join('') + ms.padStart(3, '0');\n  }\n\n  /**\n   * 将 URL 链接保存成文件\n   * @param url - 链接\n   * @param filename - 文件名\n   */\n  static saveFileForURL (url: string, filename: string) {\n    const a = document.createElement('a');\n\n    a.setAttribute('download', filename);\n    a.target = '_blank';\n    a.href = url;\n    a.click();\n  }\n\n  /**\n   * 创建播放器\n   * @param manualRender - 是否手动渲染\n   * @returns\n   */\n  static createPlayer (manualRender = true) {\n    const canvas = document.createElement('canvas');\n\n    canvas.width = 512;\n    canvas.height = 512;\n\n    return new Player({\n      canvas,\n      renderFramework: 'webgl2',\n      env: PLAYER_OPTIONS_ENV_EDITOR,\n      renderOptions: {\n        willCaptureImage: true,\n      },\n      manualRender,\n    });\n  }\n\n  /**\n   * 休眠\n   * @param ms - 时间，单位是毫秒\n   * @returns\n   */\n  static async sleep (ms: number) {\n    return new Promise(resolve => setTimeout(resolve, ms));\n  }\n\n  /**\n   * 从 glTF 图像加载 HTML 图像元素\n   * @param image - glTF 图像\n   * @returns HTML 图像元素\n   */\n  static async loadImageFromGLTFImage (image: GLTFImage): Promise<HTMLImageElement> {\n    return loadImage(new Blob([image.imageData], { type: image.mimeType }));\n  }\n\n  /**\n   * 从图像缓存区数据加载 HTML 图像元素\n   * @param image - 图像缓冲区数据\n   * @returns\n   */\n  static async loadImageFromImageData (image: PImageBufferData): Promise<HTMLImageElement> {\n    return loadImage(new Blob([image.data], { type: image.mimeType }));\n  }\n\n  /**\n   * 获取画布渲染的内容，转成 PNG 图片数据\n   * @param canvas - HTML 画布元素\n   * @returns PNG 图片数据\n   */\n  static async getCanvasArrayBuffer (canvas: HTMLCanvasElement): Promise<ArrayBuffer> {\n    return new Promise<ArrayBuffer>(function (resolve, reject) {\n      canvas.toBlob(function (b) {\n        if (b) {\n          resolve(b.arrayBuffer());\n        } else {\n          reject(new Error('No canvas blob.'));\n        }\n      }, 'image/png', 1);\n    });\n  }\n\n  /**\n   * 从 HTML 图像、视频或位图图像对象获取图像数据\n   * @param image - HTML 图像、视频或位图图像\n   * @returns PNG 图片数据\n   */\n  static async getImageArrayBuffer (image: HTMLImageElement | ImageBitmap | HTMLVideoElement): Promise<ArrayBuffer> {\n    const cvs = document.createElement('canvas');\n\n    cvs.width = image.width;\n    cvs.height = image.height;\n    (cvs.getContext('2d') as CanvasRenderingContext2D).drawImage(image, 0, 0);\n\n    return this.getCanvasArrayBuffer(cvs);\n  }\n\n  /**\n   * 获取画布元素渲染结果\n   * @param canvas - 画布元素\n   * @returns\n   */\n  static getCanvasImageData (canvas: HTMLCanvasElement): ImageData {\n    const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n\n    return ctx.getImageData(0, 0, canvas.width, canvas.height);\n  }\n\n  /**\n   * 翻转图像\n   * @param imageData - 图像数据\n   * @returns 翻转后的图像\n   */\n  static flipImageData (imageData: ImageData): ImageData {\n    const flipped = document.createElement('canvas');\n    const ctx = flipped.getContext('2d') as CanvasRenderingContext2D;\n\n    flipped.width = imageData.width;\n    flipped.height = imageData.height;\n    // first put the imageData\n    ctx.putImageData(imageData, 0, 0);\n    // because we've got transparency\n    ctx.globalCompositeOperation = 'copy';\n    ctx.scale(1, -1); // Y flip\n    ctx.translate(0, -imageData.height); // so we can draw at 0,0\n    ctx.drawImage(flipped, 0, 0);\n    // now we can restore the context to defaults if needed\n    ctx.setTransform(1, 0, 0, 1, 0, 0);\n    ctx.globalCompositeOperation = 'source-over';\n\n    return ctx.getImageData(0, 0, flipped.width, flipped.height);\n  }\n\n  /**\n   * 从 HTML 图像、视频或位图图像对象获取翻转后的图像数据\n   * @param image - HTML 图像、视频或位图图像\n   * @returns PNG 图片数据\n   */\n  static getImageData (image: HTMLImageElement | ImageBitmap | HTMLVideoElement): ImageData {\n    const cvs = document.createElement('canvas');\n\n    cvs.width = image.width;\n    cvs.height = image.height;\n    const ctx = cvs.getContext('2d') as CanvasRenderingContext2D;\n\n    ctx.drawImage(image, 0, 0);\n\n    return this.flipImageData(ctx.getImageData(0, 0, cvs.width, cvs.height));\n  }\n\n  /**\n   * 获取位图数据，从 HTML 画布元素\n   * @param canvas - HTML 画布元素\n   * @returns uint8 数组\n   */\n  static getWebGLCanvasImageBuffer (canvas: HTMLCanvasElement): Uint8Array {\n    const ctx = canvas.getContext('webgl2') as WebGL2RenderingContext;\n    const pixels = new Uint8Array(canvas.width * canvas.height * 4);\n\n    ctx.readPixels(0, 0, canvas.width, canvas.height, ctx.RGBA, ctx.UNSIGNED_BYTE, pixels);\n\n    return pixels;\n  }\n}\n\n/**\n * 顶点属性缓冲区\n */\nexport class VertexAttribBuffer {\n  /**\n   * 顶点数组\n   */\n  data!: VertexArray;\n  /**\n   * 分量数\n   */\n  component = 0;\n  /**\n   * 长度\n   */\n  length = 0;\n  /**\n   * 偏移\n   */\n  offset = 0;\n  /**\n   * 步长\n   */\n  stride = 0;\n  /**\n   * 类型大小\n   */\n  typeSize = 0;\n\n  /**\n   * 获取包围盒，根据顶点数据\n   * @param box - 包围盒，会被修改\n   * @returns 包围盒\n   */\n  getBoundingBox (box: Box3) {\n    let index = this.offset;\n    const point = new Vector3();\n\n    while (index + this.component <= this.length) {\n      if (this.component == 2) {\n        point.set(this.data[index], this.data[index + 1], 0);\n      } else {\n        point.set(this.data[index], this.data[index + 1], this.data[index + 2]);\n      }\n      box.expandByPoint(point);\n      index += this.stride;\n    }\n\n    return box;\n  }\n}\n\nclass AttributeArray {\n  data!: spec.TypedArray;\n  //\n  length = 0;\n  offset = 0;\n  stride = 0;\n  //\n  typeSize = 0;\n  compCount = 0;\n  //\n  signed = false;\n  compressed = false;\n  compressScale = 1.0;\n\n  create (inAttrib: Attribute, inArray: spec.TypedArray) {\n    switch (inAttrib.type) {\n      case WebGLRenderingContext['INT']:\n        this.typeSize = 4;\n        this.signed = true;\n        this.compressScale = 1 / 2147483647.0;\n\n        break;\n      case WebGLRenderingContext['SHORT']:\n        this.typeSize = 2;\n        this.signed = true;\n        this.compressScale = 1 / 32767.0;\n\n        break;\n      default:\n        this.typeSize = 4;\n        this.signed = true;\n        this.compressScale = 1.0;\n    }\n\n    this.data = inArray;\n    this.length = this.data.length;\n    this.compCount = inAttrib.size;\n    //\n    this.offset = inAttrib.offset ?? 0;\n    if (this.offset > 0) {\n      if (this.offset % this.typeSize !== 0) { console.error(`Invalid offset ${this.offset}, type size ${this.typeSize}.`); }\n      this.offset = this.offset / this.typeSize;\n    }\n    //\n    this.stride = inAttrib.stride ?? 0;\n    if (this.stride > 0) {\n      if (this.stride % this.typeSize !== 0) { console.error(`Invalid stride ${this.stride}, type size ${this.typeSize}.`); }\n      this.stride = this.stride / this.typeSize;\n    } else {\n      this.stride = this.compCount;\n    }\n    //\n    this.compressed = inAttrib.normalize === true;\n  }\n\n  getData (index: number): [number, number, number, number] | undefined {\n    let offset = this.offset;\n\n    offset += index * this.stride;\n    if (offset + this.compCount > this.length) { return; }\n\n    let res: [number, number, number, number];\n\n    if (this.compCount === 2) {\n      res = [this.data[offset], this.data[offset + 1], 0, 0];\n    } else if (this.compCount === 3) {\n      res = [this.data[offset], this.data[offset + 1], this.data[offset + 2], 0];\n    } else {\n      res = [this.data[offset], this.data[offset + 1], this.data[offset + 2], this.data[offset + 3]];\n    }\n\n    if (this.compressed) {\n      for (let i = 0; i < this.compCount; i++) {\n        res[i] *= this.compressScale;\n        if (this.signed) {\n          res[i] = Math.max(res[i], -1.0);\n        }\n      }\n    }\n\n    return res;\n  }\n\n  getLength (): number {\n    return Math.round((this.length - this.offset) / this.stride);\n  }\n}\n\n/**\n * 几何包围盒代理类\n */\nexport class GeometryBoxProxy {\n  /**\n   * 渲染开始索引\n   */\n  drawStart = 0;\n  /**\n   * 渲染索引数目\n   */\n  drawCount = 0;\n  /**\n   * 索引数组\n   */\n  index?: spec.TypedArray;\n  /**\n   * 位置数组\n   */\n  position!: AttributeArray;\n  /**\n   * 关节点数组\n   */\n  joint?: AttributeArray;\n  /**\n   * 权重数组\n   */\n  weight?: AttributeArray;\n  /**\n   * 绑定矩阵数组\n   */\n  bindMatrices: Matrix4[] = [];\n\n  /**\n   * 创建函数，根据几何体和绑定矩阵数组\n   * @param geometry - 几何体\n   * @param bindMatrices - 绑定矩阵数组\n   */\n  create (geometry: Geometry, bindMatrices: Matrix4[]) {\n    this.drawStart = 0;\n    this.drawCount = Math.abs(geometry.getDrawCount());\n    // FIXME: 需要geometry中的attributes数组，GLGeometry有这个数组，其他的没有\n    // @ts-expect-error\n    const attributes = geometry.attributes as Record<string, Attribute>;\n\n    //\n    this.index = geometry.getIndexData();\n    const positionAttrib = attributes['aPos'];\n    const positionArray = geometry.getAttributeData('aPos') as spec.TypedArray;\n\n    this.position = new AttributeArray();\n    this.position.create(positionAttrib, positionArray);\n    //\n    const jointAttrib = attributes['aJoints'];\n    const weightAttrib = attributes['aWeights'];\n\n    if (jointAttrib !== undefined && weightAttrib !== undefined) {\n      const jointArray = geometry.getAttributeData('aJoints') as spec.TypedArray;\n      const weightArray = geometry.getAttributeData('aWeights') as spec.TypedArray;\n\n      this.joint = new AttributeArray();\n      this.joint.create(jointAttrib, jointArray);\n      this.weight = new AttributeArray();\n      this.weight.create(weightAttrib, weightArray);\n    }\n    this.bindMatrices = bindMatrices;\n  }\n\n  /**\n   * 获取包围盒，如果有骨骼动画，需要先更新位置\n   * @param box - 包围盒，会被修改\n   * @returns 包围盒\n   */\n  getBoundingBox (box: Box3) {\n    box.makeEmpty();\n    const skinMat = new Matrix4();\n    const hasAnim = this.joint !== undefined && this.weight !== undefined && this.bindMatrices.length > 0;\n\n    const indexSet: Set<number> = new Set();\n\n    if (this.index !== undefined) {\n      for (let i = 0; i < this.drawCount; i++) {\n        const j = this.drawStart + i;\n\n        if (j < this.index.length) {\n          indexSet.add(this.index[j]);\n        }\n      }\n    } else {\n      for (let i = 0; i < this.drawCount; i++) {\n        indexSet.add(this.drawStart + i);\n      }\n    }\n\n    indexSet.forEach(index => {\n      const posData = this.position.getData(index);\n\n      if (posData !== undefined) {\n        const posVec = Vector3.fromArray(posData);\n\n        if (hasAnim) {\n          const jointData = this.joint?.getData(index);\n          const weightData = this.weight?.getData(index);\n\n          if (jointData !== undefined && weightData !== undefined) {\n            skinMat.setZero();\n            let findError = false;\n\n            for (let i = 0; i < 4; i++) {\n              if (weightData[i] === 0) {\n                continue;\n              }\n\n              if (jointData[i] < 0 || jointData[i] >= this.bindMatrices.length) {\n                findError = true;\n\n                break;\n              }\n\n              const bindMat = this.bindMatrices[jointData[i]];\n\n              skinMat.addScaledMatrix(bindMat, weightData[i]);\n            }\n\n            if (!findError) {\n              const resVec = skinMat.transformVector4(new Vector4(posVec.x, posVec.y, posVec.z, 1.0));\n\n              if (Math.abs(resVec.w) > 1e-4) {\n                resVec.multiply(1.0 / resVec.w);\n                posVec.set(resVec.x, resVec.y, resVec.z);\n              }\n            }\n          }\n        }\n\n        box.expandByPoint(posVec);\n      }\n    });\n\n    return box;\n  }\n}\n\n/**\n * 点击测试代理类，\n */\nexport class HitTestingProxy {\n  /**\n   * 渲染开始索引\n   */\n  drawStart = 0;\n  /**\n   * 渲染索引数目\n   */\n  drawCount = 0;\n  /**\n   * 索引数组\n   */\n  index?: spec.TypedArray;\n  /**\n   * 位置数组\n   */\n  position!: AttributeArray;\n  /**\n   * 关节点数组\n   */\n  joint?: AttributeArray;\n  /**\n   * 权重数组\n   */\n  weight?: AttributeArray;\n  /**\n   * 是否双面\n   */\n  doubleSided = false;\n  /**\n   * 绑定矩阵数组\n   */\n  bindMatrices: Matrix4[] = [];\n  /**\n   * 是否有动画\n   */\n  hasAnimation = false;\n  /**\n   * 蒙皮矩阵\n   */\n  skinMatrix = new Matrix4();\n\n  /**\n   * 创建对象，传入几何体、是否双面和绑定矩阵列表\n   * @param geometry - 几何体\n   * @param doubleSided - 是否双面\n   * @param bindMatrices - 绑定矩阵列表\n   */\n  create (geometry: Geometry, doubleSided: boolean, bindMatrices: Matrix4[]) {\n    this.drawStart = 0;\n    this.drawCount = Math.abs(geometry.getDrawCount());\n    // FIXME: 需要geometry中的attributes数组，GLGeometry有这个数组，其他的没有\n    // @ts-expect-error\n    const attributes = geometry.attributes as Record<string, Attribute>;\n\n    //\n    this.index = geometry.getIndexData();\n    const positionAttrib = attributes['aPos'];\n    const positionArray = geometry.getAttributeData('aPos') as spec.TypedArray;\n\n    this.position = new AttributeArray();\n    this.position.create(positionAttrib, positionArray);\n    //\n    const jointAttrib = attributes['aJoints'];\n    const weightAttrib = attributes['aWeights'];\n\n    if (jointAttrib !== undefined && weightAttrib !== undefined) {\n      const jointArray = geometry.getAttributeData('aJoints') as spec.TypedArray;\n      const weightArray = geometry.getAttributeData('aWeights') as spec.TypedArray;\n\n      this.joint = new AttributeArray();\n      this.joint.create(jointAttrib, jointArray);\n      this.weight = new AttributeArray();\n      this.weight.create(weightAttrib, weightArray);\n    }\n    this.doubleSided = doubleSided;\n    this.bindMatrices = bindMatrices;\n    this.hasAnimation = this.joint !== undefined && this.weight !== undefined && this.bindMatrices.length > 0;\n  }\n\n  /**\n   * 点击测试，返回射线参数值\n   * @param rayOrigin - 射线原点\n   * @param rayDirection - 射线方向\n   * @returns 射线参数值或 undefined\n   */\n  getHitPoint (rayOrigin: Vector3, rayDirection: Vector3): number | undefined {\n    let mint: number | undefined;\n    const p0 = new Vector3(), p1 = new Vector3(), p2 = new Vector3();\n    const q0 = new Vector4(), q1 = new Vector4(), q2 = new Vector4();\n    const backfaceCulling = !this.doubleSided;\n\n    for (let i = 0; i + 2 < this.drawCount; i += 3) {\n      let i0 = this.drawStart + i;\n      let i1 = this.drawStart + i + 1;\n      let i2 = this.drawStart + i + 2;\n\n      if (this.index !== undefined) {\n        i0 = this.index[i0];\n        i1 = this.index[i1];\n        i2 = this.index[i2];\n      }\n\n      const r0 = this.getPosition(i0, p0, q0);\n      const r1 = this.getPosition(i1, p1, q1);\n      const r2 = this.getPosition(i2, p2, q2);\n\n      if (!r0 || !r1 || !r2) {\n        continue;\n      }\n\n      const t = RayTriangleTesting(rayOrigin, rayDirection, r0, r1, r2, backfaceCulling);\n\n      if (t === undefined) {\n        continue;\n      }\n\n      if (mint === undefined || mint > t) {\n        mint = t;\n      }\n    }\n\n    return mint;\n  }\n\n  /**\n   * 获取顶点位置\n   * @param index - 顶点索引\n   * @param vec3 - 顶点位置，会被修改和返回\n   * @param vec4 - 临时变量，用于骨骼动画时的计算\n   * @returns 顶点位置\n   */\n  getPosition (index: number, vec3: Vector3, vec4: Vector4): Vector3 | null {\n    const posData = this.position.getData(index);\n\n    if (posData === undefined) {\n      return null;\n    }\n\n    if (this.hasAnimation) {\n      const jointData = this.joint?.getData(index);\n      const weightData = this.weight?.getData(index);\n\n      if (jointData !== undefined && weightData !== undefined) {\n        const skinMat = this.skinMatrix;\n\n        skinMat.setZero();\n        for (let i = 0; i < 4; i++) {\n          if (weightData[i] === 0) { continue; }\n\n          const bindMat = this.bindMatrices[jointData[i]];\n\n          skinMat.addScaledMatrix(bindMat, weightData[i]);\n        }\n\n        vec4.set(posData[0], posData[1], posData[2], 1.0);\n        const resVec = skinMat.transformVector4(vec4);\n        const scale = 1.0 / resVec.w;\n\n        vec3.set(resVec.x * scale, resVec.y * scale, resVec.z * scale);\n      }\n    } else {\n      vec3.set(posData[0], posData[1], posData[2]);\n    }\n\n    return vec3;\n  }\n\n}\n\n/**\n * 检查辅助类，负责 3D 插件元素数据格式检查和报错\n */\nexport class CheckerHelper {\n  /**\n   * 检查数值\n   * @param v - 数值\n   * @returns\n   */\n  static checkNumber (v: number): boolean {\n    return typeof v === 'number';\n  }\n\n  /**\n   * 检查数值或未定义\n   * @param v - 数值或未定义\n   * @returns\n   */\n  static checkNumberUndef (v?: number): boolean {\n    return v === undefined ? true : this.checkNumber(v);\n  }\n\n  /**\n   * 检查 0 和 1 之间数值\n   * @param v - 数值\n   * @returns\n   */\n  static checkNumber01 (v: number): boolean {\n    return this.checkNumber(v) && v >= 0 && v <= 1;\n  }\n\n  /**\n   * 检查 0 和 1 之间数值或未定义\n   * @param v - 数值或未定义\n   * @returns\n   */\n  static checkNumber01Undef (v?: number): boolean {\n    return v === undefined ? true : this.checkNumber01(v);\n  }\n\n  /**\n   * 检查正数\n   * @param v - 数值\n   * @returns\n   */\n  static checkPositive (v: number): boolean {\n    return this.checkNumber(v) && v > 0;\n  }\n\n  /**\n   * 检查非负数\n   * @param v - 数值\n   * @returns\n   */\n  static checkNonnegative (v: number): boolean {\n    return this.checkNumber(v) && v >= 0;\n  }\n\n  /**\n   * 检查非负数或未定义\n   * @param v - 数值\n   * @returns\n   */\n  static checkNonnegativeUndef (v?: number): boolean {\n    return v === undefined ? true : this.checkNonnegative(v);\n  }\n\n  /**\n   * 检查布尔类型\n   * @param v - 布尔值\n   * @returns\n   */\n  static checkBoolean (v: boolean): boolean {\n    return typeof v === 'boolean';\n  }\n\n  /**\n   * 检查布尔类型或未定义\n   * @param v - 布尔值或未定义\n   * @returns\n   */\n  static checkBooleanUndef (v?: boolean): boolean {\n    return v === undefined ? true : this.checkBoolean(v);\n  }\n\n  /**\n   * 检查字符串类型\n   * @param v - 字符串\n   * @returns\n   */\n  static checkString (v: string): boolean {\n    return typeof v === 'string';\n  }\n\n  /**\n   * 检查字符串类型或未定义\n   * @param v - 字符串或未定义\n   * @returns\n   */\n  static checkStringUndef (v?: string): boolean {\n    return v === undefined ? true : this.checkString(v);\n  }\n\n  /**\n   * 检查浮点数组\n   * @param v - 浮点数组\n   * @returns\n   */\n  static checkFloat32Array (v: Float32Array): boolean {\n    return v instanceof Float32Array;\n  }\n\n  /**\n   * 检查浮点数组或未定义\n   * @param v - 浮点数组或未定义\n   * @returns\n   */\n  static checkFloat32ArrayUndef (v?: Float32Array): boolean {\n    return v === undefined ? true : this.checkFloat32Array(v);\n  }\n\n  /**\n   * 检查父节点索引\n   * @param v - 数值或未定义\n   * @returns\n   */\n  static checkParent (v?: number): boolean {\n    if (v === undefined) { return true; }\n    if (!this.checkNumber(v)) { return false; }\n\n    return v >= 0;\n  }\n\n  /**\n   * 检查纹理坐标\n   * @param v - 纹理坐标或未定义\n   * @returns\n   */\n  static checkTexCoord (v?: number): boolean {\n    if (v === undefined) { return true; }\n    if (!this.checkNumber(v)) { return false; }\n\n    return v >= 0 && v <= 1;\n  }\n\n  /**\n   * 检查二维向量\n   * @param v - 二维向量\n   * @returns\n   */\n  static checkVec2 (v: spec.vec2): boolean {\n    if (!Array.isArray(v)) { return false; }\n    if (v.length != 2) { return false; }\n\n    return v.every(v => this.checkNumber(v));\n  }\n\n  /**\n   * 检查二维向量或未定义\n   * @param v - 二维向量或未定义\n   * @returns\n   */\n  static checkVec2Undef (v?: spec.vec2): boolean {\n    return v === undefined ? true : this.checkVec2(v);\n  }\n\n  /**\n   * 检查三维向量\n   * @param v - 三维向量\n   * @returns\n   */\n  static checkVec3 (v: spec.vec3): boolean {\n    if (!Array.isArray(v)) { return false; }\n    if (v.length != 3) { return false; }\n\n    return v.every(v => this.checkNumber(v));\n  }\n\n  /**\n   * 检查三维非负向量\n   * @param v - 三维向量\n   * @returns\n   */\n  static checkNonnegative3 (v: spec.vec3): boolean {\n    if (!Array.isArray(v)) { return false; }\n    if (v.length != 3) { return false; }\n\n    return v.every(v => this.checkNonnegative(v));\n  }\n\n  /**\n   * 检查四维向量\n   * @param v - 四维向量\n   * @returns\n   */\n  static checkVec4 (v: spec.vec4): boolean {\n    if (!Array.isArray(v)) { return false; }\n    if (v.length != 4) { return false; }\n\n    return v.every(v => this.checkNumber(v));\n  }\n\n  /**\n   * 检查四维向量或未定义\n   * @param v - 四维向量或未定义\n   * @returns\n   */\n  static checkNonnegative4 (v: spec.vec4): boolean {\n    if (!Array.isArray(v)) { return false; }\n    if (v.length != 4) { return false; }\n\n    return v.every(v => this.checkNonnegative(v));\n  }\n\n  /**\n   * 检查数值数组\n   * @param v - 数值数组\n   * @returns\n   */\n  static checkNumberArray (v: number[]): boolean {\n    if (!Array.isArray(v)) { return false; }\n\n    return v.every(v => this.checkNumber(v));\n  }\n\n  /**\n   * 检查纹理对象\n   * @param v - 纹理对象\n   * @returns\n   */\n  static checkTexture (v: Texture): boolean {\n    if (v instanceof Texture) {\n      if (v.isDestroyed) {\n        console.error(`Texture is destroyed, ${v.name}.`);\n      }\n\n      return !v.isDestroyed;\n    } else {\n      return false;\n    }\n  }\n\n  /**\n   * 检查纹理对象或未定义\n   * @param v - 纹理对象或未定义\n   * @returns\n   */\n  static checkTextureUndef (v?: Texture): boolean {\n    return v === undefined ? true : this.checkTexture(v);\n  }\n\n  /**\n   * 检查纹理变换参数\n   * @param v - 纹理变换参数\n   * @returns\n   */\n  static checkTexTransform (v: ModelTextureTransform): boolean {\n    if (!this.checkVec2Undef(v.offset)) { return false; }\n    if (!this.checkNumberUndef(v.rotation)) { return false; }\n    if (!this.checkVec2Undef(v.scale)) { return false; }\n\n    if (v.scale !== undefined) {\n      if (Math.abs(v.scale[0]) < 1e-5 || Math.abs(v.scale[1]) < 1e-5) {\n        // check scale range\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * 检查纹理变换参数或未定义\n   * @param v - 纹理变换参数或未定义\n   * @returns\n   */\n  static checkTexTransformUndef (v?: ModelTextureTransform): boolean {\n    return v === undefined ? true : this.checkTexTransform(v);\n  }\n\n  /**\n   * 检查材质混合参数或未定义\n   * @param v - 材质混合参数或未定义\n   * @returns\n   */\n  static checkMatBlending (v?: spec.MaterialBlending): boolean {\n    return v === undefined\n      || v === spec.MaterialBlending.opaque\n      || v === spec.MaterialBlending.masked\n      || v === spec.MaterialBlending.translucent\n      || v === spec.MaterialBlending.additive;\n  }\n\n  /**\n   * 检查材质单双面模式或未定义\n   * @param v - 材质单双面模式或未定义\n   * @returns\n   */\n  static checkMatSide (v?: spec.SideMode): boolean {\n    return v === undefined || v === spec.SideMode.BACK || v === spec.SideMode.DOUBLE || v === spec.SideMode.FRONT;\n  }\n\n  /**\n   * 检查动画路径模式\n   * @param v - 动画路径模式\n   * @returns\n   */\n  static checkAnimPath (v: string): boolean {\n    return v === 'translation' || v === 'rotation' || v === 'scale' || v === 'weights';\n  }\n\n  /**\n   * 检查动画插值模式\n   * @param v - 动画插值模式\n   * @returns\n   */\n  static checkAnimInterp (v: string): boolean {\n    return v === 'LINEAR' || v === 'STEP' || v === 'CUBICSPLINE';\n  }\n\n  /**\n   * 检查几何体\n   * @param v - 几何体\n   * @param s - 蒙皮参数\n   */\n  static assertGeometry (v: Geometry, s?: ModelSkinOptions) {\n    if (!(v instanceof Geometry)) {\n      console.error(`Invalid geometry type ${this.stringify(v)}.`);\n    }\n    // @ts-expect-error\n    if (v.isDestroyed === true) {\n      console.error('Geometry object is destroyed.');\n    }\n    if (!this.checkNonnegative(v.getDrawStart())) {\n      console.error(`Invalid geometry draw start: ${v.getDrawStart()}, ${this.stringify(v)}.`);\n    }\n    // // drawCount不再为负\n    // if (!this.checkPositive(v.getDrawCount())) {\n    //   throw new Error(`Invalid geometry draw count: ${v.getDrawCount()}, ${this.stringify(v)}`);\n    // }\n\n    // Geometry具体内容检查，先忽略\n    // const opts = v.options;\n    // const drawCount = Math.abs(v.getDrawCount());\n\n    // if (opts !== undefined && drawCount > 0) {\n    //   let maxLength = v.drawStart + drawCount;\n\n    //   if (opts.index !== undefined) {\n    //     const indexArray = opts.index.data;\n\n    //     if (indexArray.length < maxLength) {\n    //       throw new Error(`Index length(${indexArray.length}) is less than draw count(${maxLength}), ${this.stringify(v)}`);\n    //     }\n    //     let maxIndex = 0;\n\n    //     for (let i = 0; i < drawCount; i++) {\n    //       maxIndex = Math.max(indexArray[v.drawStart + i], maxIndex);\n    //     }\n    //     maxLength = maxIndex + 1;\n    //   }\n    //   const positionAttrib = opts.attributes['aPos'] as Attribute;\n\n    //   if (positionAttrib === undefined) {\n    //     throw new Error(`Position attribute is required, ${this.stringify(v)}`);\n    //   }\n    //   this.assertGeometryBuffer(v, 'aPos', maxLength);\n    //   this.assertGeometryBuffer(v, 'aNormal', maxLength);\n    //   this.assertGeometryBuffer(v, 'aTangent', maxLength);\n    //   this.assertGeometryBuffer(v, 'aUV', maxLength);\n    //   this.assertGeometryBuffer(v, 'aJoints', maxLength);\n    //   this.assertGeometryBuffer(v, 'aWeights', maxLength);\n\n    //   // 索引检查\n    //   if(s !== undefined){\n    //     const matLen = s.inverseBindMatrices?.length ?? 0;\n    //     if(matLen > 0){\n    //       const jointArray = this.createAttributeArray(v, \"aJoints\");\n    //       if(jointArray !== undefined){\n    //         for(let i = 0; i < maxLength; i++){\n    //           const data = jointArray.getData(i);\n    //           if(data === undefined) continue;\n    //           if(Math.max(...data) >= matLen){\n    //             throw new Error(`Joint index out of range: ${this.stringify(data)}, matrices: ${matLen}`);\n    //           }\n    //         }\n    //       }\n    //     }\n    //   }\n    // }\n  }\n\n  /**\n   * 检查几何体缓冲区\n   * @param v - 几何体\n   * @param name - 名称\n   * @param drawCount - 渲染数目\n   */\n  static assertGeometryBuffer (v: Geometry, name: string, drawCount: number) {\n    const attribArray = this.createAttributeArray(v, name);\n\n    if (attribArray !== undefined) {\n      if (attribArray.getLength() < drawCount) {\n        console.error(`${name} Length(${attribArray.getLength()}) is less than draw count(${drawCount}), ${this.stringify(v)}.`);\n      }\n    }\n  }\n\n  /**\n   * 创建属性数组\n   * @param v - 几何体\n   * @param name - 名称\n   * @returns\n   */\n  static createAttributeArray (v: Geometry, name: string): AttributeArray | undefined {\n    // @ts-expect-error\n    const attributes = v.attributes;\n\n    if (attributes === undefined) { return; }\n    const dataAttrib = attributes[name];\n\n    if (dataAttrib === undefined) { return; }\n    const dataArray = v.getAttributeData(name);\n\n    if (dataArray === undefined) { return; }\n    //\n    const attribArray = new AttributeArray();\n\n    attribArray.create(dataAttrib as Attribute, dataArray);\n\n    return attribArray;\n  }\n\n  /**\n   * 检查蒙皮参数\n   * @param v - 蒙皮参数\n   */\n  static assertModelSkinOptions (v: ModelSkinOptions) {\n    if (!this.checkStringUndef(v.name)) { console.error(`Invalid skin name ${v.name}, ${this.stringify(v)}.`); }\n    if (!this.checkNumberArray(v.joints)) { console.error(`Invalid skin joints ${v.joints}, ${this.stringify(v)}.`); }\n    if (!this.checkNumberUndef(v.skeleton)) { console.error(`Invalid skin skeleton ${v.skeleton}, ${this.stringify(v)}.`); }\n    if (!this.checkFloat32ArrayUndef(v.inverseBindMatrices)) { console.error(`Invalid skin inverseBindMatrices ${v.inverseBindMatrices}, ${this.stringify(v)}.`); }\n    //\n    if (v.inverseBindMatrices !== undefined) {\n      if (v.inverseBindMatrices.length <= 0 || v.inverseBindMatrices.length % 16 !== 0) { console.error(`Invalid skin inverseBindMatrices length ${v.inverseBindMatrices}, ${this.stringify(v)}.`); }\n      if (v.joints.length * 16 !== v.inverseBindMatrices.length) { console.error(`Mismatch: skin joints and inverseBindMatrices length, ${v.joints}, ${v.inverseBindMatrices}, ${this.stringify(v)}.`); }\n      const mat = new Matrix4();\n\n      for (let i = 0; i < v.inverseBindMatrices.length; i += 16) {\n        for (let j = 0; j < 16; j++) {\n          mat.elements[j] = v.inverseBindMatrices[i + j];\n        }\n        if (Math.abs(mat.determinant()) < 1e-5) {\n          console.error(`Determinant of inverseBindMatrices is too small ${mat.determinant()}, index ${i / 16}, ${this.stringify(v)}.`);\n        }\n      }\n    } else {\n      if (v.joints.length <= 0) { console.error(`Invalid skin joints length ${v.joints}, ${this.stringify(v)}.`); }\n    }\n  }\n\n  /**\n   * 检查材质参数\n   * @param v - 材质参数\n   */\n  static assertMatOptions (v: ModelMaterialOptions) {\n    if (v.type === spec.MaterialType.unlit) {\n      if (!this.checkString(v.name)) { console.error(`Invalid material name ${v.name}, ${this.stringify(v)}.`); }\n      //\n      if (!this.checkNonnegative4(v.baseColorFactor)) { console.error(`Invalid material baseColorFactor ${v.baseColorFactor}, ${this.stringify(v)}.`); }\n      if (!this.checkTextureUndef(v.baseColorTexture)) { console.error(`Invalid material baseColorTexture ${v.baseColorTexture}, ${this.stringify(v)}.`); }\n      if (!this.checkTexTransformUndef(v.baseColorTextureTransform)) { console.error(`Invalid material baseColorTextureTransform ${v.baseColorTextureTransform}, ${this.stringify(v)}.`); }\n      if (!this.checkTexCoord(v.baseColorTextureCoordinate)) { console.error(`Invalid material baseColorTextureCoordinate ${v.baseColorTextureCoordinate}, ${this.stringify(v)}.`); }\n      //\n      if (!this.checkBooleanUndef(v.depthMask)) { console.error(`Invalid material depthMask ${v.depthMask}, ${this.stringify(v)}.`); }\n      if (!this.checkMatBlending(v.blending)) { console.error(`Invalid material blending ${v.blending}, ${this.stringify(v)}.`); }\n      if (!this.checkMatSide(v.side)) { console.error(`Invalid material side ${v.side}, ${this.stringify(v)}.`); }\n      if (v.blending === spec.MaterialBlending.masked) {\n        if (v.alphaCutOff === undefined) { console.error(`Material alphaCutOff is required for mask, ${this.stringify(v)}.`); }\n      }\n      if (!this.checkNumber01Undef(v.alphaCutOff)) { console.error(`Invalid material alphaCutOff ${v.alphaCutOff}, ${this.stringify(v)}.`); }\n    } else if (v.type === spec.MaterialType.pbr) {\n      if (!this.checkString(v.name)) { console.error(`Invalid material name ${v.name}, ${this.stringify(v)}.`); }\n      //\n      if (!this.checkNonnegative4(v.baseColorFactor)) { console.error(`Invalid material baseColorFactor ${v.baseColorFactor}, ${this.stringify(v)}.`); }\n      if (!this.checkTextureUndef(v.baseColorTexture)) { console.error(`Invalid material baseColorTexture ${v.baseColorTexture}, ${this.stringify(v)}.`); }\n      if (!this.checkTexTransformUndef(v.baseColorTextureTransform)) { console.error(`Invalid material baseColorTextureTransform ${v.baseColorTextureTransform}, ${this.stringify(v)}.`); }\n      if (!this.checkTexCoord(v.baseColorTextureCoordinate)) { console.error(`Invalid material baseColorTextureCoordinate ${v.baseColorTextureCoordinate}, ${this.stringify(v)}.`); }\n      //\n      if (!this.checkBooleanUndef(v.useSpecularAA)) { console.error(`Invalid material useSpecularAA ${v.useSpecularAA}, ${this.stringify(v)}.`); }\n      if (!this.checkNumber01(v.metallicFactor)) { console.error(`Invalid material metallicFactor ${v.metallicFactor}, ${this.stringify(v)}.`); }\n      if (!this.checkNonnegative(v.roughnessFactor)) { console.error(`Invalid material roughnessFactor ${v.roughnessFactor}, ${this.stringify(v)}.`); }\n      if (!this.checkTextureUndef(v.metallicRoughnessTexture)) { console.error(`Invalid material metallicRoughnessTexture ${v.metallicRoughnessTexture}, ${this.stringify(v)}.`); }\n      if (!this.checkTexTransformUndef(v.metallicRoughnessTextureTransform)) { console.error(`Invalid material metallicRoughnessTextureTransform ${v.metallicRoughnessTextureTransform}, ${this.stringify(v)}.`); }\n      if (!this.checkTexCoord(v.metallicRoughnessTextureCoordinate)) { console.error(`Invalid material metallicRoughnessTextureCoordinate ${v.metallicRoughnessTextureCoordinate}, ${this.stringify(v)}.`); }\n      //\n      if (!this.checkTextureUndef(v.normalTexture)) { console.error(`Invalid material normalTexture ${v.normalTexture}, ${this.stringify(v)}.`); }\n      if (!this.checkNonnegativeUndef(v.normalTextureScale)) { console.error(`Invalid material normalTextureScale ${v.normalTextureScale}, ${this.stringify(v)}.`); }\n      if (!this.checkTexTransformUndef(v.normalTextureTransform)) { console.error(`Invalid material normalTextureTransform ${v.normalTextureTransform}, ${this.stringify(v)}.`); }\n      if (!this.checkTexCoord(v.normalTextureCoordinate)) { console.error(`Invalid material normalTextureCoordinate ${v.normalTextureCoordinate}, ${this.stringify(v)}.`); }\n      //\n      if (!this.checkTextureUndef(v.occlusionTexture)) { console.error(`Invalid material occlusionTexture ${v.occlusionTexture}, ${this.stringify(v)}.`); }\n      if (!this.checkNumber01Undef(v.occlusionTextureStrength)) { console.error(`Invalid material occlusionTextureStrength ${v.occlusionTextureStrength}, ${this.stringify(v)}.`); }\n      if (!this.checkTexTransformUndef(v.occlusionTextureTransform)) { console.error(`Invalid material occlusionTextureTransform ${v.occlusionTextureTransform}, ${this.stringify(v)}.`); }\n      if (!this.checkTexCoord(v.occlusionTextureCoordinate)) { console.error(`Invalid material occlusionTextureCoordinate ${v.occlusionTextureCoordinate}, ${this.stringify(v)}.`); }\n      //\n      //\n      if (!this.checkNonnegative4(v.emissiveFactor)) { console.error(`Invalid material emissiveFactor ${v.emissiveFactor}, ${this.stringify(v)}.`); }\n      if (!this.checkNonnegative(v.emissiveIntensity)) { console.error(`Invalid material emissiveIntensity ${v.emissiveIntensity}, ${this.stringify(v)}.`); }\n      if (!this.checkTextureUndef(v.emissiveTexture)) { console.error(`Invalid material emissiveTexture ${v.emissiveTexture}, ${this.stringify(v)}.`); }\n      if (!this.checkTexTransformUndef(v.emissiveTextureTransform)) { console.error(`Invalid material emissiveTextureTransform ${v.emissiveTextureTransform}, ${this.stringify(v)}.`); }\n      if (!this.checkTexCoord(v.emissiveTextureCoordinate)) { console.error(`Invalid material emissiveTextureCoordinate ${v.emissiveTextureCoordinate}, ${this.stringify(v)}.`); }\n      //\n      if (!this.checkBooleanUndef(v.depthMask)) { console.error(`Invalid material depthMask ${v.depthMask}, ${this.stringify(v)}.`); }\n      if (!this.checkMatBlending(v.blending)) { console.error(`Invalid material blending ${v.blending}, ${this.stringify(v)}.`); }\n      if (!this.checkMatSide(v.side)) { console.error(`Invalid material side ${v.side}, ${this.stringify(v)}.`); }\n      if (v.blending === spec.MaterialBlending.masked) {\n        if (v.alphaCutOff === undefined) { console.error(`Material alphaCutOff is required for mask, ${this.stringify(v)}.`); }\n      }\n      if (!this.checkNumber01Undef(v.alphaCutOff)) { console.error(`Invalid material alphaCutOff ${v.alphaCutOff}, ${this.stringify(v)}.`); }\n    } else {\n      console.error(`Invalid material type ${this.stringify(v)}.`);\n    }\n  }\n\n  /**\n   * 检查 Primitive 参数\n   * @param v - Primitive 参数\n   * @param s - 蒙皮参数\n   * @returns\n   */\n  static assertPrimOptions (v: ModelPrimitiveOptions, s?: ModelSkinOptions) {\n    this.assertGeometry(v.geometry, s);\n    this.assertMatOptions(v.material);\n\n    return true;\n  }\n\n  /**\n   * 检查 Model 插件 Mesh 参数\n   * @param v - Model 插件 Mesh 参数\n   */\n  static assertModelMeshOptions (v: ModelMeshOptions) {\n    if (!this.checkParent(v.parent)) { console.error(`Invalid mesh parent ${v.parent}, ${this.stringify(v)}.`); }\n\n    if (v.skin !== undefined) { this.assertModelSkinOptions(v.skin); }\n\n    const morphList: PMorph[] = [];\n\n    for (let i = 0; i < v.primitives.length; i++) {\n      const prim = v.primitives[i];\n\n      if (!this.assertPrimOptions(prim)) {\n        console.error(`Invalid primitive ${prim}, ${this.stringify(v)}.`);\n      }\n      const morph = new PMorph();\n\n      morph.create(prim.geometry);\n      morphList.push(morph);\n    }\n\n    for (let i = 1; i < morphList.length; i++) {\n      const morph0 = morphList[i - 1];\n      const morph1 = morphList[i];\n\n      if (!morph0.equals(morph1)) {\n        console.error(`Morph states mismatch: ${this.stringify(morph0)}, ${this.stringify(morph1)}, ${this.stringify(v)}.`);\n      }\n    }\n\n    if (!this.checkBooleanUndef(v.hide)) { console.error(`Invalid mesh hide ${v.hide}, ${this.stringify(v)}.`); }\n  }\n\n  /**\n   * 检查 Model 插件相机参数\n   * @param v - Model 插件相机参数\n   */\n  static assertModelCameraOptions (v: ModelCameraOptions) {\n    if (!this.checkParent(v.parent)) { console.error(`Invalid camera parent ${v.parent}, ${this.stringify(v)}.`); }\n    if (!this.checkNumberUndef(v.aspect)) { console.error(`Invalid camera aspect ${v.aspect}, ${this.stringify(v)}.`); }\n    if (!this.checkPositive(v.near)) { console.error(`Invalid camera near ${v.near}, ${this.stringify(v)}.`); }\n    if (!this.checkPositive(v.far) || v.far <= v.near) { console.error(`Invalid camera far ${v.far}, ${this.stringify(v)}.`); }\n    if (!this.checkPositive(v.fov)) { console.error(`Invalid camera fov ${v.fov}, ${this.stringify(v)}.`); }\n    if (!this.checkNumber01(v.clipMode)) { console.error(`Invalid camera clipMode ${v.clipMode}, ${this.stringify(v)}.`); }\n  }\n\n  /**\n   * 检查 Model 插件灯光参数\n   * @param v - Model 插件灯光参数\n   */\n  static assertModelLightOptions (v: ModelLightOptions) {\n    if (v.lightType === 'directional') {\n      if (!this.checkParent(v.parent)) { console.error(`Invalid light parent ${v.parent}, ${this.stringify(v)}.`); }\n      if (!this.checkNonnegative4(v.color)) { console.error(`Invalid light color ${v.color}, ${this.stringify(v)}.`); }\n      if (!this.checkNonnegative(v.intensity)) { console.error(`Invalid light intensity ${v.intensity}, ${this.stringify(v)}.`); }\n    } else if (v.lightType === 'point') {\n      if (!this.checkParent(v.parent)) { console.error(`Invalid light parent ${v.parent}, ${this.stringify(v)}.`); }\n      if (!this.checkNonnegative4(v.color)) { console.error(`Invalid light color ${v.color}, ${this.stringify(v)}.`); }\n      if (!this.checkNonnegative(v.intensity)) { console.error(`Invalid light intensity ${v.intensity}, ${this.stringify(v)}.`); }\n      if (!this.checkNonnegative(v.range)) { console.error(`Invalid light range ${v.range}, ${this.stringify(v)}.`); }\n    } else if (v.lightType === 'spot') {\n      if (!this.checkParent(v.parent)) { console.error(`Invalid light parent ${v.parent}, ${this.stringify(v)}.`); }\n      if (!this.checkNonnegative4(v.color)) { console.error(`Invalid light color ${v.color}, ${this.stringify(v)}.`); }\n      if (!this.checkNonnegative(v.intensity)) { console.error(`Invalid light intensity ${v.intensity}, ${this.stringify(v)}.`); }\n      if (!this.checkNonnegative(v.range)) { console.error(`Invalid light range ${v.range}, ${this.stringify(v)}.`); }\n      if (!this.checkNonnegative(v.innerConeAngle)) { console.error(`Invalid light innerConeAngle ${v.innerConeAngle}, ${this.stringify(v)}.`); }\n      if (!this.checkNonnegative(v.outerConeAngle)) { console.error(`Invalid light outerConeAngle ${v.outerConeAngle}, ${this.stringify(v)}.`); }\n    } else if (v.lightType === 'ambient') {\n      if (!this.checkParent(v.parent)) { console.error(`Invalid light parent ${v.parent}, ${this.stringify(v)}.`); }\n      if (!this.checkNonnegative4(v.color)) { console.error(`Invalid light color ${v.color}, ${this.stringify(v)}.`); }\n      if (!this.checkNonnegative(v.intensity)) { console.error(`Invalid light intensity ${v.intensity}, ${this.stringify(v)}.`); }\n    } else {\n      console.error(`Invalid light type ${this.stringify(v)}.`);\n    }\n  }\n\n  /**\n   * 检查 Model 插件天空盒参数\n   * @param v - Model 插件天空盒参数\n   */\n  static assertModelSkyboxOptions (v: ModelSkyboxOptions) {\n    if (!this.checkBoolean(v.renderable)) { console.error(`Invalid skybox renderable ${v.renderable}, ${this.stringify(v)}.`); }\n    if (!this.checkNonnegative(v.intensity)) { console.error(`Invalid skybox intensity ${v.intensity}, ${this.stringify(v)}.`); }\n    if (!this.checkNonnegative(v.reflectionsIntensity)) { console.error(`Invalid skybox reflectionsIntensity ${v.reflectionsIntensity}, ${this.stringify(v)}.`); }\n    //\n    const c = v.irradianceCoeffs;\n\n    if (c !== undefined) {\n      if (!Array.isArray(c) || c.length != 9) { console.error(`Invalid skybox irradianceCoeffs ${c}, ${this.stringify(v)}.`); }\n      c.forEach(v => {\n        if (!this.checkVec3(v as spec.vec3)) { console.error(`Invalid skybox irradianceCoeffs ${c}, ${this.stringify(v)}.`); }\n      });\n    } else if (v.diffuseImage !== undefined) {\n      if (!this.checkTexture(v.diffuseImage)) { console.error(`Invalid skybox diffuseImage ${v.diffuseImage}, ${this.stringify(v)}.`); }\n    } else {\n      console.error(`Invalid skybox, irradianceCoeffs or diffuseImage should give one, ${this.stringify(v)}.`);\n    }\n    if (!this.checkTexture(v.specularImage)) { console.error(`Invalid skybox specularImage ${v.specularImage}, ${this.stringify(v)}.`); }\n    if (!this.checkPositive(v.specularImageSize)) { console.error(`Invalid skybox specularImageSize ${v.specularImageSize}, ${this.stringify(v)}.`); }\n    if (!this.checkPositive(v.specularMipCount)) { console.error(`Invalid skybox specularMipCount ${v.specularMipCount}, ${this.stringify(v)}.`); }\n    if (this.pow2(v.specularMipCount) > v.specularImageSize) {\n      console.error(`Invalid skybox specularMipCount or specularImageSize, ${this.stringify(v)}.`);\n    }\n  }\n\n  /**\n   * 检查 Model 插件动画轨道参数\n   * @param v - Model 插件动画轨道参数\n   * @returns\n   */\n  static checkModelAnimTrackOptions (v: ModelAnimTrackOptions) {\n    if (!this.checkNonnegative(v.node)) {\n      console.error(`Invalid track node ${v.node}, ${this.stringify(v)}`);\n\n      return false;\n    }\n    if (!this.checkFloat32Array(v.input)) {\n      console.error(`Invalid track input ${v.input}, ${this.stringify(v)}`);\n\n      return false;\n    }\n    if (!this.checkFloat32Array(v.output)) {\n      console.error(`Invalid track input ${v.output}, ${this.stringify(v)}`);\n\n      return false;\n    }\n    if (!this.checkAnimPath(v.path)) {\n      console.error(`Invalid track path ${v.path}, ${this.stringify(v)}`);\n\n      return false;\n    }\n    if (!this.checkAnimInterp(v.interpolation)) {\n      console.error(`Invalid track interpolation ${v.interpolation}, ${this.stringify(v)}`);\n\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * 检查 Model 插件动画参数\n   * @param v - Model 插件动画参数\n   */\n  static assertModelAnimOptions (v: ModelAnimationOptions) {\n    if (!this.checkStringUndef(v.name)) { console.error(`Invalid animation name ${v.name}, ${this.stringify(v)}.`); }\n    if (!Array.isArray(v.tracks)) { console.error(`Invalid animation tracks ${v.tracks}, ${this.stringify(v)}.`); }\n    v.tracks.forEach(t => {\n      if (!this.checkModelAnimTrackOptions(t)) { console.error(`Invalid animation track ${t}, ${this.stringify(v)}.`); }\n    });\n  }\n\n  /**\n   * 检查场景树参数\n   * @param v - 场景树参数\n   */\n  static assertTreeOptions (v: ModelTreeOptions) {\n    if (!this.checkNumberUndef(v.animation)) { console.error(`Invalid tree animation ${v.animation}, ${this.stringify(v)}.`); }\n    if (v.animations !== undefined) {\n      if (!Array.isArray(v.animations)) { console.error(`Invalid tree animations ${v.animations}, ${this.stringify(v)}.`); }\n      v.animations.forEach(anim => { this.assertModelAnimOptions(anim); });\n      if (v.animation !== undefined) {\n        if (v.animation < -1 || v.animation >= v.animations.length) { console.error(`Invalid tree animations ${v.animations}, ${this.stringify(v)}.`); }\n      }\n    }\n  }\n\n  /**\n   * 将对象转成 JSON 字符串，需要忽略函数和渲染相关的对象\n   * @param object - 目标对象\n   * @returns\n   */\n  static stringify (object: any) {\n    const simpleObject: { [k: string]: any } = {};\n\n    for (const prop in object) {\n      // if (typeof(object[prop]) == 'object'){\n      //     continue;\n      // }\n      if (prop === 'internal') {\n        // 与WebGL相关的数据，可以忽略\n        continue;\n      }\n      if (typeof (object[prop]) == 'function') {\n        continue;\n      }\n      if (object[prop] instanceof Texture) {\n        simpleObject[prop] = object[prop].name;\n        continue;\n      }\n      if (object[prop] instanceof Geometry) {\n        simpleObject[prop] = object[prop].name;\n        continue;\n      }\n      if (object[prop] instanceof Renderer) {\n        continue;\n      }\n      simpleObject[prop] = object[prop];\n    }\n\n    return JSON.stringify(simpleObject);\n  }\n\n  /**\n   * 获取 2 的 index 指数结果\n   * @param index - 指数\n   * @returns\n   */\n  static pow2 (index: number): number {\n    let res = 1;\n\n    while (index-- > 0) { res *= 2; }\n\n    return res;\n  }\n}\n\n/**\n * 半精度浮点数组类\n */\nexport class Float16ArrayWrapper {\n  /**\n   * 大小\n   */\n  size: number;\n  /**\n   * 数组\n   */\n  data: Uint16Array;\n\n  constructor (size: number) {\n    this.size = size;\n    this.data = new Uint16Array(size);\n  }\n\n  /**\n   * 将类数值数组转成半进度浮点，并从起始索引开始添加\n   * @param number - 类数值数组\n   * @param startIndex - 起始索引\n   */\n  set (number: ArrayLike<number>, startIndex: number) {\n    for (let i = 0; i < number.length; i++) {\n      this.data[i + startIndex] = toHalf(number[i]);\n    }\n  }\n\n  /**\n   * 获取数组字节数\n   */\n  get bytes () {\n    return this.size * 2;\n  }\n}\n\nconst toHalf = (function () {\n\n  const floatView = new Float32Array(1);\n  const int32View = new Int32Array(floatView.buffer);\n\n  /* This method is faster than the OpenEXR implementation (very often\n   * used, eg. in Ogre), with the additional benefit of rounding, inspired\n   * by James Tursa?s half-precision code. */\n  return function toHalf (val: any) {\n\n    floatView[0] = val;\n    const x = int32View[0];\n\n    let bits = (x >> 16) & 0x8000; /* Get the sign */\n    let m = (x >> 12) & 0x07ff; /* Keep one extra bit for rounding */\n    const e = (x >> 23) & 0xff; /* Using int is faster here */\n\n    /* If zero, or denormal, or exponent underflows too much for a denormal\n     * half, return signed zero. */\n    if (e < 103) {\n      return bits;\n    }\n\n    /* If NaN, return NaN. If Inf or exponent overflow, return Inf. */\n    if (e > 142) {\n      bits |= 0x7c00;\n      /* If exponent was 0xff and one mantissa bit was set, it means NaN,\n       * not Inf, so make sure we set one mantissa bit too. */\n      bits |= ((e == 255) ? 0 : 1) && (x & 0x007fffff);\n\n      return bits;\n    }\n\n    /* If exponent underflows but not too much, return a denormal */\n    if (e < 113) {\n      m |= 0x0800;\n      /* Extra rounding may overflow and set mantissa to 0 and exponent\n       * to 1, which is OK. */\n      bits |= (m >> (114 - e)) + ((m >> (113 - e)) & 1);\n\n      return bits;\n    }\n\n    bits |= ((e - 112) << 10) | (m >> 1);\n    /* Extra rounding. An overflow will set mantissa to 0 and increment\n     * the exponent, which is OK. */\n    bits += m & 1;\n\n    return bits;\n  };\n\n}());\n\n","import type { Geometry, Engine, VFXItem, SkinProps } from '@galacean/effects';\nimport { glContext, Texture, TextureSourceType } from '@galacean/effects';\nimport { Matrix4 } from './math';\nimport { PObjectType } from './common';\nimport { PObject } from './object';\nimport { Float16ArrayWrapper } from '../utility/plugin-helper';\n\nconst forceTextureSkinning = false;\n\n/**\n * 纹理数据模式，包含浮点和半精度浮点\n */\nexport enum TextureDataMode {\n  none = 0,\n  float,\n  half_float,\n}\n\n/**\n * 蒙皮类，支持蒙皮动画\n */\nexport class PSkin extends PObject {\n  /**\n   * 场景树父元素\n   */\n  rootBoneItem?: VFXItem;\n  /**\n   * 骨骼索引\n   */\n  skeleton = 0;\n  /**\n   * 关节索引\n   */\n  jointItem: VFXItem[] = [];\n  /**\n   * 逆绑定矩阵\n   */\n  inverseBindMatrices: Matrix4[] = [];\n  /**\n   * 动画矩阵\n   */\n  animationMatrices: Matrix4[] = [];\n  /**\n   * 纹理数据模式\n   */\n  textureDataMode = TextureDataMode.none;\n  /**\n   * 最大骨骼数目\n   */\n  maxJointCount = 0;\n\n  /**\n   * 创建蒙皮对象\n   * @param props - 蒙皮相关数据\n   * @param engine - 引擎对象\n   * @param rootBoneItem - 场景树父元素\n   */\n  create (props: SkinProps, engine: Engine, rootBoneItem: VFXItem, maxJointCount: number) {\n    this.name = props.rootBoneName ?? 'Unnamed skin';\n    this.type = PObjectType.skin;\n    //\n    this.rootBoneItem = rootBoneItem;\n    this.skeleton = -1;\n    this.jointItem = this.getJointItems(props, rootBoneItem);\n    this.maxJointCount = Math.max(maxJointCount, this.jointItem.length);\n    this.animationMatrices = [];\n    //\n    this.inverseBindMatrices = [];\n    //\n    this.textureDataMode = this.getTextureDataMode(this.maxJointCount, engine);\n    const matList = props.inverseBindMatrices;\n\n    if (matList !== undefined && matList.length > 0) {\n      if (matList.length % 16 !== 0 || matList.length !== this.jointItem.length * 16) {\n        throw new Error(`Invalid array length, invert bind matrices ${matList.length}, joint array ${this.jointItem.length}.`);\n      }\n\n      const matrixCount = matList.length / 16;\n\n      for (let i = 0; i < matrixCount; i++) {\n        const mat = Matrix4.fromArray(matList, i * 16);\n\n        this.inverseBindMatrices.push(mat);\n      }\n    }\n  }\n\n  /**\n   * 更新蒙皮矩阵\n   */\n  updateSkinMatrices () {\n    this.animationMatrices = [];\n\n    for (let i = 0; i < this.jointItem.length; i++) {\n      const node = this.jointItem[i];\n\n      // let parent = node?.transform.parentTransform;\n      // while(parent !== undefined){\n      //   const pos = parent.position;\n      //   parent.setPosition(pos[0], pos[1], pos[2]);\n      //   parent = parent.parentTransform;\n      // }\n\n      const mat4 = node.transform.getWorldMatrix();\n\n      this.animationMatrices.push(mat4.clone());\n    }\n\n    if (this.animationMatrices.length === this.inverseBindMatrices.length) {\n      this.animationMatrices.forEach((mat, index) => {\n        mat.multiply(this.inverseBindMatrices[index]);\n      });\n    } else {\n      this.animationMatrices = this.inverseBindMatrices;\n      console.error('Some error occured, replace skin animation matrices by invert bind matrices.');\n    }\n  }\n\n  /**\n   * 计算 Mesh 的动画矩阵\n   * @param worldMatrix - 世界矩阵\n   * @param matrixList - 矩阵列表\n   * @param normalMatList - 法线矩阵列表\n   */\n  computeMeshAnimMatrices (worldMatrix: Matrix4, matrixList: Float32Array, normalMatList: Float32Array) {\n    const inverseWorldMatrix = worldMatrix.clone().invert();\n    const tempMatrix = new Matrix4();\n\n    this.animationMatrices.forEach((mat, i) => {\n      const localMatrix = tempMatrix.multiplyMatrices(inverseWorldMatrix, mat);\n\n      localMatrix.elements.forEach((x, j) => matrixList[i * 16 + j] = x);\n      //\n      const normalMat = localMatrix.clone().invert().transpose();\n\n      normalMat.elements.forEach((x, j) => normalMatList[i * 16 + j] = x);\n    });\n  }\n\n  /**\n   * 更新父元素\n   * @param parentItem - 场景树父元素\n   */\n  updateParentItem (parentItem: VFXItem) {\n    this.rootBoneItem = parentItem;\n  }\n\n  /**\n   * 获取关节点数\n   * @returns\n   */\n  getJointCount (): number {\n    return this.jointItem.length;\n  }\n\n  /**\n   * 是否纹理数据模式\n   * @returns\n   */\n  isTextureDataMode (): boolean {\n    return this.textureDataMode !== TextureDataMode.none;\n  }\n\n  /**\n   * 销毁\n   */\n  override dispose (): void {\n    this.rootBoneItem = undefined;\n    this.jointItem = [];\n    this.inverseBindMatrices = [];\n    this.animationMatrices = [];\n  }\n\n  private getTextureDataMode (jointCount: number, engine: Engine): TextureDataMode {\n    const uniformsRequiredForMostFeatures = 25;\n    const detail = engine.gpuCapability.detail;\n    const availableJointUniforms = detail.maxVertexUniforms - uniformsRequiredForMostFeatures;\n    const uniformsRequiredPerJoint = 8;\n\n    if (forceTextureSkinning || jointCount > Math.floor(availableJointUniforms / uniformsRequiredPerJoint)) {\n      // 优先使用float，half_float在iOS 13.6上有精度问题\n      if (detail.floatTexture) {\n        return TextureDataMode.float;\n      } else if (detail.halfFloatTexture) {\n        return TextureDataMode.half_float;\n      } else {\n        throw new Error(`Too many joint count ${jointCount}, half float texture not support.`);\n      }\n    } else {\n      return TextureDataMode.none;\n    }\n  }\n\n  private getJointItems (props: SkinProps, rootBoneItem: VFXItem) {\n    const name2Item = this.genNodeName(rootBoneItem);\n\n    const jointItems: VFXItem[] = [];\n\n    props.boneNames?.forEach(boneName => {\n      const node = name2Item[boneName];\n\n      if (!node) {\n        throw new Error(`Can't find node of bone name ${boneName}.`);\n      }\n      jointItems.push(node);\n    });\n\n    return jointItems;\n  }\n\n  private genNodeName (node: VFXItem) {\n    const name2Item: Record<string, VFXItem> = {};\n    const nameList: string[] = [];\n\n    name2Item[''] = node;\n    for (const child of node.children) {\n      this.genNodeNameDFS(child, nameList, name2Item);\n    }\n\n    return name2Item;\n  }\n\n  private genNodeNameDFS (node: VFXItem, nameList: string[], name2Item: Record<string, VFXItem>) {\n    nameList.push(node.name);\n    name2Item[nameList.join('/')] = node;\n    for (const child of node.children) {\n      this.genNodeNameDFS(child, nameList, name2Item);\n    }\n    nameList.pop();\n  }\n}\n\n/**\n * Morph 动画类\n * 保存了动画状态相关的数据，包括 weights 数组数据\n * 增加了状态数据的检查，保证数据的正确性\n * Morph 动画非常消耗内存，谨慎使用。\n */\nexport class PMorph extends PObject {\n  /**\n   * weights 数组的长度，shader 中和更新的时候会用到\n   * 范围要在 `[0, 8]` 之间，否则会报错。\n   */\n  morphWeightsLength = 0;\n  /**\n   * weights 数组的具体数据，来自动画控制器的每帧更新\n   * 数组的长度必须和 morphWeightsLength 相同，否则会出错。\n   */\n  morphWeightsArray: number[] = [];\n  /**\n   * 是否有 Position 相关的 Morph 动画，shader 中需要知道\n   */\n  hasPositionMorph = false;\n  /**\n   * 是否有 Normal 相关的 Morph 动画，shader 中需要知道\n   */\n  hasNormalMorph = false;\n  /**\n   * 是否有 Tangent 相关的 Morph 动画，shader 中需要知道\n   */\n  hasTangentMorph = false;\n\n  /**\n   * 通过 Geometry 数据创建 Morph 动画相关状态，并进行必要的正确性检查\n   * @param geometry - Mesh 的几何体，是否包含 Morph 动画都是可以的\n   * @returns 是否创建成功\n   */\n  create (geometry: Geometry): boolean {\n    this.name = this.genName('Morph target');\n    this.type = PObjectType.morph;\n\n    // 统计各个属性的在Morph中的数目\n    const positionCount = this.getAttributeMorphCount(PMorph.positionNameList, geometry);\n    const normalCount = this.getAttributeMorphCount(PMorph.normalNameList, geometry);\n    const tangentCount = this.getAttributeMorphCount(PMorph.tangentNameList, geometry);\n    const countList: number[] = [positionCount, normalCount, tangentCount];\n\n    // 这里是拿到所有数目中非零的最小值，如果没有非零值，那就是直接是零\n    this.morphWeightsLength = 0;\n    countList.forEach(count => {\n      if (count > 0) {\n        if (this.morphWeightsLength === 0) {\n          this.morphWeightsLength = count;\n        } else {\n          this.morphWeightsLength = Math.min(this.morphWeightsLength, count);\n        }\n      }\n    });\n\n    if (this.morphWeightsLength > 0) {\n      // 有Morph动画，申请weights数据，判断各个属性是否有相关动画\n      this.morphWeightsArray = Array(this.morphWeightsLength).fill(0);\n      this.hasPositionMorph = positionCount == this.morphWeightsLength;\n      this.hasNormalMorph = normalCount == this.morphWeightsLength;\n      this.hasTangentMorph = tangentCount == this.morphWeightsLength;\n    }\n\n    /**\n     * 这里是做正确性检查，特别是各个属性之间数目需要对上，否则就报错。\n     * 还要注意最大数目不能超过5，否则也直接报错。\n     * 后续考虑是否做个兼容，目前还是严格报错比较好。\n     */\n\n    if (positionCount > 0 && positionCount != this.morphWeightsLength) {\n      console.error(`Position morph count mismatch: ${this.morphWeightsLength}, ${positionCount}.`);\n\n      return false;\n    }\n\n    if (normalCount > 0 && normalCount != this.morphWeightsLength) {\n      console.error(`Normal morph count mismatch: ${this.morphWeightsLength}, ${normalCount}.`);\n\n      return false;\n    }\n\n    if (tangentCount > 0 && tangentCount != this.morphWeightsLength) {\n      console.error(`Tangent morph count mismatch: ${this.morphWeightsLength}, ${tangentCount}.`);\n\n      return false;\n    }\n\n    if (this.morphWeightsLength > 5) {\n      console.error(`Tangent morph count should not greater than 5, current ${this.morphWeightsLength}.`);\n\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * 初始化 Morph target 的权重数组\n   * @param weights - glTF Mesh 的权重数组，长度必须严格一致\n   */\n  initWeights (weights: number[]) {\n    if (this.morphWeightsArray.length === 0) {\n      return;\n    }\n\n    const morphWeights = this.morphWeightsArray;\n\n    weights.forEach((val, index) => {\n      if (index < morphWeights.length) {\n        morphWeights[index] = val;\n      }\n    });\n  }\n\n  updateWeights (weights: number[]) {\n    if (weights.length != this.morphWeightsArray.length) {\n      console.error(`Length of morph weights mismatch: input ${weights.length}, internel ${this.morphWeightsArray.length}.`);\n\n      return;\n    }\n\n    weights.forEach((value, index) => this.morphWeightsArray[index] = value);\n  }\n\n  /**\n   * 当前状态是否有 Morph 动画：\n   * 需要判断 weights 数组长度，以及 Position、Normal 和 Tangent 是否有动画\n   * @returns 返回是否有 Morph 动画\n   */\n  hasMorph (): boolean {\n    return this.morphWeightsLength > 0 && (this.hasPositionMorph || this.hasNormalMorph || this.hasTangentMorph);\n  }\n\n  /**\n   * 两个 Morph 动画状态是否相等：\n   * 这里只比较初始状态是否一样，不考虑 weights 数组的情况，提供给 Mesh 进行 Geometry 检查使用\n   * @param morph - Morph 动画状态对象\n   * @returns 返回两个 Morph 动画状态是否相等\n   */\n  equals (morph: PMorph): boolean {\n    return this.morphWeightsLength === morph.morphWeightsLength\n      && this.hasPositionMorph === morph.hasPositionMorph\n      && this.hasNormalMorph === morph.hasNormalMorph\n      && this.hasTangentMorph === morph.hasTangentMorph;\n  }\n\n  getMorphWeightsArray (): number[] {\n    return this.morphWeightsArray;\n  }\n\n  /**\n   * 统计 Geometry 中 Attribute 名称个数：\n   * 主要用于统计 Morph 动画中新增的 Attribute 名称的个数，会作为最终的 weights 数组长度使用\n   * @param attributeNameList - Attribute 名数组列表，只与 Morph Target 中的属性有关\n   * @param geometry - Geometry 对象，是否有 Morph 动画都可以\n   * @returns 存在的 Attribute 名称数目\n   */\n  getAttributeMorphCount (attributeNameList: string[], geometry: Geometry): number {\n    for (let i = 0; i < attributeNameList.length; i++) {\n      const val = attributeNameList[i];\n\n      if (geometry.getAttributeData(val) === undefined) {\n        return i;\n      }\n    }\n\n    // 所有名称都找到了，所以要返回数组的长度\n    return attributeNameList.length;\n  }\n\n  /**\n   * Morph 动画中 Position 相关的 Attribute 名称\n   */\n  private static positionNameList = [\n    'aTargetPosition0',\n    'aTargetPosition1',\n    'aTargetPosition2',\n    'aTargetPosition3',\n    'aTargetPosition4',\n    'aTargetPosition5',\n    'aTargetPosition6',\n    'aTargetPosition7',\n  ];\n\n  /**\n   * Morph 动画中 Normal 相关的 Attribute 名称\n   */\n  private static normalNameList = [\n    'aTargetNormal0',\n    'aTargetNormal1',\n    'aTargetNormal2',\n    'aTargetNormal3',\n    'aTargetNormal4',\n    'aTargetNormal5',\n    'aTargetNormal6',\n    'aTargetNormal7',\n  ];\n\n  /**\n   * Morph 动画中 Tangent 相关的 Attribute 名称\n   */\n  private static tangentNameList = [\n    'aTargetTangent0',\n    'aTargetTangent1',\n    'aTargetTangent2',\n    'aTargetTangent3',\n    'aTargetTangent4',\n    'aTargetTangent5',\n    'aTargetTangent6',\n    'aTargetTangent7',\n  ];\n}\n\n/**\n * 动画插值类型\n */\nexport enum PAnimInterpType {\n  linear = 0,\n  step,\n  cubicSpline,\n}\n\n/**\n * 动画路径类型\n */\nexport enum PAnimPathType {\n  translation = 0,\n  rotation,\n  scale,\n  weights,\n}\n\n/**\n * 动画纹理类\n */\nexport class 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","import { PMaterialType } from './common';\nimport type { PMaterialBase } from './material';\nimport * as Helper from '../utility/shader-helper';\n\n/**\n * 着色器上下文\n */\nexport interface PShaderContext {\n  /**\n   * 材质\n   */\n  material: PMaterialBase,\n  /**\n   * 是否 WebGL2\n   */\n  isWebGL2: boolean,\n  /**\n   * 特性列表\n   */\n  featureList: string[],\n}\n\n/**\n * 着色器返回的代码结果\n */\nexport interface PShaderResults {\n  /**\n   * 顶点着色器代码\n   */\n  vertexShaderCode: string,\n  /**\n   * 片段着色器代码\n   */\n  fragmentShaderCode: string,\n}\n\ntype ShaderCodeFuncType = (context: PShaderContext) => PShaderResults;\n\n/**\n * 着色器管理类\n */\nexport class PShaderManager {\n  private funcMap: Map<PMaterialType, ShaderCodeFuncType>;\n  private static _instance: PShaderManager;\n\n  /**\n   * 获取着色器单例对象\n   * @returns\n   */\n  static getInstance (): PShaderManager {\n    // Do you need arguments? Make it a regular static method instead.\n    return this._instance || (this._instance = new this());\n  }\n\n  private constructor () {\n    this.funcMap = new Map();\n    this.funcMap.set(PMaterialType.unlit, Helper.getPBRPassShaderCode);\n    this.funcMap.set(PMaterialType.pbr, Helper.getPBRPassShaderCode);\n    this.funcMap.set(PMaterialType.shadowBase, Helper.getShadowPassShaderCode);\n    this.funcMap.set(PMaterialType.shadowFilter, Helper.getGaussianBlurShaderCodeV2);\n    this.funcMap.set(PMaterialType.normalVis, Helper.getNormalVisShaderCode);\n    this.funcMap.set(PMaterialType.simpleFilter, Helper.getSimpleFilterShaderCode);\n    this.funcMap.set(PMaterialType.skyboxFilter, Helper.getSkyBoxShaderCode);\n  }\n\n  /**\n   * 生成着色器代码\n   * @param context - 着色器上下文\n   * @returns\n   */\n  genShaderCode (context: PShaderContext): PShaderResults {\n    const materialType = context.material.materialType;\n    const func = this.funcMap.get(materialType);\n\n    if (func !== undefined) {\n      return func(context);\n    } else {\n      throw new Error(`Invalid material type ${materialType}, shader content ${context}.`);\n    }\n  }\n}\n","import type { Texture, Material } from '@galacean/effects';\nimport { spec, glContext } from '@galacean/effects';\nimport type { MacroInfo } from '../index';\nimport type { Matrix3 } from './math';\nimport { Vector3, Vector4, Color } from './math';\nimport { PObjectType, PMaterialType, PGlobalState, PBRShaderGUID } from './common';\nimport { PObject } from './object';\nimport { PluginHelper } from '../utility/plugin-helper';\nimport { PShaderManager } from './shader';\n\n/**\n * 3D 材质基础类，支持公共的材质功能\n */\nexport abstract class PMaterialBase extends PObject {\n  effectMaterial: Material;\n  /**\n   * 材质类型，主要是 pbr 和 unlit 两类\n   */\n  materialType: PMaterialType = PMaterialType.none;\n  /**\n   * 顶点着色器代码\n   */\n  vertexShaderCode = '';\n  /**\n   * 片段着色器代码\n   */\n  fragmentShaderCode = '';\n  /**\n   * 深度是否写入，默认是写入\n   */\n  ZWrite = true;\n  /**\n   * 是否深度测试提示，默认开启\n   */\n  ZTest = true;\n  /**\n   * 渲染类型，默认是不透明\n   */\n  renderType: spec.RenderType = spec.RenderType.Opaque;\n  /**\n   * 是否 Alpha 裁剪，默认关闭\n   */\n  alphaClip = false;\n  /**\n   * Alpha 测试截断值\n   */\n  alphaCutoff = 0.5;\n  /**\n   * 面侧模式，默认是正面\n   */\n  renderFace: spec.RenderFace = spec.RenderFace.Front;\n\n  /**\n   * 获取着色器特性列表，根据材质状态\n   * @returns 特性列表\n   */\n  getShaderFeatures (): string[] {\n    const featureList: string[] = [];\n\n    if (this.isAlphaClip()) {\n      featureList.push('ALPHAMODE_MASK 1');\n    } else if (this.isOpaque()) {\n      featureList.push('ALPHAMODE_OPAQUE 1');\n    }\n\n    if (this.renderFace === spec.RenderFace.Both) {\n      featureList.push('DOUBLE_SIDED 1');\n    }\n\n    return featureList;\n  }\n\n  getShaderMacros (): MacroInfo[] {\n    const macroList: MacroInfo[] = [];\n\n    if (this.isAlphaClip()) {\n      macroList.push({ name: 'ALPHAMODE_MASK' });\n    } else if (this.isOpaque()) {\n      macroList.push({ name: 'ALPHAMODE_OPAQUE' });\n    }\n\n    if (this.renderFace === spec.RenderFace.Both) {\n      macroList.push({ name: 'DOUBLE_SIDED' });\n    }\n\n    return macroList;\n  }\n\n  /**\n   * 根据材质状态，更新 GE 材质状态\n   * @param material - GE 材质\n   */\n  updateUniforms (material: Material) {\n    // 渲染 UV 结果输出时，设置 uv 大小\n    const renderMode = PGlobalState.getInstance().renderMode3D;\n\n    if (renderMode === spec.RenderMode3D.uv) {\n      const debugUVGridSize = PGlobalState.getInstance().renderMode3DUVGridSize;\n\n      material.setFloat('_DebugUVGridSize', debugUVGridSize);\n    }\n  }\n\n  /**\n   * 生成顶点和片段着色器代码\n   * 先获取着色器特性，再根据材质和全局状态，生成着色器代码\n   * @param inFeatureList - 外部特性列表\n   */\n  build (inFeatureList?: string[]) {\n    const finalFeatureList = this.getFeatureList(inFeatureList);\n    const isWebGL2 = PGlobalState.getInstance().isWebGL2;\n    //\n    const shaderManager = PShaderManager.getInstance();\n    const shaderResult = shaderManager.genShaderCode({\n      material: this,\n      isWebGL2,\n      featureList: finalFeatureList,\n    });\n\n    this.vertexShaderCode = shaderResult.vertexShaderCode;\n    this.fragmentShaderCode = shaderResult.fragmentShaderCode;\n  }\n\n  getFeatureList (inFeatureList?: string[]) {\n    const finalFeatureList = this.getShaderFeatures();\n\n    if (inFeatureList !== undefined) {\n      finalFeatureList.push(...inFeatureList);\n    }\n\n    // 目前只有 PRB 和 Unlit 是需要 EDITOR_TRANSFORM，适配编辑器的视口 Offset\n    // 阴影 Pass 的渲染是不需要，所以这里特殊处理下\n    if (this.materialType !== PMaterialType.shadowBase) {\n      const isEditorEvn = PGlobalState.getInstance().isEditorEnv;\n\n      if (isEditorEvn) {\n        finalFeatureList.push('EDITOR_TRANSFORM');\n      }\n    }\n\n    return finalFeatureList;\n  }\n\n  getMacroList (inMacroList?: MacroInfo[]) {\n    const finalMacroList = this.getShaderMacros();\n\n    if (inMacroList !== undefined) {\n      finalMacroList.push(...inMacroList);\n    }\n\n    // 目前只有 PRB 和 Unlit 是需要 EDITOR_TRANSFORM，适配编辑器的视口 Offset\n    // 阴影 Pass 的渲染是不需要，所以这里特殊处理下\n    if (this.materialType !== PMaterialType.shadowBase) {\n      const isEditorEvn = PGlobalState.getInstance().isEditorEnv;\n\n      if (isEditorEvn) {\n        finalMacroList.push({ name: 'EDITOR_TRANSFORM' });\n      }\n    }\n\n    return finalMacroList;\n  }\n\n  /**\n   * 设置材质状态，根据 GE 材质状态\n   * @param material - GE 材质\n   */\n  setMaterialStates (material: Material) {\n    if (this.renderType === spec.RenderType.Transparent) {\n      material.blending = true;\n      material.depthTest = this.ZTest;\n      material.depthMask = this.ZWrite;\n      material.blendEquation = [glContext.FUNC_ADD, glContext.FUNC_ADD];\n      material.blendFunction = [\n        glContext.ONE, glContext.ONE_MINUS_SRC_ALPHA,\n        glContext.ONE, glContext.ONE_MINUS_SRC_ALPHA,\n      ];\n    } else {\n      if (PGlobalState.getInstance().isTiny3dMode) {\n        material.blending = false;\n        material.depthTest = true;\n        // Tiny兼容模式下不透明的深度写入始终开\n        material.depthMask = true;\n      } else {\n        material.blending = false;\n        material.depthTest = this.ZTest;\n        material.depthMask = this.ZWrite;\n      }\n    }\n\n    this.setFaceSideStates(material);\n  }\n\n  protected setFaceSideStates (material: Material) {\n    if (this.isBothSide()) {\n      material.culling = false;\n    } else if (this.isBackSide()) {\n      material.cullFace = glContext.FRONT;\n      material.frontFace = glContext.CCW;\n      material.culling = true;\n    } else {\n      material.cullFace = glContext.BACK;\n      material.frontFace = glContext.CCW;\n      material.culling = true;\n    }\n  }\n\n  /**\n   * 销毁材质，清除着色器代码\n   */\n  override dispose () {\n    this.vertexShaderCode = '';\n    this.fragmentShaderCode = '';\n  }\n\n  /**\n   * 是否合法，材质类型非 none\n   * @returns\n   */\n  override isValid (): boolean {\n    return this.materialType !== PMaterialType.none && super.isValid();\n  }\n\n  /**\n   * 是否不透明\n   * @returns\n   */\n  isOpaque (): boolean {\n    return this.renderType === spec.RenderType.Opaque;\n  }\n\n  /**\n   * 是否 Alpha 裁剪\n   * @returns\n   */\n  isAlphaClip (): boolean {\n    return this.alphaClip;\n  }\n\n  /**\n   * 是否半透明\n   * @returns\n   */\n  isTransparent (): boolean {\n    return this.renderType === spec.RenderType.Transparent;\n  }\n\n  /**\n   * 是否正面模式\n   * @returns\n   */\n  isFrontSide (): boolean {\n    return this.renderFace === spec.RenderFace.Front;\n  }\n\n  /**\n   * 是否背面模式\n   * @returns\n   */\n  isBackSide (): boolean {\n    return this.renderFace === spec.RenderFace.Back;\n  }\n\n  /**\n   * 是否双面模式\n   * @returns\n   */\n  isBothSide (): boolean {\n    return this.renderFace === spec.RenderFace.Both;\n  }\n}\n\n/**\n * 无光照材质类，负责无关照或者不接受光照情况下的物体材质效果\n */\nexport class PMaterialUnlit extends PMaterialBase {\n  /**\n   * 基础颜色纹理\n   */\n  baseColorTexture?: Texture;\n  /**\n   * 基础颜色纹理变换\n   */\n  baseColorTextureTrans: Matrix3;\n  /**\n   * 基础颜色值，默认是白色 Color(1, 1, 1, 1)\n   */\n  baseColorFactor: Color = new Color(1, 1, 1, 1);\n\n  /**\n   * 创建无光照材质，支持基础颜色纹理\n   * @param material - effect 材质对象\n   */\n  create (material: Material) {\n    this.effectMaterial = material;\n    this.name = material.name;\n    this.type = PObjectType.material;\n    this.materialType = PMaterialType.unlit;\n    //\n    this.baseColorTexture = material.getTexture('_BaseColorSampler') ?? undefined;\n    this.baseColorTextureTrans = PluginHelper.createUVTransform(material, '_BaseColorSampler_ST', '_BaseColorRotation');\n    this.baseColorFactor = material.getColor('_BaseColorFactor') ?? new Color(1.0, 1.0, 1.0, 1.0);\n    //\n    this.ZWrite = material.getFloat('ZWrite') !== 0;\n    this.ZTest = material.getFloat('ZTest') !== 0;\n    this.renderType = material.stringTags['RenderType'] as spec.RenderType ?? spec.RenderType.Opaque;\n    this.alphaClip = material.getFloat('AlphaClip') === 1;\n    this.alphaCutoff = material.getFloat('_AlphaCutoff') ?? 0;\n    this.renderFace = material.stringTags['RenderFace'] as spec.RenderFace ?? spec.RenderFace.Front;\n  }\n\n  /**\n   * 销毁材质\n   */\n  override dispose () {\n    super.dispose();\n    this.baseColorTexture = undefined;\n  }\n\n  /**\n   * 获取着色器特性列表，根据材质状态\n   * @returns 着色器特性列表\n   */\n  override getShaderFeatures (): string[] {\n    const featureList = super.getShaderFeatures();\n\n    featureList.push('MATERIAL_METALLICROUGHNESS 1');\n    if (this.hasBaseColorTexture()) {\n      featureList.push('HAS_BASE_COLOR_MAP 1');\n    }\n\n    featureList.push('MATERIAL_UNLIT 1');\n\n    return featureList;\n  }\n\n  override getShaderMacros (): MacroInfo[] {\n    const macroList = super.getShaderMacros();\n\n    macroList.push({ name: 'MATERIAL_METALLICROUGHNESS' });\n    if (this.hasBaseColorTexture()) {\n      macroList.push({ name: 'HAS_BASE_COLOR_MAP' });\n    }\n\n    macroList.push({ name: 'MATERIAL_UNLIT' });\n\n    return macroList;\n  }\n\n  /**\n   * 更新对应的 GE 材质中着色器的 Uniform 数据\n   * @param material - GE 材质\n   */\n  override updateUniforms (material: Material) {\n    super.updateUniforms(material);\n\n    if (this.baseColorTexture !== undefined) {\n      material.setInt('_BaseColorUVSet', 0);\n      material.setMatrix3('_BaseColorUVTransform', this.baseColorTextureTrans);\n    }\n\n    material.setFloat('_MetallicFactor', 0);\n    material.setFloat('_RoughnessFactor', 0);\n\n    material.setFloat('_Exposure', 1.0);\n  }\n\n  /**\n   * 是否有基础颜色纹理\n   * @returns\n   */\n  hasBaseColorTexture (): boolean {\n    return this.baseColorTexture !== undefined;\n  }\n\n  /**\n   * 获取基础颜色纹理\n   * @returns\n   */\n  getBaseColorTexture (): Texture {\n    return this.baseColorTexture as Texture;\n  }\n\n  /**\n   * 设置基础颜色纹理\n   * @param val - 纹理对象\n   */\n  setBaseColorTexture (val: Texture) {\n    this.baseColorTexture = val;\n  }\n\n  /**\n   * 获取基础颜色纹理\n   * @returns\n   */\n  getBaseColorFactor (): Color {\n    return this.baseColorFactor;\n  }\n\n  /**\n   * 设置基础颜色值\n   * @param val - 颜色值\n   */\n  setBaseColorFactor (val: Color | Vector4 | spec.vec4) {\n    if (val instanceof Color) {\n      // for Color\n      this.baseColorFactor.set(val.r, val.g, val.b, val.a);\n    } else if (val instanceof Vector4) {\n      // for Vector4\n      this.baseColorFactor.set(val.x, val.y, val.z, val.w);\n    } else {\n      // for vec4\n      this.baseColorFactor.set(val[0], val[1], val[2], val[3]);\n    }\n  }\n}\n\n/**\n * PBR 材质类，负责基于物理的材质效果，也是渲染中最常用的材质。\n * 目前支持金属度/粗糙度工作流，与其他引擎中的 PBR 材质功能一致。\n */\nexport class PMaterialPBR extends PMaterialBase {\n  /**\n   * 基础颜色纹理\n   */\n  baseColorTexture?: Texture;\n  /**\n   * 基础颜色纹理变换\n   */\n  baseColorTextureTrans: Matrix3;\n  /**\n   * 基础颜色值，默认是白色 Color(1, 1, 1, 1)\n   */\n  baseColorFactor: Color = new Color(1, 1, 1, 1);\n  /**\n   * 金属度粗超度纹理\n   */\n  metallicRoughnessTexture?: Texture;\n  /**\n   * 金属度粗超度纹理变换\n   */\n  metallicRoughnessTextureTrans: Matrix3;\n  /**\n   * 是否高光抗锯齿，能够明显提升高光表现效果\n   */\n  useSpecularAA = false;\n  /**\n   * 金属度值\n   */\n  metallicFactor = 0;\n  /**\n   * 粗超度值\n   */\n  roughnessFactor = 1;\n  /**\n   * 法线纹理\n   */\n  normalTexture?: Texture;\n  /**\n   * 法线纹理变换\n   */\n  normalTextureTrans: Matrix3;\n  /**\n   * 法线纹理缩放\n   */\n  normalTextureScale = 1;\n  /**\n   * AO 纹理\n   */\n  occlusionTexture?: Texture;\n  /**\n   * AO 纹理变换\n   */\n  occlusionTextureTrans: Matrix3;\n  /**\n   * AO 纹理强度\n   */\n  occlusionTextureStrength = 1;\n  /**\n   * 自发光纹理\n   */\n  emissiveTexture?: Texture;\n  /**\n   * 自发光纹理变换\n   */\n  emissiveTextureTrans: Matrix3;\n  /**\n   * 自发光颜色值，默认是黑色 Vector4(0, 0, 0, 0)\n   */\n  emissiveFactor: Color = new Color(0, 0, 0, 0);\n  /**\n   * 自发光强度\n   */\n  emissiveIntensity = 1;\n\n  /**\n   * 创建材质\n   * @param material - effect 材质对象\n   */\n  create (material: Material) {\n    this.effectMaterial = material;\n    this.name = material.name;\n    this.type = PObjectType.material;\n    this.materialType = PMaterialType.pbr;\n    //\n    this.baseColorTexture = material.getTexture('_BaseColorSampler') ?? undefined;\n    this.baseColorTextureTrans = PluginHelper.createUVTransform(material, '_BaseColorSampler_ST', '_BaseColorRotation');\n    this.baseColorFactor = material.getColor('_BaseColorFactor') ?? new Color(1.0, 1.0, 1.0, 1.0);\n    //\n    this.metallicRoughnessTexture = material.getTexture('_MetallicRoughnessSampler') ?? undefined;\n    this.metallicRoughnessTextureTrans = PluginHelper.createUVTransform(material, '_MetallicRoughnessSampler_ST', '_MetallicRoughnessRotation');\n    this.useSpecularAA = material.getFloat('_SpecularAA') === 1;\n    this.metallicFactor = material.getFloat('_MetallicFactor') ?? 1;\n    this.roughnessFactor = material.getFloat('_RoughnessFactor') ?? 0;\n    //\n    this.normalTexture = material.getTexture('_NormalSampler') ?? undefined;\n    this.normalTextureTrans = PluginHelper.createUVTransform(material, '_NormalSampler_ST', '_NormalRotation');\n    this.normalTextureScale = material.getFloat('_NormalScale') ?? 1;\n    //\n    this.occlusionTexture = material.getTexture('_OcclusionSampler') ?? undefined;\n    this.occlusionTextureTrans = PluginHelper.createUVTransform(material, '_OcclusionSampler_ST', '_OcclusionRotation');\n    this.occlusionTextureStrength = material.getFloat('_OcclusionStrength') ?? 1;\n    //\n    this.emissiveTexture = material.getTexture('_EmissiveSampler') ?? undefined;\n    this.emissiveTextureTrans = PluginHelper.createUVTransform(material, '_EmissiveSampler_ST', '_EmissiveRotation');\n    this.emissiveFactor = material.getColor('_EmissiveFactor') ?? new Color(0, 0, 0, 1);\n    this.emissiveIntensity = material.getFloat('_EmissiveIntensity') ?? 1;\n    //\n    this.ZWrite = material.getFloat('ZWrite') !== 0;\n    this.ZTest = material.getFloat('ZTest') !== 0;\n    this.renderType = material.stringTags['RenderType'] as spec.RenderType ?? spec.RenderType.Opaque;\n    this.alphaClip = material.getFloat('AlphaClip') === 1;\n    this.alphaCutoff = material.getFloat('_AlphaCutoff') ?? 0;\n    this.renderFace = material.stringTags['RenderFace'] as spec.RenderFace ?? spec.RenderFace.Front;\n  }\n\n  /**\n   * 销毁材质\n   */\n  override dispose () {\n    super.dispose();\n    this.baseColorTexture = undefined;\n    this.metallicRoughnessTexture = undefined;\n    this.normalTexture = undefined;\n    this.occlusionTexture = undefined;\n    this.emissiveTexture = undefined;\n  }\n\n  /**\n   * 获取材质特性列表\n   * @returns 材质特性列表\n   */\n  override getShaderFeatures (): string[] {\n    const featureList = super.getShaderFeatures();\n\n    featureList.push('MATERIAL_METALLICROUGHNESS 1');\n    if (this.hasBaseColorTexture()) {\n      featureList.push('HAS_BASE_COLOR_MAP 1');\n      if (this.baseColorTextureTrans !== undefined) {\n        featureList.push('HAS_BASECOLOR_UV_TRANSFORM 1');\n      }\n    }\n    if (this.hasMetallicRoughnessTexture()) {\n      featureList.push('HAS_METALLIC_ROUGHNESS_MAP 1');\n      if (this.metallicRoughnessTextureTrans !== undefined) {\n        featureList.push('HAS_METALLICROUGHNESS_UV_TRANSFORM 1');\n      }\n    }\n    if (this.useSpecularAA) {\n      featureList.push('USE_SPECULAR_AA 1');\n    }\n    if (this.hasNormalTexture()) {\n      featureList.push('HAS_NORMAL_MAP 1');\n      if (this.normalTextureTrans !== undefined) {\n        featureList.push('HAS_NORMAL_UV_TRANSFORM 1');\n      }\n    }\n    if (this.hasOcclusionTexture()) {\n      featureList.push('HAS_OCCLUSION_MAP 1');\n      if (this.occlusionTextureTrans !== undefined) {\n        featureList.push('HAS_OCCLUSION_UV_TRANSFORM 1');\n      }\n    }\n    if (this.hasEmissiveTexture()) {\n      featureList.push('HAS_EMISSIVE_MAP 1');\n      if (this.emissiveTextureTrans !== undefined) {\n        featureList.push('HAS_EMISSIVE_UV_TRANSFORM 1');\n      }\n    } else if (this.hasEmissiveValue()) {\n      featureList.push('HAS_EMISSIVE 1');\n    }\n\n    return featureList;\n  }\n\n  override getShaderMacros (): MacroInfo[] {\n    const macroList = super.getShaderMacros();\n\n    macroList.push({ name: 'MATERIAL_METALLICROUGHNESS' });\n    if (this.hasBaseColorTexture()) {\n      macroList.push({ name: 'HAS_BASE_COLOR_MAP' });\n      if (this.baseColorTextureTrans !== undefined) {\n        macroList.push({ name: 'HAS_BASECOLOR_UV_TRANSFORM' });\n      }\n    }\n    if (this.hasMetallicRoughnessTexture()) {\n      macroList.push({ name: 'HAS_METALLIC_ROUGHNESS_MAP' });\n      if (this.metallicRoughnessTextureTrans !== undefined) {\n        macroList.push({ name: 'HAS_METALLICROUGHNESS_UV_TRANSFORM' });\n      }\n    }\n    if (this.useSpecularAA) {\n      macroList.push({ name: 'USE_SPECULAR_AA' });\n    }\n    if (this.hasNormalTexture()) {\n      macroList.push({ name: 'HAS_NORMAL_MAP' });\n      if (this.normalTextureTrans !== undefined) {\n        macroList.push({ name: 'HAS_NORMAL_UV_TRANSFORM' });\n      }\n    }\n    if (this.hasOcclusionTexture()) {\n      macroList.push({ name: 'HAS_OCCLUSION_MAP' });\n      if (this.occlusionTextureTrans !== undefined) {\n        macroList.push({ name: 'HAS_OCCLUSION_UV_TRANSFORM' });\n      }\n    }\n    if (this.hasEmissiveTexture()) {\n      macroList.push({ name: 'HAS_EMISSIVE_MAP' });\n      if (this.emissiveTextureTrans !== undefined) {\n        macroList.push({ name: 'HAS_EMISSIVE_UV_TRANSFORM' });\n      }\n    } else if (this.hasEmissiveValue()) {\n      macroList.push({ name: 'HAS_EMISSIVE' });\n    }\n\n    return macroList;\n  }\n\n  /**\n   * 更新关联的 GE 材质中着色器的 Uniform 数据\n   * @param material - GE 材质\n   */\n  override updateUniforms (material: Material) {\n    super.updateUniforms(material);\n\n    if (this.baseColorTexture !== undefined) {\n      material.setInt('_BaseColorUVSet', 0);\n      material.setMatrix3('_BaseColorUVTransform', this.baseColorTextureTrans);\n    }\n    //\n    if (this.metallicRoughnessTexture !== undefined) {\n      material.setInt('_MetallicRoughnessUVSet', 0);\n      material.setMatrix3('_MetallicRoughnessUVTransform', this.metallicRoughnessTextureTrans);\n    }\n    //\n    if (this.normalTexture !== undefined) {\n      material.setInt('_NormalUVSet', 0);\n      material.setMatrix3('_NormalUVTransform', this.normalTextureTrans);\n    }\n    //\n    if (this.occlusionTexture !== undefined) {\n      material.setInt('_OcclusionUVSet', 0);\n      material.setMatrix3('_OcclusionUVTransform', this.occlusionTextureTrans);\n    }\n    //\n    if (this.emissiveTexture !== undefined) {\n      material.setInt('_EmissiveUVSet', 0);\n      material.setMatrix3('_EmissiveUVTransform', this.emissiveTextureTrans);\n    }\n\n    material.setFloat('_Exposure', 3.0);\n  }\n\n  /**\n   * 是否有基础颜色纹理\n   * @returns\n   */\n  hasBaseColorTexture (): boolean {\n    return this.baseColorTexture !== undefined;\n  }\n\n  /**\n   * 设置基础颜色纹理\n   * @param val - 纹理\n   */\n  setBaseColorTexture (val: Texture) {\n    this.baseColorTexture = val;\n  }\n\n  /**\n   * 获取基础颜色纹理\n   * @returns\n   */\n  getBaseColorFactor (): Color {\n    return this.baseColorFactor;\n  }\n\n  /**\n   * 设置基础颜色值\n   * @param val - 颜色值\n   */\n  setBaseColorFactor (val: Color | Vector4 | spec.vec4) {\n    if (val instanceof Color) {\n      // for Vector4\n      this.baseColorFactor.set(val.r, val.g, val.b, val.a);\n    } else if (val instanceof Vector4) {\n      // for Vector4\n      this.baseColorFactor.set(val.x, val.y, val.z, val.w);\n    } else {\n      // for vec4\n      this.baseColorFactor.set(val[0], val[1], val[2], val[3]);\n    }\n  }\n\n  /**\n   * 是否有金属度粗超度纹理\n   * @returns\n   */\n  hasMetallicRoughnessTexture (): boolean {\n    return this.metallicRoughnessTexture !== undefined;\n  }\n\n  /**\n   * 获取金属度粗超度纹理\n   * @returns\n   */\n  getMetallicRoughnessTexture (): Texture {\n    return this.metallicRoughnessTexture as Texture;\n  }\n\n  /**\n   * 设置金属度粗超度纹理\n   * @param val - 纹理\n   */\n  setMetallicRoughnessTexture (val: Texture) {\n    this.metallicRoughnessTexture = val;\n  }\n\n  /**\n   * 是否有法线纹理\n   * @returns\n   */\n  hasNormalTexture (): boolean {\n    return this.normalTexture !== undefined;\n  }\n\n  /**\n   * 获取法线纹理\n   * @returns\n   */\n  getNormalTexture (): Texture {\n    return this.normalTexture as Texture;\n  }\n\n  /**\n   * 设置法线纹理\n   * @param val - 纹理\n   */\n  setNormalTexture (val: Texture) {\n    this.normalTexture = val;\n  }\n\n  /**\n   * 是否有遮挡纹理\n   * @returns\n   */\n  hasOcclusionTexture (): boolean {\n    return this.occlusionTexture !== undefined;\n  }\n\n  /**\n   * 获取遮挡纹理\n   * @returns\n   */\n  getOcclusionTexture (): Texture {\n    return this.occlusionTexture as Texture;\n  }\n\n  /**\n   * 设置遮挡纹理\n   * @param val - 纹理\n   */\n  setOcclusionTexture (val: Texture) {\n    this.occlusionTexture = val;\n  }\n\n  /**\n   * 是否有自发光纹理\n   * @returns\n   */\n  hasEmissiveTexture (): boolean {\n    return this.emissiveTexture !== undefined;\n  }\n\n  /**\n   * 获取自发光纹理\n   * @returns\n   */\n  getEmissiveTexture (): Texture {\n    return this.emissiveTexture as Texture;\n  }\n\n  /**\n   * 设置自发光纹理\n   * @param val - 纹理\n   */\n  setEmissiveTexture (val: Texture) {\n    this.emissiveTexture = val;\n  }\n\n  /**\n   * 是否有自发光值，包含强度\n   * @returns\n   */\n  hasEmissiveValue (): boolean {\n    return this.emissiveFactor.luminance() * this.emissiveIntensity > 0;\n  }\n\n  /**\n   * 获取自发光颜色\n   * @returns\n   */\n  getEmissiveFactor (): Color {\n    return this.emissiveFactor;\n  }\n\n  /**\n   * 设置自发光颜色\n   * @param val - 颜色\n   */\n  setEmissiveFactor (val: Color | Vector3 | spec.vec3) {\n    if (val instanceof Color) {\n      // Color\n      this.emissiveFactor.set(val.r, val.g, val.b, val.a);\n    } else if (val instanceof Vector3) {\n      // Vector3\n      this.emissiveFactor.set(val.x, val.y, val.z, 0);\n    } else {\n      // vec3\n      this.emissiveFactor.set(val[0], val[1], val[2], 0);\n    }\n  }\n\n  /**\n   * 获取自发光强度\n   * @returns\n   */\n  getEmissiveIntensity (): number {\n    return this.emissiveIntensity;\n  }\n\n  /**\n   * 设置自发光强度\n   * @param val - 强度\n   */\n  setEmissiveIntensity (val: number) {\n    this.emissiveIntensity = val;\n  }\n}\n\n/**\n * 材质类型，包括无光照材质和 PBR 材质\n */\nexport type PMaterial = PMaterialUnlit | PMaterialPBR;\n\n/**\n * 创建插件材质对象\n * @param material - Effects 材质对象\n * @returns 材质对象\n */\nexport function createPluginMaterial (material: Material): PMaterial {\n  if (material.shader.getInstanceId() === PBRShaderGUID) {\n    const materialPBR = new PMaterialPBR();\n\n    materialPBR.create(material);\n\n    return materialPBR;\n  } else {\n    const materialUnlit = new PMaterialUnlit();\n\n    materialUnlit.create(material);\n\n    return materialUnlit;\n  }\n}\n","import type { Mesh, Material, TextureSourceOptions, Engine, Renderer } from '@galacean/effects';\nimport { spec, glContext, Texture, TextureSourceType, loadImage, generateGUID } from '@galacean/effects';\nimport type { ModelSkyboxComponentData, ModelSkyboxOptions } from '../index';\nimport { PObjectType, PMaterialType } from './common';\nimport { PEntity } from './object';\nimport { PMaterialBase } from './material';\nimport type { PSceneManager } from './scene';\nimport { WebGLHelper } from '../utility/plugin-helper';\nimport { Matrix4, Vector2, Vector3 } from './math';\nimport type { ModelSkyboxComponent } from '../plugin/model-item';\n\n/**\n * 天空盒类，支持天空盒的渲染和 IBL 光照效果\n */\nexport class PSkybox extends PEntity {\n  /**\n   * 所属的天空盒组件\n   */\n  owner?: ModelSkyboxComponent;\n  /**\n   * 是否渲染\n   */\n  renderable = true;\n  /**\n   * 强度\n   */\n  intensity = 1.0;\n  /**\n   * 反射强度\n   */\n  reflectionsIntensity = 1.0;\n  /**\n   * 辐射照度系数\n   */\n  irradianceCoeffs?: number[][];\n  /**\n   * 漫反射贴图\n   */\n  diffuseImage?: Texture;\n  /**\n   * 高光贴图\n   */\n  specularImage!: Texture;\n  /**\n   * 高光贴图大小\n   */\n  specularImageSize = 0;\n  /**\n   * 高光贴图 Mip 层数目\n   */\n  specularMipCount = 0;\n  /**\n   * BRDF 查询纹理\n   */\n  brdfLUT?: Texture;\n  /**\n   * 优先级\n   */\n  priority = 0;\n  /**\n   * 天空盒 Mesh\n   */\n  skyboxMesh?: Mesh;\n  /**\n   * 天空盒材质\n   */\n  skyboxMaterial?: PMaterialSkyboxFilter;\n  /**\n   * 是否构建过\n   */\n  isBuilt = false;\n\n  /**\n   * 构造函数\n   * @param name - 名称\n   * @param data - 天空盒参数\n   * @param owner - 所属天空盒组件元素\n   */\n  constructor (name: string, data: ModelSkyboxComponentData, owner?: ModelSkyboxComponent) {\n    super();\n    this.name = name;\n    this.type = PObjectType.skybox;\n    this.visible = false;\n    this.owner = owner;\n\n    const { irradianceCoeffs } = data;\n\n    this.renderable = data.renderable;\n    this.intensity = data.intensity;\n    this.reflectionsIntensity = data.reflectionsIntensity;\n    if (irradianceCoeffs) {\n      this.irradianceCoeffs = [];\n      for (let i = 0; i < irradianceCoeffs.length; i += 3) {\n        this.irradianceCoeffs.push([\n          irradianceCoeffs[i],\n          irradianceCoeffs[i + 1],\n          irradianceCoeffs[i + 2],\n        ]);\n      }\n    } else {\n      this.irradianceCoeffs = [];\n    }\n\n    this.diffuseImage = data.diffuseImage as unknown as Texture;\n    this.specularImage = data.specularImage as unknown as Texture;\n    this.specularImageSize = data.specularImageSize;\n    this.specularMipCount = data.specularMipCount;\n\n    this.priority = owner?.item?.renderOrder || 0;\n  }\n\n  /**\n   * 设置 BRDF 查询纹理\n   * @param brdfLUT - 纹理\n   */\n  setup (brdfLUT?: Texture) {\n    this.brdfLUT = brdfLUT;\n  }\n\n  /**\n   * 构建天空盒，创建天空盒材质，从场景缓存中创建天空盒 Mesh\n   * @param sceneCache - 场景缓存\n   * @returns\n   */\n  build (scene: PSceneManager) {\n    if (this.isBuilt) {\n      return;\n    }\n\n    this.isBuilt = true;\n    this.skyboxMaterial = new PMaterialSkyboxFilter();\n    this.skyboxMaterial.create(this);\n    this.skyboxMaterial.build();\n    //\n    const sceneCache = scene.getSceneCache();\n\n    this.skyboxMesh = sceneCache.getFilterMesh('SkyboxFilterPlane', this.skyboxMaterial);\n    this.skyboxMesh.priority = this.priority;\n    this.skyboxMaterial.updateUniforms(this.skyboxMesh.material);\n  }\n\n  /**\n   * 渲染天空盒\n   * @param scene - 场景\n   * @param renderer - 渲染器\n   */\n  override render (scene: PSceneManager, renderer: Renderer) {\n    this.updateMaterial(scene);\n\n    if (this.visible && this.renderable && this.skyboxMesh !== undefined) {\n      const mesh = this.skyboxMesh;\n\n      renderer.drawGeometry(mesh.geometry, Matrix4.IDENTITY, mesh.material);\n    }\n  }\n\n  /**\n   * 销毁\n   */\n  override dispose () {\n    super.dispose();\n    this.owner = undefined;\n    this.diffuseImage = undefined;\n    //@ts-expect-error\n    this.specularImage = undefined;\n    this.brdfLUT = undefined;\n    this.skyboxMesh = undefined;\n    this.skyboxMaterial?.dispose();\n    this.skyboxMaterial = undefined;\n  }\n\n  private updateMaterial (scene: PSceneManager) {\n    this.build(scene);\n\n    if (this.visible && this.renderable && this.skyboxMesh !== undefined && this.skyboxMaterial !== undefined) {\n      const sceneStates = scene.sceneStates;\n      const camera = sceneStates.camera;\n      const viewMatrix = sceneStates.viewMatrix;\n      const newProjViewMatrix = camera.getNewProjectionMatrix(camera.fov).multiply(viewMatrix).invert();\n      const material = this.skyboxMesh.material;\n\n      this.skyboxMaterial.updateUniforms(material);\n      material.setMatrix('_InvViewProjectionMatrix', newProjViewMatrix);\n    }\n  }\n\n  /**\n   * 是否可用，根据内部的强度、辐射照度系数、漫反射贴图和高光贴图状态\n   */\n  get available (): boolean {\n    if (!this.isValid()) { return false; }\n\n    if (this.intensity <= 0 && this.reflectionsIntensity <= 0) { return false; }\n\n    if (this.irradianceCoeffs === undefined && this.diffuseImage === undefined) { return false; }\n\n    return this.specularImage !== undefined && this.specularMipCount >= 0;\n  }\n\n  /**\n   * 当前强度，如果不可见返回 0\n   */\n  get currentIntensity (): number {\n    return this.visible ? this.intensity : 0;\n  }\n\n  /**\n   * 当前反射强度，如果不可见返回 0\n   */\n  get currentReflectionsIntensity (): number {\n    return this.visible ? this.reflectionsIntensity : 0;\n  }\n\n  /**\n   * 是否有漫反射贴图\n   */\n  get hasDiffuseImage (): boolean {\n    return this.diffuseImage !== undefined;\n  }\n\n  /**\n   * 是否有辐射照度系数\n   */\n  get hasIrradianceCoeffs (): boolean {\n    return this.irradianceCoeffs !== undefined;\n  }\n\n}\n\n/**\n * 天空盒材质类\n */\nexport class PMaterialSkyboxFilter extends PMaterialBase {\n  /**\n   * 强度\n   */\n  intensity = 1.0;\n  /**\n   * 反射强度\n   */\n  reflectionsIntensity = 1.0;\n  /**\n   * BRDF 查询纹理\n   */\n  brdfLUT?: Texture;\n  /**\n   * 辐射照度系数\n   */\n  irradianceCoeffs?: number[][];\n  /**\n   * 漫反射贴图\n   */\n  diffuseImage?: Texture;\n  /**\n   * 高光贴图\n   */\n  specularImage!: Texture;\n  /**\n   * 高光贴图 Mip 数目\n   */\n  specularMipCount = 0;\n\n  /**\n   * 创建天空盒材质，从天空盒对象\n   * @param skybox - 天空盒对象\n   */\n  create (skybox: PSkybox) {\n    this.type = PObjectType.material;\n    this.materialType = PMaterialType.skyboxFilter;\n    this.ZTest = false;\n    //\n    this.name = skybox.name;\n    this.intensity = skybox.intensity;\n    this.reflectionsIntensity = skybox.reflectionsIntensity;\n    this.brdfLUT = skybox.brdfLUT;\n    this.irradianceCoeffs = skybox.irradianceCoeffs;\n    this.diffuseImage = skybox.diffuseImage;\n    this.specularImage = skybox.specularImage;\n    this.specularMipCount = skybox.specularMipCount;\n  }\n\n  /**\n   * 销毁，需要解除资源引用\n   */\n  override dispose () {\n    super.dispose();\n    this.brdfLUT = undefined;\n    this.irradianceCoeffs = undefined;\n    this.diffuseImage = undefined;\n    // @ts-expect-error\n    this.specularImage = undefined;\n  }\n\n  /**\n   * 获取着色器特性列表\n   * @returns\n   */\n  override getShaderFeatures (): string[] {\n    const featureList: string[] = [];\n\n    featureList.push('USE_IBL 1');\n    featureList.push('USE_TEX_LOD 1');\n    if (this.diffuseImage === undefined) { featureList.push('IRRADIANCE_COEFFICIENTS 1'); }\n\n    return featureList;\n  }\n\n  /**\n   * 更新着色器 Uniform 数据\n   * @param material - 对应的 Core 层材质\n   */\n  override updateUniforms (material: Material) {\n    if (this.brdfLUT === undefined) {\n      throw new Error('Setup brdfLUT for skybox at first.');\n    }\n\n    material.setVector2('_IblIntensity', new Vector2(2.0, 2.0));\n    material.setTexture('_brdfLUT', this.brdfLUT);\n    if (this.diffuseImage !== undefined) {\n      material.setTexture('_DiffuseEnvSampler', this.diffuseImage);\n    } else {\n      const coeffs = this.irradianceCoeffs;\n\n      if (coeffs === undefined || coeffs.length != 9) { throw new Error(`Invalid skybox irradiance coeffs ${coeffs}.`); }\n\n      const aliasName = ['l00', 'l1m1', 'l10', 'l11', 'l2m2', 'l2m1', 'l20', 'l21', 'l22'];\n\n      aliasName.forEach((n, i) => {\n        material.setVector3(`_shCoefficients.${n}`, Vector3.fromArray(coeffs[i] as spec.vec3));\n      });\n    }\n    material.setInt('_MipCount', this.specularMipCount - 1);\n    material.setTexture('_SpecularEnvSampler', this.specularImage);\n  }\n\n  /**\n   * 设置对应的材质状态\n   * @param material - 对应的 Core 层材质\n   */\n  override setMaterialStates (material: Material) {\n    material.depthTest = true;\n    material.depthMask = false;\n    this.setFaceSideStates(material);\n  }\n}\n\n/**\n * 图像缓冲区数据接口\n */\nexport interface PImageBufferData {\n  /**\n   * 类型，总是 buffer\n   */\n  type: 'buffer',\n  /**\n   * 数组\n   */\n  data: Uint8Array,\n  /**\n   * MIME 类型\n   */\n  mimeType: string,\n}\n\n/**\n * 图像数据类型，字符串（URL）或者图像缓冲区数据\n */\nexport type PImageData = string | PImageBufferData;\n\n/**\n * 天空盒基础参数接口\n */\nexport interface PSkyboxBaseParams {\n  /**\n   * 是否渲染\n   */\n  renderable: boolean,\n  /**\n   * 强度\n   */\n  intensity: number,\n  /**\n   * 反射强度\n   */\n  reflectionsIntensity: number,\n  /**\n   * 辐射照度系数\n   */\n  irradianceCoeffs?: number[],\n  /**\n   * 高光贴图 Mip 层数\n   */\n  specularMipCount: number,\n  /**\n   * 高光贴图大小\n   */\n  specularImageSize: number,\n}\n\n/**\n * 天空盒 URL 参数接口\n */\nexport interface PSkyboxURLParams extends PSkyboxBaseParams {\n  /**\n   * 类型，总是 url\n   */\n  type: 'url',\n  /**\n   * 漫反射贴图 URL 列表\n   */\n  diffuseImage?: string[],\n  /**\n   * 高光贴图 URL 二级列表\n   */\n  specularImage: string[][],\n}\n\n/**\n * 天空盒缓冲区参数接口\n */\nexport interface PSkyboxBufferParams extends PSkyboxBaseParams {\n  /**\n   * 类型，总是 buffer\n   */\n  type: 'buffer',\n  /**\n   * 漫反射贴图列表\n   */\n  diffuseImage?: PImageBufferData[],\n  /**\n   * 高光贴图二级列表\n   */\n  specularImage: PImageBufferData[][],\n}\n\n/**\n * 天空盒参数类型\n */\nexport type PSkyboxParams = PSkyboxURLParams | PSkyboxBufferParams;\n\nexport enum PSkyboxType {\n  NFT = 0,\n  FARM,\n}\n\n/**\n * 天空盒创建类\n */\nexport class PSkyboxCreator {\n  /**\n   * 获取 BRDF 查询纹理选项\n   * @returns 纹理源选项\n   */\n  static async getBrdfLutTextureOptions (): Promise<TextureSourceOptions> {\n    const brdfURL = 'https://gw.alipayobjects.com/zos/gltf-asset/61420044606400/lut-ggx.png';\n    //const brdfURL = 'https://gw.alipayobjects.com/zos/gltf-asset/58540818729423/a4191420-a8cd-432c-8e36-9bd02a67ec85.png';\n    const brdfLutImage = await loadImage(brdfURL);\n\n    const brdfLutOpts: TextureSourceOptions = {\n      name: 'brdfLut',\n      wrapS: glContext.CLAMP_TO_EDGE,\n      wrapT: glContext.CLAMP_TO_EDGE,\n      magFilter: glContext.LINEAR,\n      minFilter: glContext.LINEAR,\n      anisotropic: 1,\n      sourceType: TextureSourceType.image,\n      image: brdfLutImage,\n      generateMipmap: false,\n      flipY: false,\n      premultiplyAlpha: false,\n    };\n\n    return brdfLutOpts;\n  }\n\n  /**\n   * 创建 BRDF 查询纹理\n   * @param engine - 引擎\n   * @returns 纹理\n   */\n  static async createBrdfLutTexture (engine: Engine): Promise<Texture> {\n    const brdfLutOpts = await this.getBrdfLutTextureOptions();\n    const brdfLutTexture = Texture.create(engine, brdfLutOpts);\n\n    return brdfLutTexture;\n  }\n\n  /**\n   * 创建天空盒选项\n   * @param engine - 引擎\n   * @param params - 天空盒参数\n   * @returns 天空盒选项\n   */\n  static async createSkyboxOptions (engine: Engine, params: PSkyboxParams): Promise<ModelSkyboxOptions> {\n    const specularImage = await this.createSpecularCubeMap(engine, params);\n    const diffuseImage = await this.createDiffuseCubeMap(engine, params);\n    const { renderable, intensity, reflectionsIntensity, irradianceCoeffs, specularImageSize, specularMipCount } = params;\n    const skyboxOptions: ModelSkyboxOptions = {\n      renderable,\n      intensity,\n      reflectionsIntensity,\n      // @ts-expect-error\n      irradianceCoeffs,\n      diffuseImage,\n      specularImage,\n      specularImageSize,\n      specularMipCount,\n    };\n\n    return skyboxOptions;\n  }\n\n  /**\n   * 创建天空盒选项\n   * @param engine - 引擎\n   * @param params - 天空盒参数\n   * @returns 天空盒选项\n   */\n  static createSkyboxComponentData (params: PSkyboxParams) {\n    const specularCubeData = PSkyboxCreator.getSpecularCubeMapData(params);\n    const diffuseCubeData = PSkyboxCreator.getDiffuseCubeMapData(params);\n    const { renderable, intensity, reflectionsIntensity, irradianceCoeffs, specularImageSize, specularMipCount } = params;\n\n    let diffuseImage: spec.DataPath;\n    const imageList: spec.Image[] = [];\n    const textureOptionsList: TextureSourceOptions[] = [];\n\n    if (diffuseCubeData) {\n      imageList.push(...diffuseCubeData.images);\n      textureOptionsList.push(diffuseCubeData.textureOptions);\n      diffuseImage = {\n        id: diffuseCubeData.textureOptions.id!,\n      };\n    }\n    imageList.push(...specularCubeData.images);\n    textureOptionsList.push(specularCubeData.textureOptions);\n    const specularImage = { id: specularCubeData.textureOptions.id };\n\n    const componentData: ModelSkyboxComponentData = {\n      id: generateGUID(),\n      dataType: spec.DataType.SkyboxComponent,\n      item: {\n        id: generateGUID(),\n      },\n      renderable,\n      intensity,\n      reflectionsIntensity,\n      irradianceCoeffs,\n      // @ts-expect-error\n      diffuseImage,\n      // @ts-expect-error\n      specularImage,\n      specularImageSize,\n      specularMipCount,\n    };\n\n    return {\n      imageList,\n      textureOptionsList,\n      component: componentData,\n    };\n  }\n\n  /**\n   * 创建高光 Cube Map 纹理\n   * @param engine - 引擎\n   * @param params - 天空盒参数\n   * @returns 纹理\n   */\n  static async createSpecularCubeMap (engine: Engine, params: PSkyboxParams): Promise<Texture> {\n    // const configOptions: TextureConfigOptions = {\n    //   wrapS: glContext.CLAMP_TO_EDGE,\n    //   wrapT: glContext.CLAMP_TO_EDGE,\n    //   magFilter: glContext.LINEAR,\n    //   minFilter: glContext.LINEAR_MIPMAP_LINEAR,\n    // };\n\n    if (params.type === 'url') {\n      return WebGLHelper.createTextureCubeMipmapFromURL(engine, params.specularImage);\n    } else {\n      return WebGLHelper.createTextureCubeMipmapFromBuffer(engine, params.specularImage, params.specularImageSize);\n    }\n  }\n\n  static getSpecularCubeMapData (params: PSkyboxParams) {\n    const imageDatas: spec.Image[] = [];\n    const mipmaps: spec.DataPath[][] = [];\n\n    params.specularImage.forEach(cubemap => {\n      const mipmap: spec.DataPath[] = [];\n\n      cubemap.forEach(image => {\n        const imageId = generateGUID();\n\n        imageDatas.push({\n          id: imageId,\n          // @ts-expect-error\n          url: image,\n        });\n        mipmap.push({ id: imageId });\n      });\n      mipmaps.push(mipmap);\n    });\n    const textureOptions: TextureSourceOptions = {\n      id: generateGUID(),\n      dataType: spec.DataType.Texture,\n      sourceType: TextureSourceType.mipmaps,\n      target: glContext.TEXTURE_CUBE_MAP,\n      // @ts-expect-error\n      mipmaps,\n      ...WebGLHelper.cubemapMipTexConfig,\n    };\n\n    return {\n      images: imageDatas,\n      textureOptions,\n    };\n  }\n\n  /**\n   * 创建漫反射纹理\n   * @param engine - 引擎\n   * @param params - 天空盒参数\n   * @returns 纹理或未定义\n   */\n  static async createDiffuseCubeMap (engine: Engine, params: PSkyboxParams): Promise<Texture | null> {\n    if (params.diffuseImage === undefined) { return null; }\n\n    if (params.type === 'url') {\n      return WebGLHelper.createTextureCubeFromURL(engine, params.diffuseImage);\n    } else {\n      return WebGLHelper.createTextureCubeFromBuffer(engine, params.diffuseImage);\n    }\n  }\n\n  static getDiffuseCubeMapData (params: PSkyboxParams) {\n    if (params.diffuseImage === undefined) {\n      return;\n    }\n\n    const imageDatas: spec.Image[] = [];\n    const cubemap: spec.DataPath[] = [];\n\n    params.diffuseImage.forEach(image => {\n      const imageId = generateGUID();\n\n      imageDatas.push({\n        id: imageId,\n        // @ts-expect-error\n        url: image,\n      });\n      cubemap.push({ id: imageId });\n    });\n\n    const textureOptions: TextureSourceOptions = {\n      id: generateGUID(),\n      dataType: spec.DataType.Texture,\n      sourceType: TextureSourceType.mipmaps,\n      target: glContext.TEXTURE_CUBE_MAP,\n      // @ts-expect-error\n      mipmaps: [cubemap],\n      ...WebGLHelper.cubemapTexConfig,\n    };\n\n    return {\n      images: imageDatas,\n      textureOptions,\n    };\n  }\n\n  /**\n   * 创建天空盒参数\n   * @param skyboxType - 天空盒类型\n   * @returns 天空盒参数\n   */\n  static getSkyboxParams (skyboxType = PSkyboxType.NFT): PSkyboxURLParams {\n    const specularImage = this.getSpecularImageList(skyboxType);\n    const params: PSkyboxURLParams = {\n      type: 'url',\n      renderable: true,\n      intensity: 1.8,\n      reflectionsIntensity: 1.8,\n      irradianceCoeffs: this.getIrradianceCoeffs(skyboxType),\n      diffuseImage: this.getDiffuseImageList(skyboxType, specularImage),\n      specularImage: specularImage,\n      specularImageSize: Math.pow(2, specularImage.length - 1),\n      specularMipCount: specularImage.length,\n    };\n\n    return params;\n  }\n\n  // TODO: 待移除？\n  private async checkCubeMapImage (imageList: string[]) {\n    let lastImage!: HTMLImageElement;\n    const specularImageLists: HTMLImageElement[][] = [];\n\n    for (let i = 0; i < imageList.length; i++) {\n      const image = await loadImage(imageList[i]);\n\n      if (i > 0) {\n        if (i % 6 === 0) {\n          if (image.width * 2 !== lastImage.width || image.height * 2 !== lastImage.height) {\n            throw new Error(`Invalid cube map list1: index ${i}, image0 ${lastImage}, image1 ${image}.`);\n          }\n        } else {\n          if (image.width !== lastImage.width || image.height !== lastImage.height) {\n            throw new Error(`Invalid cube map list2: index ${i}, image0 ${lastImage}, image1 ${image}.`);\n          }\n        }\n      }\n      if (i % 6 === 0) { specularImageLists.push([]); }\n      const lastList = specularImageLists[specularImageLists.length - 1];\n\n      lastList.push(image);\n      lastImage = image;\n    }\n  }\n\n  private static getIrradianceCoeffs (skyboxType: PSkyboxType): number[] | undefined {\n    let dataArray: number[] = [];\n\n    switch (skyboxType) {\n      case PSkyboxType.NFT: {\n        return undefined;\n      }\n      case PSkyboxType.FARM: dataArray = [\n        0.2665672302246094, 0.27008703351020813, 0.2836797833442688, -0.15421263873577118, -0.15587495267391205,\n        -0.16371899843215942, 0.06483837962150574, 0.06468029320240021, 0.06616337597370148, -0.11598809063434601,\n        -0.11796595901250839, -0.1261979341506958, 0.023678265511989594, 0.02456280030310154, 0.02591511607170105,\n        -0.032404184341430664, -0.03217344358563423, -0.03126845508813858, 0.009165619499981403, 0.009345818310976028,\n        0.008521141484379768, -0.021998587995767593, -0.02203795686364174, -0.021759089082479477, 0.00046658870996907353,\n        0.0005610908847302198, 0.0007202711421996355,\n      ];\n\n        break;\n      default: dataArray = [\n        0.37462672591209412, 0.35230118036270142, 0.33955901861190796, 0.12082185596227646, 0.18179306387901306,\n        0.26912716031074524, -0.020699946209788322, -0.0046484274789690971, 0.00797625258564949, -0.068421706557273865,\n        -0.051390238106250763, -0.03317255899310112, 0.044127799570560455, 0.028159862384200096, 0.0074287452735006809,\n        0.078870773315429688, 0.067734844982624054, 0.047382339835166931, -0.012322401627898216, -0.015187464654445648,\n        -0.020201763138175011, -0.1091032400727272, -0.0823250338435173, -0.046844951808452606, -0.057797044515609741,\n        -0.066892541944980621, -0.08212742954492569,\n      ];\n\n        break;\n    }\n\n    return dataArray;\n  }\n\n  private static getDiffuseImageList (skyboxType: PSkyboxType, images: string[][]): string[] | undefined {\n    if (skyboxType == PSkyboxType.NFT) {\n      return images[images.length - 1];\n    }\n\n    return undefined;\n  }\n\n  private static getSpecularImageList (skyboxType: PSkyboxType): string[][] {\n    const imageList: string[] = [];\n\n    switch (skyboxType) {\n      case PSkyboxType.FARM: imageList.push(...this.getSpecularImageListAntFarm());\n\n        break;\n      default: imageList.push(...this.getSpecularImageListNFT());\n\n        break;\n    }\n\n    const levelList: string[][] = [];\n\n    imageList.forEach((v, i) => {\n      if (i % 6 === 0) {\n        levelList.push([]);\n      }\n      const currentLevel = levelList[levelList.length - 1];\n\n      currentLevel.push(v);\n    });\n\n    return levelList;\n  }\n\n  private static getSpecularImageListNFT (): string[] {\n    return [\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img0.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img1.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img2.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img3.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img5.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img4.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img6.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img7.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img8.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img9.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img11.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img10.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img12.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img13.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img14.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img15.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img17.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img16.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img18.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img19.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img20.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img21.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img23.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img22.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img24.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img25.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img26.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img27.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img29.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img28.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img30.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img31.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img32.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img33.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img35.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img34.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img36.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img37.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img38.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img39.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img41.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img40.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img42.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img43.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img44.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img45.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img47.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/1656063861448/227da6e6-8d07-4f8b-bbb0-3b22fde48c0b_img46.png',\n    ];\n  }\n\n  private static getSpecularImageListAntFarm (): string[] {\n    return [\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_32_0.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_32_1.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_32_2.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_32_3.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_32_4.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_32_5.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_16_0.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_16_1.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_16_2.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_16_3.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_16_4.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_16_5.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_8_0.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_8_1.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_8_2.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_8_3.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_8_4.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_8_5.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_4_0.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_4_1.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_4_2.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_4_3.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_4_4.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_4_5.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_2_0.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_2_1.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_2_2.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_2_3.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_2_4.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_2_5.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_1_0.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_1_1.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_1_2.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_1_3.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_1_4.png',\n      'https://gw.alipayobjects.com/zos/gltf-asset/58741584603363/M_Cubemap_1_5.png',\n    ];\n  }\n}\n\n","import type { Mesh, Geometry, TextureSourceOptions, RenderPass, spec, Engine } from '@galacean/effects';\nimport { Texture } from '@galacean/effects';\nimport type { ModelSkyboxOptions } from '../index';\nimport type { PMaterialBase } from './material';\nimport type { PSkyboxParams } from './skybox';\nimport { PSkyboxCreator } from './skybox';\nimport { WebGLHelper, MeshHelper, PluginHelper } from '../utility/plugin-helper';\n\n/**\n * 合成缓存类，负责管理插件 WebGL 相关资源加载和创建\n */\nexport class CompositionCache {\n  // TODO: 待移除？\n  private loadSkybox = false;\n  // 天空盒依赖的贴图资源\n  private brdfLutTexture?: Texture;\n  //\n  private meshCache: Map<string, Mesh>;\n  private textureCache: Map<string, Texture>;\n  private geometryCache: Map<string, Geometry>;\n  private renderPassCache: Map<string, RenderPass>;\n  //\n  private static brdfLutTexOptions?: TextureSourceOptions;\n  private static skyboxOptions?: ModelSkyboxOptions;\n\n  /**\n   * 加载静态的纹理数据\n   * @returns\n   */\n  static async loadStaticResources () {\n    if (this.brdfLutTexOptions !== undefined) {\n      // 避免重复创建\n      return;\n    }\n\n    this.brdfLutTexOptions = await PSkyboxCreator.getBrdfLutTextureOptions();\n  }\n\n  /**\n   * 创建天空盒数据，如果传入的 params 为空，会使用内置的天空盒参数\n   * @param engine - 引擎\n   * @param params - 天空盒参数\n   * @returns 天空盒数据\n   */\n  static async genSkyboxOptions (engine: Engine, params?: PSkyboxParams): Promise<ModelSkyboxOptions> {\n    let newParams = params;\n\n    if (newParams === undefined) {\n      newParams = PSkyboxCreator.getSkyboxParams();\n    }\n\n    CompositionCache.skyboxOptions = await PSkyboxCreator.createSkyboxOptions(engine, newParams);\n\n    return CompositionCache.skyboxOptions;\n  }\n\n  constructor (private engine: Engine) {\n    this.meshCache = new Map();\n    this.textureCache = new Map();\n    this.geometryCache = new Map();\n    this.renderPassCache = new Map();\n  }\n\n  /**\n   * 记录是否加载天空盒，缓存天空盒相关的查询纹理\n   * @param loadSkybox - 是否加载天空盒\n   */\n  setup (loadSkybox: boolean) {\n    this.loadSkybox = loadSkybox;\n\n    if (this.brdfLutTexture === undefined || this.brdfLutTexture.isDestroyed) {\n      if (CompositionCache.brdfLutTexOptions === undefined) {\n        throw new Error('Please load brdfLutTexOptions at first.');\n      }\n      //\n      const brdfLutTextureName = 'brdfLutTexture';\n\n      this.brdfLutTexture = Texture.create(this.engine, CompositionCache.brdfLutTexOptions);\n      this.deleteTexture(brdfLutTextureName);\n      this.setTexture(brdfLutTextureName, this.brdfLutTexture);\n    }\n  }\n\n  /**\n   * 获取缓存的纹理对象\n   * @param name - 名称\n   * @returns 纹理对象\n   */\n  getTexture (name: string): Texture | undefined {\n    return this.textureCache.get(name);\n  }\n\n  /**\n   * 设置纹理对象缓存\n   * @param name - 名称\n   * @param tex - 纹理对象\n   */\n  setTexture (name: string, tex: Texture) {\n    this.textureCache.set(name, tex);\n  }\n\n  /**\n   * 获取或者创建纹理对象\n   * @param name - 名称\n   * @param options - 纹理参数\n   * @returns 纹理对象\n   */\n  getOrCreateTexture (name: string, options: TextureSourceOptions): Texture {\n    const tex = this.textureCache.get(name);\n\n    if (tex !== undefined) {\n      return tex;\n    }\n    const newTex = Texture.create(this.engine, options);\n\n    this.textureCache.set(name, newTex);\n\n    return newTex;\n  }\n\n  /**\n   * 根据名称删除纹理对象\n   * @param name - 名称\n   * @returns 是否删除成功\n   */\n  deleteTexture (name: string): boolean {\n    const tex = this.textureCache.get(name);\n\n    if (tex !== undefined) {\n      tex.dispose();\n    }\n\n    return this.textureCache.delete(name);\n  }\n\n  /**\n   * 获取或者创建几何体\n   * @param name - 名称\n   * @param geomJson - 几何体参数\n   * @param bins - 几何体数据\n   * @returns 几何体\n   */\n  getOrCreateGeometry (name: string, geomJson: spec.GeometryOptionsJSON, bins: ArrayBuffer[]): Geometry {\n    const cachedGeom = this.geometryCache.get(name);\n\n    if (cachedGeom !== undefined) {\n      return cachedGeom;\n    }\n\n    const geom = PluginHelper.createGeometry(this.engine, geomJson, bins);\n\n    this.geometryCache.set(name, geom);\n\n    return geom;\n  }\n\n  /**\n   * 获取滤波 Mesh\n   * @param name - 名称\n   * @param material - 材质\n   * @returns\n   */\n  getFilterMesh (name: string, material: PMaterialBase): Mesh {\n    const cachedMesh = this.meshCache.get(name);\n\n    if (cachedMesh !== undefined) {\n      return cachedMesh;\n    }\n\n    const mesh = MeshHelper.createFilterMesh(this.engine, name, material);\n\n    this.meshCache.set(name, mesh);\n\n    return mesh;\n  }\n\n  /**\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 { math } from '@galacean/effects';\nimport { spec } from '@galacean/effects';\nimport type { ModelCameraComponentData } from '../index';\nimport { Vector2, Vector3, Matrix4 } from './math';\nimport { PObjectType } from './common';\nimport { PEntity } from './object';\nimport type { ModelCameraComponent } from '../plugin/model-item';\n\ntype Box3 = math.Box3;\ntype Quaternion = math.Quaternion;\n\nconst deg2rad = Math.PI / 180;\n\n/**\n * 相机类，支持基础的相机功能\n */\nexport class PCamera extends PEntity {\n  /**\n   * 所属的相机组件\n   */\n  owner?: ModelCameraComponent;\n  /**\n   * 画布宽度\n   */\n  width = 512;\n  /**\n   * 画布高度\n   */\n  height = 512;\n  /**\n   * 近裁剪平面\n   */\n  nearPlane = 0.001;\n  /**\n   * 远裁剪平面\n   */\n  farPlane = 1000;\n  /**\n   * Y 轴上视角\n   */\n  fov = 45;\n  /**\n   * 视图矩阵\n   */\n  viewportMatrix = Matrix4.fromIdentity();\n  /**\n   * 纵横比\n   */\n  aspect = 1.0;\n  /**\n   * 剪裁模式，默认是剪裁左右\n   */\n  clipMode = spec.CameraClipMode.landscape;\n  /**\n   * 投影矩阵\n   */\n  projectionMatrix: Matrix4 = new Matrix4();\n  /**\n   * 相机矩阵\n   */\n  viewMatrix: Matrix4 = new Matrix4();\n\n  /**\n   * 构造函数，创建相机对象\n   * @param camera - 相机数据\n   * @param width - 画布宽度\n   * @param height - 画布高度\n   * @param owner - 所属的相机组件\n   */\n  constructor (name: string, width: number, height: number, data: ModelCameraComponentData, owner?: ModelCameraComponent) {\n    super();\n    this.type = PObjectType.camera;\n    this.visible = false;\n    this.owner = owner;\n    //\n    this.name = name;\n    this.width = width;\n    this.height = height;\n\n    this.nearPlane = data.near ?? 0.001;\n    this.farPlane = data.far ?? 1000;\n    this.fov = data.fov ?? 45;\n    this.aspect = data.aspect ?? (this.width / this.height);\n    this.clipMode = data.clipMode ?? spec.CameraClipMode.landscape;\n    this.update();\n  }\n\n  /**\n   * 更新相机矩阵和投影矩阵，从所属的元素中获取变换数据\n   */\n  override update () {\n    if (this.owner !== undefined) {\n      this.transform.fromEffectsTransform(this.owner.transform);\n    }\n\n    const reverse = this.clipMode === spec.CameraClipMode.portrait;\n\n    this.projectionMatrix.perspective(this.fov * deg2rad, this.aspect, this.nearPlane, this.farPlane, reverse);\n    this.projectionMatrix.premultiply(this.viewportMatrix);\n    this.viewMatrix = this.matrix.invert();\n  }\n\n  /**\n   * 获取新的透视矩阵，视角大小乘 1.25 倍\n   * @param fov - 视角大小\n   * @returns 投影矩阵\n   */\n  getNewProjectionMatrix (fov: number): Matrix4 {\n    const reverse = this.clipMode === spec.CameraClipMode.portrait;\n\n    return new Matrix4().perspective(Math.min(fov * 1.25, 140) * deg2rad, this.aspect, this.nearPlane, this.farPlane, reverse).premultiply(this.viewportMatrix);\n  }\n\n  /**\n   * 计算视角中的包围盒大小\n   * @param box - 包围盒\n   * @returns 视角中的包围盒\n   */\n  computeViewAABB (box: Box3): Box3 {\n    const tanTheta = Math.tan(this.fov * deg2rad * 0.5);\n    const aspect = this.aspect;\n    let yFarCoord = 0;\n    let yNearCoord = 0;\n    let xFarCoord = 0;\n    let xNearCoord = 0;\n\n    if (this.isReversed()) {\n      xFarCoord = this.farPlane * tanTheta;\n      xNearCoord = this.nearPlane * tanTheta;\n      yFarCoord = xFarCoord / aspect;\n      yNearCoord = xNearCoord / aspect;\n    } else {\n      yFarCoord = this.farPlane * tanTheta;\n      yNearCoord = this.nearPlane * tanTheta;\n      xFarCoord = aspect * yFarCoord;\n      xNearCoord = aspect * yNearCoord;\n    }\n\n    box.makeEmpty();\n    const matrix = this.matrix;\n\n    box.expandByPoint(matrix.transformPoint(new Vector3(xFarCoord, yFarCoord, -this.farPlane)));\n    box.expandByPoint(matrix.transformPoint(new Vector3(xFarCoord, -yFarCoord, -this.farPlane)));\n    box.expandByPoint(matrix.transformPoint(new Vector3(-xFarCoord, yFarCoord, -this.farPlane)));\n    box.expandByPoint(matrix.transformPoint(new Vector3(-xFarCoord, -yFarCoord, -this.farPlane)));\n    //\n    box.expandByPoint(matrix.transformPoint(new Vector3(xNearCoord, yNearCoord, -this.nearPlane)));\n    box.expandByPoint(matrix.transformPoint(new Vector3(xNearCoord, -yNearCoord, -this.nearPlane)));\n    box.expandByPoint(matrix.transformPoint(new Vector3(-xNearCoord, yNearCoord, -this.nearPlane)));\n    box.expandByPoint(matrix.transformPoint(new Vector3(-xNearCoord, -yNearCoord, -this.nearPlane)));\n\n    return box;\n  }\n\n  /**\n   * 获取画布大小\n   * @returns\n   */\n  getSize (): Vector2 {\n    return new Vector2(this.width, this.height);\n  }\n\n  /**\n   * 是否剪裁上下\n   * @returns\n   */\n  isReversed (): boolean {\n    return this.clipMode === spec.CameraClipMode.portrait;\n  }\n\n  /**\n   * 获取眼睛位置\n   * @returns\n   */\n  getEye (): Vector3 {\n    return this.translation;\n  }\n\n  /**\n   * 设置眼睛位置\n   * @param val - 眼睛位置\n   */\n  setEye (val: Vector3) {\n    this.translation = val;\n  }\n}\n\n/**\n * 相机管理类，负责管理场景中的 3D 相机对象\n */\nexport class PCameraManager {\n  private winWidth = 512;\n  private winHeight = 512;\n  private cameraList: PCamera[] = [];\n  private defaultCamera;\n\n  constructor () {\n    this.defaultCamera = new PCamera(\n      'camera', 512, 512,\n      {\n        id: '0',\n        dataType: 'camera' as spec.DataType,\n        fov: 60,\n        far: 1000,\n        near: 0.001,\n        clipMode: spec.CameraClipMode.portrait,\n        item: { id: '0' },\n      },\n    );\n  }\n\n  /**\n   * 初始化画布大小，更新默认相机\n   * @param width - 画布宽度\n   * @param height - 画布高度\n   */\n  initial (width: number, height: number) {\n    this.winWidth = width;\n    this.winHeight = height;\n\n    const camera = this.defaultCamera;\n\n    camera.width = width;\n    camera.height = height;\n    camera.aspect = width / height;\n    camera.update();\n  }\n\n  /**\n   * 插入相机数据，创建新的相机对象\n   * @param name - 相机名称\n   * @param data - 相机相关数据\n   * @param owner - 相机所属组件\n   * @returns 新的相机对象\n   */\n  insert (name: string, data: ModelCameraComponentData, owner?: ModelCameraComponent): PCamera {\n    const camera = new PCamera(name, this.winWidth, this.winHeight, data, owner);\n\n    this.cameraList.push(camera);\n\n    return camera;\n  }\n\n  /**\n   * 插入相机对象\n   * @param camera - 相机对象\n   */\n  insertCamera (camera: PCamera) {\n    this.cameraList.push(camera);\n  }\n\n  /**\n   * 根据对象或者索引，删除相机对象\n   * @param camera - 索引或相机对象\n   */\n  remove (camera: PCamera | number) {\n    if (camera instanceof PCamera) {\n      const findResult = this.cameraList.findIndex(item => {\n        return item === camera;\n      });\n\n      if (findResult !== -1) {\n        this.cameraList.splice(findResult, 1);\n      }\n    } else {\n      if (camera >= 0 && camera < this.cameraList.length) {\n        this.cameraList.splice(camera, 1);\n      }\n    }\n  }\n\n  /**\n   * 销毁相机管理对象\n   */\n  dispose () {\n    this.cameraList = [];\n  }\n\n  /**\n   * 更新默认相机状态，并计算新的透视和相机矩阵\n   * @param fov - 视角\n   * @param viewportMatrix - 视图矩阵\n   * @param aspect - 纵横比\n   * @param nearPlane - 近裁剪平面\n   * @param farPlane - 远裁剪平面\n   * @param position - 位置\n   * @param rotation - 旋转\n   * @param clipMode - 剪裁模式\n   */\n  updateDefaultCamera (\n    fov: number,\n    viewportMatrix: Matrix4,\n    aspect: number,\n    nearPlane: number,\n    farPlane: number,\n    position: Vector3,\n    rotation: Quaternion,\n    clipMode: number,\n  ) {\n    this.defaultCamera.fov = fov;\n    this.defaultCamera.viewportMatrix = viewportMatrix.clone();\n    this.defaultCamera.aspect = aspect;\n    this.defaultCamera.nearPlane = nearPlane;\n    this.defaultCamera.farPlane = farPlane;\n    this.defaultCamera.position = position;\n    this.defaultCamera.rotation = rotation;\n    this.defaultCamera.aspect = aspect;\n    this.defaultCamera.clipMode = clipMode;\n    this.defaultCamera.update();\n  }\n\n  /**\n   * 获取相机对象列表\n   * @returns\n   */\n  getCameraList (): PCamera[] {\n    return this.cameraList;\n  }\n\n  /**\n   * 获取默认相机对象\n   * @returns\n   */\n  getDefaultCamera (): PCamera {\n    return this.defaultCamera;\n  }\n\n  /**\n   * 获取相机数目\n   * @returns\n   */\n  getCameraCount (): number {\n    return this.cameraList.length;\n  }\n\n  /**\n   * 获取激活的相机对象\n   * @returns\n   */\n  getActiveCamera (): PCamera {\n    return this.defaultCamera;\n  }\n\n  /**\n   * 获取画布纵横比\n   * @returns\n   */\n  getAspect (): number {\n    return this.winWidth / this.winHeight;\n  }\n}\n\n","import { spec } from '@galacean/effects';\nimport type { ModelLightComponentData } from '../index';\nimport { Vector2, Vector3 } from './math';\nimport { PObjectType, PLightType } from './common';\nimport { PEntity } from './object';\nimport type { ModelLightComponent } from '../plugin/model-item';\n\n/**\n * 灯光类，支持 3D 场景中的灯光功能\n */\nexport class PLight extends PEntity {\n  /**\n   * 所属的灯光组件\n   */\n  owner?: ModelLightComponent;\n  /**\n   * 方向，仅用于方向光和聚光灯\n   */\n  direction: Vector3 = new Vector3(0, 0, 1);\n  /**\n   * 范围，仅用于点光源和聚光灯\n   */\n  range = 0;\n  /**\n   * 颜色\n   */\n  color: Vector3 = new Vector3(1, 1, 1);\n  /**\n   * 强度\n   */\n  intensity = 0;\n  /**\n   * 聚光灯外径\n   */\n  outerConeAngle = 0;\n  /**\n   * 聚光灯内径\n   */\n  innerConeAngle = 0;\n  /**\n   * 类型\n   */\n  lightType = PLightType.ambient;\n  padding: Vector2 = new Vector2(0, 0);\n  /**\n   * 是否跟随相机\n   */\n  followCamera = false;\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    this.followCamera = data.followCamera ?? false;\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","function _assert_this_initialized(self) {\n    if (self === void 0) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\n    return self;\n}\nexport { _assert_this_initialized as _ };\n","import type { Texture, Engine, math, VFXItem, Renderer, Geometry } from '@galacean/effects';\nimport { spec, Material, GLSLVersion } from '@galacean/effects';\nimport type { ModelMeshComponentData, ModelItemBounding } from '../index';\nimport { PObjectType, PMaterialType, PGlobalState } from './common';\nimport { PEntity } from './object';\nimport type { PMaterial } from './material';\nimport { PMaterialPBR, PMaterialUnlit, createPluginMaterial } from './material';\nimport { Matrix4, Vector3, Box3, Vector2 } from './math';\nimport { PSkin, PAnimTexture, PMorph, TextureDataMode } from './animation';\nimport type { PSceneManager, PSceneStates } from './scene';\nimport type { PSkybox } from './skybox';\nimport { GeometryBoxProxy, HitTestingProxy } from '../utility/plugin-helper';\nimport { BoxMesh } from '../utility/ri-helper';\nimport { RayBoxTesting } from '../utility/hit-test-helper';\nimport type { ModelMeshComponent } from '../plugin/model-item';\n\ntype Box3 = math.Box3;\n\n/**\n * Mesh 类，负责 Mesh 相关的骨骼动画和 PBR 渲染\n */\nexport class PMesh extends PEntity {\n  /**\n   * 所属的 Mesh 组件\n   */\n  owner?: ModelMeshComponent;\n  /**\n   * 父节点索引\n   */\n  parentIndex = -1;\n  /**\n   * 父元素\n   */\n  parentItem?: VFXItem;\n  /**\n   * 父元素索引\n   */\n  parentItemId?: string;\n  rootBoneItem?: VFXItem;\n  /**\n   * 蒙皮\n   */\n  skin?: PSkin;\n  /**\n   * morph 动画状态数据，主要是 weights 数组\n   */\n  morph?: PMorph;\n  /**\n   * primitive 对象数组\n   */\n  subMeshes: PSubMesh[] = [];\n  /**\n   * 是否隐藏，默认是隐藏\n   */\n  hide = true;\n  /**\n   * 优先级\n   */\n  priority = 0;\n  /**\n   * 包围盒\n   */\n  boundingBox: Box3 = new Box3();\n  /**\n   * 是否显示包围盒\n   */\n  visBoundingBox = false;\n  /**\n   * 包围盒 Mesh\n   */\n  boundingBoxMesh?: BoxMesh;\n  /**\n   * 是否调用 Build\n   */\n  isBuilt = false;\n  /**\n   * 是否销毁\n   */\n  isDisposed = false;\n\n  /**\n   * 构造函数，创建 Mesh 对象，并与所属组件和父元素相关联\n   * @param engine - 引擎\n   * @param name - 名称\n   * @param meshData - Mesh 参数\n   * @param owner - 所属的 Mesh 组件\n   * @param parentId - 父元素索引\n   * @param parent - 父元素\n   */\n  constructor (\n    private engine: Engine,\n    name: string,\n    meshData: ModelMeshComponentData,\n    owner: ModelMeshComponent,\n    parentId?: string,\n    parent?: VFXItem,\n  ) {\n    super();\n    const proxy = new EffectsMeshProxy(meshData, owner, parent);\n\n    this.name = name;\n    this.type = PObjectType.mesh;\n    this.visible = false;\n    this.owner = owner;\n    //\n    this.parentIndex = proxy.getParentIndex();\n    this.parentItem = proxy.parentItem;\n    this.parentItemId = parentId;\n    this.rootBoneItem = meshData.rootBone as unknown as VFXItem;\n    this.skin = proxy.getSkinObj(engine);\n    this.morph = proxy.getMorphObj();\n    this.hide = proxy.isHide();\n    this.priority = owner?.item?.renderOrder || 0;\n    //\n    this.subMeshes = [];\n    const geometry = proxy.getGeometry() as unknown as Geometry;\n    const materials = owner?.materials ?? [];\n\n    materials.forEach(material => {\n      const subMesh = new PSubMesh(this.engine);\n\n      subMesh.create(geometry, material, this);\n      this.subMeshes.push(subMesh);\n    });\n\n    if (this.subMeshes.length <= 0) {\n      console.warn(`No primitive inside mesh item ${name}.`);\n    }\n\n    this.boundingBox = this.getItemBoundingBox(meshData.interaction);\n  }\n\n  /**\n   * 创建 GE 的 Mesh、Geometry 和 Material 对象\n   * @param scene - 场景管理器\n   * @returns\n   */\n  build (scene: PSceneManager) {\n    if (this.isBuilt) {\n      return;\n    }\n\n    this.isBuilt = true;\n    this.subMeshes.forEach(prim => {\n      prim.build(scene.maxLightCount, scene.skybox);\n    });\n\n    if (PGlobalState.getInstance().visBoundingBox) {\n      this.boundingBoxMesh = new BoxMesh(this.engine, this.priority);\n    }\n  }\n\n  /**\n   * 更新变换数据和蒙皮数据\n   */\n  override update () {\n    if (this.owner !== undefined) {\n      this.transform.fromEffectsTransform(this.owner.transform);\n\n      if (this.morph && this.morph.hasMorph() && this.owner.morphWeights.length > 0) {\n        this.morph.updateWeights(this.owner.morphWeights);\n      }\n    }\n  }\n\n  /**\n   * 更新骨骼动画\n   */\n  lateUpdate () {\n    this.skin?.updateSkinMatrices();\n  }\n\n  /**\n   * 渲染 Mesh 对象，需要将内部相关数据传给渲染器\n   * @param scene - 场景\n   * @param renderer - 渲染器\n   */\n  override render (scene: PSceneManager, renderer: Renderer) {\n    this.updateMaterial(scene);\n\n    this.subMeshes.forEach((subMesh, index) => {\n      renderer.drawGeometry(\n        subMesh.getEffectsGeometry(),\n        this.matrix,\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, Matrix4.IDENTITY, mesh.material);\n    }\n  }\n\n  /**\n   * 销毁，需要主动释放蒙皮、morph 和 Mesh 等相关的对象\n   * @returns\n   */\n  override dispose () {\n    if (this.isDisposed) {\n      return;\n    }\n\n    super.dispose();\n\n    this.owner = undefined;\n    this.isDisposed = true;\n    // @ts-expect-error\n    this.engine = null;\n    this.parentItem = undefined;\n    this.skin?.dispose();\n    this.skin = undefined;\n    this.morph?.dispose();\n    this.morph = undefined;\n    this.subMeshes.forEach(prim => {\n      prim.dispose();\n    });\n    this.subMeshes = [];\n    this.boundingBoxMesh?.dispose();\n    this.boundingBoxMesh = undefined;\n  }\n\n  /**\n   * 更新 Morph 动画权重\n   * 每帧都会更新 Morph 动画权重，需要小心检查 Morph 动画参数\n   * 对于数组长度对不上的情况，直接报错\n   *\n   * @param weightsArray - Morph 动画的权重数组\n   */\n  updateMorphWeights (weightsArray: Float32Array) {\n    if (this.morph === undefined || !this.morph.hasMorph()) {\n      return;\n    }\n\n    const updatedArray = this.morph.morphWeightsArray;\n\n    if (updatedArray === undefined) {\n      return;\n    }\n\n    if (updatedArray.length != weightsArray.length) {\n      throw new Error('Weight array length mismatch.');\n    }\n\n    for (let i = 0; i < updatedArray.length; i++) {\n      updatedArray[i] = weightsArray[i];\n    }\n  }\n\n  /**\n   * 更新父 VFX 元素\n   * @param parentId - 父元素索引\n   * @param parentItem - 父 VFX 元素\n   */\n  updateParentInfo (parentId: string, parentItem: VFXItem) {\n    this.parentItemId = parentId;\n    this.parentItem = parentItem;\n    if (this.skin !== undefined) {\n      this.skin.updateParentItem(parentItem);\n    }\n  }\n\n  /**\n   * 根据当前场景状态更新内部材质数据\n   * @param scene - 场景管理器\n   */\n  updateMaterial (scene: PSceneManager) {\n    const worldMatrix = this.matrix;\n    const normalMatrix = worldMatrix.clone().invert().transpose();\n    const sceneStates = scene.sceneStates;\n\n    this.subMeshes.forEach(prim => {\n      prim.updateMaterial(worldMatrix, normalMatrix, sceneStates);\n    });\n\n    if (this.boundingBoxMesh !== undefined) {\n      this.computeBoundingBox(worldMatrix);\n      const lineColor = new Vector3(1, 1, 1);\n      const minPos = this.boundingBox.min;\n      const maxPos = this.boundingBox.max;\n      const positions = new Float32Array([\n        minPos.x, minPos.y, minPos.z,\n        maxPos.x, minPos.y, minPos.z,\n        maxPos.x, maxPos.y, minPos.z,\n        minPos.x, maxPos.y, minPos.z,\n\n        minPos.x, minPos.y, maxPos.z,\n        maxPos.x, minPos.y, maxPos.z,\n        maxPos.x, maxPos.y, maxPos.z,\n        minPos.x, maxPos.y, maxPos.z,\n      ]);\n\n      this.boundingBoxMesh.update(worldMatrix, sceneStates.viewProjectionMatrix, positions, lineColor);\n    }\n  }\n\n  /**\n   * 点击测试，对于编辑器模式会进行精准的点击测试，否则就和内部的包围盒进行测试\n   * @param rayOrigin - 射线原点\n   * @param rayDirection - 射线方向\n   * @returns 交点列表\n   */\n  hitTesting (rayOrigin: Vector3, rayDirection: Vector3): Vector3[] {\n    const worldMatrix = this.matrix;\n    const invWorldMatrix = worldMatrix.clone().invert();\n    const newOrigin = invWorldMatrix.transformPoint(rayOrigin, new Vector3());\n    const newDirection = invWorldMatrix.transformNormal(rayDirection, new Vector3());\n\n    const bounding = this.boundingBox;\n    const boxt = RayBoxTesting(newOrigin, newDirection, bounding.min, bounding.max);\n\n    if (boxt === undefined) {\n      return [];\n    }\n\n    let mint: number | undefined;\n\n    if (PGlobalState.getInstance().isEditorEnv) {\n      this.subMeshes.forEach(prim => {\n        const primt = prim.hitTesting(newOrigin, newDirection, worldMatrix, invWorldMatrix);\n\n        if (primt !== undefined) {\n          if (mint === undefined || mint > primt) {\n            mint = primt;\n          }\n        }\n      });\n    } else {\n      mint = boxt;\n    }\n\n    if (mint === undefined) {\n      return [];\n    }\n\n    newDirection.multiply(mint);\n    newOrigin.add(newDirection);\n    worldMatrix.transformPoint(newOrigin);\n\n    return [newOrigin];\n  }\n\n  /**\n   * 计算包围盒，根据传入的世界矩阵\n   * @param worldMatrix - 世界矩阵\n   * @returns\n   */\n  computeBoundingBox (worldMatrix: Matrix4): Box3 {\n    const box = this.boundingBox.makeEmpty();\n    const inverseWorldMatrix = worldMatrix.clone().invert();\n\n    this.subMeshes.forEach(prim => {\n      const subbox = prim.computeBoundingBox(inverseWorldMatrix);\n\n      box.union(subbox);\n    });\n\n    return box;\n  }\n\n  private getItemBoundingBox (inBounding?: ModelItemBounding) {\n    if (inBounding === undefined) {\n      return new Box3();\n    }\n\n    if (inBounding.type === spec.ModelBoundingType.box) {\n      const center = inBounding.center ?? [0, 0, 0];\n      const size = inBounding.size ?? [0, 0, 0];\n      const c = Vector3.fromArray(center);\n      const hs = Vector3.fromArray(size).multiply(0.5);\n      const minVector = c.clone().subtract(hs);\n      const maxVector = c.clone().add(hs);\n\n      return new Box3(minVector, maxVector);\n    } else {\n      const center = inBounding.center ?? [0, 0, 0];\n      const halfRadius = (inBounding.radius ?? 0) * 0.5;\n      const c = Vector3.fromArray(center);\n      const minVector = c.clone().subtract(halfRadius);\n      const maxVector = c.clone().add(halfRadius);\n\n      return new Box3(minVector, maxVector);\n    }\n  }\n\n  /**\n   * 获取父节点 id\n   * @returns\n   */\n  getParentId (): string | undefined {\n    return this.parentItemId;\n  }\n\n  /**\n   * 是否有蒙皮\n   */\n  get hasSkin (): boolean {\n    return this.skin !== undefined;\n  }\n\n}\n\n/**\n * PSubMesh 类，负责 Sub Mesh相关的功能，支持骨骼动画和 PBR 渲染\n */\nexport class PSubMesh {\n  /**\n   * 宿主 Mesh，包含了当前 Primitive\n   */\n  private parent?: PMesh;\n  private skin?: PSkin; // from owner mesh\n  /**\n   * Morph 动画状态数据，来自 Mesh 对象，这里不创建不删除\n   */\n  private morph?: PMorph;\n  private geometry: PGeometry;\n  private material: PMaterial;\n  //\n  private jointMatrixList?: Float32Array;\n  private jointNormalMatList?: Float32Array;\n  private jointMatrixTexture?: PAnimTexture;\n  private jointNormalMatTexture?: PAnimTexture;\n  /**\n   * 名称\n   */\n  name = '';\n  /**\n   * 渲染优先级\n   */\n  effectsPriority = 0;\n  /**\n   * 包围盒\n   */\n  boundingBox = new Box3();\n  /**\n   * 是否压缩，模式不压缩\n   */\n  isCompressed = false;\n\n  constructor (private engine: Engine) {\n\n  }\n\n  /**\n   * 创建 Primitive 对象\n   * @param data - Primitive 参数\n   * @param parent - 所属 Mesh 对象\n   */\n  create (geometry: Geometry, material: Material, parent: PMesh) {\n    this.parent = parent;\n    this.skin = parent.skin;\n    this.morph = parent.morph;\n    this.setGeometry(geometry);\n    this.setMaterial(material);\n    this.name = parent.name;\n    this.effectsPriority = parent.priority;\n    this.geometry.setHide(parent.hide);\n\n    if (this.skin !== undefined) {\n      const jointCount = this.skin.maxJointCount;\n\n      this.jointMatrixList = new Float32Array(jointCount * 16);\n      this.jointNormalMatList = new Float32Array(jointCount * 16);\n      if (this.skin.isTextureDataMode()) {\n        const isHalfFloat = this.skin.textureDataMode === TextureDataMode.half_float;\n\n        this.jointMatrixTexture = new PAnimTexture(this.engine);\n        this.jointNormalMatTexture = new PAnimTexture(this.engine);\n        this.jointMatrixTexture.create(jointCount, isHalfFloat, 'jointMatrixTexture');\n        this.jointNormalMatTexture.create(jointCount, isHalfFloat, 'jointNormalMatTexture');\n      }\n    } else {\n      if (this.geometry.hasWeights() || this.geometry.hasJoints()) {\n        // 最近出现发布后模型动画没播出来问题，\n        // 是因为导出后 skin 属性丢失导致，所以增加这个检查\n        console.warn('Geometry has weight and/or joint array, but the skin is missing.');\n      }\n    }\n\n    this.isCompressed = this.geometry.isCompressed();\n\n    //if (PGlobalState.getInstance().isTiny3dMode) {\n    //  if (this._material.isAdditive || this._material.isTranslucent()) { this.mriPriority += 10000; }\n    //}\n  }\n\n  /**\n   * 创建 GE Mesh、Geometry 和 Material 对象，用于后面的渲染\n   * @param lightCount - 灯光数目\n   * @param skybox - 天空盒\n   */\n  build (lightCount: number, skybox?: PSkybox) {\n    const globalState = PGlobalState.getInstance();\n    const primitiveMacroList = this.getMacroList(lightCount, true, skybox);\n    const materialMacroList = this.material.getMacroList(primitiveMacroList);\n\n    let material: Material;\n    const isWebGL2 = PGlobalState.getInstance().isWebGL2;\n\n    if (this.material.effectMaterial) {\n      material = this.material.effectMaterial;\n\n      materialMacroList.forEach(macro => {\n        const { name, value } = macro;\n\n        material.enableMacro(name, value);\n      });\n\n      this.material.setMaterialStates(material);\n    } else {\n      material = Material.create(\n        this.engine,\n        {\n          shader: {\n            vertex: this.material.vertexShaderCode,\n            fragment: this.material.fragmentShaderCode,\n            shared: globalState.shaderShared,\n            glslVersion: isWebGL2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n          },\n        }\n      );\n      this.material.setMaterialStates(material);\n    }\n  }\n\n  // TODO: 待移除？\n  private getFeatureList (lightCount: number, pbrPass: boolean, skybox?: PSkybox): string[] {\n    const featureList: string[] = [];\n\n    if (this.geometry.hasNormals()) {\n      featureList.push('HAS_NORMALS 1');\n    }\n    if (this.geometry.hasTangents()) {\n      featureList.push('HAS_TANGENTS 1');\n    }\n    if (this.geometry.hasUVCoords(1)) {\n      featureList.push('HAS_UV_SET1 1');\n    }\n    if (this.geometry.hasUVCoords(2)) {\n      featureList.push('HAS_UV_SET2 1');\n    }\n\n    if (this.morph !== undefined && this.morph.hasMorph()) {\n      // 存在 Morph 动画，需要配置 Morph 动画相关的 Shader 宏定义\n      // USE_MORPHING 是总开关，WEIGHT_COUNT 是 weights 数组长度（Shader）\n      featureList.push('USE_MORPHING');\n      featureList.push(`WEIGHT_COUNT ${this.morph.morphWeightsLength}`);\n      for (let i = 0; i < this.morph.morphWeightsLength; i++) {\n        if (this.morph.hasPositionMorph) {\n          featureList.push(`HAS_TARGET_POSITION${i}`);\n        }\n        if (this.morph.hasNormalMorph) {\n          featureList.push(`HAS_TARGET_NORMAL${i}`);\n        }\n        if (this.morph.hasTangentMorph) {\n          featureList.push(`HAS_TARGET_TANGENT${i}`);\n        }\n      }\n    }\n\n    if (this.skin !== undefined) {\n      featureList.push('USE_SKINNING 1');\n      featureList.push(`JOINT_COUNT ${this.skin.getJointCount()}`);\n      featureList.push('HAS_JOINT_SET1 1');\n      featureList.push('HAS_WEIGHT_SET1 1');\n      if (this.skin.textureDataMode) { featureList.push('USE_SKINNING_TEXTURE 1'); }\n    }\n\n    if (this.material.materialType !== PMaterialType.unlit) {\n      // let hasLight = false;\n\n      if (lightCount > 0 && this.geometry.hasNormals()) {\n        // hasLight = true;\n        featureList.push('USE_PUNCTUAL 1');\n        featureList.push(`LIGHT_COUNT ${lightCount}`);\n      }\n\n      if (skybox !== undefined && skybox.available) {\n        // hasLight = true;\n        featureList.push('USE_IBL 1');\n        featureList.push('USE_TEX_LOD 1');\n        if (skybox.hasDiffuseImage) {\n          // do nothing\n        } else {\n          featureList.push('IRRADIANCE_COEFFICIENTS 1');\n        }\n      }\n\n      // if(!hasLight){\n      //   featureList.push('MATERIAL_UNLIT 1');\n      // }\n    }\n\n    // 渲染中间结果输出，用于渲染效果调试，支持 pbr 和 unlit\n    const renderMode = PGlobalState.getInstance().renderMode3D;\n    const outputDefine = this.getRenderMode3DDefine(renderMode);\n\n    if (outputDefine !== undefined) {\n      featureList.push('DEBUG_OUTPUT 1');\n      featureList.push(`${outputDefine} 1`);\n    }\n\n    return featureList;\n  }\n\n  private getMacroList (lightCount: number, pbrPass: boolean, skybox?: PSkybox): MacroInfo[] {\n    const macroList: MacroInfo[] = [];\n\n    if (this.geometry.hasNormals()) {\n      macroList.push({ name: 'HAS_NORMALS' });\n    }\n    if (this.geometry.hasTangents()) {\n      macroList.push({ name: 'HAS_TANGENTS' });\n    }\n    if (this.geometry.hasUVCoords(1)) {\n      macroList.push({ name: 'HAS_UV_SET1' });\n    }\n    if (this.geometry.hasUVCoords(2)) {\n      macroList.push({ name: 'HAS_UV_SET2' });\n    }\n\n    if (this.morph !== undefined && this.morph.hasMorph()) {\n      // 存在 Morph 动画，需要配置 Morph 动画相关的 Shader 宏定义\n      // USE_MORPHING 是总开关，WEIGHT_COUNT 是 weights 数组长度（Shader）\n      macroList.push({ name: 'USE_MORPHING' });\n      macroList.push({ name: 'WEIGHT_COUNT', value: this.morph.morphWeightsLength });\n      for (let i = 0; i < this.morph.morphWeightsLength; i++) {\n        if (this.morph.hasPositionMorph) {\n          macroList.push({ name: `HAS_TARGET_POSITION${i}` });\n        }\n        if (this.morph.hasNormalMorph) {\n          macroList.push({ name: `HAS_TARGET_NORMAL${i}` });\n        }\n        if (this.morph.hasTangentMorph) {\n          macroList.push({ name: `HAS_TARGET_TANGENT${i}` });\n        }\n      }\n    }\n\n    if (this.skin !== undefined) {\n      macroList.push({ name: 'USE_SKINNING' });\n      macroList.push({ name: 'JOINT_COUNT', value: this.skin.maxJointCount });\n      macroList.push({ name: 'HAS_JOINT_SET1' });\n      macroList.push({ name: 'HAS_WEIGHT_SET1' });\n      if (this.skin.textureDataMode) {\n        macroList.push({ name: 'USE_SKINNING_TEXTURE' });\n      }\n    }\n\n    if (this.material.materialType !== PMaterialType.unlit) {\n      if (lightCount > 0 && this.geometry.hasNormals()) {\n        macroList.push({ name: 'USE_PUNCTUAL' });\n        macroList.push({ name: 'LIGHT_COUNT', value: lightCount });\n      }\n\n      if (skybox !== undefined && skybox.available) {\n        macroList.push({ name: 'USE_IBL' });\n        macroList.push({ name: 'USE_TEX_LOD' });\n        if (skybox.hasDiffuseImage) {\n          // do nothing\n        } else {\n          macroList.push({ name: 'IRRADIANCE_COEFFICIENTS' });\n        }\n      }\n\n      // if(!hasLight){\n      //   featureList.push('MATERIAL_UNLIT 1');\n      // }\n    }\n\n    // 渲染中间结果输出，用于渲染效果调试，支持 pbr 和 unlit\n    const renderMode = PGlobalState.getInstance().renderMode3D;\n    const outputDefine = this.getRenderMode3DDefine(renderMode);\n\n    if (outputDefine !== undefined) {\n      macroList.push({ name: 'DEBUG_OUTPUT' });\n      macroList.push({ name: outputDefine });\n    }\n\n    return macroList;\n  }\n\n  /**\n   * 销毁，需要释放创建的 GE 对象\n   */\n  dispose () {\n    // @ts-expect-error\n    this.engine = null;\n    this.parent = undefined;\n    this.skin = undefined;\n    this.morph = undefined;\n    this.geometry.dispose();\n    this.material.dispose();\n    //\n    this.jointMatrixList = undefined;\n    this.jointNormalMatList = undefined;\n    this.jointMatrixTexture?.dispose();\n    this.jointMatrixTexture = undefined;\n    this.jointNormalMatTexture?.dispose();\n    this.jointNormalMatTexture = undefined;\n  }\n\n  /**\n   * 更新内部 GE 材质着色器 Uniform 数据，根据场景状态\n   * @param worldMatrix - 世界矩阵\n   * @param nomralMatrix - 法线矩阵\n   * @param sceneStates - 场景状态\n   */\n  updateMaterial (worldMatrix: Matrix4, nomralMatrix: Matrix4, sceneStates: PSceneStates) {\n    this.updateUniformsByAnimation(worldMatrix, nomralMatrix);\n    this.updateUniformsByScene(sceneStates);\n    this.material.updateUniforms(this.getEffectsMaterial());\n  }\n\n  /**\n   * 点击测试，先进行简单的包围合测试，然后再计算精准的点击测试，这个测试非常耗时不要在移动端上使用\n   * @param newOrigin - 射线原点\n   * @param newDirection - 射线方向\n   * @param worldMatrix - 世界矩阵\n   * @param invWorldMatrix - 逆世界矩阵\n   * @returns 射线的 t 参数\n   */\n  hitTesting (newOrigin: Vector3, newDirection: Vector3, worldMatrix: Matrix4, invWorldMatrix: Matrix4) {\n    const bounding = this.boundingBox;\n    const boxt = RayBoxTesting(newOrigin, newDirection, bounding.min, bounding.max);\n    const bindMatrices: Matrix4[] = [];\n\n    if (boxt === undefined) {\n      return;\n    }\n\n    if (this.skin !== undefined) {\n      const animMatrices = this.skin.animationMatrices;\n\n      animMatrices.forEach(mat => {\n        bindMatrices.push(new Matrix4().multiplyMatrices(invWorldMatrix, mat));\n      });\n    }\n\n    const proxy = new HitTestingProxy();\n    const doubleSided = this.material.isBothSide();\n\n    proxy.create(this.geometry.geometry, doubleSided, bindMatrices);\n\n    return proxy.getHitPoint(newOrigin, newDirection);\n  }\n\n  /**\n   * 计算包围盒\n   * @param inverseWorldMatrix - 逆世界矩阵\n   * @returns\n   */\n  computeBoundingBox (inverseWorldMatrix: Matrix4): Box3 {\n    if (this.skin === undefined && !this.boundingBox.isEmpty()) {\n      // 包围盒缓存了，直接返回计算的结果\n      return this.boundingBox;\n    }\n\n    // 重新计算包围盒\n    const bindMatrices: Matrix4[] = [];\n\n    if (this.skin !== undefined) {\n      const animMatrices = this.skin.animationMatrices;\n\n      animMatrices.forEach(mat => {\n        bindMatrices.push(new Matrix4().multiplyMatrices(inverseWorldMatrix, mat));\n      });\n    }\n\n    const proxy = new GeometryBoxProxy();\n\n    proxy.create(this.geometry.geometry, bindMatrices);\n\n    return proxy.getBoundingBox(this.boundingBox);\n  }\n\n  /**\n   * 渲染输出模式转成着色器中的宏定义\n   * @param mode - 渲染输出模式\n   * @returns 返回相应的宏定义\n   */\n  getRenderMode3DDefine (mode: spec.RenderMode3D): string | undefined {\n    switch (mode) {\n      case spec.RenderMode3D.uv:\n        return 'DEBUG_UV';\n      case spec.RenderMode3D.normal:\n        return 'DEBUG_NORMAL';\n      case spec.RenderMode3D.basecolor:\n        return 'DEBUG_BASECOLOR';\n      case spec.RenderMode3D.alpha:\n        return 'DEBUG_ALPHA';\n      case spec.RenderMode3D.metallic:\n        return 'DEBUG_METALLIC';\n      case spec.RenderMode3D.roughness:\n        return 'DEBUG_ROUGHNESS';\n      case spec.RenderMode3D.ao:\n        return 'DEBUG_OCCLUSION';\n      case spec.RenderMode3D.emissive:\n        return 'DEBUG_EMISSIVE';\n      case spec.RenderMode3D.diffuse:\n        return 'DEBUG_DIFFUSE';\n    }\n  }\n\n  private updateUniformsByAnimation (worldMatrix: Matrix4, normalMatrix: Matrix4) {\n    const material = this.getEffectsMaterial();\n\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.setVector3('_Camera', sceneStates.cameraPosition);\n    //\n    if (!this.isUnlitMaterial()) {\n      const { maxLightCount, lightList, inverseViewMatrix } = 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          if (light.followCamera) {\n            const newDirection = inverseViewMatrix.transformNormal(light.getWorldDirection(), new Vector3());\n            const newPosition = inverseViewMatrix.transformPoint(light.getWorldPosition(), new Vector3());\n\n            material.setVector3(`_Lights[${i}].direction`, newDirection);\n            material.setVector3(`_Lights[${i}].position`, newPosition);\n          } else {\n            material.setVector3(`_Lights[${i}].direction`, light.getWorldDirection());\n            material.setVector3(`_Lights[${i}].position`, light.getWorldPosition());\n          }\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.setFloat(`_Lights[${i}].innerConeCos`, Math.cos(light.innerConeAngle));\n          material.setFloat(`_Lights[${i}].outerConeCos`, Math.cos(light.outerConeAngle));\n          material.setInt(`_Lights[${i}].type`, light.lightType);\n          material.setVector2(`_Lights[${i}].padding`, light.padding);\n        } else {\n          material.setVector3(`_Lights[${i}].direction`, Vector3.ZERO);\n          material.setFloat(`_Lights[${i}].range`, 0);\n          material.setVector3(`_Lights[${i}].color`, Vector3.ZERO);\n          material.setFloat(`_Lights[${i}].intensity`, 0);\n          material.setVector3(`_Lights[${i}].position`, Vector3.ZERO);\n          material.setFloat(`_Lights[${i}].innerConeCos`, 0);\n          material.setFloat(`_Lights[${i}].outerConeCos`, 0);\n          material.setInt(`_Lights[${i}].type`, 99999);\n          material.setVector2(`_Lights[${i}].padding`, Vector2.ZERO);\n        }\n      }\n\n      const skybox = sceneStates.skybox;\n\n      if (skybox !== undefined && skybox.available) {\n        material.setVector2('_IblIntensity', new Vector2(skybox.currentIntensity, skybox.currentReflectionsIntensity));\n        material.setTexture('_brdfLUT', skybox.brdfLUT as Texture);\n        if (skybox.diffuseImage !== undefined) {\n          material.setTexture('_DiffuseEnvSampler', skybox.diffuseImage);\n        } else {\n          const coeffs = skybox.irradianceCoeffs as number[][];\n          const aliasName = ['l00', 'l1m1', 'l10', 'l11', 'l2m2', 'l2m1', 'l20', 'l21', 'l22'];\n\n          aliasName.forEach((n, i) => {\n            material.setVector3(`_shCoefficients.${n}`, Vector3.fromArray(coeffs[i] as spec.vec3));\n          });\n        }\n        material.setInt('_MipCount', skybox.specularMipCount - 1);\n        material.setTexture('_SpecularEnvSampler', skybox.specularImage);\n      }\n    }\n  }\n\n  /**\n   * 是否有蒙皮\n   * @returns\n   */\n  hasSkin (): boolean {\n    return this.skin !== undefined;\n  }\n\n  /**\n   * 获取 GE 几何体\n   * @returns\n   */\n  getEffectsGeometry (): Geometry {\n    return this.geometry.geometry;\n  }\n\n  /**\n   * 设置几何体\n   * @param val - 插件或 GE 几何体\n   */\n  setGeometry (val: PGeometry | Geometry) {\n    if (val instanceof PGeometry) {\n      this.geometry = val;\n    } else {\n      this.geometry = new PGeometry(val);\n    }\n  }\n\n  /**\n   * 设置材质\n   * @param val - 插件材质对象或材质参数\n   */\n  setMaterial (val: PMaterial | Material) {\n    if (val instanceof PMaterialUnlit) {\n      this.material = val;\n    } else if (val instanceof PMaterialPBR) {\n      this.material = val;\n    } else {\n      this.material = createPluginMaterial(val);\n    }\n  }\n\n  /**\n   * 获取 GE 材质\n   * @returns\n   */\n  getEffectsMaterial (): Material {\n    return this.material.effectMaterial;\n  }\n\n  /**\n   * 是否无光照材质\n   * @returns\n   */\n  isUnlitMaterial (): boolean {\n    return this.material.materialType === PMaterialType.unlit;\n  }\n\n  /**\n   * 是否有 Morph 动画：\n   * 需要注意 Morph 对象存在，但还是没有 Morph 动画的情况\n   * @returns 返回是否有 Morph 动画\n   */\n  hasMorph (): boolean {\n    if (this.morph === undefined) {\n      return false;\n    }\n\n    return this.morph.hasMorph();\n  }\n\n  /**\n   * 获取世界坐标下的包围盒\n   * @returns\n   */\n  getWorldBoundingBox (): Box3 {\n    if (this.parent === undefined) {\n      if (this.boundingBox.isEmpty()) {\n        this.computeBoundingBox(Matrix4.fromIdentity());\n      }\n\n      return this.boundingBox;\n    } else {\n      const matrix = this.parent.matrix;\n\n      if (this.boundingBox.isEmpty()) {\n        this.computeBoundingBox(matrix.clone().invert());\n      }\n\n      return this.boundingBox.clone().applyMatrix4(matrix);\n    }\n  }\n}\n\n/**\n * 3D 几何类\n */\nexport class PGeometry {\n  /**\n   * 属性名称数组\n   */\n  attributeNames: string[];\n\n  /**\n   * 创建 3D 几何体，根据 GE 几何体\n   * @param geometry - GE 几何体\n   */\n  constructor (public geometry: Geometry) {\n    this.attributeNames = geometry.getAttributeNames();\n  }\n\n  /**\n   * 销毁\n   */\n  dispose () {\n    // @ts-expect-error\n    this.geometry = undefined;\n    this.attributeNames = [];\n  }\n\n  /**\n   * 是否有某个属性\n   * @param name - 属性名\n   * @returns\n   */\n  hasAttribute (name: string): boolean {\n    const index = this.attributeNames.findIndex(item => {\n      return item === name;\n    });\n\n    return index !== -1;\n  }\n\n  /**\n   * 设置隐藏，通过修改几何体中的渲染数目\n   * @param hide - 隐藏值\n   */\n  setHide (hide: boolean) {\n    const geomExt = this.geometry as GeometryExt;\n\n    if (geomExt.getDrawCount() === 0) {\n      const indexArray = geomExt.getIndexData();\n\n      if (indexArray !== undefined) {\n        geomExt.setDrawCount(indexArray.length);\n      }\n    }\n    if (hide) {\n      if (geomExt.getDrawCount() >= 0) {\n        geomExt.setDrawCount(-geomExt.getDrawCount());\n      }\n    } else {\n      if (geomExt.getDrawCount() < 0) {\n        geomExt.setDrawCount(-geomExt.getDrawCount());\n      }\n    }\n  }\n\n  /**\n   * 是否压缩格式\n   * @returns\n   */\n  isCompressed (): boolean {\n    const positionAttrib = this.geometry.getAttributeData('aPos');\n\n    if (positionAttrib === undefined) {\n      return false;\n    }\n\n    // FIXME: get attributes from geometry\n    //return positionAttrib.normalize === true;\n    return false;\n  }\n\n  /**\n   * 是否有位置属性\n   * @returns\n   */\n  hasPositions (): boolean {\n    return this.hasAttribute('aPos');\n  }\n\n  /**\n   * 是否有法线属性\n   * @returns\n   */\n  hasNormals (): boolean {\n    return this.hasAttribute('aNormal');\n  }\n\n  /**\n   * 是否有切线属性\n   * @returns\n   */\n  hasTangents (): boolean {\n    return this.hasAttribute('aTangent');\n  }\n\n  /**\n   * 是否有纹理坐标属性\n   * @param index - 纹理坐标索引\n   * @returns\n   */\n  hasUVCoords (index: number): boolean {\n    if (index === 1) {\n      return this.hasAttribute('aUV');\n    } else {\n      return this.hasAttribute(`aUV${index}`);\n    }\n  }\n\n  /**\n   * 是否有颜色属性\n   * @returns\n   */\n  hasColors (): boolean {\n    return this.hasAttribute('aColor');\n  }\n\n  /**\n   * 是否有关节点属性\n   * @returns\n   */\n  hasJoints (): boolean {\n    return this.hasAttribute('aJoints');\n  }\n\n  /**\n   * 是否有权重属性\n   * @returns\n   */\n  hasWeights (): boolean {\n    return this.hasAttribute('aWeights');\n  }\n}\n\nclass EffectsMeshProxy {\n  data: ModelMeshComponentData;\n  geometry: Geometry;\n  rootBoneItem: VFXItem;\n  morphObj: PMorph;\n\n  constructor (\n    public itemData: ModelMeshComponentData,\n    public parentComponent: ModelMeshComponent,\n    public parentItem?: VFXItem,\n  ) {\n    this.data = itemData;\n    this.geometry = itemData.geometry as unknown as Geometry;\n    this.rootBoneItem = itemData.rootBone as unknown as VFXItem;\n\n    const morphObj = new PMorph();\n\n    if (morphObj.create(this.geometry)) {\n      // 设置初始权重数组\n      if (itemData.morph?.weights) {\n        morphObj.initWeights(itemData.morph?.weights);\n      }\n\n      this.morphObj = morphObj;\n    }\n  }\n\n  hasMorphTarget (): boolean {\n    return this.morphObj.hasMorph();\n  }\n\n  /**\n   * 返回 Morph 对象\n   * 需要先判断是否有 Morph 动画，如果没有就直接返回 undefined\n   *\n   * @returns 缓存的 Morph 对象，或者 undefined\n   */\n  getMorphObj (): PMorph | undefined {\n    if (!this.hasMorphTarget()) {\n      return;\n    }\n\n    return this.morphObj;\n  }\n\n  isHide (): boolean {\n    return this.data.hide === true;\n  }\n\n  getParentIndex (): number {\n    return -1;\n  }\n\n  getGeometry () {\n    return this.data.geometry;\n  }\n\n  getMaterials () {\n    return this.data.materials;\n  }\n\n  getMaterialCount () {\n    return this.data.materials.length;\n  }\n\n  hasSkin (): boolean {\n    const skin = this.geometry.getSkinProps();\n\n    return !!(skin.rootBoneName && skin.boneNames && skin.inverseBindMatrices && this.rootBoneItem);\n  }\n\n  getSkinOpts () {\n    return this.geometry.getSkinProps();\n  }\n\n  getSkinObj (engine: Engine): PSkin | undefined {\n    const skin = this.getSkinOpts();\n\n    if (skin.rootBoneName && skin.boneNames && skin.inverseBindMatrices && this.rootBoneItem) {\n      const skinObj = new PSkin();\n      const maxJointCount = this.parentComponent.sceneManager?.maxJointCount ?? 0;\n\n      skinObj.create(skin, engine, this.rootBoneItem, maxJointCount);\n\n      return skinObj;\n    }\n\n    return undefined;\n  }\n}\n\nexport interface MacroInfo {\n  name: string,\n  value?: boolean | number,\n}\n\ninterface GeometryExt extends Geometry {\n  newDrawCount?: number,\n}\n","import type { Mesh, Renderer, Texture, Engine, math, CameraOptionsEx } from '@galacean/effects';\nimport { Transform, spec, addItem, removeItem, PLAYER_OPTIONS_ENV_EDITOR } from '@galacean/effects';\nimport { PMesh } from './mesh';\nimport type { PCamera } from './camera';\nimport { PCameraManager } from './camera';\nimport { PLight, PLightManager } from './light';\nimport type { Vector3 } from './math';\nimport { Matrix4, Box3 } from './math';\nimport { PSkybox } from './skybox';\nimport { PTransform, PGlobalState, PObjectType } from './common';\nimport type { CompositionCache } from './cache';\nimport type { PEntity } from './object';\nimport { WebGLHelper } from '../utility/plugin-helper';\nimport { TwoStatesSet } from '../utility/ts-helper';\nimport type { ModelMeshComponent } from '../plugin';\n\ntype Box3 = math.Box3;\ntype Vector2 = math.Vector2;\n\n/**\n * 场景参数接口，初始化场景对象时使用\n */\nexport interface PSceneOptions {\n  /**\n   * 合成名称\n   */\n  componentName: string,\n  /**\n   * 渲染器\n   */\n  renderer: Renderer,\n  /**\n   * 场景缓存\n   */\n  sceneCache: CompositionCache,\n  /**\n   * 是否只渲染线框\n   */\n  wireframeOnly?: boolean,\n  /**\n   * 运行时环境\n   */\n  runtimeEnv?: string,\n  /**\n   * 兼容模式\n   */\n  compatibleMode?: string,\n  /**\n   * 是否可视化包围盒\n   */\n  visBoundingBox?: boolean,\n  /**\n   * 是否动态排序\n   */\n  enableDynamicSort?: boolean,\n  /**\n   * 3D 渲染模式\n   */\n  renderMode3D?: spec.RenderMode3D,\n  /**\n   * 3D 渲染模式中棋盘格大小\n   */\n  renderMode3DUVGridSize?: number,\n  /**\n   * 是否渲染天空盒\n   */\n  renderSkybox: boolean,\n  /**\n   * 灯光元素数目\n   */\n  lightItemCount: number,\n  /**\n   * 最大骨骼数目\n   */\n  maxJointCount: number,\n}\n\n/**\n * 场景状态接口，每次场景管理器 Tick 时都会生成\n */\nexport interface PSceneStates {\n  /**\n   * 时间间隔\n   */\n  deltaSeconds: number,\n  /**\n   * 相机对象\n   */\n  camera: PCamera,\n  /**\n   * 相机位置\n   */\n  cameraPosition: Vector3,\n  /**\n   * 相机矩阵\n   */\n  viewMatrix: Matrix4,\n  /**\n   * 逆相机矩阵\n   */\n  inverseViewMatrix: Matrix4,\n  /**\n   * 投影矩阵\n   */\n  projectionMatrix: Matrix4,\n  /**\n   * 相机投影矩阵\n   */\n  viewProjectionMatrix: Matrix4,\n  /**\n   * 画布大小\n   */\n  winSize: Vector2,\n  /**\n   * 场景半径\n   */\n  sceneRadius: number,\n  // for shadow\n  shadowMapSizeInv?: Vector2,\n  lightViewMatrix?: Matrix4,\n  lightProjectionMatrix?: Matrix4,\n  lightViewProjectionMatrix?: Matrix4,\n  /**\n   * 灯光对象列表\n   */\n  lightList: PLight[],\n  /**\n   * 最大灯光数目\n   */\n  maxLightCount: number,\n  /**\n   * 最大骨骼数目\n   */\n  maxJointCount: number,\n  /**\n   * 天空盒对象\n   */\n  skybox?: PSkybox,\n}\n\n/**\n * 场景管理类，如果存在 Model 插件中的元素才会创建\n */\nexport class PSceneManager {\n  /**\n   * 合成名称\n   */\n  compName: string;\n  /**\n   * 实体列表\n   */\n  itemList: PEntity[];\n  /**\n   * Mesh 列表\n   */\n  meshList: PMesh[];\n  /**\n   * 灯光管理器\n   */\n  lightManager: PLightManager;\n  /**\n   * 相机管理器\n   */\n  cameraManager: PCameraManager;\n  /**\n   * 是否动态排序 Mesh 渲染优先级\n   * 默认 false，需要和 Tiny 对齐时为 true\n   */\n  enableDynamicSort: boolean;\n  /**\n   * IBL 渲染时的 BRDF 查询纹理\n   */\n  brdfLUT?: Texture;\n  /**\n   * 天空盒\n   */\n  skybox?: PSkybox;\n  /**\n   * Tick 次数\n   */\n  tickCount: number;\n  /**\n   * 最近 Tick 时间\n   */\n  lastTickSecond: number;\n  /**\n   * 当前场景包围盒缓存，在阴影渲染中使用\n   */\n  sceneAABBCache: Box3;\n  /**\n   * 场景前帧和当前帧渲染的 Mesh 集合\n   */\n  renderedMeshSet: TwoStatesSet<Mesh>;\n  /**\n   * 最多灯光数目\n   */\n  maxLightCount = 16;\n  /**\n   * 最大骨骼数目\n   */\n  maxJointCount = 0;\n  /**\n   * 场景状态\n   */\n  sceneStates: PSceneStates;\n\n  private renderer?: Renderer;\n  private sceneCache?: CompositionCache;\n  private parentId2Mesh: Map<string, PMesh>;\n  private renderSkybox = false;\n\n  private engine: Engine;\n\n  constructor (engine: Engine) {\n    this.compName = 'SceneManger';\n    this.itemList = [];\n    this.meshList = [];\n    this.engine = engine;\n    this.lightManager = new PLightManager();\n    this.cameraManager = new PCameraManager();\n    this.parentId2Mesh = new Map();\n    //\n    this.enableDynamicSort = false;\n    this.tickCount = 0;\n    this.lastTickSecond = -1;\n    //\n    this.sceneAABBCache = new Box3();\n    this.renderedMeshSet = new TwoStatesSet();\n  }\n\n  /**\n   * 初始化场景管理器，设置全局状态\n   * @param opts - 场景参数\n   */\n  initial (opts: PSceneOptions) {\n    this.clean();\n    this.compName = opts.componentName;\n    this.renderer = opts.renderer;\n    this.engine = opts.renderer.engine;\n    this.sceneCache = opts.sceneCache;\n    this.enableDynamicSort = opts.enableDynamicSort === true;\n    this.renderSkybox = opts.renderSkybox;\n    this.maxLightCount = opts.lightItemCount;\n    this.maxJointCount = opts.maxJointCount;\n    this.cameraManager.initial(this.renderer.getWidth(), this.renderer.getHeight());\n    this.brdfLUT = this.sceneCache.getBrdfLutTexture();\n    this.initGlobalState(opts);\n\n    if (this.maxLightCount > 8) {\n      console.warn(`Too many light items: ${this.maxLightCount} light(s).`);\n    }\n  }\n\n  private initGlobalState (opts: PSceneOptions) {\n    const capbility = this.engine.gpuCapability;\n    const globalState = PGlobalState.getInstance();\n\n    globalState.reset();\n    globalState.isWebGL2 = capbility.level === 2;\n    //globalState.shaderShared = composition.env === PLAYER_OPTIONS_ENV_EDITOR;\n    globalState.runtimeEnv = opts.runtimeEnv ?? PLAYER_OPTIONS_ENV_EDITOR;\n    globalState.compatibleMode = opts.compatibleMode ?? 'gltf';\n    globalState.visBoundingBox = opts.visBoundingBox ?? false;\n    globalState.renderMode3D = opts.renderMode3D ?? spec.RenderMode3D.none;\n    globalState.renderMode3DUVGridSize = opts.renderMode3DUVGridSize ?? 1 / 16;\n  }\n\n  private clean () {\n    this.dispose();\n    //\n    this.compName = '';\n    this.renderer = undefined;\n    this.sceneCache = undefined;\n    this.itemList = [];\n    this.meshList = [];\n\n    this.lightManager = new PLightManager();\n    this.cameraManager = new PCameraManager();\n    this.parentId2Mesh = new Map();\n    this.brdfLUT = undefined;\n    this.skybox = undefined;\n    this.lastTickSecond = -1;\n    //\n    this.tickCount = 0;\n    this.renderedMeshSet = new TwoStatesSet();\n  }\n\n  /**\n   * 销毁，需要销毁各种管理器和创建的 WebGL 资源\n   */\n  dispose () {\n    this.itemList.forEach(item => item.dispose());\n    this.itemList = [];\n    this.meshList.forEach(mesh => mesh.dispose());\n    this.meshList = [];\n    this.lightManager.dispose();\n    this.cameraManager.dispose();\n    this.brdfLUT = undefined;\n    this.skybox?.dispose();\n    this.skybox = undefined;\n    this.renderedMeshSet.clear();\n    //\n    this.renderer = undefined;\n    this.sceneCache = undefined;\n    // @ts-expect-error\n    this.engine = undefined;\n    this.parentId2Mesh.clear();\n  }\n\n  /**\n   * 添加插件元素到场景中\n   * @param item - 插件元素\n   */\n  addItem (item: PMesh | PCamera | PLight | PSkybox) {\n    if (item instanceof PMesh) {\n      const mesh = item;\n\n      if (mesh.parentItemId !== undefined) {\n        this.parentId2Mesh.set(mesh.parentItemId, mesh);\n      }\n\n      addItem(this.meshList, mesh);\n    } else if (item instanceof PSkybox) {\n      const skybox = item;\n\n      skybox.setup(this.brdfLUT);\n      if (!this.renderSkybox) {\n        // renderable会控制天空盒是否作为背景渲染，来自用户(编辑器)的输入\n        // this.renderSkybox是播放时候的控制参数。\n        // -- 如果是false，会强制天空不渲染。\n        // -- 如果是true，会按照用户设置来渲染天空盒。\n        skybox.renderable = false;\n      }\n      this.skybox = skybox;\n    } else if (item instanceof PLight) {\n      this.lightManager.insertLight(item);\n    } else {\n      this.cameraManager.insertCamera(item);\n    }\n\n    addItem(this.itemList, item);\n  }\n\n  /**\n   * 从场景中删除插件元素\n   * @param item - 插件元素\n   */\n  removeItem (item: PMesh | PCamera | PLight | PSkybox) {\n    if (item instanceof PMesh) {\n      const mesh = item;\n\n      if (mesh.parentItemId !== undefined) {\n        this.parentId2Mesh.delete(mesh.parentItemId);\n      }\n\n      removeItem(this.meshList, mesh);\n    } else if (item instanceof PSkybox) {\n      this.skybox = undefined;\n    } else if (item instanceof PLight) {\n      this.lightManager.remove(item);\n    } else {\n      this.cameraManager.remove(item);\n    }\n\n    removeItem(this.itemList, item);\n  }\n\n  /**\n   * 更新默认相机状态，根据传入的相机参数\n   * @param camera - 相机参数\n   */\n  updateDefaultCamera (camera: CameraOptionsEx, viewportMatrix: Matrix4) {\n    const effectsTransfrom = new Transform({\n      ...camera,\n      valid: true,\n    });\n\n    const newTransform = new PTransform().fromEffectsTransform(effectsTransfrom);\n\n    this.cameraManager.updateDefaultCamera(\n      camera.fov,\n      viewportMatrix,\n      camera.aspect,\n      camera.near,\n      camera.far,\n      newTransform.getPosition(),\n      newTransform.getRotation(),\n      camera.clipMode,\n    );\n  }\n\n  /**\n   * 更新插件场景，需要更新内部的相关的插件对象，特别是 Mesh 对象的骨骼动画\n   * 并将需要渲染的对象添加到渲染对象集合中\n   * @param deltaTime - 更新间隔\n   */\n  tick (deltaTime: number) {\n    const deltaSeconds = deltaTime;\n    const camera = this.activeCamera;\n    const viewMatrix = camera.viewMatrix;\n    const projectionMatrix = camera.projectionMatrix;\n    const viewProjectionMatrix = projectionMatrix.clone().multiply(viewMatrix);\n\n    this.sceneStates = {\n      deltaSeconds: deltaSeconds,\n      //\n      camera: camera,\n      cameraPosition: camera.getEye(),\n      viewMatrix: viewMatrix,\n      inverseViewMatrix: viewMatrix.clone().invert(),\n      projectionMatrix: projectionMatrix,\n      viewProjectionMatrix: viewProjectionMatrix,\n      winSize: camera.getSize(),\n      sceneRadius: 1.0,\n      //\n      lightList: this.lightManager.lightList,\n      maxLightCount: this.maxLightCount,\n      maxJointCount: this.maxJointCount,\n      skybox: this.skybox,\n    };\n\n    if (this.enableDynamicSort) {\n      this.dynamicSortMeshes(this.sceneStates);\n    }\n\n    this.tickCount += 1;\n    this.lastTickSecond += deltaSeconds;\n  }\n\n  /**\n   * 动态调整 Mesh 渲染优先级\n   * 主要是为了和 Tiny 渲染对齐，正常渲染不进行调整\n   * @param states - 场景中的状态数据\n   */\n  dynamicSortMeshes (states: PSceneStates) {\n    const meshComponents: ModelMeshComponent[] = [];\n    const priorityList: number[] = [];\n\n    this.meshList.forEach(mesh => {\n      if (mesh.owner && mesh.owner.enabled) {\n        const component = mesh.owner;\n\n        meshComponents.push(component);\n        priorityList.push(component.priority);\n      }\n    });\n\n    priorityList.sort((a, b) => a - b);\n\n    // 按照 Tiny 排序算法，对 Mesh 对象进行排序\n    // 将透明和不透明物体拆开，从而渲染正确\n    const viewMatrix = states.viewMatrix;\n\n    meshComponents.sort((a: ModelMeshComponent, b: ModelMeshComponent) => {\n      const atransparent = WebGLHelper.isTransparentMesh(a);\n      const btransparent = WebGLHelper.isTransparentMesh(b);\n\n      if (atransparent && btransparent) {\n        const aposition = a.transform.getWorldPosition();\n        const bposition = b.transform.getWorldPosition();\n        const anewPos = viewMatrix.transformPoint(aposition);\n        const bnewPos = viewMatrix.transformPoint(bposition);\n\n        if (anewPos.z === bnewPos.z) { return a.priority - b.priority; } else { return anewPos.z - bnewPos.z; }\n      } else if (atransparent) {\n        return 1;\n      } else if (btransparent) {\n        return -1;\n      } else {\n        return a.priority - b.priority;\n      }\n    });\n\n    let prePriority = -99999;\n\n    // 重新赋值渲染优先级\n    for (let i = 0; i < meshComponents.length; i++) {\n      const mesh = meshComponents[i];\n      const priority = priorityList[i];\n\n      if (prePriority < priority) {\n        prePriority = priority;\n        mesh.priority = priority;\n      } else {\n        prePriority += 0.1;\n        mesh.priority = prePriority;\n      }\n    }\n  }\n\n  /**\n   * 查询场景中的 Mesh\n   * 通过 parentId 查询 Mesh 对象，可能找不到 Mesh 对象\n   * @param parentId - Item 中定义的 parentId\n   * @returns 查询到的 PMesh，或者是没找到。如果 Mesh 不可见，也是没找到。\n   */\n  queryMesh (parentId: string): PMesh | undefined {\n    const mesh = this.parentId2Mesh.get(parentId);\n\n    if (mesh === undefined || !mesh.visible) {\n      return;\n    }\n\n    return mesh;\n  }\n\n  /**\n   * 获取场景的包围盒\n   * @param box - 包围盒\n   * @returns 场景的包围盒\n   */\n  getSceneAABB (box?: Box3): Box3 {\n    const sceneBox = box ?? new Box3();\n\n    this.itemList.forEach(item => {\n      if (item.type === PObjectType.mesh) {\n        const mesh = item as PMesh;\n\n        if (mesh.owner) {\n          const transform = mesh.owner.item.getWorldTransform();\n          const worldMatrix = transform.getWorldMatrix();\n          const meshBox = mesh.computeBoundingBox(worldMatrix);\n\n          meshBox.applyMatrix4(worldMatrix);\n          sceneBox.union(meshBox);\n        } else {\n          sceneBox.union(mesh.computeBoundingBox(Matrix4.fromIdentity()));\n        }\n      }\n    });\n\n    return sceneBox;\n  }\n\n  printDebugInfo () {\n    console.info('@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@');\n    console.info('@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@');\n    this.meshList.forEach((mesh, index) => {\n      console.info('Mesh: ', index, mesh);\n    });\n    this.cameraManager.getCameraList().forEach((cam, index) => {\n      console.info('Camera: ', index, cam);\n    });\n    console.info('Default Camera: ', this.cameraManager.getDefaultCamera());\n    this.lightManager.lightList.forEach((light, index) => {\n      console.info('Light: ', index, light);\n    });\n    console.info('@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@');\n    console.info('@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@');\n  }\n\n  /**\n   * 获取渲染器\n   * @returns\n   */\n  getRenderer (): Renderer {\n    return this.renderer as Renderer;\n  }\n\n  /**\n   * 获取场景中缓存\n   * @returns\n   */\n  getSceneCache (): CompositionCache {\n    return this.sceneCache as CompositionCache;\n  }\n\n  /**\n   * 获取激活的相机\n   */\n  get activeCamera (): PCamera {\n    return this.cameraManager.getActiveCamera();\n  }\n\n  /**\n   * 获取灯光数目\n   */\n  get lightCount (): number {\n    return this.lightManager.lightCount;\n  }\n\n  /**\n   * 获取着色器灯光数目，最小是 10\n   */\n  get shaderLightCount (): number {\n    return Math.min(10, this.lightManager.lightCount);\n  }\n}\n\n","import {\n  spec, generateGUID, Downloader, TextureSourceType, getStandardJSON, glContext,\n  glType2VertexFormatType, isObject,\n} from '@galacean/effects';\nimport type {\n  Engine, Renderer, JSONValue, TextureCubeSourceOptions, GeometryProps,\n} from '@galacean/effects';\nimport { deserializeGeometry, typedArrayFromBinary } from '@galacean/effects-helper';\nimport { PBRShaderGUID, UnlitShaderGUID, Color, Quaternion, Vector3 } from '../runtime';\nimport type { ModelTreeContent } from '../index';\n\nexport class JSONConverter {\n  newScene: spec.JSONScene;\n\n  engine: Engine;\n  downloader: Downloader;\n  treeInfo = new TreeInfo();\n\n  constructor (\n    public renderer: Renderer,\n    public keepIBLData = true,\n  ) {\n    this.engine = renderer.engine;\n    this.downloader = new Downloader();\n  }\n\n  async processScene (sceneData: string | Record<string | symbol, unknown>) {\n    const sceneJSON = isObject(sceneData) ? sceneData : await this.loadJSON(sceneData);\n\n    //@ts-expect-error\n    if (!sceneJSON.textures) {\n      //@ts-expect-error\n      sceneJSON.textures = [];\n    }\n    //@ts-expect-error\n    sceneJSON.textures.forEach(tex => {\n      if (tex.source === undefined) {\n        tex.source = 0;\n      }\n    });\n\n    const oldScene = getStandardJSON(sceneJSON);\n    const oldBinUrls = oldScene.bins ?? [];\n    const binFiles: ArrayBuffer[] = [];\n\n    //@ts-expect-error\n    const v = sceneJSON.version.split('.');\n\n    if (Number(v[0]) >= 3) {\n      return oldScene;\n    }\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: spec.JSONSceneVersion['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    };\n\n    this.setImage(newScene, oldScene);\n    await this.setTexture(newScene, oldScene);\n    this.setComponent(newScene, oldScene);\n    this.setItem(newScene, oldScene);\n    this.setComposition(newScene, oldScene);\n\n    newScene.bins = oldBinUrls;\n\n    return newScene;\n  }\n\n  setImage (newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n    const newImages: spec.Image[] = [];\n\n    oldScene.images.forEach(image => {\n      newImages.push(image);\n    });\n\n    newScene.images = newImages;\n  }\n\n  async setTexture (newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n    const newTextures: spec.TextureDefine[] = [];\n    const bins = oldScene.bins as unknown as ArrayBuffer[];\n\n    if (oldScene.textures) {\n      for (const tex of oldScene.textures as spec.SerializedTextureCube[]) {\n        if (tex.target === 34067) {\n          if (this.keepIBLData) {\n            newTextures.push(tex);\n          } else {\n            const { mipmaps, target } = tex;\n            const jobs = mipmaps.map(mipmap => Promise.all(mipmap.map(pointer => this.loadMipmapImage(pointer, bins))));\n            const loadedMipmaps = await Promise.all(jobs);\n\n            const newMipmaps = loadedMipmaps.map(mipmaps => mipmaps.map(img => {\n              const id = generateGUID();\n              const sceneImage: spec.Image = {\n                url: img,\n                id,\n              };\n\n              newScene.images.push(sceneImage);\n              const dataPath: spec.DataPath = { id };\n\n              return dataPath;\n            }));\n\n            const newTex = {\n              keepImageSource: false,\n              ...tex,\n              ...{\n                mipmaps: newMipmaps,\n                sourceFrom: {\n                  target,\n                  type: TextureSourceType.mipmaps,\n                  mipmaps: mipmaps.map(mipmap => mipmap.map(pointer => [pointer[1][1], pointer[1][2]])),\n                },\n              } as TextureCubeSourceOptions,\n            };\n\n            // @ts-expect-error\n            newTextures.push(newTex);\n          }\n        } else {\n          // @ts-expect-error\n          const source = tex.source as any;\n\n          if (typeof source === 'number') {\n            // @ts-expect-error\n            tex.source = { id: newScene.images[source].id };\n          }\n          newTextures.push(tex);\n        }\n      }\n    }\n\n    newScene.textures = newTextures;\n  }\n\n  setComponent (newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n    const newComponents = newScene.components;\n\n    for (const comp of oldScene.components) {\n      if (comp.dataType === spec.DataType.SkyboxComponent) {\n        newComponents.push(this.createSkyboxComponent(comp, newScene));\n      } else if (comp.dataType === spec.DataType.LightComponent) {\n        newComponents.push(this.createLightComponent(comp, newScene));\n      } else if (comp.dataType === spec.DataType.CameraComponent) {\n        newComponents.push(comp);\n        console.warn(`Camera component found: ${comp}.`);\n      } else if (comp.dataType === spec.DataType.TreeComponent) {\n        const treeComp = comp as unknown as ModelTreeContent;\n\n        this.createItemsFromTreeComponent(comp, newScene, oldScene);\n        treeComp.options.tree.animation = undefined;\n        treeComp.options.tree.animations = undefined;\n      } else if (comp.dataType !== spec.DataType.MeshComponent) {\n        newComponents.push(comp);\n      }\n    }\n\n    for (const comp of oldScene.components) {\n      if (comp.dataType === spec.DataType.MeshComponent) {\n        newComponents.push(this.createMeshComponent(comp, newScene, oldScene));\n      }\n    }\n  }\n\n  setItem (newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n\n  }\n\n  setComposition (newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n    newScene.items = oldScene.items;\n    newScene.items.push(...this.treeInfo.getAllTreeNodeList());\n    newScene.compositionId = oldScene.compositionId;\n    newScene.compositions = oldScene.compositions;\n\n    newScene.items.forEach(item => {\n      if (item.type === 'root' as spec.ItemType) {\n        item.type = 'ECS' as spec.ItemType;\n      }\n    });\n\n    //@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(`Failed to load JSON from URL '${url}': status ${status} - ${responseText}. Please check the URL or network settings.`));\n        });\n    });\n  }\n\n  private async loadBins (url: string) {\n    return new Promise<ArrayBuffer>((resolve, reject) => {\n      this.downloader.downloadBinary(\n        url,\n        resolve,\n        (status, responseText) => {\n          reject(`Couldn't load bins ${JSON.stringify(url)}: status ${status}, ${responseText}`);\n        });\n    });\n  }\n\n  private async loadMipmapImage (pointer: spec.BinaryPointer, bins: ArrayBuffer[]) {\n    const [index, start, length] = pointer[1];\n    const bin = bins[index];\n\n    if (!bin) {\n      throw new Error(`Invalid bin pointer: ${JSON.stringify(pointer)}.`);\n    }\n\n    return URL.createObjectURL((new Blob([new Uint8Array(bin, start, length)])));\n  }\n\n  private createSkyboxComponent (component: spec.ComponentData, scene: spec.JSONScene): spec.SkyboxComponentData {\n    const skyboxOptions = (component as unknown as spec.SkyboxContent<'json'>).options;\n    let irradianceCoeffs;\n\n    if (skyboxOptions.irradianceCoeffs) {\n      irradianceCoeffs = [];\n      skyboxOptions.irradianceCoeffs.forEach(coeffs => irradianceCoeffs.push(...coeffs));\n    }\n\n    let diffuseImage;\n\n    if (skyboxOptions.diffuseImage) {\n      // @ts-expect-error\n      diffuseImage = { id: scene.textures[skyboxOptions.diffuseImage].id } as spec.DataPath;\n    }\n\n    const skyboxComponent: spec.SkyboxComponentData = {\n      id: component.id,\n      dataType: component.dataType,\n      item: component.item,\n      renderable: skyboxOptions.renderable,\n      intensity: skyboxOptions.intensity,\n      reflectionsIntensity: skyboxOptions.reflectionsIntensity,\n      irradianceCoeffs: irradianceCoeffs,\n      diffuseImage,\n      specularImage: {\n        // @ts-expect-error\n        id: scene.textures[skyboxOptions.specularImage].id,\n      },\n      specularImageSize: skyboxOptions.specularImageSize,\n      specularMipCount: skyboxOptions.specularMipCount + 1,\n    };\n\n    return skyboxComponent;\n  }\n\n  private createMeshComponent (component: spec.ComponentData, newScene: spec.JSONScene, oldScene: spec.JSONScene): spec.ModelMeshComponentData {\n    const meshOptions = (component as unknown as spec.ModelMeshItemContent<'json'>).options;\n\n    const geometryPropsList: GeometryProps[] = [];\n    const materialDatas: spec.MaterialData[] = [];\n\n    meshOptions.primitives.forEach(prim => {\n      const geomProps = deserializeGeometry(prim.geometry, oldScene.bins as unknown as ArrayBuffer[]);\n      const material = this.getMaterialData(prim.material, oldScene);\n\n      if (geomProps.indices?.data instanceof Uint8Array) {\n        const oldIndices = geomProps.indices.data;\n        const newIndices = new Uint16Array(oldIndices.length);\n\n        for (let i = 0; i < oldIndices.length; i++) {\n          newIndices[i] = oldIndices[i];\n        }\n\n        geomProps.indices.data = newIndices;\n      }\n\n      geometryPropsList.push(geomProps);\n      materialDatas.push(material);\n    });\n\n    const geometryData = getGeometryDataFromPropsList(geometryPropsList);\n\n    if (!geometryData) {\n      throw new Error('No primitives available to process.');\n    }\n\n    newScene.geometries.push(geometryData);\n    newScene.materials.push(...materialDatas);\n\n    const meshComponent: spec.ModelMeshComponentData = {\n      id: component.id,\n      dataType: component.dataType,\n      item: component.item,\n      geometry: { id: geometryData.id },\n      materials: materialDatas.map(mat => {\n        const data: spec.DataPath = {\n          id: mat.id,\n        };\n\n        return data;\n      }),\n    };\n\n    if (meshOptions.skin) {\n      let parentItemId = component.item.id;\n\n      for (const item of oldScene.items) {\n        if (item.id === component.item.id) {\n          parentItemId = item.parentId as string;\n        }\n      }\n\n      if (parentItemId === component.item.id) {\n        throw new Error(`Can't item ${component.item}.`);\n      }\n\n      const treeItem = this.treeInfo.getTreeItemByNodeId(parentItemId);\n      const treeNodeList = this.treeInfo.getTreeNodeListByNodeId(parentItemId);\n\n      if (!treeItem || !treeNodeList) {\n        throw new Error(`Failed to retrieve tree node list for item with ID ${component.item.id}. Ensure the item exists and has a valid tree structure.`);\n      }\n      const rootBoneItem = this.setupBoneData(geometryData, meshOptions.skin, oldScene, treeItem, treeNodeList);\n\n      meshComponent.rootBone = { id: rootBoneItem.id };\n    }\n\n    if (meshOptions.weights !== undefined) {\n      meshComponent.morph = {\n        weights: meshOptions.weights,\n      };\n    }\n\n    return meshComponent;\n  }\n\n  private createItemsFromTreeComponent (component: spec.ComponentData, newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n    let treeItem = oldScene.items[0];\n\n    oldScene.items.forEach(item => {\n      if (item.id === component.item.id) {\n        treeItem = item;\n      }\n    });\n\n    const treeComp = component as unknown as ModelTreeContent;\n    const treeData = treeComp.options.tree;\n    const treeNodeList: spec.VFXItemData[] = [];\n\n    treeData.nodes.forEach((node, index) => {\n      const item: spec.VFXItemData = {\n        id: generateGUID(),\n        parentId: treeItem.id,\n        name: node.name ?? `node${index}`,\n        duration: treeItem.duration,\n        // @ts-expect-error\n        type: 'ECS',\n        dataType: spec.DataType.VFXItemData,\n        visible: treeItem.visible,\n        endBehavior: treeItem.endBehavior,\n        delay: treeItem.delay,\n        content: {},\n        renderLevel: treeItem.renderLevel,\n        pn: treeItem.pn,\n        pluginName: treeItem.pluginName,\n        transform: this.getTransformData(node.transform),\n        components: [],\n      };\n\n      treeNodeList.push(item);\n      newScene.items.push(item);\n    });\n\n    treeData.nodes.forEach((node, index) => {\n      const item = treeNodeList[index];\n\n      node.children?.forEach(child => {\n        const childItem = treeNodeList[child];\n\n        childItem.parentId = item.id;\n      });\n    });\n\n    oldScene.items.forEach(item => {\n      if (item.parentId) {\n        const index = item.parentId.indexOf('^');\n\n        if (index >= 0) {\n          const parentId = item.parentId.substring(0, index);\n          const subIndex = +item.parentId.substring(index + 1);\n\n          if (parentId === treeItem.id) {\n            item.parentId = treeNodeList[subIndex].id;\n          }\n        }\n      }\n    });\n\n    this.treeInfo.add(treeItem, treeNodeList);\n\n    this.createAnimationComponent(treeData as any, treeItem, newScene, oldScene);\n  }\n\n  private createLightComponent (component: spec.ComponentData, scene: spec.JSONScene): spec.ModelLightComponentData {\n    const lightOptions = (component as unknown as spec.ModelLightContent).options;\n\n    const lightComponent: spec.ModelLightComponentData = {\n      id: component.id,\n      dataType: component.dataType,\n      item: component.item,\n      lightType: lightOptions.lightType as spec.LightType,\n      color: {\n        r: lightOptions.color[0] / 255.0,\n        g: lightOptions.color[1] / 255.0,\n        b: lightOptions.color[2] / 255.0,\n        a: lightOptions.color[3] / 255.0,\n      },\n      intensity: lightOptions.intensity,\n    };\n\n    if (lightOptions.lightType === 'point') {\n      lightComponent.range = lightOptions.range;\n    } else if (lightOptions.lightType === 'spot') {\n      lightComponent.range = lightOptions.range;\n      lightComponent.innerConeAngle = lightOptions.innerConeAngle;\n      lightComponent.outerConeAngle = lightOptions.outerConeAngle;\n    }\n\n    return lightComponent;\n  }\n\n  private createAnimationComponent (treeOptions: spec.ModelTreeOptions<'json'>, treeItem: spec.VFXItemData, newScene: spec.JSONScene, oldScene: spec.JSONScene) {\n    const { animation, animations } = treeOptions;\n\n    const animationComponent: spec.AnimationComponentData = {\n      id: generateGUID(),\n      dataType: spec.DataType.AnimationComponent,\n      item: { id: treeItem.id },\n      animation,\n      animationClips: [],\n    };\n\n    if (animations && animations.length) {\n      // FIXME: calcuate tree item duration\n      const bins = oldScene.bins as unknown as ArrayBuffer[];\n\n      animations.forEach(anim => {\n        const clipData: spec.AnimationClipData = {\n          id: generateGUID(),\n          name: anim.name,\n          dataType: spec.DataType.AnimationClip,\n          positionCurves: [],\n          rotationCurves: [],\n          scaleCurves: [],\n          floatCurves: [],\n        };\n\n        let totalAnimationTime = 0;\n\n        anim.tracks.forEach(track => {\n          const inputArray = typedArrayFromBinary(bins, track.input) as Float32Array;\n\n          totalAnimationTime = Math.max(totalAnimationTime, inputArray[inputArray.length - 1]);\n        });\n\n        anim.tracks.forEach(track => {\n          const inputArray = typedArrayFromBinary(bins, track.input);\n          const outputArray = typedArrayFromBinary(bins, track.output) as Float32Array;\n\n          if (!(inputArray instanceof Float32Array)) {\n            throw new Error(`Type of inputArray should be float32, ${inputArray}.`);\n          }\n          if (!(outputArray instanceof Float32Array)) {\n            throw new Error(`Type of outputArray should be float32, ${outputArray}.`);\n          }\n          if (track.interpolation !== 'LINEAR') {\n            throw new Error(`Invalid interpolation type ${track.interpolation}.`);\n          }\n\n          if (track.path === 'rotation') {\n            const points: spec.vec4[] = [];\n            const controlPoints: spec.vec4[] = [];\n            const lineValue: spec.LineKeyframeValue[] = [];\n\n            for (let i = 0; i < inputArray.length; i++) {\n              points.push([\n                outputArray[i * 4],\n                outputArray[i * 4 + 1],\n                outputArray[i * 4 + 2],\n                outputArray[i * 4 + 3],\n              ]);\n\n              if (i > 0) {\n                const p0 = Quaternion.fromArray(points[i - 1]);\n                const p3 = Quaternion.fromArray(points[i]);\n                const p1 = new Quaternion();\n                const p2 = new Quaternion();\n\n                p1.slerpQuaternions(p0, p3, 1 / 3);\n                p2.slerpQuaternions(p0, p3, 2 / 3);\n\n                controlPoints.push(p1.toArray());\n                controlPoints.push(p2.toArray());\n              }\n\n              lineValue.push([\n                spec.BezierKeyframeType.LINE,\n                [inputArray[i], i],\n              ]);\n            }\n\n            const node = this.treeInfo.getTreeNode(treeItem.id, track.node);\n            const path = this.treeInfo.getNodePath(node.id);\n\n            const keyFrames: spec.BezierCurveQuat = [\n              spec.ValueType.BEZIER_CURVE_QUAT,\n              [lineValue, points, controlPoints],\n            ];\n\n            clipData.rotationCurves?.push({ path, keyFrames });\n          } else if (track.path === 'weights') {\n            const node = this.treeInfo.getTreeNode(treeItem.id, track.node);\n            let path = this.treeInfo.getNodePath(node.id);\n\n            if (node.components.length === 0) {\n              for (let i = 0; i < oldScene.items.length; i++) {\n                const child = oldScene.items[i];\n\n                if (child.parentId === node.id) {\n                  path += '/' + child.name;\n\n                  break;\n                }\n              }\n            }\n            const component = outputArray.length / inputArray.length;\n\n            for (let c = 0; c < component; c++) {\n              const lineValue: spec.LineKeyframeValue[] = [];\n\n              for (let i = 0; i < inputArray.length; i++) {\n                lineValue.push([\n                  spec.BezierKeyframeType.LINE,\n                  [inputArray[i], outputArray[i * component + c]],\n                ]);\n              }\n\n              const keyFrames: spec.BezierValue = [\n                spec.ValueType.BEZIER_CURVE,\n                lineValue,\n              ];\n\n              clipData.floatCurves?.push({\n                path,\n                className: 'ModelMeshComponent',\n                property: `morphWeights.${c}`,\n                keyFrames,\n              });\n            }\n          } else {\n            const points: spec.vec3[] = [];\n            const controlPoints: spec.vec3[] = [];\n            const lineValue: spec.LineKeyframeValue[] = [];\n\n            for (let i = 0; i < inputArray.length; i++) {\n              points.push([\n                outputArray[i * 3],\n                outputArray[i * 3 + 1],\n                outputArray[i * 3 + 2],\n              ]);\n\n              if (i > 0) {\n                const p0 = Vector3.fromArray(points[i - 1]);\n                const p3 = Vector3.fromArray(points[i]);\n                const p1 = new Vector3().lerpVectors(p0, p3, 1 / 3);\n                const p2 = new Vector3().lerpVectors(p0, p3, 2 / 3);\n\n                controlPoints.push(p1.toArray());\n                controlPoints.push(p2.toArray());\n              }\n\n              lineValue.push([\n                spec.BezierKeyframeType.LINE,\n                [inputArray[i], i],\n              ]);\n            }\n\n            const node = this.treeInfo.getTreeNode(treeItem.id, track.node);\n            const path = this.treeInfo.getNodePath(node.id);\n\n            const keyFrames: spec.BezierCurvePath = [\n              spec.ValueType.BEZIER_CURVE_PATH,\n              [lineValue, points, controlPoints],\n            ];\n\n            if (track.path === 'translation') {\n              clipData.positionCurves?.push({ path, keyFrames });\n            } else {\n              clipData.scaleCurves?.push({ path, keyFrames: keyFrames as unknown as spec.Vector3CurveValue });\n            }\n          }\n        });\n\n        newScene.animations.push(clipData);\n\n        animationComponent.animationClips.push({ id: clipData.id });\n      });\n    }\n    treeItem.components = [];\n    treeItem.components.push({ id: animationComponent.id });\n    newScene.components.push(animationComponent);\n  }\n\n  private getMaterialData (material: spec.MaterialOptions<'json'>, scene: spec.JSONScene) {\n    if (material.type === spec.MaterialType.unlit) {\n      const floats: Record<string, number> = {};\n\n      if (material.alphaCutOff !== undefined) {\n        floats['_AlphaCutoff'] = material.alphaCutOff;\n      }\n      const colors: Record<string, Color> = {\n        '_BaseColorFactor': new Color(\n          material.baseColorFactor[0],\n          material.baseColorFactor[1],\n          material.baseColorFactor[2],\n          material.baseColorFactor[3],\n        ).divide(255),\n      };\n\n      const textures: Record<string, spec.MaterialTextureProperty> = {};\n\n      if (material.baseColorTexture) {\n        textures['_BaseColorSampler'] = this.getTextureData(scene, floats, material.baseColorTexture, material.baseColorTextureTransform);\n      }\n\n      const newMaterial: spec.MaterialData = {\n        id: generateGUID(),\n        name: material.name,\n        dataType: spec.DataType.Material,\n        shader: {\n          id: UnlitShaderGUID,\n        },\n        stringTags: {},\n        macros: [],\n        ints: {},\n        floats,\n        vector4s: {},\n        colors,\n        textures,\n      };\n\n      this.setupMaterial(material, newMaterial);\n\n      return newMaterial;\n    } else {\n      const floats: Record<string, number> = {\n        '_MetallicFactor': material.metallicFactor,\n        '_RoughnessFactor': material.roughnessFactor,\n      };\n\n      if (material.useSpecularAA !== undefined) {\n        floats['_SpecularAA'] = material.useSpecularAA ? 1 : 0;\n      }\n      if (material.normalTextureScale !== undefined) {\n        floats['_NormalScale'] = material.normalTextureScale;\n      }\n      if (material.occlusionTextureStrength !== undefined) {\n        floats['_OcclusionStrength'] = material.occlusionTextureStrength;\n      }\n      if (material.emissiveIntensity !== undefined) {\n        floats['_EmissiveIntensity'] = material.emissiveIntensity;\n      }\n      if (material.alphaCutOff !== undefined) {\n        floats['_AlphaCutoff'] = material.alphaCutOff;\n      }\n      const colors: Record<string, Color> = {\n        '_BaseColorFactor': new Color(\n          material.baseColorFactor[0],\n          material.baseColorFactor[1],\n          material.baseColorFactor[2],\n          material.baseColorFactor[3],\n        ).divide(255),\n        '_EmissiveFactor': new Color(\n          material.emissiveFactor[0],\n          material.emissiveFactor[1],\n          material.emissiveFactor[2],\n          material.emissiveFactor[3],\n        ).divide(255),\n      };\n\n      const textures: Record<string, spec.MaterialTextureProperty> = {};\n\n      if (material.baseColorTexture) {\n        textures['_BaseColorSampler'] = this.getTextureData(scene, floats, material.baseColorTexture, material.baseColorTextureTransform);\n      }\n\n      if (material.metallicRoughnessTexture) {\n        textures['_MetallicRoughnessSampler'] = this.getTextureData(scene, floats, material.metallicRoughnessTexture, material.metallicRoughnessTextureTransform);\n      }\n\n      if (material.normalTexture) {\n        textures['_NormalSampler'] = this.getTextureData(scene, floats, material.normalTexture, material.normalTextureTransform);\n      }\n\n      if (material.occlusionTexture) {\n        textures['_OcclusionSampler'] = this.getTextureData(scene, floats, material.occlusionTexture, material.occlusionTextureTransform);\n      }\n\n      if (material.emissiveTexture) {\n        textures['_EmissiveSampler'] = this.getTextureData(scene, floats, material.emissiveTexture, material.emissiveTextureTransform);\n      }\n\n      const newMaterial: spec.MaterialData = {\n        id: generateGUID(),\n        name: material.name,\n        dataType: spec.DataType.Material,\n        shader: {\n          id: PBRShaderGUID,\n        },\n        stringTags: {},\n        macros: [],\n        ints: {},\n        floats,\n        vector4s: {},\n        colors,\n        textures,\n      };\n\n      this.setupMaterial(material, newMaterial);\n\n      return newMaterial;\n    }\n  }\n\n  private setupMaterial (oldMat: spec.MaterialOptions<'json'>, newMat: spec.MaterialData) {\n    if (oldMat.blending === spec.MaterialBlending.translucent) {\n      newMat.stringTags['RenderType'] = spec.RenderType.Transparent;\n    } else {\n      newMat.stringTags['RenderType'] = spec.RenderType.Opaque;\n    }\n\n    if (oldMat.blending === spec.MaterialBlending.masked) {\n      newMat.floats['AlphaClip'] = 1;\n      newMat.floats['_AlphaCutoff'] = oldMat.alphaCutOff ?? 0;\n    } else {\n      newMat.floats['AlphaClip'] = 0;\n    }\n\n    switch (oldMat.side) {\n      case spec.SideMode.BACK:\n        newMat.stringTags['RenderFace'] = spec.RenderFace.Back;\n\n        break;\n      case spec.SideMode.DOUBLE:\n        newMat.stringTags['RenderFace'] = spec.RenderFace.Both;\n\n        break;\n      default:\n        newMat.stringTags['RenderFace'] = spec.RenderFace.Front;\n    }\n\n    if (oldMat.type === spec.MaterialType.pbr) {\n      newMat.floats['_SpecularAA'] = oldMat.useSpecularAA ? 1 : 0;\n    }\n\n    newMat.floats['ZWrite'] = oldMat.depthMask !== false ? 1 : 0;\n    newMat.floats['ZTest'] = 1;\n  }\n\n  private getTextureData (scene: spec.JSONScene, floats: Record<string, number>, texIndex: number, texTransform?: spec.ModelTextureTransform) {\n    const id = scene.textures![texIndex].id ?? '0';\n    const texProperty: spec.MaterialTextureProperty = {\n      texture: { id },\n    };\n\n    if (texTransform) {\n      if (texTransform.scale) {\n        texProperty.scale = {\n          x: texTransform.scale[0],\n          y: texTransform.scale[1],\n        };\n      }\n      if (texTransform.offset) {\n        texProperty.offset = {\n          x: texTransform.offset[0],\n          y: texTransform.offset[1],\n        };\n      }\n      if (texTransform.rotation) {\n        floats['_BaseColorRotation'] = texTransform.rotation;\n      }\n    }\n\n    return texProperty;\n  }\n\n  private getTransformData (transform?: spec.BaseItemTransform) {\n    const result: spec.TransformData = {\n      position: { x: 0, y: 0, z: 0 },\n      eulerHint: { x: 0, y: 0, z: 0 },\n      scale: { x: 1, y: 1, z: 1 },\n    };\n\n    if (transform?.position) {\n      result.position.x = transform.position[0];\n      result.position.y = transform.position[1];\n      result.position.z = transform.position[2];\n    }\n\n    if (transform?.quat) {\n      // @ts-expect-error\n      result.quat = {};\n      // @ts-expect-error\n      result.quat.x = transform.quat[0];\n      // @ts-expect-error\n      result.quat.y = transform.quat[1];\n      // @ts-expect-error\n      result.quat.z = transform.quat[2];\n      // @ts-expect-error\n      result.quat.w = transform.quat[3];\n    } else if (transform?.rotation) {\n      result.eulerHint.x = transform.rotation[0];\n      result.eulerHint.y = transform.rotation[1];\n      result.eulerHint.z = transform.rotation[2];\n    }\n\n    if (transform?.scale) {\n      result.scale.x = transform.scale[0];\n      result.scale.y = transform.scale[1];\n      result.scale.z = transform.scale[2];\n    }\n\n    return result;\n  }\n\n  private setupBoneData (geom: spec.GeometryData, skin: spec.SkinOptions<'json'>, oldScene: spec.JSONScene, treeItem: spec.VFXItemData, treeNodeList: spec.VFXItemData[]) {\n    const bins = oldScene.bins as unknown as ArrayBuffer[];\n    const { joints, skeleton, inverseBindMatrices } = skin;\n\n    if (!inverseBindMatrices) {\n      throw new Error(`'inverseBindMatrices' is undefined for the skin configuration: ${JSON.stringify(skin)}. Ensure 'inverseBindMatrices' is properly defined in your skin data.`);\n    }\n    const bindMatrixArray = typedArrayFromBinary(bins, inverseBindMatrices) as Float32Array;\n\n    geom.inverseBindMatrices = Array.from(bindMatrixArray);\n\n    const id2Node: Record<string, spec.VFXItemData> = {};\n\n    let rootBoneItem = treeItem;\n\n    if (skeleton !== undefined) {\n      rootBoneItem = treeNodeList[skeleton];\n    } else {\n      console.warn('Root bone is missing for the skeleton. Defaulting to the primary tree item as the root bone.');\n    }\n\n    joints.forEach(joint => {\n      const node = treeNodeList[joint];\n\n      if (node !== rootBoneItem && node.parentId === rootBoneItem.parentId) {\n        console.error('Invalid node detected for \\'rootBoneItem\\'. Adjusting \\'rootBoneItem\\' to the primary tree item. Please verify the tree structure.');\n\n        rootBoneItem = treeItem;\n      }\n    });\n\n    treeNodeList.forEach(node => {\n      id2Node[node.id] = node;\n    });\n\n    geom.rootBoneName = rootBoneItem.name;\n\n    const boneNames: string[] = [];\n\n    joints.forEach(joint => {\n      let currentItem = treeNodeList[joint];\n      const nodeList: string[] = [];\n\n      while (currentItem && currentItem != rootBoneItem) {\n        nodeList.push(currentItem.name);\n        if (currentItem.parentId) {\n          currentItem = id2Node[currentItem.parentId];\n        } else {\n          break;\n        }\n      }\n\n      boneNames.push(nodeList.reverse().join('/'));\n    });\n\n    geom.boneNames = boneNames;\n\n    return rootBoneItem;\n  }\n}\n\nclass TreeInfo {\n  tree2NodeList: Record<string, spec.VFXItemData[]> = {};\n  nodeList2Tree: Record<string, spec.VFXItemData> = {};\n  nodeId2Node: Record<string, spec.VFXItemData> = {};\n  node2Path: Record<string, string> = {};\n\n  add (treeItem: spec.VFXItemData, treeNodeList: spec.VFXItemData[]) {\n    if (this.tree2NodeList[treeItem.id]) {\n      throw new Error(`Duplicate treeItem ID detected: ${treeItem.id}. Ensure each tree item has a unique ID.`);\n    }\n\n    this.tree2NodeList[treeItem.id] = treeNodeList;\n    treeNodeList.forEach(node => {\n      if (this.nodeList2Tree[node.id]) {\n        throw new Error(`Duplicate tree node ID found: ${node.id}. Each node in the tree must have a unique ID.`);\n      }\n      this.nodeList2Tree[node.id] = treeItem;\n      this.nodeId2Node[node.id] = node;\n    });\n\n    treeNodeList.forEach(node => {\n      this.setNodePath(node);\n    });\n  }\n\n  setNodePath (node: spec.VFXItemData) {\n    if (node.parentId) {\n      if (this.node2Path[node.parentId]) {\n        this.node2Path[node.id] = this.node2Path[node.parentId] + '/' + node.name;\n      } else if (this.nodeId2Node[node.parentId]) {\n        this.setNodePath(this.nodeId2Node[node.parentId]);\n        this.node2Path[node.id] = this.node2Path[node.parentId] + '/' + node.name;\n      } else {\n        this.node2Path[node.id] = node.name;\n      }\n    } else {\n      this.node2Path[node.id] = node.name;\n    }\n  }\n\n  getTreeNodeListByTreeId (id: string) {\n    return this.tree2NodeList[id];\n  }\n\n  getTreeNodeListByNodeId (id: string) {\n    const treeItem = this.nodeList2Tree[id];\n\n    if (!treeItem) {\n      throw new Error(`Invalid id ${id}.`);\n    }\n\n    return this.getTreeNodeListByTreeId(treeItem.id);\n  }\n\n  getTreeItemByNodeId (id: string) {\n    return this.nodeList2Tree[id];\n  }\n\n  getTreeNode (treeId: string, nodeIndex: number) {\n    const nodeList = this.getTreeNodeListByTreeId(treeId);\n\n    return nodeList[nodeIndex];\n  }\n\n  getAllTreeNodeList () {\n    const nodeList: spec.VFXItemData[] = [];\n\n    Object.keys(this.tree2NodeList).forEach(key => {\n      nodeList.push(...this.tree2NodeList[key]);\n    });\n\n    return nodeList;\n  }\n\n  getNodePath (id: string) {\n    return this.node2Path[id];\n  }\n}\n\nexport interface ModelData {\n  vertices: spec.TypedArray,\n  uvs: spec.TypedArray,\n  normals: spec.TypedArray,\n  indices: spec.TypedArray,\n  name: string,\n}\n\nexport function getGeometryDataFromOptions (geomOptions: GeometryProps) {\n  let vertexCount = 0;\n  let verticesType: spec.VertexFormatType = spec.VertexFormatType.Float32;\n  let verticesNormalize = false;\n  let uvsType: spec.VertexFormatType = spec.VertexFormatType.Float32;\n  let uvsNormalize = false;\n  let normalsType: spec.VertexFormatType = spec.VertexFormatType.Float32;\n  let normalsNormalize = false;\n  const modelData: ModelData = {\n    vertices: new Float32Array(),\n    uvs: new Float32Array(),\n    normals: new Float32Array(),\n    indices: new Float32Array(),\n    name: geomOptions.name ?? '<empty>',\n  };\n\n  for (const attrib in geomOptions.attributes) {\n    const attribData = geomOptions.attributes[attrib];\n\n    if (attrib === 'aPosition') {\n      // @ts-expect-error\n      vertexCount = attribData.data.length / attribData.size;\n      // @ts-expect-error\n      modelData.vertices = attribData.data;\n      verticesNormalize = attribData.normalize ?? false;\n      verticesType = glType2VertexFormatType(attribData.type ?? glContext.FLOAT);\n    } else if (attrib === 'aNormal') {\n      // @ts-expect-error\n      modelData.normals = attribData.data;\n      normalsNormalize = attribData.normalize ?? false;\n      normalsType = glType2VertexFormatType(attribData.type ?? glContext.FLOAT);\n    } else if (attrib === 'aUV1') {\n      // @ts-expect-error\n      modelData.uvs = attribData.data;\n      uvsNormalize = attribData.normalize ?? false;\n      uvsType = glType2VertexFormatType(attribData.type ?? glContext.FLOAT);\n    }\n  }\n\n  const verticesOffset = getOffset(verticesType, 3, vertexCount);\n  const uvsOffset = getOffset(uvsType, 2, vertexCount);\n  const normalsOffset = getOffset(normalsType, 3, vertexCount);\n\n  if (geomOptions.indices) {\n    modelData.indices = geomOptions.indices.data;\n  } else if (vertexCount <= 65535) {\n    const indices = new Uint16Array(vertexCount);\n\n    for (let i = 0; i < vertexCount; i++) {\n      indices[i] = i;\n    }\n    modelData.indices = indices;\n  } else {\n    const indices = new Uint32Array(vertexCount);\n\n    for (let i = 0; i < vertexCount; i++) {\n      indices[i] = i;\n    }\n    modelData.indices = indices;\n  }\n\n  let indicesType: spec.IndexFormatType = spec.IndexFormatType.UInt16;\n\n  if (modelData.indices.BYTES_PER_ELEMENT === 4) {\n    indicesType = spec.IndexFormatType.UInt32;\n  }\n\n  const geometryData: spec.GeometryData = {\n    id: generateGUID(),\n    dataType: spec.DataType.Geometry,\n    vertexData: {\n      vertexCount: vertexCount,\n      channels: [\n        {\n          semantic: spec.VertexBufferSemantic.Position,\n          offset: 0,\n          format: verticesType,\n          dimension: 3,\n          normalize: verticesNormalize,\n        },\n        {\n          semantic: spec.VertexBufferSemantic.Uv,\n          offset: verticesOffset,\n          format: uvsType,\n          dimension: 2,\n          normalize: uvsNormalize,\n        },\n        {\n          semantic: spec.VertexBufferSemantic.Normal,\n          offset: verticesOffset + uvsOffset,\n          format: normalsType,\n          dimension: 3,\n          normalize: normalsNormalize,\n        },\n      ],\n    },\n    subMeshes: [],\n    mode: spec.GeometryType.TRIANGLES,\n    indexFormat: indicesType,\n    indexOffset: verticesOffset + uvsOffset + normalsOffset,\n    buffer: encodeVertexData(modelData),\n  };\n\n  return geometryData;\n}\n\nexport function getGeometryDataFromPropsList (geomPropsList: GeometryProps[]) {\n  if (geomPropsList.length <= 0) {\n    return;\n  }\n\n  let totalCount = 0;\n  const subMeshes: spec.SubMesh[] = [];\n\n  for (let i = 0; i < geomPropsList.length; i++) {\n    const count = getDrawCount(geomPropsList[i]);\n    const offset = totalCount + (geomPropsList[i].drawStart ?? 0);\n    const scale = geomPropsList[0].indices?.data.BYTES_PER_ELEMENT ?? 1;\n\n    subMeshes.push({ offset: offset * scale, indexCount: count, vertexCount: count });\n    if (i) {\n      const geom0 = geomPropsList[0];\n      const geom1 = geomPropsList[i];\n\n      let isSame = true;\n\n      Object.keys(geom0.attributes).forEach(name => {\n        const attrib = geom0.attributes[name];\n        // @ts-expect-error\n        const array1 = attrib.data as spec.TypedArray;\n        // @ts-expect-error\n        const array2 = geom1.attributes[name].data as spec.TypedArray;\n\n        if (array1.length !== array2.length || array1[0] !== array2[0]) {\n          isSame = false;\n        }\n      });\n\n      if (isSame) {\n        if (geom0.indices && geom1.indices) {\n          geom0.indices.data = mergeTypedArray(geom0.indices.data, geom1.indices.data);\n        }\n      } else {\n        if (geom0.indices && geom1.indices) {\n          const vertexCount = getVertexCount(geom0);\n\n          geom0.indices.data = mergeTypedArray(geom0.indices.data, geom1.indices.data, vertexCount);\n        }\n\n        Object.keys(geom0.attributes).forEach(name => {\n          const attrib = geom0.attributes[name];\n          // @ts-expect-error\n          const array1 = attrib.data as spec.TypedArray;\n          // @ts-expect-error\n          const array2 = geom1.attributes[name].data as spec.TypedArray;\n\n          // @ts-expect-error\n          attrib.data = mergeTypedArray(array1, array2);\n        });\n      }\n\n    }\n    totalCount = offset + count;\n  }\n\n  return createGeometryData(geomPropsList[0], subMeshes);\n}\n\nfunction getOffset (formatType: spec.VertexFormatType, dimension: number, count: number) {\n  switch (formatType) {\n    case spec.VertexFormatType.Int8:\n    case spec.VertexFormatType.UInt8:\n      return dimension * count;\n    case spec.VertexFormatType.Int16:\n    case spec.VertexFormatType.UInt16:\n      return dimension * count * 2;\n    default:\n      return dimension * count * 4;\n  }\n}\n\nfunction createGeometryData (props: GeometryProps, subMeshes: spec.SubMesh[]) {\n  let totalByteLength = 0;\n\n  for (const attrib in props.attributes) {\n    const attribData = props.attributes[attrib];\n\n    // @ts-expect-error\n    totalByteLength += attribData.data.byteLength;\n  }\n\n  if (props.indices) {\n    totalByteLength += props.indices.data.byteLength;\n  }\n\n  let vertexCount = 0;\n  let bufferOffset = 0;\n  const buffer = new Uint8Array(totalByteLength);\n  const vertexChannels: spec.VertexChannel[] = [];\n\n  for (const attrib in props.attributes) {\n    const attribData = props.attributes[attrib];\n    const semantic = vertexBufferSemanticMap[attrib] ?? attrib;\n\n    // @ts-expect-error\n    vertexCount = attribData.data.length / attribData.size;\n    const vertexChannel: spec.VertexChannel = {\n      semantic,\n      offset: bufferOffset,\n      format: glType2VertexFormatType(attribData.type ?? glContext.FLOAT),\n      dimension: attribData.size,\n      normalize: attribData.normalize,\n    };\n\n    vertexChannels.push(vertexChannel);\n    // @ts-expect-error\n    const data = attribData.data as spec.TypedArray;\n    const subBuffer = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n\n    buffer.set(subBuffer, bufferOffset);\n    bufferOffset += subBuffer.byteLength;\n  }\n\n  const geometryData: spec.GeometryData = {\n    id: generateGUID(),\n    dataType: spec.DataType.Geometry,\n    vertexData: {\n      vertexCount: vertexCount,\n      channels: vertexChannels,\n    },\n    subMeshes,\n    mode: spec.GeometryType.TRIANGLES,\n    indexFormat: spec.IndexFormatType.None,\n    indexOffset: 0,\n    buffer: '',\n  };\n\n  if (props.indices) {\n    const indices = props.indices.data;\n    const subBuffer = new Uint8Array(indices.buffer, indices.byteOffset, indices.byteLength);\n\n    buffer.set(subBuffer, bufferOffset);\n    geometryData.indexOffset = bufferOffset;\n    if (indices instanceof Uint32Array) {\n      geometryData.indexFormat = spec.IndexFormatType.UInt32;\n    } else {\n      geometryData.indexFormat = spec.IndexFormatType.UInt16;\n    }\n  }\n\n  geometryData.buffer = toBase64String(buffer);\n\n  return geometryData;\n}\n\nfunction encodeVertexData (modelData: ModelData): string {\n  const vertices = new Uint8Array(modelData.vertices.buffer, modelData.vertices.byteOffset, modelData.vertices.byteLength);\n  const uvs = new Uint8Array(modelData.uvs.buffer, modelData.uvs.byteOffset, modelData.uvs.byteLength);\n  const normals = new Uint8Array(modelData.normals.buffer, modelData.normals.byteOffset, modelData.normals.byteLength);\n  const indices = new Uint8Array(modelData.indices.buffer, modelData.indices.byteOffset, modelData.indices.byteLength);\n\n  // 计算新 ArrayBuffer 的总大小（以字节为单位）\n  const totalSize = vertices.byteLength + uvs.byteLength + normals.byteLength + indices.byteLength;\n\n  // 创建一个足够大的 ArrayBuffer 来存储两个数组的数据\n  const buffer = new ArrayBuffer(totalSize);\n\n  // 创建一个视图来按照 Float32 格式写入数据\n  let floatView = new Uint8Array(buffer, 0, vertices.byteLength);\n\n  floatView.set(vertices);\n  floatView = new Uint8Array(buffer, vertices.byteLength, uvs.byteLength);\n  floatView.set(uvs);\n  floatView = new Uint8Array(buffer, vertices.byteLength + uvs.byteLength, normals.byteLength);\n  floatView.set(normals);\n\n  // 创建一个视图来按照 Uint16 格式写入数据，紧接着 Float32 数据之后\n  const uint16View = new Uint8Array(buffer, vertices.byteLength + uvs.byteLength + normals.byteLength, indices.byteLength);\n\n  uint16View.set(indices);\n\n  // 创建一个 Uint8Array 视图以便逐字节访问 ArrayBuffer 的数据\n  const uint8View = new Uint8Array(buffer);\n\n  // 将 Uint8Array 转换为二进制字符串\n  let binaryString = '';\n\n  for (let i = 0; i < uint8View.length; i++) {\n    binaryString += String.fromCharCode(uint8View[i]);\n  }\n\n  // 使用 btoa 函数将二进制字符串转换为 Base64 编码的字符串\n  return btoa(binaryString);\n}\n\nfunction toBase64String (array: Uint8Array) {\n  // 将 Uint8Array 转换为二进制字符串\n  let binaryString = '';\n\n  for (let i = 0; i < array.length; i++) {\n    binaryString += String.fromCharCode(array[i]);\n  }\n\n  // 使用 btoa 函数将二进制字符串转换为 Base64 编码的字符串\n  return btoa(binaryString);\n}\n\nfunction getDrawCount (geomProps: GeometryProps) {\n  if (geomProps.drawCount) {\n    return geomProps.drawCount;\n  } else if (geomProps.indices) {\n    return geomProps.indices.data.length;\n  } else {\n    let drawCount = 0;\n\n    // @ts-expect-error\n    geomProps.attributes.forEach(attrib => {\n      drawCount = attrib.data.length / attrib.size;\n    });\n\n    return drawCount;\n  }\n}\n\nfunction getVertexCount (geomProps: GeometryProps) {\n  let vertexCount = 0;\n\n  Object.keys(geomProps.attributes).forEach(name => {\n    const attrib = geomProps.attributes[name];\n\n    // @ts-expect-error\n    vertexCount = attrib.data.length / attrib.size;\n  });\n\n  return vertexCount;\n}\n\nfunction mergeTypedArray (array1: spec.TypedArray, array2: spec.TypedArray, offset?: number) {\n  if (array1 instanceof Float32Array) {\n    const result = new Float32Array(array1.length + array2.length);\n\n    result.set(array1);\n    result.set(array2, array1.length);\n\n    return result;\n  } else if (array1 instanceof Int32Array) {\n    const result = new Int32Array(array1.length + array2.length);\n\n    result.set(array1);\n    result.set(array2, array1.length);\n\n    return result;\n  } else if (array1 instanceof Uint32Array) {\n    const result = new Uint32Array(array1.length + array2.length);\n\n    result.set(array1);\n    result.set(array2, array1.length);\n    if (offset) {\n      for (let i = 0; i < array2.length; i++) {\n        result[array1.length + i] += offset;\n      }\n    }\n\n    return result;\n  } else if (array1 instanceof Int16Array) {\n    const result = new Int16Array(array1.length + array2.length);\n\n    result.set(array1);\n    result.set(array2, array1.length);\n\n    return result;\n  } else if (array1 instanceof Uint16Array) {\n    const result = new Uint16Array(array1.length + array2.length);\n\n    result.set(array1);\n    result.set(array2, array1.length);\n    if (offset) {\n      for (let i = 0; i < array2.length; i++) {\n        result[array1.length + i] += offset;\n      }\n    }\n\n    return result;\n  } else if (array1 instanceof Int8Array) {\n    const result = new Int8Array(array1.length + array2.length);\n\n    result.set(array1);\n    result.set(array2, array1.length);\n\n    return result;\n  } else {\n    const result = new Uint8Array(array1.length + array2.length);\n\n    result.set(array1);\n    result.set(array2, array1.length);\n\n    return result;\n  }\n}\n\nconst vertexBufferSemanticMap: Record<string, string> = {\n  aPos: 'POSITION',\n  aUV: 'TEXCOORD0',\n  aUV2: 'TEXCOORD1',\n  aNormal: 'NORMAL',\n  aTangent: 'TANGENT',\n  aColor: 'COLOR',\n  aJoints: 'JOINTS',\n  aWeights: 'WEIGHTS',\n  //\n  a_Position: 'POSITION',\n  a_UV: 'TEXCOORD0',\n  a_UV1: 'TEXCOORD0',\n  a_UV2: 'TEXCOORD1',\n  a_Normal: 'NORMAL',\n  a_Tangent: 'TANGENT',\n  a_Color: 'COLOR',\n  a_Joints: 'JOINTS',\n  a_Joint1: 'JOINTS',\n  a_Weights: 'WEIGHTS',\n  a_Weight1: 'WEIGHTS',\n  //\n  a_Target_Position0: 'POSITION_BS0',\n  a_Target_Position1: 'POSITION_BS1',\n  a_Target_Position2: 'POSITION_BS2',\n  a_Target_Position3: 'POSITION_BS3',\n  a_Target_Position4: 'POSITION_BS4',\n  a_Target_Position5: 'POSITION_BS5',\n  a_Target_Position6: 'POSITION_BS6',\n  a_Target_Position7: 'POSITION_BS7',\n  a_Target_Normal0: 'NORMAL_BS0',\n  a_Target_Normal1: 'NORMAL_BS1',\n  a_Target_Normal2: 'NORMAL_BS2',\n  a_Target_Normal3: 'NORMAL_BS3',\n  a_Target_Tangent0: 'TANGENT_BS0',\n  a_Target_Tangent1: 'TANGENT_BS1',\n  a_Target_Tangent2: 'TANGENT_BS2',\n  a_Target_Tangent3: 'TANGENT_BS3',\n};\n","import { spec, generateGUID, glContext, addItem, loadImage, Transform, Geometry } from '@galacean/effects';\nimport type { TextureSourceOptions, TextureCubeSourceOptionsImageMipmaps, math, TransformProps, Engine, Texture, Attribute } from '@galacean/effects';\nimport type {\n  SkyboxType, LoadSceneOptions, LoadSceneResult, Loader, ModelCamera, ModelLight, ModelSkybox, ModelImageLike,\n} from './protocol';\nimport type {\n  ModelMeshComponentData,\n  ModelSkyboxComponentData,\n  ModelLightComponentData,\n  ModelCameraComponentData,\n  ModelAnimationOptions,\n  ModelAnimTrackOptions,\n  ModelMaterialOptions,\n  ModelSkyboxOptions,\n  ModelTextureTransform,\n} from '../index';\nimport {\n  Vector3, Box3, Euler, PSkyboxCreator, PSkyboxType, UnlitShaderGUID, PBRShaderGUID,\n} from '../runtime';\nimport { LoaderHelper } from './loader-helper';\nimport { WebGLHelper } from '../utility';\nimport type { PImageBufferData, PSkyboxBufferParams, PSkyboxURLParams } from '../runtime/skybox';\nimport type {\n  GLTFMesh, GLTFImage, GLTFMaterial, GLTFTexture, GLTFLight,\n  GLTFCamera, GLTFAnimation, GLTFResources, GLTFImageBasedLight, GLTFPrimitive,\n  GLTFBufferAttribute, GLTFBounds, GLTFTextureInfo,\n} from '@vvfx/resource-detection';\nimport type { CubeImage } from '@vvfx/resource-detection/dist/src/gltf-tools/gltf-image-based-light';\n\nexport interface LoaderOptions {\n  compatibleMode?: 'gltf' | 'tiny3d',\n}\n\nexport function getDefaultEffectsGLTFLoader (engine: Engine, options?: LoaderOptions): Loader {\n  if (!defaultGLTFLoader) {\n    defaultGLTFLoader = new LoaderImpl();\n  }\n\n  (defaultGLTFLoader as LoaderImpl).initial(engine, options);\n\n  return defaultGLTFLoader;\n}\n\nexport function setDefaultEffectsGLTFLoader (loader: Loader): void {\n  defaultGLTFLoader = loader;\n}\n\nlet defaultGLTFLoader: Loader;\n\ntype Box3 = math.Box3;\n\nexport class LoaderImpl implements Loader {\n  private sceneOptions: LoadSceneOptions;\n  private loaderOptions: LoaderOptions;\n  private gltfMeshs: GLTFMesh[] = [];\n  private gltfTextures: GLTFTexture[] = [];\n  private gltfMaterials: GLTFMaterial[] = [];\n  private gltfAnimations: GLTFAnimation[] = [];\n  private gltfImageBasedLights: GLTFImageBasedLight[] = [];\n\n  composition: spec.CompositionData;\n  timelineAssetId: string = '';\n  images: spec.Image[] = [];\n  imageElements: ModelImageLike[] = [];\n  textures: spec.TextureDefine[] = [];\n  items: spec.VFXItemData[] = [];\n  components: spec.ComponentData[] = [];\n  materials: spec.MaterialData[] = [];\n  shaders: spec.ShaderData[] = [];\n  geometries: spec.GeometryData[] = [];\n  animations: spec.AnimationClipData[] = [];\n  sceneAABB = new Box3();\n\n  engine: Engine;\n\n  constructor (composition?: spec.CompositionData) {\n    if (composition) {\n      this.composition = composition;\n    } else {\n      this.timelineAssetId = generateGUID();\n      this.composition = {\n        id: '1',\n        name: 'test1',\n        duration: 99999,\n        endBehavior: spec.EndBehavior.restart,\n        camera: {\n          fov: 45,\n          far: 2000,\n          near: 0.001,\n          position: [0, 0, 8],\n          rotation: [0, 0, 0],\n          clipMode: spec.CameraClipMode.portrait,\n        },\n        //@ts-expect-error\n        items: [],\n        timelineAsset: { id: this.timelineAssetId },\n        sceneBindings: [],\n      };\n    }\n  }\n\n  async loadScene (options: LoadSceneOptions): Promise<LoadSceneResult> {\n    this.clear();\n    this.sceneOptions = options;\n    this.loaderOptions = { compatibleMode: options.gltf.compatibleMode };\n    const gltfResource = options.gltf.resource;\n\n    if (typeof gltfResource === 'string' || gltfResource instanceof Uint8Array) {\n      throw new Error('Please load the resource using GLTFTools first.');\n    }\n\n    this.images = gltfResource.images.map(gltfImage => {\n      const blob = new Blob([gltfImage.imageData.buffer], { type: gltfImage.mimeType ?? 'image/png' });\n\n      return {\n        id: gltfImage.id,\n        url: URL.createObjectURL(blob),\n      };\n    });\n\n    this.imageElements = await Promise.all(this.images.map(async image => {\n      return loadImage(image.url);\n    }));\n\n    this.processGLTFResource(gltfResource, this.imageElements);\n    this.gltfMeshs = gltfResource.meshes;\n    this.gltfTextures = gltfResource.textures;\n    this.gltfMaterials = gltfResource.materials;\n    this.gltfAnimations = gltfResource.animations;\n    this.gltfImageBasedLights = gltfResource.imageBasedLights;\n\n    this.textures = this.gltfTextures.map(texture => {\n      const textureOptions = texture.textureOptions;\n      const source = textureOptions.source;\n\n      if (typeof source === 'number') {\n        textureOptions.source = {\n          id: this.images[source].id,\n        };\n      }\n\n      return textureOptions;\n    });\n    this.materials = this.gltfMaterials.map(material => {\n      return material.materialData;\n    });\n\n    gltfResource.meshes.forEach(mesh => {\n      this.geometries.push(mesh.geometryData);\n    });\n    const gltfScene = gltfResource.scenes[0];\n\n    gltfScene.meshesComponentData.forEach(mesh => this.checkMeshComponentData(mesh, gltfResource));\n\n    this.components.push(...gltfScene.camerasComponentData);\n    this.components.push(...gltfScene.lightsComponentData);\n    this.components.push(...gltfScene.meshesComponentData);\n    if (gltfScene.animationsComponentData.length === 1) {\n      const component = gltfScene.animationsComponentData[0];\n\n      if (!options.effects.playAllAnimation && options.effects.playAnimation !== undefined) {\n        const clips = component.animationClips;\n        const index = options.effects.playAnimation;\n\n        if (index >= 0 && index < clips.length) {\n          component.animationClips = [clips[index]];\n        } else {\n          component.animationClips = [];\n        }\n      }\n      this.components.push(component);\n    } else if (gltfScene.animationsComponentData.length > 1) {\n      throw new Error(`Find many animation component data ${gltfScene.animationsComponentData.length}`);\n    }\n\n    this.animations = [];\n    this.gltfAnimations.forEach(anim => {\n      this.animations.push(anim.animationClipData);\n    });\n\n    this.items = [];\n\n    await this.tryAddSkybox({\n      skyboxType: options.gltf.skyboxType,\n      renderable: options.gltf.skyboxVis,\n    });\n\n    this.items.push(...gltfResource.scenes[0].vfxItemData);\n    this.items.forEach(item => {\n      if (item.type === 'root' as spec.ItemType) {\n        item.type = 'ECS' as spec.ItemType;\n      }\n    });\n\n    return this.getLoadResult();\n  }\n\n  processGLTFResource (resource: GLTFResources, imageElements: ModelImageLike[]): void {\n    const textureDataMap: Record<string, TextureSourceOptions> = {};\n    const { textures, materials, scenes, imageBasedLights } = resource;\n\n    textures.forEach(tex => {\n      const texData = tex.textureOptions;\n      const texId = (texData as unknown as spec.EffectsObjectData).id;\n\n      if (texId) {\n        if (textureDataMap[texId]) {\n          console.error(`Duplicate GUID found: ${texId}, old ${textureDataMap[texId]}, new ${texData}.`);\n        }\n        textureDataMap[texId] = texData;\n      } else {\n        console.error(`No GUID in texture Data: ${texData}.`);\n      }\n    });\n\n    const baseColorIdSet: Set<string> = new Set();\n    const emissiveIdSet: Set<string> = new Set();\n\n    materials.forEach(mat => {\n      const materialData = mat.materialData;\n      const baseColorTexture = materialData.textures['_BaseColorSampler']?.texture;\n      const emissiveTexture = materialData.textures['_EmissiveSampler']?.texture;\n\n      if (baseColorTexture) {\n        baseColorIdSet.add(baseColorTexture.id);\n      }\n      if (emissiveTexture) {\n        emissiveIdSet.add(emissiveTexture.id);\n      }\n    });\n\n    let addTextures = 0;\n    const textureIdMap: Record<string, string> = {};\n\n    for (const baseColorId of baseColorIdSet) {\n      if (emissiveIdSet.has(baseColorId)) {\n        const texData = textures.find(tex => tex.textureOptions.id === baseColorId);\n\n        if (texData) {\n          const newId = generateGUID();\n          const newTexData = texData.clone();\n\n          newTexData.textureOptions.id = newId;\n          textures.push(newTexData);\n          textureDataMap[newId] = newTexData.textureOptions;\n          textureIdMap[baseColorId] = newId;\n          addTextures += 1;\n        }\n      }\n    }\n\n    if (addTextures > 0) {\n      console.warn(`Add base color texture ${addTextures}`);\n    }\n\n    materials.forEach(mat => {\n      const materialData = mat.materialData;\n\n      this.processMaterialData(materialData);\n\n      if (materialData.shader?.id === UnlitShaderGUID) {\n        this.processMaterialTexture(materialData, '_BaseColorSampler', true, textureDataMap, imageElements);\n      } else if (materialData.shader?.id === PBRShaderGUID) {\n        const emissiveTexture = materialData.textures['_EmissiveSampler']?.texture;\n\n        if (emissiveTexture && textureIdMap[emissiveTexture.id]) {\n          emissiveTexture.id = textureIdMap[emissiveTexture.id];\n        }\n\n        this.processMaterialTexture(materialData, '_BaseColorSampler', true, textureDataMap, imageElements);\n        this.processMaterialTexture(materialData, '_MetallicRoughnessSampler', false, textureDataMap, imageElements);\n        this.processMaterialTexture(materialData, '_NormalSampler', false, textureDataMap, imageElements);\n        this.processMaterialTexture(materialData, '_OcclusionSampler', false, textureDataMap, imageElements);\n        this.processMaterialTexture(materialData, '_EmissiveSampler', false, textureDataMap, imageElements);\n      }\n    });\n\n    const gltfScene = scenes[0];\n\n    gltfScene.camerasComponentData.forEach(comp => this.processCameraComponentData(comp));\n    gltfScene.lightsComponentData.forEach(comp => this.processLightComponentData(comp));\n\n    const cubeTextures: TextureSourceOptions[] = [];\n\n    imageBasedLights.forEach(ibl => {\n      const data = ibl.imageBaseLightData;\n\n      if (data.reflectionsIntensity === undefined) {\n        data.reflectionsIntensity = data.intensity;\n      }\n\n      if (data.diffuseImage) {\n        const diffuseTexture = textureDataMap[data.diffuseImage.id];\n\n        addItem(cubeTextures, diffuseTexture);\n      }\n      if (data.specularImage) {\n        const specularImage = textureDataMap[data.specularImage.id];\n\n        addItem(cubeTextures, specularImage);\n      }\n    });\n\n    cubeTextures.forEach(tex => {\n      if (tex.target === glContext.TEXTURE_CUBE_MAP) {\n        const cube = tex as TextureCubeSourceOptionsImageMipmaps;\n\n        cube.mipmaps.forEach(mipmap => {\n          [mipmap[4], mipmap[5]] = [mipmap[5], mipmap[4]];\n        });\n\n        if (cube.mipmaps.length === 1) {\n          cube.minFilter = glContext.LINEAR;\n          cube.magFilter = glContext.LINEAR;\n        } else {\n          cube.minFilter = glContext.LINEAR_MIPMAP_LINEAR;\n          cube.magFilter = glContext.LINEAR;\n        }\n      }\n    });\n  }\n\n  processComponentData (components: spec.EffectComponentData[]): void {\n    components.forEach(comp => {\n      if (comp.dataType === spec.DataType.LightComponent) {\n        this.processLightComponentData(comp as unknown as ModelLightComponentData);\n      } else if (comp.dataType === spec.DataType.CameraComponent) {\n        this.processCameraComponentData(comp as unknown as ModelCameraComponentData);\n      } else if (comp.dataType === spec.DataType.SkyboxComponent) {\n        this.processSkyboxComponentData(comp as unknown as ModelSkyboxComponentData);\n      }\n    });\n  }\n\n  processLightComponentData (light: ModelLightComponentData): void {\n    if (!light.color) {\n      light.color = { r: 1, g: 1, b: 1, a: 1 };\n    }\n\n    if (!light.intensity) {\n      light.intensity = 1;\n    }\n\n    if (light.lightType === spec.LightType.point) {\n      if (!light.range) {\n        light.range = 0;\n      }\n    } else if (light.lightType === spec.LightType.spot) {\n      if (!light.range) {\n        light.range = 0;\n      }\n\n      if (!light.innerConeAngle) {\n        light.innerConeAngle = 0;\n      }\n\n      if (!light.outerConeAngle) {\n        light.outerConeAngle = Math.PI / 4;\n      }\n    }\n  }\n\n  processCameraComponentData (camera: ModelCameraComponentData): void {\n    if (camera.type === spec.CameraType.perspective) {\n      if (camera.fov) {\n        camera.fov *= Math.PI / 180;\n      }\n    }\n  }\n\n  processSkyboxComponentData (skybox: ModelSkyboxComponentData): void {\n    if (skybox.intensity === undefined) {\n      skybox.intensity = 1;\n    }\n\n    if (skybox.reflectionsIntensity === undefined) {\n      skybox.reflectionsIntensity = 1;\n    }\n  }\n\n  processMaterialData (material: spec.MaterialData): void {\n    if (material.shader?.id === UnlitShaderGUID) {\n      if (!material.colors['_BaseColorFactor']) {\n        material.colors['_BaseColorFactor'] = { r: 1, g: 1, b: 1, a: 1 };\n      }\n\n      if (material.floats['_AlphaCutoff'] === undefined) {\n        material.floats['_AlphaCutoff'] = 0;\n      }\n\n      if (material.floats['ZWrite'] === undefined) {\n        material.floats['ZWrite'] = 1;\n      }\n\n      if (material.floats['ZTest'] === undefined) {\n        material.floats['ZTest'] = 1;\n      }\n\n      if (!material.stringTags['RenderType']) {\n        material.stringTags['RenderType'] = spec.RenderType.Opaque;\n      }\n\n      if (!material.stringTags['RenderFace']) {\n        material.stringTags['RenderFace'] = spec.RenderFace.Front;\n      }\n    } else if (material.shader?.id === PBRShaderGUID) {\n      if (!material.colors['_BaseColorFactor']) {\n        material.colors['_BaseColorFactor'] = { r: 1, g: 1, b: 1, a: 1 };\n      }\n\n      if (material.floats['_SpecularAA'] === undefined) {\n        material.floats['_SpecularAA'] = 0;\n      }\n\n      if (material.floats['_MetallicFactor'] === undefined) {\n        material.floats['_MetallicFactor'] = 1;\n      }\n\n      if (material.floats['_RoughnessFactor'] === undefined) {\n        material.floats['_RoughnessFactor'] = 0;\n      }\n\n      if (material.floats['_NormalScale'] === undefined) {\n        material.floats['_NormalScale'] = 1;\n      }\n\n      if (material.floats['_OcclusionStrength'] === undefined) {\n        material.floats['_OcclusionStrength'] = this.isTiny3dMode() ? 0 : 1;\n      }\n\n      if (!material.colors['_EmissiveFactor']) {\n        material.colors['_EmissiveFactor'] = { r: 0, g: 0, b: 0, a: 1 };\n      }\n\n      if (material.floats['_EmissiveIntensity'] === undefined) {\n        material.floats['_EmissiveIntensity'] = 1;\n      }\n\n      if (material.floats['_AlphaCutoff'] === undefined) {\n        material.floats['_AlphaCutoff'] = 0;\n      }\n\n      if (material.floats['ZWrite'] === undefined) {\n        material.floats['ZWrite'] = 1;\n      }\n\n      if (material.floats['ZTest'] === undefined) {\n        material.floats['ZTest'] = 1;\n      }\n\n      if (!material.stringTags['RenderType']) {\n        material.stringTags['RenderType'] = spec.RenderType.Opaque;\n      }\n\n      if (!material.stringTags['RenderFace']) {\n        material.stringTags['RenderFace'] = spec.RenderFace.Front;\n      }\n    } else {\n      console.error(`Encountered unknown shader ID in material with ID: ${material.id}.`);\n    }\n  }\n\n  processTextureOptions (options: TextureSourceOptions, isBaseColor: boolean, image?: ModelImageLike): void {\n    let premultiplyAlpha = false;\n    let minFilter = options.minFilter ?? glContext.LINEAR_MIPMAP_LINEAR;\n\n    if (this.isTiny3dMode()) {\n      minFilter = glContext.LINEAR_MIPMAP_LINEAR;\n      if (image) {\n        if (!WebGLHelper.isPow2(image.width) || !WebGLHelper.isPow2(image.height)) {\n          minFilter = glContext.LINEAR;\n        }\n      }\n\n      premultiplyAlpha = isBaseColor ? false : true;\n    }\n\n    const generateMipmap = minFilter == glContext.NEAREST_MIPMAP_NEAREST\n      || minFilter == glContext.LINEAR_MIPMAP_NEAREST\n      || minFilter == glContext.NEAREST_MIPMAP_LINEAR\n      || minFilter == glContext.LINEAR_MIPMAP_LINEAR;\n\n    options.wrapS = options.wrapS ?? glContext.REPEAT;\n    options.wrapT = options.wrapT ?? glContext.REPEAT;\n    options.magFilter = options.magFilter ?? glContext.LINEAR;\n    options.minFilter = minFilter;\n    options.anisotropic = 1;\n    options.premultiplyAlpha = premultiplyAlpha;\n    options.generateMipmap = generateMipmap;\n  }\n\n  initial (engine: Engine, options?: LoaderOptions) {\n    this.engine = engine;\n    this.loaderOptions = options ?? {};\n  }\n\n  checkMeshComponentData (mesh: ModelMeshComponentData, resource: GLTFResources): void {\n    if (mesh.materials.length <= 0) {\n      throw new Error(`Submesh array is empty for mesh with ID: ${mesh.id}.`);\n    }\n\n    let geometryData: spec.GeometryData | undefined;\n\n    resource.meshes.forEach(meshData => {\n      if (meshData.geometryData.id === mesh.geometry.id) {\n        geometryData = meshData.geometryData;\n      }\n    });\n\n    if (geometryData === undefined) {\n      throw new Error(`Unable to find geometry data for mesh with ID: ${mesh.geometry.id}.`);\n    }\n\n    if (geometryData.subMeshes.length !== mesh.materials.length) {\n      throw new Error(`Mismatch between submeshes count (${geometryData.subMeshes.length}) and materials count (${mesh.materials.length}).`);\n    }\n  }\n\n  processMaterialTexture (material: spec.MaterialData, textureName: string, isBaseColor: boolean, textureDataMap: Record<string, TextureSourceOptions>, imageElements: ModelImageLike[]) {\n    const texture = material.textures[textureName];\n\n    if (texture) {\n      const id = texture.texture.id;\n      const texData = textureDataMap[id];\n      let imageObj: ModelImageLike | undefined;\n\n      // @ts-expect-error\n      if (typeof texData.source !== 'number') {\n        // @ts-expect-error\n        throw new Error(`Invalid texture option source data, ${texData.source}`);\n      } else {\n        // @ts-expect-error\n        imageObj = imageElements[texData.source];\n      }\n      if (texData) {\n        this.processTextureOptions(texData, isBaseColor, imageObj);\n      }\n    }\n  }\n\n  getLoadResult (): LoadSceneResult {\n    const itemIds: spec.DataPath[] = [];\n\n    this.items.forEach(item => itemIds.push({ id: item.id }));\n    //@ts-expect-error\n    this.composition.items = itemIds;\n\n    const jsonScene: spec.JSONScene = {\n      version: spec.JSONSceneVersion['3_0'],\n      playerVersion: {\n        web: '2.0',\n        native: '2.0',\n      },\n      type: 'ge',\n      compositionId: this.composition.id,\n      compositions: [this.composition],\n      images: this.images,\n      plugins: ['model'],\n      textures: this.textures,\n      items: this.items,\n      components: this.components,\n      materials: this.materials,\n      shaders: this.shaders,\n      geometries: this.geometries,\n      animations: this.animations,\n      miscs: [\n        {\n          id: this.timelineAssetId,\n          dataType: spec.DataType.TimelineAsset,\n        },\n      ],\n    };\n\n    const sceneAABB = this.computeSceneAABB();\n\n    return {\n      source: this.getRemarkString(),\n      jsonScene,\n      sceneAABB: {\n        min: sceneAABB.min.toArray(),\n        max: sceneAABB.max.toArray(),\n      },\n    };\n  }\n\n  addLight (data: ModelLight) {\n    const itemId = generateGUID();\n    const component: spec.ModelLightComponentData = {\n      id: generateGUID(),\n      item: { id: itemId },\n      dataType: spec.DataType.LightComponent,\n      //\n      lightType: data.lightType,\n      color: data.color,\n      intensity: data.intensity,\n      range: data.range,\n      innerConeAngle: data.innerConeAngle,\n      outerConeAngle: data.outerConeAngle,\n      followCamera: data.followCamera,\n    };\n    const item: spec.VFXItemData = {\n      id: itemId,\n      name: data.name,\n      duration: data.duration,\n      type: spec.ItemType.light,\n      pn: 0,\n      visible: true,\n      endBehavior: data.endBehavior,\n      transform: {\n        position: {\n          x: data.position[0],\n          y: data.position[1],\n          z: data.position[2],\n        },\n        eulerHint: {\n          x: data.rotation[0],\n          y: data.rotation[1],\n          z: data.rotation[2],\n        },\n        scale: {\n          x: data.scale[0],\n          y: data.scale[1],\n          z: data.scale[2],\n        },\n      },\n      components: [\n        { id: component.id },\n      ],\n      content: {},\n      dataType: spec.DataType.VFXItemData,\n    };\n\n    this.items.push(item);\n    this.components.push(component);\n  }\n\n  addCamera (camera: ModelCamera) {\n    const itemId = generateGUID();\n    const component: spec.ModelCameraComponentData = {\n      id: generateGUID(),\n      item: { id: itemId },\n      dataType: spec.DataType.CameraComponent,\n      fov: camera.fov,\n      near: camera.near,\n      far: camera.far,\n      clipMode: camera.clipMode,\n    };\n    const item: spec.VFXItemData = {\n      id: itemId,\n      name: camera.name,\n      duration: camera.duration,\n      // @ts-expect-error\n      type: 'camera',\n      pn: 0,\n      visible: true,\n      endBehavior: camera.endBehavior,\n      transform: {\n        position: {\n          x: camera.position[0],\n          y: camera.position[1],\n          z: camera.position[2],\n        },\n        eulerHint: {\n          x: camera.rotation[0],\n          y: camera.rotation[1],\n          z: camera.rotation[2],\n        },\n        scale: {\n          x: 1,\n          y: 1,\n          z: 1,\n        },\n      },\n      components: [\n        { id: component.id },\n      ],\n      content: {},\n      dataType: spec.DataType.VFXItemData,\n    };\n\n    this.items.push(item);\n    this.components.push(component);\n  }\n\n  addSkybox (skybox: PSkyboxURLParams) {\n    const itemId = generateGUID();\n    const skyboxInfo = PSkyboxCreator.createSkyboxComponentData(skybox);\n    const { imageList, textureOptionsList, component } = skyboxInfo;\n\n    component.item.id = itemId;\n    if (skybox.intensity !== undefined) {\n      component.intensity = skybox.intensity;\n    }\n    if (skybox.reflectionsIntensity !== undefined) {\n      component.reflectionsIntensity = skybox.reflectionsIntensity;\n    }\n    component.renderable = skybox.renderable ?? false;\n\n    const item: spec.VFXItemData = {\n      id: itemId,\n      name: 'Skybox-Customize',\n      duration: 999,\n      type: spec.ItemType.skybox,\n      pn: 0,\n      visible: true,\n      endBehavior: spec.EndBehavior.freeze,\n      transform: {\n        position: {\n          x: 0,\n          y: 0,\n          z: 0,\n        },\n        eulerHint: {\n          x: 0,\n          y: 0,\n          z: 0,\n        },\n        scale: {\n          x: 1,\n          y: 1,\n          z: 1,\n        },\n      },\n      components: [\n        { id: component.id },\n      ],\n      content: {},\n      dataType: spec.DataType.VFXItemData,\n    };\n\n    this.images.push(...imageList);\n    // @ts-expect-error\n    this.textures.push(...textureOptionsList);\n    this.items.push(item);\n    this.components.push(component);\n  }\n\n  private async tryAddSkybox (skybox: ModelSkybox) {\n    if (this.gltfImageBasedLights.length > 0 && !this.ignoreSkybox()) {\n      const ibl = this.gltfImageBasedLights[0];\n\n      this.components.push(ibl.imageBaseLightData);\n    } else if (skybox.skyboxType !== undefined) {\n      const itemId = generateGUID();\n      const skyboxInfo = this.createSkyboxComponentData(skybox.skyboxType as SkyboxType);\n      const { imageList, textureOptionsList, component } = skyboxInfo;\n\n      component.item.id = itemId;\n      if (skybox.intensity !== undefined) {\n        component.intensity = skybox.intensity;\n      }\n      if (skybox.reflectionsIntensity !== undefined) {\n        component.reflectionsIntensity = skybox.reflectionsIntensity;\n      }\n      component.renderable = skybox.renderable ?? false;\n\n      const item: spec.VFXItemData = {\n        id: itemId,\n        name: `Skybox-${skybox.skyboxType}`,\n        duration: skybox.duration ?? 999,\n        type: spec.ItemType.skybox,\n        pn: 0,\n        visible: true,\n        endBehavior: spec.EndBehavior.freeze,\n        transform: {\n          position: {\n            x: 0,\n            y: 0,\n            z: 0,\n          },\n          eulerHint: {\n            x: 0,\n            y: 0,\n            z: 0,\n          },\n          scale: {\n            x: 1,\n            y: 1,\n            z: 1,\n          },\n        },\n        components: [\n          { id: component.id },\n        ],\n        content: {},\n        dataType: spec.DataType.VFXItemData,\n      };\n\n      this.images.push(...imageList);\n      // @ts-expect-error\n      this.textures.push(...textureOptionsList);\n      this.items.push(item);\n      this.components.push(component);\n    }\n  }\n\n  createSkyboxComponentData (typeName: SkyboxType) {\n    if (typeName !== 'NFT' && typeName !== 'FARM') {\n      throw new Error(`Invalid skybox type specified: '${typeName}'. Valid types are: 'NFT', 'FARM'.`);\n    }\n    //\n    const typ = typeName === 'NFT' ? PSkyboxType.NFT : PSkyboxType.FARM;\n    const params = PSkyboxCreator.getSkyboxParams(typ);\n\n    return PSkyboxCreator.createSkyboxComponentData(params);\n  }\n\n  dispose () {\n    this.clear();\n    // @ts-expect-error\n    this.engine = null;\n  }\n\n  clear () {\n    this.gltfMeshs = [];\n    this.gltfTextures = [];\n    this.gltfMaterials = [];\n    this.gltfAnimations = [];\n    this.gltfImageBasedLights = [];\n\n    this.images = [];\n    this.imageElements = [];\n    this.textures = [];\n    this.items = [];\n    this.components = [];\n    this.materials = [];\n    this.shaders = [];\n    this.geometries = [];\n    this.animations = [];\n  }\n\n  private computeSceneAABB () {\n    const geometryDataMap: Record<string, GLTFMesh> = {};\n\n    this.gltfMeshs.forEach(mesh => {\n      const id = mesh.geometryData.id;\n\n      geometryDataMap[id] = mesh;\n    });\n    const componentDataMap: Record<string, GLTFMesh> = {};\n\n    this.components.forEach(component => {\n      if (component.dataType === spec.DataType.MeshComponent) {\n        const meshComponent = component as spec.ModelMeshComponentData;\n\n        componentDataMap[component.id] = geometryDataMap[meshComponent.geometry.id];\n      }\n    });\n\n    const sceneAABB = new Box3();\n    const parentTransformMap: Record<string, Transform> = {};\n\n    this.items.forEach(item => {\n      const parentId = item.parentId ?? '';\n      const parentTransform = parentTransformMap[parentId] ?? new Transform();\n      const props: TransformProps = {};\n\n      if (item.transform) {\n        props.position = new Vector3().copyFrom(item.transform.position);\n        props.rotation = Euler.fromVector3(item.transform.eulerHint as Vector3);\n        props.scale = new Vector3().copyFrom(item.transform.scale);\n      }\n      const transform = new Transform(props, parentTransform);\n\n      parentTransformMap[item.id] = transform;\n      item.components.forEach(component => {\n        const mesh = componentDataMap[component.id];\n\n        if (mesh && mesh.bounds) {\n          const minPos = Vector3.fromArray(mesh.bounds.box.min);\n          const maxPos = Vector3.fromArray(mesh.bounds.box.max);\n\n          sceneAABB.union(new Box3(minPos, maxPos));\n        }\n      });\n    });\n\n    return sceneAABB;\n  }\n\n  isPlayAnimation (): boolean {\n    return this.sceneOptions.effects.playAnimation !== undefined;\n  }\n\n  isPlayAllAnimation (): boolean {\n    return this.sceneOptions.effects.playAllAnimation === true;\n  }\n\n  getRemarkString (): string {\n    const remark = this.sceneOptions.gltf.remark;\n\n    if (remark === undefined) {\n      return 'Unknown';\n    } else if (typeof remark === 'string') {\n      return remark;\n    } else {\n      return 'BinaryBuffer';\n    }\n  }\n\n  getCompositionDuration () {\n    return this.composition.duration;\n  }\n\n  isTiny3dMode (): boolean {\n    return this.loaderOptions.compatibleMode === 'tiny3d';\n  }\n\n  getItemDuration (): number {\n    return this.sceneOptions.effects.duration ?? 9999;\n  }\n\n  getEndBehavior (): spec.EndBehavior {\n    return this.sceneOptions.effects.endBehavior ?? spec.EndBehavior.restart;\n  }\n\n  getSkyboxType (): PSkyboxType | undefined {\n    const typeName = this.sceneOptions.gltf.skyboxType;\n\n    switch (typeName) {\n      case 'NFT': return PSkyboxType.NFT;\n      case 'FARM': return PSkyboxType.FARM;\n    }\n  }\n\n  isSkyboxVis (): boolean {\n    return this.sceneOptions.gltf.skyboxVis === true;\n  }\n\n  ignoreSkybox (): boolean {\n    return this.sceneOptions.gltf.ignoreSkybox === true;\n  }\n\n  isEnvironmentTest (): boolean {\n    if (typeof this.sceneOptions.gltf.remark === 'string') {\n      return this.sceneOptions.gltf.remark.includes('EnvironmentTest');\n    } else {\n      return false;\n    }\n  }\n\n  /**\n   * for old scene compatibility\n   */\n\n  processLight (lights: GLTFLight[], fromGLTF: boolean): void {\n    lights.forEach(l => {\n      if (l.color === undefined) {\n        if (fromGLTF) { l.color = [255, 255, 255, 255]; } else { l.color = [1, 1, 1, 1]; }\n      } else {\n        l.color[0] = this.scaleColorVal(l.color[0], fromGLTF);\n        l.color[1] = this.scaleColorVal(l.color[1], fromGLTF);\n        l.color[2] = this.scaleColorVal(l.color[2], fromGLTF);\n        l.color[3] = this.scaleColorVal(l.color[3], fromGLTF);\n      }\n    });\n  }\n\n  processCamera (cameras: GLTFCamera[], fromGLTF: boolean): void {\n    const scale = fromGLTF ? 180.0 / Math.PI : Math.PI / 180.0;\n\n    cameras.forEach(camera => {\n      if (camera.perspective !== undefined) {\n        camera.perspective.yfov *= scale;\n      }\n    });\n  }\n\n  processMaterial (materials: GLTFMaterial[], fromGLTF: boolean): void {\n    materials.forEach(mat => {\n      if (mat.baseColorFactor === undefined) {\n        if (fromGLTF) { mat.baseColorFactor = [255, 255, 255, 255]; } else { mat.baseColorFactor = [1, 1, 1, 1]; }\n      } else {\n        mat.baseColorFactor[0] = this.scaleColorVal(mat.baseColorFactor[0], fromGLTF);\n        mat.baseColorFactor[1] = this.scaleColorVal(mat.baseColorFactor[1], fromGLTF);\n        mat.baseColorFactor[2] = this.scaleColorVal(mat.baseColorFactor[2], fromGLTF);\n        mat.baseColorFactor[3] = this.scaleColorVal(mat.baseColorFactor[3], fromGLTF);\n      }\n\n      if (mat.emissiveFactor === undefined) {\n        if (fromGLTF) { mat.emissiveFactor = [255, 255, 255, 255]; } else { mat.emissiveFactor = [1, 1, 1, 1]; }\n      } else {\n        mat.emissiveFactor[0] = this.scaleColorVal(mat.emissiveFactor[0], fromGLTF);\n        mat.emissiveFactor[1] = this.scaleColorVal(mat.emissiveFactor[1], fromGLTF);\n        mat.emissiveFactor[2] = this.scaleColorVal(mat.emissiveFactor[2], fromGLTF);\n        mat.emissiveFactor[3] = this.scaleColorVal(mat.emissiveFactor[3], fromGLTF);\n      }\n\n      if (fromGLTF && mat.occlusionTexture !== undefined && mat.occlusionTexture.strength === undefined) {\n        mat.occlusionTexture.strength = this.isTiny3dMode() ? 0 : 1;\n      }\n    });\n  }\n\n  createAnimations (animations: GLTFAnimation[]): ModelAnimationOptions[] {\n    return animations.map(anim => {\n      const tracks = anim.channels.map(channel => {\n        const track: ModelAnimTrackOptions = {\n          input: channel.input.array as Float32Array,\n          output: channel.output.array as Float32Array,\n          node: channel.target.node,\n          path: channel.target.path,\n          interpolation: channel.interpolation,\n        };\n\n        return track;\n      });\n\n      const newAnim: ModelAnimationOptions = {\n        name: anim.name,\n        tracks: tracks,\n      };\n\n      return newAnim;\n    });\n  }\n\n  createGeometry (primitive: GLTFPrimitive, hasSkinAnim: boolean): Geometry {\n    const proxy = new GeometryProxy(this.engine, primitive, hasSkinAnim);\n\n    return proxy.geometry;\n  }\n\n  createMaterial (material: GLTFMaterial): ModelMaterialOptions {\n    const proxy = new MaterialProxy(material, [], this.isTiny3dMode());\n\n    return proxy.material;\n  }\n\n  createTexture2D (image: GLTFImage, texture: GLTFTexture, isBaseColor: boolean): Promise<Texture> {\n    return WebGLHelper.createTexture2D(this.engine, image, texture, isBaseColor, this.isTiny3dMode());\n  }\n\n  createTextureCube (cubeImages: CubeImage[], level0Size?: number): Promise<Texture> {\n    if (cubeImages.length == 0) { throw new Error(`createTextureCube: Invalid cubeImages length ${cubeImages}`); }\n\n    const mipmaps: PImageBufferData[][] = [];\n\n    cubeImages.forEach(cubeImage => {\n      if (cubeImage.length != 6) { throw new Error(`createTextureCube: cubeimage count should always be 6, ${cubeImage}`); }\n      //\n      const imgList: PImageBufferData[] = [];\n\n      cubeImage.forEach(img => {\n        if (img.imageData === undefined) { throw new Error(`createTextureCube: Invalid image data from ${img}`); }\n        //\n        imgList.push({\n          type: 'buffer',\n          data: img.imageData,\n          mimeType: img.mimeType,\n        });\n      });\n\n      if (this.isTiny3dMode()) {\n        [imgList[4], imgList[5]] = [imgList[5], imgList[4]];\n      }\n\n      mipmaps.push(imgList);\n    });\n    //\n    if (mipmaps.length == 1) {\n      // no mipmaps\n      return WebGLHelper.createTextureCubeFromBuffer(this.engine, mipmaps[0]);\n    } else {\n      // has mipmaps\n      return WebGLHelper.createTextureCubeMipmapFromBuffer(this.engine, mipmaps, level0Size ?? Math.pow(2, mipmaps.length - 1));\n    }\n  }\n\n  createSkybox (ibl: GLTFImageBasedLight): Promise<ModelSkyboxOptions> {\n    const reflectionsIntensity = ibl.reflectionsIntensity ?? ibl.intensity;\n    const irradianceCoeffs = ibl.irradianceCoefficients as number[][];\n    const inSpecularImages = ibl.specularImages as CubeImage[];\n    const specularImages = inSpecularImages.map(images => {\n      const newImages = images.map(img => {\n        const outImg: PImageBufferData = {\n          type: 'buffer',\n          data: img.imageData,\n          mimeType: img.mimeType,\n        };\n\n        return outImg;\n      });\n\n      if (this.isTiny3dMode()) {\n        [newImages[4], newImages[5]] = [newImages[5], newImages[4]];\n      }\n\n      return newImages;\n    });\n    const specularMipCount = specularImages.length - 1;\n    const specularImageSize = ibl.specularImageSize ?? Math.pow(2, specularMipCount);\n\n    const newIrradianceCoeffs: number[] = [];\n\n    irradianceCoeffs.forEach(coeffs => {\n      newIrradianceCoeffs.push(...coeffs);\n    });\n\n    const params: PSkyboxBufferParams = {\n      type: 'buffer',\n      renderable: this.isSkyboxVis(),\n      intensity: ibl.intensity,\n      reflectionsIntensity: reflectionsIntensity,\n      irradianceCoeffs: newIrradianceCoeffs,\n      specularImage: specularImages,\n      specularMipCount: specularMipCount,\n      specularImageSize: specularImageSize,\n    };\n\n    return PSkyboxCreator.createSkyboxOptions(this.engine, params);\n  }\n\n  createDefaultSkybox (typeName: SkyboxType): Promise<ModelSkyboxOptions> {\n    if (typeName !== 'NFT' && typeName !== 'FARM') { throw new Error(`Invalid skybox type name ${typeName}`); }\n    //\n    const typ = typeName === 'NFT' ? PSkyboxType.NFT : PSkyboxType.FARM;\n    const params = PSkyboxCreator.getSkyboxParams(typ);\n\n    return PSkyboxCreator.createSkyboxOptions(this.engine, params);\n  }\n\n  scaleColorVal (val: number, fromGLTF: boolean): number {\n    return fromGLTF ? LoaderHelper.scaleTo255(val) : LoaderHelper.scaleTo1(val);\n  }\n\n  scaleColorVec (vec: number[], fromGLTF: boolean): number[] {\n    return vec.map(val => this.scaleColorVal(val, fromGLTF));\n  }\n}\n\nexport function getPBRShaderProperties (): string {\n  return `\n  _BaseColorSampler (\"基础贴图\", 2D) = \"\" {}\n  _BaseColorFactor (\"基础颜色\", Color) = (1, 1, 1, 1)\n  _MetallicRoughnessSampler (\"金属贴图\", 2D) = \"\" {}\n  _MetallicFactor (\"金属度\", Range(0, 1)) = 1\n  _RoughnessFactor (\"粗糙度\", Range(0, 1)) = 1\n  [Toggle] _SpecularAA (\"高光抗锯齿\", Float) = 0\n  _NormalSampler (\"法线贴图\", 2D) = \"\" {}\n  _NormalScale (\"法线贴图强度\", Range(0, 2)) = 1\n  _OcclusionSampler (\"AO贴图\", 2D) = \"\" {}\n  _OcclusionStrength (\"AO贴图强度\", Range(0, 1)) = 1\n  _EmissiveSampler (\"自发光贴图\", 2D) = \"\" {}\n  _EmissiveIntensity (\"自发光贴图强度\", Float) = 1\n  _EmissiveFactor (\"自发光颜色\", Color) = (0, 0, 0, 1)\n  _AlphaCutoff (\"Alpha裁剪值\", Range(0, 1)) = 0.5\n  `;\n}\n\nexport function getUnlitShaderProperties (): string {\n  return `\n  _BaseColorSampler (\"基础贴图\", 2D) = \"\" {}\n  _BaseColorFactor (\"基础颜色\", Color) = (1, 1, 1, 1)\n  _AlphaCutoff (\"Alpha裁剪值\", Range(0, 1)) = 0.5\n  `;\n}\n\nexport function getDefaultPBRMaterialData (): spec.MaterialData {\n  const material: spec.MaterialData = {\n    'id': '00000000000000000000000000000000',\n    'name': 'PBR Material',\n    'dataType': spec.DataType.Material,\n    'stringTags': {\n      'RenderType': spec.RenderType.Opaque,\n      'RenderFace': 'Front',\n    },\n    'macros': [],\n    'shader': {\n      'id': 'pbr00000000000000000000000000000',\n    },\n    'ints': {\n\n    },\n    'floats': {\n      'ZWrite': 1,\n      'ZTest': 1,\n      '_SpecularAA': 0,\n      '_MetallicFactor': 1,\n      '_RoughnessFactor': 0.0,\n      '_NormalScale': 1,\n      '_OcclusionStrength': 1,\n      '_EmissiveIntensity': 1,\n      '_AlphaCutoff': 0.5,\n    },\n    'vector4s': {\n\n    },\n    'colors': {\n      '_BaseColorFactor': {\n        'r': 1,\n        'g': 1,\n        'b': 1,\n        'a': 1,\n      },\n      '_EmissiveFactor': {\n        'r': 0,\n        'g': 0,\n        'b': 0,\n        'a': 1,\n      },\n    },\n    'textures': {\n\n    },\n  };\n\n  return material;\n}\n\nexport function getDefaultUnlitMaterialData (): spec.MaterialData {\n  const material: spec.MaterialData = {\n    'id': '00000000000000000000000000000000',\n    'name': 'Unlit Material',\n    'dataType': spec.DataType.Material,\n    'stringTags': {\n      'ZWrite': 'true',\n      'ZTest': 'true',\n      'RenderType': spec.RenderType.Opaque,\n      'Cull': 'Front',\n    },\n    'macros': [],\n    'shader': {\n      'id': spec.BuiltinObjectGUID.UnlitShader,\n    },\n    'ints': {\n\n    },\n    'floats': {\n      '_AlphaCutoff': 0.5,\n    },\n    'vector4s': {\n\n    },\n    'colors': {\n      '_BaseColorFactor': {\n        'r': 1,\n        'g': 1,\n        'b': 1,\n        'a': 1,\n      },\n    },\n    'textures': {\n\n    },\n  };\n\n  return material;\n}\n\nclass GeometryProxy {\n\n  constructor (\n    private engine: Engine,\n    private gltfGeometry: GLTFPrimitive,\n    private hasSkinAnimation: boolean) {\n  }\n\n  get geometry (): Geometry {\n    const attributes: Record<string, Attribute> = {};\n\n    if (this.hasPosition) {\n      const attrib = this.positionAttrib;\n\n      attributes['a_Position'] = this._getBufferAttrib(attrib);\n    } else {\n      throw new Error('Position attribute missing');\n    }\n    if (this.hasNormal) {\n      const attrib = this.normalAttrib;\n\n      if (attrib !== undefined) {\n        attributes['a_Normal'] = this._getBufferAttrib(attrib);\n      }\n    }\n    if (this.hasTangent) {\n      const attrib = this.tangentAttrib;\n\n      if (attrib !== undefined) {\n        attributes['a_Tangent'] = this._getBufferAttrib(attrib);\n      }\n    }\n    this.texCoordList.forEach(val => {\n      const attrib = this.texCoordAttrib(val);\n      const attribName = `a_UV${val + 1}`;\n\n      attributes[attribName] = this._getBufferAttrib(attrib);\n    });\n    if (this.hasSkinAnimation) {\n      const jointAttrib = this.jointAttribute;\n\n      if (jointAttrib !== undefined) {\n        attributes['a_Joint1'] = this._getBufferAttrib(jointAttrib);\n      }\n      const weightAttrib = this.weightAttribute;\n\n      if (weightAttrib !== undefined) {\n        attributes['a_Weight1'] = this._getBufferAttrib(weightAttrib);\n      }\n    }\n\n    /**\n     * 设置Morph动画需要的Attribute，主要包括Position，Normal和Tangent\n     */\n    for (let i = 0; i < 8; i++) {\n      const positionAttrib = this.getTargetPosition(i);\n\n      if (positionAttrib !== undefined) {\n        attributes[`a_Target_Position${i}`] = this._getBufferAttrib(positionAttrib);\n      }\n\n      const normalAttrib = this.getTargetNormal(i);\n\n      if (normalAttrib !== undefined) {\n        attributes[`a_Target_Normal${i}`] = this._getBufferAttrib(normalAttrib);\n      }\n\n      const tangentAttrib = this.getTargetTangent(i);\n\n      if (tangentAttrib !== undefined) {\n        attributes[`a_Target_Tangent${i}`] = this._getBufferAttrib(tangentAttrib);\n      }\n    }\n\n    const indexArray = this.indexArray;\n\n    if (indexArray !== undefined) {\n      return Geometry.create(\n        this.engine,\n        {\n          attributes: attributes,\n          indices: { data: indexArray },\n          drawStart: 0,\n          drawCount: indexArray.length,\n          mode: glContext.TRIANGLES,\n        }\n      );\n    } else {\n      return Geometry.create(\n        this.engine,\n        {\n          attributes: attributes,\n          drawStart: 0,\n          drawCount: this.positionAttrib.array.length / 3,\n          mode: glContext.TRIANGLES,\n        }\n      );\n    }\n  }\n\n  private _getBufferAttrib (inAttrib: GLTFBufferAttribute): Attribute {\n    const attrib: spec.AttributeWithData = {\n      type: inAttrib.type,\n      size: inAttrib.itemSize,\n      //stride: inAttrib.stride,\n      //offset: inAttrib.offset,\n      data: inAttrib.array,\n      normalize: inAttrib.normalized,\n    };\n\n    return attrib;\n  }\n\n  get positionAttrib () {\n    return this.gltfGeometry.getPosition();\n  }\n\n  get normalAttrib () {\n    return this.gltfGeometry.getNormal();\n  }\n\n  get tangentAttrib () {\n    return this.gltfGeometry.getTangent();\n  }\n\n  texCoordAttrib (index: number) {\n    return this.gltfGeometry.getTexCoord(index);\n  }\n\n  get jointAttribute () {\n    return this.gltfGeometry.getJoints(0);\n  }\n\n  get weightAttribute () {\n    return this.gltfGeometry.getWeights(0);\n  }\n\n  get hasPosition (): boolean {\n    return this.positionAttrib !== undefined;\n  }\n\n  get hasNormal (): boolean {\n    return this.normalAttrib !== undefined;\n  }\n\n  get hasTangent (): boolean {\n    return this.tangentAttrib !== undefined;\n  }\n\n  get hasTexCoord (): boolean {\n    return this.texCoordCount > 0;\n  }\n\n  get texCoordCount (): number {\n    for (let i = 0; i < 10; i++) {\n      if (this.texCoordAttrib(i) === undefined) { return i; }\n    }\n\n    return 0;\n  }\n\n  get hasJointAttribute (): boolean {\n    return this.jointAttribute !== undefined;\n  }\n\n  get hasWeightAttribute (): boolean {\n    return this.weightAttribute !== undefined;\n  }\n\n  get indexArray (): Uint8Array | Uint16Array | Uint32Array | undefined {\n    if (this.gltfGeometry.indices === undefined) { return undefined; }\n\n    switch (this.gltfGeometry.indices.type) {\n      case WebGLRenderingContext['UNSIGNED_INT']:\n        return this.gltfGeometry.indices.array as Uint32Array;\n      case WebGLRenderingContext['UNSIGNED_SHORT']:\n        return this.gltfGeometry.indices.array as Uint16Array;\n      case WebGLRenderingContext['UNSIGNED_BYTE']:\n        return this.gltfGeometry.indices.array as Uint8Array;\n    }\n\n    return undefined;\n  }\n\n  get indexCount (): number {\n    if (this.gltfGeometry.indices !== undefined) { return this.gltfGeometry.indices.array.length; } else { return 0; }\n  }\n\n  get texCoordList (): number[] {\n    const texCoords: number[] = [];\n\n    for (let i = 0; i < 10; i++) {\n      if (this.texCoordAttrib(i) !== undefined) {\n        texCoords.push(i);\n      } else {\n        break;\n      }\n    }\n\n    return texCoords;\n  }\n\n  getTargetPosition (index: number): GLTFBufferAttribute | undefined {\n    return this.gltfGeometry.getAttribute(`POSITION${index}`);\n  }\n\n  getTargetNormal (index: number): GLTFBufferAttribute | undefined {\n    return this.gltfGeometry.getAttribute(`NORMAL${index}`);\n  }\n\n  getTargetTangent (index: number): GLTFBufferAttribute | undefined {\n    return this.gltfGeometry.getAttribute(`TANGENT${index}`);\n  }\n\n}\n\nclass MaterialProxy {\n  private gltfMaterial: GLTFMaterial;\n  private textures: Texture[];\n  // TODO: 待移除？\n  private tiny3dMode: boolean;\n\n  constructor (material: GLTFMaterial, textures: Texture[], tiny3dMode: boolean) {\n    this.gltfMaterial = material;\n    this.textures = textures;\n    this.tiny3dMode = tiny3dMode;\n  }\n\n  get material (): ModelMaterialOptions {\n    const mat = this.gltfMaterial;\n    const isUnlit = GLTFHelper.isUnlitMaterial(mat);\n\n    let blending = spec.MaterialBlending.opaque;\n\n    switch (mat.alphaMode) {\n      case 'OPAQUE':\n        blending = spec.MaterialBlending.opaque;\n\n        break;\n      case 'MASK':\n        blending = spec.MaterialBlending.masked;\n\n        break;\n      case 'BLEND':\n        blending = spec.MaterialBlending.translucent;\n\n        break;\n    }\n\n    const side = mat.doubleSided ? spec.SideMode.DOUBLE : spec.SideMode.FRONT;\n\n    const enableShadow = false;\n\n    const alphaCutOff = mat.alphaCutOff ?? 0.5;\n\n    const name = mat.name;\n\n    if (isUnlit) {\n      return {\n        name: name,\n        type: spec.MaterialType.unlit,\n        baseColorTexture: this.baseColorTextureObj,\n        baseColorTextureCoordinate: this.baseColorTextureCoord,\n        baseColorTextureTransform: this.baseColorTextureTransfrom,\n        baseColorFactor: this.baseColorFactor,\n        //\n        depthMask: mat.extras?.depthMask,\n        blending: blending,\n        alphaCutOff: alphaCutOff,\n        side: side,\n      };\n    } else {\n      return {\n        name: name,\n        type: spec.MaterialType.pbr,\n        baseColorTexture: this.baseColorTextureObj,\n        baseColorTextureCoordinate: this.baseColorTextureCoord,\n        baseColorTextureTransform: this.baseColorTextureTransfrom,\n        baseColorFactor: this.baseColorFactor,\n        //\n        useSpecularAA: this.getSpecularAA(),\n        //\n        metallicRoughnessTexture: this.metallicRoughnessTextureObj,\n        metallicRoughnessTextureCoordinate: this.metallicRoughnessTextureCoord,\n        metallicRoughnessTextureTransform: this.metallicRoughnessTextureTransfrom,\n        metallicFactor: this.metalicFactor,\n        roughnessFactor: this.roughnessFactor,\n        //\n        normalTexture: this.normalTextureObj,\n        normalTextureCoordinate: this.normalTextureCoord,\n        normalTextureTransform: this.normalTextureTransfrom,\n        normalTextureScale: this.normalTextureScale,\n        //\n        occlusionTexture: this.occlusionTextureObj,\n        occlusionTextureCoordinate: this.occlusionTextureCoord,\n        occlusionTextureTransform: this.occlusionTextureTransfrom,\n        occlusionTextureStrength: this.occlusionTextureStrength,\n        //\n        emissiveTexture: this.emissiveTextureObj,\n        emissiveTextureCoordinate: this.emissiveTextureCoord,\n        emissiveTextureTransform: this.emissiveTextureTransfrom,\n        emissiveFactor: this.emissiveFactor,\n        emissiveIntensity: 1.0,\n        //\n        depthMask: mat.extras?.depthMask,\n        blending: blending,\n        alphaCutOff: alphaCutOff,\n        side: side,\n        enableShadow: enableShadow,\n      };\n    }\n  }\n\n  private getTextureObject (index: number): Texture | undefined {\n    if (index < 0 || index >= this.textures.length) { return; }\n\n    return this.textures[index];\n  }\n\n  getTextureObj (texInfo?: GLTFTextureInfo): Texture | undefined {\n    return texInfo ? this.getTextureObject(texInfo.index) : undefined;\n  }\n\n  getTextureCoord (texInfo?: GLTFTextureInfo): number | undefined {\n    return texInfo ? texInfo.texCoord : undefined;\n  }\n\n  getTextureTransform (texInfo?: GLTFTextureInfo): ModelTextureTransform | undefined {\n    const transform = texInfo?.extensions?.KHR_texture_transform;\n\n    if (transform === undefined) {\n      return;\n    }\n\n    if (transform.offset === undefined && transform.rotation === undefined && transform.scale === undefined) {\n      return;\n    }\n\n    return {\n      offset: transform.offset,\n      rotation: transform.rotation,\n      scale: transform.scale,\n    };\n  }\n\n  get baseColorTextureObj (): Texture | undefined {\n    return this.getTextureObj(this.gltfMaterial.baseColorTexture);\n  }\n\n  get baseColorTextureCoord (): number | undefined {\n    return this.getTextureCoord(this.gltfMaterial.baseColorTexture);\n  }\n\n  get baseColorTextureTransfrom (): ModelTextureTransform | undefined {\n    return this.getTextureTransform(this.gltfMaterial.baseColorTexture);\n  }\n\n  get metallicRoughnessTextureObj (): Texture | undefined {\n    return this.getTextureObj(this.gltfMaterial.metallicRoughnessTexture);\n  }\n\n  get metallicRoughnessTextureCoord (): number | undefined {\n    return this.getTextureCoord(this.gltfMaterial.metallicRoughnessTexture);\n  }\n\n  get metallicRoughnessTextureTransfrom (): ModelTextureTransform | undefined {\n    return this.getTextureTransform(this.gltfMaterial.metallicRoughnessTexture);\n  }\n\n  get normalTextureObj (): Texture | undefined {\n    return this.getTextureObj(this.gltfMaterial.normalTexture);\n  }\n\n  get normalTextureCoord (): number | undefined {\n    return this.getTextureCoord(this.gltfMaterial.normalTexture);\n  }\n\n  get normalTextureTransfrom (): ModelTextureTransform | undefined {\n    return this.getTextureTransform(this.gltfMaterial.normalTexture);\n  }\n\n  get occlusionTextureObj (): Texture | undefined {\n    return this.getTextureObj(this.gltfMaterial.occlusionTexture);\n  }\n\n  get occlusionTextureCoord (): number | undefined {\n    return this.getTextureCoord(this.gltfMaterial.occlusionTexture);\n  }\n\n  get occlusionTextureTransfrom (): ModelTextureTransform | undefined {\n    return this.getTextureTransform(this.gltfMaterial.occlusionTexture);\n  }\n\n  get emissiveTextureObj (): Texture | undefined {\n    return this.getTextureObj(this.gltfMaterial.emissiveTexture);\n  }\n\n  get emissiveTextureCoord (): number | undefined {\n    return this.getTextureCoord(this.gltfMaterial.emissiveTexture);\n  }\n\n  get emissiveTextureTransfrom (): ModelTextureTransform | undefined {\n    return this.getTextureTransform(this.gltfMaterial.emissiveTexture);\n  }\n\n  get hasEmissive (): boolean {\n    const factor = this.emissiveFactor;\n\n    return factor[0] + factor[1] + factor[2] > 0;\n  }\n\n  get baseColorFactor (): [number, number, number, number] {\n    const f = this.gltfMaterial.baseColorFactor;\n\n    if (f === undefined || f.length != 4) { return [1, 1, 1, 1]; } else { return [f[0], f[1], f[2], f[3]]; }\n  }\n\n  getSpecularAA () {\n    return this.gltfMaterial.extras?.useSpecularAA;\n  }\n\n  get metalicFactor (): number {\n    return this.gltfMaterial.metallicFactor ?? 1;\n  }\n\n  get roughnessFactor (): number {\n    return this.gltfMaterial.roughnessFactor ?? 1;\n  }\n\n  get normalTextureScale (): number {\n    return this.gltfMaterial.normalTexture?.scale ?? 1;\n  }\n\n  get occlusionTextureStrength (): number {\n    return this.gltfMaterial.occlusionTexture?.strength ?? 1;\n  }\n\n  get emissiveFactor (): [number, number, number, number] {\n    const f = this.gltfMaterial.emissiveFactor;\n\n    if (f === undefined || f.length != 4) {\n      return [0, 0, 0, 1];\n    } else {\n      return [f[0], f[1], f[2], 1.0];\n    }\n  }\n\n}\n\nclass GLTFHelper {\n  static isUnlitMaterial (mat: GLTFMaterial): boolean {\n    return mat.extensions?.KHR_materials_unlit !== undefined;\n  }\n\n  static createBoxFromGLTFBound (bound: GLTFBounds): Box3 {\n    const boxMin = Vector3.fromArray(bound.box.min as number[]);\n    const boxMax = Vector3.fromArray(bound.box.max as number[]);\n\n    return new Box3(boxMin, boxMax);\n  }\n}\n"],"names":["Vector2","math","Vector3","Vector4","Matrix3","Matrix4","Color","Euler","EulerOrder","Quaternion","Box3","Sphere","Ray","DEG2RAD","LoaderHelper","getTransformFromMat4","mat","transform","getTransform","euler","rotation","toEuler","position","translation","toArray","scale","getEffectsTransformFromMat4","EffectsTransform","valid","cloneFromMatrix","getTransformFromTranslation","t","getTransformFromDirection","d","d0","fromArray","d1","clone","normalize","a","cross","length","b","dot","c","Math","acos","fromRotationAxis","getEffectsTransformFromDirection","getTransformFromTransDir","getEffectsTransformFromTransDir","getEulerFromQuat","q","quat","x","y","z","w","order","ZYX","setFromQuaternion","getQuatFromEuler","e","setFromEuler","toPlayerColor3","color","scaleTo255","toPlayerColor4","val","intVal","max","min","scaleTo1","floatVal","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_async_to_generator","fn","self","args","arguments","apply","err","undefined","_extends","Object","assign","target","i","source","prototype","hasOwnProperty","call","_instanceof","left","right","Symbol","hasInstance","_array_like_to_array","arr","len","arr2","Array","_unsupported_iterable_to_array","o","minLen","n","toString","slice","constructor","name","from","test","_create_for_of_iterator_helper_loose","allowArrayLike","it","iterator","next","bind","isArray","TypeError","__decorate","decorators","desc","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__generator","thisArg","body","_","label","sent","trys","ops","f","g","create","Iterator","verb","v","step","op","pop","push","SuppressedError","suppressed","message","Error","deserializeGeometry","geometryProps","data","attributes","ret","indices","typedArrayFromBinary","index","keys","forEach","attribute","pointer","ctrlMap","i8","Int8Array","u8","Uint8Array","i16","Int16Array","u16","Uint16Array","f32","Float32Array","i32","Int32Array","u32","Uint32Array","binary","spec","ValueType","BINARY","start","byteLength","type","CTRL","BYTES_PER_ELEMENT","_set_prototype_of","p","setPrototypeOf","__proto__","_inherits","subClass","superClass","writable","configurable","_defineProperties","props","descriptor","enumerable","_create_class","Constructor","protoProps","staticProps","PObjectType","PLightType","PTextureType","PMaterialType","PBlendMode","PFaceSideMode","PShadowType","PBRShaderGUID","BuiltinObjectGUID","PBRShader","UnlitShaderGUID","UnlitShader","PTransform","fromMatrix4","matrix","setMatrix","fromEffectsTransform","trans","getWorldMatrix","effectsTrans","setValid","toEffectsTransform","getMatrix","fromBaseTransform","setTranslation","set","setRotation","setScale","getTranslation","getPosition","setPosition","getRotation","getScale","compose","res","PCoordinate","origin","xAxis","yAxis","zAxis","fromPTransform","invert","copyFrom","rotationMatrix","toMatrix4","fromRotationMatrix","me","elements","PGlobalState","isWebGL2","shaderShared","runtimeEnv","PLAYER_OPTIONS_ENV_EDITOR","compatibleMode","visBoundingBox","renderMode3D","RenderMode3D","none","renderMode3DUVGridSize","reset","hasRenderMode3D","getInstance","instance","isEditorEnv","isDeviceEnv","isTiny3dMode","isGLTFMode","objectIndex","PObject","dispose","isNone","isValid","genName","PEntity","_visible","_transform","deleted","update","render","scene","renderer","onVisibleChanged","visible","coordinate","coord","VFX_ITEM_TYPE_3D","_is_native_reflect_construct","result","Boolean","valueOf","construct","_construct","Parent","Class","Function","_get_prototype_of","getPrototypeOf","_is_native_function","indexOf","_wrap_native_super","_cache","Map","has","get","Wrapper","BoxMesh","engine","priority","material","Material","shader","vertex","vertexShader","fragment","fragmentShader","shared","depthTest","depthMask","mesh","Mesh","geometry","Geometry","modelMatrix","viewProjMatrix","positions","lineColor","setVector3","aPos","glContext","FLOAT","size","stride","offset","mode","LINES","drawStart","drawCount","StandardShaderSource","build","features","replace","map","join","ShaderFactory","registerInclude","animationVertGLSL","extensionsFragGLSL","toneMappingFragGLSL","texturesVertGLSL","functionsFragGLSL","shadowFragGLSL","shadowCommonVert","StandardShader","getVertexShaderCode","context","featureList","materialType","unlit","pbr","shadowBase","primitiveVert","skyboxFilter","skyboxVert","getFragmentShaderCode","metallicRoughnessFrag","shadowPassFrag","skyboxFrag","genVertexShaderCode","genFragmentShaderCode","environment","fetchPBRShaderCode","vertexShaderCode","fragmentShaderCode","fetchUnlitShaderCode","getPBRPassShaderCode","getShadowPassShaderCode","getSkyBoxShaderCode","getNormalVisShaderCode","getBasicVS","hasNormals","getSimpleFilterShaderCode","getQuadFilterVS","getGaussianBlurShaderCodeV2","params","hasUVs","TwoStatesSet","now","Set","last","clear","forward","temp","forAddedItem","callbackfn","item","forRemovedItem","forNowItem","ModelPlugin","onAssetsLoadStart","options","CompositionCache","loadStaticResources","onAssetsLoadFinish","pluginData","keyList","storage","env","PluginHelper","preprocessScene","gpuCapability","level","pbrShaderCode","unlitShaderCode","pbrShaderData","id","dataType","DataType","Shader","glslVersion","GLSLVersion","GLSL3","GLSL1","unlitShaderData","addEffectsObjectData","onCompositionCreated","composition","duration","endBehavior","END_BEHAVIOR_FORWARD","VFXItem","addItem","modelPluginComponent","addComponent","ModelPluginComponent","sceneParams","Plugin","renderSkybox","autoAdjustScene","enableDynamicSort","onAwake","cache","setup","PSceneManager","initial","onLateUpdate","dt","tickCount","cameraObject","camera","cameraTransform","getViewMatrix","cameraCoordinate","cameraDirection","cameraFov","fov","cameraAspect","aspect","sceneAABB","getSceneAABB","newAABB","applyMatrix4","newSize","getSize","multiply","newWidth","newHeight","finalHeight","center","getCenter","tan","add","items","component","getComponent","ModelCameraComponent","content","worldMatrix","parentTransform","IDENTITY","invWorldMatrix","newPosition","transformPoint","setTransform","console","updateSceneCamera","tick","onDestroy","componentName","sceneCache","lightItemCount","getLightItemCount","maxJointCount","getMaxJointCount","updateDefaultCamera","getOptions","getViewportMatrix","ModelLightComponent","meshComp","ModelMeshComponent","skin","getSkinProps","boneNames","children","Behaviour","effectsClass","getSceneManager","pluginItem","getItemByName","pluginComp","ModelTreeComponent","fromData","TreeComponent","CameraGestureType","CameraGestureHandlerImp","cameraCoordiante","startParams","mouseEvent","clientX","clientY","clientWidth","clientHeight","updateComposition","getItem","find","getCurrentTarget","getCurrentType","onKeyEvent","event","cameraID","translate","warn","effectsTransfrom","Transform","dir","lengthSquared","speed","pos","rotate_self","onXYMoveBegin","width","height","startGesture","onXYMoving","arg0","moveGesture","onXYMoveEnd","endGesture","onZMoveBegin","onZMoving","onZMoveEnd","onRotateBegin","onRotating","onRotateEnd","onRotatePointBegin","point","rotate_focus","focusPoint","onRotatingPoint","onRotatePointEnd","moveTo","rotateTo","setQuaternion","onFocusPoint","distance","newDistance","targetPoint","lookatDir","newOffset","getCameraTransform","updateCameraTransform","dx","dy","newPos","ndx","ndy","dxAngle","PI","dyAngle","newRotation","fromAxisAngle","Y","tempRotation","rotateMatrix","deltaPosition","subtract","updateMainCamera","cameraOptions","registerPlugin","version","logger","EFFECTS","morphWeights","firstUpdate","getHitTestParams","force","computeBoundingBox","bounding","Number","isInteger","behavior","ModelBoundingType","box","PMesh","customHitTest","HitTestType","custom","clipMasks","frameClipMasks","collect","ray","pointInCanvas","hitTesting","direction","worldMatrixData","RayIntersectsBoxWithRotation","sphere","assignWorldTRS","setFromArray","radius","onStart","sceneManager","createContent","renderOrder","parentId","parent","updateParentInfo","setVisible","onUpdate","materials","subMeshes","subMesh","getEffectsMaterial","lateUpdate","getVisible","maskManager","drawStencilMask","removeItem","rootBone","findObject","interaction","JSON","parse","stringify","bbox","RendererComponent","MeshComponent","ModelSkyboxComponent","skyboxMesh","diffuseImage","specularImage","skyboxData","PSkybox","SkyboxComponent","lightData","PLight","LightComponent","cameraData","getWidth","getHeight","PCamera","near","nearPlane","far","farPlane","CameraComponent","AnimationComponent","elapsedTime","animation","clips","sampleAnimation","animationClips","clipData","clipObj","ModelAnimationClip","animationClip","setFromAnimationClip","path2Node","vfxItem","time","life","positionCurves","curve","keyFrames","getValue","getTargetItem","path","rotationCurves","scaleCurves","floatCurves","className","properties","property","split","setProperty","clip","rootItem","nameList","findTag","child","AnimationClip","obj","current","propName","matrixData","local2World","world2Local","newRay","applyMatrix","boxCenter","boxHalfSize","boxMin","boxMax","intersetPoint","intersectBox","insersetPointInWorld","RayBoxTesting","ro","rd","bmin","bmax","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","diff","edge1","edge2","normal","RayTriangleTesting","backfaceCulling","subtractVectors","crossVectors","DdN","sign","DdQxE2","DdE1xQ","QdN","WebGLHelper","createTexture2D","image","texture","isBaseColor","tiny3dMode","blob","urlCreator","imageUrl","imageObj","imageData","Texture","sourceType","TextureSourceType","Blob","mimeType","window","URL","webkitURL","createObjectURL","Image","src","onload","minFilter","LINEAR_MIPMAP_LINEAR","premultiplyAlpha","isPow2","LINEAR","generateMipmap","NEAREST_MIPMAP_NEAREST","LINEAR_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","wrapS","REPEAT","wrapT","magFilter","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","getTexture","createTextureFromImage","flipY","deleteTexture","deleteMesh","geometries","DestroyOptions","destroy","deleteGeometry","deleteRenderPass","pass","meshes","depthStencilAttachment","RenderPassDestroyAttachmentType","colorAttachment","isTransparentMesh","blending","isSupportFloatTexture","capability","detail","floatTexture","isSupportHalfFloatTexture","halfFloatTexture","CLAMP_TO_EDGE","MeshHelper","createFilterMesh","globalState","getPlaneGeometry","effectsMaterial","setMaterialStates","fromIdentity","getPlaneVertexArray","aUV","dataSource","aNormal","halfSize","createLightOptions","light","intensity","lightType","range","innerConeAngle","outerConeAngle","createCameraOptions","perspective","znear","zfar","yfov","clipMode","toPluginColor3","toPluginColor4","createUVTransform","stName","rotateName","stValue","getVector4","rotateValue","getFloat","cosTheta","cos","sinTheta","sin","transpose","clamp","minv","maxv","round","focusOnPoint","cameraPosition","YRotationAngle","camPos","targetPos","deltaPos","rotationMat","newCamPos","viewMatrix","lookAt","effectsTransform","deviceEnv","jsonScene","dataMap","loadSkybox","preprocessTextureOptions","components","comp","skybox","textureInfo","texId","texOptions","TEXTURE_2D","newOptions","createGeometry","geomJson","bins","geomOptions","attrib","attribData","getAttributeName","getIndexArray","array","WebGLRenderingContext","startsWith","getTextureObj","getImageFileName","ext","begin","lastIndexOf","end","substr","substring","getCurrnetTimeStr","date","Date","timeStr","toLocaleString","ms","getMilliseconds","padStart","saveFileForURL","filename","document","createElement","setAttribute","href","click","createPlayer","manualRender","canvas","Player","renderFramework","renderOptions","willCaptureImage","sleep","setTimeout","loadImageFromGLTFImage","getCanvasArrayBuffer","toBlob","arrayBuffer","getImageArrayBuffer","cvs","getContext","drawImage","getCanvasImageData","ctx","getImageData","flipImageData","flipped","putImageData","globalCompositeOperation","getWebGLCanvasImageBuffer","pixels","readPixels","RGBA","UNSIGNED_BYTE","AttributeArray","typeSize","compCount","signed","compressed","compressScale","inAttrib","inArray","getData","getLength","GeometryBoxProxy","bindMatrices","abs","getDrawCount","getIndexData","positionAttrib","positionArray","getAttributeData","jointAttrib","weightAttrib","jointArray","weightArray","joint","weight","getBoundingBox","makeEmpty","skinMat","hasAnim","indexSet","j","posData","posVec","jointData","weightData","setZero","findError","bindMat","addScaledMatrix","resVec","transformVector4","expandByPoint","HitTestingProxy","doubleSided","hasAnimation","skinMatrix","getHitPoint","rayOrigin","rayDirection","mint","p0","p1","p2","q0","q1","q2","i0","i1","i2","r0","r1","r2","vec3","vec4","Float16ArrayWrapper","number","startIndex","toHalf","bytes","floatView","int32View","buffer","bits","m","TextureDataMode","PSkin","skeleton","jointItem","inverseBindMatrices","animationMatrices","textureDataMode","rootBoneItem","rootBoneName","getJointItems","getTextureDataMode","matList","matrixCount","updateSkinMatrices","node","mat4","computeMeshAnimMatrices","matrixList","normalMatList","inverseWorldMatrix","tempMatrix","localMatrix","multiplyMatrices","normalMat","updateParentItem","parentItem","getJointCount","isTextureDataMode","jointCount","uniformsRequiredForMostFeatures","availableJointUniforms","maxVertexUniforms","uniformsRequiredPerJoint","floor","name2Item","genNodeName","jointItems","boneName","genNodeNameDFS","PMorph","morphWeightsLength","morphWeightsArray","hasPositionMorph","hasNormalMorph","hasTangentMorph","morph","positionCount","getAttributeMorphCount","positionNameList","normalCount","normalNameList","tangentCount","tangentNameList","countList","count","fill","initWeights","weights","updateWeights","hasMorph","equals","getMorphWeightsArray","attributeNameList","PAnimInterpType","PAnimPathType","PAnimTexture","isHalfFloat","HALF_FLOAT","format","NEAREST","updateSource","PShaderManager","funcMap","Helper","shadowFilter","normalVis","simpleFilter","genShaderCode","func","_instance","PMaterialBase","ZWrite","ZTest","renderType","RenderType","Opaque","alphaClip","alphaCutoff","renderFace","RenderFace","Front","getShaderFeatures","isAlphaClip","isOpaque","Both","getShaderMacros","macroList","updateUniforms","renderMode","uv","debugUVGridSize","setFloat","inFeatureList","finalFeatureList","getFeatureList","shaderManager","shaderResult","isEditorEvn","getMacroList","inMacroList","finalMacroList","Transparent","blendEquation","FUNC_ADD","blendFunction","ONE","ONE_MINUS_SRC_ALPHA","setFaceSideStates","isBothSide","culling","isBackSide","cullFace","FRONT","frontFace","CCW","BACK","isTransparent","isFrontSide","Back","PMaterialUnlit","baseColorFactor","effectMaterial","baseColorTexture","baseColorTextureTrans","getColor","stringTags","hasBaseColorTexture","setInt","setMatrix3","getBaseColorTexture","setBaseColorTexture","getBaseColorFactor","setBaseColorFactor","PMaterialPBR","useSpecularAA","metallicFactor","roughnessFactor","normalTextureScale","occlusionTextureStrength","emissiveFactor","emissiveIntensity","metallicRoughnessTexture","metallicRoughnessTextureTrans","normalTexture","normalTextureTrans","occlusionTexture","occlusionTextureTrans","emissiveTexture","emissiveTextureTrans","hasMetallicRoughnessTexture","hasNormalTexture","hasOcclusionTexture","hasEmissiveTexture","hasEmissiveValue","getMetallicRoughnessTexture","setMetallicRoughnessTexture","getNormalTexture","setNormalTexture","getOcclusionTexture","setOcclusionTexture","getEmissiveTexture","setEmissiveTexture","luminance","getEmissiveFactor","setEmissiveFactor","getEmissiveIntensity","setEmissiveIntensity","createPluginMaterial","getInstanceId","materialPBR","materialUnlit","owner","renderable","reflectionsIntensity","specularImageSize","specularMipCount","isBuilt","irradianceCoeffs","brdfLUT","skyboxMaterial","PMaterialSkyboxFilter","getSceneCache","getFilterMesh","updateMaterial","drawGeometry","sceneStates","newProjViewMatrix","getNewProjectionMatrix","available","currentIntensity","currentReflectionsIntensity","hasDiffuseImage","hasIrradianceCoeffs","setVector2","setTexture","coeffs","aliasName","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","dataArray","getSpecularImageListAntFarm","getSpecularImageListNFT","levelList","currentLevel","meshCache","textureCache","geometryCache","renderPassCache","isDestroyed","brdfLutTexOptions","brdfLutTextureName","getOrCreateTexture","newTex","delete","getOrCreateGeometry","cachedGeom","geom","cachedMesh","getRenderPasses","resList","getBrdfLutTexture","getSkyboxOptions","genSkyboxOptions","newParams","deg2rad","viewportMatrix","CameraClipMode","landscape","projectionMatrix","reverse","portrait","premultiply","computeViewAABB","tanTheta","yFarCoord","yNearCoord","xFarCoord","xNearCoord","isReversed","getEye","setEye","PCameraManager","winWidth","winHeight","cameraList","defaultCamera","insert","insertCamera","remove","findResult","findIndex","splice","getCameraList","getDefaultCamera","getCameraCount","getActiveCamera","getAspect","ambient","padding","followCamera","LightType","spot","directional","isDirectional","isPoint","isSpot","isAmbient","getWorldPosition","getWorldDirection","transformNormal","PLightManager","lightList","insertItem","inLight","insertLight","lightCount","_assert_this_initialized","ReferenceError","meshData","parentIndex","hide","boundingBox","isDisposed","proxy","EffectsMeshProxy","getParentIndex","parentItemId","getSkinObj","getMorphObj","isHide","getGeometry","PSubMesh","getItemBoundingBox","prim","maxLightCount","boundingBoxMesh","getEffectsGeometry","updateMorphWeights","weightsArray","updatedArray","normalMatrix","minPos","maxPos","viewProjectionMatrix","newOrigin","newDirection","boxt","primt","subbox","union","inBounding","hs","minVector","maxVector","halfRadius","getParentId","hasSkin","effectsPriority","isCompressed","setGeometry","setMaterial","setHide","jointMatrixList","jointNormalMatList","half_float","jointMatrixTexture","jointNormalMatTexture","hasWeights","hasJoints","primitiveMacroList","materialMacroList","macro","enableMacro","pbrPass","hasTangents","hasUVCoords","outputDefine","getRenderMode3DDefine","nomralMatrix","updateUniformsByAnimation","updateUniformsByScene","animMatrices","isEmpty","basecolor","alpha","metallic","roughness","ao","emissive","diffuse","jointMatrixNumbers","jointNormalMatNumbers","setMatrixNumberArray","setFloats","isUnlitMaterial","inverseViewMatrix","ZERO","PGeometry","getWorldBoundingBox","attributeNames","getAttributeNames","hasAttribute","geomExt","indexArray","setDrawCount","hasPositions","hasColors","itemData","parentComponent","morphObj","hasMorphTarget","getMaterials","getMaterialCount","getSkinOpts","skinObj","compName","itemList","meshList","lightManager","cameraManager","parentId2Mesh","lastTickSecond","sceneAABBCache","renderedMeshSet","opts","clean","initGlobalState","capbility","newTransform","deltaTime","deltaSeconds","activeCamera","winSize","sceneRadius","dynamicSortMeshes","states","meshComponents","priorityList","enabled","sort","atransparent","btransparent","aposition","bposition","anewPos","bnewPos","prePriority","queryMesh","sceneBox","getWorldTransform","meshBox","printDebugInfo","cam","getRenderer","shaderLightCount","JSONConverter","keepIBLData","treeInfo","TreeInfo","downloader","Downloader","processScene","sceneData","sceneJSON","oldScene","oldBinUrls","binFiles","bin","newScene","isObject","loadJSON","getStandardJSON","loadBins","JSONSceneVersion","playerVersion","web","native","compositions","shaders","setImage","setComponent","setItem","setComposition","newImages","newTextures","jobs","loadedMipmaps","newMipmaps","loadMipmapImage","img","sceneImage","dataPath","keepImageSource","sourceFrom","newComponents","createSkyboxComponent","createLightComponent","treeComp","createItemsFromTreeComponent","tree","animations","createMeshComponent","getAllTreeNodeList","compositionId","downloadJSON","status","responseText","downloadBinary","skyboxComponent","meshOptions","geometryPropsList","materialDatas","primitives","geomProps","getMaterialData","oldIndices","newIndices","geometryData","getGeometryDataFromPropsList","meshComponent","treeItem","getTreeItemByNodeId","treeNodeList","getTreeNodeListByNodeId","setupBoneData","treeData","nodes","VFXItemData","delay","renderLevel","pn","pluginName","getTransformData","childItem","subIndex","createAnimationComponent","lightOptions","lightComponent","treeOptions","animationComponent","anim","totalAnimationTime","tracks","track","inputArray","input","outputArray","output","interpolation","points","controlPoints","lineValue","p3","slerpQuaternions","BezierKeyframeType","LINE","getTreeNode","getNodePath","BEZIER_CURVE_QUAT","BEZIER_CURVE","lerpVectors","BEZIER_CURVE_PATH","MaterialType","floats","alphaCutOff","colors","divide","getTextureData","baseColorTextureTransform","newMaterial","macros","ints","vector4s","setupMaterial","metallicRoughnessTextureTransform","normalTextureTransform","occlusionTextureTransform","emissiveTextureTransform","oldMat","newMat","MaterialBlending","translucent","masked","side","SideMode","DOUBLE","texIndex","texTransform","texProperty","eulerHint","joints","bindMatrixArray","id2Node","currentItem","nodeList","tree2NodeList","nodeList2Tree","nodeId2Node","node2Path","setNodePath","getTreeNodeListByTreeId","treeId","nodeIndex","getGeometryDataFromOptions","vertexCount","verticesType","VertexFormatType","Float32","verticesNormalize","uvsType","uvsNormalize","normalsType","normalsNormalize","modelData","vertices","uvs","normals","glType2VertexFormatType","verticesOffset","getOffset","uvsOffset","normalsOffset","indicesType","IndexFormatType","UInt16","UInt32","vertexData","channels","semantic","VertexBufferSemantic","Position","dimension","Uv","Normal","GeometryType","TRIANGLES","indexFormat","indexOffset","encodeVertexData","geomPropsList","totalCount","indexCount","geom0","geom1","isSame","array1","array2","mergeTypedArray","getVertexCount","createGeometryData","formatType","Int8","UInt8","Int16","totalByteLength","bufferOffset","vertexChannels","vertexBufferSemanticMap","vertexChannel","subBuffer","byteOffset","None","toBase64String","totalSize","ArrayBuffer","uint16View","uint8View","binaryString","String","fromCharCode","btoa","aUV2","aTangent","aColor","aJoints","aWeights","a_Position","a_UV","a_UV1","a_UV2","a_Normal","a_Tangent","a_Color","a_Joints","a_Joint1","a_Weights","a_Weight1","a_Target_Position0","a_Target_Position1","a_Target_Position2","a_Target_Position3","a_Target_Position4","a_Target_Position5","a_Target_Position6","a_Target_Position7","a_Target_Normal0","a_Target_Normal1","a_Target_Normal2","a_Target_Normal3","a_Target_Tangent0","a_Target_Tangent1","a_Target_Tangent2","a_Target_Tangent3","getDefaultEffectsGLTFLoader","defaultGLTFLoader","LoaderImpl","setDefaultEffectsGLTFLoader","loader","gltfMeshs","gltfTextures","gltfMaterials","gltfAnimations","gltfImageBasedLights","timelineAssetId","imageElements","EndBehavior","restart","timelineAsset","sceneBindings","loadScene","gltfResource","gltfScene","sceneOptions","loaderOptions","gltf","resource","gltfImage","processGLTFResource","imageBasedLights","materialData","scenes","meshesComponentData","checkMeshComponentData","camerasComponentData","lightsComponentData","animationsComponentData","effects","playAllAnimation","playAnimation","animationClipData","tryAddSkybox","skyboxVis","vfxItemData","getLoadResult","baseColorId","emissiveIdSet","texData","newId","newTexData","textureDataMap","textureIdMap","addTextures","baseColorIdSet","processMaterialData","processMaterialTexture","processCameraComponentData","processLightComponentData","cubeTextures","ibl","imageBaseLightData","diffuseTexture","processComponentData","processSkyboxComponentData","CameraType","processTextureOptions","textureName","itemIds","plugins","miscs","TimelineAsset","computeSceneAABB","getRemarkString","addLight","itemId","ItemType","addCamera","addSkybox","skyboxInfo","freeze","ignoreSkybox","typeName","typ","NFT","FARM","geometryDataMap","componentDataMap","parentTransformMap","fromVector3","bounds","isPlayAnimation","isPlayAllAnimation","remark","getCompositionDuration","getItemDuration","getEndBehavior","getSkyboxType","isSkyboxVis","isEnvironmentTest","includes","processLight","lights","fromGLTF","l","scaleColorVal","processCamera","cameras","processMaterial","strength","createAnimations","channel","newAnim","primitive","hasSkinAnim","GeometryProxy","createMaterial","MaterialProxy","createTextureCube","imgList","createSkybox","irradianceCoefficients","inSpecularImages","specularImages","outImg","newIrradianceCoeffs","createDefaultSkybox","scaleColorVec","vec","getPBRShaderProperties","getUnlitShaderProperties","getDefaultPBRMaterialData","getDefaultUnlitMaterialData","gltfGeometry","hasSkinAnimation","_getBufferAttrib","itemSize","normalized","texCoordAttrib","getTexCoord","getTargetPosition","getAttribute","getTargetNormal","getTargetTangent","hasPosition","hasNormal","normalAttrib","hasTangent","tangentAttrib","texCoordList","attribName","jointAttribute","weightAttribute","getNormal","getTangent","getJoints","getWeights","hasTexCoord","texCoordCount","hasJointAttribute","hasWeightAttribute","texCoords","gltfMaterial","getTextureObject","texInfo","getTextureCoord","texCoord","getTextureTransform","extensions","KHR_texture_transform","getSpecularAA","extras","isUnlit","GLTFHelper","opaque","alphaMode","enableShadow","baseColorTextureObj","baseColorTextureCoordinate","baseColorTextureCoord","baseColorTextureTransfrom","metallicRoughnessTextureObj","metallicRoughnessTextureCoordinate","metallicRoughnessTextureCoord","metallicRoughnessTextureTransfrom","metalicFactor","normalTextureObj","normalTextureCoordinate","normalTextureCoord","normalTextureTransfrom","occlusionTextureObj","occlusionTextureCoordinate","occlusionTextureCoord","occlusionTextureTransfrom","emissiveTextureObj","emissiveTextureCoordinate","emissiveTextureCoord","emissiveTextureTransfrom","hasEmissive","factor","KHR_materials_unlit","createBoxFromGLTFBound","bound"],"mappings":"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"}