[ Shader Tutorial 1 (Shaders: ShaderLab & Fixed Function shaders) ]
http://docs.unity3d.com/Documentation/Manual/ShaderTut1.html
[Getting Start 실습]
Sphere 생성
Collider 삭제
Shader 생성 ( 기본 소스는 지우고 다음을 카피해서 넣음)
Shader "Tutorial/Basic" { Properties { _Color ("Main Color", Color) = (1,0.5,0.5,1) } SubShader { Pass { Material { Diffuse [_Color] } Lighting On } } }
Material 생성 후 드랍다운으로 Shader 파일을 연결
Material을 Sphere에 연결하고 색을 변경해 봄
[ 간단 소스 설명 ]
Material Inspector를 보면 "Main Color"라는 속성 값을 볼 수 있음
"Main Color"는 Shader 코드의 "Properties"에서 생성한 것임
[ Basic Vertex Lighting 실습]
VertexLit : 유니티에서 내장되어 있는 쉐이더로 표준적인 버텍스당 라이팅에 대한 처리를 하는 고정 함수 파이프라인
Sphere 생성
Material 생성
Inspector 창의 Shader에서 "VertexLit" 항목을 선택
혹은 Shader를 생성한 후에 아래 소스를 카피해서 만들어서 사용해도 됨(단, Shader "Tutorial/VertexLit" 으로 바꿀 것)
Sphere에 Material 연결
Material의 "Base (RGB)에 2D Texture연결해서 테스트
VertexLit의 쉐이더 코드
Shader "VertexLit" { Properties { _Color ("Main Color", Color) = (1,1,1,0.5) _SpecColor ("Spec Color", Color) = (1,1,1,1) _Emission ("Emmisive Color", Color) = (0,0,0,0) _Shininess ("Shininess", Range (0.01, 1)) = 0.7 _MainTex ("Base (RGB)", 2D) = "white" { } } SubShader { Pass { Material { Diffuse [_Color] Ambient [_Color] Shininess [_Shininess] Specular [_SpecColor] Emission [_Emission] } Lighting On SeparateSpecular On SetTexture [_MainTex] { constantColor [_Color] Combine texture * primary DOUBLE, texture * constant } } } }
Shader : 해당 쉐이더의 이름을 나타내는 문자열
첫번째 예제의 경우 Material Inpspector >> Shader에서 "Tutorial/Basic"을 찾을 수 있음
Properties : 쉐이더의 속성들을 Unity 내부의 재료 Inspector에서 보여줌
Main Color / Spec Color / Emissive Color / Shininess /Base (RGB) 속성을 Inpspector에서 확인할 수 있음
Properties 문법관련 설명
SubShader :
복수개의 SubShader를 제공하며, 랜더링을 담당하는 우리가 일반적으로 생각하는 쉐이더
가장 위에 정의된 쉐이더 부터 실행되며, 위에 있는 서브쉐이더가 하드웨어와의 호환 문제가 발생하면 다음 쉐이더가 실행됨
Shader "Structure Example" { Properties { /* ...shader properties... } SubShader { // ...subshader that uses vertex/fragment programs... } SubShader { // ...subshader that uses four textures per pass... } SubShader { // ...subshader that uses two textures per pass... } SubShader { // ...subshader that might look ugly but runs on anything :) } }
SubShader 문법관련 설명
Passes
랜더링 방법을 지정
패스 태그(Pass Tag)
랜더링 설정을 지정
랜더 스테이트(Render State)
GPU의 랜더 상태를 설정하는 다양한 키워드
Culling / Depth Test / Alpha Test / Blending
쉐이더 코드(Shader Code)
실제 쉐이더 코드의 조각
Lighting On : 표준 버텍스 라이팅(정점 조명)을 킴
SeperateSpecular On : Specular high-light에 별개의 색깔을 허용
SetTexture : Properties에서 만들었던 특정 텍스처(_MainTex)를 가지고 어떻게 Combine/Mix 해서 사용할 것인지를 정의함
constantColor [_Color] : Material의 Color(_Color)의 값을 constant로 세팅함(아래 줄에서 활용하고 있음)
Combine ColorPart, AlphaPart : ColorPart(RGB)와 AlpaPart(A)를 이용한 blending
Combine texture * primary DOULE, texture * constant
texture(_MainTex) * primary Vertex Color >> 이 값을 제곱(DOBLE)
texture(_MainTex) * constantColor >>
SetTexture 문법관련 설명
[ Shader Tutorial 2 (Shaders: Vertex and Fragment Programs) ]
http://docs.unity3d.com/Documentation/Manual/ShaderTut2.html
한글 사이트는 링크가 잘못 된 듯...
Shader "MyShaderName" { Properties { // ... properties here ... } SubShader { // ... subshader for graphics hardware A ... Pass { // ... pass commands ... } // ... more passes if needed ... } SubShader { // ... subshader for graphics hardware B ... } // ... Optional fallback ... FallBack "VertexLit" }
FallBack
SubShader로 정의된 방법으로 Shader 처리가 되지 않을 경우(하드웨어가 지원하지 않는 쉐이딩일 경우 등) 처리되는 방식을 정의함
즉 위에서는 VertexLit 쉐이딩을 적용하게 만듬
UsePass "Specular/BASE" ?