조명 효과와 셰이더 디버깅

2D, 3D, 다각형, 픽셀 등 게임의 그래픽 프로그래밍에 관한 포럼입니다.

Moderator: 류광

Locked
wustasha
Posts: 35
Joined: 2007-07-27 00:35

조명 효과와 셰이더 디버깅

Post by wustasha »

다이렉트를 이용해서 3d 프로그래밍을 공부하는 학생입니다.
몇가지 궁금한 사항이 있어서 질문을 남기는데요

기본 제공되는 조명 효과( 정점에 의한 ) 를 이용하면 조명에 의한 표면 단위로 색상이 바뀌는 데요

최신 게임들을 하면 픽셀 단위로 색상이 바뀌는 것 같더라구요.

혹시 어떤 방법으로 해야 하는 지 알려주셨으면 하구요

HLSL은 디버깅이 가능한지도 궁금하네요. 셰이더 디버깅 프로그램이 있으면 정보 좀 알려주셨으면 하구요.


그럼 :)
비회원

Re: 조명 효과와 셰이더 디버깅

Post by 비회원 »

wustasha wrote:다이렉트를 이용해서 3d 프로그래밍을 공부하는 학생입니다.
몇가지 궁금한 사항이 있어서 질문을 남기는데요

기본 제공되는 조명 효과( 정점에 의한 ) 를 이용하면 조명에 의한 표면 단위로 색상이 바뀌는 데요

최신 게임들을 하면 픽셀 단위로 색상이 바뀌는 것 같더라구요.

혹시 어떤 방법으로 해야 하는 지 알려주셨으면 하구요

HLSL은 디버깅이 가능한지도 궁금하네요. 셰이더 디버깅 프로그램이 있으면 정보 좀 알려주셨으면 하구요.


그럼 :)
per pixel lighting 같은걸로 검색해보시면 자료가 많이 나올겁니다.

기본적으로 게임에서 쓰이는 계산의 순서는 이렇습니다.
각 3점이 vertex 파이프라인으로 들어가고, 이 세 점에서 각각 노멀값, 라이팅 값이 계산되서 세 점에서 칼라값이 나옵니다.

그 다음에 이 세점이 각 화면의 픽셀로 들어가는... 이른바 rasterization ( interpolation 이라고도 불리우죠. ) 이 일어납니다. 이때는 각 vertex 의 색깔만으로 각 점에 골고루 분포합니다. 부드럽게 그려주죠.

문제는 이렇습니다. 라이팅과 노멀 계산을 각 버텍스에서 한다음에 그걸 그대로 각 픽셀로 인터폴레이션해버리까 정확한 계산이 일어나지 않습니다.

per pixel lighting 에서는 light 계산을 세개의 버텍스에서 하지 않고 버텍스에서 노멀, 위치, 칼라 값만 가지고 온다음에 각 픽셀에서 라이팅 계산을 합니다. (쉽게 요약하면 라이팅 계산이 버텍스에서 하던걸 픽셀에서 한다는말입니다.)
쉐이더로 구현해보면 쉽습니다. 라이팅 계산을 vertex shader 에서 하지 말고 pixel shader (다른 말로 fragment shader) 에서 하면 됩니다.

HLSL 디버깅 가능합니다. NVIDIA 라면 NVPerfHUD 같은걸로 하면 되겠네요.
Locked