쉐이더들은 일반적으로 높은 기술을 사용할수록 호환성이 떨어지고, 더 느리게 됩니다.
때로는 치명적인 기술이 사용된 쉐이더를 사용하게 되면 퍼포먼스에 심각한 영향을 끼칠 수 있게 되는데요.
쉐이더를 알뜰하게 쇼핑(?) 하는 것도 중요한 기술입니다.
꼭 필요한 기능만 들어 있는 걸로, 같은 기능이면 최대한 저렴한 놈으로 골라서 쓰는 거지요.
하지만 수많은 쉐이더가 있고, 어떤 것이 어느 정도 무거운지 그래픽 디자이너가 알기가 힘든 것이 사실입니다.
그래서 일단 그래픽 디자이너 입장에서 보기 편하게끔 정리를 해 보았습니다.
일단 삼품은 쉐이더 2.0 기반인데다가 폴리곤도 상당히 적게 쓰기 때문에 고급의 픽셀 라이팅을 쓰는것은 그다지 효율적이지 않습니다 버텍스 라이팅을 쓰는 쪽이 훨씬 퍼포먼스에 좋고, 픽셀라이팅을 써도 그렇게 효과가 좋아지지 않지요.
(사실 2.0 이하도 지원할 수 있을 것 같다고 생각하고 있습니다만… 지형 쉐이더 때문에 곤란할 듯 합니다.지형 멀티 블렌딩 문제가…)
* 이 쉐이더들은 2011년 2월 14일 올라온 빌트-인 쉐이더를 기반으로 하고 있습니다. 계속 바뀌고 있는 관계로 이전의 쉐이더나 이후의 쉐이더와는 약간씩 다를 수도 있음을 밝힙니다.
1g 짜리 쉐이더들 : 아주 가볍고 호환성 높은 쉐이더. 되도록이면 마음껏 사용해 주세요.
Diffuse Fast : 분명 가벼운 쉐이더라고 나와 있긴 합니다만.. 막상 소스를 보니 유니티 3.x 대에서는 아무 일도 하지 않고 , 그냥 VertexLit로 쉐이더 설정값을 넘겨주는 역할만 합니다! 하지만 분명 가장 가벼운 쉐이더임에는 틀림 없습니다.
버텍스 라이팅으로 작동하는 것이 특징입니다. 알파가 없는 일반 오브젝트에 사용하세요.
Diffuse : 그 다음으로 가벼운 쉐이더. 픽셀라이팅으로 Diffuse Fast 보다 더 정밀한 라이팅을 보여줍니다. 알파 없는, 일반 오브젝트에 사용하세요
Transparent/Cutout/Diffuse : Diffuse 만큼 가볍습니다만, 알파 테스팅을 사용할 수 있다는게 다릅니다. 알파 채널이 필요한 일반 오브젝트에 사용해 주세요.
VertexLit : 버텍스 라이트로 가벼우며, Specular와 Emissive 칼라까지 표현가능한 다재다능한 쉐이더입니다. 알파는 사용할 수 없습니다.
Transparent/Cutout/VertexLit : 버텍스 라이트를 사용하여 가벼우며, 알파 테스팅 연산이 가능합니다. 알파가 있으면 이걸 사용하시기 바랍니다.
2g 짤 쉐이더들 : 1g 쉐이더들만큼 가벼운 쉐이더는 아닙니다만, 2g 대까지의 쉐이더는 사실 굉장히 가볍기 때문에 사용하는데 그다지 부담을 크게 가지지 않으셔도 됩니다. 1g은 ‘가벼운’ 쉐이더고 2g은 ‘가볍지만 일반적인’ 쉐이더의 느낌.
Diffuse Detail : Diffuse 와 기본적으로 같지만, 또 한장의 detail 텍스쳐를 diffuse 텍스쳐에 ‘곱해’ 줍니다. 포토샵으로 말하면 멀티플라이 옵션을 적용시킨 것과 같달까요. 원래 디테일 부분에 노이즈 텍스쳐를 주고 타일링을 잔뜩 줘서, 가까이 카메라가 접근했을때 디테일 텍스쳐가 뿌옇게 보이는 것을 방지하고자 만든 쉐이더입니다만, 좋으실대로 사용해도 됩니다. 알파 지원 안됩니다.
Specular : 스페큘러가 지원되는 가장 가벼운 쉐이더입니다. 반짝반짝대는 물체가 필요하실때 사용하세요. 디퓨즈맵의 알파 채널이 스페큘러 마스크로 사용되므로, 알파는 사용할 수 없습니다.
Self-Illumin/VertexLit : Self-Illumin/Diffuse 와 같게 적동하지만, 라이팅이 버텍스 라이팅을 사용하므로 더 가볍습니다. Emission (Lightmapper) 명령은 라이트맵 연산시에 사용되는 듯 하고, 평소에는 어떤 작용도 하지 않습니다.
Self-Illumin/Diffuse : 기본적으로 Diffuse와 같지만, 또 한장의 Illumination 텍스쳐를 사용할 수 있다는 점이 다릅니다. 이 쉐이더는 이상하게도 Illumination 텍스쳐의 ‘알파 채널만’ 사용하고 나머지는 아예 사용하지 않으며, 이 채널에 따라 Diffuse의 밝기가 결정됩니다. Emission (Lightmapper) 명령은 라이트맵 연산시에 사용되는 듯 하고, 평소에는 어떤 작용도 하지 않습니다. 특별하게 사용할 때 외에는 비추입니다 .
Reflective/VertexLit : 큐브맵으로 반사가 사용되지만 버텍스 라이팅을 사용하기 때문에 가볍습니다.
Reflective/Bumped VertexLit : 큐브맵으로 반사가 사용되지만 버텍스 라이팅을 사용하기 때문에 가볍습니다. 노말맵을 사용하지만 버텍스 라이트 계산이라 정확도가 좀 떨어지긴 합니다.
Transparent/Cutout/Specular : Specular Diffuse 쉐이더에서 알파 테스팅이 추가된 쉐이더입니다.
RenderFX/Skybox Cubed : 스카이박스를 위한 큐브맵 쉐이더입니다. 호환성이 최고로 좋다고는 할 수 없지만, 어쨌건 가볍습니다.
3g 짤 쉐이더들 : 3g 부터는 살짝 묵직해진다고 할 수 있습니다. 물론 여전히 사용하셔도 되긴 하지만 ‘일반적인 오브젝트’ 한테까지 사용하는건 좀 반대입니다. :) 일부는 모바일에서도 표현 되며, 일부는 되지 않습니다.
Decal : 데칼 쉐이더는 기본적으로 Diffuse와 같지만, 또 한장의 decal 텍스쳐를 사용할 수 있다는 점이 다릅니다. 그리고 데칼 텍스쳐의 ‘알파 채널’에 따라 diffuse 텍스쳐가 나올 것인지 decal 텍스쳐가 나올 것인지 결정됩니다. 알파는 사용할 수 없습니다. 데칼 텍스쳐의 특이한 기능을 사용하지 않으려면 비추입니다.
Particles/VertexLit Blended : 이펙트에 사용가능한 알파 블렌딩 전용 쉐이더. 라이트 영향을 받고, 2side 이며, Z write를 하지 않습니다. 이펙트에서는 가장 가벼운 쉐이더로, 추천드리는 바입니다. 이펙트 쉐이더는 가장 가벼운게 3g …. (밝거나 어둡게 합성되기를 원하신다면 요청주세요)
Bumped Diffuse : Diffuse 와 기본적으로 같지만, 추가로 노말맵이 사용됩니다. 사실 노말맵이라는게 이 상태로 사용되면 잘 보이지도 않기 때문에 그다지 추천하는 쉐이더는 아닙니다만, 어쨌건 노말맵을 사용하셔야 한다면 그중 가장 가벼운 쉐이더임에는 틀림 없습니다. 알파 지원 안됩니다.
Transparent/Cutout/Bumped Diffuse : Bumped Diffuse 쉐이더에서 알파 테스팅이 추가된 쉐이더입니다.
Transparent/Cutout/Soft Edge Unlit : 알파 테스팅으로 보이지만 사실 알파 블렌딩도 같이 사용하고 있습니다. 풀이나 나무 등을 위해 만들어진 쉐이더로, 테두리가 부드럽게 보이도록 만들어 졌습니다. 라이트를 사용하지 않는 특징이 있습니다.
Reflective/Bumped Unlit : 큐브맵을 사용하는 반사 맵중 가장 가볍습니다. 라이트를 사용하지 않습니다.
Reflective/Bumped VertexLit : 큐브맵으로 반사가 사용되지만 버텍스 라이팅을 사용하기 때문에 가볍습니다.
Reflective/Diffuse : Diffuse 맵과 같지만, 큐브맵을 이용해서 반사를 표현하는 쉐이더입니다.
Reflective/Specular : Reflective/Diffuse 에 Specular 가 추가된 쉐이더입니다.
Self-Illumin/Specular : Self-Illumin/Diffuse 에 Specular 가 추가된 쉐이더입니다.
4g 짤 쉐이더들 : 여기서부터는 한 번씩 생각하시고 쓰셔야 하는 쉐이더입니다. 필요한 경우엔 물론 사용하셔도 되지만, 되도록 사용을 주의해 주시고 화면에 많이 나오지 않도록 해주시기 바랍니다.그리고 이 부분부터는 모바일에서 똑같이 표현되기 불가능하다고 생각하시면 됩니다.주로 노말맵을 사용하는 쉐이더들입니다.
Transparent/VertexLit : 알파 블렌딩과 스페큘러가 사용되지만 라이팅이 버텍스 라이팅인 쉐이더입니다. 알파 블렌딩과 스페큘러를 사용하는 쉐이더 중에서는 가장 가벼울 것입니다. 폴리곤이 비교적 많으면서, 고급 질감이 필요한 오브젝트에 사용하시기 바랍니다 .
Transparent/Diffuse : Diffuse 만큼 가볍습니다만, 알파 블렌딩을 사용할 수 있다는게 다릅니다.(알파 블렌딩은 언제가 무겁습니다 : 모바일 제외) 알파 블렌딩이 필요한 부분에 사용해 주세요. … 아마 이펙트가 될 것 같습니다만… 일반 오브젝트에 꼭 필요한 경우 외에는 비추입니다.
Self-Illumin/Bumped Diffuse : Self-Illumin/Diffuse 에 노말맵이 추가된 쉐이더입니다.
Self-Illumin/Bumped Specular : Self-Illumin/Bumped Diffuse 에 Specular가 추가된 쉐이더입니다.
Reflective/Bumped Diffuse: Reflective/Diffuse 쉐이더에 노말맵이 추가된 쉐이더입니다.
Reflective/Bumped Specular: Reflective/Bumped Diffuse 쉐이더에 Specular가 추가된 쉐이더입니다.
{
Particles/Blend : 이펙트용 쉐이더로, 기본적으로는 심하게 무거운 편이 아니지만 Soft Particle 기능이 켜지면 지형과 맞닿는 부분을 인식하는 코드가 들어있는 관계로 그 때에는 무거워집니다.즉, 무게가 가변적입니다. (아래의 모든 Particle 쉐이더가 마찬가지입니다)
Particles/Alpha Blended Premultiply : 이펙트용 쉐이더로, 뒤 이미지와 겹쳐서 조금 어두워집니다.
Particles/Additive : 이펙트용 쉐이더입니다. 밝아집니다.
Particles/Additive (Soft) : 이펙트용 쉐이더입니다. 조금 덜 밝아집니다.
Particles/Multiply : 이펙트용 쉐이더입니다. 겹쳐서 어두워집니다.
Particles/Multiply (Double) : 이펙트용 쉐이더입니다. 겹쳐서 조금 덜 어두워집니다.
Particles/Alpha Blended : 이펙트용 쉐이더입니다. 그냥 겹칩니다.
Particles/~Additive-Multiply : 이펙트용 쉐이더입니다. 알파에 의해 밝아지거나 어두워집니다.
}
5g 짤 쉐이더들 : 중요한 캐릭터나 인상적인 배경에 사용하는게 좋은 쉐이더입니다. 이 쉐이더부터는 슬슬 관리가 필요하며, 사용시에 부하를 고민해 줘야 하는 쉐이더입니다.
Transparent/Bumped Diffuse : Transparent/Diffuse 쉐이더에 노말맵 지원이 들어갔다고 생각하시면 됩니다. 더 설명이 필요한가요? :)
Transparent/Specular : Specular 쉐이더에 알파 블렌딩이 추가된 쉐이더입니다.
Transparent/Bumped Specular : Transparent/Bumped Diffuse 에 Specular 가 추가된 쉐이더입니다.
Transparent/Cutout/Bumped Specular : Transparent/Bumped Specular 에 알파 테스팅이 들어간 쉐이더입니다.
6g 쉐이더들 : 아주 묵직한 쉐이더입니다. 정말로 꼭 필요한지 한 번 생각해 보시고 사용하시기 바라며, 팀장님과 상의해 보시기 바라겠습니다. 특정 그래픽 카드에서는 작동하지 않거나, 내장된 저사양 옵션 쉐이더로 바뀌어서 돌아가게 됩니다. 사실 Parallax 는 쓰지 않으시길 추천합니다. (Parallax가 들어간건 쓰지 않으면 된다라고 보시면 됩니다)
FX/Water / FX/Water (simple) / FX/Water GrabPass : 복잡한 굴절과 여러 텍스쳐를 사용하는 쉐이더로, 일반적인 쉐이더들보다 고급 기법이 들어가 있는 쉐이더들입니다. 낮은 사양의 그래픽 카드에서는 제대로 표현되지 않습니다. 빌트 - 인 쉐이더가 아니지만 비교삼아 넣어 보았습니다.
Parallax Diffuse : 노말맵보다 발전된 시차보정맵핑이 추가로 사용되는 쉐이더입니다. 고급사양의 게임에서 주로 사용되는 기능입니다.
Parallax Specular
Self-Illumin/Parallax Diffuse
Self-Illumin/Parallax Specular
Transparent/Parallax Diffuse
Transparent/Parallax Specular
Reflective/Parallax Diffuse
Reflective/Parallax Specular
=============================================================
그러므로 쉽게 쉐이더를 구별할 수 있는 일반적인 방법은 다음과 같다고 볼 수 있겠습니다.
쉐이더 이름에서 아래 이름이 들어갔다면, 가볍거나 무거운 것이라고 짐작할 수 있습니다.
라이트
Unlit : 라이트를 사용하지 않습니다. 라이트의 영향을 받지 않아 그냥 밝습니다.매우 가볍습니다.
VertexLit : 버텍스 라이트를 사용해서 라이트의 정밀도가 떨어집니다. 버텍스가 많아질수록 좋아집니다.그러나 가볍습니다.
Diffuse : 일반적인 픽셀라이트로, 일반적인 무게입니다.
Specular : 스페큘러 계산이 들어갑니다. 그냥 Diffuse 보다 조금 더 무겁고, 스페큘러가 반짝입니다.
맵핑
Reflective : 큐브맵을 이용한 반사가 들어갑니다.좀 무겁습니다.
Bump : 노말맵이 사용됨을 의미합니다. 텍스쳐 한 장이 더 들어가고 노말맵 계산이 이루어지므로 많이 무겁습니다.
Parallax : 노말맵에 시차보정 맵까지 들어갑니다. 엄청 무겁습니다.
알파
Cutout : 알파 테스팅으로 알파를 처리하는 쉐이더는Transparent / Cutout 이라는 메뉴에 있습니다. 알파를 처리하기에 가장 가벼운 방법입니다.
Transparent : 알파 블렌딩이 들어가는 쉐이더는 Transparent 아래 메뉴에 있습니다. PC에서는 알파 블렌딩이 매우 무겁습니다. (모바일에서는 반대입니다)
http://intra.ndoors.com/center/board/view.asp?list_seq=208548&board_seq=313&readchk_flag=N 참고