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 Shader' 카테고리의 다른 글
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 |