프로그래밍/스터디

언리얼 머테리얼

hscho00 2020. 6. 30. 05:18

언리얼에서 머테리얼을 생성한다

=> 비주얼 스크립팅을 통해 HLSL 코드를 생성한다(정점셰이더, 픽셀셰이더)

=> 입력값으로 정점 또는 픽셀이 들어온다

=> 직접 HLSL 코드를 작성 하는것도 가능

 

언리얼에서 셰이더 깨졌을 경우 격자무늬

유니티에서 셰이더 깨졌을 경우 핑크색

 

언리얼에서 머테리얼 생성 시 기본 값은 0

=> 아무것도 설정 안했을 경우 검정색으로 보이는게 정상

 

그럼에도 코난 범인처럼 리얼 블랙은 아니다

=> 기본 셰이딩 모델이 Default Lit(디폴트 라이팅포함)이기 때문

=> 언리얼은 기본 PBR, Physically based Rendering을 채택

(옛날에는 하이라이트나 그림자를 텍스쳐에 직접 그리는 손맵을 많이 썼지만...)

=> 씬에서의 빛이 표면에 닿으면, 머테리얼을 사용해서 그 빛과 표면의 상호작용을 계산한다


머테리얼 시스템의 "물리 기반" 측면에서 볼 때, 유효한 프로퍼티는

- Base Color 베이스 컬러, 바탕색

- Roughness 러프니스, 거칠기

- Metallic 메탈릭, 금속성

- Specular 스페큘러, 정반사

네 가지가 있지만, TA나 아트가 아닌 이상 베이스 컬러만 건드릴 것임

 

그럼 리얼 블랙을 만드려면 어떻게 해야하나

=> 라이팅을 끈다? 

=> Shading Model 중 Unlit(라이팅제외) 적용하면?

=> 베이스 컬러에 접근할 수 없다!

(빛이 표면에 닿아 반사되어 색상을 알 수 있듯이, 빛이 없으면 아무 의미 없다)

 

Emissive Color(이미시브 컬러, 발광색)

스스로 색상을 발하기 때문에(다른 오브젝트에 영향을 미치지 않는 빛을 뿜는다고 생각하자)

Unlit에서도 색상을 표현할 수 있다

 

이미시브 컬러만 쓰는 대표 예

=> 3D UI

=> 아니면 광원을 쓰지 않는 2D 게임 이라거나...

=> 카툰렌더링 처럼 PBR 쓰고 싶지 않을 경우,

이미시브 컬러만으로 구현하고 노멀/반사광/셰이딩을 직접 계산한다던가...

 

월드 포지션 오프셋

메시의 버텍스를 월드 스페이스에서 조작할 수 있다 (정점 셰이더)

=> 커스터마이징에서 살이 찌거나 여위거나 등등을 표현하기 좋음

=> 실제 버텍스의 위치가 바뀌거나 본의 스케일이 커지거나 작아지거나 하는게 아님!!

 

Rim Lighting(림 라이팅)

캐릭터의 실루엣을 강조하고 싶다!

하지만 캐릭터 뒤에 라이트를 추가하고 싶진 않다...

=> 구현 방법: 캐릭터의 외곽에 가까운지 판단하면 된다!

=> 표면 노멀과 카메라까지의 방향을 내적을 기반으로 감쇠 계산

=> 표면 노멀이 카메라를 바로 향하면 출력값은 0

=> 표면 노멀이 카메라에 수직인 경우 출력값은 1

=> 계산 결과를 [0, 1] 범위로 제한시켜 음수가 생기지 않도록

=> 언리얼에서는 같은 개념인 프레넬(Fresnel) 노드를 지원한다

https://docs.unrealengine.com/ko/Engine/Rendering/Materials/HowTo/Fresnel/index.html

 

머티리얼에 프레넬 사용하기

Fresnel 머티리얼 노드 사용법 안내입니다.

docs.unrealengine.com

 

프레넬을 사용하는 다른 방법 : Input Blending 입력 블렌딩

프레넬을 LERP의 알파로 사용하여(알파블렌딩) 입력이 선형보간에 합쳐지는 방식을 제어할 수 있다

=> 캐릭터의 외곽선을 그리는 것도 가능!

 

 

 

 

그 밖에

 

* 머테리얼 블렌드 모드 (불투명 Opaque, 반투명 Translucent 등등...)

https://docs.unrealengine.com/ko/Engine/Rendering/Materials/MaterialProperties/BlendModes/index.html

 

머티리얼 블렌드 모드

머티리얼 블렌드 모드와 그것이 머티리얼의 렌더링에 어떻게 영향을 끼치는가에 대한 개요입니다.

docs.unrealengine.com

* 일정 주기로 자연스럽게 변화를 주려면 Time에 Sine 곱하는 식으로 많이 쓴다

 

* 뭔가를 배울 때 곧이곧대로 받아들이지 말고 항상 "왜?" "어떻게 동작할까?" 의문을 가지자


20.06.27 두 번째 스터디 

 

수학도 공부해야 하는데....

포큐 C++ 끝나는대로 수학 강좌도 결제 해야 할듯 싶다