저번에 Hybrid 님이 지적해 주셔서 2pass로 만들었던 지난번 쉐이더를 1pass로 전환하는 작업을 오늘 해 봤습니다만.
현실적인 문제가 발생!!!
저번에도 이 문제가 발생했음에도 불구하고 에이 뭐야 안되잖아
라고 넘어가서 2pass 작업을 했던건데,
다시 작업을 해 보니까 무슨 문제였던지 정확해 지더군요 .
문제는 저기 천의 휘어지는 윗 부분이 마치 그림자라도 진 듯 검게 되는 현상이었습니다.
이건 아무리 봐도 뒷면이 앞면에 그려지는 현상이었죠.
이론상으로는 90도가 넘어가면 뒷면처리가 되고, 90도가 넘어가면 앞면에서는 보이지 않는게 당연합니다만,
Normal은 face 에 귀속된게 아니라 vertex에 귀속된지라 정확도를 믿을 수 없다는 것이었습니다.
즉 원칙적으로 오른쪽 그림의 좌측의 Normal이 이론적으로 정상적인 Normal이지만,
실제 작업할 때에는 그래픽디자이너들이 Scale을 사용하기도 하고, Vertex 직접 조정도 사용하기도 하고 , 각종 Max의 Modifier를 적용하다보면 이게 미묘하게 틀어져 오른쪽 그림의 오른쪽에 있는 Normal처러 될 수도 있다는 것입니다.
그러다보면 저렇게 바깥쪽으로 틀어져 있는 경우도 생기고, 가끔은 좌우정렬도 맞지 않습니다.


그래서 이렇게 되면, 면 자체는 시선과 90도가 되지 않았는데도 normal은 90도가 넘어가 버리는 현상이 발생되게 되고, 그래서 나타나는 현상의 위의 검은 줄 이미지입니다.
Normal을 재정렬해주는 기능이 있다면 그걸 적용하면 되겠습니다만 일단 못찾겠.. (...)
어쨌거나 그래서 1pass작업은 실패입니다.
좌측 그림이 위 이미지의 Normal 입니다. 확실히 넘어갈만 하네요 ...
결론적으로, 깔끔하게 2pass를 쓰는게 확실하겠습니다.
그래픽 디자이너에게 이걸 다 맞춰달라고 하는건 확실히 무리!
작업하면서 일일히 Normal까지 신경쓰면서 만드는 것은 불가능 한데다가, 정렬도 간편하지 않습니다.
그러므로 2pass 처리를 하는 것이 가장 효율적이라는 결론을 내리게 되었습니다.
현실적인 문제가 발생!!!
저번에도 이 문제가 발생했음에도 불구하고 에이 뭐야 안되잖아
라고 넘어가서 2pass 작업을 했던건데,
다시 작업을 해 보니까 무슨 문제였던지 정확해 지더군요 .

이건 아무리 봐도 뒷면이 앞면에 그려지는 현상이었죠.
이론상으로는 90도가 넘어가면 뒷면처리가 되고, 90도가 넘어가면 앞면에서는 보이지 않는게 당연합니다만,
Normal은 face 에 귀속된게 아니라 vertex에 귀속된지라 정확도를 믿을 수 없다는 것이었습니다.
즉 원칙적으로 오른쪽 그림의 좌측의 Normal이 이론적으로 정상적인 Normal이지만,
실제 작업할 때에는 그래픽디자이너들이 Scale을 사용하기도 하고, Vertex 직접 조정도 사용하기도 하고 , 각종 Max의 Modifier를 적용하다보면 이게 미묘하게 틀어져 오른쪽 그림의 오른쪽에 있는 Normal처러 될 수도 있다는 것입니다.
그러다보면 저렇게 바깥쪽으로 틀어져 있는 경우도 생기고, 가끔은 좌우정렬도 맞지 않습니다.


그래서 이렇게 되면, 면 자체는 시선과 90도가 되지 않았는데도 normal은 90도가 넘어가 버리는 현상이 발생되게 되고, 그래서 나타나는 현상의 위의 검은 줄 이미지입니다.
Normal을 재정렬해주는 기능이 있다면 그걸 적용하면 되겠습니다만 일단 못찾겠.. (...)
어쨌거나 그래서 1pass작업은 실패입니다.

좌측 그림이 위 이미지의 Normal 입니다. 확실히 넘어갈만 하네요 ...
결론적으로, 깔끔하게 2pass를 쓰는게 확실하겠습니다.
그래픽 디자이너에게 이걸 다 맞춰달라고 하는건 확실히 무리!
작업하면서 일일히 Normal까지 신경쓰면서 만드는 것은 불가능 한데다가, 정렬도 간편하지 않습니다.
그러므로 2pass 처리를 하는 것이 가장 효율적이라는 결론을 내리게 되었습니다.
덧글
그런데 노말이야 원래 오차가 있긴 하지만, 앞면이 뒷면이 될정도로 심각하게 차이가 나는 경우도 있군요;;
제 경우는 저장된 normal 을 사용하지 않고(예를 들어 3ds 포멧 같은 경우는 normal 이 저장되어 있지 않죠) 프로그램에서 모델을 읽어올 때 주변 vertex 정보를 통해 normal 을 계산하기 때문에 위와 같은 오차는 생긴적이 없었네요.
그런데 저렇게 뒤집힌 노말은 꼭 이 렌더링이 아니라 다른 곳에서도 문제가 생길법 하긴 한데.. 지금은 딱히 생각나는건 없군요. 흐음~~
확실히 저도 그래픽 디자이너지만 작업할때 저걸 일일히 신경쓰고 작업하지는 못하지요 :)
사실 지금처럼 부각되는 특이한 경우가 아니라면 어느 정도 오차는 그냥 눈속임으로 넘어갈 수도 있을거라고 생각되네요