개요

엔진의 렌더링 과정에 사용되는 가장 기본적인 셰이더 코드의 작동 방식 및 이론을 작성해둔 페이지.


목차


참고 사항

사전 배경

본 엔진에서 사용되는 셰이더 코드에 대해 엔진과 맞물려 알아둬야 하는 기본 지식들.

1. Material, Light 연산 구조

빛의 연산에 있어서 가장 중요한 요소들인 MaterialLight의 구조에 대한 설명이다. 본 엔진의 셰이더 연산에선 Material과 Light 사이의 계산에 필요한 필드를 일치시켜서 구현해뒀다. Phonn 방식을 사용하는 이 연산 과정에는 uv 좌표를 사용해서 텍스처에 대한 샘플링이 완료되면 그 정보를 바탕으로 각각의 필드들이 가중치의 개념으로 최종 연산에 반영이된다. 가중치는 0~1 사이의 실수 값을 갖는다.

다음은 연산에 사용되는 필드들에 대한 정보다.

타입 설명
Ambient float4 환경광 연산
Diffuse float4 분산광 연산
Specular float4 광원에 의한 하이라이트 연산

추가적으로 확장성과 16바이트 정렬을 고려해 Alpha값을 포함해서 float4로 정의해뒀지만 아직 Alpha값을 사용해서 연산을 수행하는 부분은 없거나 별도의 환경 변수를 사용한다. 예를 들어 후술할 Specular의 경우가 Material 구조체의 Shiness 값을 따로 설정해서 그 투명도를 조절한다. Alpha값을 사용할 수도 안할 수도 있지만 16바이트 정렬을 고려해야하기 때문에 왠만하면 float3로 자료형이 바뀌는 일은 없을 것이다.

2. 정의된 구조체들

1) Light

광원에 대한 정보를 담고있음. 기본적으로 연산에 필요한 필수적인 정보 이외에도 광원의 종류, 빛의 소멸 임계점, 빛의 세기와 같은 정보가 담겨있다.

타입 설명
Ambient float4 환경광 연산
Diffuse float4 분산광 연산
Specular float4 광원에 의한 하이라이트 연산
Emissive float4 광원의 영향을 받지 않고 직접 방출하는 색에 대한 연산
Direction float3 빛의 방향 정보. 정규화 되어있지 않음.
LightType int 빛의 종류 정보. 방향광,
점 광원, 스폿 광원 중 하나.
FalloffInfo float2 빛이 소멸하는 임계점에 대한 정보. 소멸의 시작 거리와 끝 거리.
방향광에는 적용되지 않음.
SpotPower float 빛의 세기.
padding1 int 바이트 정렬용. 사용 안함.