@hatiolab/figure-model 0.1.76 → 0.1.78
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 +12 -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 +105 -0
- package/dist/v3-words.d.ts.map +1 -0
- package/dist/v3-words.js +107 -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/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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"}
|
package/dist/gate.d.ts
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import type { Axis, FigureBlueprint, FigureSource } from './types.ts';
|
|
2
|
-
/** 크기를 바꿔 보는 일곱 가지. 축 하나씩 셋, 둘씩 셋, 셋 한꺼번에. */
|
|
3
|
-
export declare const SIZING_WAYS: readonly {
|
|
4
|
-
readonly name: string;
|
|
5
|
-
readonly axes: readonly Axis[];
|
|
6
|
-
}[];
|
|
7
|
-
export interface SizingFinding {
|
|
8
|
-
/**
|
|
9
|
-
* `sizing-splits` 이 조합에서 조각이 갈라진다 — 발행을 막는다
|
|
10
|
-
* `sizing-loose` 1배에서 이미 여러 조각이다 — 알리기만 한다
|
|
11
|
-
*/
|
|
12
|
-
code: 'sizing-splits' | 'sizing-loose';
|
|
13
|
-
/** 어느 조합에서. `sizing-loose` 에는 없다. */
|
|
14
|
-
way?: string;
|
|
15
|
-
/** 무엇을 쟀나. */
|
|
16
|
-
message: string;
|
|
17
|
-
/**
|
|
18
|
-
* **왜 그것이 문제인가.** 잰 것만 말하면 읽는 사람은 「그래서?」에서 멈춘다 — 화면에
|
|
19
|
-
* 「1 조각이 2 조각으로 갈라진다」만 떴을 때 실제로 그랬다.
|
|
20
|
-
*/
|
|
21
|
-
why: string;
|
|
22
|
-
/**
|
|
23
|
-
* **무엇을 바꾸면 되나.** 부품 이름과 값으로 말한다. 규칙 이름만 대면(「앵커를 맞추세요」)
|
|
24
|
-
* 어느 부품의 어느 축을 무엇으로 바꾸는지 다시 찾아야 한다.
|
|
25
|
-
*/
|
|
26
|
-
how: string;
|
|
27
|
-
/** 갈라져 나온 조각들의 부품 이름. 숫자가 아니라 자리를 말한다. */
|
|
28
|
-
clumps: string[][];
|
|
29
|
-
}
|
|
30
|
-
export interface SizingReport {
|
|
31
|
-
findings: SizingFinding[];
|
|
32
|
-
/** 1배에서의 덩어리 수. 1 이면 붙어 있는 한 덩어리다. */
|
|
33
|
-
clumpsAtOne: number;
|
|
34
|
-
/** 몇 배로 재봤나. */
|
|
35
|
-
factor: number;
|
|
36
|
-
}
|
|
37
|
-
/** A reversible, one-anchor candidate for repairing a measured sizing split. */
|
|
38
|
-
export interface SizingFixCandidate {
|
|
39
|
-
findingWay: string;
|
|
40
|
-
part: string;
|
|
41
|
-
axis: Axis;
|
|
42
|
-
from?: string;
|
|
43
|
-
to: 'min' | 'center' | 'max' | 'span';
|
|
44
|
-
/** Number of blocking sizing splits removed by this one change. */
|
|
45
|
-
resolved: number;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* 크기를 바꿔 봐도 한 덩어리인가.
|
|
49
|
-
*
|
|
50
|
-
* 1배에서 이미 갈라져 있으면 그것을 먼저 말하고(`sizing-loose`), 그 뒤 일곱 조합에서 **덩어리가
|
|
51
|
-
* 늘어나는** 경우를 찾는다. 늘어나지 않으면 조용하다 — 부품이 움직였는지가 아니라 **떨어졌는지**를
|
|
52
|
-
* 보기 때문이다.
|
|
53
|
-
*/
|
|
54
|
-
export declare function sizingReport(blueprint: FigureBlueprint, factor?: number): SizingReport;
|
|
55
|
-
/** 정본 문자열이 아니라 객체를 받는 쪽. 부르는 자리가 이미 컴파일해 두었으면 위 함수를 쓴다. */
|
|
56
|
-
export declare function sizingReportOf(source: FigureSource, factor?: number): SizingReport;
|
|
57
|
-
/**
|
|
58
|
-
* Measured, reversible anchor alternatives for a sizing split.
|
|
59
|
-
*
|
|
60
|
-
* The gate never infers author intent from prose. Instead it tries a small set of explicit anchor
|
|
61
|
-
* changes on the parts named by the measured clumps, keeps only alternatives that reduce blocking
|
|
62
|
-
* splits without creating more, and leaves final selection to the author.
|
|
63
|
-
*/
|
|
64
|
-
export declare function sizingFixCandidatesOf(source: FigureSource, factor?: number): SizingFixCandidate[];
|
|
65
|
-
//# sourceMappingURL=gate.d.ts.map
|
package/dist/gate.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAiB,eAAe,EAAE,YAAY,EAAQ,MAAM,YAAY,CAAA;AAqB1F,8CAA8C;AAC9C,eAAO,MAAM,WAAW,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAA;CAAE,EAQ3F,CAAA;AAmLD,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,IAAI,EAAE,eAAe,GAAG,cAAc,CAAA;IACtC,qCAAqC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,cAAc;IACd,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAA;IACX,0CAA0C;IAC1C,MAAM,EAAE,MAAM,EAAE,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB;IAChB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,gFAAgF;AAChF,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,IAAI,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,EAAE,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAA;IACrC,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,eAAe,EAAE,MAAM,GAAE,MAAe,GAAG,YAAY,CAuD9F;AAED,2DAA2D;AAC3D,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,GAAE,MAAe,GAAG,YAAY,CAE1F;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,GAAE,MAAe,GAAG,kBAAkB,EAAE,CAsCzG"}
|