Material

Material

Material์˜ ์—ญํ• ์€ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ์˜ ๊ฐ ํ”ฝ์…€์— ์ƒ‰์ƒ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ

์ƒ‰์ƒ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ณผ์ •์€ ์กฐ๋ช…๊ณผ ๋ฉ”ํ…Œ๋ฆฌ์–ผ์˜ ๋ฌผ๋ฆฌ์  ํŠน์„ฑ์— ๋”ฐ๋ผ ํŠน์ •ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฑฐ์ณ ํ‘œ์‹œํ•  ์ƒ‰์ƒ์„ ๊ฒฐ์ •์ง“๊ฒŒ ๋˜๋Š”๋ฐ ์ด์— ํ•ด๋‹น๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ Shader ๋ฅผ ํ†ตํ•ด ์ž‘์„ฑ๋œ๋‹ค.

Property

์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹œ์  ๋˜๋Š”, ์ƒ์„ฑ ํ›„ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜๋Š” ์‹์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • color: Material์— ์ ์šฉ๋  ์ƒ‰์ƒ์„ ์„ค์ •

  • transparent: Material์„ ํˆฌ๋ช…ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€ ๊ฒฐ์ •(Bool), ์ด ์†์„ฑ์ด ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ๋ฌผ์ฒด์˜ ๋ถˆํˆฌ๋ช…๋„(opacity, alphaMap)๋ฅผ ์กฐ์ ˆํ•˜๋Š” ์†์„ฑ๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

  • visible: Mesh(์˜ค๋ธŒ์ ํŠธ)๊ฐ€ ํ™”๋ฉด์— ๋ณด์ด๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •(Bool)

  • wireframe: Material์˜ ๋ผˆ๋Œ€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค(Bool)

  • side: Material์˜ ์–‘๋ฉด ์ค‘ ์–ด๋Š์ชฝ์„ ๋ Œ๋”๋งํ• ์ง€ ๊ฒฐ์ •(FrontSide, BackSide, DoubleSide)

    • FrontSide โ†’ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ, ์•ž๋ฉด๋งŒ ๋ Œ๋”๋ง ๋œ๋‹ค.

    • BackSide โ†’ ์•ž๋ฉด์ด ์ œ์™ธ๋˜๊ณ , ๋’ท๋ฉด๋งŒ ๋ Œ๋”๋ง ๋œ๋‹ค .

    • DoubleSide โ†’ ์•ž๋’ท๋ฉด ๋ชจ๋‘ ๋ Œ๋”๋ง ๋œ๋‹ค. (์•ž๋’ท๋ฉด ๋ชจ๋‘ ๋ Œ๋”๋ง๋˜๊ธฐ์— ๊ทธ๋งŒํผ ๋ฆฌ์†Œ์Šค ๋น„์šฉ์ด ๋งŽ์ด ๋“ ๋‹ค.)

  • roughness: ํ‘œ๋ฉด์˜ ๊ฑฐ์น ๊ธฐ, ๊ฐ’์ด ๋‚ฎ์•„์งˆ์ˆ˜๋ก ๊ฑฐ์šธ์ฒ˜๋Ÿผ ๋น›์„ ๋ฐ˜์‚ฌํ•˜๋Š” ์ •๋„๊ฐ€ ์ปค์ง„๋‹ค.

  • metalness: ๊ฐ’์ด ์ปค์งˆ์ˆ˜๋ก ๊ธˆ์†์„ฑ ์žฌ์งˆ์ฒ˜๋Ÿผ ํ‘œํ˜„๋œ๋‹ค.

  • opacity: ๋จธํ„ฐ๋ฆฌ์–ผ์˜ ํˆฌ๋ช…๋„๋ฅผ ์กฐ์ ˆ

  • alphaTest: ์•ŒํŒŒ๊ฐ’์„ ์„ค์ •, opacity๊ฐ’์ด alphaTest๊ฐ’ ๋ณด๋‹ค ๋‚ฎ์•„์ง€๋ฉด ๋จธํ„ฐ๋ฆฌ์–ผ์ด ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋Š”๋‹ค.

  • depthTest: ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ์„ ํ†ตํ•ด ๋’ค์— ์žˆ๋Š” ๋ฉ”์‰ฌ์˜ ๋จธํ‹ฐ๋ฆฌ์–ผ์€ ๊ฐ€๋ ค์ง€๊ฒŒ ๋˜๋Š”๋ฐ, ํ•ด๋‹น ์†์„ฑ์„ true๋กœ ์„ค์ •ํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๊ณ„์‚ฐ์ด ๋ฌด์‹œ๋œ๋‹ค.

const material = new THREE.MashStandardMaterial({
  color: '#0066ff'// 0x0066ff, blue
  // new THREE.Color('#0066ff'), THREE.js์—์„œ ์ œ๊ณต๋˜๋Š” ์ปฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ตํ•ด ์ƒ‰์ƒ ์ง€์ • ๊ฐ€๋Šฅ
  transparent: true,
  opacity: 0.5, 
  visible: true, 
  wireframe: false,
  side: THREE.FrontSide, 
});

material.color = new THREE.Color('#0066ff'); // ์ง์ ‘ ๋ณ€๊ฒฝ  ๊ฐ€๋Šฅ

Built In Material

Three.js์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ Material๋ฅผ ์•Œ์•„๋ณด์ž .

  • LineBasicMaterial โ†’ ์„  ํ˜•ํƒœ์˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ

  • MeshBasicMaterial โ†’ ์ด๋ฆ„์ฒ˜๋Ÿผ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฉ”ํ…Œ๋ฆฌ์–ผ, ์กฐ๋ช…์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š” ํŠน์ง•์ด ์žˆ๋‹ค(์Œ์˜ ํ‘œํ˜„X)

  • MeshDepthMaterial โ†’ ์˜ค๋ธŒ์ ํŠธ์—์„œ ์นด๋ฉ”๋ผ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ์— ๋”ฐ๋ผ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ํ‘๋ฐฑ์œผ๋กœ ์ฑ„์ƒ‰ํ•˜๋Š” ๋ฉ”ํ…Œ๋ฆฌ์–ผ, ๋ฌผ์ฒด์˜ ๋’ท๋ถ€๋ถ„์€ ๋” ์–ด๋‘ก๊ฒŒ ์ฑ„์ƒ‰๋œ๋‹ค. (์กฐ๋ช…์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Œ)

  • MeshLambertMaterial โ†’ ์กฐ๋ช…์— ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋ฉ”ํ…Œ๋ฆฌ์–ผ (๋ฐ˜์‚ฌ๊ด‘ X)

  • MeshPhongMaterial โ†’ MeshLambertMaterial๋Š” ๋ฌผ์ฒด๊ฐ€ ๋น›์„ ๋ฐ›์•˜์„ ๋•Œ ์ƒ๊ธฐ๋Š” ๋ฐ˜์‚ฌ์ ์„ ํ‘œํ˜„ํ•˜๋Š”๋ฐ ํ•œ๊ณ„๊ฐ€ ์žˆ๋Š”๋ฐ, ํ•ด๋‹น ๋ฉ”ํ…Œ๋ฆฌ์–ผ์€ ์ด๋ถ€๋ถ„์„ ์ž˜ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.(๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์กฐ๋ช…์— ์˜ํ–ฅ์„ ๋ฐ›์Œ)

  • MeshStandardMaterial โ†’ PBR(Physical Based Rendering) ๋ฌผ๋ฆฌ ๊ธฐ๋ฐ˜ ๋ Œ๋”๋ง์„ ์‚ฌ์šฉ, ์ด ๋ฐฉ์‹์€ ๋Œ€๋ถ€๋ถ„์˜ ๋งŽ์€ 3d ์—”์ง„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ‘œ์ค€ ๋ฐฉ์‹์ด๋ฏ€๋กœ Standard๋ผ๋Š” ์ด๋ฆ„์ด ๋ถ™ํ˜€์ง,

    • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์กฐ๋ช…์— ์˜ํ–ฅ์„ ๋ฐ›์Œ

    • ์žฌ์งˆ์˜ ๊ธˆ์†์„ฑ๊ณผ ๊ฑฐ์น ๊ธฐ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ํ‘œํ˜„ํ•ด์•ผ ํ•˜๋Š” ์˜์—ญ์ด ๋งŽ์€ ๋งŒํผ ๋น„๊ต์  ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

  • MeshPhysicalMaterial โ†’ MeshStandardMaterial์˜ ํ–ฅ์ƒ๋œ ๋ฒ„์ „์œผ๋กœ ์‚ฌ์‹ค์ ์ธ ํˆฌ๋ช…ํ•œ ํšจ๊ณผ์™€ ๋” ๋‚˜์€ ๋ฐ˜์‚ฌํšจ๊ณผ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • MeshToonMaterial โ†’ ๋งŒํ™” ํ˜•ํƒœ์˜ ์žฌ์งˆ์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • MeshMatcapMaterial -> ๋ฏธ๋ฆฌ ์ •์˜๋œ ํ…์Šค์ฒ˜ ๋งต์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌผ์ฒด์˜ ํ‘œ๋ฉด์„ ๋ Œ๋”๋ง, ๋ณต์žกํ•œ ๋น› ๊ณ„์‚ฐ์„ ๊ฑด๋„ˆ๋›ฐ๊ธฐ ๋•Œ๋ฌธ์— ๋ Œ๋”๋ง ์‹œ๊ฐ„ ๋‹จ์ถ• ๋ฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ ์ด์ ์ด ์žˆ๋‹ค. (Light์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.)

    • matcaps -> ๋ฏธ๋ฆฌ ์ •์˜๋œ ํ…์Šค์ฒ˜ ๋งต(Material Capture), ๋น›์ด ์—†์–ด๋„ ์ž์ฒด์ ์œผ๋กœ ๋ช…์•”์„ ํ‘œํ˜„ ๊ฐ€๋Šฅ

  • MeshNormalMaterial โ†’ ๋ฒ•์„  ๋ฒกํ„ฐ(Normal Vector) ์ •๋ณด๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ƒ‰์€ ์นด๋ฉ”๋ผ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ ๋ฒ•์„ ์˜ ๋ฐฉํ–ฅ๋งŒ ํ‘œ์‹œํ•œ๋‹ค. (์ฆ‰, ๊ตฌ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํšŒ์ „ํ•˜๋ฉด ์ƒ‰์ด ํ•ญ์ƒ ๋™์ผ)

    • ๋ฒ•์„  ๋ฒกํ„ฐ์˜ x,y,z ๊ฐ’์„ rgb๋กœ ๋ฐ”๊พผ๊ฒƒ

    • normal(๋ฒ•์„ )์ด๋ž€ ๋ฉด์˜ ๋ฐฉํ–ฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ‰๋ฉด์— ํ•ญ์ƒ ์ˆ˜์ง์ธ ์„ ์œผ๋กœ ๊ฐ vertex์—๋Š” normal ์ •๋ณด๊ฐ€ ํฌํ•จ๋จ

      • ๋ฒ•์„ ์€ vertex์˜ ๋ฐฉํ–ฅ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

      • ๋ฒ•์„  ๋ฒกํ„ฐ๋ž€ front side ๋ฐฉํ–ฅ์— ์žˆ๋Š” ๋จธํ„ฐ๋ฆฌ์–ผ์„ ์˜๋ฏธํ•œ๋‹ค.

์กฐ๋ช…์— ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค๋Š” ๊ฒƒ์€ ๊ทธ๋ฆผ์ž, ๋ฐ˜์‚ฌ(Reflection) , ๊ตด์ ˆ(Refraction) ํšจ๊ณผ ๋“ฑ์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

Properties

MeshPhongMaterial

  • specular: Mesh์— ๋ฐ˜์‚ฌ๋œ ๋น›(๋ฐ˜์‚ฌ๊ด‘)์˜ ์ƒ‰์ƒ

  • shieness: ๋ฐ˜์‚ฌ๊ด‘์˜ ํฌ๊ธฐ, ๊ฐ’์ด ์ž‘์„์ˆ˜๋ก ๋šœ๋ ทํ•ด์ง„๋‹ค.

MeshPhysicalMaterial

  • roughness: ํ‘œ๋ฉด์˜ ๊ฑฐ์น ๊ธฐ

  • metalness: ํ‘œ๋ฉด์˜ ๊ธˆ์†์„ฑ ์ •๋„

  • clearcoat: ํ‘œ๋ฉด์˜ ์ฝ”ํŒ… ํšจ๊ณผ

  • clearcoatRoughness: ์ฝ”ํŒ… ํ‘œํ˜„์˜ ๊ฑฐ์น ๊ธฐ, ๋ฐ˜์‚ฌ๊ด‘ ํ‘œํ˜„ ๊ฐ€๋Šฅ

  • transmission: ํˆฌ๋ช…ํ•œ ๋จธํ„ฐ๋ฆฌ์–ผ ํ‘œํ˜„, ๋จธํ„ฐ๋ฆฌ์–ผ์˜ transparent ์†์„ฑ์ด true์—ฌ์•ผ ํ•œ๋‹ค.

  • thickness: ์œ ๋ฆฌ ์žฌ์งˆ์˜ ๋‘๊ป˜๋ฅผ ํ‘œํ˜„

  • ior(Index Of Refraction): ์œ ๋ฆฌ ์žฌ์งˆ์˜ ๊ตด์ ˆ์œจ ํ‘œํ˜„

MeshDepthMaterial

Last updated