쉐이딩은 조명과 재질의 상호작용을 고려해서 색을 결정하는 과정이다.
이때 vs에서 미리 색을 결정해서 ps에서 보간하는 방법이 있고,
쉐이딩 알고리즘 자체를 ps에서 하는 방법이 있다.
둘 중에 어느 것이 다 빠르나면,
픽셀수에 비해 vertex의 수가 훨씬 적기 때문에
vs에서 돌리는 것이 더 빠르다.
대신에 렌더링의 상세도는 조금 떨어질 것이다.
요즘에는 GPU가 많이 빨라졌기 때문에
ps에서 돌리는 경우도 많다.
오늘은 ps에서 blinn-pong shading을 구현한다.
회전
회전을 할 때는 어떤 회전 축에 대해 회전할 것인지 정해야한다.
DX는 왼손 좌표계를 사용하고 있기 때문에 Y축을 기준으로 회전시킨다면,
왼손을 엄지를 위로 쭉 펴고 나머지 손가락들을 감아주는 방향으로 회전하는 것과 같다.
X축은 가로에 대한 축이다.
따라서 DX는 왼손 좌표계를 사용하고 있기 때문에
DX에서 X축에 대한 회전은 엄지를 옆으로 쭉 펴고
나머지 손가락들을 감아주는 방향으로 회전하는 것과 같다.
머티리얼
머티리얼은 크게 diffuse, ambient, specular에 따라 나뉜다.
// 코드 출저 위키피디아 https://en.wikipedia.org/wiki/Blinn%E2%80%93Phong_reflection_model
struct Lighting
{
float3 Diffuse;
float3 Specular;
};
struct PointLight
{
float3 position;
float3 diffuseColor;
float diffusePower;
float3 specularColor;
float specularPower;
};
조명에도 직접 조명과 간접 조명이있다.
이를 통해서 좀 더 사실적인 렌더를 한다.
ambient는 조명하고 상관없이 픽셀쉐이더가 가지고 있는 색을 리턴해주면 된다.
( = 물체 자체의 간접광 색깔)
diffuse가 조명하고 관련이 있는데,
diffuse는 Light의 r값과 머티리얼의 r값을 곱하는 식으로 간다.(rgb모두 동일)
Lambertian Surface
램버트 확산 반사 다이어그램. 검은색 화살표는 입사 복사도를 나타내고 ,
빨간색 화살표는 각 방향의 반사 복사 강도를 나타낸다 .
다양한 각도에서 볼 때
반사 복사 강도와 표면의 겉보기 면적은 모두 시야각의 코사인에 따라 달라지므로
반사 복사도 (단위 면적당 강도)는 모든 시야각에서 동일하다.
-90도 아래로 내려가게 되면 빛을 더는 받을 수 가 없다.
다시 +90도 이상부터는 받을 수 있다.
Diffuse Surface는
반사가 모든 방향으로 동일하게 퍼지는 것이고
(cos에 의해서 달라지는 것)
즉 Diffuse Surface를 계산할 때는 빛이 어느 방향에서 오는 지?
빛이 많이 받을 수 있는 각도인지 적게 받을 수 있는 각도인지를 알아야한다.
(빛을 얼마나 많이 반사할 지를 하는 계산)이를 계산할 때
램벌트의 코사인 법칙을 사용한다.
Specular Surface는
완전 반사를 통해 (난반사 x) 특정 반사를 통해 강하게 반사한다.
이 때 눈에서 보는 방향과 Specular 각도와 얼마나 동일하냐에 따라
반짝이는 정도(빛이 강하게 들어오는 정도)가 크다.
R*V 대신 N*H 사용 ( R*V 로 대체 가능 )
Phong 셰이딩에서는 접곱을 계속해서 다시 계산한다.
-실습 예제 박스 구현하기
++PLUS++
최신 렌더링 기법에서는 레스터라이제이션에서
여러가지 고급 렌더링 기법을 덧붙여 사용하여
레스터라이제이션 성능을 향상시켜서 쓰고 있다.
++++++++
참고문헌 : 위키피디아
https://en.wikipedia.org/wiki/Lambertian_reflectance
'그래픽스 > DX11' 카테고리의 다른 글
D3D11 그래픽스 - 변환 (1) | 2024.12.11 |
---|---|
D3D11 Rasterization - Light (0) | 2024.10.30 |
DX11 - 원근 투영(Perspective Projection) (0) | 2024.10.23 |
DX11 - 쉐이더 개념 + 뒷면 제거 (0) | 2024.10.21 |
D3D11 - 2차원 애니메이션 + 깊이 버퍼 (2) | 2024.10.20 |