과제(숙제)

2022.09.30 과제

디지털 블리자드 2022. 10. 3. 00:50

 

- z fighting -
z-fighting 이란 두개의 폴리곤(primitive)이 유사한 z-depth값을 갖고있어 노이즈가 발생한것 처럼 깜박거리는 현상입니다.
폴리곤이 깨지거나 랜덤하게 겹쳐지게 되는 현상입니다.

 

이미지 출처 - https://3dgumshoe.com/maya-fixing-z-fighting/


이는 z-buffer알고리즘을 사용하는 3D그래픽스 시스템에서는 피할수없는 현상이며 프로그래머가 잘 판단해서 피해가는 것이 해결책입니다.

일반적으로 16,24,32 bits크기의 z-buffer를 사용하기 때문에, 값이 유한하기 때문에 발생할 수밖에 없습니다.

3차원 공간상에 두개이상의 폴리곤이 동일한 위치에 겹쳐있는 경우와 폴리곤이 서로 근접해있는 경우에 발생합니다.

near와 far plane간의 간격을 조절하면 대부분의 경우 이러한 현상을 회피할 수 있습니다.

카메라에 근접할 수록 z-depth값에 대한 가중치가 높아지기 때문에 주로 near plane 값을 카메라로부터 멀리 조절하면 됩니다.

출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=softcool&logNo=110025105010

 

- 알파테스트 -
알파테스트는 알파채널값이 얼마든간에, 알파값이 있으면 1, 없으면 0으로 판단하여 계산이 되므로 연산속도가 비교적 빠릅니다.
하지만 그만큼 퀄리티가 안좋아집니다.
그럼에도 불구하고 대부분의 게임에서는 이 알파테스트를 많이 사용합니다.
왜냐하면 게임에서 대부분 속도가 중요하기 때문입니다.
즉 반투명은 없다고 생각하면 됩니다.

출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=nh32001&logNo=150149211418

 

- 알파블렌딩 -
반투명의 유리가 수십장 겹쳐져 있어도 전부 보이는 상황 있습니다.
이럴때는 깊이 테스트를 해야 합니다.
그러면서 위치값을 재 정렬하고, 다시 찍으면서 모든 픽셀의 색상을 전부 계산해주어야 합니다.
그래서 연산이 느립니다.
대부분의 이펙트가 알파 블렌딩만 으로 처리되는 경우가 많으며 이때문에 게임에 부하를 주는 원인중 하나입니다.
그 외에도 반투명한 유리, 비치는 옷 등은 알파 블렌딩을 사용할 수 밖에 없습니다.

최적화하는 방법은 알파테스트를 통하여 최대한 알파블렌딩을 할 요소들을 줄여주는것이 좋습니다.

블렌딩 처리 전

출처 - http://eirenehue.egloos.com/969409

블렌딩 처리 후

출처 - http://eirenehue.egloos.com/969409



출처 : 
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=nh32001&logNo=150149211418
http://eirenehue.egloos.com/969409

 

- 알파소팅 -
실시간 렌더링에서 속도를 올리는 기법중에 가장 기본적인 기법중에 '알파소팅'이 있습니다. 
알파가 없는 오브젝트들은 화면 앞의 오브젝트부터 뒤에 있는 오브젝트 순으로 렌더링하는게 빠릅니다. 
이것은 화면 앞의 오브젝트를 렌더링하면 그 뒤에 가려진 오브젝트는 렌더링하지 않아도 되기 때문에 속도가 빨라지는 원리입니다. 
하지만 반투명, 투명 오브젝트는 위와 같이 앞에서부터 그리더라도 뒤에 있는 오브젝트가 그려져야 하기 때문에 위와 같이 처리할 수 없습니다.
그래서 반투명,투명 오브젝트는 반대로 뒤에서부터 그려야 합니다.
그래야 앞에 반투명 오브젝트를 그리더라도, 먼저 그려진 뒤의 오브젝트가 비춰서 보입니다.
이런 이유때문에 게임에서는 알파가 없는것들 따로 그리고, 알파가 있는것들을 따로 그립니다. 
이것을 '알파 소팅' 이라고 합니다. 
그래서 한 오브젝트에 투명한 마테리얼과 불투명한 마테리얼이 섞여 있으면, 그 오브젝트는 반투명 오브젝트들과 같이 렌더링 됩니다.
즉, 이런 경우엔 앞에서부터 렌더링하는 '최적화 효과'를 적용할 수 없기 때문에, 반투명 오브젝트가 많은 경우에는 렌더링 속도가 느려집니다.
그래서 불투명과 반투명 마테리얼을 분리해서 따로 렌더링하는것이 더 효율적입니다.

출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=agebreak&logNo=60123549628