Pixel Light Count 설정은 정확히 무엇인가?


다들 Pixel Light Count 세팅을 높게 잡는게 좋다는거는 아실겁니다.

그럼에도 이건 정확히 무엇이고 어떻게 작동하는가에 대해 써보려 합니다.

당연히 높게 잡으면 장땡 아닌가? 하실수 있을 겁니다.

아닌 이유는 끝까지 가면 이해하실수 있게 됩니다.



아무것도 없는 씬에 Look 하나만 불러왔습니다. Pixel Light Count 는 0인 상태입니다.


광원이 없는데 왜 캐릭이 보이는가? 이건 Scene 자체의 Skybox 광원때문입니다.

기본값이 0.10으로 되어있습니다. 0으로 낮춰주겠습니다.


이제는 아무것도 보이지 않습니다. 여기에 Invisible Light 하나를 던져주겠습니다.


역시 찰흙. 광원 효과를 보일수 있도록 뒤에 Cube 하나도 집어넣었습니다.


Render Mode를 Auto에서 ForcePixel로 바꿔주면 예뻐보이기 시작합니다. Pixel Light Count 설정은 여전히 0인 상태입니다.

또 한가지 중요한 사실은 캐릭 뒤의 Cube에 그림자가 진다는 것이죠.

Render Mode를 ForceVertex로 바꿔주면 다시 찰흙으로 돌아갑니다. Pixel Light Count 설정을 아무리 높여도 마찬가지입니다.

Pixel Light는 vector 연산이 적용되어서 그림자가 집니다.

즉, 광원에서 목적지까지 선으로 이어서 닿는 물체가 있다면 그림자가 지는 방식의 연산을 합니다.

그렇지만 ForceVertex 에 음영이 없는거는 아닌데? 그렇지만 그림자는 왜 지지 않는가?

이는 (본인 추측임) 연산 방식이 광원에서 목적지까지 선으로 잇고 vertex mesh 와의 각도로 음영 연산을 하는 것 같습니다. 즉, 광원을 똑바로 바라보면 더 밝게 렌더링 되는 방식인것 같다 이거죠.




자 그러면 여기에서 Pixel Light Count 세팅이 정확히 무엇인지 알아보도록 합시다. 뱀헙 오피셜로는 이렇다고 합니다.


영어 해석하면서 추가 설명하자면....

현 버전인 1.X 에서는 일단 global illumination 이라는 개념이 존재합니다. 이는 Unity 엔진 맘대로 4개까지의 광원이 모델의 점 (vertex)을 shader 방식으로 밝힙니다. 이 조명 방식은 끌 수가 없는데 왜냐하면 연산이 굉장히 빨라서 꺼도 의미가 없기 때문입니다. 일단 global illumination 연산이 끝나면 이제 Pixel Light Count 세팅이 적용됩니다.

Pixel Light Count 갯수만큼의 (또는 광원 최대 갯수만큼의) 연산 레이어가 global illumination 에서 계산된 shader 위에 또 적용됩니다. 그런데 이게 계산해야 되는게 많아서 프레임이 떨어지는 원인이 될 수 있는거죠.

ForcePixel이 적용된 광원은 Pixel Light Count세팅과는 별개로 무조건 이 연산이 적용됩니다. 반대로 ForceVertex가 적용된 광원은 global illumination 연산 적용만 됩니다.



그렇다면 Pixel Light Count를 무조건 높인다고 좋지 않은 예를 생각해 보죠. 큰 맵을 자연스럽게 밝히기 위해 Range 를 낮게 잡은 Point Invisible Light를 여러개 뿌려놓았을 때가 좋은 예가 되겠습니다. 큰 맵은 밝히기 좋은 방법은 Directional Light를 사용하는 방법이 있기는 합니다만 그러면 캐릭에도 광원이 강하게 적용되기 때문에 Subscene 에 광원을 넣어놓고 불러오는 방식이면 많이 불편합니다. 반대로 광원을 여러개 뿌려놓으면 프레임이 떨어지게 되죠. 이런 경우에는 맵 밝히는 광원들은 적절하게 ForceVertex 로 바꿔주고 캐릭 주변에서만 ForcePixel 광원을 사용해주는게 최적입니다. 단순히 Pixel Light Count를 올리고 모든 광원을 Auto로 놓을경우 캐릭 광원이 아닌 다른 광원들이 ForcePixel 방식으로 연산될 수 있을 뿐 아니라 Pixel Light Count는 6까지밖에 올릴수 없기 때문입니다.


또 다른 예로는 후광은 Force Vertex로 처리해도 그럭저럭 괜찮기 때문에 프레임을 약간 얻을 수 있다 정도 되겠습니다.



하지만 2.0 버전 이후로는 HDRP로 바뀌면서 전혀 상관 없을 예정...