일단 공유 시스템이 확정될때까지는 여기 올리기로 했으므로…
새 버전의 캐릭터 쉐이더입니다. 반드시 쉐이더 3.0 이상이 되어야만 작동합니다.
#pragma target 3.0 을 선언 안하고 작업하니까 arithmetic instruction limit 제한에 걸려 버리네요.
수식이 너무 많아서 2.0 에서는 처리하지 못한답니다 ㅎㅎㅎ
이 쉐이더는 지금까지 만들어진 쉐이더중 가장 고급 연산을 하고 있는 쉐이더입니다. 하지만 알파 블렌딩은 지원하고 있지 않기 때문에 이펙트 쉐이더보다는 가벼울지도 모르겠습니다 (ㅎㅎ)
반드시 캐릭터, 특히 주인공 캐릭터 용으로 사용해 주시기 바라겠습니다. 일단 몬스터나 NPC에도 사용하셔도 상관없지만, 만약 부하가 걸린다면 몬스터나 NPC 쉐이더는 따로 만들도록 하겠습니다. 즉 캐릭터에는 아직까진 무조건 사용하셔도 된다는…
장팟장 취향에 따라 SSS 나 하프 렘버트는 집어넣지 않았습니다. 노말이 죽는다고 별로 안 좋아해서 (…)
대신 노말이 잘 보일 수 있게끔 겜브리오 시절에 만들어 놓았던 “마모셋 스타일의 노말 처리” 기능이 들어가 있습니다.
덕분에 최종 쉐이더는 이런 모습이 되었습니다.
특징
기본으로 내장되어 있는 Bumped specular 쉐이더와 비교해 보겠습니다. 팔은 아닙니다 몸통만 비교해 주세요 :)

————————————————————————————
a: 기본적으로 화면 전체에 적용되는 Ambient Color는 계산량이 빠르지만 모델링의 가장 어두운 부분의 색상을 결정해 버리는 단점을 가지고 있습니다. 때문에 그늘이 진 곳에서는 열심히 노말맵을 만들었더라도 노말맵이 전혀 나타나지 않는 현상이 발견되어 집니다. 노말맵은 빛의 음영이 있어야 보이기 때문이지요.
때문에 제작된 쉐이더에서는 엠비언트 큐브를 통한 돔라이트 처리처럼 처리되었습니다. 물론 아주 간단한 2가지 색상의 반구조명 방식이며, 반구조명보다도 가벼운 방식입니다. 메뉴의 a 에서 노말 표현 부분의 윗 색상과 아래 부분 색상을 결정해 줄 수 있습니다.
결론적으로, 훨씬 입체감이 살아나며 노말맵이 잘 표현되는 쉐이더가 되었습니다.
b: 스페큘러는 빛의 추가 없이 2개로 나타납니다. 하나는 실제로 빛 방향과의 계산을 통한 기본적인 스페큘러이며, 또 하나는 카메라 방향을 바라보고 있는 스페큘러 (드라마나 방송 등을 보시면 볼 수 있는 카메라 위에 조명 달린 것을 상상하시면 됩니다 ) 를 흉내낸 카메라 입니다. 각각 빛의 범위와 색상을 따로 정할 수 있으며, 가죽 질감 등 광택이 있는 질감을 강조할때 무척 유용합니다.
물론 노말맵을 강조하는 효과도 있습니다.
c : 림 라이트 추가되어 있습니다 역광 효과등 배경과 분리되는 느낌을 나타낼때 무척 유용합니다.
캐릭터에 적용하는 것도 마찬가지의 효과를 볼 수 있습니다. 얼굴과 같이 Normal 표현이 상당히 적은 곳에는 그 효과가 확연하게 보이는 편은 아니긴 하지만…
a : 림라이트 적용되어 역광효과가 납니다. 블룸에 반응하여 저런 느낌이 되었습니다. 노말 적용으로 얼굴도 좀 더 부드럽게 나옵니다.
b: 화면 방향의 스페큘러 적용으로 입체감이 더 나오고 있습니다. 림라이트 때문에 입술이나 콧구멍 부분이 밝아지는 것은 단점에 속합니다.
c : 단순히 텍스쳐로만 표현했던 근육의 입체 부분이 보다 리얼하게 반응하며, 색상도 조정할 수 있습니다.
세부 사용법
기타 추가 사용법은 다음과 같습니다.
두둥.

<가슴에는 염색. 배에는 그라디언트, 몸에는 스페큘라 스페큘라 스페큘라…>
머리카락이나 복장 표현을 위한 알파 테스팅이 구현되어 있습니다 알파 블렌딩은 사용금지입니다!
알파 테스팅은 Cutout 바로 테스팅 되는 정도를 조절할 수 있습니다.
또한 염색과 스페큘러 마스킹이 적용되어 있습니다.
이 기능을 사용하실때의 주의점은 다음과 같습니다.
현재 사용되는 텍스쳐는 2장, Main Texture 와 Normal Texture 입니다.
Main texture는 일반적으로 제작하시면 되겠습니다만 Normal Texture를 제작하실때 주의하셔야 할 점이 있습니다.
- 절대로 텍스쳐를 Normal map으로 변환시키지 마세요.
엔진 자체적으로는 데이터를 줄이기 위해 텍스쳐를 Normalmap으로 선택하면, 노말 텍스쳐를 인식해서 그레이 스케일의 1bit 이미지로 변환시켜 버립니다. 텍스쳐는 그냥 텍스쳐 모드로 사용해 주세요

스페큘러 마스크는 노말맵의 R,G,B 에서 B 채널입니다. 흰색은 스페큘러가 나타나는 부분이고, 검은색은 스페큘러가 나타나지 않는 부분입니다.

스페큘러 2개는 각각 색상과 넓이를 따로 조절할 수 있게 되어 있습니다.염색은 노말맵의 A 채널입니다만, 특이하게도 흑백이 반대로 되어 있습니다!!!!!!!!!!
이 점을 주의해야 하는데, 이렇게 제작한 이유는 염색이 필요 없는 캐릭터의 경우 알파 채널을 만들지 않으면 자연스럽게 알파는 흰색으로 인식하기 때문입니다. 즉 염색이 필요 없는 캐릭터는 그냥 알파 채널을 만들지 않아도 되게끔, 이렇게 제작되었습니다.
당연하게도 알파 채널의 검은색 강도에 따라 염색의 적용 강도도 결정되며, 색상도 변하게 할 수 있습니다.
염색은 밝게도 어둡게도 들어갈 수 있으며, 이전에 제작된 염색보다 색상이 강하게 들어갑니다.
그러므로 초기값은 회색 (128,128,128) 이며, 염색 칼라를 회색으로 하면 염색이 보이지 않습니다.


디퍼드 렌더링 / 포워드 렌더링
유니티 엔진에는 두 가지의 렌더링 방식이 공존하고 있습니다.
빛 표현을 무제한이라 해도 좋을 만큼 자유스럽게 할 수 있는 대신 처리 제약과 기본적 시스템 부하가 따르는 디퍼드 렌더링,
상대적으로 가볍고 처리를 자유롭게 할 수 있는 대신 빛 처리가 추가로 들어가면 굉장히 무거워지는 포워드 렌더링.
옵션에서 판타스틱까지 올라가면 디퍼드 렌더링이 가동되며, 그 이하 옵션으로 조정되면 포워드 렌더링으로 돌아갑니다.
지금 이 쉐이더도 두 가지 렌더링에 모두 대응할 수 있도록 제작되어 있지만, 디퍼드 렌더링의 단점인 처리 제약때문에 몇 가지의 기능이 제한됩니다. 아래 제약 외에는 모두 동일합니다.
림라이트가 생기지 않습니다.
뷰 디렉션을 받지 않는 렌더러 특성상 림라이트 처리가 힘들어집니다. 추후 UI (선택) 등을 위해서는 2D에서 외각을 추출하는 방식을 따로 개발해야 합니다. (개발중입니다)두 번째 스페큘러가 생기지 않습니다.
스페큘러 라이트가 계산되어 넘어오기 때문에, 또 하나의 스페큘러를 계산하기 불가능해 집니다. 이런 경우에는 라이트를 하나 더 추가해 주면 되겠습니다.스페큘러 표현이 달라집니다.
스페큘러가 대부분 계산된채 넘어오기 때문에 넓이 조절이 달라집니다. 전체적으로 스페큘러가 좁아지게 됩니다.

추후 작업 / 수정내역 :
- 메탈 질감 쉐이더를 추가해야 할 듯 합니다. 금속 재질을 표현하는 방법이 구현되어 있지 않습니다.
- 알파 테스팅 작업시 Z 버퍼 문제가 디퍼드에서만 발생합니다. 순호스승님이 봐주시기로 되어 있습니다.
- 노말 연결부분에 이음새 (seam) 이 생깁니다. 이 부분도 순호스승님이 봐주시고 계십니다.