@anov/3d 0.0.306 → 0.0.308
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/anov3d.js +68 -2
- package/dist/anov3d.js.map +1 -1
- package/package.json +3 -3
package/dist/anov3d.js
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
var _excluded = ["position"];
|
|
2
2
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
3
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
4
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
5
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
6
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
7
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
8
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
3
9
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
10
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
11
|
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
@@ -11,7 +17,6 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
|
|
|
11
17
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
12
18
|
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
13
19
|
import { MathUtils, SceneControl, Vector3, utils } from '@anov/3d-core';
|
|
14
|
-
import { initPostEffects } from '@anov/3d-ability';
|
|
15
20
|
import EventBus from "./module/eventBus";
|
|
16
21
|
import { object2Vector3 } from "./utils/index";
|
|
17
22
|
import { defaultCameraParams } from "./index";
|
|
@@ -67,7 +72,68 @@ var Anov3D = /*#__PURE__*/function () {
|
|
|
67
72
|
scene.render(opts.container);
|
|
68
73
|
// scene.controls.target.copy(object2Vector3(defaultCameraParams.lookAt))
|
|
69
74
|
scene.controls.target.copy(new Vector3().fromArray(cameraParams.target || [0, 0, 0]));
|
|
70
|
-
|
|
75
|
+
setInterval(function () {
|
|
76
|
+
var info = scene.renderer.info;
|
|
77
|
+
console.table({
|
|
78
|
+
几何体数量: info.memory.geometries,
|
|
79
|
+
纹理数量: info.memory.textures,
|
|
80
|
+
渲染调用: info.render.calls,
|
|
81
|
+
三角面数: info.render.triangles
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
// 运行这段,找出纹理重复和大小分布
|
|
85
|
+
var textureInfo = [];
|
|
86
|
+
var textureMap = new Map(); // url → texture 引用次数
|
|
87
|
+
|
|
88
|
+
scene.scene.traverse(function (obj) {
|
|
89
|
+
if (!obj.isMesh) return;
|
|
90
|
+
var mats = Array.isArray(obj.material) ? obj.material : [obj.material];
|
|
91
|
+
mats.forEach(function (mat) {
|
|
92
|
+
var slots = ['map', 'normalMap', 'roughnessMap', 'metalnessMap', 'aoMap', 'emissiveMap', 'alphaMap', 'lightMap'];
|
|
93
|
+
slots.forEach(function (slot) {
|
|
94
|
+
var tex = mat[slot];
|
|
95
|
+
if (!tex) return;
|
|
96
|
+
var uuid = tex.uuid;
|
|
97
|
+
if (!textureMap.has(uuid)) {
|
|
98
|
+
var _tex$image, _tex$image2, _tex$image3, _tex$image4;
|
|
99
|
+
textureMap.set(uuid, {
|
|
100
|
+
slot: slot,
|
|
101
|
+
name: tex.name || '未命名',
|
|
102
|
+
width: ((_tex$image = tex.image) === null || _tex$image === void 0 ? void 0 : _tex$image.width) || 0,
|
|
103
|
+
height: ((_tex$image2 = tex.image) === null || _tex$image2 === void 0 ? void 0 : _tex$image2.height) || 0,
|
|
104
|
+
count: 0,
|
|
105
|
+
// 估算内存占用 MB(RGBA × w × h)
|
|
106
|
+
memMB: ((((_tex$image3 = tex.image) === null || _tex$image3 === void 0 ? void 0 : _tex$image3.width) || 0) * (((_tex$image4 = tex.image) === null || _tex$image4 === void 0 ? void 0 : _tex$image4.height) || 0) * 4 / 1024 / 1024).toFixed(1)
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
textureMap.get(uuid).count++;
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
// 按内存占用排序
|
|
115
|
+
var sorted = _toConsumableArray(textureMap.values()).sort(function (a, b) {
|
|
116
|
+
return b.memMB - a.memMB;
|
|
117
|
+
});
|
|
118
|
+
console.log('纹理总数:', textureMap.size);
|
|
119
|
+
console.log('Top 20 最大纹理:');
|
|
120
|
+
console.table(sorted.slice(0, 20));
|
|
121
|
+
|
|
122
|
+
// 统计重复引用
|
|
123
|
+
var duplicates = sorted.filter(function (t) {
|
|
124
|
+
return t.count > 1;
|
|
125
|
+
});
|
|
126
|
+
console.log('被多次引用的纹理:', duplicates.length);
|
|
127
|
+
|
|
128
|
+
// 估算总显存
|
|
129
|
+
var totalMem = sorted.reduce(function (sum, t) {
|
|
130
|
+
return sum + parseFloat(t.memMB);
|
|
131
|
+
}, 0);
|
|
132
|
+
console.log("\u4F30\u7B97\u7EB9\u7406\u663E\u5B58: ".concat((totalMem / 1024).toFixed(2), " GB"));
|
|
133
|
+
}, 15000);
|
|
134
|
+
|
|
135
|
+
// initPostEffects(scene.scene, scene.renderer, scene.camera)
|
|
136
|
+
|
|
71
137
|
utils.emitter.emit('scene-completed', scene);
|
|
72
138
|
|
|
73
139
|
// 不考虑 tree-shaking
|
package/dist/anov3d.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MathUtils","SceneControl","Vector3","utils","initPostEffects","EventBus","object2Vector3","defaultCameraParams","Anov3D","opts","_camera$limit","_classCallCheck","_defineProperty","_opts$camera","camera","_opts$container","container","clientWidth","clientHeight","defaultPosition","position","defaultRest","_objectWithoutProperties","_excluded","limit","pitch","min","max","Math","cameraParams","_objectSpread","fromArray","orbitControls","scene","defCameraOps","aspect","rendererOps","shadowMap","reset","css2DRenderer","css3DRenderer","ambientLight","render","controls","target","copy","renderer","emitter","emit","sceneControl","eventBus","storeManagement","set","_createClass","key","value","getOrbitControls","params","yaw","distance","length","minPolarAngle","degToRad","maxPolarAngle","minAzimuthAngle","maxAzimuthAngle","minDistance","maxDistance"],"sources":["../src/anov3d.ts"],"sourcesContent":["import { MathUtils, SceneControl, Vector3, utils } from '@anov/3d-core'\nimport { initPostEffects } from '@anov/3d-ability'\nimport EventBus from './module/eventBus'\nimport { object2Vector3 } from './utils/index'\nimport type { InitOptions } from './applicationApiType'\nimport { defaultCameraParams } from './index'\n\ntype Anov3DOptions = {\n container: HTMLElement\n camera?: InitOptions['camera']\n}\n\nclass Anov3D {\n zoomRatio = 1\n opts: Anov3DOptions\n sceneControl: SceneControl\n eventBus: EventBus\n\n constructor(opts: Anov3DOptions) {\n this.opts = opts\n\n // 获取默认和传入的相机参数\n const { camera = {}, container: { clientWidth, clientHeight } } = opts\n const { position: defaultPosition, ...defaultRest } = defaultCameraParams\n\n // 俯仰角转换,SCC取值范围是-90-90,转换到0-180\n if (camera.limit?.pitch) {\n const { pitch } = camera.limit\n const min = 90 - pitch[0]\n const max = 90 - pitch[1]\n camera.limit.pitch = [Math.min(min, max), Math.max(min, max)]\n }\n // 初始化相机参数\n const cameraParams = {\n limit: {},\n ...defaultRest,\n ...camera,\n position: camera.position ? new Vector3().fromArray(camera.position) : object2Vector3(defaultPosition),\n }\n // const orbitControls = this.getOrbitControls(cameraParams.limit) // 控制器参数\n const orbitControls = { limit: cameraParams.limit } // 控制器参数\n const scene = new SceneControl({\n defCameraOps: {\n ...cameraParams,\n aspect: clientWidth / clientHeight,\n },\n rendererOps: {\n shadowMap: true,\n },\n orbitControls,\n reset: true,\n css2DRenderer: true,\n css3DRenderer: true,\n ambientLight: true,\n })\n scene.render(opts.container)\n // scene.controls.target.copy(object2Vector3(defaultCameraParams.lookAt))\n scene.controls.target!.copy(new Vector3().fromArray(cameraParams.target! || [0, 0, 0]))\n\n initPostEffects(scene.scene, scene.renderer, scene.camera)\n\n utils.emitter.emit('scene-completed', scene)\n\n // 不考虑 tree-shaking\n this.sceneControl = scene\n this.eventBus = new EventBus(this as any)\n\n utils.storeManagement.set('event-bus', this.eventBus)\n utils.emitter.emit('instantiation-completed', this)\n }\n\n getOrbitControls(params: { pitch?: number[]\n yaw?: number[]\n distance?: number[] }) {\n const { pitch, yaw, distance } = params\n const orbitControls: any = {}\n if (pitch?.length > 1) {\n orbitControls.minPolarAngle = MathUtils.degToRad(pitch[0])\n orbitControls.maxPolarAngle = MathUtils.degToRad(pitch[1])\n }\n if (yaw?.length > 1) {\n orbitControls.minAzimuthAngle = MathUtils.degToRad(yaw[0])\n orbitControls.maxAzimuthAngle = MathUtils.degToRad(yaw[1])\n }\n if (distance?.length > 1) {\n orbitControls.minDistance = distance[0]\n orbitControls.maxDistance = distance[1]\n }\n return orbitControls\n }\n}\n\nexport default Anov3D"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["MathUtils","SceneControl","Vector3","utils","EventBus","object2Vector3","defaultCameraParams","Anov3D","opts","_camera$limit","_classCallCheck","_defineProperty","_opts$camera","camera","_opts$container","container","clientWidth","clientHeight","defaultPosition","position","defaultRest","_objectWithoutProperties","_excluded","limit","pitch","min","max","Math","cameraParams","_objectSpread","fromArray","orbitControls","scene","defCameraOps","aspect","rendererOps","shadowMap","reset","css2DRenderer","css3DRenderer","ambientLight","render","controls","target","copy","setInterval","info","renderer","console","table","几何体数量","memory","geometries","纹理数量","textures","渲染调用","calls","三角面数","triangles","textureInfo","textureMap","Map","traverse","obj","isMesh","mats","Array","isArray","material","forEach","mat","slots","slot","tex","uuid","has","_tex$image","_tex$image2","_tex$image3","_tex$image4","set","name","width","image","height","count","memMB","toFixed","get","sorted","_toConsumableArray","values","sort","a","b","log","size","slice","duplicates","filter","t","length","totalMem","reduce","sum","parseFloat","concat","emitter","emit","sceneControl","eventBus","storeManagement","_createClass","key","value","getOrbitControls","params","yaw","distance","minPolarAngle","degToRad","maxPolarAngle","minAzimuthAngle","maxAzimuthAngle","minDistance","maxDistance"],"sources":["../src/anov3d.ts"],"sourcesContent":["import { MathUtils, SceneControl, Vector3, utils } from '@anov/3d-core'\nimport { initPostEffects } from '@anov/3d-ability'\nimport EventBus from './module/eventBus'\nimport { object2Vector3 } from './utils/index'\nimport type { InitOptions } from './applicationApiType'\nimport { defaultCameraParams } from './index'\n\ntype Anov3DOptions = {\n container: HTMLElement\n camera?: InitOptions['camera']\n}\n\nclass Anov3D {\n zoomRatio = 1\n opts: Anov3DOptions\n sceneControl: SceneControl\n eventBus: EventBus\n\n constructor(opts: Anov3DOptions) {\n this.opts = opts\n\n // 获取默认和传入的相机参数\n const { camera = {}, container: { clientWidth, clientHeight } } = opts\n const { position: defaultPosition, ...defaultRest } = defaultCameraParams\n\n // 俯仰角转换,SCC取值范围是-90-90,转换到0-180\n if (camera.limit?.pitch) {\n const { pitch } = camera.limit\n const min = 90 - pitch[0]\n const max = 90 - pitch[1]\n camera.limit.pitch = [Math.min(min, max), Math.max(min, max)]\n }\n // 初始化相机参数\n const cameraParams = {\n limit: {},\n ...defaultRest,\n ...camera,\n position: camera.position ? new Vector3().fromArray(camera.position) : object2Vector3(defaultPosition),\n }\n // const orbitControls = this.getOrbitControls(cameraParams.limit) // 控制器参数\n const orbitControls = { limit: cameraParams.limit } // 控制器参数\n const scene = new SceneControl({\n defCameraOps: {\n ...cameraParams,\n aspect: clientWidth / clientHeight,\n },\n rendererOps: {\n shadowMap: true,\n },\n orbitControls,\n reset: true,\n css2DRenderer: true,\n css3DRenderer: true,\n ambientLight: true,\n })\n scene.render(opts.container)\n // scene.controls.target.copy(object2Vector3(defaultCameraParams.lookAt))\n scene.controls.target!.copy(new Vector3().fromArray(cameraParams.target! || [0, 0, 0]))\n\n setInterval(() => {\n const info = scene.renderer.info\n console.table({\n 几何体数量: info.memory.geometries,\n 纹理数量: info.memory.textures,\n 渲染调用: info.render.calls,\n 三角面数: info.render.triangles,\n })\n\n // 运行这段,找出纹理重复和大小分布\n const textureInfo = []\n const textureMap = new Map() // url → texture 引用次数\n\n scene.scene.traverse((obj) => {\n if (!obj.isMesh)\n return\n const mats = Array.isArray(obj.material) ? obj.material : [obj.material]\n\n mats.forEach((mat) => {\n const slots = [\n 'map', 'normalMap', 'roughnessMap', 'metalnessMap',\n 'aoMap', 'emissiveMap', 'alphaMap', 'lightMap',\n ]\n slots.forEach((slot) => {\n const tex = mat[slot]\n if (!tex)\n return\n\n const uuid = tex.uuid\n if (!textureMap.has(uuid)) {\n textureMap.set(uuid, {\n slot,\n name: tex.name || '未命名',\n width: tex.image?.width || 0,\n height: tex.image?.height || 0,\n count: 0,\n // 估算内存占用 MB(RGBA × w × h)\n memMB: ((tex.image?.width || 0) * (tex.image?.height || 0) * 4 / 1024 / 1024).toFixed(1),\n })\n }\n textureMap.get(uuid).count++\n })\n })\n })\n\n // 按内存占用排序\n const sorted = [...textureMap.values()]\n .sort((a, b) => b.memMB - a.memMB)\n\n console.log('纹理总数:', textureMap.size)\n console.log('Top 20 最大纹理:')\n console.table(sorted.slice(0, 20))\n\n // 统计重复引用\n const duplicates = sorted.filter(t => t.count > 1)\n console.log('被多次引用的纹理:', duplicates.length)\n\n // 估算总显存\n const totalMem = sorted.reduce((sum, t) => sum + parseFloat(t.memMB), 0)\n console.log(`估算纹理显存: ${(totalMem / 1024).toFixed(2)} GB`)\n }, 15000)\n\n // initPostEffects(scene.scene, scene.renderer, scene.camera)\n\n utils.emitter.emit('scene-completed', scene)\n\n // 不考虑 tree-shaking\n this.sceneControl = scene\n this.eventBus = new EventBus(this as any)\n\n utils.storeManagement.set('event-bus', this.eventBus)\n utils.emitter.emit('instantiation-completed', this)\n }\n\n getOrbitControls(params: { pitch?: number[]\n yaw?: number[]\n distance?: number[] }) {\n const { pitch, yaw, distance } = params\n const orbitControls: any = {}\n if (pitch?.length > 1) {\n orbitControls.minPolarAngle = MathUtils.degToRad(pitch[0])\n orbitControls.maxPolarAngle = MathUtils.degToRad(pitch[1])\n }\n if (yaw?.length > 1) {\n orbitControls.minAzimuthAngle = MathUtils.degToRad(yaw[0])\n orbitControls.maxAzimuthAngle = MathUtils.degToRad(yaw[1])\n }\n if (distance?.length > 1) {\n orbitControls.minDistance = distance[0]\n orbitControls.maxDistance = distance[1]\n }\n return orbitControls\n }\n}\n\nexport default Anov3D"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anov/3d",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.308",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "",
|
|
6
6
|
"license": "MIT",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"rxjs": "7.8.1",
|
|
30
30
|
"three-mesh-bvh": "^0.9.0",
|
|
31
31
|
"uuid": "^9.0.1",
|
|
32
|
-
"@anov/3d-
|
|
33
|
-
"@anov/3d-
|
|
32
|
+
"@anov/3d-core": "^0.0.95",
|
|
33
|
+
"@anov/3d-ability": "^0.0.158"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/uuid": "^9.0.7",
|