본문 바로가기
테크니컬 아트/언리얼 머티리얼

Unreal Material: Math Expressions(수학 관련 표현식) 모음

by oddsilk 2024. 6. 24.

엄연하게 표현식과 함수는 다르다.

function과 다른의미로 생각하고 내용을 들어가는 것을 권장한다. 

 

값을 확인하고 싶다면 "DebugScalarValues"를 사용할 수 있다
- 출력값을 Emissive Color에 연결하여 값을 프리뷰에서 확인할 수 있다.

1. 수학적 연산을 기반으로 한 노드들

이름
설명
사진
Add : 더하기
- 사칙연산의 "덧셈"연산.
- 같은개수의 컨테이너끼리 연산이 성립 

Tip: Add는 색을 밝게/ 어둡게 하거나 UV 텍스쳐 좌표를 오프셋 할때 사용할 수 있음
Subtract : 빼기
- 사칙연산의 "빼기"연산
- Add와 마찬가지로 각각 채널별로 연산
- 같은 개수의 컨테이너를 가지고 있어야 성립

Tip:  색을 어둡게하고 UV를 오프셋 하는데 사용할 수 있음
Multiply : 곱하기
- 기본적으로 사칙연산의 "곱하기"

1) 하나의 컨테이너와 여러 컨테이너의 곱셈
2) 여러개 컨테이너 끼리의  곱셈

주의할 점
- 언리얼에서는 머티리얼의 범위가 (0~1)사이로 제한되어있지 않기때문에, 곱셈 연산 후에 결과값이 만약 1보다 크다면 색이 밝아지게 된다.
- clamp 나 saturation과 같은 노드로 값을 제한해줘야합니다.


Tip: 색/텍스쳐를 밝거나 어둡게 할때, 또는 UV좌표를 조작할때 자주 사용됩니다
Divide : 나누기 
- 기본적으로 사칙연산의 "나누기"

주의할점

- 어느 채널이든 제수가 0~0.00001이면 0.00001로 올리고, 0~0.00001이면, -0.00001로 내립니다 
-  0으로 나누기 오류가 발생할 가능성을 없애기 위함
- 하지만 이렇게하면 채널의 출력값이 매우 커질 수 있습니다

Tip: 색/텍스쳐를 어둡게 할때, 또는 UV좌표를 조작할때 자주 사용됩니다
Power : 제곱
-  제곱연산을 할때 사용함
- Base : 밑
- Exp : 지수

ex) Base =0.5   , Exp = 2.0  --------> 0.5*0.5 = 0.25

Tip: 전달되는 색의범위가 0~1인경우: Power는 매우 밝은 값일때는 약간 어두워 지지만, 낮은 값일수록 밝기가 급격히 어두워지는 일조의 "대비조절"효과를 낼 수 있습니다.  (Contrast 효과를 낼 수 있음)
SquareRoot : 루트
- 제곱근을 출력하는 연산
- 벡터에 적용하면 각 컴포넌트별로 개별적인 처리가 됨

Tip: 범위가 0~1인 텍스쳐의 경우 이 표현식은 이미지에서 대비를 눈에 띄게 감소시킵니다. 
DotProduct : 내적
- 두 입력의 내적, 하나의 벡터를 다른 벡터에 투영했을때의 길이를 계산
- 감쇠계산 기법에 많이 사용됩니다. 
- Magnitude ( 두 벡터 사이의 코사인에 크기)를 곱한 값이기도 합니다. 
CrossProduct :외적
- 두 3채널 벡터값 입력을 계산하여 결과를 3채널 벡터 값으로 출력합니다. 
- 공간에 벡터가 두개 있다면 외적은 이 두 입력에 모두 수직인 벡

 

2. 값을 보정하는 노드

Abs (절댓값) - Abs는 수학적 용어인 ‘절댓값(Absolute value)’의 약어

- 이 노드는 입력된 값의 절댓값을 출력합니다.

- 절댓값은 숫자의 부호를 무시하고 양수로 변환하는 것을 의미합니다. 따라서 양수와 0은 그대로 출력되고, 음수는 양수로 변환됩니다


Tip: Abs 노드는 일반적으로 벡터 간의 내적(Dot Product) 계산에서 많이 사용됩니다. 내적 계산 결과는 두 벡터가 평행한지, 직각인지 또는 그 중간 상태인지를 나타냅니다
 내적 값은 -1.0부터 1.0 사이의 값을 가지며, 이 값의 절댓값을 취하면 음수 값도 양수로 변환되므로 방향에 상관없이 두 벡터의 관계를 파악할 수 있습니다.
Ceil - 값을 받으면 더 정수로 소수점을 올림한 결과를 출력
Floor - 값을 받으면 더 작은 정수로 소수점을 내림한 결과를 출력
Clamp - 최솟값과 최댓값을 특정 범위로 결과값을 제한합니다.
- 사용할 범위제한 방식을 설정할 수 있습니다. 

- CMODE_Clamp는 범위의 상한과 하한을 모두 제한하
- CMODE_ClampMin or Max는 각각 사
Fmod - 두 입력의 나누기연산에서 float의 나머지를 반환
- (A는 어떤 값이든 될 수 있지만, 음수일경우 결과값도 음수)
- ( 0 으로 나눌 수 없음으로 B는 0이 아니어야하지만, 음수든지 양수든지 결과에 영향을 주지 않음)

Tip: 최댓값으로 밝이를 올려주는 머티리얼을 만들고, 다음 프레임에서 바로 밝이를 최솟값으로 낮춘 후 다시 최댓값으로 올려야 할때 사용
Frac - 값을 받아 그 값의 소수점 부분을 추력
- (입력값이 X ) ------> (X에서 X의 Floor를 뺀값)
- 출력값의 범위는 0~1
- 하한값은 포함 , 상한값은 포함하지 않음

Linear
Interpolation
(Lerp)
- Alpha 값을 이용해서 마스크로 두 입력값을 블렌딩 합니다. 
- 포토샵의 레이어 마스크와 같은 역할
- 마스크의 강도 알파는 두 입력값에서 취할 색의 비율을 결정
- Alpha = 0 ---> A
- Alpha = 1 ---->B


- 채널별로 적용시킬 수도 있다. 예를 들어 RGB를 알파에 연결할경우, A와 B에 연결된 각각 RGB채널에 따로따로 독립적으로 적용됨
Max - 두 입력을 받고 둘중에 높은 입력을 출력

Tip: 컬러 입력에 사용하면 Lighten 레이어 블렌딩 효과가 나옴
Min - 두 입력을 받고 둘중에 낮은 입력을 출력

Tip: 컬러입력에 사용하면 Darken 레이어 블렌딩 효과가 나옴
Normalize - 입력에 정규화된 값을 계산하여 출력
- 정규화된 벡터의 전체길이는 1.0
- 즉, 입력의 각 요소를 벡터의 총  세기(길이) 로 나눔

ex)
- (0,2,0) ----> (0,1,0)
- (0,0.2,0) ----> (0,1,0)
- (0,1,-1) ----> (0,0.707,0.707)

OneMinus - X를 입력받고 1-X를 출력합니다. 
ex) 

Tip: 색의 범위가 0~1인경우 OneMinus는 invert와 같은 효과를 줄수 있습니다
Round - 입력받은 값을 가장 가까운 정수로 반올림
- 입력값은 소수부분이 0.5 이상인 경우 출력값은 반올림 됨



Saturate - 노드의 값을 0~1로 범위를 제한함
- 값이 0보다 작으면 0
- 1보다 크면 1

- 거의 비용이 들지 않으므로, 입출력값을 0~1로 범위제한 하려는 경우 이 노드를 사용하면 퍼포먼스에 거의 영향을 주지 않음
Step - 각 X값이Y의 참조 값보다 큰지 작은지에 따라 0 또는 1을 반환합니다. 


- Y의 값을 기준
- X의 값이 Gradient의 경우   Y보다 작은 값은 0,  큰값은 1
SmoothStep - 최소 한계치, 최대 한계치 사이에서 0~1값을 보간함

- Min : 보간의 하한을 정함 -> 이하의 값은 0을 반환
- Max: 보간의 상한을 정함 -> 이상의 값은 1을 반환
- Value: 보간의 소스 값을 정의 -> 그라디언트나 텍스쳐 맵 등을 넣을 수 있음
Sign - 입력값이 양수인지, 음수인지 정확히 0 인지를 나타냄

- 음수-> -1
- 0 -> 0
- 양수-> 1
Truncate - 정수부분만 남기고 소수점을 버림

 

구조체를 기반한 노드들

Append Vector

 

 

Append Vector
- 컨테이너를 추가하여 여러개의 자료들을 하나의 묶음으로 묶는 함수

- 어떤 자료의 묶음을 만들어내는 것
= 구조체 , 묶여저 있는 자료형들
= 컨테이너들

- 하나의 값에 덛붙이는 작업을 Append한다 라고 부른다.
즉, 

- 대표적인 예로 Vector3 값은 3개의 float 컨테이너를 묶은 구조체다 

ex ) (0.2)와 (0.4)의 append 는 (0.2, 0.4)ex) (0.2, 0.4) 와 (0.1)의 append는(0.2, 0.4, 0.1)이다.
ComponentMask - RGBA중에 하나이상의 채널을 분리하여 출력으로 통과시킬 수 있다. 
- 입력에 존재하지 않는 채널을 통과시키려 할 경우 오류가 발생
- 단, 단일 상수의 경우 출력됨



 

 

삼각함수 기반의 노드들

 

Sine - 0~1 범위와 , 1-~1 출력 범위에서 반복되는 사인 곡선 값을 출력

Tip: 입력에 Time 표현식을 연결하여 연속되는 진동파형을 출력하는데 사용하는 경우가 많다. 즉, 진동 이펙트가 사용한 경우 유용하게 사용할 수 있다. 

1) 월드 스페이스 또는 스크린 스페이스 에서 물결을 만들때
2) 연속적이고 부드러운 사이클이 필요한경우
3) 파형의 시각적 표현은 사진과 같다 

Cosine - 0~1 범위와 , 1-~1 출력 범위에서 반복되는 코사인 곡선 값을 출력
- Cos(x)는 (Sin(x+0.25)) 와 같음
- Sine 파형에 비교해서 1/4만큼 offset 되어있음
- 나머지는 Sine과  동일함

Tip: Sin과 Cos는 결국 시작점이 0이냐 1이냐의 차이다.
Tangent - 지정한 값의 탄젠트를 출력

- 상단 바는 결과를 색으로 출력해서 보여줌
=좌측 끝은 입력값이 -1일때 이 표현식을 사용한 결과의 색
=우측 끝은 입력값이 1일때의 결과

- 그래프의 X축은 (-1 ~ 1)의 범위를 나타낸다
- Y축은 Tangent를 사용한 결과값이다. 
Arcsine - 역 사인함수를 출력

- 그래프의 X축은 (-1 ~ 1)의 범위를 나타낸다
- Y축은 Arcsine 를 사용한 결과값이다
ArcsineFast 정확도는 느리지만 계산 속도가 빠른 역 사인의 근사 함수를 출력  
Arccosine -역 코사인 함수를 출력

- 그래프의 X축은 (-1 ~ 1)의 범위를 나타낸다
- Y축은 Arccosine 를 사용한 결과값이다
ArccosineFast 정확도는 느리지만 계산 속도가 빠른 역코사인의 근사 함수를 출력  
Arctangent - 역 탄젠트 함수를 출력

- 그래프의 X축은 (-1 ~ 1)의 범위를 나타낸다
- Y축은 Arctangent 를 사용한 결과값이다
ArctangentFast 정확도는 느리지만 계산 속도가 빠른 역탄젠트의 근사 함수를 출력  
Arctangent2 - x/y의 역탄젠트를 출력하며, 입력 부호를 통해 사분면을 결정

- 그래프의 X축은 (-1 ~ 1)의 범위를 나타낸다
- Y축은 Arctangent2 를 사용한 결과값이다
Arctangent2Fast 정확도는 느리지만 계산 속도가 빠른 역탄젠트2의 근사 함수를 출력  

 

로그 기반의 노드들

Logarithm2 - 입력값에 밑이 2인 로그값을 반환
- 밑이 2인 어떤 값을 이 표현식으로 반환되는 수만금 제곱하면 입력값이 나옴
Logarithm10 - 밑이 10인 로그값을 반환
- 입력값의 일반로그

- 밑이 10인 어떤 값을 이 표현식으로 반환되는 수만큼 2제곱하면 입력값이 나옴