Unreal TIL 34์ผ์ฐจ - TA Material

yysยท2026๋…„ 4์›” 13์ผ

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
27/77

๐Ÿ”— ํ•™์Šต ๋‚ ์งœ ์ธ์ฆ(์ฃผ์ œ์™€ ๋ฌด๊ด€)

์˜ค๋Š˜ ํ•œ ๋‚ด์šฉ


  • C++ ์ฝ”๋“œ์นดํƒ€
  • C++์™€ Unreal Engine์œผ๋กœ 3D ๊ฒŒ์ž„ ๊ฐœ๋ฐœ ๊ฐ•์˜ ์ˆ˜๊ฐ•
  • TA ๊ฐ•์˜ ์ˆ˜๊ฐ•
  • ์–ธ๋ฆฌ์–ผ C++ ์ธ๋ฒคํ† ๋ฆฌ ์‹œ์Šคํ…œ(๊ฐœ์ธ์ )

์–ธ๋ฆฌ์–ผ ๋จธํ„ฐ๋ฆฌ์–ผ


๋จธํ„ฐ๋ฆฌ์–ผ(Materials)๋ž€ ๋ฌผ์ฒด์˜ ํ‘œ๋ฉด์˜ ์ƒ‰, ์งˆ๊ฐ ๋“ฑ๋“ฑ์„ ๊ฒฐ์ •ํ•˜๋Š” ์žฌ์งˆ์„ ์˜๋ฏธํ•œ๋‹ค.
์–ธ๋ฆฌ์–ผ์—์„œ Material์„ ์ƒ์„ฑํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

Material Graph๋Š” ๋ธ”๋ฃจํ”„๋ฆฐํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
Details ํŒจ๋„์— ์—ฌ๋Ÿฌ ์†์„ฑ๋“ค์ด ์ •์˜๋˜์–ด ์žˆ๋Š”๋ฐ, ์ œ์ผ ๋ˆˆ์—ฌ๊ฒจ๋ด์•ผ ํ•  ๊ฒƒ์€ Blend Mode์ด๋‹ค.
Blend Mode๋„ ๊ฐ’์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์žˆ์ง€๋งŒ, ์ฃผ๋กœ ๋‘ ๊ฐ€์ง€๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • Opaque (๋ถˆํˆฌ๋ช…): ๋น›์„ ์ „ํ˜€ ํ†ต๊ณผ์‹œํ‚ค์ง€ ์•Š๊ณ  100% ํŠ•๊ฒจ๋‚ด๊ฑฐ๋‚˜ ํก์ˆ˜ํ•˜๋Š” ์ƒํƒœ
  • Translucent (๋ฐ˜ํˆฌ๋ช…): ๋น›์„ ๋ถ€๋ถ„์ ์œผ๋กœ ํ†ต๊ณผ์‹œ์ผœ ๋’ค์— ์žˆ๋Š” ์‚ฌ๋ฌผ์ด ๋น„์ณ ๋ณด์ด๊ฒŒ ๋งŒ๋“œ๋Š” ์ƒํƒœ

์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” Material ๋…ธ๋“œ์˜ ์†์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • Base Color: ๋ฌผ์ฒด์˜ ์ƒ‰์ƒ์„ ๊ฒฐ์ •ํ•œ๋‹ค.
  • Metallic: ๋ฌผ์ฒด๊ฐ€ ๊ธˆ์† ํ‘œ๋ฉด์˜ ์ •๋„๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
  • Roughness: ๋ฌผ์ฒด์˜ ๋ฐ˜์‚ฌ ์ •๋„๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. (0 - ๋น›์ด ๊ฑฐ์šธ์ฒ˜๋Ÿผ ๋ฐ˜์‚ฌ, 1 - ๋น› ๋ฐ˜์‚ฌ x)
  • Emissive Color: ๋ฌผ์ฒด์˜ ๋ฐœ๊ด‘ ์ƒ‰์ƒ์„ ๊ฒฐ์ •ํ•œ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ Material ๋…ธ๋“œ์˜ ๋ชจ๋“  ์†์„ฑ์€ float(0 ~ 1) ๊ฐ’์„ ์ง€๋‹ˆ๋ฉฐ, (1, 2, 3, 4) + ๋งˆ์šฐ์Šค ์ขŒํด๋ฆญ์œผ๋กœ ๊ฐ’์„ ์ •์˜ํ•˜๋Š” ๋…ธ๋“œ๋“ค์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

  • 1 -> ๋‹จ์ผ float ๊ฐ’์„ ํ‘œํ˜„ํ•˜๋Š” ๋…ธ๋“œ๋กœ 0: ๊ฒ€์ •์ƒ‰, 1: ํ•˜์–€์ƒ‰์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • 2 -> X, Y์˜ float ๊ฐ’์„ ํ‘œํ˜„ํ•˜๋Š” ๋…ธ๋“œ๋กœ, X: ๋นจ๊ฐ„์ƒ‰, Y: ์ดˆ๋ก์ƒ‰์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • 3 -> X, Y, Z์˜ float ๊ฐ’์„ ํ‘œํ˜„ํ•˜๋Š” ๋…ธ๋“œ๋กœ, 2์— ์ด์–ด์„œ Z: ํŒŒ๋ž€์ƒ‰์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • 4 -> float4 ๊ฐ’์„ ํ‘œํ˜„ํ•˜๋Š” ๋…ธ๋“œ๋กœ, 3์— ์ด์–ด์„œ A: Alpha๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.


ํ•ด๋‹น ๋…ธ๋“œ๋“ค์„ ์ด์šฉํ•ด์„œ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ดˆ๋ก์ƒ‰์œผ๋กœ ๋ฐœ๊ด‘ํ•˜๋Š” ๋ฌผ์ฒด๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋•Œ Emissive Color๋งŒ ๋‹ค๋ฅธ ๋…ธ๋“œ์™€ ๋‹ฌ๋ฆฌ 1์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฐ’์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ฐ’์ด ๋†’์„ ์ˆ˜๋ก ๋ฐœ๊ด‘ ์ˆ˜์ค€์ด ์˜ฌ๋ผ๊ฐ„๋‹ค.

์ด๋Ÿฌํ•œ ๊ฐ’์„ ํ‘œํ˜„ํ•˜๋Š” ๋…ธ๋“œ๋“ค์€ ์šฐํด๋ฆญ -> Convert To Parameters๋ฅผ ํด๋ฆญํ•ด์„œ ๋ณ€์ˆ˜๋กœ๋„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Blend Mode๋ฅผ Translucent (๋ฐ˜ํˆฌ๋ช…)๋กœ ์„ค์ •ํ•  ๊ฒฝ์šฐ, ๋‹ค๋ฅธ ์†์„ฑ(Metalic, Roughness ๋“ฑ)์ด ๋น„ํ™œ์„ฑํ™”๋˜๋Š” ๋Œ€์‹  Opacity(ํˆฌ๋ช… ๊ฐ’)์„ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

Lerp


Linear Interpolate์˜ ์•ฝ์ž๋กœ, ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์„ ํ˜• ๋ณด๊ฐ„์ด๋ผ๋Š” ๋œป์ด๋‹ค.
๋งŒ์•ฝ A -> B๋กœ ์„ ํ˜• ๋ณด๊ฐ„์„ ํ•˜๊ณ , 0.6์˜ Alpha๊ฐ€ ์žˆ์œผ๋ฉด, A๋Š” 40%, B๋Š” 60%์˜ ์˜ํ–ฅ์„ ๋ฐ›๋„๋ก ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

L + ๋งˆ์šฐ์Šค ์ขŒํด๋ฆญ์œผ๋กœ Lerp ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ํฐ์ƒ‰(A) -> ๋นจ๊ฐ„์ƒ‰(B)๋กœ 0.8์˜ ์„ ํ˜• ๋ณด๊ฐ„์„ ํ•จ์œผ๋กœ์จ ์ฃผํ™ฉ์ƒ‰ ๋А๋‚Œ์˜ ์ƒ‰์ƒ์„ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ Lerp๋ฅผ ์ด์šฉํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด, ํ…์Šค์ฒ˜์˜ ํ”ฝ์…€ ์ƒ‰์ƒ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ (0, 1)์˜ ์„ ํ˜• ๋ณด๊ฐ„์„ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ๋ฐ˜์‚ฌ์˜ ์ •๋„๋ฅผ ์กฐ์ ˆํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

ํ…์Šค์ฒ˜์—์„œ ํฐ์ƒ‰์ด ์ž๋ฆฌํ•˜๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์€ 0์— ๊ฐ€๊น๊ธฐ ๋•Œ๋ฌธ์ด ์ด๋ฅผ Alpha๋กœ ๋„˜๊ฒจ์„œ 0(๋งค๋„๋Ÿฌ์šด)์— ๊ฐ€๊นŒ์šด ํ‘œ๋ฉด์„ ํ˜•์„ฑํ•˜๊ณ , ๊ฒ€์€์ƒ‰์ด ์ž๋ฆฌํ•˜๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์€ 1์— ๊ฐ€๊น๊ธฐ ๋•Œ๋ฌธ์— 1(๊ฑฐ์นœ)์— ๊ฐ€๊นŒ์šด ํ‘œ๋ฉด์„ ํ˜•์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

UV Coordinate System


UV ์ขŒํ‘œ๊ณ„๋Š” 2D ์ด๋ฏธ์ง€๋ฅผ 3D ๋ชจ๋ธ์— ์ด์‹ํ•˜๊ธฐ ์œ„ํ•œ ์ขŒํ‘œ๊ณ„์ด๋‹ค.
์ขŒํ‘œ๊ณ„๋Š” ๊ทธ๋ž˜ํ”ฝ API์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆœ ์žˆ์ง€๋งŒ, ์–ธ๋ฆฌ์–ผ ๊ธฐ์ค€์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ์ค€์„ ๋”ฐ๋ฅธ๋‹ค.

์—ฌ๊ธฐ์„œ U, V ๋˜ํ•œ 0 ~ 1 ์‚ฌ์ด์˜ ๊ฐ’์„ ํ‘œํ˜„ํ•˜๋ฉฐ, U๋Š” X, V๋Š” Y์— ๋Œ€์‘๋œ๋‹ค.
์ด๋Š” ์•ž์˜ ๋‚ด์šฉ๊ณผ ์ด์–ด๋ณด๋ฉด, U๋Š” ๊ฐ’์ด ํด ์ˆ˜๋ก ๋นจ๊ฐ„์ƒ‰์ด ๋˜๊ณ  V๋Š” ๊ฐ’์ด ํด ์ˆ˜๋ก ์ดˆ๋ก์ƒ‰์ด ๋œ๋‹ค.

UV Mapping์€ 3D์˜ ๋ชจ๋ธ์„ 2D ์ด๋ฏธ์ง€๋กœ ํŽผ์ณ๋†“์„ ๋•Œ, 2D์ด๋ฏธ์ง€๊ฐ€ 3D ๋ชจ๋ธ์— ์–ด๋””์— ํ•ด๋‹น๋˜๋Š” ์ง€๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด Vertex๋ฅผ ๋งค์นญํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•œ๋‹ค.

๋จธํ„ฐ๋ฆฌ์–ผ ๊ทธ๋ž˜ํ”„์—์„œ ์šฐํด๋ฆญ ํ•œ ํ›„ Texture Coordinate๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋…ธ๋“œ๊ฐ€ ํ˜•์„ฑ๋˜๊ณ  ํ•ด๋‹น ๋…ธ๋“œ๋กœ U, V ๊ฐ’์„ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋ฅผ Texture Sample ๋…ธ๋“œ์— ์ด์–ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

๋ฌผ๋ก , ์ด์ „๊ณผ ์•„๋ฌด๋Ÿฐ ์ฐจ์ด๊ฐ€ ์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด, Texture Sample์€ ๊ธฐ๋ณธ์ ์œผ๋กœ U, V๊ฐ€ ๊ฐ๊ฐ 1๋กœ ๋งคํ•‘๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋งŒ์•ฝ, U, V๋ฅผ 1์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฐ’์„ ๋„ฃ๊ฒŒ ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

์œ„ ์‚ฌ์ง„์„ ๋ณด๋ฉด ํ˜•ํƒœ๊ฐ€ ๋‹ค๋ฅธ ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์ด๋Š” GPU๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ Wrap ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 1์„ ์ดˆ๊ณผํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด๋ฏธ์ง€๋ฅผ ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

GPU ์ž์ฒด์˜ ํ‘œ์ค€์ด๊ธฐ ๋•Œ๋ฌธ์— DirectX, OpenGL ๋“ฑ๋“ฑ ๋ชจ๋“  ๊ทธ๋ž˜ํ”ฝ API๊ฐ€ ๋™์ผํ•œ ๋กœ์ง์„ ์ง€๋‹Œ๋‹ค.
1๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ํ•œ๋‹ค๋ฉด, ๊ทธ๋งŒํผ ์ด๋ฏธ์ง€๊ฐ€ ์ž˜๋ฆฌ๋Š” ๋ชจ์Šต๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Panner


Panner๋Š” ํ…์Šค์ฒ˜ ์ด๋ฏธ์ง€๊ฐ€ ํŠน์ • ๋ฐฉํ–ฅ์œผ๋กœ ์Šคํฌ๋กค ๋˜๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋…ธ๋“œ์ด๋‹ค.
์˜ค๋ฅธ์ชฝ์œผ๋กœ ์Šคํฌ๋กค ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ (-1, 0)์„ ํ–ˆ๋Š”๋ฐ ์™œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ง€๋‚˜๊ฐ€์ง€? ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์นด๋ฉ”๋ผ ์‹œ์  ๊ธฐ์ค€์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ์ฐจ๋ฅผ ํƒ€๊ณ  ์™ผ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๋ฉด ๋ณด์—ฌ์ง€๋Š” ํ’๊ฒฝ์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™๋˜๋“ฏ์ด ์ด๊ฒƒ ๋˜ํ•œ ๋™์ผํ•œ ๋กœ์ง์œผ๋กœ ๋ณด๋ฉด ๋œ๋‹ค.


๋จธํ„ฐ๋ฆฌ์–ผ์„ ์‚ฌ์šฉ๋งŒ ํ•ด๋ณด์•˜์ง€, ์ •์ž‘ ๊ตฌํ˜„์„ ํ•ด๋ณธ ์ ์€ ์—†์–ด์„œ ์ƒ์†Œํ•œ ๊ฐœ๋…๋“ค์ด ๋งŽ์ด ๋‚˜์™”๋‹ค.
๊ทธ๋ž˜๋„ ๋ฐฐ์›Œ๊ฐ€๋Š” ๊ณผ์ •๋“ค์ด ๋งค์šฐ ํฅ๋ฏธ๋กœ์› ๊ธฐ ๋•Œ๋ฌธ์— ์•ž์œผ๋กœ๋„ ๊ณ„์†ํ•ด์„œ TA ๋‚ด์šฉ์„ ํ•™์Šตํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

profile
๊ฒŒ์ž„ ๊ฐœ๋ฐœ ์ง€๋ง์ƒ

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