아예 모르는 사람까지 알아듣기 쉽게 설명하게 써보긴 할껀데 세부적으로 다 설명하려면 파이프라인까지 설명해줘야 하는데 그러면 이해도 안갈테고 설명도 힘드니까 만든 예시로 설명함
먼저 유니티 docs의 그래픽 최적화 부분에 보면
GPU: Optimizing model geometry
There are two basic rules for optimizing the geometry of a model:
- Don’t use any more triangles than necessary
- Try to keep the number of UV mapping seams and hard edges (doubled-up vertices) as low as possible
Note that the actual number of vertices that graphics hardware has to process is usually not the same as the number reported by a 3D application. Modeling applications usually display the number of distinct corner points that make up a model (known as the geometric vertex count). For a graphics card, however, some geometric vertices need to be split into two or more logical vertices for rendering purposes. A vertex must be split if it has multiple normals, UV coordinates or vertex colors. Consequently, the vertex count in Unity is usually higher than the count given by the 3D application.
While the amount of geometry in the models is mostly relevant for the GPU, some features in Unity also process models on the CPU (for example, mesh skinning).
라고 되어있음.
"Don’t use any more triangles than necessary"
필요 이상으로 삼각형(폴리곤으로 알아들으면 편함)을 쓰지 말라는 소리지
왜냐하면 그래픽카드에서 처리해야하는 블렌더나 쓸맥같은데서 말하는 폴리곤 수보다 더 많이 처리해야하는게 일반적임.
그리고 더 많이 처리해야 하는 이유는 여러 시각적 효과들이 폴리곤에 기반해서 추가로 처리되기 때문이야
왜나하면 우리는 평면 모니터 상을 보고있고
3d의 가상 공간을 만들어서 우리에게 보여주어야 하는데
3d공간상의 좌표를 알아야 모델을 그릴테고 3d공간상의 좌표에 기반해서 그려진 모델에다가 쉐이더 등등이 적용되기 때문에 그래픽 하드웨어에서 처리해야 하는 양은 3d 모델링 툴의 폴리곤 수 보다 많아지는거임.
간단한 테스트를 해봄
브얄챗에서 간접적으로 가장 많이 겪을 라이트와 폴리곤의 관계임
구체를 한 위치에 계속 생성해주게씀
다른거 하나 없이 메쉬랑 메쉬 렌더러, 좌표값,스텐다드 쉐이더 4개만 가지는 공을 계속해서 만들어줌.
tris를 보면 약460만개로 이루어져있음.
프레임도 160넘게 나오지
그런데 여기다가 vr챗 맵이라면 기본적으로 하나씩 끼고있는 리얼타임 라이트를 비춰보자
그림자와 같은 효과들 때문에 tris가 증가함은 물론이고 batches 등등 모든게 2배 이상으로 올라감.
특히 그림자 같은 경우에는 직접 연산을 해줘야 하기 때문에 성능이 많이 소요됨
그리고 그에 따라 프레임도 80선으로 반토막 나버림.
이게 라이트가 미치는 영향이고 내가 폴리곤의 영향이 크다고 한게 이런 이유임.
라이트든 쉐이더든 결국 폴리곤으로 이루어진 3d 물체에 기반해서 연산되고 보여지는거라 영향이 적을수가 없음
물론 최적화를 어떻게 하느냐에 따라 다르게 나올수가 있음
위와 같은 조건에서 그림자를 안받는 쉐이더를 써서
프레임을 1/2이상 올릴수도 있고
엄청나게 복잡한 쉐이더를 떡칠해서 프레임을 10분의 1수준까지 떨굴수도 있겠지.
즉 기본적으로 사람 눈에 보이도록 쉐이더를 가져다 붙이는 이상 그건 폴리곤을 기반으로 돌아가게 되는거야
내가 예전에 TA한테 물어봤다는 애가 쓴 글에다가
"약간 안맞는 비유긴 하지만 폴리곤 수 = 밥 의 양 , 쉐이더.메테리얼.라이트 등등 = 반찬이나 양념 소스 음료 등 으로 생각하면 쉬움.어떤 반찬이나 어떤 음료 어떤 소스를 곁들이냐에 따라 한사람이 2인분을 먹을수도 있고 1인분을 먹을수도 있고 한입떠먹고 뱉을수도 있는거지 "
위에서 말했지만 폴리곤은 기본이 되고 라이트와 같은것들이 니가 말하는 그 폴리곤들을 토대로 작동하기때문에 영향이 없는게 아니라 렌더링 성능에 매우 큰 영향이 있다고 보는게 맞음 단순히 브얄챗이 모델만 턱턱 놓여져 있고 라이트도 없고 주변 사물도 없고 네트워크 처리도 안하고 쉐이더도 저렴한 쉐이더도 통일되고 한게 아닌 이상은 그렇다. "
라고 한 이유가 이런것들 때문이야. 좋은 쉐이더를 쓰고 부드러운 메테리얼을 쓰고 하면 460만 폴리곤 짜리라도 첫번째짤처럼 잘 소화 해내겠만 쉐이더고 메테리얼이고 뭐고 생각없이 막 꼬라박으면 둘째짤처럼 프레임 반토막나고 난리나는거지
대표적인 예로 저 짤에다가 유니티 기본 제공 쉐이더중 하나인 color 쉐이더로 바꾸면
라이트가 비춰져도 이렇게 프레임이 쑦쑦 올라감.
그런데 생각없이 막 꼬라박는 애들이 보통이고 그래서 vr챗 운영진들도 폴리곤으로서 제한을 두는게 아닌가 싶음
결국 좋은의미든 나쁜의미든 폴리곤 수는 영향이 큰거지
그리고 폴리곤 수는 오직 모델만 놓인게 아닌 네트워크나 물리작용 캐릭터 컨트롤 등등 많은게 들어간 브얄챗에서는 다른 기능들로 성능을 잡아먹으니 위의 예제에서 460만과 같은 수치는 상대적인 수치로 봐주면 좋겠음
그리고 예외적으로 글 보니까 텍스쳐 언급이 있던데 텍스쳐는 폴리곤과 별 문제 없는건 맞음. 그래서 난 라이트나 쉐이더같은거만 언급하는겨
|