Unity의 shader 학습2

8340 단어 unity
다음은surface 기반의shader 코드를 계속 보겠습니다. 기본적으로Vertex &Fragment shader와 차이가 많지 않습니다. 단지pass를 쓸 수 없고surface 함수만 설명하면모든 일을 처리할 수 있습니다.
 1 Shader "T1/Hero/Diffuse" {
 2     Properties {
 3         _MainTex ("Base (RGB)", 2D) = "white" {}
 4         _Color ("Main Color", Color) = (1,1,1,1)
 5         [HideInInspector]_BlendColor("_Blend Color", Color) = (1, 1, 1, 0)
 6         [HideInInspector]_BlendIntensity ("BlendColorShininess", Range (1, 4)) = 1
 7     }
 8     SubShader {
 9         Tags { "Queue" = "Geometry+20" "RenderType"="Opaque"}
10         LOD 200
11 
12         CGPROGRAM
13        // #include "T1.cginc"
14         #pragma surface surf LambertT1HeroSideLight   
15         #pragma only_renderers d3d9 opengl 
16 
17         sampler2D _MainTex;
18         fixed4 _Color;
19 
20         struct Input {
21             float2 uv_MainTex;
22         };
23 
24         #include "T1.cginc"
25 
26         void surf (Input IN, inout SurfaceOutput o) {
27             half4 c = tex2D (_MainTex, IN.uv_MainTex) ;
28             #if defined (UNITY_PASS_FORWARDBASE) || defined (UNITY_PASS_PREPASSFINAL)
29                 o.Albedo =  lerp (c.rgb* _Color.rgb, _BlendColor * _BlendIntensity,  _BlendColor.a);
30             #else
31                 o.Albedo =  c.rgb* _Color.rgb;
32             #endif
33             o.Alpha = 0; 
34             o.Emission = c.rgb * _heroSelfIllumin;
35         }
36         ENDCG
37     } 
38     FallBack "Hidden/T1/VertexLit-Hero"
39 }

3행의MainTex가 선언하면 17번째 행에서 를 참조할 수 있습니다.
5-6 행의 HideInInInInInspector는 편집기의 속성 인터페이스에 표시되지 않고 숨겨진다는 의미입니다.그리고BlendColor는 색상을 나타냅니다.BlendIntensity는 0-1의 값을 나타냅니다.뒤에 보면 컬러와 블렌드 강도가 섞여 있음을 알 수 있습니다.
9행의 RenderType=Opaque는 성명은 불투명한 물체임을 나타낸다. 구체적으로 여기.에 설명한 다음에'Queue'='Geometry+20'은 사실 과장 차원이 2000+20이고 일반적인 불투명한 물체 차원보다 조금 높다는 뜻이다.
열 번째 줄의 LOD라는 수치는 우리가 어떤 Shader를 사용할 수 있는지를 결정한다.Unity의Quality Settings에서 허용되는 최대 LOD를 설정할 수 있습니다. LOD가 SubShader가 지정한 LOD보다 작으면 이 SubShader를 사용할 수 없습니다.Unity 내장 Shader는 LOD 집합의 수치를 정의합니다.구체적으로 설명하자면여기..200은 기본 diffuse 값입니다.
14번째 줄의 #pragma surface surf Lambert는 표면 Shader를 작성하고 조명 모델을 지정하는 것을 나타냅니다.그것의 작법은 이렇다
  #pragma surface surfaceFunction lightModel [optionalparams]
  • surface-표면착색기
  • surfaceFunction - 착색기 코드의 방법의 이름
  • lightModel - 사용되는 조명 모델입니다.

  • Lambert는 일반적인 diffuse 만반사 광조 모형이다.
    15행 #pragma onlyrendererers d3d9 Opengl은 이 shader가 d3d9와opengl에만 컴파일되는 것을 제한합니다.구체적으로 설명하면여기.
    17행 Sampler2D는 GLSL에 있는 2D 스티커의 유형이고 그에 상응하여 Sampler1D, Sampler3d, SamplerCube 등 형식도 있다.잔소리 그만해.
    18줄의fixed4는 주로 색 rgba의 네 가지 수치를 나타내는 데 쓰인다.
    20행의 Input 선언 후에는 주로 surf 함수에 사용됩니다.
    26행-34행은 주로 CG가 표면 착색기로 성명하는 방법(바로 여기의surf)의 매개 변수 유형과 이름을 규정했기 때문에surf의 입력과 출력 매개 변수의 유형을 결정할 권리가 없고 규정에 따라 쓸 수밖에 없다.이 규정은 첫 번째 파라미터는 Input 구조이고 두 번째 파라미터는 inout의Surface Output 구조이다.
    여기에 tex2d 함수를 사용했습니다. 이것은 CG 프로그램에서 스티커에서 한 점을 샘플링하는 방법으로float4를 되돌려줍니다.여기 맞아요MainTex는 입력점에서 샘플링을 하고 그 색깔의 rbg 값을 출력하는 픽셀 색깔로 부여합니다.
    28행의 주요 의미는 여기..여기에 주로 전방향 렌더링이나 지연 렌더링이 있으면 물체의 색깔은 혼합된 색깔과 혼합된 밝기를 고려해야 한다. 그렇지 않으면 바로 색을 얻는다.
    33줄, 투명하지 않은 설정.
    34줄은 자발광을 나타낸다. 이 값은 그림의 색깔에 t1이 정의한 자발광 밝기 상수를 곱한 것이다.

    좋은 웹페이지 즐겨찾기