티스토리 뷰
Forward pass 가 너무 많이 잡아먹기에, 투명이 없는 배경 모델을 찾아서 바꾸고,
DirectXTex가 PNG 읽을 때 강제로 32 BIT RGBA로 컨버팅 하기에 차라리 BGRX로 읽도록 바꿨다.
이전에 BGRX의 경우 alpha가 없는 걸로 처리하도록 했기에 뒷단은 알아서 된다.
내부적으로 WinCodec 쪽을 사용하기에 멀 할수가 없다.
FreeImage를 사용한 INFOMSPGMT 의 경우는 아래와 같이 처리한다.
// Check to see if the texture has an alpha channel.
m_bIsTransparent = ( FreeImage_IsTransparent( dib ) == TRUE );
Position 을 Depth 부터 reconstruction 하게 바꿀 경우,
Light 가 random 이라 일관성은 없는데
대충 메모리 사용을 줄이고 시간은 거의 변화가 없다는걸 알 수 있다
Light pre-pass 가 속도를 올려줄것 같진 않아서 좀더 찾아보니
https://www.slideshare.net/cagetu/kgc2012-deferred-forward
light volume z-test 란 부분에서 stencil 포기하고 z-test로 그리자란 부분이 나와있었다.
RenderSubPass( gfxContext, LightType::Point, ViewToClip, m_Lighting1PSO );
RenderSubPass( gfxContext, LightType::Spot, ViewToClip, m_Lighting1PSO );
RenderSubPass( gfxContext, LightType::Point, ViewToClip, m_Lighting2PSO );
RenderSubPass( gfxContext, LightType::Spot, ViewToClip, m_Lighting2PSO );
앞앞, 뒤뒤 이렇게 그림. 비교는 z 깊이만, cull 은 앞뒤로 각각
Pre-pass 를 구현해보기로 했다
https://www.slideshare.net/leemwymw/light-in-screenspacelight-pre-pass
- MRT 가 필요없다?
단계 1에서 1장 사용: Depth, Normal 경우에 따라서 Specular Power 를 1개 텍스쳐에 저장
Normal은 16,16 2개로 압축, depth도 16, power 를 16 bit로 depth는 그대로 사용하고, normal 을 16 3개로, power를 16 bit 로 등...
단계 2에서 1장 사용: Diffuse (RGB), Spec (A)
float specular = pow( saturate( dot( normal, H ) ), specularPower ) * attenuation * nDotL;
// Final value is diffuse RGB + mono specular
return float4( diffuse, specular );
Spec의 color 를 적용하지 않고 intencity 만 사용하는 것
위의 방법은 chromaticity 라는 값을 사용함
http://aker.tistory.com/556 https://www.slideshare.net/cagetu/light-prepass
그런데 HDR 값을 쓴다면 사용이 불가능 한것 같다
diffuse 에서 light끼리 더하는거라 1 을 넘겨버려서;
- Material 별 다른 shader path 사용 가능
캐릭터와 배경의 공식 분리
Stencil light culling
Z-test light culling
메모리 사용량은 specular power 만큼 늘어나고
vertex pass를 한번더 해야한다.
결국 vertex pass는 final render가 가져가는데, 약 1.1 ms 가 추가로 걸린다.
light pass 는 왜 2 ms 가 늘었을까?
처리과정은 거의 비슷하기에 random seed를 고정시킨 후 조사에 들어갔다.
HDR texture 입력을 받지 않기에 deferred 에서는
Out.Diffuse = float4(texColor * diffuse, 1.0)
Diffuse 와 Specular를 R8G8B8A8_UNORM 으로 생성하였다.
DXGI_FORMAT_R11G11B10_FLOAT 으로 바꾸니
Light pre-pass 의 경우
흠...
Gpu view 사용법을 몇번 더 봐도 머가 문제인지 모르겠다.
https://msdn.microsoft.com/en-us/library/windows/desktop/jj585574(v=vs.85).aspx.aspx) https://graphics.stanford.edu/~mdfisher/GPUView.html
Present 가 체크무뉘(hatch)라는 것과 잡다한 것만 새롭게 배웠는데; 직접적인 해석은 불가능하다.
'Game > MMD' 카테고리의 다른 글
Bloom (1) (0) | 2017.10.07 |
---|---|
Outline (2) (0) | 2017.10.06 |
Tone mapping (3) (0) | 2017.09.22 |
Outline (1) (0) | 2017.09.21 |
Deferred Rendering (1) (0) | 2017.09.19 |
- Total
- Today
- Yesterday