undefined

5๊ฐ• ์žฌ์งˆ part3 - ํ…์Šค์ณ

map ์†์„ฑ

  • ํ…์Šค์ณ ๊ฐ์ฒด๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ์˜ ํ‘œ๋ฉด์— ์ง€์ •๋œ ํ…์Šค์ณ์˜ ์ด๋ฏธ์ง€๊ฐ€ ์˜ท์ฒ˜๋Ÿผ ์ž…ํ˜€์ง
  • ๋ฉ”์‰ฌ์˜ ๋ชจ๋“  material์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

ํ…์Šค์ณ ๊ฐ์ฒด

  • ์ด๋ฏธ์ง€๋‚˜ ๋™์˜์ƒ ๋“ฑ์„ ํ†ตํ•ด ์ƒ์„ฑ๋œ๋‹ค
  • TextureLoader๋ฅผ ํ†ตํ•ด ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค

 

UV ์ขŒํ‘œ

ํ…์Šค์ณ ๋งตํ•‘์€ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ์— UV ์ขŒํ‘œ๋กœ ๋งตํ•‘๋˜์–ด ์žˆ๋‹ค.

  • 0๊ณผ 1 ์‚ฌ์ด์˜ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.
  • U: ์ˆ˜ํ‰ ๋ฐฉํ–ฅ์— ๋Œ€ํ•œ ์ถ•, V: ์ˆ˜์ง ๋ฐฉํ–ฅ์— ๋Œ€ํ•œ ์ถ•
  • three.js์˜ uv ์ขŒํ‘œ (0,0)์€ ์ขŒ์ธก ํ•˜๋‹จ์ด๊ณ , (1,1)์€ ์šฐ์ธก ์ƒ๋‹จ์ด๋‹ค.

PRACTICE: MeshStandardMaterial์— ํ…์Šค์ณ ์ ์šฉํ•˜๊ธฐ

๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” MeshStandardMaterial์— ์ ์šฉํ•ด ๋ณด์ž

  1. ์ด๋ฏธ์ง€๋กœ ํ…์Šค์ณ ๊ฐ์ฒด ์ƒ์„ฑํ•˜๊ธฐ
    • ์ด๋ฏธ์ง€๊ฐ€ ๋„คํŠธ์›Œํฌ์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ๋‹ค์šด๋กœ๋“œ๋˜๊ณ  ํ…์Šค์ณ ์ƒ์„ฑ์ด ์™„๋ฃŒ๋˜๋ฉด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
  2. const textureLoader = new THREE.TextureLoader();
     const map = textureLoader.load( '/assets/uv_grid_opengl.jpg', texture => {} )
  3. material์˜ map ์†์„ฑ์— ์ด ๊ฐ์ฒด๋ฅผ ์ง€์ •ํ•ด ์ค€๋‹ค.
  4. const material = new THREE.MeshStandardMaterial({ map });
  5. ํ…์Šค์ณ์˜ ์†์„ฑ์„ ์ง€์ •ํ•œ๋‹ค. textureLoader.load์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์—์„œ ๊ตฌํ˜„ํ•ด ์ค€๋‹ค.
  6. const map = textureLoader.load(
      '/assets/uv_grid_opengl.jpg',
      texture => {
        // texture์˜ ๋ฐ˜๋ณต์ˆ˜
        texture.repeat.x = 1
        texture.repeat.y = 1
        // texture๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐ˜๋ณตํ•  ๊ฒƒ์ธ์ง€ ์ง€์ •
        texture.wrapS = THREE.RepeatWrapping texture.wrapT = THREE.RepeatWrapping
    })
  7. ํ…์Šค์ณ์˜ ์†์„ฑ์€ ํ…์Šค์ณ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ์ดํ›„์— ์„ค์ •๋˜์–ด์•ผ ํ•จ

 

texture์˜ wrapS, wrapT ์†์„ฑ

texture.repeat ์†์„ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉฐ, texture๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐ˜๋ณตํ•  ๊ฒƒ์ธ์ง€ ์ง€์ •

  • RepeatWrapping: ์ดํ›„ ๋ฐ˜๋ณต์— ๊ฐ™์€ ์ด๋ฏธ์ง€๋กœ ์ฑ„์›€
  • ClampToEdgeWrapping: ์ดํ›„ ๋ฐ˜๋ณต์— ์ด๋ฏธ์ง€์˜ ๋๋‹จ ํ”ฝ์…€๋กœ๋งŒ ๋‚˜๋จธ์ง€ ์˜์—ญ์„ ์ฑ„์›€
  • MirroredRepeatWrapping: ์ง์ˆ˜๋ฒˆ์งธ ๋ฐ˜๋ณต์—์„œ ์ด๋ฏธ์ง€๊ฐ€ ๋’ค์ง‘ํžŒ ๋ชจ์–‘์œผ๋กœ ๋งตํ•‘

 

texture์˜ magFilter, minFilter ์†์„ฑ

ํ…์Šค์ณ ์ด๋ฏธ์ง€์˜ ์›๋ž˜ ํฌ๊ธฐ๋ณด๋‹ค ํ™•๋Œ€ ๋˜๋Š” ์ถ•์†Œ๋˜์–ด ๋ Œ๋”๋ง ๋  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•„ํ„ฐ

magFilter

  • LinearFilter: ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด 4๊ฐœ์˜ ํ”ฝ์…€ ์ƒ‰์ƒ์„ ์–ป์–ด์™€ ์„ ํ˜• ๋ณต๊ฐ„ํ•œ ๊ฐ’์„ ์‚ฌ์šฉ
  • NearestFilter: ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ•˜๋‚˜์˜ ํ”ฝ์…€ ์ƒ‰์ƒ์„ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉ → ์ด๋ฏธ์ง€๋ฅผ ํ™•๋Œ€ํ• ์ˆ˜๋ก ๊ณ„๋‹จ ํ˜„์ƒ์ด ๋ฐœ์ƒ (๊ธฐ๋ณธ๊ฐ’)

minFilter

** mipMap: ์›๋ž˜์˜ ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์—ฌ์„œ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“์€ ์ด๋ฏธ์ง€ ์…‹

  • NearestFilter: mipMap์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ”ฝ์…€ ํ•˜๋‚˜๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉ
  • LinearFilter: mipMap์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด 4๊ฐœ์˜ ํ”ฝ์…€ ์ƒ‰์ƒ์„ ์–ป์–ด์™€ ์„ ํ˜• ๋ณด๊ฐ„ํ•œ ๊ฐ’์„ ์‚ฌ์šฉ
  • NearestMipmapNearestFilter: ๋ Œ๋”๋ง ํ•  ํฌ๊ธฐ์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด mipMap ์ด๋ฏธ์ง€ 1๊ฐœ๋ฅผ ์„ ํƒํ•œ ํ›„ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ”ฝ์…€ 1๊ฐœ๋ฅผ ์‚ฌ์šฉ
  • LinearMipmapNearestFilter: ๋ Œ๋”๋ง ํ•  ํฌ๊ธฐ์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด mipMap ์ด๋ฏธ์ง€ 1๊ฐœ๋ฅผ ์„ ํƒํ•œ ํ›„ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด 4๊ฐœ์˜ ํ”ฝ์…€ ์ƒ‰์ƒ์„ ์–ป์–ด์™€ ์„ ํ˜• ๋ณด๊ฐ„ํ•œ ๊ฐ’์„ ์‚ฌ์šฉ
  • LinearMipmapLinearFilter: ๋ Œ๋”๋ง ํ•  ํฌ๊ธฐ์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด MipMap ์ด๋ฏธ์ง€ 2๊ฐœ๋ฅผ ์„ ํƒํ•œ ํ›„ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ”ฝ์…€ 4๊ฐœ๋ฅผ ์–ป๋Š”๋‹ค. ์ด๋ฅผ ์„ ํ˜• ๋ณด๊ฐ„ํ•˜์—ฌ 2๊ฐœ์˜ ์ƒ‰์ƒ๊ฐ’์„ ์–ป๊ณ  ์ด๋ฅผ ๋‹ค์‹œ ๊ฐ€์ค‘์น˜ ํ‰๊ท ํ•œ ๊ฐ’์„ ์‚ฌ์šฉ
  • NearestMipmapLinearFilter: ๋ Œ๋”๋งํ•  ํฌ๊ธฐ์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด mipMap ์ด๋ฏธ์ง€ 2๊ฐœ๋ฅผ ์„ ํƒํ•œ ํ›„ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ”ฝ์…€์„ 1๊ฐœ์”ฉ ์–ป๋Š”๋‹ค. ์ด 2๊ฐœ์˜ ํ”ฝ์…€์˜ ๊ฐ€์ค‘์น˜ ํ‰๊ท ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค.

minFilter๋กœ mipMap์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ์˜ณ์„๊นŒ?

์žฅ์ 

  • ํ’ˆ์งˆ์ด ์ข‹๋‹ค

๋‹จ์ 

  • mipMap ์ƒ์„ฑ์— ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํฌ๋‹ค
  • ๋ Œ๋”๋ง ์‹œ ํ•˜๋‚˜์˜ ํ”ฝ์…€๊ฐ’์„ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ์‚ฐ๋Ÿ‰์ด ๋ชจ๋‘ ๋‹ค๋ฅด๋‹ค

ํ…์Šค์ณ ๋งตํ•‘์˜ ํฌ๊ธฐ ๋“ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์ ์ ˆํ•œ minFilter ๊ฐ’์„ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค


 

๋งˆ๋ฌด๋ฆฌ

ํ’ˆ์งˆ์— ๋Œ€ํ•œ ๋งค์šฐ ์„ธ๋ฐ€ํ•œ ์กฐ์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด ๋†€๋ผ์› ๋‹ค.

๋งค์šฐ ๊ณ ๋„ํ™”๋œ 3D ๊ทธ๋ž˜ํ”ฝ์„ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด mipMap์„ ์ž˜ ํ™œ์šฉํ•˜์—ฌ ํ’ˆ์งˆ์„ ๋†’์ด๋Š” ์ž‘์—…์ด ํ•„์š” ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

ํ•˜์ง€๋งŒ ๋Š˜ ๊ทธ๋ ‡๋“ฏ ํ’ˆ์งˆ๊ณผ ์ตœ์ ํ™” ์‚ฌ์ด์˜ ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„๋Š” ์กด์žฌํ•˜๋ฏ€๋กœ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ํŒ๋‹จ์„ ๋‚ด๋ ค์•ผ ํ•  ๊ฒƒ์ด๋‹ค.