💭회고
셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' (5)
💭회고 셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' (4)💭회고 셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' (3)💭회고 셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' (2)💭회고202
raindrovvv.tistory.com
셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' (4)
💭회고 셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' (3)💭회고 셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' (2)💭회고2025.03.20 - [Dev./그래픽스 Graphics] - 셰이더 그래프 학습 정리 - '샤
raindrovvv.tistory.com
셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' (3)
💭회고 셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' (2)💭회고2025.03.20 - [Dev./그래픽스 Graphics] - 셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' 셰이더 그래프 학습 정리 - '샤라웃 투 고
raindrovvv.tistory.com
셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' (2)
💭회고2025.03.20 - [Dev./그래픽스 Graphics] - 셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' 셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌'💭회고셰이더는 게임 및 그래픽 디자인에서 중요한
raindrovvv.tistory.com
셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌'
💭회고셰이더는 게임 및 그래픽 디자인에서 중요한 기술로, 3D 객체를 현실적으로 표현하거나 독창적인 효과(마인크래프트 셰이더 효과를 생각하면 이해가 쉽다...!)를 생성하는 데 사용된다.
raindrovvv.tistory.com
오늘 살펴볼 세 가지 핵심 카테고리는 다음과 같다:
- 행렬(Matrix) - 3D 공간에서 변환하는 기본 도구(?)
- 범위와 근삿값 함수(Range & Round Functions) - 값을 제어하고 조정하는 핵심 연산
- 삼각함수(Trigonometry) - 회전, 파동, 주기적 효과를 구현하는 데 필수적인 함수
📒학습 내용
1. 행렬(Matrix)
행렬은 3D 그래픽스에서 물체의 위치, 회전, 크기를 조작하는 도구이다.
🔹 행렬 구성(Matrix Construction)
행렬 구성은 이동(Translation), 회전(Rotation), 크기 조절(Scale)을 하나의 행렬로 결합하는 과정.
➡️ 언리얼에서 행렬 구성은 FTransform 클래스를 통해 쉽게 처리할 수 있다. 캐릭터의 움직임을 만들 때, 여러 개의 변환을 결합하여 부드러운 애니메이션을 구현한다.
머티리얼 연산에서는 어떻게 쓰이는 거지...?
주로 공간 변환을 위해 사용된다. 예를 들어, 텍스처 좌표나 노말 데이터를 다른 좌표계(예: 월드, 로컬, 탄젠트 스페이스)로 변환할 때 행렬 연산이 필수적이다.
- UV 좌표 변환: 머티리얼 내에서 텍스처의 회전, 스케일, 이동 등을 구현할 때 3×3 행렬을 이용하여 UV 좌표를 변환할 수 있다.
- 노말 매핑과 TBN 변환:
- TBN 행렬 (Tangent, Bitangent, Normal)을 사용해 텍스처에 저장된 노말 데이터를 실제 월드 스페이스의 노말 벡터로 변환한다.
- 머티리얼 셰이더에서는 이 행렬의 전치(Transpose)를 사용해, 텍스처의 노말 데이터를 올바르게 재구성하여 조명 계산에 활용한다.
- 좌표계 변환:
- 오브젝트의 로컬 좌표를 월드 좌표로, 또는 반대로 변환할 때 행렬을 사용한다.
🔹 행렬 분할(Matrix Split)
하나의 행렬을 위치, 회전, 크기 요소로 분리한다.
왜 행렬 분할이 필요할까?
- 개별 조정:
- 오브젝트의 전체 변환 행렬에서 특정 요소(예: 위치만 변경하거나 회전만 수정)를 수정할 때, 분할하여 각 구성 요소를 따로 다루면 보다 정밀하게 제어할 수 있다.
- 예를 들어, 머티리얼에서 텍스처 좌표에 오프셋(Translation)을 적용하거나 회전 효과를 줄 때, 전체 행렬 대신 원하는 요소만 추출하여 조작할 수 있다.
- 오브젝트의 전체 변환 행렬에서 특정 요소(예: 위치만 변경하거나 회전만 수정)를 수정할 때, 분할하여 각 구성 요소를 따로 다루면 보다 정밀하게 제어할 수 있다.
- 디버깅 및 분석:
- 복잡한 변환 과정을 시각적으로 분석하거나, 문제가 발생했을 때 어느 부분(위치, 회전, 스케일)에서 문제가 발생했는지 파악하는 데 유용하다.
- 커스텀 효과 구현:
- 커스텀 HLSL 코드나 블루프린트를 사용할 때, 행렬을 분할하여 각 요소에 기반한 계산을 따로 수행하면 보다 정교한 효과(예: 동적인 오프셋, 회전 기반 왜곡 등)를 구현할 수 있다.
🔹 행렬식(Matrix Determinant)
행렬이 역행렬을 가질 수 있는지(즉, 변환이 가역적인지) 판단하는 값.
~
🔹 행렬 전치(Matrix Transpose)
행과 열을 서로 바꾸는 연산으로, 직교 행렬의 경우 전치가 역행렬과 동일한 특성을 가진다.
노말 맵 계산에서 TBN(Tangent, Bitangent, Normal) 행렬의 전치를 사용하여 효율적으로 좌표계를 변환한다.
2. 범위 함수(Range Functions)
값을 제한하거나 변환하여 의도한 범위 내에서 작동하도록 한다. 이는 특히 머티리얼 작업에서 중요하다.
함수 | 설명 | 실무 활용 |
Clamp(제한) | 값을 최소값과 최대값 사이로 제한 | 라이팅 강도가 너무 밝거나 어두워지는 것을 방지 |
Fraction(분수) | 소수점 이하 부분만 반환 | 텍스처 타일링, 반복 패턴 구현 |
Maximum(최대) | 두 값 중 큰 값을 반환 | 여러 광원 효과를 결합할 때 사용 |
Minimum(최소) | 두 값 중 작은 값을 반환 | 그림자 계산이나 값의 하한선 설정 |
One Minus(1빼기) | 1에서 입력값을 뺀 결과 반환 | 불투명도 반전, 마스크 반전 효과 |
Saturate(포화) | 값을 0과 1 사이로 제한 | 색상값 안정화, 노멀 벡터 정규화 |
3. 근삿값 함수(Round Functions)
근삿값 함수들은 값을 정수에 가깝게 조정하거나 특정 조건에 따라 변환한다.
🔹 Ceiling(올림)
입력값보다 크거나 같은 가장 작은 정수로 올린다.
💡ex. 픽셀아트 스타일의 게임에서 텍스처 좌표를 픽셀 단위로 맞추기 위해 Ceiling 함수 활용. 특히 2D UI 요소가 정확한 픽셀 경계에 위치하도록 할 때 유용하다.
🔹 Floor(내림)
입력값보다 작거나 같은 가장 큰 정수로 내린다.
💡ex. 타일 기반 지형이나 그리드 시스템 구현에 필수적이다. 월드 좌표를 그리드 좌표로 변환할 때 Floor를 사용하여 정확한 타일 인덱스를 찾는다.
🔹 Round(반올림)
가장 가까운 정수로 반올림한다.
💡ex. 애니메이션 프레임 계산에서 부동소수점 오차를 줄이기 위해 사용한다. 또한 범프 매핑이나 이미지 효과에서 선명한 경계를 만드는 데 유용하다.
🔹 Sign(부호)
입력값의 부호를 반환한다(양수면 1, 음수면 -1, 0이면 0).
🔹 Step(단계)
지정된 임계값보다 입력값이 크면 1, 작거나 같으면 0을 반환한다.
💡ex. 선명한 경계(예: 물과 육지의 경계선)를 만들거나, 로직 분기(논리적 분기)를 셰이더 내에서 구현할 때 활용한다. 또한 마스크 효과나 레벨 오브 디테일(LOD) 전환 지점을 결정하는 데도 사용한다.
🔹 Truncate(자르기)
소수점 부분을 제거하고 정수 부분만 남긴다.
💡ex. 픽셀화 효과나 로우 폴리 스타일 게임에서 좌표값을 양자화(quantize)할 때 사용한다. 또한 프로시저럴 텍스처 생성 시 패턴의 경계를 명확하게 만드는 데 활용한다고 한다.
4. 삼각함수(Trigonometry)
삼각함수는 주기적인 움직임, 회전, 파동 효과를 만드는 데 필수적이다.
🔹 기본 삼각함수 (Sine, Cosine, Tangent)
사인, 코사인, 탄젠트 값을 반환한다.
💡ex. 언리얼 엔진에서 파도 효과를 구현할 때, Sine과 Cosine을 조합하여 자연스러운 물결을 만들 수 있다. 또한 Sine을 시간 변수와 함께 사용하여 부유하는 물체나 호버링 효과를 구현한다.
🔹 역삼각함수 (Arcsine, Arccosine, Arctangent, Arctangent2)
삼각함수의 역함수로, 값으로부터 각도를 계산한다.
🔹 각도 단위 변환 (Radians To Degrees, Degrees To Radians)
라디안과 도 사이의 각도 단위를 변환한다.
💡언리얼 엔진의 회전 함수는 주로 도 단위를 사용하지만, 수학 라이브러리 함수는 라디안을 요구한다. 따라서 두 시스템 사이에서 작업할 때 변환이 필요하다. 블루프린트에서는 각도 변환 노드를 활용하여 쉽게 처리할 수 있다.
'Dev. > 그래픽스 Graphics' 카테고리의 다른 글
셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' (8-완결) (0) | 2025.04.04 |
---|---|
셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' (7) (0) | 2025.04.02 |
셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' (5) (0) | 2025.03.31 |
셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' (4) (0) | 2025.03.28 |
셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' (3) (0) | 2025.03.24 |