1 / 23

DirectX Shader Programming

제 3 주차 High Level Shader Language 램버트 확산 조명. DirectX Shader Programming. High Level Shader Language. High Level Shader Language. C 언어와 유사한 문법 구조 컴파일형 언어 내부 혹은 외부에서 컴파일 과정을 거쳐야 함 정점 셰이더와 픽셀 셰이더 지원 명령어의 차이가 적어서 변환이 편리. VS : PS. HLSL 로 작성한 셰이더는 약간의 수정만으로 VS 와 PS 사이에서 변환 가능 함

gianna
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. 제 3 주차 High Level Shader Language 램버트 확산 조명 DirectX Shader Programming

  2. High Level Shader Language

  3. High Level Shader Language • C언어와 유사한 문법 구조 • 컴파일형 언어 • 내부 혹은 외부에서 컴파일 과정을 거쳐야 함 • 정점 셰이더와 픽셀 셰이더 지원 • 명령어의 차이가 적어서 변환이 편리

  4. VS : PS • HLSL로 작성한 셰이더는 약간의 수정만으로 VS와 PS 사이에서 변환 가능함 • Vertex Shader • 속도가 빠름 • 정확도를 높이려면?  하이폴리곤 모델 사용 • Pixel Shader • 정확도가 높음 • 속도가 상대적으로 느림

  5. Effect File • HSLS은 이펙트 파일로 작성 • 이펙트 파일의 사용법 • 소스원본 • D3DXCreateEffectFromFile • Fxc.exe 활용 • D3DXCreateEffect 어플리케이션 이펙트 파일 xxxxx.fx 오브젝트 파일(xxxxxx.obj)

  6. Effect File의 구조

  7. 전역 변수의 선언 • 좌표 변환에 사용될 변환행렬 • float4x4 • 모델의 색상 • 텍스쳐 • texture • 샘플러 오브젝트 • sampler • 등등

  8. 전역 변수의 선언 //전역변수 선언 float4x4 mMWP; //로컬 좌표 변환 //텍스쳐 texture Tex; // 텍스쳐 정보 sample Samp = sampler_state { Texture = <Tex>; MinFilter = LINEAR; MagFilter = LINEAR; MipFilter = NONE; AddressU = CLAMP; AddressV = CLAMP; };

  9. 정점 셰이더 출력용 구조체 다른 용도로도 사용 가능 struct VS_OUTPUT { float4 Pos : POSITION float2 TexCoord : TEXCOORD0 } 시멘틱스 : 출력레지스터에 대응POSITION  oPOS TEXCOORD0  oT0

  10. 정점 셰이더 사용 VS_OUTPUT VS( float4 Pos : POSITION float2 TexCoord : TEXCOORD0 ){ VS_OUTPUT Out = (VS_OUTPUT) = 0; Out.Pos = mul(Pos, mWVP); Out.TexCoord = Tex; return Out; }

  11. 픽셀 셰이더 사용 float4 PS( VS_OUTPUT In ) : COLOR { return tex2D( Samp, In.TexCoord ); } • Tex2D • 샘플러에 등록되어 있는 텍스쳐를 읽어옴

  12. 테크닉 tenique TShader { pass P0 { VertexShader = compile vs_1_1 VS(); PixelShader = compile ps_1_1 PS(); } }

  13. Handling effect file • HLSL로 작성한 파일을 D3D 어플리케이션에서 사용하기 위함 • LPD3DXEFFECT • 셰이더 • D3DXHANDLE • HLSL에 정의한 함수, 변수에 접근하기 위한 핸들러

  14. Create Effect #1 HRESULT D3DXCreateEffectFromFile( LPDIRECT3DDEVICE9 pDevice, // 디바이스 LPCTSTR pSrcFile, // 이펙트 파일 CONST D3DXMACRO * pDefines, // 전처리기 옵션 (null) LPD3DXINCLUDE pInclude, // 옵션인터페이스 (null) DWORD Flags, // D3DXSHADER 식별용 LPD3DXEFFECTPOOL pPool, // 이펙트풀 LPD3DXEFFECT * ppEffect, // 셰이더 변수 LPD3DXBUFFER * ppCompilationErrors // 에러를 저장할 곳 ); • 적색을 제외한 나머지 옵션은 NULL을 넣어주면 OK • 함수가 제대로 실행되면 S_OK가 리턴되고, 아니면 에러넘버가 리턴됨

  15. Create Effect #2 • D3DXCreateEffectFromFile로 이펙트를 컴파일 • GetTechniqueByName() • 이펙트 파일 내부의 테크닉 핸들을 얻어옴 • GetParameterByName() • 테크닉 내부의 변수를 얻어옴 Technique = Effect->GetTechniqueByName( “TShader”); WVP = Effect->getParameterByName(NULL, “mMVP”);

  16. Effect Recovery • 이펙트도 하나의 DirectX 객체이기 때문에 디바이스를 잃거나, 리셋이 되는 상황에 대한 처리를 해주어야 한다. • 텍스쳐나버텍스들도 마찬가지임

  17. Rendering From Effect File • 이펙트 설정 • Effect->SetTechnique( Technique ); • Effect->Begin( NULL, 0 ); • Effect->Pass (0); • 셰이더 상수 설정 • D3DXMATRIX m = world * view * proj; • Effect->SetMatrix( WVP, &m ); • 어셈 셰이더와 달리 전치행렬을 쓰지 않아도 OK • Effect->SetTexture(“Tex”, Mesh->m_Ptextures[0]); • 실제 렌더링 • pd3dDevice->SetVertexDeclaration(m_pDecl); • Mesh->Render(pd3dDevice); • 렌더링 종료 • Effect->End();

  18. 조명 • 2D 이미지를 3D로 착각하게 만드는 것 • 빛이 비치는 쪽은 밝고, 비치지 않는 쪽은 어두움

  19. 빛의 강도와 넓이 • 광원에서 나오는 빛의 방향과 면의 수직방향이 이루는 각도 = 1

  20. 빛의 반사각도와 강도 • 모든 방향에 대하여 같은 강도로 산란됨 • = 빛의 강도가 강하면 밝게 보임 • 램버트의 코사인 법칙(Lamber`s Cosine law) • 물체표면에서 반사하는 빛의 휘도는 입사벡터 L과 법선벡터 N의 각도의 코사인에 비례한다. • 빛의 강도를 Id이고물체의 색은 Kd, 입사각일 때 다음 공식이 성립함

  21. 환경광 • 실제 세계의 물체는 빛을 반사할 때 우리 눈 뿐만 아니라 다른 방향으로도 반사시킴 • 그 빛이 다른 물체에 영향을 미치는 것

  22. 램버트 조명 모델 • 램버트의 코사인 법칙에 의한 확산 조명 + 환경광 라이팅 = 램버트 조명 모델 환경광 확산 반사광

  23. 램버트 확산 모델의 구현

More Related