유니티 모바일에서 부하가 덜먹는 쓸만한 포스트프로세스 정리
모바일기기에서 부하가 덜먹는 쓸만한 포스트프로세스 정리
Bloom
설명
- Radius에 따라 Iteration되는 단계가 1~7단계까지(Pass number도 차이남)
- Color Only
- Multi pass
- Prefilter(1Pass), Uber(1Pass)
- DownSampling(2 ~ 8Pass), UpSampling(1 ~ 7Pass)
Performance
- CPU : 5~7ms
- GPU : Default(1.89ms), Expensive(2.82ms)
- Pass수에 비해 큰 차이는 없음.
- radius에 따라 Iteration 개수(Pass수) 조절가능
- Iteration이 늘더라도 RenderTarget의 Resolution은 1/4씩 줄어 Pass의 수에 비해 CPU, GPU에 부담이 적은편
FXAA(Fast Approximate Anti-Aliasing)
설명
- Pixel의 contrast를 이용하여 Edge를 찾아 Edge 부분만 적절히 보간해주는 방식
- NVIDIA에 의해 개발된 알고리즘
- Color Only
- 1Pass 알고리즘
- Preset의 Option에 따라 Sampling과 ALU의 수가 변화하며 성능 및 퍼포먼스에 영향
- Resolution에 영향을 받지만 Scene의 복잡도와는 별개
Perfomance
- CPU : 1Pass라 부하 거의 없음(1~2ms이내)
- GPU : Preset에 따라 퍼포먼스가 다름
- Extream Qulity(4.53ms), Default(4.78ms), Extream Performance(5.99ms)
- Preset으로 Sampling수 조절 가능
Chromatic Aberration
설명
- 스크린 공간의 UV값을 이용
- Single Pass
- Uber Shader에서 모두 처리됨.
Performance
- CPU : 1~2ms
- Pass가 적고 Depth, Normal이 필요하지않아 CPU는 적게 사용
- GPU : 2~4ms
- Intensity가 클수록 Sampling이 많아짐
Grain
설명
- 필름의 금속성 은에 의해 발생하는 광학 효과
- Color Grading은 툴에 의하여 LUT를 PreProcessing하여 사용하는 반면 UserLut은 LUT를 포토샵등으로 변화한 후 사용
- Multi Pass
- GenerateGrain(1Pass)
- Uber Shader에서 사용(1Pass)
Performance
- CPU : 1ms내외(거의 없음)
- GPU : 0.42ms(Colored Off) 1.16ms(Colored on)
- Colored를 On시 ALU 연산을 3배 더 사용
Color Grading & User Lut
설명
- LookupTexture를 이용하여 이미지의 컬러와 명도를 교정하는 과정
- Color Grading은 툴에 의하여 LUT를 PreProcessing하여 사용하는 반면 UserLut은 LUT를 포토샵등으로 변화한 후 사용
- Color Only
- Single Pass
- Uber Shader에서 모두 처리됨
Performance
- CPU : 거의 없음
- GPU : 1ms 이내
Vignette
설명
- 이미지의 중심에 포커를 맞추기위해 테두리를 어둡게 하는 효과
- 스크린 공간의 UV값을 이용
- Single Pass
- Uber Shader에서 모두 처리됨
Performance
- CPU : 거의 없음
- GPU : 1ms 미만
Post Processing Optimization전략
Performance가 아쉬운 상황이라면 꼭 필요한 PostProcessing만 사용
- SSR(Screen Space Reflection), AO(Ambient Occlusion), MotionBlur, TAA(Temporal Anti Aliasing), Chromatic Aberration등 비교적 무거운 PostProcessing의 사용 검토
- Bloom은 Performance가 어느정도 많이 먹으나 Radius를 조절하거나 Iteration시 추가적인 해상도 줄이기(Default: 1/4)를 시도해볼만 함.
- Color Grading은 비교적 가벼운 연산이므로 부담없이 사용
Post Processing을 완전 사용하지 않는다면 PostProcessingBehaviour를 disable하는 것이 좋음.
- Enable만 되더라도 Post Processing을 하기 위해 RT(Render Target)생성 및 Blit을 추가하게 됨.
CPU부하 줄이기
- MultiPass의 수를 줄이기
- Depth, DepthNormal을 사용하는 PostProcessing에 대하여 생각해볼 필요가 있음.
GPU부하 줄이기
- MultiPass의 수 줄이기
- Blit호출 감소로 렌더링 되는 Pixel의 수를 줄일 수 있음.
- Sampling 수 줄이기(Option)
- ALU연산 축소(Option)
- RenderTarget의 Resolution 줄이기
Power사용 줄이기
- 고정 프레임 사용
- CPU, GPU사용 줄이기(GPU가 특히 Power를 많이 차지함)
- Sampler 수를 줄여 Bandwidth