Image_mapping - miniRT-jiphyeonjeon/MiniRT GitHub Wiki

Texture image mapping

uv ๊ฐ’์„ ์ด์šฉํ•ด checkerboard๋ฅผ ์ž…ํ˜€๋ดค์œผ๋‹ˆ, ์ด์ œ๋Š” texture ์ด๋ฏธ์ง€๋ฅผ ํ™œ์šฉํ•ด๋ณด์ž.

๋ฏธ๋ฆฌ ๊ตฌํ•ด๋†“์€ uv๋ฅผ ์ด์šฉํ•ด์„œ ์ด๋ฏธ์ง€๋ฅผ ์ž…ํžˆ๋Š” ๊ฒƒ์€ ์‰ฝ๋‹ค. 0๋ถ€ํ„ฐ 1๊นŒ์ง€๋กœ ํ‘œํ˜„๋œ uv๋ฅผ 0๋ถ€ํ„ฐ width(height)๋กœ ํ™•์žฅํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค!


์ฆ‰, ๊ตฌํ•ด์ง„ uv ๊ฐ’์— ์ด๋ฏธ์ง€์˜ ๋„ˆ๋น„์™€ ๋†’์ด๋ฅผ ๊ฐ๊ฐ ๊ณฑํ•ด์ฃผ๊ณ  ์ •์ˆ˜ํ™”ํ•ด์ค€๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋‚˜์˜จ ๊ฐ’์ด ์ด๋ฏธ์ง€์—์„œ ์ƒ‰ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”ฝ์…€ ๊ฐ’์ด ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ ์กฐ๊ธˆ ๋” ํ€„๋ฆฌํ‹ฐ ๋†’์€ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ธฐ๋ฒ•(oversampling, undersampling)์ด ์ถ”๊ฐ€๋  ์ˆ˜๋„ ์žˆ์ง€๋งŒ miniRT์—์„œ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•˜์ง€๋Š” ์•Š์•˜๋‹ค.


Bump map

๋ฌผ์ฒด์— texture, ์งˆ๊ฐ์„ ํ‘œํ˜„ํ•˜๊ณ  ์‹ถ์„ ๋•Œ, ๋‹จ์ˆœํžˆ ์ด๋ฏธ์ง€๋ฅผ ์ž…ํ˜€์ฃผ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•˜๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํ‰๋ฉด์„ ๋Œ๋ฐ”๋‹ฅ์œผ๋กœ ํ‘œํ˜„ํ•˜๊ณ ์ž ํ–ˆ๋Š”๋ฐ ๋Œ์€ ํšŒ์ƒ‰์ด๊ณ  ํ™์€ ๊ฐˆ์ƒ‰์œผ๋กœ ์น ํ•ด๋†“๊ธฐ๋งŒ ํ•˜๋ฉด ๊ทธ ์ž์ฒด๋ฅผ ๋Œ๋ฐ”๋‹ฅ์œผ๋กœ ๋ณด๊ธฐ์—” ์–ด์ƒ‰ํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.

์–ด์ƒ‰ํ•œ ์ด์œ ๋Š”, ์‹ค์ œ ๋Œ๋ฐ”๋‹ฅ์˜ ๊ฒฝ์šฐ ๋Œ์ด ์šธํ‰๋ถˆํ‰ ์ž…์ฒด์ ์œผ๋กœ ํŠ€์–ด๋‚˜์™€์žˆ๊ณ , ๊ทธ์— ๋”ฐ๋ผ ๋น›๊ณผ์˜ ์ƒํ˜ธ์ž‘์šฉ๋„ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด๋Ÿด ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ด ๋ฐ”๋กœ bump mapping์ด๋‹ค.


bump map์€ ๋ง ๊ทธ๋Œ€๋กœ ๋น›๊ณผ์˜ ์ถฉ๋Œ, ์ƒํ˜ธ์ž‘์šฉ๊ณผ ๊ด€๋ จ๋œ ๋†’๋‚ฎ์ด๋‚˜ ๋ฐฉํ–ฅ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋งํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” ์—ฌ๋Ÿฌ bump map ์ข…๋ฅ˜ ์ค‘์—์„œ normal vector์˜ xyz ๊ฐ’์„ ๋‹ด๊ณ  ์žˆ๋Š” normal map์„ ์ด์šฉํ–ˆ๋‹ค.

Screen Shot 2022-04-18 at 4 17 49 PM



RGB ๊ฐ’์„ ์ •๊ทœํ™”ํ•˜๋ฉด [0, 1] ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, vector ๊ฐ’์€ [-1, 1]์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง„๋‹ค.

๋”ฐ๋ผ์„œ color๊ฐ€ normal vector๋กœ ํ‘œํ˜„๋˜๋Š” ์ˆ˜์‹์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

Screen Shot 2022-04-18 at 4 17 57 PM



์ด๋ฏธ์ง€๊ฐ€ ์ „์ฒด์ ์œผ๋กœ ํ‘ธ๋ฅธ ๋น›์„ ๋„๋Š” ์ด์œ ๋„ ์—ฌ๊ธฐ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ x๋Š” ๊ฐ€๋กœ๋ฐฉํ–ฅ, y๋Š” ์„ธ๋กœ๋ฐฉํ–ฅ์„ ์˜๋ฏธํ•˜๋ฉฐ ๋‚จ์•„์žˆ๋Š” z๋Š” ์˜ค๋ฅธ์† ์ขŒํ‘œ๊ณ„์— ๋”ฐ๋ผ ๋ชจ๋‹ˆํ„ฐ๋ฅผ ๋šซ๊ณ  ๋‚˜์˜ค๋Š” ๋ฐฉํ–ฅ์„ ์˜๋ฏธํ•˜๊ฒŒ ๋˜๋Š”๋ฐ,

normal vector ์ž์ฒด๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ํ‘œ๋ฉด ๋ฐ”๊นฅ์„ ํ–ฅํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— x์™€ y๊ฐ€ [-1, 1] ๋ฒ”์œ„๋ฅผ ๊ฐ–๋Š” ๋™์•ˆ

z์˜ ๊ฒฝ์šฐ๋Š” ๋Œ€๋ถ€๋ถ„ 0 ์ด์ƒ์˜ ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋˜์–ด rgb ์ค‘์—์„œ๋„ b ๊ฐ’์ด ์šฐ์„ธํ•˜๊ฒŒ ๋ณด์ด๋Š” ๊ฒƒ์ด๋‹ค.


Bump map ์ ์šฉํ•˜๊ธฐ

normal vector ๊ฐ’์„ ๊ตฌํ–ˆ๋‹ค๋ฉด, ์ด๊ฑธ ๋ฌผ์ฒด์˜ ์‹ค์ œ normal vector๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

์ด ๋•Œ ๊ตฌํ•ด์ค˜์•ผํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ tangent space์ด๋‹ค.

Screen Shot 2022-04-18 at 4 18 07 PM



์ ‘์„  ๊ณต๊ฐ„์ด๋ผ๊ณ  ํ•˜๋‹ˆ ๋ญ”๊ฐ€ ๊ดœํžˆ ๋ณต์žกํ•  ๊ฒƒ ๊ฐ™์•„๋ณด์ด์ง€๋งŒ, ์‚ฌ์‹ค uv map์„ ์œ„ํ•ด u, v vector๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ๊ณผ ๋˜‘๊ฐ™๋‹ค.

์ด๋ฆ„๋งŒ tangent, bitanget๋ฅผ ๋œปํ•˜๋Š” t, b๋กœ ๋ฐ”๋€ ๊ฒŒ ์ „๋ถ€์ด๋‹ค.


์ด๋ ‡๊ฒŒ ๊ตฌํ•œ ์ขŒํ‘œ๊ณ„์™€ ์œ„์—์„œ ๊ณ„์‚ฐํ•œ normal map์˜ ์ •๋ณด๋ฅผ ํ–‰๋ ฌ์—ฐ์‚ฐ์œผ๋กœ ๊ณ„์‚ฐํ•ด์ฃผ์ž.

Screen Shot 2022-04-18 at 4 18 14 PM



๊ณ„์‚ฐ๋œ ๊ฐ’์œผ๋กœ ๊ธฐ์กด normal vector๋ฅผ ๋Œ€์ฒดํ•ด์ฃผ๋ฉด, ์ƒ๋Œ€์ ์œผ๋กœ ์ž์—ฐ์Šค๋Ÿฌ์šด ์งˆ๊ฐ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค!

Screen Shot 2022-04-18 at 4 18 32 PM
โš ๏ธ **GitHub.com Fallback** โš ๏ธ