엔진의 렌더링 과정에 사용되는 가장 기본적인 셰이더 코드의 작동 방식 및 이론을 작성해둔 페이지.
본 엔진에서 사용되는 셰이더 코드에 대해 엔진과 맞물려 알아둬야 하는 기본 지식들.
빛의 연산에 있어서 가장 중요한 요소들인 Material과 Light의 구조에 대한 설명이다. 본 엔진의 셰이더 연산에선 Material과 Light 사이의 계산에 필요한 필드를 일치시켜서 구현해뒀다. Phonn 방식을 사용하는 이 연산 과정에는 uv 좌표를 사용해서 텍스처에 대한 샘플링이 완료되면 그 정보를 바탕으로 각각의 필드들이 가중치의 개념으로 최종 연산에 반영이된다. 가중치는 0~1 사이의 실수 값을 갖는다.
다음은 연산에 사용되는 필드들에 대한 정보다.
타입 | 설명 | |
---|---|---|
Ambient | float4 | 환경광 연산 |
Diffuse | float4 | 분산광 연산 |
Specular | float4 | 광원에 의한 하이라이트 연산 |
추가적으로 확장성과 16바이트 정렬을 고려해 Alpha값을 포함해서 float4로 정의해뒀지만 아직 Alpha값을 사용해서 연산을 수행하는 부분은 없거나 별도의 환경 변수를 사용한다. 예를 들어 후술할 Specular의 경우가 Material 구조체의 Shiness 값을 따로 설정해서 그 투명도를 조절한다. Alpha값을 사용할 수도 안할 수도 있지만 16바이트 정렬을 고려해야하기 때문에 왠만하면 float3로 자료형이 바뀌는 일은 없을 것이다.
광원에 대한 정보를 담고있음. 기본적으로 연산에 필요한 필수적인 정보 이외에도 광원의 종류, 빛의 소멸 임계점, 빛의 세기와 같은 정보가 담겨있다.
타입 | 설명 | |
---|---|---|
Ambient | float4 | 환경광 연산 |
Diffuse | float4 | 분산광 연산 |
Specular | float4 | 광원에 의한 하이라이트 연산 |
Emissive | float4 | 광원의 영향을 받지 않고 직접 방출하는 색에 대한 연산 |
Direction | float3 | 빛의 방향 정보. 정규화 되어있지 않음. |
LightType | int | 빛의 종류 정보. 방향광, |
점 광원, 스폿 광원 중 하나. | ||
FalloffInfo | float2 | 빛이 소멸하는 임계점에 대한 정보. 소멸의 시작 거리와 끝 거리. |
방향광에는 적용되지 않음. | ||
SpotPower | float | 빛의 세기. |
padding1 | int | 바이트 정렬용. 사용 안함. |