본문 바로가기
Shader

_LightColor0 란 무엇인가요?

by 대마왕J 2017. 4. 13.

Q: 교수님교수님 _LightColor0 라는 변수가 현재 씬에서 존재하는 light중 가장 밝은 라이트의 색상을 가져오는 변수가 맞나요? 그렇게 이해했는데 틀린점이 있나요????????????????????


A: https://forum.unity3d.com/threads/cg-shader-light-color.151535/

유니티 렌더링 엔지니어[각주:1]인 Ares의 답변을 보면....


포워드 렌더링 픽셀라이트 상태에서 0번은 일단 디렉셔널 라이트를 의미하고, 그 다음 4개까지의 픽셀라이트는 역시 같게 돌아가면서 계산되고, 버텍스 라이팅 상태일때에는 밝은 것부터 연산되는데, 이걸 간단하게 말해서 '밝은 것부터 연산된다' 라고 한거임



엄밀히 따지면 픽셀라이팅은 메인 디렉셔널 라이트를 먼저 연산하고, 나머지 픽셀라이트들을 연산(포워드 상태에서 최대 추가 3개) 한 다음 밝은것별로 소팅해서 버텍스라이트를 연산함. 픽셀라이트 소팅에 대해서 언급되어 있진 않지만, 보통 메인 디렉셔널 라이트가 가장 밝기 때문에 이 내용을 학생들에게 간편하게 가르쳐 줄때에는 밝은 순서대로 그린다 라고 해도 일단 개념상으로 대충 먹고 들어감. 정확하게 말하면 중요한 라이트 순서대로(?) 라고 말하는게 좀 더 정확할 것임.


즉 셰이더 패스는 크게 3가지로 돈다고 할 수 있는데, 우리가 서피스 셰이더를 쓰면 일단 포워드 베이스 라는 코드가 생성되어서 그걸로 돌고, 두 번째 라이트 부터는 포워드 애드라는 셰이더 코드가 생성되어 돌고, 마지막으로 버텍스 패스가 돔.


버텍스 라이트 패스에 SH 라이트 패스가 추가되어 있던걸로 아는데 잘 기억이 안나네 . 이게 포워드 상태이고, 우리가 짠 커스텀 라이트는 포워드 전용임.


이걸 '가장 밝은 순서대로' 라고 퉁친건 즉 유니티에서의 렌더링 패스 순서 때문임. 어차피 라이트가 여러 개라면, 밝은 순서대로 픽셀라이트로 정렬되거든. 그러니 밝은 순대로 계산된다는게 맞음.


https://docs.unity3d.com/kr/current/Manual/RenderTech-ForwardRendering.html




본래 내용이 이런 정도.



  1. 지금은 아니라는듯 ㅠ [본문으로]
반응형

'Shader ' 카테고리의 다른 글

벽 뒤에 가려질때 라인 나오는 셰이더 (Hidden line shader)  (29) 2017.08.24
스탠실 버퍼 사용하기  (3) 2017.08.24
lerp 공식  (2) 2017.03.26
Radial blur for Unity  (0) 2016.11.08
Rotation UV  (0) 2016.10.23

댓글