Skip to content

Primitive System Architecture Refactoring & Standardizationย #682

@redcamel

Description

@redcamel

๐Ÿ“Œ ๊ฐœ์š” (Overview)

RedGPU ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ ์‹œ์Šคํ…œ์˜ ๊ณ ์งˆ์ ์ธ ์ค‘๋ณต ๋กœ์ง์„ ์ œ๊ฑฐํ•˜๊ณ , ๊ธฐํ•˜ํ•™์  ์ˆ˜์‹ ๋ฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํ”„๋กœ์„ธ์Šค๋ฅผ PrimitiveUtils๋กœ ์ค‘์•™ ์ง‘์ค‘ํ™”ํ•˜์—ฌ ์‹œ์Šคํ…œ ๊ตฌ์กฐ๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.


๐ŸŽฏ ํ•ต์‹ฌ ๋ฆฌํŒฉํ† ๋ง ๋ชฉํ‘œ (Strategic Goals)

๋ถ„๋ฅ˜ ํ•ต์‹ฌ ์ „๋žต ์„ฑ๊ณผ ์ง€ํ‘œ
์•„ํ‚คํ…์ฒ˜ ๋ฒ ์ด์Šค ํด๋ž˜์Šค ์ค‘์‹ฌ์˜ ๋ฆฌ์†Œ์Šค ์บ์‹ฑ ๋ฐ ์ˆ˜์‹ ์œ ํ‹ธ๋ฆฌํ‹ฐํ™” ํด๋ž˜์Šค ์ฝ”๋“œ๋Ÿ‰ 65% ์ ˆ๊ฐ
๋ฐ์ดํ„ฐ ๋ ˆ์ด์•„์›ƒ P3, N3, U2, T4 (12 floats) ์ธํ„ฐ๋ฆฌ๋ธŒ ํฌ๋งท ์ „์—ญ ์ ์šฉ ๋…ธ๋ฉ€๋งต ์ •ํ™•๋„ ๋ฐ ์—ฐ์‚ฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ
์ธํ„ฐํŽ˜์ด์Šค ์—…๊ณ„ ํ‘œ์ค€ ๋ช…๋ช… ๊ทœ์น™ ๊ธฐ๋ฐ˜์˜ ์ƒ์„ฑ์ž ์ธ์ž ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐœ๋ฐœ์ž ๊ฐ€๋…์„ฑ ๋ฐ ํ•™์Šต ๊ณก์„  ์ตœ์ ํ™”
์‹œ์Šคํ…œ ๊ฒฌ๊ณ ํ•จ 0๊ฐ’ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐ EPSILON ๊ธฐ๋ฐ˜ ์ˆ˜์น˜ ์ œ์–ด ๋กœ์ง ํ†ตํ•ฉ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ ์ œ๋กœํ™” ๋ฐ ์•ˆ์ •์„ฑ ํ™•๋ณด

๐Ÿ“ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ ๋ฌผ๋ฆฌ ํ‘œ์ค€ ๊ฐ€์ด๋“œ (Geometric Standards)

1. ์ƒ์„ฑ ์‹œ์ž‘์  ๋ฐ ํšŒ์ „ ๋ฐฉํ–ฅ (Rotation Standard)

ํ•ญ๋ชฉ ํ‘œ์ค€ ์ •์˜ ์‹œ๊ฐ์  ์„ค๋ช…
0๋„ ์‹œ์ž‘์  12์‹œ ๋ฐฉํ–ฅ (-Z์ถ•) [์—…๊ณ„ ํ‘œ์ค€] ํ…์Šค์ฒ˜ ์ด์Œ์ƒˆ(Seam)๋ฅผ ๋’ค๋กœ ์ˆจ๊ธฐ๊ธฐ ์œ„ํ•ด ๋’ค์ชฝ(-Z)์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
ํšŒ์ „ ๋ฐฉํ–ฅ ์ƒ๋‹จ ์กฐ๊ฐ ๊ธฐ์ค€ ๋ฐ˜์‹œ๊ณ„ ํšŒ์ „ (CCW) ์ •์ ์ด ์ƒ์„ฑ๋˜๋Š” ๊ถค์ ์€ 12์‹œ(-Z) โ†’ 9์‹œ(-X) โ†’ 6์‹œ(+Z) โ†’ 3์‹œ(+X) ์ˆœ์„œ์ž…๋‹ˆ๋‹ค.
์ •๋ฉด ์œ„์น˜ u = 0.5 ์ง€์  [์—…๊ณ„ ํ‘œ์ค€] ํ…์Šค์ฒ˜ ๊ฐ€๋กœ์ถ•(U)์˜ ์ค‘์•™์ธ 50% ์ง€์ ์ด ์นด๋ฉ”๋ผ๋ฅผ ๋ณด๋Š” ์ •๋ฉด(+Z์ถ•)์ž…๋‹ˆ๋‹ค.

2. ์•ž๋ฉด ์ •์˜ ๋ฐ ์ปฌ๋ง (Winding & Culling)

ํ•ญ๋ชฉ ํ‘œ์ค€ ์ •์˜ ์ƒ์„ธ ์„ค๋ช…
์•ž๋ฉด (Front) ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ (CCW) ์ •์  ์„ธ ๊ฐœ๋ฅผ ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฉด์ด ์•ž๋ฉด์ž…๋‹ˆ๋‹ค.
์•ˆ์ •ํ™” ๋กœ์ง CCW ์ƒ์„ฑ + ํ‘œ์ค€ ์ธ๋ฑ์Šค ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ ์ •์  ๋ฐฐ์น˜ ํ›„ ํ‘œ์ค€ ์ธ๋ฑ์Šค๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ”๊นฅ์ชฝ์„ CCW๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ€์‹œ์„ฑ ๋’ท๋ฉด ์ œ๊ฑฐ (Back-face) ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๋„ํ˜•์˜ ์•ˆ์ชฝ๋ฉด(๋’ท๋ฉด)์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ Œ๋”๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

3. UV ๋งคํ•‘ ๋ฐ ํ…์Šค์ฒ˜ ๋ฐฉํ–ฅ (UV Standard)

ํ•ญ๋ชฉ ํ‘œ์ค€ ์ •์˜ ์ƒ์„ธ ์„ค๋ช…
UV ์›์  ์ƒ๋‹จ ์ขŒ์ธก (Top-Left) ํ…์Šค์ฒ˜์˜ (0,0)์€ ๋„ํ˜•์˜ ์™ผ์ชฝ ์ƒ๋‹จ์— ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค. (V-Down ํ‘œ์ค€)
์ˆ˜์ง ํ๋ฆ„ ์œ„ โ†’ ์•„๋ž˜ V=0์€ ๋„ํ˜•์˜ ๊ฐ€์žฅ ๋†’์€ ๊ณณ, V=1์€ ๊ฐ€์žฅ ๋‚ฎ์€ ๊ณณ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
์ˆ˜ํ‰ ํ๋ฆ„ ์ขŒ์ธก โ†’ ์ •๋ฉด โ†’ ์šฐ์ธก ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ ํšŒ์ „์— ๋”ฐ๋ผ ํ…์Šค์ฒ˜๊ฐ€ ์™ผ์ชฝ(U=0)์—์„œ ์ •๋ฉด(U=0.5)์„ ๊ฑฐ์ณ ์˜ค๋ฅธ์ชฝ(U=1)์œผ๋กœ ๊ฐ์Œ‰๋‹ˆ๋‹ค.

์›ํ˜• ๋‹จ๋ฉด(Cap) ๋ฐ Circle UV ์˜ต์…˜

Circle ๋ฐ ์›ํ˜• ๋‹จ๋ฉด์„ ๊ฐ€์ง„ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ(Cylinder, Torus)๋Š” isRadial ๊ณ„์—ด ์˜ต์…˜์„ ํ†ตํ•ด ๋‘ ๊ฐ€์ง€ ๋งคํ•‘ ๋ฐฉ์‹์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

  1. Planar (isRadial: false, ๊ธฐ๋ณธ๊ฐ’):
    • ํ…์Šค์ฒ˜๋ฅผ ๋‹จ๋ฉด ์œ„์— ๊ทธ๋Œ€๋กœ ์˜ฌ๋ ค๋†“์€ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. (์ค‘์‹ฌ: UV 0.5, 0.5)
    • ์ผ๋ฐ˜์ ์ธ ๋ฌผ์ฒด ํ‘œํ˜„์ด๋‚˜ ๋šœ๊ป‘ ๋กœ๊ณ  ํˆฌ์˜ ๋“ฑ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  2. Radial (isRadial: true):
    • ์„ฑ์žฅํ˜•/ํŒฝ์ฐฝํ˜•(Expansion) ๋งคํ•‘: U์ถ•์€ ๊ฐ๋„($0 \rightarrow 1$), V์ถ•์€ ์ค‘์‹ฌ์—์„œ์˜ ๊ฑฐ๋ฆฌ($0 \rightarrow 1$)์— ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.
    • ํ…์Šค์ฒ˜์˜ V ์˜คํ”„์…‹(V-Offset) ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ํ†ตํ•ด ์›์ด ์ค‘์‹ฌ์—์„œ ๋ฐ–์œผ๋กœ ์ปค์ง€๋Š” VFX ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ ์šฉ ๋Œ€์ƒ:

  • Circle: isRadial
  • Cylinder: isRadialTop, isRadialBottom
  • Torus: isRadialCapStart, isRadialCapEnd (Partial ๋ชจ๋“œ ์‹œ)

4. ๋‹จ๋ฉด ์ œ์–ด ํ‘œ์ค€ (Capping)

ํ•ญ๋ชฉ ๋ช…์นญ ํ‘œ์ค€ ์ ์šฉ ๋Œ€์ƒ ๋ฐ ํŠน์ง•
์ˆ˜์ง ๊ธฐ๋‘ฅ capTop, capBottom Cylinder: ์œ„(+Y)์™€ ์•„๋ž˜(-Y) ๋‹จ๋ฉด์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ œ์–ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
ํšŒ์ „ ๊ณ ๋ฆฌ capStart, capEnd Torus: ์‹œ์ž‘ ๊ฐ๋„์™€ ๋ ๊ฐ๋„์˜ ๋‹จ๋ฉด์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ œ์–ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ› ๏ธ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ์•ˆ์ •์„ฑ ์™„๋ฃŒ ํ˜„ํ™ฉ (Execution Status)

1. ๋กœ์ง ๋ฐ ์ฝ”์–ด ์‹œ์Šคํ…œ ๊ฐœ์„ 

ํ•ญ๋ชฉ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ๊ณ ๋„ํ™” ๋‚ด์šฉ ์ƒํƒœ
PrimitiveUtils ํ‰๋ฉด/์›ํ˜•/๋ชธํ†ต ์ƒ์„ฑ, ๊ทธ๋ฆฌ๋“œ ์ธ๋ฑ์Šค, ํƒ„์  ํŠธ ๊ณ„์‚ฐ ์œ ํ‹ธ๋ฆฌํ‹ฐํ™” ๐ŸŸข
Architecture ๋ฒ ์ด์Šค ํด๋ž˜์Šค uniqueKey ๊ธฐ๋ฐ˜ ์ž๋™ ์บ์‹ฑ ๋ฐ makeData ์™ธ๋ถ€ํ™” ๐ŸŸข
Data Layout ์ „ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ 12-ํ”Œ๋กœํŠธ(Tangent ํฌํ•จ) ์ŠคํŠธ๋ผ์ด๋“œ ์ ์šฉ ๐ŸŸข
Robustness 0๊ฐ’ ์‹œ "1์ •์  + ๋นˆ ์ธ๋ฑ์Šค" ์ „๋žต ๋ฐ EPSILON ์ฒดํฌ ๋ฐ˜์˜ ๐ŸŸข
Tooling ์ „ ์˜ˆ์ œ ํŒจ๋„ ๊ณ ๋„ํ™” (์ „ ์†์„ฑ ์ œ์–ด ๋ฐ cullMode ํ† ๊ธ€ ์ถ”๊ฐ€) ๐ŸŸข

2. ์ƒ์„ฑ์ž ์ธ์ž๋ช… ํ‘œ์ค€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฒฐ๊ณผ

ํด๋ž˜์Šค ์ด์ „ ์ธ์ž๋ช… ํ‘œ์ค€ํ™”๋œ ์ธ์ž๋ช… ์ƒํƒœ
Box wSegments, hSegments, dSegments widthSegments, heightSegments, depthSegments ๐ŸŸข
Circle segments radialSegments, isRadial ๐ŸŸข
Plane / Ground wSegments, hSegments widthSegments, heightSegments ๐ŸŸข
Cylinder openEnded capTop, capBottom, isRadialTop, isRadialBottom ๐ŸŸข
Torus radialSubv, bodySubv radialSegments, tubularSegments ๐ŸŸข
Torus start/endAngle, capped thetaStart, thetaLength, capStart, capEnd, isRadialCapStart, isRadialCapEnd ๐ŸŸข
TorusKnot tube, p, q tubeRadius, windingsAroundAxis, windingsAroundCircle ๐ŸŸข
Capsule cylinderHeight height ๐ŸŸข

๐Ÿš€ ํ–ฅํ›„ ๋กœ๋“œ๋งต (Roadmap)

๊ตฌ๋ถ„ ๋Œ€์ƒ ํ•ญ๋ชฉ ํ•„์š”์„ฑ ๋ฐ ๊ธฐ๋Œ€ ํšจ๊ณผ ์šฐ์„ ์ˆœ์œ„
๊ณ ๋„ํ™” ๊ทน์  ํ† ํด๋กœ์ง€ ์ตœ์ ํ™” ์ค‘๋ณต ์ •์  ์ œ๊ฑฐ๋ฅผ ํ†ตํ•œ ๋ Œ๋”๋ง ํšจ์œจ ํ–ฅ์ƒ ๐ŸŸข ๋ณดํ†ต
๊ณ ๋„ํ™” 6๋ฉด ๊ฐœ๋ณ„ UV ์ œ์–ด Box ๊ฐ ๋ฉด๋ณ„ ๋…๋ฆฝ์  ํ…์Šค์ฒ˜๋ง ์œ ์—ฐ์„ฑ ํ™•๋ณด ๐ŸŸข ๋ณดํ†ต
์‹ ๊ทœ Cone (์›๋ฟ”) ํ”ผ๋ผ๋ฏธ๋“œ, ์กฐ๋ช… ๋ฒ”์œ„ ์‹œ๊ฐํ™” ๋“ฑ์— ํ•„์ˆ˜์  ๐Ÿ”ฅ ๋†’์Œ
์‹ ๊ทœ Ring (๊ณ ๋ฆฌ) UI, ํฌํƒˆ ํšจ๊ณผ, ๊ถค๋„ ์‹œ๊ฐํ™” ๋“ฑ์— ํ™œ์šฉ ๐Ÿ”ฅ ๋†’์Œ
์‹ ๊ทœ Polyhedrons ์ €ํด๋ฆฌ๊ณค ๊ตฌ์ฒด ๋Œ€์ฒด ๋ฐ ์ถ”์ƒ ์•„ํŠธ ๊ตฌ์„ฑ ๐ŸŸข ๋ณดํ†ต

๋Œ€์ƒ ๋ฒ„์ „: V4.1.0-Alpha

Metadata

Metadata

Assignees

Labels

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions