유니티에서 사용하는 셰이더 언어는 ShaderLab 이라고 한다.
(공식 문서 - https://docs.unity3d.com/kr/current/Manual/SL-Shader.html)
(문법 정리 - http://chulin28ho.tistory.com/159)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | // colored vertex lighting Shader "Simple colored lighting" { // a single color property Properties { _Color ("Main Color", Color) = (1,.5,.5,1) } // define one subshader SubShader { // a single pass in our subshader Pass { // use fixed function per-vertex lighting Material { Diffuse [_Color] } Lighting On } } } | cs |
기본틀은 위와 같다
첫 줄은 셰이더의 이름을 지정하는 것으로 에디터상에서 아래처럼 나온다.
1 | Shader "GameAcademy/SampleShader" { | cs |
Properties 는 에디터의 머테리얼 인스펙터에서 파라미터 변수로 받아올 수 있는 부분이다.
1 2 3 4 5 6 | Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _MainTex2("Albedo2 (RGB)", 2D) = "white" {} _NormalTex("Bumped (RGB)", 2D) = "white" {} } | cs |
_Color, _MainTex처럼 앞에 선언해주는 부분이 셰이더 내에서 변수이름이 되고
( 이후 첫번째 항목은 에디터에서 표시되는 라벨이름이다. "Color", "Albedo (RGB)"
두번째 항목은 자료형이라고 생각하면 된다. Color, 2D
위와 같이 선언하면 인스펙터에서는 아래와 같이 뜬다.
숫자는 Range(0, 1), Float, Int로 받을수 있으며
컬러 및 벡터는 Color, Vector
텍스쳐는 2D, Cube, 3D로 받을 수 있다.
SubShader 는 실제 셰이더 코드라고 생각하면 된다. 즉 구현부
SubShader는 여러개가 존재할 수 있으며 현재 그래픽카드(하드웨어)에서 실행 가능한 첫 서브셰이더를 선택한다.
1 2 3 4 5 6 7 8 9 10 11 12 | SubShader{ // A급 디바이스용. dx11용 이런식 } SubShader{ // B급 디바이스용. dx9용 이런식 } SubShader{ // C급 } // 적용하는 셰이더를 지원하지않으면 FallBack으로 FallBack "Diffuse" | cs |
FallBack 은 사용 가능한 SubShader가 없을 경우 지정한 이름. 현재는 "Diffuse"라는 이름의 셰이더를 찾아
거기서 SubShader를 찾아 실행한다.
Pass 는 오브젝트의 렌더링 단위라고 생각하면 된다.
'프로그래밍 공부 > Shader' 카테고리의 다른 글
유니티 셰이더 기초 - Surface Shader (0) | 2018.07.17 |
---|---|
유니티 셰이더 기초 - Vertex and Fragment Programs / Surface Shader (종류) (0) | 2018.07.17 |
유니티 셰이더 기초 - ShaderLab / Fixed Funtion Shader 2 (1) | 2018.07.17 |
쉐이더란 무엇일까 (0) | 2018.07.17 |
셰이더 기초강좌 링크 (0) | 2018.07.16 |