티스토리 뷰

Game/DirectX 11

SSAO (1)

newpolaris 2017. 5. 5. 16:36

Luna's Dx11 의 SSAO가 괜찮은 introduction 이다.

명확하고 인터넷 튜토리얼에서 보이는 잘못된 수식 혹은 설명 빠진 건 없다

문제는 Sample point 가 정육면체의 각 꼭지점 및 중점으로 17개로 고정되어 있다는 것

그리고 나머지 세팅은,

blur는 1x1 blur 를 multi pass (3 pass)

random kernel 이 128x128

semi sphere 로 sampling point 를 구하는데 reflection 으로 고정 된 sampling point 를 회전시키고 만약 face normal 과 반대 방향으로 바라보고 있다면 반대방향으로 돌린다

그리고 view space normal 과 depth를 F16F16F16F16 texture에 저장하여 쓴다

느낀점은 blur 도 느리고, SSAO 도 느리고 결과는 비교대상이 있어야 알겠다 이다.

3 pass bluring 이후의 결과

단, 그냥 gaussian blur는 아니고 차이가 클 경우 blur를 취하지 않는데 그 때문에

검은 선 혹은 점이 생긴다. 차라리 없거나 bilateral filter가 나은 듯

    // If the center value and neighbor values differ too much (either in 
    // normal or depth), then we assume we are sampling across a discontinuity.
    // We discard such samples from the blur.    
    if( dot(neighborNormalDepth.xyz, centerNormalDepth.xyz) >= 0.8f 
     && abs(neighborNormalDepth.a - centerNormalDepth.a) <= 0.2f )

SSAO 적용 전,

적용 이후,

이미지를 앞뒤로 놔두고 비교해야 약간 알만하다.

결과물에 대해 말하기가 참 애매한데, 없는 거랑 있는거는 어느정도 티는 난다.

Luna의 Dx12의 구현은

IASetVertexBuffers(0, 0, nullptr, nullptr, nullptr);
IASetIndexBuffer(nullptr, DXGI_FORMAT_UNKNOWN, 0);
IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
DrawInstanced(6, 1, 0, 0);

VertexOut VS(uint vid : SV_VertexID)

Screen Rect 없이 위와 같이 Instanced로 6을 넣는다

또한, Depth Stencil Texture에서 Depth 만 분리해서 따로 사용한다.

ViewSpace Depth를 위해 아래 함수를 사용한다

float NdcDepthToViewDepth(float z_ndc)
{
    // z_ndc = A + B/viewZ, where gProj[2,2]=A and gProj[3,2]=B.
    float viewZ = gProj[3][2] / (z_ndc - gProj[2][2]);
    return viewZ;
}

다른 원형과 변형들을 봐야됨;

AO texture 그 희끄무리한 것만 가지고 비교하면

종류에 따라 이런 현격한 차이를 보이지만,

SSAO랑 HDAO 랑은 크게 차이 안나고, VXAO는 blur 가 필요없이 있어야 할 공간에 칼같이 붙어 있는 느낌이었다.

https://www.youtube.com/watch?v=VWiSex0NhlI

여러 효과가 들어가서 최종 화면에 가까워서 여러개가 섞일 수록 티는 적게 나는 것 같다

(막상 적으면서 보니까 큰거 같네)

'Game > DirectX 11' 카테고리의 다른 글

SSAO(2)  (0) 2017.05.07
Bool HLSL  (0) 2017.05.05
Renderer (2) - Constant Buffer  (0) 2017.04.23
Renderer (1) - Hierography3  (0) 2017.04.22
ACC (1)  (0) 2017.04.21
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크