어제 스터디하다가 이상한 결과 발견
회색 더하기 회색이 흰색이 아냐?!?!
곱하기 (multiply) 는 잘 모르겠으니 그렇다 쳐도
더하기(add) 의 결과물은 사뭇 놀랄 지경. 회색 (0.5) + 회색 (0.5) 가 흰색(1.0) 이 아니니까요.
이거.. 전형적인 감마쪽 문제인데...
설마.. 그냥 내부에서 색상 노드를 만들었는데 저걸 sRGB 영역인걸로 인식하는건가?!?!?
그래서 이렇게 같은 내용을 수치로 만들어 봤더니
... 흰색이 나옴 ...
히이이익 야 이거 맞나본데?!??!
그래서 '아직 정식 문서화도 안된 깃허브 문서' 를 열어서 확인을 해봤더니 1
아아아아아아아아악
감마스페이스일때는 그냥 float4 출력이고
리니어 스페이스일때에는 sRGBtoLinear 함수를 RGB만 거치게 되어 있어 !!!! 2
즉 이렇게 두 개가 다른 이유가, 칼라는 이미 sRGB 영역이라고 인식해서 리니어로 변환하니 어두워 진거고, 어두워 진걸 연산하니 결과까지도 어두워진거란 말씀...!!!! (이해가 안가는 분은 감마가 어디감마 참고하시길)
https://chulin28ho.tistory.com/477
어쨌거나 이해가 안되는게, 인터널에서 칼라를 만들면 그걸 왜 sRGB로 인식하는 건가요?!?!? 그러니까 저렇게 나오지...
그래서 그럼 이 칼라가 sRGB 가 아니고 리니어로 인식하게 만들려면... 뭐 RGB에 0.45 제곱해주면 되겠지만 (감마 2.2 상태라면)
혹시 노드로 구현되어 있지 않나 싶어 찾아봤더니
역시 Colorspace Conversion(칼라공간 변환) 노드가..!!!!
그래서 위 처럼 일단 칼라 공간 변환을 해 주고 (Linear -> RGB로 ) 연산하니까 이제 알맞은 결과가 나왔네요! 3
즉 정리하면 색상을만든다 (sRGB-> 리니어 변환)
그리고 그걸 다시 sRGB 변환을 해줘서 원래로 돌린다 (리니어 -> sRGB)
그리고 그걸 연산한다는 아주 귀찮은 짓을 해줘야 한다는 것을 알게 되었습니다 끄응 ... 아니 이게 왜 ... 끄응...
대충 이렇게 만든 이유를 유추해 보자면,
이게 가능하니까 그러는 것 같은데 말이죠
이렇게 블랙보드로 빼서 properties화 시켜 놓으면,
아티스트가 이걸 다루는건 sRGB 개념으로 다룰 테니까 ... 라는 느낌적인 느낌인 것 같은데
아니 이걸 그렇다고 이렇게 할 필요가 있나?...???
'Shader ' 카테고리의 다른 글
유니티 셰이더 그래프(Unity shadergraph) 에서 버텍스 스트림 셰이더 (vertex stream shader) 가 적용된 이펙트 셰이더 만들기 1 (0) | 2019.12.31 |
---|---|
유니티 셰이더 그래프(Unity shadergraph) Constant 노드 (0) | 2019.12.29 |
유니티 셰이더 그래프 ( Unity Shadergraph): 카메라가 가까이 왔을때 부드럽게 사라지기 (0) | 2019.12.25 |
ShaderGraph 에서 LightDirection 가져오기 (4) | 2019.12.23 |
LWRP(URP) 에서 굴절(Refraction) 만들기 (13) | 2019.10.28 |
댓글