GLSL Shader Programs

Cg/HSL shader programs을 사용하는 것 외에도, OpenGL Shading Language (GLSL) 쉐이더는 직접적으로 쓰여집니다.

그러나 원래의 GLSL의 사용은 오직 테스팅을 위해서나 또는 사용자가Mac OS X 또는 OpenGL ES 2.0 와 호환이 되는 모바일 디바이스를 타겟으로 할 때만 권장됩니다. 대다수의 보통 경우에서 Unity는Cg/HLSL를 최적화된 GLSL로 크로스 컴파일 할 것입니다 (이것은 모바일 플랫폼을 위해서 기본으로 행해지고 #pragma glsl을 사용해서 선택적으로 데스크탑 플랫폼을 위해서 작동될 수 있습니다).

GLSL snippets

GLSL 프로그램 미리보기는 GLSLPROGRAMENDGLSL 키워드 사이에서 쓰여집니다.

GLSL에서 모든 쉐이더 함수 엔트리 포인트는 main()으로 불려져야 합니다. Unity가GLSL 쉐이더를 로드할 때 그것은 꼭지점 프로그램을 위해서 정의된 VERTEX 프리프로세서를 가지고 한 번만 소스를 로드해야 하고 조각 프로그램을 위해서는FRAGMENT 프리프로세서를 가지고 한 번보다 더 많이 로드합니다. 그래서 꼭지점과 조각 프로그램 부분을GLSL 미리보기에서 분리하는 방법은 그들을 #ifdef VERTEX .. #endif 그리고 #ifdef FRAGMENT .. #endif로 둘러싸는 것입니다. 각각의GLSL 미리보기는 꼭지점 프로그램과 조각 프로그램을 포함해야 합니다.

기본 include 파일은 Cg 쉐이더를 위해 제공되는 것들과 매치합니다; 그들은 .glslinc확장자를 가집니다: UnityCG.glslinc.

꼭지점 쉐이더 입력값은 미리 정의된 GLSL 변수들로 부터 오거나(gl_Vertex, gl_MultiTexCoord0, …) 또는 사용자가 정의한 소성들입니다. 보통 유일한 탄젠트 벡터는 사용자가 정의한 속성을 필요로 합니다:

  attribute vec4 Tangent;

꼭지점으로 부터 조각 프로그램으로의 데이터는 변화하는 변수들을 통해서 전달됩니다, 예를 들어:

  varying vec3 lightDir; // vertex shader computes this, fragment shader uses this

역링크