언리얼 머테리얼
언리얼에서 머테리얼을 생성한다
=> 비주얼 스크립팅을 통해 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++ 끝나는대로 수학 강좌도 결제 해야 할듯 싶다