@hatiolab/figure-model 0.1.76 → 0.1.77
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/CHANGELOG.md +11 -0
- package/README.md +60 -138
- package/dist/index.d.ts +1 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -26
- package/dist/index.js.map +1 -1
- package/dist/v3-asset-types.d.ts +1 -2
- package/dist/v3-asset-types.d.ts.map +1 -1
- package/dist/v3-asset.js +1 -1
- package/dist/v3-asset.js.map +1 -1
- package/dist/v3-authoring-actions.d.ts +9 -12
- package/dist/v3-authoring-actions.d.ts.map +1 -1
- package/dist/v3-authoring-actions.js +4 -5
- package/dist/v3-authoring-actions.js.map +1 -1
- package/dist/v3-capabilities.js +4 -1
- package/dist/v3-capabilities.js.map +1 -1
- package/dist/v3-cost.d.ts.map +1 -1
- package/dist/v3-cost.js +3 -5
- package/dist/v3-cost.js.map +1 -1
- package/dist/v3-create.d.ts +1 -1
- package/dist/v3-create.d.ts.map +1 -1
- package/dist/v3-examples.js +1 -1
- package/dist/v3-gate.d.ts +7 -8
- package/dist/v3-gate.d.ts.map +1 -1
- package/dist/v3-gate.js +11 -14
- package/dist/v3-gate.js.map +1 -1
- package/dist/v3-graph.d.ts +1 -2
- package/dist/v3-graph.d.ts.map +1 -1
- package/dist/v3-graph.js +5 -7
- package/dist/v3-graph.js.map +1 -1
- package/dist/v3-instance-size.d.ts +3 -5
- package/dist/v3-instance-size.d.ts.map +1 -1
- package/dist/v3-instance-size.js +2 -4
- package/dist/v3-instance-size.js.map +1 -1
- package/dist/v3-kernel-version.d.ts +1 -1
- package/dist/v3-kernel-version.js +1 -1
- package/dist/v3-part-edit.d.ts +4 -5
- package/dist/v3-part-edit.d.ts.map +1 -1
- package/dist/v3-part-edit.js +2 -2
- package/dist/v3-part-edit.js.map +1 -1
- package/dist/v3-proposal.js +1 -1
- package/dist/v3-proposal.js.map +1 -1
- package/dist/v3-release-contract.js +1 -1
- package/dist/v3-release-contract.js.map +1 -1
- package/dist/v3-score.d.ts +4 -5
- package/dist/v3-score.d.ts.map +1 -1
- package/dist/v3-score.js +7 -8
- package/dist/v3-score.js.map +1 -1
- package/dist/v3-words.d.ts +87 -0
- package/dist/v3-words.d.ts.map +1 -0
- package/dist/v3-words.js +87 -0
- package/dist/v3-words.js.map +1 -0
- package/docs/assembly-constraints-v3.md +13 -23
- package/docs/v3-asset-persistence.md +4 -4
- package/docs/v3-common-kernel-experiment.md +1 -1
- package/docs/v3-core-semantics.md +3 -3
- package/docs/v3-cutover.md +5 -3
- package/docs/v3-design.md +13 -26
- package/docs/v3-editor-integration.md +2 -2
- package/docs/v3-full-conveyor-validation.md +3 -3
- package/docs/v3-layout-system.md +1 -1
- package/docs/v3-minimal-model.md +0 -1
- package/docs/v3-motion-contract.md +21 -56
- package/docs/v3-runtime-extraction.md +7 -7
- package/docs/v3-sample-validation-expanded.md +1 -1
- package/docs/v3-sample-validation.md +1 -1
- package/docs/v3-shape-dimension-contract.md +23 -57
- package/docs/v3-status.md +5 -5
- package/docs/v3-storage-integration.md +4 -4
- package/package.json +2 -20
- package/dist/blueprint-shape.d.ts +0 -10
- package/dist/blueprint-shape.d.ts.map +0 -1
- package/dist/blueprint-shape.js +0 -194
- package/dist/blueprint-shape.js.map +0 -1
- package/dist/blueprint.d.ts +0 -73
- package/dist/blueprint.d.ts.map +0 -1
- package/dist/blueprint.js +0 -388
- package/dist/blueprint.js.map +0 -1
- package/dist/cost-chart.d.ts +0 -35
- package/dist/cost-chart.d.ts.map +0 -1
- package/dist/cost-chart.js +0 -150
- package/dist/cost-chart.js.map +0 -1
- package/dist/cost.d.ts +0 -162
- package/dist/cost.d.ts.map +0 -1
- package/dist/cost.js +0 -194
- package/dist/cost.js.map +0 -1
- package/dist/gate.d.ts +0 -65
- package/dist/gate.d.ts.map +0 -1
- package/dist/gate.js +0 -284
- package/dist/gate.js.map +0 -1
- package/dist/grouping.d.ts +0 -121
- package/dist/grouping.d.ts.map +0 -1
- package/dist/grouping.js +0 -224
- package/dist/grouping.js.map +0 -1
- package/dist/keys.d.ts +0 -45
- package/dist/keys.d.ts.map +0 -1
- package/dist/keys.js +0 -84
- package/dist/keys.js.map +0 -1
- package/dist/origin.d.ts +0 -33
- package/dist/origin.d.ts.map +0 -1
- package/dist/origin.js +0 -46
- package/dist/origin.js.map +0 -1
- package/dist/release-contract.d.ts +0 -38
- package/dist/release-contract.d.ts.map +0 -1
- package/dist/release-contract.js +0 -246
- package/dist/release-contract.js.map +0 -1
- package/dist/sizing.d.ts +0 -231
- package/dist/sizing.d.ts.map +0 -1
- package/dist/sizing.js +0 -550
- package/dist/sizing.js.map +0 -1
- package/dist/types.d.ts +0 -1233
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -547
- package/dist/types.js.map +0 -1
- package/dist/v3-from-v2.d.ts +0 -203
- package/dist/v3-from-v2.d.ts.map +0 -1
- package/dist/v3-from-v2.js +0 -2053
- package/dist/v3-from-v2.js.map +0 -1
- package/dist/v3-mesh-compare.d.ts +0 -24
- package/dist/v3-mesh-compare.d.ts.map +0 -1
- package/dist/v3-mesh-compare.js +0 -55
- package/dist/v3-mesh-compare.js.map +0 -1
- package/dist/validate.d.ts +0 -7
- package/dist/validate.d.ts.map +0 -1
- package/dist/validate.js +0 -1119
- package/dist/validate.js.map +0 -1
- package/dist/visual-evidence.d.ts +0 -21
- package/dist/visual-evidence.d.ts.map +0 -1
- package/dist/visual-evidence.js +0 -52
- package/dist/visual-evidence.js.map +0 -1
- package/docs/design.md +0 -193
- package/docs/format-survey.md +0 -108
- package/docs/format.md +0 -704
- package/docs/sizing.md +0 -183
- package/docs/validation.md +0 -357
package/dist/blueprint.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"blueprint.js","sourceRoot":"","sources":["../src/blueprint.ts"],"names":[],"mappings":"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"}
|
package/dist/cost-chart.d.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 원가 추이 — 인스턴스가 1 개에서 10,000 개로 갈 때 무엇이 늘고 무엇이 그대로인가.
|
|
3
|
-
*
|
|
4
|
-
* 표 하나로는 그 대비가 안 보인다. **같은 그림 안에서 오르는 선과 평평한 선을 함께
|
|
5
|
-
* 봐야** 「재활용된다」는 말이 눈에 들어온다.
|
|
6
|
-
*
|
|
7
|
-
* 삼각형 · draw call 인스턴스에 비례해 오른다
|
|
8
|
-
* 정점 버퍼 · 재질 10,000 개에서도 그대로다 ← 재활용되는 것
|
|
9
|
-
* InstancedMesh 의 draw call 평평하다 ← 아직 얻지 않은 몫
|
|
10
|
-
*
|
|
11
|
-
* 의존을 만들지 않으려고 SVG 를 문자열로 낸다. 브라우저에서도 node 에서도 그대로 동작한다.
|
|
12
|
-
* 색은 다섯 계열만 쓰고 축과 글자는 `currentColor` 라서 밝은 테마·어두운 테마 양쪽에서
|
|
13
|
-
* 읽힌다.
|
|
14
|
-
*/
|
|
15
|
-
import type { FigureCostAt } from './cost.ts';
|
|
16
|
-
import type { FigureBlueprint } from './types.ts';
|
|
17
|
-
/** 추이의 한 점. */
|
|
18
|
-
export interface CostCurvePoint extends FigureCostAt {
|
|
19
|
-
}
|
|
20
|
-
export interface CostCurveOptions {
|
|
21
|
-
/** 시작 인스턴스 수. 기본 1 */
|
|
22
|
-
from?: number;
|
|
23
|
-
/** 끝 인스턴스 수. 기본 10000 */
|
|
24
|
-
to?: number;
|
|
25
|
-
}
|
|
26
|
-
/** 인스턴스 수를 훑으며 원가를 낸다. */
|
|
27
|
-
export declare function costCurve(blueprint: FigureBlueprint, options?: CostCurveOptions): CostCurvePoint[];
|
|
28
|
-
/**
|
|
29
|
-
* 추이를 SVG 문자열로 낸다.
|
|
30
|
-
*
|
|
31
|
-
* 두 축 모두 로그다. 선형 축으로 그리면 10,000 쪽 값이 화면을 다 먹어 1 개 근처가
|
|
32
|
-
* 뭉개지고, 정작 보여 줄 것 — **평평한 선과 오르는 선의 대비** — 가 안 보인다.
|
|
33
|
-
*/
|
|
34
|
-
export declare function costCurveSvg(blueprint: FigureBlueprint, options?: CostCurveOptions): string;
|
|
35
|
-
//# sourceMappingURL=cost-chart.d.ts.map
|
package/dist/cost-chart.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cost-chart.d.ts","sourceRoot":"","sources":["../src/cost-chart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,eAAe;AACf,MAAM,WAAW,cAAe,SAAQ,YAAY;CAAG;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,yBAAyB;IACzB,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAsBD,0BAA0B;AAC1B,wBAAgB,SAAS,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,GAAE,gBAAqB,GAAG,cAAc,EAAE,CAItG;AA6CD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAuG/F"}
|
package/dist/cost-chart.js
DELETED
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 원가 추이 — 인스턴스가 1 개에서 10,000 개로 갈 때 무엇이 늘고 무엇이 그대로인가.
|
|
3
|
-
*
|
|
4
|
-
* 표 하나로는 그 대비가 안 보인다. **같은 그림 안에서 오르는 선과 평평한 선을 함께
|
|
5
|
-
* 봐야** 「재활용된다」는 말이 눈에 들어온다.
|
|
6
|
-
*
|
|
7
|
-
* 삼각형 · draw call 인스턴스에 비례해 오른다
|
|
8
|
-
* 정점 버퍼 · 재질 10,000 개에서도 그대로다 ← 재활용되는 것
|
|
9
|
-
* InstancedMesh 의 draw call 평평하다 ← 아직 얻지 않은 몫
|
|
10
|
-
*
|
|
11
|
-
* 의존을 만들지 않으려고 SVG 를 문자열로 낸다. 브라우저에서도 node 에서도 그대로 동작한다.
|
|
12
|
-
* 색은 다섯 계열만 쓰고 축과 글자는 `currentColor` 라서 밝은 테마·어두운 테마 양쪽에서
|
|
13
|
-
* 읽힌다.
|
|
14
|
-
*/
|
|
15
|
-
import { costOf } from "./cost.js";
|
|
16
|
-
/**
|
|
17
|
-
* 1-2-5 간격으로 자릿수를 순회한다.
|
|
18
|
-
*
|
|
19
|
-
* 로그 축에서 눈에 고르게 놓이는 값들이다. 1·2·5·10·20·50·100 … 등비로 늘리면 자릿수
|
|
20
|
-
* 하나에 점이 셋씩 놓여 곡선이 매끄럽다.
|
|
21
|
-
*/
|
|
22
|
-
function decadeSteps(from, to) {
|
|
23
|
-
const out = [];
|
|
24
|
-
let decade = 1;
|
|
25
|
-
while (decade <= to) {
|
|
26
|
-
for (const m of [1, 2, 5]) {
|
|
27
|
-
const v = decade * m;
|
|
28
|
-
if (v >= from && v <= to)
|
|
29
|
-
out.push(v);
|
|
30
|
-
}
|
|
31
|
-
decade *= 10;
|
|
32
|
-
}
|
|
33
|
-
if (out.length === 0 || out[out.length - 1] !== to)
|
|
34
|
-
out.push(to);
|
|
35
|
-
return [...new Set(out)].sort((a, b) => a - b);
|
|
36
|
-
}
|
|
37
|
-
/** 인스턴스 수를 훑으며 원가를 낸다. */
|
|
38
|
-
export function costCurve(blueprint, options = {}) {
|
|
39
|
-
const from = Math.max(1, Math.floor(options.from ?? 1));
|
|
40
|
-
const to = Math.max(from, Math.floor(options.to ?? 10000));
|
|
41
|
-
return decadeSteps(from, to).map(n => costOf(blueprint, n).at);
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* 그리는 계열 넷.
|
|
45
|
-
*
|
|
46
|
-
* `drawCallsIfInstanced` 는 선으로 그리지 않는다 — 구조적으로 `geometries` 와 **항상
|
|
47
|
-
* 같은 값**이기 때문이다(둘 다 묶음 수). 절대 갈릴 수 없는 선을 둘 그리면 하나가 다른
|
|
48
|
-
* 하나를 덮어 정보가 오히려 준다. 대신 그 뜻을 이름에 담았다.
|
|
49
|
-
*
|
|
50
|
-
* `materials` 는 `geometries` 와 같을 수도 다를 수도 있다(재질이 슬롯으로 더 갈리면
|
|
51
|
-
* 묶음이 더 많다). 겹칠 때 아래 선이 보이도록 점선으로 마지막에 그린다.
|
|
52
|
-
*/
|
|
53
|
-
const SERIES = [
|
|
54
|
-
{ key: 'triangles', label: '삼각형', color: '#e5534b', flat: false },
|
|
55
|
-
{ key: 'drawCalls', label: 'draw call', color: '#e09b13', flat: false },
|
|
56
|
-
{ key: 'geometries', label: '정점 버퍼', color: '#4a9eff', flat: true },
|
|
57
|
-
{ key: 'materials', label: '재질', color: '#a371f7', flat: true, dashed: true }
|
|
58
|
-
];
|
|
59
|
-
const W = 680;
|
|
60
|
-
const H = 380;
|
|
61
|
-
const PAD = { top: 52, right: 208, bottom: 44, left: 62 };
|
|
62
|
-
const log10 = (v) => Math.log(Math.max(v, 1)) / Math.LN10;
|
|
63
|
-
function escapeText(s) {
|
|
64
|
-
return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
65
|
-
}
|
|
66
|
-
/** 1, 10, 100 … 형태로 짧게. */
|
|
67
|
-
function shortNumber(v) {
|
|
68
|
-
if (v >= 1_000_000)
|
|
69
|
-
return `${v / 1_000_000}M`;
|
|
70
|
-
if (v >= 1_000)
|
|
71
|
-
return `${v / 1_000}k`;
|
|
72
|
-
return String(v);
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* 추이를 SVG 문자열로 낸다.
|
|
76
|
-
*
|
|
77
|
-
* 두 축 모두 로그다. 선형 축으로 그리면 10,000 쪽 값이 화면을 다 먹어 1 개 근처가
|
|
78
|
-
* 뭉개지고, 정작 보여 줄 것 — **평평한 선과 오르는 선의 대비** — 가 안 보인다.
|
|
79
|
-
*/
|
|
80
|
-
export function costCurveSvg(blueprint, options = {}) {
|
|
81
|
-
const points = costCurve(blueprint, options);
|
|
82
|
-
if (points.length === 0)
|
|
83
|
-
return '';
|
|
84
|
-
const xs = points.map(p => p.instances);
|
|
85
|
-
const minX = xs[0];
|
|
86
|
-
const maxX = xs[xs.length - 1];
|
|
87
|
-
let maxY = 1;
|
|
88
|
-
for (const p of points) {
|
|
89
|
-
for (const s of SERIES)
|
|
90
|
-
maxY = Math.max(maxY, p[s.key]);
|
|
91
|
-
}
|
|
92
|
-
const plotW = W - PAD.left - PAD.right;
|
|
93
|
-
const plotH = H - PAD.top - PAD.bottom;
|
|
94
|
-
const spanX = Math.max(log10(maxX) - log10(minX), 1e-9);
|
|
95
|
-
const spanY = Math.max(log10(maxY), 1e-9);
|
|
96
|
-
const px = (v) => PAD.left + ((log10(v) - log10(minX)) / spanX) * plotW;
|
|
97
|
-
const py = (v) => PAD.top + plotH - (log10(v) / spanY) * plotH;
|
|
98
|
-
const parts = [];
|
|
99
|
-
parts.push(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${W} ${H}" width="${W}" height="${H}" ` +
|
|
100
|
-
`font-family="system-ui, sans-serif" font-size="11" fill="currentColor">`);
|
|
101
|
-
parts.push(`<text x="${PAD.left}" y="22" font-size="13" font-weight="600">` +
|
|
102
|
-
`${escapeText(blueprint.type)} — 인스턴스가 늘 때의 원가</text>`, `<text x="${PAD.left}" y="38" opacity="0.6">` +
|
|
103
|
-
`평평한 선은 인스턴스가 늘어도 그대로다 — 그것이 재활용되는 것이다</text>`);
|
|
104
|
-
// 세로 눈금 — 자릿수마다
|
|
105
|
-
for (let e = 0; Math.pow(10, e) <= maxY * 1.001; e++) {
|
|
106
|
-
const v = Math.pow(10, e);
|
|
107
|
-
const y = py(v);
|
|
108
|
-
parts.push(`<line x1="${PAD.left}" y1="${y.toFixed(1)}" x2="${(PAD.left + plotW).toFixed(1)}" y2="${y.toFixed(1)}" ` +
|
|
109
|
-
`stroke="currentColor" stroke-opacity="0.12"/>`, `<text x="${PAD.left - 8}" y="${(y + 3.5).toFixed(1)}" text-anchor="end" opacity="0.55">${shortNumber(v)}</text>`);
|
|
110
|
-
}
|
|
111
|
-
// 가로 눈금 — 자릿수마다
|
|
112
|
-
for (let e = 0; Math.pow(10, e) <= maxX * 1.001; e++) {
|
|
113
|
-
const v = Math.pow(10, e);
|
|
114
|
-
if (v < minX)
|
|
115
|
-
continue;
|
|
116
|
-
const x = px(v);
|
|
117
|
-
parts.push(`<line x1="${x.toFixed(1)}" y1="${PAD.top}" x2="${x.toFixed(1)}" y2="${(PAD.top + plotH).toFixed(1)}" ` +
|
|
118
|
-
`stroke="currentColor" stroke-opacity="0.12"/>`, `<text x="${x.toFixed(1)}" y="${(PAD.top + plotH + 16).toFixed(1)}" text-anchor="middle" opacity="0.55">` +
|
|
119
|
-
`${shortNumber(v)}</text>`);
|
|
120
|
-
}
|
|
121
|
-
parts.push(`<text x="${(PAD.left + plotW / 2).toFixed(1)}" y="${H - 8}" text-anchor="middle" opacity="0.55">인스턴스 수</text>`);
|
|
122
|
-
// 선
|
|
123
|
-
for (const s of SERIES) {
|
|
124
|
-
const d = points
|
|
125
|
-
.map((p, i) => `${i === 0 ? 'M' : 'L'}${px(p.instances).toFixed(1)},${py(p[s.key]).toFixed(1)}`)
|
|
126
|
-
.join(' ');
|
|
127
|
-
parts.push(`<path d="${d}" fill="none" stroke="${s.color}" stroke-width="2" ` +
|
|
128
|
-
`stroke-linejoin="round"${s.dashed ? ' stroke-dasharray="3 7"' : ''}/>`);
|
|
129
|
-
}
|
|
130
|
-
// 범례 — 끝 값을 함께 보인다. 「10,000 개면 얼마인가」가 바로 읽힌다.
|
|
131
|
-
const last = points[points.length - 1];
|
|
132
|
-
parts.push(`<g transform="translate(${W - PAD.right + 14}, ${PAD.top - 6})">`);
|
|
133
|
-
parts.push(`<text x="0" y="0" font-weight="600">${shortNumber(last.instances)} 개일 때</text>`);
|
|
134
|
-
SERIES.forEach((s, i) => {
|
|
135
|
-
const y = 24 + i * 34;
|
|
136
|
-
parts.push(`<line x1="0" y1="${y - 4}" x2="18" y2="${y - 4}" stroke="${s.color}" stroke-width="2"` +
|
|
137
|
-
`${s.dashed ? ' stroke-dasharray="3 7"' : ''}/>`, `<text x="24" y="${y}" opacity="0.85">${escapeText(s.label)}</text>`, `<text x="24" y="${y + 12}" font-weight="600" fill="${s.color}">` +
|
|
138
|
-
`${last[s.key].toLocaleString('en-US')}${s.flat ? ' · 그대로' : ''}</text>`);
|
|
139
|
-
});
|
|
140
|
-
// 겹쳐 보이는 것을 말로 밝힌다 — 값이 같으면 선이 포개진다.
|
|
141
|
-
const flatValues = new Set(SERIES.filter(x => x.flat).map(x => last[x.key]));
|
|
142
|
-
const note = flatValues.size === 1
|
|
143
|
-
? `평평한 선들이 ${[...flatValues][0]} 에서 포개져 있다`
|
|
144
|
-
: 'InstancedMesh 를 쓰면 draw call 이 정점 버퍼 수까지 내려간다';
|
|
145
|
-
parts.push(`<text x="0" y="${24 + SERIES.length * 34 + 6}" opacity="0.55">${escapeText(note)}</text>`, `<text x="0" y="${24 + SERIES.length * 34 + 20}" opacity="0.55">InstancedMesh 면 draw call = 정점 버퍼 수</text>`);
|
|
146
|
-
parts.push('</g>');
|
|
147
|
-
parts.push('</svg>');
|
|
148
|
-
return parts.join('\n');
|
|
149
|
-
}
|
|
150
|
-
//# sourceMappingURL=cost-chart.js.map
|
package/dist/cost-chart.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cost-chart.js","sourceRoot":"","sources":["../src/cost-chart.ts"],"names":[],"mappings":"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"}
|
package/dist/cost.d.ts
DELETED
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 원가 — 이 Figure 하나가 얼마나 무거운가, 그리고 **여러 개가 한 화면에 보이면 무엇이 늘어나나.**
|
|
3
|
-
*
|
|
4
|
-
* 저작자가 알아야 할 것은 삼각형 수 하나가 아니다. 진짜 물음은 이것이다 —
|
|
5
|
-
*
|
|
6
|
-
* 이걸 100개가 한 화면에 보이면 무엇이 100배가 되고 무엇이 그대로인가.
|
|
7
|
-
*
|
|
8
|
-
* 그대로인 것이 곧 **재활용되는 것**이다. geometry 와 재질은 타입당 하나라 인스턴스
|
|
9
|
-
* 수와 무관하다. 반면 삼각형과 draw call 은 인스턴스에 비례한다. 이 둘을 갈라 보여
|
|
10
|
-
* 주면, 저작자가 「부품을 하나 더 넣을까」를 근거를 갖고 정할 수 있다.
|
|
11
|
-
*/
|
|
12
|
-
import type { FigureBlueprint } from './types.ts';
|
|
13
|
-
/** 인스턴스를 여럿 놓았을 때. */
|
|
14
|
-
export interface FigureCostAt {
|
|
15
|
-
/** 몇 개 기준인가. */
|
|
16
|
-
instances: number;
|
|
17
|
-
/**
|
|
18
|
-
* GPU 가 처리하는 삼각형. **인스턴스에 비례한다.**
|
|
19
|
-
*
|
|
20
|
-
* geometry 를 나눠 써도 이 값은 줄지 않는다 — 공유는 메모리와 업로드를 아끼는 것이지
|
|
21
|
-
* 그리는 양을 아끼는 것이 아니다.
|
|
22
|
-
*/
|
|
23
|
-
triangles: number;
|
|
24
|
-
/**
|
|
25
|
-
* 지금 방식의 draw call. **인스턴스에 비례한다** — 인스턴스마다 묶음 수만큼 mesh 가
|
|
26
|
-
* 생기기 때문이다. three.js 에서 한 객체는 부모가 하나뿐이라 Mesh 객체 자체는 나눠
|
|
27
|
-
* 쓸 수 없다.
|
|
28
|
-
*/
|
|
29
|
-
drawCalls: number;
|
|
30
|
-
/**
|
|
31
|
-
* 실제로 만들어지는 정점 버퍼 수. **인스턴스와 무관하다.**
|
|
32
|
-
*
|
|
33
|
-
* 100개를 놓아도 이 값은 그대로다. 이것이 「재활용되는 것」의 실체다.
|
|
34
|
-
*/
|
|
35
|
-
geometries: number;
|
|
36
|
-
/** 실제로 만들어지는 재질 수. **인스턴스와 무관하다.** */
|
|
37
|
-
materials: number;
|
|
38
|
-
/**
|
|
39
|
-
* 올라가는 텍스처 수. **인스턴스와 무관하다** — 이름으로 가리키는 자산이라 같은
|
|
40
|
-
* `ref` 는 한 번만 올라간다.
|
|
41
|
-
*/
|
|
42
|
-
textures: number;
|
|
43
|
-
/**
|
|
44
|
-
* `InstancedMesh` 를 쓰면 도달할 수 있는 draw call.
|
|
45
|
-
*
|
|
46
|
-
* 지금은 쓰지 않는다 — 인스턴스별 선택·컬링·재질을 다르게 다뤄야 해서 별개
|
|
47
|
-
* 결정이다. 이 값과 `drawCalls` 의 차이가 그 결정으로 얻을 수 있는 몫이다.
|
|
48
|
-
*/
|
|
49
|
-
drawCallsIfInstanced: number;
|
|
50
|
-
}
|
|
51
|
-
export interface FigureCost {
|
|
52
|
-
type: string;
|
|
53
|
-
/** 부품 자리 수. */
|
|
54
|
-
parts: number;
|
|
55
|
-
/** 이 Figure 하나의 삼각형 수. */
|
|
56
|
-
triangles: number;
|
|
57
|
-
/** 묶음 수 = 인스턴스 하나당 draw call. */
|
|
58
|
-
groups: number;
|
|
59
|
-
/** Draw calls one instance costs. Repeat copies count one each. */
|
|
60
|
-
drawCalls: number;
|
|
61
|
-
/**
|
|
62
|
-
* 서로 다른 **형상**의 수(`geometryKeyOf` 기준).
|
|
63
|
-
*
|
|
64
|
-
* 부품 자리보다 적으면 그만큼 같은 형상을 되쓰고 있다는 뜻이다. 선반 단이나 롤러처럼
|
|
65
|
-
* 같은 것이 여러 번 나오는 형상에서 이 값이 크게 벌어진다.
|
|
66
|
-
*/
|
|
67
|
-
distinctShapes: number;
|
|
68
|
-
/** 서로 다른 재질의 수(`materialKeyOf` 기준). */
|
|
69
|
-
distinctMaterials: number;
|
|
70
|
-
/**
|
|
71
|
-
* 팔레트 밖 표면(무늬·그라디언트)의 **종류 수.**
|
|
72
|
-
*
|
|
73
|
-
* 같은 `ref` 는 한 텍스처이므로 부품 수가 아니라 종류를 센다. 0 이 정상이다.
|
|
74
|
-
* 재질은 나눠 쓰지만 텍스처마다 GPU 메모리를 쓴다.
|
|
75
|
-
*/
|
|
76
|
-
surfaceTextures: number;
|
|
77
|
-
/**
|
|
78
|
-
* 형상 재활용 비 — `distinctShapes / parts`.
|
|
79
|
-
*
|
|
80
|
-
* 1 이면 부품마다 형상이 다르다(재활용 없음). 낮을수록 같은 형상을 많이 되쓴다.
|
|
81
|
-
* 부품이 없으면 0.
|
|
82
|
-
*/
|
|
83
|
-
shapeReuse: number;
|
|
84
|
-
/** 여럿 놓았을 때. 기본 100개. */
|
|
85
|
-
at: FigureCostAt;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* 청사진 하나의 원가를 낸다.
|
|
89
|
-
*
|
|
90
|
-
* **삼각형 수는 추정치다.** `trianglesOf` 의 식에서 나오며 실제 정점 버퍼의 삼각형
|
|
91
|
-
* 수와 다를 수 있다 — 특히 `polygon` 의 cap 삼각분할이 그렇다. 정확한 값은 형상을
|
|
92
|
-
* 실제로 만들어 봐야 알 수 있고, 그것은 이 모듈이 아니라 렌더러의 몫이다.
|
|
93
|
-
*
|
|
94
|
-
* @param blueprint 컴파일된 청사진
|
|
95
|
-
* @param instances 몇 개를 놓았을 때로 볼 것인가. 기본 100
|
|
96
|
-
*/
|
|
97
|
-
export declare function costOf(blueprint: FigureBlueprint, instances?: number): FigureCost;
|
|
98
|
-
/**
|
|
99
|
-
* 사람이 읽는 한 줄들. 저작 화면과 진단 출력에 그대로 쓸 수 있다.
|
|
100
|
-
*
|
|
101
|
-
* 값을 다시 계산하지 않는다 — `costOf` 가 낸 것을 문장으로 옮기기만 한다.
|
|
102
|
-
*/
|
|
103
|
-
export declare function describeCost(cost: FigureCost): string[];
|
|
104
|
-
/**
|
|
105
|
-
* 한도 하나를 얼마나 쓰고 있나.
|
|
106
|
-
*
|
|
107
|
-
* `limit` 은 **이 모듈이 이미 선언해 둔 값**이다(`LIMITS` · `PART_LIMIT`). 점수를
|
|
108
|
-
* 내려고 새로 지어낸 수가 아니다 — 지어내면 「왜 그 수인가」에 답할 수 없다.
|
|
109
|
-
*/
|
|
110
|
-
export interface FigureBudgetUse {
|
|
111
|
-
key: 'groups' | 'parts' | 'independent' | 'transparent' | 'surface';
|
|
112
|
-
label: string;
|
|
113
|
-
used: number;
|
|
114
|
-
limit: number;
|
|
115
|
-
/** `used / limit`. 1 을 넘으면 위반이다. */
|
|
116
|
-
ratio: number;
|
|
117
|
-
/** 이 한도가 무엇을 지키는가. 저작자에게 그대로 보여 준다. */
|
|
118
|
-
why: string;
|
|
119
|
-
}
|
|
120
|
-
export type FigureGrade = 'A' | 'B' | 'C' | 'D';
|
|
121
|
-
export interface FigureScore {
|
|
122
|
-
/**
|
|
123
|
-
* 0–100. **선언된 한도에 남은 여유**다.
|
|
124
|
-
*
|
|
125
|
-
* 한도에 가장 가까운 항목 하나로 정한다. 넷 중 하나만 꽉 차 있어도 대량 배치에서는 그것이
|
|
126
|
-
* 병목이 되기 때문이다. 평균을 내면 한도에 가까운 하나가 여유 있는 셋에 묻힌다.
|
|
127
|
-
*/
|
|
128
|
-
score: number;
|
|
129
|
-
/**
|
|
130
|
-
* A 여유 절반 이상 · B 4분의 1 이상 · C 한도 안 · D 한도 초과
|
|
131
|
-
*
|
|
132
|
-
* D 는 곧 위반이 있다는 뜻이다 — `blueprint.violations` 에 사유가 들어 있다.
|
|
133
|
-
*/
|
|
134
|
-
grade: FigureGrade;
|
|
135
|
-
/** 한도에 가장 가까운 항목. **여기부터 고치면 된다.** */
|
|
136
|
-
tightest: FigureBudgetUse;
|
|
137
|
-
budgets: FigureBudgetUse[];
|
|
138
|
-
/**
|
|
139
|
-
* 형상 되쓰기 — 한도가 아니라 덤이다. 점수에 넣지 않는다.
|
|
140
|
-
*
|
|
141
|
-
* 되쓰기는 많을수록 좋지만 **한도가 없다.** 부품마다 형상이 달라도 잘못이 아니다.
|
|
142
|
-
* 점수에 섞으면 「형상을 억지로 같게 만들라」는 신호가 되어 저작을 왜곡한다.
|
|
143
|
-
*/
|
|
144
|
-
reuse: {
|
|
145
|
-
/** 서로 다른 형상 수. */
|
|
146
|
-
distinct: number;
|
|
147
|
-
/** 부품 자리 수. */
|
|
148
|
-
parts: number;
|
|
149
|
-
/** `distinct / parts`. 낮을수록 많이 되쓴다. */
|
|
150
|
-
ratio: number;
|
|
151
|
-
/** 되써서 아낀 형상 수. */
|
|
152
|
-
saved: number;
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* 대량 배치 적합도를 점수로 낸다.
|
|
157
|
-
*
|
|
158
|
-
* **점수의 근거는 전부 선언된 한도다.** 새로 지어낸 기준은 없다. 등급이 D 면
|
|
159
|
-
* `blueprint.violations` 에 그 사유가 들어 있다.
|
|
160
|
-
*/
|
|
161
|
-
export declare function scoreOf(blueprint: FigureBlueprint): FigureScore;
|
|
162
|
-
//# sourceMappingURL=cost.d.ts.map
|
package/dist/cost.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAc,MAAM,YAAY,CAAA;AAE7D,sBAAsB;AACtB,MAAM,WAAW,YAAY;IAC3B,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;;;;OAKG;IACH,oBAAoB,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IAEZ,eAAe;IACf,KAAK,EAAE,MAAM,CAAA;IAEb,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAA;IAEjB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAA;IAEtB,uCAAuC;IACvC,iBAAiB,EAAE,MAAM,CAAA;IAEzB;;;;;OAKG;IACH,eAAe,EAAE,MAAM,CAAA;IAEvB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB,yBAAyB;IACzB,EAAE,EAAE,YAAY,CAAA;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,SAAS,EAAE,eAAe,EAAE,SAAS,SAAM,GAAG,UAAU,CA+D9E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAwBvD;AAID;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,QAAQ,GAAG,OAAO,GAAG,aAAa,GAAG,aAAa,GAAG,SAAS,CAAA;IACnE,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,MAAM,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;AAE/C,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;;;OAIG;IACH,KAAK,EAAE,WAAW,CAAA;IAElB,sCAAsC;IACtC,QAAQ,EAAE,eAAe,CAAA;IAEzB,OAAO,EAAE,eAAe,EAAE,CAAA;IAE1B;;;;;OAKG;IACH,KAAK,EAAE;QACL,kBAAkB;QAClB,QAAQ,EAAE,MAAM,CAAA;QAChB,eAAe;QACf,KAAK,EAAE,MAAM,CAAA;QACb,uCAAuC;QACvC,KAAK,EAAE,MAAM,CAAA;QACb,mBAAmB;QACnB,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAaD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,eAAe,GAAG,WAAW,CA6E/D"}
|
package/dist/cost.js
DELETED
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 원가 — 이 Figure 하나가 얼마나 무거운가, 그리고 **여러 개가 한 화면에 보이면 무엇이 늘어나나.**
|
|
3
|
-
*
|
|
4
|
-
* 저작자가 알아야 할 것은 삼각형 수 하나가 아니다. 진짜 물음은 이것이다 —
|
|
5
|
-
*
|
|
6
|
-
* 이걸 100개가 한 화면에 보이면 무엇이 100배가 되고 무엇이 그대로인가.
|
|
7
|
-
*
|
|
8
|
-
* 그대로인 것이 곧 **재활용되는 것**이다. geometry 와 재질은 타입당 하나라 인스턴스
|
|
9
|
-
* 수와 무관하다. 반면 삼각형과 draw call 은 인스턴스에 비례한다. 이 둘을 갈라 보여
|
|
10
|
-
* 주면, 저작자가 「부품을 하나 더 넣을까」를 근거를 갖고 정할 수 있다.
|
|
11
|
-
*/
|
|
12
|
-
import { repeatCountOf } from "./grouping.js";
|
|
13
|
-
import { LIMITS, PART_LIMIT } from "./types.js";
|
|
14
|
-
/**
|
|
15
|
-
* 청사진 하나의 원가를 낸다.
|
|
16
|
-
*
|
|
17
|
-
* **삼각형 수는 추정치다.** `trianglesOf` 의 식에서 나오며 실제 정점 버퍼의 삼각형
|
|
18
|
-
* 수와 다를 수 있다 — 특히 `polygon` 의 cap 삼각분할이 그렇다. 정확한 값은 형상을
|
|
19
|
-
* 실제로 만들어 봐야 알 수 있고, 그것은 이 모듈이 아니라 렌더러의 몫이다.
|
|
20
|
-
*
|
|
21
|
-
* @param blueprint 컴파일된 청사진
|
|
22
|
-
* @param instances 몇 개를 놓았을 때로 볼 것인가. 기본 100
|
|
23
|
-
*/
|
|
24
|
-
export function costOf(blueprint, instances = 100) {
|
|
25
|
-
const n = Math.max(0, Math.floor(instances));
|
|
26
|
-
const shapes = new Set();
|
|
27
|
-
const materials = new Set();
|
|
28
|
-
let parts = 0;
|
|
29
|
-
let triangles = 0;
|
|
30
|
-
const surfaces = new Set();
|
|
31
|
-
for (const group of blueprint.groups) {
|
|
32
|
-
materials.add(group.materialKey);
|
|
33
|
-
const surface = group.material?.surface;
|
|
34
|
-
if (surface)
|
|
35
|
-
surfaces.add(`${surface.kind}:${surface.ref}`);
|
|
36
|
-
for (const member of group.members) {
|
|
37
|
-
parts++;
|
|
38
|
-
triangles += member.triangles;
|
|
39
|
-
shapes.add(member.geometryKey);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
const groups = blueprint.groups.length;
|
|
43
|
-
/*
|
|
44
|
-
Draw calls per instance. **Not the same as the group count.**
|
|
45
|
-
|
|
46
|
-
A repeat part is one group but many meshes -- the cell tray has two groups
|
|
47
|
-
and draws nine times. Reporting groups here made the capacity number 2.3x
|
|
48
|
-
too generous, and the author sizing a drawing by it would find the drawing
|
|
49
|
-
slow anyway.
|
|
50
|
-
|
|
51
|
-
Counted as authored, at scale 1. The row fills whatever box the instance
|
|
52
|
-
is given, so a stretched instance draws more.
|
|
53
|
-
*/
|
|
54
|
-
const drawCalls = blueprint.groups.reduce((total, group) => total +
|
|
55
|
-
(group.members.length === 1
|
|
56
|
-
? repeatCountOf(group.members[0], blueprint.base)
|
|
57
|
-
: 1), 0);
|
|
58
|
-
return {
|
|
59
|
-
type: blueprint.type,
|
|
60
|
-
parts,
|
|
61
|
-
triangles,
|
|
62
|
-
groups,
|
|
63
|
-
drawCalls,
|
|
64
|
-
distinctShapes: shapes.size,
|
|
65
|
-
distinctMaterials: materials.size,
|
|
66
|
-
surfaceTextures: surfaces.size,
|
|
67
|
-
shapeReuse: parts === 0 ? 0 : shapes.size / parts,
|
|
68
|
-
at: {
|
|
69
|
-
instances: n,
|
|
70
|
-
triangles: triangles * n,
|
|
71
|
-
drawCalls: drawCalls * n,
|
|
72
|
-
// 병합된 geometry 는 (타입, 묶음)당 하나다 — 인스턴스가 몇이든 늘지 않는다.
|
|
73
|
-
geometries: groups,
|
|
74
|
-
materials: materials.size,
|
|
75
|
-
textures: surfaces.size,
|
|
76
|
-
drawCallsIfInstanced: groups
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* 사람이 읽는 한 줄들. 저작 화면과 진단 출력에 그대로 쓸 수 있다.
|
|
82
|
-
*
|
|
83
|
-
* 값을 다시 계산하지 않는다 — `costOf` 가 낸 것을 문장으로 옮기기만 한다.
|
|
84
|
-
*/
|
|
85
|
-
export function describeCost(cost) {
|
|
86
|
-
const { at } = cost;
|
|
87
|
-
const lines = [
|
|
88
|
-
`${cost.type} — 부품 ${cost.parts} · 삼각형 ${cost.triangles} · 묶음 ${cost.groups}`,
|
|
89
|
-
`형상 ${cost.distinctShapes}종 · 재질 ${cost.distinctMaterials}종`
|
|
90
|
-
];
|
|
91
|
-
if (cost.distinctShapes < cost.parts) {
|
|
92
|
-
lines.push(`부품 ${cost.parts} 자리를 형상 ${cost.distinctShapes}종으로 채운다 — 나머지는 되쓴다`);
|
|
93
|
-
}
|
|
94
|
-
lines.push(`한 화면에 ${at.instances}개가 보이면 — 삼각형 ${at.triangles} · draw call ${at.drawCalls}`);
|
|
95
|
-
lines.push(`그래도 정점 버퍼는 ${at.geometries}개, 재질은 ${at.materials}개 그대로다`);
|
|
96
|
-
if (cost.surfaceTextures > 0) {
|
|
97
|
-
lines.push(`팔레트 밖 표면이 ${cost.surfaceTextures}종 있다 — 재질은 나눠 쓰지만 텍스처 메모리를 쓴다`);
|
|
98
|
-
}
|
|
99
|
-
if (at.drawCallsIfInstanced < at.drawCalls) {
|
|
100
|
-
lines.push(`InstancedMesh 를 쓰면 draw call 이 ${at.drawCallsIfInstanced}까지 내려간다`);
|
|
101
|
-
}
|
|
102
|
-
return lines;
|
|
103
|
-
}
|
|
104
|
-
const GRADE_BOUNDS = [
|
|
105
|
-
['A', 0.5],
|
|
106
|
-
['B', 0.75],
|
|
107
|
-
['C', 1]
|
|
108
|
-
];
|
|
109
|
-
function gradeOf(ratio) {
|
|
110
|
-
for (const [grade, bound] of GRADE_BOUNDS)
|
|
111
|
-
if (ratio <= bound)
|
|
112
|
-
return grade;
|
|
113
|
-
return 'D';
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* 대량 배치 적합도를 점수로 낸다.
|
|
117
|
-
*
|
|
118
|
-
* **점수의 근거는 전부 선언된 한도다.** 새로 지어낸 기준은 없다. 등급이 D 면
|
|
119
|
-
* `blueprint.violations` 에 그 사유가 들어 있다.
|
|
120
|
-
*/
|
|
121
|
-
export function scoreOf(blueprint) {
|
|
122
|
-
const cost = costOf(blueprint, 1);
|
|
123
|
-
/*
|
|
124
|
-
따로 변환되는 묶음을 센다 — 채널이 모는 것과 **관절의 틀에 선 것**을 함께.
|
|
125
|
-
|
|
126
|
-
전에는 `animated` 만 셌다. 관절이 선 뒤로는 그것이 모자란다: 6 축 로봇은 채널이 관절
|
|
127
|
-
이름을 몰고 부품은 관절의 틀에서 도는데, `animated` 로는 손가락 둘만 잡혀 「2」로 보였다.
|
|
128
|
-
묶음은 틀마다 갈리므로(ADR-0066 결정 4) 관절의 틀도 제 변환을 지는 묶음이다.
|
|
129
|
-
*/
|
|
130
|
-
const independent = new Set(blueprint.groups.filter(g => g.animated || g.joint !== undefined).map((g, at) => g.joint ?? `animated:${at}`)).size;
|
|
131
|
-
const transparent = new Set(blueprint.groups.filter(g => g.material.transparent).map(g => g.materialKey)).size;
|
|
132
|
-
const partLimit = blueprint.detailLevel === undefined ? undefined : PART_LIMIT[blueprint.detailLevel];
|
|
133
|
-
const budgets = [
|
|
134
|
-
{
|
|
135
|
-
key: 'groups',
|
|
136
|
-
label: '묶음',
|
|
137
|
-
used: cost.drawCalls,
|
|
138
|
-
limit: LIMITS.materialGroups,
|
|
139
|
-
ratio: cost.drawCalls / LIMITS.materialGroups,
|
|
140
|
-
why: '인스턴스 하나마다 이만큼 draw call 이 필요하다'
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
key: 'independent',
|
|
144
|
-
label: '독립 부품',
|
|
145
|
-
used: independent,
|
|
146
|
-
limit: LIMITS.independentParts,
|
|
147
|
-
ratio: independent / LIMITS.independentParts,
|
|
148
|
-
why: '따로 변환되는 부품마다 묶음이 하나 늘고, 그만큼 한 화면에 세울 대수가 준다'
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
key: 'transparent',
|
|
152
|
-
label: '투명 재질',
|
|
153
|
-
used: transparent,
|
|
154
|
-
limit: LIMITS.transparentMaterials,
|
|
155
|
-
ratio: transparent / LIMITS.transparentMaterials,
|
|
156
|
-
why: '투명은 별도 정렬 경로를 탄다'
|
|
157
|
-
},
|
|
158
|
-
{
|
|
159
|
-
key: 'surface',
|
|
160
|
-
label: '팔레트 밖 표면',
|
|
161
|
-
used: cost.surfaceTextures,
|
|
162
|
-
limit: LIMITS.surfaceTextures,
|
|
163
|
-
ratio: cost.surfaceTextures / LIMITS.surfaceTextures,
|
|
164
|
-
why: '단색 규칙의 예외다. 텍스처마다 GPU 메모리와 샘플러를 쓴다'
|
|
165
|
-
}
|
|
166
|
-
];
|
|
167
|
-
if (partLimit !== undefined) {
|
|
168
|
-
budgets.push({
|
|
169
|
-
key: 'parts',
|
|
170
|
-
label: '부품 수',
|
|
171
|
-
used: cost.parts,
|
|
172
|
-
limit: partLimit,
|
|
173
|
-
ratio: cost.parts / partLimit,
|
|
174
|
-
why: `디테일 등급 ${blueprint.detailLevel} 이 정한 상한이다`
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
let tightest = budgets[0];
|
|
178
|
-
for (const b of budgets)
|
|
179
|
-
if (b.ratio > tightest.ratio)
|
|
180
|
-
tightest = b;
|
|
181
|
-
return {
|
|
182
|
-
score: Math.max(0, Math.round(100 * (1 - tightest.ratio))),
|
|
183
|
-
grade: gradeOf(tightest.ratio),
|
|
184
|
-
tightest,
|
|
185
|
-
budgets,
|
|
186
|
-
reuse: {
|
|
187
|
-
distinct: cost.distinctShapes,
|
|
188
|
-
parts: cost.parts,
|
|
189
|
-
ratio: cost.shapeReuse,
|
|
190
|
-
saved: cost.parts - cost.distinctShapes
|
|
191
|
-
}
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
//# sourceMappingURL=cost.js.map
|
package/dist/cost.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"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"}
|