※ 본 문서는 언리얼 엔진 5.0.3버전을 기준으로 작성되고 있습니다.
1) 머티리얼의 데이터 타입
머티리얼 에디터를 사용하기 위해서
기본적인 데이터 타입에 대해서 알아둘 필요가 있습니다.
왜냐하면 가장 기본적으로 데이터 타입을 가지고,
계산하여 원하는 표현을 만드는 것이 머티리얼의 목적이기 때문입니다.
그럼 지금부터 데이터 타입에 대해서 알아보겠습니다.
2) 부동 소수점(float), 0과 1.
A. 0과 1, 그리고 그 이상.
머티리얼은 오브젝트가 '빛'에 반응하는 재질의 특성을 다룹니다.
그래서 빛에 얼마나 반응할지를 결정해야 하죠.
이 빛을 다루기 위해 가장 먼저 알고 계셔야 할 것은 0과 1입니다.
키보드의 숫자 키 1을 누르고, 클릭을 하면 숫자 노드 한 개가 나타납니다.
여기에 디테일 패널에서 숫자를 조정해 봅시다.
여기에 빛이 가장 적게 표현된 값, 0을 설정하면 뷰 포트에 검은색이 나타나고
가장 높게 표현된 수치 1을 설정하면 뷰 포트에 흰 색이 나타납니다.
재미있는 점은 또한 0과 1 범위를 넘어서도 표현이 가능하다는 점인데요.
그래서 연산 시에 조심해야 할 점이기도 합니다.
추후 이 점에 대해서 따로 다루어 보겠습니다.
B. float와 RGBA채널
1,2,3,4 키 한 개를 누른 채로 클릭하면 상수Constant노드를 만들 수 있습니다.
이 노드 한 개를 가리켜 언리얼 엔진에서는 표현식(Expression)이라고 하며,
현재 만든 상수 표현식은 총 4가지로 Constant, Constant2Vector, Constant3Vector, Constant4Vector입니다.
모두 아시다시피 빛은 3개의 원색으로 구성되어 있습니다.
float은 빨간색 Red, 녹색 Green, 파란색 Blue 채널과
여기에 알파채널까지 총 4개의 채널 값을 가질 수 있습니다.
이 개수에 따라서 Float, Float2, Float3, Float4로 나뉩니다.
(*float는 종종 Scala로 표현하니 알아둡시다.)
이후로도 요청받는 데이터의 종류에 따라 이 표현이 등장하기 때문에
잘 기억해 두시는 것을 권합니다.
※ float 데이터와 머티리얼 표현식의 종류, 데이터 구조와 용도.
데이터 형식 | 머티리얼 표현식 | 데이터 구조 | 일반적인 용도 |
float | Constant, Scala Parameter | (r) | 메탈릭(Metallic), 거칠기(Roughness), 산술 연산(arithmetic operations) |
float2 | Constant2Vector | (r,g) | UV or XY coordinates, Scale |
float3 | Constant3Vector | (r,g,b) | 색상(r, g, b) 또는 3D 좌표(coordinates) (x, y, z) |
float4 | Constant4Vector, 벡터 매개변수, 텍스처 | (r,g,b,a) | 알파 채널이 있는 색상, 텍스처(r, g, b, a) |
3) 덧셈, 뺄셈, 곱셈, 나눗셈
값을 주어진 대로 출력만 하는 것이 아니라, 사칙 연산을 해 줄 수 있습니다.
덧셈, 뺄셈, 곱셈, 나눗셈 노드를 먼저 사용해 보도록 하겠습니다.
주의할 점은 덧셈과 곱셈의 경우에는 순서과 관계 없지만,
뺄셈과 나눗셈은 연산의 대상이 되는 값 - 연산을 진행하는 값 순서로 입력해야 합니다.
즉, 순서에 따라서 연산 결과가 바뀔 수 있으므로 유의하시길 바랍니다.
A. 같은 형식끼리 연산하기
먼저 같은 형식끼리 사칙연산을 하게 되면, 각 채널들끼리 값을 계산합니다.
아래 표와 같이 입력 데이터와 계산과정을 거쳐, 결과가 도출됩니다.
형식 | 입력 데이터 | 계산과정 | 결과값 |
float, float | (4) / (2) | 4 / 2 = 2 | 8 |
float2, float2 | (1, 3) + (2, 3) | (1 + 2), (3 + 3) | (3, 6) |
float3, float3 | (3, 2, 1) * (2, 1, 2) | (3×2), (2×1), (0.5×2) | (6, 2, 1) |
float4, float4 | (2, 2, 2, 3) - (1, 1, 2, 2,) | (2 - 1), (2 - 1), (2 - 2), (3 - 2) | (1, 1, 0, 1) |
B. 다른 유형 끼리의 연산
사칙연산에 호환되는 데이터 유형은
자기 자신과 같은 형식이거나, 혹은 float(scala)형식입니다.
float2,3,4가 서로 다른 형식을 요청하게 되면, 에러가 발생합니다.
형식 | 연산 가능한 데이터 형식 |
float(scala) | 무엇이든 가능 |
float2 | float(scala), float2(자기자신) |
float3 | float(scala), float3(자기자신) |
float4 | float(scala), float4(자기자신) |
C. float(Scala)와 float2, float3, float4와의 연산 + 연산 순서에 주의하자
Float와 float2,float3,float4에 사칙연산을 가하면 분배법칙처럼 계산합니다.
1,2,3에 각각 2를 더하거나, 빼거나, 곱하거나,나누는 식으로 계산합니다.
그런데 연산 순서를 바꿔 float(scala)에 float2,float3,float4를 계산하게 되면
뒤에 오는 값이 사칙연산을 하는 값이기 때문에, 빼기와 나누기에서는 결과가 달라질 수 있습니다.
예를 들어 subtract ( [1,2,3] , [2] )이면 결과값이(-1,0,1)이지만,
Subtract( [2] , [1,2,3] )이면 결과값이 [ 2-1, 2-2 , 2-3 ] = [1, 0, -1]가 되는 것입니다.
이렇게 오늘은 머티리얼에서 데이터의 유형과 사칙연산에 대해서 알아봤습니다.
다음 포스팅에서는 채널 합성과 분해에 대해서 다루도록 하겠습니다.
※ 현재 학습 중인 내용이므로 아직 완전하지 않은 내용일 수 있습니다. 내용에 대해서 피드백을 주시면 관련 내용 보완하여 작성하겠습니다. 많은 관심 부탁드립니다. |
'Unreal5로 UI만들어보기 > 0) Material 다루기' 카테고리의 다른 글
6.이미지 합성과 Linear interpolate (2) | 2023.02.27 |
---|---|
5. 머티리얼 적용 (1) 텍스쳐, UV와 워크플로우 (2) | 2023.02.24 |
4. 출력과 테스트 (1) Live update 옵션 (0) | 2023.02.23 |
3. 머티리얼 데이터 (2) Appendvector , ComponentMask (0) | 2023.02.22 |
1. UI를 위한 머티리얼 만들기 : 머티리얼이란? (0) | 2023.02.20 |