Version: 5.3
여러 셰이더 프로그램 배리언트 만들기
Unity에서 사용하는 셰이딩 언어

GLSL Shader Programs

In addition to using Cg/HSL shader programs, OpenGL Shading Language (GLSL) shaders can be written directly.

However, use of raw GLSL is only recommended for testing, or when you know you will only target Mac OS X, OpenGL ES mobile devices or Linux. In all normal cases, Unity will cross-compile Cg/HLSL into optimized GLSL when needed.

GLSL 스니핏

GLSL 프로그램 스니핏은 GLSLPROGRAMENDGLSL 키워드 사이에 작성됩니다.

GLSL에서는 모든 셰이더 함수 엔트리 포인트를 main()이라고 해야 합니다. Unity는 GLSL 셰이더를 로드할 때 소스를 VERTEX 프리프로세서 정의를 사용하여 버텍스 프로그램을 위해 한 번 로드하고 FRAGMENT 프리프로세서 정의를 사용하여 프래그먼트 프로그램을 위해 한 번 더 로드합니다. 따라서 GLSL 스니핏의 버텍스 및 프래그먼트 프로그램 부분을 분리하려면 #ifdef VERTEX .. #endif#ifdef FRAGMENT .. #endif로 둘러싸는 방법을 사용합니다. 각 GLSL 스니핏에는 버텍스 프로그램과 프래그먼트 프로그램이 모두 포함되어야 합니다.

스탠다드 포함 파일은 Cg/HLSL 셰이더를 위해 제공된 것과 일치하고, .glslinc 확장자가 있을 뿐입니다.

UnityCG.glslinc

버텍스 셰이더 입력은 미리 정의된 GLSL 변수(gl_Vertex, gl_MultiTexCoord0, …)에서 비롯되거나, 사용자 정의 속성입니다. 일반적으로 탄젠트 벡터에만 사용자 정의 속성이 필요합니다.

attribute vec4 Tangent;

데이터는 varying 변수를 통해 버텍스 프로그램에서 프래그먼트 프로그램으로 전달됩니다. 예:

varying vec3 lightDir; // vertex shader computes this, fragment shader uses this
여러 셰이더 프로그램 배리언트 만들기
Unity에서 사용하는 셰이딩 언어