[ 쉐이더 랩 ]
[ 쉐이더랩]
https://docs.unity3d.com/kr/530/Manual/SL-Shader.html
ShaderLab 구문 - Unity 매뉴얼
Unity의 모든 셰이더 파일은 “ShaderLab”이라는 선언형 언어로 작성되어 있습니다. 이 파일에서 중첩 중괄호 구문은 셰이더를 서술하는 다양한 요소를 선언합니다. 예를 들어, 어떤 셰이더 프로퍼
docs.unity3d.com
유니티 쉐이더의 자체 스크립트 언어를 쉐이더랩이라고 한다 .
다양한 경우의 분기를 쉐이더랩이 자동을 작성해줌으로
사용자는 쉐이더랩의 문법에 맞추어 하나의 쉐이더만 작성하면 된다.
[ 제작방식의 종류 ]
쉐이더랩을 이용한 제작방식은 크게 세가지로 나뉜다 .
- ShaderLab (쉐이더랩)으로만 작성하기
- Surface Shader (서피스 쉐이더)로 작성하기
- Vertex & Fragment Shader (버텍스 & 프라그먼트 쉐이더)로 작성하기
[ ShaderLab으로만 작성하기 ]
- 고정 파이프라인 쉐이더 : Fixed function shader
Shader Lab 문법만 사용하여 작성하는 방법이다 .
가볍고 , 하드웨어 호환성이 좋지만 기능이 상당히 부족하여 고급효과를 기대 할 수는 없다 .
자체 문법으로 이루어져 다른 쉐이더 문법과 거의 호환되지 않는 단점을 가지고 있다 .
해당 방식은 지원 중단 수순을 밟고 있다 .
Shader "VertexLit"{
Properties{
_Color ("Main Color",color) = (1,1,1,0.5)
_SpecColor ("SpecColor", Color) = (1,1,1,1)
_Emission("Emmisive Color", Color) = (0,0,0,0)
_Shininess ("Shininess", Range(0.01,1)) = 0.7
_MainTex ("Base (RGB)",2D ) ="White" {}
}
SubShader {
Pass{
Material {
Diffuse [_Color]
Ambient [_Color]
Shininess [_Shininess]
Specular [_SpecColor]
Emission [_Emisison]
}
Lighting On
SeparateSpecular On
SetTexture [_MainTex] {
constantColor [_Color]
Combine texture * primary DOUBLE,texture *constant
}
}
}
}
- 서피스 쉐이더 : Surface shader
Shader Lab 스크립트와 함께 일부분은 CG 쉐이더 코드를 사용하는 방법이다 .
기본적인 조명 코드와 버텍스 쉐이더의 복잡한 부분은 스크립트를 이용하여 자동으로 처리되고 ,
픽셀 쉐이더 부분만 간편하게 작성 할 수 있어서 편리하다 .
비주얼 쉐이더 에디터와 상당히 비슷한 개념을 가지고 있어 , 초보자가 공부하기 좋고 응용하기도 좋다.
단, 최적화에는 무리가 있고 , 일정 수준 이상의 고급 기법을 구현하기는 어려운 면도 있다 .
Shader "Example/Diffuse Simple"{
SubShader{
Tags {"RenderType" = "Opaque"}
CGPROGRAM
#pragma surface surf Lambert
struct Input{
float4 color : COLOR;
};
void surf (Input IN,inout Surfaceoutput o) {
o.Albedo =1;
}
ENDCG
}
Fallback"Diffuse"
}
- Vertex & Fragment Shader
Shader Lab 스크립트와 함께 CG 쉐이더를 사용하지만, 좀 더 본격적인 쉐이더 작성 방법이다 .
자동으로 처리하는 부분이 별로 없어 제대로 된 CG쉐이더 방식으로 버텍스의 좌표변환부터 제대로 처리해야 작동한다 .
배우기는 힘들지만 , 완전히 수동제어가 가능하여 최적화와 고급기법의 표현에 좋다 .
Shader "Unlit/SingleColor"
{
Properties
{
//Color property for material inspector, default to white
_Color ("Main Color", Color ) = (1,1,1,1)
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
//vertex Shader
//this time instead of using "appdate"struct , just spell inputs manually,
//and instead of returning v2f struct, also just return a single output
//float 4 clip position
float4 vert(float4 vertex: POSITION) : SV_POSITION
{
return mul(UNITY_MATRIX_MVP,vertex);
}
//color from the material
fixed4 _Color;
//pixel shader , no inputs needed
fixed4 frag(): SV_Target
{
return _Color;//just return it
}
ENDCG
}
}
}
'유니티 쉐이더 스타트업' 카테고리의 다른 글
[ 유니티 쉐이더 스타트업 ] 05 - 2 . Surface Shader를 활용한 텍스쳐 제어 (0) | 2023.08.07 |
---|---|
[ 유니티 쉐이더 스타트업 ] 05 - 1 . 기초적인 Surface Shader (0) | 2023.08.02 |
[ 유니티 쉐이더 스타트업 ] 03 - 2 . 렌더링 파이프 라인 - 레스터라이저와 프래그먼트 셰이더 (0) | 2023.07.24 |
[ 유니티 쉐이더 스타트업 ] 03 - 1 . 렌더링 파이프 라인 - 정점 조립과 버텍스 셰이더 (0) | 2023.07.23 |
[ 유니티 쉐이더 스타트업 ] 02 . 색과 빛의 기본원리 (0) | 2023.07.22 |