티스토리 뷰

Game/DirectX 11

SSAO(3)

newpolaris 2017. 5. 9. 20:56

근대 바닥이 검정색은 말이 안되는데;

문제 찾아 삼만리

전에는 살짝만 검색하면 나오던 SSAO 구현들이 지금은 검색해도 나오지도 안는다 ^^

VS_OUTPUT GeometryVS( VS_INPUT input )
{
    VS_OUTPUT output;
    output.HPosition = mul( float4(input.Pos,1), g_WorldViewProjection );
    output.PositionV = mul( input.Pos, (float3x3)g_WorldView );
    output.NormalV = mul(input.Pos, (float3x3)g_WorldView);
    return output;
}

으아, Normal에 Pos를 넣었는데도 먼가 있어보이는 결과를 내준 구현에 감사를

NdcDepthToViewDepth(sampleDepth)

새로넣은 Depth는 NDC이므로 View로 돌려야한다

Normal Texture Image 이다.

평면일 경우 위 처럼 단색이 찍혀야한다. 난 왜 그라데이션을 보고 이쁘다고만 생각했을까;

으아 갈길이 멀다

바닥의 저 음영은 먼가

축소하니 흔적이 보인다

가짜인듯. LUNA 꺼에 모델을 강제로 적용해보니 이런 형태.

하지만 위에 개체를 없애고 바닥만 보이니 문제 없네

그럼 내껀 도대체 머가 문제인가

  1. Offset 을 잘못 계산함

보면 알겠지만 식이 틀렸다, 우선 순서부터; 20만 같은 값 나오는데 0.5를 더하다니 예전에 대충 되는 것 같아서 ProjTex 대신 위의 식을 사용했던게 원인 나눈뒤 texture 좌표계로 환산하기 위해 (0.5, -0.5)를 곱해야한다. openGL과 MS의 차이 (z축 방향땜시 인듯)

  1. Random 은 왜이런가

으아 16F 인데 32로 초기화 했다

  1. 카메라 Depth 가 너무크고 개체에 비해 Radius 가 넘 크다

이전 Near, Far 가 0.1, 1000000 일 때,

장면이 잘안나와서 홧김에 바꾼값인데 까먹고 있었다 normal 값을 -1로 초기화 해뒀지만 작아서 안먹히고 있었다

1, 1000 으로 바꾸고 난뒤

    occlusion += (sampleDepth <= Sample.z ? 1.0 : 0.0) * rangeCheck * dp;

위와 같이 비교하는 식을 써서 문제다.

내부에 음영은 Scale 이 작아서 offset의 x, y 가 영향을 많이 받아서 멀리 떨어진 부분을 참조해서 발생한 것

scaling 을 도입하면,

Range Check를 추가하면

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

Environment mapping (1)  (0) 2017.05.13
SSAO(4)  (0) 2017.05.10
SSAO(2)  (0) 2017.05.07
Bool HLSL  (0) 2017.05.05
SSAO (1)  (1) 2017.05.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크