1 / 20

DirectX Shader Programming

DirectX Shader Programming. Lambert 조명모델의 확장. 지난주에 구현한 프로그램의 단점 조명계산을 하는 과정에서 월드 좌표계의 법선 벡터를 받아오면서 연산을 2 회함 로컬 좌표계에서 계산하는 방법으로 바꿀 수 있다면 ? Normal Vector 의 연산을 로컬좌표계로 바꾸어 보자 float N 에 모델의 Normal 벡터를 대입하면 됨. Lambert 조명 모델의 최적화. 의 경우 바뀔 일이 없음 상수화 가능 환경광과 확산 반사광은 색의 강도만 다름

dianne
Download Presentation

DirectX Shader Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. DirectX Shader Programming

  2. Lambert 조명모델의 확장 • 지난주에 구현한 프로그램의 단점 • 조명계산을 하는 과정에서 월드 좌표계의 법선 벡터를 받아오면서 연산을 2회함 • 로컬 좌표계에서 계산하는 방법으로 바꿀 수 있다면? • Normal Vector의 연산을 로컬좌표계로 바꾸어 보자 • float N에 모델의 Normal 벡터를 대입하면 됨

  3. Lambert 조명 모델의 최적화 • 의경우 바뀔 일이 없음 • 상수화 가능 • 환경광과 확산 반사광은 색의 강도만 다름 • 과 같은 형태로 바꾸는 것도 가능 • 광원벡터 L의 w에 환경광의 강도가 포함되어 있음

  4. Lambert 조명 모델의 최적화 노멀 벡터를 입력받고 4방향벡터에 x,y,z에는 빛의 방향을, W값에는 확산광 값을 넣어 메모리사용양과계산양을 줄임

  5. Phong반사 모델 강한 빛이 반사된 부분에서 나타나는 하이라이트

  6. Phong반사 모델 • 하이라이트는 강한 빛이 닿는 부분에서 생기는 강한 반사광을 의미 • 반영 반사광 (Specularity, 反影) 이라고 함

  7. 램버트 모델과의 차이점 램버트 모델에서는 반사광을 표현하지 못함 퐁 셰이딩은 반영 반사광을 정확히 표현함

  8. 램버트 모델과의 차이점

  9. Phong반사

  10. Phong반사의 이해 • 빛이 물체에서 반사되었을 때, 시선이 입사 방향과 가까울 수록 반사광이 강하게 보임 • 즉, 반사벡터 R을 구해서R이 입사벡터 L과가까울수록강한 빛을 표현 하면 됨

  11. Phong반사의 이해 • 반사 강도(n)에 따른 반응 변화는 위와 같음 • n이 0에 가까울 수록 하이라이트 범위가 넓어짐

  12. Phong반사의 구현 • 램버트 확산 조명에서 반영 반사항만 추가하면 됨 • 카메라의 위치를 EyePos라 하면 EyePos에서 정점 V로 향하는 벡터를 정규화해서 반사 벡터를 계산 • 시점벡터는 뷰좌표계의 원점을 사용하면 됨

  13. Phong반영 반사 공식 램버트 조명 반영 반사광 반사벡터

  14. 픽셀 단위의 반영 반사 계산 버텍스셰이더의 경우에는 폴리곤의 개수에 따라서 하이라이트 표현에 영향을 많이 받음

  15. 픽셀 단위의 반영 반사 계산 • 픽셀 셰이더는 법선 벡터 등의 입력변수를 마음대로 다룰 수 없음  버텍스 셰이더에서 픽셀 셰이더로 값을 넘겨줄 때 입력 변수의 값을 함께 넘겨주는 방법을 사용 • 주로 텍스쳐 좌표를 입력 변수로 사용함 • 벡터로 변경이 가능하기 때문

  16. 버텍스셰이더의 아웃풋 활용 struct VS_OUTPUT { float4 Pos : POSITION; float4 Color : COLOR0; float3 N : TEXCOORD0; float3 Eye : TEXCOORD1; }; 텍스쳐좌표를 법선 벡터와시점 벡터로 활용

  17. VS의 Output 수정 // ------------------------------------------------------------- // 장면렌더 // ------------------------------------------------------------- VS_OUTPUT VS( float4 Pos : POSITION, // 로컬위치좌표 float4 Normal : NORMAL // 법선벡터 ){ VS_OUTPUT Out = (VS_OUTPUT)0; // 출력데이터 // 좌표변환 Out.Pos = mul(Pos, mWVP); // 정점색 float amb = -vLightDir.w; // 환경광의강도 float3 eye = normalize(vEyePos - Pos.xyz); float3 L = -vLightDir; // 로컬좌표계에서의광원벡터 float3 N = Normal.xyz; float3 R = -eye + 2.0f*dot(N,eye)*N; // 반사벡터 Out.Color = vColor * max(amb, dot(Normal, -vLightDir)) + pow(max(0,dot(L, R)), 10); Out.N = N; Out.Eye = R; return Out; }

  18. 픽셀 셰이더 수정 float4 PS(VS_OUTPUT In) : COLOR { float3 L = -vLightDir.xyz; float3 R = In.Eye; float3 N = In.N; return In.Color * max(.3, dot(N, -vLightDir)) + pow(max(0,dot(L, R)), 10);; }

  19. // ------------------------------------------------------------- // 장면렌더 // ------------------------------------------------------------- VS_OUTPUT VS( float4 Pos : POSITION, // 로컬위치좌표 float4 Normal : NORMAL // 법선벡터 ){ VS_OUTPUT Out = (VS_OUTPUT)0; // 출력데이터 // 좌표변환 Out.Pos = mul(Pos, mWVP); // 정점색 float amb = -vLightDir.w; // 환경광의강도 float3 eye = normalize(vEyePos - Pos.xyz); float3 L = -vLightDir; // 로컬좌표계에서의광원벡터 float3 N = Normal.xyz; float3 R = -eye + 2.0f*dot(N,eye)*N; // 반사벡터 Out.Color = vColor * max(amb, dot(Normal, -vLightDir)) + pow(max(0,dot(L, R)), 10); Out.N = N; Out.Eye = R; return Out; } // ------------------------------------------------------------- float4 PS(VS_OUTPUT In) : COLOR { float3 L = -vLightDir.xyz; float3 R = In.Eye; float3 N = In.N; return In.Color * max(.3, dot(N, -vLightDir)) + pow(max(0,dot(L, R)), 10);; }

  20. 다음 시간에 할 것 • 본격적인 렌더링 테크닉을 학습 할 것임 • 카툰렌더링을 할 예정 • 카툰렌더링에 사용할 모델 (.x 파일)을 구해서모델을 화면에 띄워 올 것 • 단, 셰이더를 바로 사용할 수 있게 실습시간에 활용했던 셰이더를 활용할 것 • 수행평가 • 참고 자료 : 실습 예제 + DirectX Tutorial 6

More Related