2일 차 강의에 머터리얼 내용이 나와 이에 대해 더 깊게 공부하고자 하여 정리해 보았습니다.
3D 모델링 데이터의 구성
3D 모델링 데이터는 메시(Mesh)와 머티리얼(Material), 그리고 실시간 엔진에서 추가하게 되는 감지 영역(Collision)과 각종 기능(Component)이 결합하여 독립된 개체(Actor)를 이룹니다.
메시는 가상의 공간에서 하나의 객체를 시각적으로 표현하기 위한 개념으로, 점(Vertex), 선(Edge), 면(Face)으로 이루어진 집합체입니다. 단순히 형태를 이루는 정보만을 가지고 있어 표면의 재질을 표현하기 위해서는 머티리얼(Material)이 반드시 필요합니다. 머티리얼은 표면을 어떻게 보일 지를 결정하는 계산식이 담겨있습니다.
언리얼 엔진 머티리얼의 이해
언리얼 엔진의 머티리얼 에디터는 비주얼 스크립팅(Visual Scripting) 방식으로 제작합니다. 이는 문자의 나열로 이루어진 코드를, 코드를 모르는 사람들도 논리의 흐름을 쉽고 빠르게 파악할 수 있도록 고안된 툴입니다.
‘노드’라고 하는 속성을 담은 작은 박스들을 선으로 연결해서 제작합니다. 노드에는 표현식에 필요한 속성들이 나열됩니다. 이를 ‘노드 프로퍼티(Node Property)’라고 합니다.
PBR 렌더링 시스템
언리얼 엔진은 ‘PBR(Physically based Rendering)’이라는 렌더링 시스템을 채택하고 있습니다. 직역하면 ‘물리기반 렌더링’입니다. 빛이 물체의 표면에 반사돼 눈으로 들어와야 물체를 인식할 수 있습니다. 컴퓨터에서는 빛이 물체 표면에 반사되는 경로를 물리적인 공식을 이용해 계산하고, 그 결과를 머티리얼을 통해 표현합니다.
PBR 이전에도 물리적인 계산을 했으나 빛이 반사될수록 약해진다거나(에너지 보존의 법칙) 하는 여러 가지 물리적인 계산을 할 수 없었습니다.
PBR을 이용하는 것에는 사실적인 표현에 가까워진 것 말고도 하나의 큰 장점이 있는데, 한 가지 셰이더를 사용해 일상생활에서 사용하는 재질들에 대한 표현이 가능해졌다는 것입니다. 언리얼 엔진에서 ‘셰이더’는 최종 결과물을 출력하는 베이스 노드의 표현식이라고 생각하면 좋습니다. PBR로 변하면서 프로퍼티 수치 조절만으로 한 가지 셰이더를 이용해 다양한 재질을 표현할 수 있게 되었습니다. 이러한 셰이더를 ‘PBS(Physically Based Shader)’라고 합니다.
머티리얼은 위와 같은 구조로 이루어져 있습니다. 텍스쳐, 컬러, 숫자 등 여러 가지 형태로 이루어진 값인 파라미터를 셰이더의 필요한 프로퍼티들에 적용하고 물체가 빛을 받았을 때 어디가 밝아지고 어두워지는지 등을 셰이더의 계산식에 의해 결과물을 만들어 냅니다. 머티리얼은 셰이더와 셰이더에 적용할 파라미터를 묶어주는 역할을 합니다.
PBR 셰이더의 특징을 이해하기 위해서 중요한 프로퍼티인 Base Color, Metallic, Roughness에 대해 알아보고, 이외에도 보편적으로 쓰이는 Normal, Emission Color와 같은 프로퍼티도 함께 정리해 보겠습니다.
Base Color
베이스 컬러는 물체가 가진 고유한 색을 결정합니다.
Constant3Vector을 베이스 컬러 프로퍼티에 연결하면 뷰포트의 구체가 빨간색으로 보입니다.
PBR의 금속 성질 프로퍼티, 메탈릭(Metallic)
금속과 비금속은 ‘메탈릭(Metallic)’에 의해 구분됩니다.
‘0 = 비금속, 1 = 금속’으로 현재 1을 입력했을 때 표면 질감이 바뀐 것을 볼 수 있습니다.
메탈릭 수치가 1인 오브젝트의 하이라이트(빛을 정면으로 받는 면)를 자세히 살펴보면, 하이라이트의 컬러가 베이스 컬러와 같다는 것을 알 수 있습니다. 금속과 비금속을 나누는 가장 큰 속성은 바로 빛을 받았을 때, 스스로의 컬러를 반사(금속)시키는지, 내가 받은 빛의 컬러를 반사(비금속)시키는지로 구분할 수 있기 때문에 PBR에서는 이런 복잡한 원리를 0과 1 사이의 숫자로 구현해 놓았습니다.
PBR의 매끄러움 파라미터, 러프니스(Roughness)
앞에서는 물체를 이루는 입자의 성분에 따라 금속/비금속을 나눴으면, 이번에는 빛을 받아들이는 상태에 따라 오브젝트를 구분하는 특징 중 러프니스의 특징에 대해 설명하겠습니다. PBR은 모든 오브젝트가 작은 입자들로 구성되어 있다고 가정합니다, 그리고 그 입자들을 Roughness를 통해 조절합니다.
거칠기 값 1은 ‘거칠다, 매트하다’라고 표현합니다. 0은 유리나 거울처럼 아주 매끄럽고 반사(Reflection) 효과도 생깁니다.
디테일을 위한 노멀 맵(Normal map)
3D 모델에서 사실적인 명암을 표현하려면 원래는 수백만 개의 폴리곤이 필요합니다. 예를 들어, 소파의 작은 주름이나 굴곡까지 모두 표현하려면 엄청난 양의 폴리곤 데이터가 필요하지만, 그렇게 하면 실시간으로 화면을 그려야 하는 게임 엔진에는 엄청난 부하가 걸립니다. 그래서 이러한 폴리곤의 굴곡을 텍스처로 투사(Projection)시켜 컴퓨터에 착시를 주는 것이 ‘노멀 맵’입니다.
노멀 프로퍼티는 메시의 UV 좌표마다 착시를 줘야 하기 때문에 UV 좌표와 대응되는 텍스처 픽셀의 정보 값을 이용하게 되므로 자연스럽게 텍스처(맵)의 형식을 사용하게 됩니다. 일반적으로 노멀 맵은 그래픽 아티스트가 복잡한 과정을 3D 그래픽 툴을 통해 제작합니다.
자체 발광 효과, 이미시브 컬러(Emissive Color)
스스로 빛을 뿜어내는 재질을 표현할 때 쓰이는 프로퍼티입니다. 0~1까지의 값을 받기도 하고, ‘이미시브 컬러 맵’이라고 하는 텍스처를 받아서 일부분만 발광하도록 할 수 있습니다. 또한, HDR(High Dynamic Range) 라이팅이 지원되어 1보다 큰 값을 입력받아 더 강한 발광을 표현할 수 있습니다. 주위가 밝은 것보다는 조명이 약하거나 없을 때 효과가 드러나며 또한 이 포스트 ‘프로세싱’이라는 후처리 시각 효과에서 글로우 효과를 적용하면 화사한 효과를 얻을 수 있게 됩니다.
추가로 Effective C++ 책을 읽고 정리하였습니다.
https://dev0404.tistory.com/14
[Effective C++] 항목 3: 낌새만 보이면 const를 들이대 보자!
1. constconst는 객체가 수정되지 않아야 한다는 의미적인 제약을 명확히 표현할 수 있습니다. 이 제약을 선언하면 컴파일러가 이를 강제하기 때문에 실수를 줄이고 더 안전한 코드를 작성할 수 있
dev0404.tistory.com
출처 : 인생 언리얼 5 프로젝트 교과서
'내일배움캠프 > TIL' 카테고리의 다른 글
[내일배움캠프 Day4] 플레이어 이동하기 (3) | 2024.12.19 |
---|---|
[내일배움캠프 Day3] 블루프린트를 이용한 비주얼 스크립팅 (1) | 2024.12.18 |
[내일배움캠프 Day1] 언리얼 엔진 에디터의 화면 구성 (1) | 2024.12.16 |
[사전 캠프 Day9] 팀 프로젝트 진행 (0) | 2024.12.12 |
[사전 캠프 Day6] 언리얼 소스 코드 다운받기 (1) | 2024.12.09 |