현실같이 복잡한 조명 상황을 만들기에는 퐁 쉐이딩 만으로는 무리가 있다. 그래픽스에서는 텍스처를 잘사용하는 방식으로 성장 중이다. 그래서 환경맵 자체를 조명으로 사용하도록 만들기 시작함.
그래서 아래처럼 다양한 방향에서 샘플링 해온다음에 평균을 내기도함. 다만, 이건 게임에는 못씀. 연산이 너무 많기 때문임

그래서 게임에서는 다른 방식을 사용함. 텍스처를 미리 저 평균처럼 만들어 놓는 것.
아래 사진은 각 디퓨즈와 스펙큘러다. 저 위에 평균을 이용해 텍스처에 각 라이팅 정보를 넣어두고 다양한 텍스처를 사용하는 것이다.

사용할 리소스 뷰를 디퓨즈와 스펙큘러 용으로 나눠서 추가한다.
// 물체 렌더링할 때 큐브맵도 같이 사용
ID3D11ShaderResourceView *resViews[3] = {
mesh->textureResourceView.Get(), m_cubeMapping.diffuseResView.Get(),
m_cubeMapping.specularResView.Get()};
m_context->PSSetShaderResources(0, 3, resViews);
ps 에서도 2가지 추가한다. 큐브용과 물체용 둘 다 마찬가지
TextureCube g_diffuseCube : register(t0);
TextureCube g_specularCube : register(t1);
SamplerState g_sampler : register(s0);
PS 함수에서 2가지 텍스처를 적용해준다.
float4 diffuse = g_diffuseCube.Sample(g_sampler, input.normalWorld);
float4 specular = g_specularCube.Sample(g_sampler, reflect(-toEye, input.normalWorld));
diffuse.xyz *= material.diffuse;
specular.xyz *= material.specular;
return diffuse + specular;
결과물 이미지 기반 조명이 적용되어 조명이 비춰지는 것처럼 보인다.

여기에 기본 텍스처를 추가해주면(지구)
if(useTexture)
{
diffuse *= g_texture0.Sample(g_sampler, input.texcoord);
}
아래처럼 지구본에 주변 조명이 적용되는 것처럼 보여진다.

'DX' 카테고리의 다른 글
| Post Processing (0) | 2025.07.13 |
|---|---|
| fresnel 효과 (0) | 2025.07.13 |
| 환경 매핑(반사 매핑) (0) | 2025.07.13 |
| 큐브 매핑 (0) | 2025.07.13 |
| Rim Lighting 실습 (0) | 2025.07.13 |