3D ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ, ์•Œ๊ฒŒ๋œ ์ƒ์‹๋“ค์— ๋Œ€ํ•ด ์ ์–ด๋ณด๋ ค๊ณ  ํ•ด.

๋ˆ„๊ตฌํ•œํ…Œ ๋ฐฐ์›Œ๋ณธ์ ๋„ ์—†๊ณ , ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ž์—ฐ์Šค๋ ˆ ์ด๊ฒƒ์ €๊ฒƒ ์ฐพ์•„๋ณด๋ฉฐ ์•Œ๊ฒŒ๋œ๊ฑฐ๋ผ ์ž˜๋ชป๋œ๊ฒŒ ์žˆ์„์ˆ˜๋„ ์žˆ๋Š”๋ฐ,ย 

๋‚ด๊ฐ€ ์ž˜๋ชป ์•Œ๊ณ  ์žˆ๋Š”๊ฒŒ ์žˆ์œผ๋ฉด ์•Œ๋ ค์ค˜.



1. ์œ ๋‹ˆํ‹ฐ ํ•˜์ด์–ด๋ผํ‚ค์ƒ์—์„œ์˜ ํŠธ๋žœ์Šคํผ ๊ณ„์‚ฐ ๋ฐ ์ขŒํ‘œ๊ณ„ ๋ณ€ํ™˜


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb81fa11d02831ec6fc61317e610776c2e373a7756189501101541988e339d209df2e91781cdd0a8526620d48ca4bf9907136cd799623b49443e09


1, 2, 3์—๋Š” ๋žœ๋ค์œผ๋กœ ๋„ฃ์–ด๋‘” ํฌ์ง€์…˜/๋กœํ…Œ์ด์…˜/์Šค์ผ€์ผ ๊ฐ’์ด ๋“ค์–ด์žˆ๊ณ , ์˜ค๋ธŒ์ ํŠธ๋Š” ํŠธ๋žœ์Šคํผ์ด ๊ธฐ๋ณธ๊ฐ’์ด์•ผ.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb81fa11d02831ec6fc61317e610776c2e373a7756189501101541988e339d209df2e91781cdd0a8526620d48ca4bfcc0113688cc86d6a34826d51


๊ฐ ์˜ค๋ธŒ์ ํŠธ์˜ ๋งคํŠธ๋ฆญ์Šค๋Š” ์ด๋ ‡๊ฒŒ ๊ตฌํ•˜๋ฉด ๋ผ.ย 

๋กœ์ปฌ ์ŠคํŽ˜์ด์Šค์˜ ํ•œ ์ ์— ์ด ๋งคํŠธ๋ฆญ์Šค๋ฅผ ์ ์šฉ์‹œ์ผœ์ฃผ๋ฉด, ๋ถ€๋ชจ ๊ณต๊ฐ„์—์„œ์˜ ์œ„์น˜๊ฐ€ ๋‚˜์™€


์˜ค๋ธŒ์ ํŠธ์— ๋ฉ”์‰ฌ๊ฐ€ ๋ถ™์–ด์žˆ์„ ๋•Œ, ๊ทธ ๋ฉ”์‰ฌ์˜ ์ •์ ์— ํ•ด๋‹น ์˜ค๋ธŒ์ ํŠธ์˜ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๊ณฑํ•ด์ฃผ๋ฉด, ๋ถ€๋ชจ ๊ธฐ์ค€์˜ ์œ„์น˜๋กœ ๋ณ€ํ™˜๋ผ. ๋ถ€๋ชจ๊ฐ€ ์—†๋‹ค๋ฉด ์›”๋“œ์ŠคํŽ˜์ด์Šค๊ฐ€ ๋˜๊ฒ ์ง€.


๋ฐ˜๋Œ€๋กœ ๋ถ€๋ชจ ์˜ค๋ธŒ์ ํŠธ์˜ ํŠธ๋žœ์Šคํผ์—์„œ ์ž์‹ ์˜ค๋ธŒ์ ํŠธ์˜ ๊ณต๊ฐ„์œผ๋กœ ์ขŒํ‘œ๋ฅผ ๋ณ€ํ™˜์‹œ์ผœ์ฃผ๊ณ  ์‹ถ์œผ๋ฉด ๊ฒฐ๊ณผ ๋งคํŠธ๋ฆญ์Šค์— .inverse ๋ถ™์—ฌ์ฃผ๋ฉด ๋ผ.




viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb81fa11d02831ec6fc61317e610776c2e373a7756189501101541988e339d209df2847a8ac0dd4bb6547398fe89194a0485fd3303566a2851fc


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb81fa11d02831ec6fc61317e610776c2e373a7756189501101541988e339d209df2847a8ac0dd4bb6547398fe894f450487ab380d036a322d42


์œ ๋‹ˆํ‹ฐ ๋‚ด๋ถ€ ๊ณ„์‚ฐ ๊ฐ’๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™€.


์ฐธ๊ณ ๋กœ ์ € o1Matrix * o2Matrix * o3Matrix๊ฐ€ unity_ObjectToWorld ๋งคํŠธ๋ฆญ์Šค์™€ ๊ฐ™์•„.




๋งคํŠธ๋ฆญ์Šค ์•ˆ์“ฐ๊ณ  ์ง์ ‘ ๊ณ„์‚ฐํ•ด๋ณด๊ณ  ์‹ถ์œผ๋ฉดย Scale -> Rotation -> Translate ์ˆœ์„œ๋กœ ๊ณ„์‚ฐํ•˜๋ฉด ๋ผ.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb81fa11d02831ec6fc61317e610776c2e373a7756189501101541988e339d209df2e91781cdd0a8526620d48ca4bfc000453e81936e6d0d22e0be


์ €๊ธฐ์„œ localRotation์€ ์ฟผํ„ฐ๋‹ˆ์˜จ ๊ณ„์‚ฐ์ธ๋ฐ, ์ด๊ฑธ eular๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉดย Z, X, Y ์ˆœ์„œ๋กœย ํšŒ์ „์‹œํ‚จ ๊ฒฐ๊ณผ์™€ ๊ฐ™์•„.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb81fa11d02831ec6fc61317e610776c2e373a7756189501101541988e339d209df2e91781cdd0a8526620d48ca4bf990217398398686f14c7b6f2



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb81fa11d02831ec6fc61317e610776c2e373a7756189501101541988e339d209df2e91781cdd0a8526620d48ca4bfcb521438d79e636ce5a0c503



์ด๊ฒƒ ์—ญ์‹œ ๊ณ„์‚ฐํ•ด๋ณด๋ฉด ์ „๋ถ€ ์œ ๋‹ˆํ‹ฐ ํŠธ๋žœ์Šคํผ ๊ฐ’๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™€.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb81fa11d02831ec6fc61317e610776c2e373a7756189501101541988e339d209df2847a8ac0dd4bb6547398fe891e4e048dff3759536aacb3fa


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb81fa11d02831ec6fc61317e610776c2e373a7756189501101541988e339d209df2847a8ac0dd4bb6547398fe891b4a5887ab3859016a7e2a3a



์ž์‹์—์„œ ๋ถ€๋ชจ ๋ฐฉํ–ฅ์œผ๋กœ, Scale -> Rotate Z -> Rotate X -> Rotate Y -> Translate๋ฅผ ๋ฐ˜๋ณตํ•ด์ฃผ๋Š”๊ฑฐ์•ผ.



์ด๋ ‡๊ฒŒ ๊ณ„์‚ฐ ์•ˆํ•˜๊ณ  ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ์“ฐ๋Š” ์ด์œ ๋Š”,ย 

๋ฉ”์‰ฌ์˜ ๋ชจ๋“  ๋ฒ„ํ…์Šค์— ๋ฏธ๋ฆฌ ๊ณ„์‚ฐ๋œ object -> world ๋ณ€ํ™˜ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ํ•œ๋ฒˆ๋งŒ ๊ณฑํ•ด์ฃผ๋Š”๊ฒŒ ๋งค๋ฒˆ ์ƒˆ๋กœ ๊ณ„์‚ฐํ•˜๋Š”๊ฒƒ๋ณด๋‹คย ํ›จ์”ฌ ํšจ์œจ์ ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด.



2. ์›”๋“œ ์ŠคํŽ˜์ด์Šค, ๋ทฐ ์ŠคํŽ˜์ด์Šค, ํด๋ฆฝ ์ŠคํŽ˜์ด์Šค, ๋ށ์Šค


์›”๋“œ ์ŠคํŽ˜์ด์Šค๋Š” ์šฐ๋ฆฌ๊ฐ€ ์•„๋Š” ์œ ๋‹ˆํ‹ฐ์—์„œ์˜ย ์ขŒํ‘œ๊ณ„์•ผ.


๋ทฐ ์ŠคํŽ˜์ด์Šค๋Š” ์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด ์นด๋ฉ”๋ผ ๊ธฐ์ค€์˜ ๊ณต๊ฐ„์ด๊ณ ,ย 

ํด๋ฆฝ ์ŠคํŽ˜์ด์Šค๋Š” ์นด๋ฉ”๋ผ์˜ ์‹œ์•ผ๊ฐ, perspective, ํด๋ฆฌํ•‘, ๊ฑฐ๋ฆฌ์— ๋”ฐ๋ฅธ ์ขŒํ‘œ์กฐ์ • ๋“ฑ์ด ์ ์šฉ๋˜์–ด์„œ ์Šคํฌ๋ฆฐ์— ๊ทธ๋ฆด ์œ„์น˜๋ฅผ ํŠน์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ ๊ณต๊ฐ„์ด์•ผ.


๋ทฐ ์ŠคํŽ˜์ด์Šค๋Š” ๋ทฐ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ์›”๋“œ ํฌ์ง€์…˜์— ๊ณฑํ•ด์ฃผ๋ฉด ๊ตฌํ•  ์ˆ˜ ์žˆ๊ณ ,ย ํด๋ฆฝ ์ŠคํŽ˜์ด์Šค๋Š” ํ”„๋กœ์ ์…˜ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๋ทฐ ํฌ์ง€์…˜์— ๊ณฑํ•ด์ฃผ๋ฉด ๊ตฌํ•  ์ˆ˜ ์žˆ์–ด.




๋ทฐ ๋งคํŠธ๋ฆญ์Šค๋Š” ํฌ๊ฒŒ ํŠน๋ณ„ํ• ๊ฑด ์—†์–ด. ์œ„์—์„œ ์˜ค๋ธŒ์ ํŠธ์˜ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ์ ์šฉ์‹œ์ผœ์„œ ์ขŒํ‘œ๊ณ„๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋Š”๊ฑฐ๋ž‘ ์œ ์‚ฌํ•ด.ย 

์Šค์ผ€์ผ์ด 1๋กœ ๊ณ ์ •๋˜๊ณ , z์— -1์ด ๊ณฑํ•ด์ง„๋‹ค๋Š”๊ฒƒ ๋นผ๊ณค.



๊ทผ๋ฐ ํ”„๋กœ์ ์…˜ ๋งคํŠธ๋ฆญ์Šค๋Š” OpenGL์ด๋ƒ, Direct๋ƒ, Reversed Z๋ฅผ ์ด์šฉํ•˜๋ƒ ์•ˆํ•˜๋ƒ์— ๋”ฐ๋ผ 4๊ฐ€์ง€๋กœ ๋‚˜๋‰˜๋Š”๊ฒƒ ๊ฐ™์•„. ํ™•์‹คํ•˜์ง„ ์•Š์•„.

์œ ๋‹ˆํ‹ฐ์—์„œ ๊ตฌํ•˜๋Š” Camera.projectionMatrix๋Š” OpenGL ํ˜•์‹์˜ Reversed Z๊ฐ€ ์ ์šฉ ์•ˆ๋œ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ด.


์ด ๋งคํŠธ๋ฆญ์Šค๋ฅผย ์‹ค์ œ๋กœ ์ด์šฉํ• ๋•Œ๋Š” ์œ ๋‹ˆํ‹ฐ์˜ ํ”„๋กœ์ ์…˜ ๋งคํŠธ๋ฆญ์Šค๋ฅผ GL.GetGpuProjectionMatrix()ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์‹ค์ œ ์ด์šฉ๋˜๋Š” ํ”„๋กœ์ ์…˜ ๋งคํŠธ๋ฆญ์Šค๋กœ ๋ณ€ํ™˜์‹œ์ผœ์ค˜์•ผ ํ•ด.


์ด ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๋ทฐ ํฌ์ง€์…˜์— ๊ณฑํ•ด์ฃผ๊ณ  ๊ฒฐ๊ณผ ๊ฐ’์˜ w๋กœ xyz๋ฅผ ๋‚˜๋ˆ„์–ด์ฃผ๋ฉด ํด๋ฆฝ์ŠคํŽ˜์ด์Šค ํฌ์ง€์…˜์ด ๋‚˜์™€.



clip.xyz / clip.w


ํด๋ฆฝ ์ŠคํŽ˜์ด์Šค์—์„œ ์ค‘์š”ํ•œ๊ฑด, ํ”„๋กœ์ ์…˜ ๋งคํŠธ๋ฆญ์Šค๊ฐ€ ์ ์šฉ๋˜์„œ ๋‚˜์˜จ float4์—์„œ w๊ฐ’์œผ๋กœ xyz๋ฅผ ๋‚˜๋ˆ„์–ด์ค˜์•ผ ์šฐ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ์ƒ๊ฐํ•˜๋Š” ํด๋ฆฝ์ŠคํŽ˜์ด์Šค ์ƒ์˜ ์ขŒํ‘œ๊ฐ€ ๋‚˜์˜จ๋‹ค๋Š”๊ฑฐ์•ผ.ย 

์ด ์ขŒํ‘œ๊ฐ€ ์Šคํฌ๋ฆฐ ์ƒ์˜ ์œ„์น˜, ๊ทธ๋ฆฌ๊ณ  ๋ށ์Šค ๊ฐ’์ด์•ผ.

x๋ž‘ y๋Š” -1์—์„œ 1 ์‚ฌ์ด, z๋Š” -1~1 ๋˜๋Š” 0~1 ์‚ฌ์ด์˜ ๊ฐ’

์—ฌ๊ธฐ์„œ x์˜ -1์€ ํ™”๋ฉด์˜ ์™ผ์ชฝ๋, 1์€ ํ™”๋ฉด์˜ ์˜ค๋ฅธ์ชฝ ๋์ด์•ผ.

z๋Š” Reversed Z๊ฐ€ ์•„๋‹Œ๊ฒฝ์šฐ, 0์—์„œ(๋˜๋Š” -1)์—์„œ near plane, 1์—์„œ far plane


ClipPosition.w์—๋Š” -ViewPosition.z๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ , ๋ทฐ ํฌ์ง€์…˜์€ -1์ด ์ •๋ฉด์ด๊ธฐ ๋•Œ๋ฌธ์—,ย 

-ViewPosition.z๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ์นด๋ฉ”๋ผ ์ŠคํŽ˜์ด์Šค ์ƒ์˜ z๊ฐ’์„ ์˜๋ฏธํ•ด. ๊ทธ๋Ÿฌ๋‹ˆ๊น, ์นด๋ฉ”๋ผ๋กœ๋ถ€ํ„ฐ ์–ผ๋งˆ๋‚˜ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ์žˆ๋Š”์ง€๋กœ ๋‚˜๋ˆ„๋Š”๊ฑฐ์•ผ.


ํ”„๋กœ์ ์…˜์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ๊ฑด ๊ฑฐ๋ฆฌz๋กœย xy๊ฐ’์„ ๋‚˜๋ˆ„์–ด์ฃผ๋Š” ๊ณ„์‚ฐ์ธ๋ฐ,

(์นด๋ฉ”๋ผ์˜ ์ •๋ฉด์ด z๋‹ˆ๊น, x,y๋ฐฉํ–ฅ์€ ๊ณง ํ™”๋ฉด์˜ ๊ฐ€๋กœ ์„ธ๋กœ ๋ฐฉํ–ฅ์„ ์˜๋ฏธ, ๋ฉ€๋ฆฌ ์žˆ์„์ˆ˜๋ก ํ™”๋ฉด ์ค‘์•™์œผ๋กœ ๋ชจ์ด๋„๋ก),ย 

ํ”„๋กœ์ ์…˜ ๋งคํŠธ๋ฆญ์Šค์—๋Š” ํ•ด๋‹น ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†์–ด.


๊ฐ™์€ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ์ˆ˜๋งŽ์€ ์ •์ ์— ์ ์šฉ์‹œ์ผœ์ค˜์•ผ ํ•˜๋Š”๋ฐ ๊ฑฐ๊ธฐ์— ๊ฑฐ๋ฆฌ ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด ๋‹ค๋ฅธ ์ •์ ์—์„œ ์ด์šฉํ•  ์ˆ˜ ์—†๊ฑฐ๋“ .

(์ ์–ด๋„ ๋‚œ ๊ทธ๋ ‡๊ฒŒ ์ดํ•ดํ–ˆ์–ด)


๊ทธ๋ž˜์„œ ๊ทธ ๊ณ„์‚ฐ์€ ๋ฒ„ํ…์Šค ํ•จ์ˆ˜์—์„œ ํ”„๋กœ์ ์…˜ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ์ ์šฉํ•ด์„œ ๊ฐ’์„ ๋‚ด๋ณด๋‚ด๋ฉด,ย ์ž๋™์œผ๋กœ w๋กœ ๋‚˜๋‰˜์–ด์„œ ํ”„๋ž˜๊ทธ๋จผํŠธ ํ•จ์ˆ˜์— ๋„๋‹ฌํ•ด.

์ „์— i.vertex์— ํด๋ฆฝ์ŠคํŽ˜์ด์Šค float4๋ฅผ ๋ณด๋ƒˆ๋Š”๋ฐ ํ”„๋ž˜๊ทธ๋จผํŠธ ํ•จ์ˆ˜์—์„œ ์™œ ๋‹ค๋ฅธ๊ฐ’์ด ์˜ค๋Š”์ง€ ๋ชฐ๋ž์—ˆ๋Š”๋ฐ, clip.w๋กœ ๋‚˜๋‰˜์–ด์„œ ๋„๋‹ฌํ•˜๋”๋ผ.


๋ށ์Šค


์—ฌ๊ธฐ์„œ clip.z/clip.wย ๊ฐ’์ด ๋ށ์Šค ๊ฐ’์ด๊ณ , ๋ณดํ†ต ์ด๋ฏธ์ง€ ์ดํŽ™ํŠธ ์‰์ด๋” ์“ธ ๋•Œ _CameraDepthTexure์— ๋“ค์–ด์žˆ๋Š” ๊ทธ ๊ฐ’์ด์•ผ.

๋งŒ์•ฝ 0~1์ด ์•„๋‹ˆ๋ผ -1~1์ด ๋‚˜์˜ค๋Š” OpenGl์„ ์ด์šฉ์ค‘์ด๋ฉด ์•„๋งˆ ๋ณ€ํ™˜๋˜์„œ 0~1๊ฐ’์œผ๋กœ ๋ฒ„ํผ์— ๋“ค์–ด๊ฐˆ๊ฑฐ์•ผ.

https://forum.unity.com/threads/reading-_cameradepthtexture-and-reconstructing-world-space-position.535729/


ReversedZ๋ฅผ ์ด์šฉํ•˜๋ƒ ์•ˆํ•˜๋ƒ๋Š” ํ”„๋กœ์ ์…˜ ๋งคํŠธ๋ฆญ์Šค์ชฝ์— ์ ์šฉ์ด ๋˜์–ด์žˆ๊ณ , ํ•ด๋‹น ์—ฌ๋ถ€์— ๋”ฐ๋ผย clip.z/clip.w๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ’์ด 0~1์ธ์ง€, 1~0์ธ์ง€๊ฐ€ ๊ฒฐ์ •๋ผ.



์—ฌ๊ธฐ์„œ ๊ตฌํ•ด์ง„ ๋ށ์Šค๊ฐ’์€ ์„ ํ˜•์ด ์•„๋‹ˆ์•ผ.

clip.z๋Š” ํ”„๋กœ์ ์…˜ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ณด๋ฉด a * view.z + b์ด๊ณ , clip.w ๋Š” -view.z์•ผ. ์ฐธ๊ณ ๋กœ a๋Š” ํ”„๋กœ์ ์…˜ ๋งคํŠธ๋ฆญ์Šค P[2,2], b๋Š” P[2,3].

๊ทธ๋Ÿฌ๋‹ˆ๊น, ๋ށ์Šค๊ฐ’์€ -a - b/view.z๋‹ˆ๊น, ๋Œ€์ถฉ 1/x ๊ทธ๋ž˜ํ”„๊ฐ€ ๋‚˜์˜ค๊ฒ ๋„ค.


์ด๊ฑธ ์„ ํ˜•์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋ฉด์„œ ๋™์‹œ์— ReversedZ๋„ ํ•ด๊ฒฐํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๊ฐ€ Linear01Depth์ธ๋ฐ, ์—ฌ๊ธฐ๋ถ€ํ„ด ๋‹ค์Œ์— ๋‚ดํ‚ค๋ฉด ๊ธ€ ๋˜ ์“ธ๊ฒŒ.

์›๋ž˜ ๋” ์“ฐ๋ ค ํ–ˆ๋Š”๋ฐ ์ง€์นœ๋‹ค.




๋ทฐ ๋งคํŠธ๋ฆญ์Šค์™€ ํ”„๋กœ์ ์…˜ ๋งคํŠธ๋ฆญ์Šค๋„ ์œ ๋‹ˆํ‹ฐ์—์„œ ๋งŒ๋“ค์–ด๋ดค์–ด.


๋ทฐ ๋งคํŠธ๋ฆญ์Šค


7cef9e36ebd518986abce8954780766ca016


๋ทฐ ๋งคํŠธ๋ฆญ์Šค์— ๋Œ€ํ•ด์„œ๋Š” ์ •๋ณด๊ฐ€ ๊ฑฐ์˜ ์—†์–ด์„œ ์ด๊ฒƒ์ €๊ฒƒ ํ•ด๋ณด๋ฉด์„œ ์•Œ์•„๋‚ธ๊ฑด๋ฐ,ย 

์šฐ์„  ์Šค์ผ€์ผ์€ 1๋กœ ๊ณ ์ •๋ผ. ์นด๋ฉ”๋ผ ์Šค์ผ€์ผ์„ ์กฐ์ •ํ•œ๋‹ค๊ณ  ํ•ด์„œ ํ™”๋ฉด์ƒ ๋น„์œจ์ด ์กฐ์ •๋˜์ง€ ์•Š์ž–์•„.

๋‹ค๋งŒ ์œ„์—์„œ ๋งํ–ˆ๋“ฏ์ด z๊ฐ€ -1 ๋ฐฉํ–ฅ์ด ์•ž์ด๊ธฐ ๋•Œ๋ฌธ์—, z ์Šค์ผ€์ผ์€ -1์ด ๋˜์–ด์•ผ ํ•ด.


๊ทธ๋ž˜์„œ ์Šค์ผ€์ผ์€ (1,1,-1)

์œ„์น˜๊ฐ’์€ ์œ„์—์„œ ํ–ˆ๋˜๋Œ€๋กœ ๋ถ€๋ชจ ์˜ค๋ธŒ์ ํŠธ์˜ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๊ณฑํ•ด๋‚˜๊ฐ€๋ฉด ๋ผ. transform.localToWorldMatrix๊ฐ€ ํ•ด๋‹น ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค˜.ย 

๋กœํ…Œ์ด์…˜๊ฐ’๋„ ์—ญ์‹œ ๋ถ€๋ชจ ์˜ค๋ธŒ์ ํŠธ์˜ ๋กœํ…Œ์ด์…˜๊ฐ’์„ ๊ณฑํ•ด๋‚˜๊ฐ€๋ฉด ๋ผ. Quaternion๋ผ๋ฆฌ ๊ณฑํ•ด์ค˜.


์ด์ œ ์ด 3๊ฐœ๋กœ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ์นด๋ฉ”๋ผ ์ŠคํŽ˜์ด์Šค์—์„œ ์›”๋“œ ์ŠคํŽ˜์ด์Šค๋กœ ๋ณด๋‚ด๋Š” ๋งคํŠธ๋ฆญ์Šค๊ฐ€ ์™„์„ฑ๋ผ.

์—ฌ๊ธฐ์— inverse๋ฅผ ์ ์šฉ์‹œํ‚ค๋ฉด, worldToCamera ๋งคํŠธ๋ฆญ์Šค๊ฐ€ ๋‚˜์™€.




7cee9e36ebd518986abce8954789726411


7ce99e36ebd518986abce8954788756e8f




ํ”„๋กœ์ ์…˜ ๋งคํŠธ๋ฆญ์Šค


์œ ๋‹ˆํ‹ฐ ๋‚ด๋ถ€์—์„œ ๊ณ„์‚ฐํ• ๋•, OpenGL์˜ ํ˜•์‹์„ ์ด์šฉํ•˜๊ณ  gpu๋กœ ๋ณด๋‚ด๊ธฐ ์ „์— GL.GetGpuProjectionMatrix()๋ฅผย ์ ์šฉ์‹œ์ผœ์ค˜์•ผ ๋ผ.


7ceb9e36ebd518986abce895478074687b1e


7ce89e36ebd518986abce8954789766dfac2


halfWidthNear๋Š” Near Plane์—์„œ์˜ Width/2 ๊ฐ’์ด์•ผ.


Tan(์‹œ์•ผ๊ฐ / 2.0f)ํ•˜๋ฉด ์นด๋ฉ”๋ผ๋กœ๋ถ€ํ„ฐ ๊ฑฐ๋ฆฌ๊ฐ€ 1์ธ ์ƒํƒœ์—์„œ์˜ ํ™”๋ฉด์˜ ๊ฐ€๋กœ ์ ˆ๋ฐ˜ย ํฌ๊ธฐ๊ฐ€ ๋‚˜์™€. ๊ฑฐ๊ธฐ์— near plane ๊ฑฐ๋ฆฌ๋ฅผ ๊ณฑํ•ด์ฃผ๋ฉด NearPlane์—์„œ์˜ Width/2๊ฐ€ ๋‚˜์˜ค๊ณ .

aspect๋Š” ๊ฐ€๋กœ์„ธ๋กœ ๋น„์œจ์ด์•ผ.


ํ”„๋กœ์ ์…˜ ๋งคํŠธ๋ฆญ์Šค ์ž์ฒด์— ๋“ค์–ด๊ฐ€๋Š” ๊ฐ’์€ ์†”์งํžˆ ์–ด๋–ป๊ฒŒ ์œ ๋„๋œ๊ฑด์ง€ ์•Œ์•„๋ณธ์ ์ด ์—†๋Š”๋ฐ, ์–ด๋–ค ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋Š”์ง€๋Š” ์ •ํ•ด์ ธ ์žˆ์–ด์„œ ๊ทธ๋Œ€๋กœ ๋„ฃ์–ด์คฌ์–ด.


7cea9e36ebd518986abce8954484746567


7ce59e36ebd518986abce8954484736d87


7ce49e36ebd518986abce895448472643e



์•„๋งˆ๋„ Reversed Z๊ฐ€ ์ ์šฉ๋œ ํ”„๋กœ์ ์…˜ ๋งคํŠธ๋ฆญ์Šค. ์ž˜ ๋ชจ๋ฅด๊ฒ ์–ด.

7fed9e36ebd518986abce895448572694a



๊ทธ๋ž˜์„œ ์ด๋Ÿฐ๊ฒŒ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ๊ฐ€?

์—์…‹ ์‰์ด๋”๋“ค ์ˆ˜์ •ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์— ๋งž์ถ”๋ ค๋ฉด ํ•„์š”ํ•˜๋”๋ผ.




2ํŽธ์€ ์žˆ์„์ˆ˜๋„ ์žˆ๊ณ  ์—†์„์ˆ˜๋„ ์žˆ์–ด