에디의 우당탕탕 코딩공장

[DirectX11] Render States

by 인턴 에디

📌 Geometry Shader

📌 Rasterizer Stage

  Geometry shader로 부터 출력된 primitive data는 rasterizer stage에 보내져, Rasterizer에 의해 렌더링 할 픽셀단위로 분해된다.

래스터라이저에서는 다음과 같은 처리를 수행한다.

- 보이지 않는 primitive 제거(은면 제거, 컬링 처리)

- 좌표의  뷰포트 변환

- 시저 테스트

- 깊이 바이어스 계산

- 프리미티브들을 렌더 타겟상의 텍셀 단위로 변경

- 멀티 샘플링이나 필 모드의 설정에 따른 처리.

 

✔ RS 스테이지의 동작은 `래스터 라이저 스테이트 오브젝트`에서 설정한다.

이 스테이트 오브젝트는 ID3D11RasterizerState 인터페이스에서 다룬다.

 

💡 Rasterizer State Object를 만드려면 D3D11_RASTERIZER_DESC 구조체를 만들고

ID3D11Device::CreateRasterizerState함수를 호출하여 생성한다.

 

//오브젝트 생성

D3D11_RASTERIXER_DESC RSDesc;

 

RSDesc.FillMode = D3D11_FILL_SOLIID; //평범하게 렌더링

✔ FiLL_WIREFRAME(wireframe 렌더링) 또는 FILL_SOLID(단색 랜더)을 넣을 수 있다. 단색이 기본 값이다.

 

RSDesc.CullMode = D3D11_CULL_NONE; //컬모드 하지 않음

D3D10_CULL_FRONT : 앞부분을 컬링한다-> 앞부분은 렌더되지 않는다.

D3D11_CULL_BACK : 뒷부분을 컬링한다 -> 뒷부분은 렌더되지 않는다.

 

RSDesc.FrontCounterClockwise = FALSE; // 시계방향이 뒷면임 CCW

✔ 삼각형 정점이 카메라로부터 시계방향으로 회전시키는가에 대한 bool 값이다.

 

RSDesc.DepthBias = 0; //깊이 바이어스 값 0

✔ 주어진 픽셀에 대한 깊이 값이다. default는 0

RSDesc.DepthBiaseClamp = 0;

✔ 최대 깊이 값이다.

 

RSDesc.SlopeScaledDepthBias = 0;

✔ 픽셀슬로프에 대한 스칼라 값을 지정한다.

 

RSDesc.DepthClipEnable = FALSE; //깊이 클리핑 없음

✔ 카메라로부터의 거리에 대한 클리핑

 

RSDesc.ScissorEnable = FASLE; //시저 테스트 하지 않음

✔ scissor-rectagle cilling에 대한 활성/비활성화. 모든 바깥의 픽셀들은 사각형으로 잘림되고 culled 된다(렌더x)

 

RSDesc..MultisampleEnable = FALSE; // 멀티 샘플링 하지 않음

RSDesc.AntialiassedLineEnable = FALSE; //라인 안티앨리어싱 없음

 

hr = g_pD3DDevice->CreateRasterizerState(&RSDesc, &g_pRasterizerState);


 

블로그의 정보

에디의 우당탕탕 코딩 공장

인턴 에디

활동하기