์•„์˜ณ์ด 2024. 4. 17. 15:44

 

์›”๋“œ์ƒ์˜ ๋ชจ๋“  ๋ฌผ์ฒด๋ฅผ  ๋‹ค ๊ทธ๋ฆฌ๊ธฐ์—” ๋น„์šฉ์ด ๋„ˆ๋ฌด ๋งŽ์ด ๋“ ๋‹ค

-> Viewing frustum ์˜์—ญ ๋‚ด๋ถ€์˜ ๋ฌผ์ฒด๋“ค๋งŒ rendering ํ•˜์ž

->DrawCall ์„ ์ค„์ด๋Š” ๊ฒƒ์ด๋‹ˆ๊นŒ GPU ์ตœ์ ํ™”

 

chunk์˜ ๊ฐ ๊ผญ์ง“์ ์— ๋Œ€ํ•ด ์ ˆ๋‘์ฒด ๋‚ด๋ถ€์— ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ -> ํ•˜๋‚˜๋ผ๋„ ๋‚ด๋ถ€์— ์žˆ์œผ๋ฉด render

 

1. Projection space ๋‚ด์˜ ์ ˆ๋‘์ฒด ์ขŒํ‘œ ์„ค์ • (x: -1 ~ 1, y: -1 ~ 1, z: 0 ~ 1)

 

2. ํ•ด๋‹น ์ขŒํ‘œ๊ณ„๋ฅผ world ์ขŒํ‘œ๊ณ„๋กœ ๋ณ€ํ™˜

 

3. ๊ณ„์‚ฐ๋œ ์ขŒํ‘œ๋กœ 6๊ฐœ์˜ plane ๋งŒ๋“ค๊ธฐ(๋ชจ๋‘ ๋‚ด๋ถ€๋ฅผ ๋ฐ”๋ผ๋ณด๋Š”) -> XMPlaneFromPoints()

XMPlaneFromPoints ๋กœ ๋งŒ๋“ค์–ด์ง„ ํ‰๋ฉด์€ a, b, c, d ์˜ ๊ฐ’์„ ๊ฐ€์ง„ vector ์ธ๋ฐ ์ด ๊ฐ’์€

$$ ax + by + cz + d = 0 $$

์˜ ํ˜•ํƒœ๋กœ ํ‘œ์‹œ๋œ๋‹ค

  ์—ฌ๊ธฐ์„œ (a, b, c) ๋Š” ํ‰๋ฉด์˜ ๋ฒ•์„ ๋ฒกํ„ฐ (d ๋Š” ์›์ ๊ณผ์˜ ๊ฑฐ๋ฆฌ)

N dot P = 0

P๊ฐ€ ํ‰๋ฉด ์œ„์— ์žˆ๋‹ค๋ฉด (์ ˆ๋‘์ฒด์—์„œ๋Š” ๋‚ด๋ถ€)

N dot P > 0

P๊ฐ€ ํ‰๋ฉด ์•„๋ž˜ ์žˆ๋‹ค๋ฉด (์ ˆ๋‘์ฒด์—์„œ๋Š” ์™ธ๋ถ€)

N dot P < 0

 

4. ๋ชจ๋“  plane์— ๋Œ€ํ•ด chunk์˜ ๊ผญ์ง“์ ๋“ค์ด ๋‚ด๋ถ€์— ์žˆ๋Š”์ง€ ๋น„๊ต

-> ํ•˜๋‚˜์˜ ๊ผญ์ง“์ ์ด๋ผ๋„ ๋ฌ˜๋“  plane ๋‚ด๋ถ€์— ์žˆ์œผ๋ฉด render

 

 

 

-frustum culling ์ „

 

 

-frustum culling ํ›„

 

 

Drawcall ์€ ํ™•์‹คํžˆ ์ค„์—ˆ์ง€๋งŒ ๋ฒ„๋ฒ…์ด๋Š”๊ฑด ์—ฌ์ „ํ•œ...