Shader 22.01.07

김주현·2022년 1월 7일

셰이더

목록 보기
14/18

VIBuffer_Rect_Viewport

네컨프로토에서 m_dwFVF를 D3DFVF_XYZRHW로 수정해주자

3차원 스페이스로 역벽환할경우 필요한 값

RHW(Reverse , W는 1로채워준다 (3차원으로 갈일은 없기때문)

지금 단순히 쓰기엔 편하지만 정점의 추가적인 연산이 불가하다.
월뷰투 변환까지 곱해놨다고 생각함

다음 pVertices의 w값을 다 1로 채워주자.

그리고 모든 픽셀은 원픽셀로그려진다.

Create에서 fLeftX와 fTopY fSizeX fSizeY로 값을 넣어주자.

타겟 클래스에 CVIBuffer_Rect_Viewport* 를 디버그일때만 할당할수있도록 해주자.

디버그 버퍼를 준비시켜주는 함수 Ready_Debug_Buffer를 만들어주자

인자로 픽셀을 어디서부터 어떤사이즈로 그릴지가 필요하다.

함수에서 디버그버퍼를 할당해주자.

Render_Debug_Buffer()

m_pVIBuffer의 Render_VIBiffer를 호출해주자.

Shader_Deferred.hlsl를 만들어주자.

여러가지 pass를 만들어주자.

월뷰투를 먹지않아 VS는 의미가없다 PS_IN과 OUT을 만들어주자.

PS_MAIN_DEBUG에서

Out.vColor 에 텍스처를 불러와주자.

Target클래스에 Shader 컴포넌트 추가해주자.

Ready_Debug_Buffer에서 Shader 추가해주자.

렌더에서 셰이더를 이용해서 그려주자.

타겟에 만들어준 디버그용함수를 타겟 매니저에도 추가해준다
(추가로 타겟태그를 인자로 받는다)

함수 내부에선 태그로 타겟을 찾아 같은 함수를 호출해주자.

렌더러컴포넌트에서 타겟매니저의 Ready_Debug_Buffer를 호출해주자. (디버그일때만)

렌더에서 렌더함수 호출해주자.

CTarget의 m_pOldSurface의 Free해주고 Get해왔을때도 1줄여주자.

타겟매니저의 Destroy을 호출해주자.

노말타겟은 픽셀들의 법선벡터를 저장할것이다.

Shader_Mesh에서 순수하게 색깔만 리턴하도록 변경해주자.

깊이 버퍼는 엄밀히 말하면 렌더타켓은 아니지만 저장하고 비교하고 기록한다-> 이미지다
저장할수있는 최대값은 1이다.

노멀라이즈한 노말은 -1 ~ 1 사이이고 깊이버퍼는 0~1을 저장한다.

0.5를 곱하고 0.5를 더해주자. (이때 w값은 날려주자 어차피 노말벡터는 방향이기때문에 w값이 0이다.)

빛연산할때 다시 -1 ~ 1로 바꿔준다.

Shader_Terrain 도 수정해주자.

이제 빛정보를 던져줄필요없다.

이제 셰이더 타겟의 명암을 그린다.

명암은 렌더 놀아파와 알파 사이에.

Render_LightAcc

셰이더 타겟을 장치에 바인딩한다.

m_pTarget_Manager->Begin_MRT(TEXT("MRT_LightAcc"))
와 End 사이에 셰이더 타겟에 명암을 그린다.

셰이더 타겟의 모든 픽셀의 값을 저장할수있는 버퍼를 그려주자.

Light안에 버퍼를 만들어두자.

Render()함수를 만들어주자.
버퍼의 Render를 호출해주자.

버퍼를 그리기위해선 셰이더가 필요하다.

Shader_Deffered에 광원들의 패스 추가해주자.

0개의 댓글