블로그 이미지
한국IT전문학교 게임프로그래밍 2018년 졸업생 / 배우고 익히고 정리하는 곳 무명의 공룡

카테고리

분류 전체보기 (133)
Unity (5)
AR / VR (8)
홀로렌즈2 (2)
Unity 3D 액션 게임 제작 (2)
정리 (9)
소소한 배움 (6)
그외 (7)
비공개 (56)
--이전 프로젝트들-- (0)
Tree-sha (팀 3D) (9)
Icicle Game (2D) (19)
MMD RPG (3D) (9)
Total
Today
Yesterday

달력

« » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

공지사항

후처리 외곽선 도전중

그외 / 2018. 4. 21. 21:55
갑자기 삘이 와서 이번주 내내 붙잡았던 후처리 외곽선입니다.

문제는 5일동안 붙잡고 있었음에도 최종 목표에는 도달하지 못했다는게...



잠깐 후처리 외곽선을 쓰고싶어하는 이유에 대해 설명하자면 카툰 느낌을 내는 좋은 방법 중 하나가 외곽선이라고 생각합니다.


소울워커가 대표적이지요.


이런식으로 캐릭터의 테두리에 검은 선이 칠해져있습니다.



보통 외곽선은 일반적으로 정점을 노말 방향으로 약간씩 늘려 그것을 단색으로 바꾼다음 물체 뒤쪽에 렌더링 하는 방식을 사용하는데 이 경우 모서리가 정상적으로 그려지지 않는 단점이 있습니다.


유니티 아웃라인에 대한 이미지 검색결과

이런식으로요. 캐릭터의 경우엔 머리카락에서 이런 증상을 볼 수 있습니다.



그래서 두번째 방법으로 그냥 통째로 사이즈를 조금 늘려 단색으로 물체 뒤쪽에 렌더링 하는 방식이 있습니다.

하지만 이것도 문제가 있죠. 중점을 기준으로 늘어나기에 더 긴 방향의 외곽선이 더 두꺼워진다는겁니다.


unity smooth outline shader에 대한 이미지 검색결과

이렇게요.


이 문제가 너무 커서 사실상 두번째 방법의 외곽선은 쓰는데를 거의 보지 못했습니다. 


그래서 보통 첫번째 방법을 많이 씁니다. 쉽고, 모델링을 제작할 때 모서리를 최대한 완화시키면 거의 보이지 않을 뿐더러 오브젝트의 폴리곤이 조금만 많아져도 잘 눈에 띄지 않거든요.



하지만 이건 어디까지나 그나마 이게 나을뿐이지 최선책은 아닙니다.


그리고 추가로 이렇게 하면 외곽선도 사실상 캐릭터의 일부같은 느낌이 되어 카메라가 접근해 캐릭터가 크게 보이게 되면 외곽선도 같이 커보이게 되는 문제도 있습니다.


이를 해결하기 위한 방법으로 후처리 이미지를 활용한 외곽선 그리기가 있습니다.


이미 렌더링 된 화면에서 깊이와 노말을 이용해 차이가 있는 곳에 외곽선을 그리는 방식인데 이미 렌더링 된 화면에서 외곽선을 그리기에 모서리가 그려지지 않는 문제도 발생하지 않습니다.


그래서 보이기에는 아마 가장 이상적인 외곽선이 아닐까 싶습니다만 단점이 아주 없지는 않습니다.


후처리는 꽤나 비용이 비싼 기능이라는 점이지요.



아무튼 이전에도 도전했었지만 당시에는 이론만 알고 그에 필요한 준비물을 구하는 방법을 몰라 못했는데 알아내서 해봤습니다.


후처리 외곽선에 필요한 준비물은  깊이와 노말을 후처리 이미지에서 가져와야 하는데 유니티 카메라 옵션중에 

DepthTextureMode라는 깊이와 노말 텍스처를 따로 빼주는 모드가 있는 것을 알아내었습니다.


원본 화면입니다.


쉐이더는 컴파일을 매번 다시 해줄 필요가 없어서 변경점을 바로바로 볼 수 있어 좋더군요. 일시정지 상태로 둬도 쉐이더가 변경되면 적용됩니다.


잘 안 보이지만 깊이 텍스처입니다. 거리가 있어서 육안으로는 진하기가 비슷해 보이는데 가까이서 보면 깊이만큼 확실히 색 차이가 납니다.


이렇게 가까우면 값이 변화가 크고 멀수록 값의 변화가 작아 쉐이더에서는 서로 비교할때 항상 자신의 현재값의 비율로 비교해야 합니다.


노말 텍스처입니다. xyz 가 rgb로 치환되어 있어 이렇게 보입니다. 위 화면은 노말에 * 2 - 1을 해주어 범위를 0~1에서 -1~1이 되도록 만들어주었습니다.


깊이 텍스처를 이용해 외곽선을 만들었습니다. 

외곽선은 자신의 8방향을 전부 비교해서 일정 값 이상 차이가 나면 더 진해지도록 하여 안티에일리어싱 효과가 나도록 했습니다.


거리가 있어서 현재 옷주름 같은 부분은 외곽선이 그려지지 않았지만 가까워지면 그려집니다.

깊이 텍스처만을 이용한 외곽선의 문제점은 바닥이나 박스 옆면에서 볼 수 있듯 깊이가 확 깊어지기만 해도 외곽선을 그려버립니다.

이 깊이 비교를 완화시키면 옷주름 같은 약한 깊이 차이를 가진 부분도 외곽선을 그리지 않게 되버립니다.


노말 텍스처를 이용해 만든 외곽선입니다.

깊이 텍스처를 이용한 외곽선의 문제는 나타나지 않지만 박스의 모서리도 그려지고 캐릭터들에게 많은 외곽선이 들어갑니다.

가장 큰 문제는 캡슐과 박스부분에서 비슷한 노말을 가진 부분에 외곽선이 그려지지 않고 있네요.



제가 듣기로는 이 두 외곽선의 장점만을 합치면 이상적인 후처리 외곽선이 된다고 하여 여기까지 왔고 이제 한 발자국 남은거 같은데 생각만큼 진행되지 않네요. 아예 막힌건 아닌데...


해결되면 정말 기쁠거같네요.



'그외' 카테고리의 다른 글

오산 VR방 VR레이존  (2) 2018.05.13
Seoul VR∙AR EXPO 2018 후기(사진 스압)  (0) 2018.04.21
국비 학원에서 만든 콘솔 슈팅게임  (0) 2018.03.23
포트폴리오  (0) 2018.01.11
(유니티3D)최적화 공부와 프로파일러  (1) 2017.12.09
Posted by 무명의 공룡
, |