본문 바로가기
대학생활/수업

콘텐츠프로그래밍2 5주차 - 렌더링 기본 원리

by se.jeon 2024. 10. 16.
728x90
반응형

목표 : 렌더링 기본 원리의 이해, 렌더링 기초를 이해하기 위한 지식

- 디퓨즈 모델의 구현과 변형

- 스페큘러 모델의 구현과 변형

- 추가적인 효과

- 포스트 프로세싱

내적 복습

가짜 세상에서의 차원은 선형독립된 벡터가 만들어내는 공간이다.

3차원 공간에 2개의 벡터가 있다고 할 떄, 가로지르는 평면을 만든다면 무슨 관계에 있을까?

 

내적은 삼각함수에 비유할 수 있다.

삼각함수를 할 때 먼저 생각해야 하는 것은 호도법, 라디안. 180도는 파이.

반지름과 호도가 모두 1일 때의 각도가 라디안. 하지만 이는 존재할 수 없다. 무리수이기 때문이다.

 

sin, cos... 우리에게는 cos가 더 많이 쓰인다.

a벡터와 b백터의 내적은 궁극적으로 a벡터의 크기와 b벡터의 크기의 cos 세타가 되기 때문

여기서 a와 b가 1이면 cos 세타의 값을 알 수 있게 된다. 내적을 사용하면 계산 결과가 어마어마하게 단축되게 된다.

내적이 있어 실시간 렌더링이 가능한 그래픽 엔진이 나올 수 있었다.

빛의 성질

빛이 표면에 닿으면 에너지가 공급이 된다. 에너지의 관점에서 생각해야 한다.

에너지가 특수한 파장의 형태를 띄고 있기 때문에 우리의 눈에 색으로 보이는 것.

에너지가 들어오면 어떻게든 방출이 되어야 한다. 골고루 팅겨져 나가게 된다.

 

 

Incident Ray : 입사광선.

Diffuse : 난반사. 골고루 퍼져나가는 반사.

Specular : 정반사. 바로 팅겨나가는 반사.

난반사 성향이 좀 더 강하다.

 

자동차의 경우 리플렉션이 심하게 일어나고, 나무의 경우 그렇지 않다.

금속마다 고유한 색상이 있는 이유. 가시광선을 받아 노란색 스펙트럼을 쏴주는 물질이기 때문.

 

디퓨즈 라이팅

- 빛이 표면에 닿으면 골고루 반사한다. 그런데 비스듬히 닿으면?

- 각도가 비스듬해질 수록 표면의 받는 에너지가 줄어드는데, 이는 cos세타에 비례한다.

원이 나오면 삼각함수가 등장한다.

에너지가 소실된 면적은 cos 세타에 비례한다.

 

램버트 코사인 법칙

- 이를 정리한 공식이 램버트 코사인 공식이다.

BRDF의 이해

- BRDF : Bidirectional reflectance distribution function의 약자

- 들어오는 빛과 나가는 빛의 관계를 표면(Normal) 정보를 활용해 수식으로 구성한 함수

 

PBR(물리 기반 렌더링) 공식

- 게임 엔진의 PBR 렌더링 공식

- D : 러프니스, G : 메탈릭, F: 프레넬

 

 

고전 게임 제작에서의 렌더링 공식

- 디퓨즈 영역 : 램버트 셰이딩 및 변종

- 스페큘러 영역 : 블린-퐁 셰이딩 및 변종

- 물리 기반 렌더링이 아닌 스타일리시한 렌더링은 응용이 필요함.

 

예전에는 컴퓨터 사양이 좋지 않았기 때문에 단순한 공식을 사용했다.

따라서 가벼운 연산으로 그럴듯한 연출을 만들어내야 했다.

 

그리고 사람은 항상 리얼리틱한 것만 원하지 않는다. (ex : 카툰풍, 픽셀)

나만의 스타일을 쌓아올라가는 기법들이 필요하다.

실습 진행

UE 5.3으로 진행, CustomLighting

Blank, Start Content 제거

 

작업 환경 세팅

Content Drawer (Ctrl + Space) : Dock in Layout을 통해 잠근다.

File - new level을 통해 Empty Level을 생성.

Content 폴더 - 학번으로 폴더 생성, Maps 폴더 생성

Maps 폴더 - CustomLighting으로 레벨 세이브.

Edit - Project Setting - Map & Modes - Default Maps > CustomLighting

 

Lambert라는 이름의 구체 생성

Material폴더를 만든 이후, Material 생성. Shading model : Unlit

 

 

빛 또한 삼각함수로 계산할 수 있다.

가장 많이 빛이 닿는 곳, 그리고 비스듬하게 지나가는 곳을 계산할 수 있다.

 

 

마이너스 값들은 색으로 표현할 수 없다.

따라서 전부 0으로 표기한다.

각도를 틀었을 때, 크기가 1일 것을 보장 해 주어야 한다.

 

 

 

1이 2파이면 0.5는 180도.

언리얼에서는 라디안을 그대로 쓰면 안 된다.

 

 

V3을 Light라는 이름의 Parameter로 만든다.

Level Blueprint에 Lambert 오브젝트를 가져온 뒤, Get Material을 사용하여 머티리얼을 가져온다.

 

Lambert & Half Lambert

 

일상 생활에서는 볼 수 없는 빛. 형광등이나 이런 것들은 쿠션을 통해서 들어온다.

 

세제곱을 할 때는 Power를 사용 해 주면 된다.

다음 시간에는 카툰 렌더링을 어떻게 하는지, NPR 관련 내용을 진행하고자 한다.

과제

https://se-jeon.notion.site/5-1274065cf2bc80f58600ddee0619c7db?pvs=4

 

5주차 과제 | Notion

과제

se-jeon.notion.site

 

728x90
반응형