Jin02 / SOCEngine

Simple Real-time Rendering Engine
MIT License
9 stars 1 forks source link

VCT 남은 이슈 - #16 보충 #7

Closed Jin02 closed 8 years ago

Jin02 commented 8 years ago

2 와 연결된다.

  1. Bilateral Filtering
    Indirect Color Map의 해상도를 낮추고 Bilateral Filtering을 사용한다면 메모리 사용량을 낮추면서 약간의 퀄리티 상승을 노릴 수 있을 것 같다. 뭐, 이 처리를 하면서 가까운 물체에 대한 반사처리는 퀄리티가 떨어지겠지만, 현재 약간 부자연스럽게 느껴지는 Diffuse쪽은 좀 더 부드럽게 칠해지지 않을까 생각이 든다. 관련 내용은 http://cagetu.egloos.com/5576794 참고
  2. Voxelization - StoreVoxelColorAvg 문제
    제대로된 atomic 처리가 되지않고 값이 드문드문하게 들어간다. 하드웨어 문제이지 않을까 싶다. 그리고 이유는 모르겠지만 -_-, atomic 처리를 하지 않고 PS에서 voxelMap에 값을 직접 넣어주면 기록이 전혀 되질 않는다.
  3. Injection - StoreVoxelColorAvg 문제
    Compute Shader를 이용한 Injection Pass에서 StoreVoxelColorAvg가 전혀 작동하지 않는다. 특이한건 2번과 달리 여기서는 VoxelMap에 값을 직접 넣어야만 제대로 기록이 되고 atomic 연산을 사용하면 전혀 기록이 되지 않는다는 점이다. ㅅㅂ 3번을 해결할때 같이 해보고 뭔가 안된다 싶으면 CS를 버리고 VS->PS 파이프라인을 타면서 처리해버리는게 나을 듯 싶다. 물론 지금처럼 atomic 처리가 일부분만 되겠지만 어쩌든간에 작동하긴 하니깐 말이다(...)
  4. Specular VCT 공식 변경
    현재 Specular VCT부분에서 사용하고 있는 halfConeAngleRad는 내가 임의로 설정한 공식이다. 그냥 이리저리 삽질하다가 이뻐보이는 공식을 적용했다 -_-. 나중에 물리 기반에 맞는 공식이 있다면 그걸 적용해야 한다.
  5. Cascade 테스트
    적당히 돌아가지 않을까 싶기도 한데, 3번과 4번의 문제점 때문에 테스트 해보질 못했다.
Jin02 commented 8 years ago
Jin02 commented 8 years ago

16 과 연관된다.

Jin02 commented 8 years ago

2번의 Voxelization - StoreVoxelColorAvg 문제의 경우, 하드웨어 문제는 아닌 것 같다. 하드웨어 문제였다면 저번 외박때 테스트한 기기에서 제대로된 복셀화가 이루어져야 했다.

하지만, 당연히 그렇지 못했다. 결과물이 똑같이 나왔었다. 그렇다면 논리적으로 생각해봤을때 내가 짠 코드가 문제라는 것 말고는 답이 나오지 않는다.

Interlocked을 쓰는 방식이 잘못되었던, 내가 짠 코드 자체가 잘못되었던 내 문제일 것이다.\

16.06.20 추가

http://www.gamedev.net/topic/674692-d3d12-total-brightness-problem-in-compute-shader/ http://www.gamedev.net/topic/613648-dx11-interlockedadd-on-floats-in-pixel-shader-workaround/

참고

Jin02 commented 8 years ago

16 에서 현재 복셀화 처리를 더욱 빠르게 처리할 수 있도록 변경하려 하였다.

여튼, 뭐 그거 말고도 수정할게 많이보인다. 그래서 정리하자면..

1. Shadow 처리 변경
내껀 지금 Injection 단계에서 Shadow 처리를 하고 있다.
처음 만드는거라 딱히 생각이 없었기도 했고.. 여튼 이 방법은 옳은 방법이 아니였다.

오픈되어 있는 몇개의 엔진을 뜯어봤는데 전부 Cone Tracing 단계에서 처리하고 있었다.
그래서, 한번 나도 Injection 단계가 아닌 Cone Tracing 단계에서 Shadow 처리를 하고 결과물을 다시 보는게 어떨까 싶다.

문제는, 이 작업을 하려면 좀 많이 뜯어야한다.
우선 Deferred 쉐이딩 처리를 하고, Tile당 Light Index 정보를 빼내줘야 한다.
아니면.. 그냥 Transparency 패스에서 사용할 Light Index 정보를 그대로 쓰던가.. 해야한다.

여튼 어떻게든 Light Index에 대한 정보를 얻을 수 있다면 Cone Tracing단계에서 그 값을 참조해 Shadow처리를 하면 된다.

2. Cone Tracing 공식 재구성
SSLR을 다시 공부하다보니 Cone Tracing 처리하는데 괜찮을만한 방법들을 찾을 수 있게 되었다.
현재 공책에 정리되어 있는데, 나중에 휴가 나가게 된다면 그때가서 고치는게 좋지 않을까 싶다.
더욱 정확하지 않을까 싶다. 나름 검증된 것 같기도 하고 말이다.

3. Cone Tracing에서 MSAA 처리 다시 구현
뭐하러 이렇게 느리고 복잡하게 처리해둔지 모르겠다.
다시 뜯으면 된다.

4. Injection - StoreVoxelMap 문제.
맨 위의 2번과 3번과 관련된 문제이다.
속 편하게 Injection 단계에서 CS를 버리고 VS->PS 파이프라인 타버리는 것도 딱히 나쁘진 않을 것 같다. 구현하는게 귀찮아서 문제지..

5. TextureArray 사용
현재는 그냥 복셀 정보를 사용하는데 그냥 Atlas 형태로 사용하고 있다.
그니까, 그냥 대충 구겨넣고 있다. 그런데 이런 방법 보다는.. 최대한 API 기능을 빌려서 사용하는게 좋지 않을까 싶다. 근데 당장 급한 문제는 아니다.

6. Cone Tracing에 몇몇 기능(?) 추가
지터링 같은거?

Jin02 commented 8 years ago

그리고 StoreVoxelColorAvg 이건 다시 고려를 해봐야할 것 같다. DX11을 사용하는 여러 오픈소스들을 뜯어봤었는데.. 나같이 Interlock을 이용해서 값을 넣는 그런 짓거리는 아직 보지 못했다 -_-..

제대로 된 기능을 사용하려면 걍 GL로 건너 뛰던가 DX12에서 테스트해보던가 그래야하지 않을까 싶다.

즉, 이 말은 Casecade 방식도 다시 고려를 해봐야한다는 의미다 -_-..

Jin02 commented 8 years ago

16 과 합쳐진다.

2개로 나눠져 있으면 보기 힘드니, 이 이슈는 닫는다.

Jin02 commented 8 years ago

Bilateral Filtering 이건 정말 노이즈 제거용인것 같다 -ㅠ-.. 적정한 크기가 넘어가면 딱히.. 필터링 되는 느낌이 잘 안난다.

그래도 미세하게 차이는 있다

일단 가우시안까지 한번 넣어보자

Jin02 commented 6 years ago

This issue was moved to TeamSOC/SOCEngine#7