티스토리 뷰

Game/Graphics

IBL (4) specular optimization

newpolaris 2018. 2. 10. 00:01

아래 싸이트를 참고로 해서 최적화 작업을 하고 있다

https://placeholderart.wordpress.com/2015/07/28/implementation-notes-runtime-environment-map-filtering-for-image-based-lighting/

다루는 것은 Specular 부분

우선, Mipmap filter 을 사용한 128x128 nvidia 750m 의 성능

Time spent on the CPU Prefilter cubemap: 12.181185 ms
Time spent on the GPU Prefilter cubemap: 176.252288 ms

Iris 6100 이 54 ms 라는데; 이게 먼일인지

mipmap filtering 을 끄면,

Time spent on the CPU Prefilter cubemap: 10.102123 ms
Time spent on the GPU Prefilter cubemap: 74.326080 ms

open GL은 안 익숙해서 각 면 하나씩 그리개 해서 그런가 좀 느리게 나왔다

화면의 구는 거의 유사하게 나오지만

Learning OpenGL에서 말했던 것 처럼 밝은 부분을 확대한 배경을 보면 반점이 보인다

256x256 0 번째 밉맵을 copy 할 경우 대략 91 ms 나온다; 으..

32 샘플로 줄이고 mipmap filtering 을 수행할 경우 10 ms 가 되는데

위에 것 처럼 오류가 보이기 시작한다

근대 왜케 느린겨 5배 느린 것 같은데

compute로 바꾸고 나니 8 ms 다 도대체 왜 느린거지?

우선 자잘한 버그 수정

roughness 0 일 때만 보이는 버그

roughness == 0 일때 mip 0이 선택되도록 예외처리함

그리고 mip 1이 보통 보이는 결과의 mip3과 비슷했는데 bias 를 1로 주니 비슷해졌음

어디서 나온지 모르는 패턴;

cube map을 그냥 쓰니 seamless filtering이 적용가능해 졌다.

Workgroup size를 8~16으로 늘리니 2 ms 까지 내려옴

Time spent on the CPU Prefilter cubemap: 1.535977 ms
Time spent on the GPU Prefilter cubemap: 2.380640 ms

CPU는 shader 컴파일도 하고 있으니 빼고

최적화 부분을 roughness에 따라 shared memory로 계산하게

하니 대충 0.9 ms 가 찍힌다

Ensure certain number of samples have weight > 0

결과는 괜찮은 것 같은데; CPU에서 확인하고 upload 해줘야 하는 식으로 바꿔야 한다

roughness가 높을 때 ndotl을 통과 못하는 것 때문이라는데

Varying the sample count per mip level

위에 것과 연관해서 결국 1, 8, 32, 64, 128, 128 이런식

혹은 1, 8, 32, 32, 32, 32

영향이 큰건 mipmap이 큰 mip-level 1 이다 (0은 그냥 copy)

16 sample을 테스트 해보면

크게 확대한 배경에서 약간의 차이가 보인다

Different quasi-random sampling set

저자도 별로 차이 안난다고 해놨다만 ray tracing에선 많이쓴다

Hammersley 가 low count에서 별로라 하는 듯

코드 량을 볼때 이것 역시 cpu에서 돌려야 한다

http://graphics.pixar.com/library/MultiJitteredSampling/paper.pdf

거의 유사한데 16 sample 을 버티고 그런건 아님

Primary direction lookup

아래와 같은 이유로 인해 이걸 써야 한단다

Our proposed model poorly captures the correct behaviour for 
dielectric materials at low view angles. 
This is because the actual lobe only “emerges” at a certain angle

결과가 여러 곳에 영향을 끼친다

'Game > Graphics' 카테고리의 다른 글

Light Probe Interpolation  (0) 2018.02.12
Compute Shader memory sync  (0) 2018.02.12
D,G,F  (0) 2018.01.29
Roughness and metalic  (0) 2018.01.25
IBL (3)  (0) 2018.01.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크