본문으로 바로가기

Unity GLSL base shader

category Technical Report/Unity 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
      }
   }

}

반응형

'Technical Report > Unity' 카테고리의 다른 글

UE4 25 tips for Unreal Engine 4(2)  (0) 2016.07.10
UE4 25 tips for Unreal Engine 4(1)  (2) 2016.07.09
Unity Alpha Blend togle mode shader  (0) 2016.05.24
Unity Alpha Blend Mode Toggle  (0) 2016.05.23
Unity3D WorldReflectionVector function  (0) 2016.05.10