[ 참고 사이트 ]
http://usroom.tistory.com/category/unity%20shader%20%EA%B3%B5%EB%B6%80
http://www.unitykoreawiki.com/index.php?n=KrMain.SL-SurfaceShaders
http://wiki.unity3d.com/index.php?title=Shaders
http://cafe.naver.com/multism/4858 검색으로 unity shader 해볼 것
[ 기본 용어 ]
참고 사이트
쉐이더란?
쉐이더란 화면에 출력할 픽셀의 위치와 색상을 계산하는 함수
Shade + er : 색의 농도, 색조, 명암을 주는 주체
그래픽 카드에서 연산됨
유니티에서는 세이더 제작 기술을 몰라도 셰이더를 통한 렌더링을 할 수 있게 여러가지의 기본 셰이더를 제공하고 있으며, 직접 셰이더 코드를 제작할 수 있는 시스템도 제공하고 있음
Material
일반적 의미 : 재질 ......
그래픽스에서의 의미 : 화면에 보여지는 그래픽적 효과의 표현 과정
Mesh 정보 + Texture 정보 + Normal 정보 등과 Light 정보를 통해 연산( Shader)됨
쉐이더 구조적 접근(종류)
정점 쉐이더(Vertex Shader) : 정점들의 위치를 화면 좌표로 변환하는 작업을 함
픽셀 쉐이더(Pixel Shader) : 화면에 출력할 최종 색상을 계산한다.
지오메트리 쉐이더(Geometry Shader) : 일반적으로 버텍스 쉐이더는 점, 삼각형 등의 도형을 (새로운 버텍스)를 생성할 수 없는데 이러한 버텍스를 생성할 수 있는 쉐이더를 의미
Vertext / Pixel Shader 단계는 프로그램에서 제어가 가능한 단계이기 때문에 Vertex Shader와 Pixel Shader에 사용할 함수를 하나씩 만드는 것이 쉐이더 프로그래밍
HLSL
DirectX에시 지원하는 High Level Shader Language : 고수준 쉐이더 언어
셰이더 과정
정점 셰이더 >> 정점 위치 >> 레스터라이즈 >> 픽셀 위치, 개수 정보 >> 픽셀 셰이더 >> 화면
[ Unity Shader ]
[ Unity Shader Structure ]
유니티 셰이더 개요
[ Unity Shader Programming (세가지 방식 지원) ]
Fixed Function Program(고정 함수 프로그램)
Vertex / Fragment Program(버텍스 프래그먼트 프로그램)
Surface Shader Program(서피스 쉐이더 프로그램)
[ ShaderLab Syntax ]
유니티 세이더 코드 문법
[ Unity Rendering Pipeline ]
Vertex Lit
Forward
Defered Lighting
[ Unity Shading Pipeline ]
Transform/ TexGen/Lighting & Vertex Shader: 각 버텍스당 주어진 정보를 이용한 Vertex Shading 단계
Culling Depth Test
Texturing / Fog & Fragment Shader
Alpha Test
Blending
[ 내장 쉐이더 : Build-in Shader ]
참고 데이타
http://www.unitykoreawiki.com/index.php?n=KrMain.Built-inShaderGuide
개요
유니티에서 기본적으로 제공하는 쉐이더
직접 작성하거나 노드 기반 쉐이더 툴로 만들어서 "익스포트한 쉐이더코드"와 다르게 열어 볼 수 없으며, 수정도 불가능하다.
60여종 이상의 셰이더 제공되고 있으며, 일정한 규칙으로 이름되어 있어 알아보기 편함
Diffuse
빛에 따른 물체의 명암을 표현하는 데 사용하는 가장 단순한 셰이더
빛과 표면의 법석 벡터의 내적에 따라 명암을 계산
Specular
Diffuse 모델을 기반으로 명암을 표현하고, 사용자의 시점 정보를 사용해 빛을 반사하는 하이라이트 효과를 추가한 모델
Bumped
노멀맵(Normal Map)이라는 특수한 텍스쳐를 사용해야 하며, 이 노멀맵을 사용해서 울퉁불퉁한 효과를 구현하는 기술을 노멀 매핑이라고 하며 이 기술을 범프드 모델이라고 함
Transparent
텍스쳐의 알파 채널 정보를 이용해 물체를 반투명하게 보이는 모델 ( Alpha Blending )
Transparent Cutout
물체를 랜더링할 때 텍스쳐의 알파 채널 정보를 이용해 특정 픽셀을 렌더링할지 걸러내는 모델[ 특정 값보다 낮은 Alpha 값들은 걸러 냄 ] ( Alpha Testing )
Self Illumin
전구같이 물체의 표면에서 빛이 방사되는 효과를 나타내는 데 주로 사용하며, 알파 채널을 이용해 밝은 영역에서 강하게 빛을 발산한다.
Reflective
큐브맵 텍스쳘르 추가로 사용해서 물체에 반사 효과를 설정하는 모델
3차원으로 물체가 반사된 효과를 낼 수 있어 주위 환경이 반사되는 효과를 만들고자 할 때 유용
VertexLit
정점에서만 렌더링을 수행하고, 정점 간에 나오는 결과를 보간해 보여주는 방식
유니티에서 제공하는 VertexLit은 Specular와 동일한 기능을 제공
Unlit
빛은 전혀 고려하지 않으며, 단순히 물체의 표면에 텍스쳐를 그대로 입혀서 보여주는 모델
주로 2D 게임이나 GUI 같은 곳에서 활용
Unlit Transparent : 투명한 스프라이트 이미지 구현
Decal
기본 텍스쳐에 추가적인 이미지를 입힐 때 사용하는 기법
Mobile
데스크탑 환경이 아닌 스마트폰 기기에서 원활히 작동할 수 있게 사용하는 셰이더
보다 자세한 설명은 여기를 참조[ Unity Shader 개요 심화 ]
시간 되면 여기의 목차별로 정리할 필요가 있을 듯 ...http://docs.unity3d.com/Documentation/Components/SL-Reference.html
[ Unity Mobile Shader ]
[ ShaderLab & Fixed Function shaders_Vertex and Fragment Programs ]
낮은 레벨의 Vertex/Pixel Shader Programs 보다 조명 쉐이더를 쉽게 만드는 코드를 생성해 줌
유니티에서 제공되고 있는 내장된 조명 모델(Lighting Model)은 "Lambert(Diffuse조명)과 BlinnPhong(반사적인 조명)" 이 있음
내장된 Lmabert와 BlinnPhong 모델은 {unity install paht}/Data/CGIncludes/Lighting.cginc 안에 정의되어 있음
사용자 정의 라이트(Custom Lighting models in Surface Shaders)의 생성도 가능함
[ Unity Shader Code ]
TextureRotate Shader
AlphaTest Shader
Glass Shader
[ Strumpy Shader Editor ]
Free 버전으로 Asset Store에서 다운 받을 수 있음
Shader의 개념을 실습하는데 좋은 툴임
참고 사이트
설치
Strumpy Shader Editor(Asset Store Package) import
import하면 메뉴에 "Shader Editor" 라는 메뉴가 생겨남
참고 : "Editor/Scripts/NodeEditorWindowImportSetting"에서 만들어 주고 있음
Menu >> Shader Editor >> Strumpy Shader Editor
Pixel Graph라는 창이 뜸
File >> New Graph
Pixel Graph 환경
[ Strumpy Shader Editor 실습 ]
참고 사이트
실습 1 : Object에 빨간색 입히기
File >> New Graph
오른쪽 마우스 클릭 >> Properties >> Color
Node >> Add new input? >> "Color Name"(input)
Master >> Diffuse: <---------> "Shader" : 드래그로 연결
Settings >> Shader Name >> "Shader Name"(input)
Preview : Preview 창 생성
Inputs>> Color >> Color >> "색깔" 지정
Preview 창의 색깔 바뀐 것 확인됨
File >> Export As >> 파일 생성(편의를 위해 Unity Project 내 Asset에 저장)
Unity Projcet 창에서 Shader파일이 생성된 것 확인
Unity에서 만든 shader 테스트
새로운 Material 생성
생성된 Material에 생성된 Shader 적용
Cube 생성
Cube에 Shader 적용
실습2 : 2D Alpha Test
File >> New Graph
오른쪽 마우스 클릭 >> Properties >> Sampled2D
Node >> Add new input? >> "Simple2D"(input)
Inputs >> 2D >> Texture <-- "Image"(투명 값이 있는 이미지)
Master >> Diffuse <---------> Sampled2D/RGBA (드래그로 연결)
Preview >> Update Preview : 현재 상태 확인 (Alpha가 적용 안된 Shader 상태)
Master >> Alpha <---------> Sampled2D/A (드래그로 연결)
Settings >> Shader Name >> "Shader Name"(input)
Queue Settings
Render Type : Transparent
Render Queue : Transparent
Blending Settings
Blend Type : Custom
Src Blend Mode : Src Alpha
Dst Blend Mode : One Miuns Src Alpha
Preview >> Update Preview : 현재 상태 확인 (투명 이미지가 확인 됨)
"Master >> Alpha <---------> Sampled2D/A"로 연결되어 있는 선에 오른쪽 마우스 클릭
노드를 연결하는 선이 삭제됨
오른쪽 마우스 클릭 >> Operation >> Multiply
Master/Alpha <---------> Multiply/Result
Multiply/Arg1 <---------> Sampled2D/A
Preview >> Update Preview : 현재 상태 확인
오른쪽 마우스 클릭 >> Properties >> Range
Node >> Add new input : "_Alpha"(input)
Multiply/Arg2 <--------> Range/[0,1]
Inputs>> Range의 값을 조정
Preview 창에서 투명도가 조절되는 것을 볼 수 있음
File >> Export As >> 파일 생성(편의를 위해 Unity Project 내 Asset에 저장)
Unity Projcet 창에서 Shader파일이 생성된 것 확인
Unity에서 만든 shader 테스트
새로운 Material 생성
생성된 Material에 생성된 Shader 적용
Texture에 이미지 import
Cube 생성
Cube에 Shader 적용
[ ShaderFX] <- 이것에 대한 정의를 내려야 할 듯
Ambient Color
환경광 : 자체적으로 가지고 있는 색깔 / 일반적으로 일정 색을 더 해줘서 해결
Diffuse Color
확산광 : 빛 때문에 밝고 어두워지는 색깔
Specular Color
정반사 : 빛의 반사(하이라이트)
Specular Level
Specular의 강도
Alpha Map을 대입하면 Alpha Map의 모양에 따라 대입됨
Glossiness
Specular의 퍼짐 정도
Self-illumination(Emission)
자기발광
Ambient 와 차이가 없음
Opacity
Normal
uv
Sampling
Sampler
Sampler Setting
Mip Filter : MipMap을 처리할 때의 필터링 옵션
POINT : 가장 무식한 방법의 처리(antiAlias가 적용이 안됨)
LINEAR : Point보다는 부드러운 효과
ANISOTROPIC(비등방성 필터링) : 가장 강력한 필터링 / 위치나 기울기까지 인식해서 주벼의 텍셀 색을 샘플링해서 만듬 / 가장 무거운 샘플링 방식
NONE
Min Filter : 오브젝트가 화면에서 멀어져서, 작아보이게 되었을 때 텍스쳐의 처리방법
Mag Filter : 오브젝트가 가까워져서, 커보이게 되었을 때 텍스쳐의 처리방법
AddressU / AddressV
CLAMP : 마지막 색이 채워야할 곳을 쭈~욱 채움
WRAP : Texture가 반복적으로 표현됨
Texel
Multi-Texturing
Linear interpolation : 선보간 방법으로 두장의 이미지를 보간해서 보여줌
실시간 스플레팅 맵
이펙트 처리 방법
파티클
일반적으로 무거운 단점이 있으나 여러 효과를 리얼하게 표현 가능
텍스처 시퀀스(스프라이트 방식)
텍스처 한장에 애니메이션 되는 이펙트 그림을 나열해서 보여주는 방식
오브젝트 애니메이션
오브젝트를 실제로 구기거나, 스케일링 등을 해서 이펙트를 애니메이션 시키는 방법
단점은 효과가 좋지 못 함, 일반적으로 알파 애니메이션 등을 같이 이용(불이나 폭파 등)
텍스처 애니메이션
UV를 움직이거나 해서 애니메이션 시키는 방법
가장 많이 사용하는 방법으로 가볍고 효과가 좋은 방법
표현할 수 있는 한계가 있음
Shader
가벼우면서도 효과가 좋은 이펙트
텍스처 애니메이션의 장점을 그대로 흡수하면서 더 복잡한 응용이 가능하게 됨
Light
Directional Light
Omni light : Point light : 점광원
Spot light :
[ 기타 ]
[ 용어 정리]
[ 참고할만한 사이트 ]