본문으로 바로가기

Unity GLSL base shader

category Technical Report/Unity Shader 2016. 6. 3. 10:40
반응형

Unity에서의 Cg/HSL shader programs의 사용 뿐만 아니라, OpenGL 쉐이더 언어(GLSL)의 쉐이더도 직접 작성가능.

그러나 raw GLSL은 테스트 목적으로만 권장 하며, 이 외에는 확실히 Mac OS X 또는 OpenGL ES 2.0 호환 모바일 디바이스 또는 Linux를 사용하는 경우에만 사용을 권장. 보통의 대부분의 경우에서, Unity는 필요에 따라 Cg/HLSL을 최적화된 GLSL로 크로스 컴파일합니다.


GLSL에서 모든 쉐이더 함수의 엔트리 포인트는 main ()이라고 해야 합니다. Unity가 GLSL 쉐이더를 로드할 때 정점 프로그램을 위해 한 번 소스를VERTEX 프리프로세서 정의에서 로드하고, 한번 더 프래그먼트 프로그램을 위해 FRAGMENT 프리프로세서 정의에서 로드합니다. 정점과 프래그먼트 프로그램을 GLSL 스니펫 안에서 분리하기 위해서는, #ifdef VERTEX .. # endif and#ifdef FRAGMENT .. # endif로 묶어야 합니다. 각 GLSL 스니펫은 정점 프로그램과 프래그먼트 프로그램 모두 보유해야 합니다.

표준 포함 파일은 Cg 쉐이더를 위해 제공되는 것을 매치하며, 그들은 .glslinc 확장자가 붙어 있습니다 :



예문 : https://en.wikibooks.org/wiki/GLSL_Programming/Unity



Shader "Test/GLSL" {


Properties {
      _MainTex ("Texture Image", 2D) = "white" {}
   }
 

  SubShader {
  

   Pass {   
  

      GLSLPROGRAM
                 
         uniform sampler2D _MainTex;   
         uniform vec4 _MainTex_ST;

                  

         varying vec4 textureCoordinates;

         #ifdef VERTEX
                 
         void main()
         {
            textureCoordinates = gl_MultiTexCoord0;
            gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
         }
        
         #endif


       //버텍스 셰이더



         #ifdef FRAGMENT
        
         void main()
         {
            gl_FragColor = texture2D(_MainTex, _MainTex_ST.xy * textureCoordinates.xy  + _MainTex_ST.zw);   
        
         }
        
         #endif


      //픽셀 셰이더


         ENDGLSL
      }
   }

}

반응형