[TIL] 22.10.11 ๐Ÿ’Œ

yesยท2022๋…„ 10์›” 11์ผ
0

TIL ๐Ÿ’Œ

๋ชฉ๋ก ๋ณด๊ธฐ
35/55
post-thumbnail

๊ณผ์ œ ๋•Œ๋ฌธ์— three.js ๊ฐ•์ œ ๊ณต๋ถ€ ์ค‘

three.js ์ง„์งœ ๋„ˆ๋ฌด ์–ด๋ ค์šด๋ฐ ๊ฒฐ๊ณผ๋ฌผ ๋ณด๋Š”๊ฒŒ ๋„ˆ๋ฌด ์žฌ๋ฐŒ๋‹ค.


3. ๊ธฐ๋ณธ ๋ผˆ๋Œ€ ์ดํ•ดํ•˜๊ธฐ Renderer, Scene, Camera

  • Renderer : ์นด๋ฉ”๋ผ์— ๋‹ด๊ธด ์žฅ๋ฉด์„ ์›น์‚ฌ์ดํŠธ์— ๊ตฌํ˜„ํ•ด์ฃผ๋Š” ๋ Œ๋”๋Ÿฌ
  • Scene ๋ฐฐ๊ฒฝ์ƒ‰, ์•ˆ๊ฐœ ๋“ฑ์˜ ์š”์†Œ ํฌํ•จ ์—ฌ๋Ÿฌ๊ฐœ์˜ 3D ์˜ค๋ธŒ์ ํŠธ์™€ ๋น›๋“ค์ด ๋ชจ์ธ ์žฅ๋ฉด
  • Camera ์žฅ๋ฉด์„ ํ™”๋ฉด์— ๋‹ด๊ธฐ ์œ„ํ•œ ์นด๋ฉ”๋ผ ์‹œ์•ผ๊ฐ, ์ข…ํšก๋น„, ์นด๋ฉ”๋ผ ์‹œ์ž‘ ๋ ์ง€์ , ์นด๋ฉ”๋ผ ์œ„์น˜ ๋“ฑ ์„ค์ •

4. 3D ๋„ํ˜• ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•(+๋ฐ˜์‘ํ˜• ์ ์šฉ)

Geometry(๋ฌผ์ฒด์˜ ํ˜•ํƒœ)์™€ย Material(๋ฌผ์ฒด์˜ ์ƒ‰, ๋ฐ๊ธฐ, ์งˆ๊ฐ ๋“ฑ)์„ ์ด์šฉํ•ดย Mesh๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Mesh๋Š”ย Geometry,ย Material์™ธ์—๋„ ๋ฌผ์ฒด์˜ ์œ„์น˜, ๋ฐฉํ–ฅ, ํฌ๊ธฐ ๋“ฑ์„ ๋‹ด์€ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

  • Mesh๋Š” ์–ด๋–คย Material๋กœ ํ•˜๋‚˜์˜ย Geometry๋ฅผ ๊ทธ๋ฆฌ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.ย Material,ย Geometry๋Š” ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜์—ฌ ์—ฌ๋Ÿฌ๊ฐœ์˜ย Mesh๊ฐ€ ํ•˜๋‚˜์˜ย Materialย ๋˜๋Š”ย Geometry๋ฅผ ๋™์‹œ์— ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ๋ž€์ƒ‰ ์ •์œก๋ฉด์ฒด 2๊ฐœ๋ฅผ ๊ทธ๋ฆฐ๋‹ค๊ณ  ํ•ด๋ณด์ฃ . ์ผ๋‹จ ๋‘ ์ •์œก๋ฉด์ฒด์˜ ์œ„์น˜๊ฐ€ ๋‹ฌ๋ผ์•ผ ํ•˜๋‹ˆ, 2๊ฐœ์˜ย Mesh๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ •์ (vertext, ๊ผญ์ง€์ ) ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ ํ•œ ๊ฐœ์˜ย Geometry์™€ ์ฑ„์ƒ‰์„ ์œ„ํ•œ ํ•˜๋‚˜์˜ย Material์ด ํ•„์š”ํ•˜๊ฒ ์ฃ . ์ด๋•Œ ๊ฐย Mesh๋Š” ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•  ํ•„์š” ์—†์ด, ๊ฐ™์€ย Geometryย ๊ทธ๋ฆฌ๊ณ ย Material์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Geometry๋Š” ๊ธฐํ•˜ํ•™ ๊ฐ์ฒด์˜ ์ •์  ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ๊ตฌ(sphere), ์ •์œก๋ฉด์ฒด(cube), ๋ฉด(plane), ๊ฐœ, ๊ณ ์–‘์ด, ์‚ฌ๋žŒ, ๋‚˜๋ฌด, ๊ฑด๋ฌผ ๋“ฑ ์•„์ฃผ ๋‹ค์–‘ํ•œ ๊ฒƒ์ด ๋  ์ˆ˜ ์žˆ์ฃ . Three.js๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ช‡ ๊ฐ€์ง€์˜ ๋‚ด์žฅ(built-in)ย ๊ธฐํ•˜ํ•™ ๊ฐ์ฒด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก ย ์ง์ ‘ ๊ธฐํ•˜ํ•™ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“คย ์ˆ˜๋„ ์žˆ๊ณ ,ย ํŒŒ์ผ์—์„œ ๊ธฐํ•˜ํ•™ ๊ฐ์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌย ์ˆ˜๋„ ์žˆ์ฃ .
  • Material์€ ๊ธฐํ•˜ํ•™ ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š”ย ํ‘œ๋ฉด ์†์„ฑ์ž…๋‹ˆ๋‹ค. ์ƒ‰์ด๋‚˜ ๋ฐ๊ธฐ ๋“ฑ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ฃ . ํ•˜๋‚˜์˜ย Material๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ย Texture๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐํ•˜ํ•™ ๊ฐ์ฒด์˜ ํ‘œ๋ฉด์„ ์ด๋ฏธ์ง€๋กœ ๋ฎ์–ด์”Œ์šธ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜์ฃ .
  • Texture๋Š” ์ด๋ฏธ์ง€๋‚˜ย ํŒŒ์ผ์—์„œ ๋กœ๋“œํ•œ ์ด๋ฏธ์ง€,ย canvas๋กœ ์ƒ์„ฑํ•œ ์ด๋ฏธ์ง€ย ๋˜๋Š”ย ๋‹ค๋ฅธย Sceneย ๊ฐ์ฒด์—์„œ ๋ Œ๋”๋งํ•œ ๊ฒฐ๊ณผ๋ฌผ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • Light๋Š”ย ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ๊ด‘์›์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค

๋„ํ˜• ๋ชจ์–‘ ๋ฐ”๊พธ๋Š” ๋ฒ• : Gemoetry ๊ฐ์ฒด ์ƒ์„ฑํ•  ๋•Œ Docs์—์„œ geometry ์ฐพ์•„์„œ ์ƒ์„ฑ

WebGLRenderer( parameters :ย Objectย )

์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” parameters

  • canvasย : Aย canvas where the renderer draws its output. This corresponds to theย domElement property below. If not passed in here, a new canvas element will be created.
  • alpha : controls the default clear alpha value. When set toย true the value isย 0. Otherwise it'sย 1. Default isย false. ํˆฌ๋ช…๋„ ์กฐ์ ˆ.
  • antialiasย - whether to perform antialiasing. Default isย false. ๊ณ„๋‹จํ˜„์ƒ ์ œ๊ฑฐ.

5. ๋„ํ˜• ์žฌ์งˆ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ• (Material)

Light ์ถ”๊ฐ€ํ•˜๋Š” ๋ฒ•

PointLight ๊ฐ์ฒด ์ƒ์„ฑ (์ƒ‰, ๊ฐ•๋„)

PointLight ์œ„์น˜ set(x, y, z)

scene์— ์ถ”๊ฐ€

Material ์ดํ•ดํ•˜๊ธฐ

MeshBasicMaterial - ๋„ํ˜•์ด ์ œ๋Œ€๋กœ ๋ถˆ๋Ÿฌ์™€์กŒ๋Š” ์ง€ ํ™•์ธํ•˜๋Š” ์šฉ๋„. ๋น›์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Œ.

MeshStandardMaterial - ์ž์ฃผ ์‚ฌ์šฉ

MeshDepthMaterial - ๊นŠ์ด๊ฐ์„ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉ

MeshPhysicalMaterial - Basic ์ƒ์œ„ํ˜ธํ™˜ ๋ฒ„์ „ ๋Š๋‚Œ?

clearcoat : ํˆฌ๋ช…๋ง‰ ๊ฐ™์€ ๊ฒƒ

Lambert vs Phong

๋‘˜ ๋‹ค ๋น›์— ๋Œ€ํ•ด์„œ ํ‘œํ˜„

MeshPhongMaterial : ๋ฐ˜์‚ฌ ํ•˜์ด๋ผ์ดํŠธ๊ฐ€ ์žˆ๋Š” ๋ฐ˜์ง์ด๋Š” ํ•˜์ด๋ผ์ดํŠธ๊ฐ€ ์žˆ๋Š” ๊ธˆ์† ์žฌ์งˆ์„ ํ‘œํ˜„ํ•  ๋•Œ ์ข€ ๋” ์œ ๋ฆฌ

6. Material์— Texture ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

TextureLoadaer load ๋ฉ”์†Œ๋“œ ์ด์šฉํ•ด์„œ ์›ํ•˜๋Š” ์ด๋ฏธ์ง€ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ import ๊ฐ™์€ ๊ฒƒ์ž„.

์ด ๋กœ๋“œํ•œ ์ด๋ฏธ์ง€ ํ…์Šค์ณ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ Material์— ๊ฐ€์„œ map ์†์„ฑ ๊ฐ’์œผ๋กœ ๋„ฃ์–ด์ฃผ๊ธฐ.

์†์„ฑ ๊ฐ’ map, normoalMap, displacementMap ๋” ๊ณต๋ถ€ํ•ด์•ผ ํ•จ.

์ด๋Ÿฌํ•œ ๊ฐ’๋“ค์ด ๋ชจ์—ฌ์„œ ํ•˜๋‚˜์˜ ๋„ํ˜•์ด ์™„์„ฑ ๋จ

7. ์นด๋ฉ”๋ผ ์™„๋ฒฝ ์ดํ•ดํ•˜๊ธฐ

Fov

์‹œ์•ผ๊ฐ, ํ™”๊ฐ
์ธ๊ฐ„์— ์‹œ์•ผ๋ฒ”์œ„๋Š” ๋Œ€๋žต 160๋„ ์ •๋„

๋ Œ์ฆˆ์˜ ์ข…๋ฅ˜ (ํ™”๊ฐ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ์ฒซ ๋‹จ์ถ”) | ๋ Œ์ฆˆ ์ดˆ์ ๊ฑฐ๋ฆฌ | ํ™”๊ฐ (Fov)

  • ๊ด‘๊ฐ ๋ Œ์ฆˆ | 35mm ์ดํ•˜ | 63๋„ ์ด์ƒ
  • ํ‘œ์ค€ ๋ Œ์ฆˆ | 50mm | 47๋„
  • ๋ง์› ๋ Œ์ฆˆ | 75mm ์ด์ƒ | 28๋„ ์ดํ•˜

๋”ฐ๋ผ์„œ, Fov ๊ฐ’์ด ํด์ˆ˜๋ก ๋” ๋ฉ€๋ฆฌ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋จ

Aspect

์ข…ํšก๋น„ = ๊ฐ€๋กœ ์„ธ๋กœ ๋น„์œจ

Near, Far

Near์€ ์นด๋ฉ”๋ผ์˜ ์‹œ์ ์ด ์‹œ์ž‘๋˜๋Š” ์œ„์น˜๋ฅผ ๋งํ•˜๊ณ , Far์€ ์นด๋ฉ”๋ผ์˜ ์‹œ์ ์ด ๋๋‚˜๋Š” ์œ„์น˜๋ฅผ ๋งํ•œ๋‹ค.

์•ฑ์˜ ์„ฑ๋Šฅํ–ฅ์ƒ์„ ์œ„ํ•ด์„œ ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜

์นด๋ฉ”๋ผ๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š” ์œ„์น˜ ์„ค์ •

camera.lookAt ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ

์ฐธ๊ณ ์ž๋ฃŒ

๋””์ž์ธ๋ฒ ์ด์Šค ์œ ํŠœ๋ธŒ ๊ฐ•์˜

0๊ฐœ์˜ ๋Œ“๊ธ€