Shader 입문① 오브젝트의 색을 바꾸어 본다
Shader란?
음영 처리를 수행하는 프로그램
Shader를 쓰기 전에
에디터에 따라서는 Shader용의 extension가 있으므로 설치해 두면 편하게 Shader를 쓸 수 있습니다.
에디터에서 확인해 봅시다.
Unity에서 네 가지 Shader를 만들 수 있습니다.
Surface Shader
라이팅과 그림자를 쉽게 좋은 느낌으로 해주는 Shader
Unlit Shader
조명을 반영하지 않는 Shader
Shader 언어
HLSL
High Level Shading Language
의 약칭마이크로소프트에 의해 개발되어 DirectX에서 사용되어 왔다.
후술하는 Cg 언어와 유사하다.
Cg 언어
NVIDIA에 의해 개발되었습니다.
C 언어를 기반으로 한 문법.
GLSL
OpenGL Shading Language
의 약칭OpenGL에서 사용되었습니다.
C 언어를 기반으로 한 문법.
ShaderLab
Unity에서는 ShaderLab이라는 HLSL, Cg 언어를 랩한 것 같은 것으로 기술된다.
Shader 작성
오브젝트의 색을 파랗게 만드는 최소한의 Shader를 써 보자.
sample.shader
Shader "Custom/sample1"
{
SubShader
{
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
struct Input
{
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
o.Albedo = float4(0, 0, 1, 0);
}
ENDCG
}
}
해설
sample.shader
Shader "Custom/hoge/sample1" // Unity上から参照するパスのようなもの。Shader毎のグルーピングに使える
{
SubShader
{
CGPROGRAM // プログラムの内容はCGPROGRAM~ENDCGの中に記述していく
// #pragmaはどの関数がsurfaceなのかを明示している
#pragma surface surf Standard
struct Input
{
float2 uv_MainTex;
};
// surfaceシェーダー関数を定義している。関数名は自由につけることができる
void surf (Input IN, inout SurfaceOutputStandard o)
{
o.Albedo = float4(0, 0, 1, 0); // RGBAでBを1にしているのでオブジェクトは青くなる
}
ENDCG
}
}
Cg 언어로 처리 할 수있는 데이터 유형은 아래를 참조하십시오.
https://ko.wikipedia.org/wiki/Cg_(프로그래밍 언어)#데이터 유형
Properties
Shader는 속성을 정의할 수 있으며 Unity 편집기에서 편집할 수 있습니다.
sample.shader
Shader "Custom/hoge/sample1"
{
Properties {
// カラープロパティを定義。デフォルト値は黒
_Color("Color", Color) = (0, 0, 0, 0)
}
SubShader
{
// SubShader内でプロパティをメンバ変数として定義
fixed4 _Color;
void surf (Input IN, inout SurfaceOutputStandard o)
{
o.Albedo = _Color;
}
ENDCG
}
}
Color라는 속성이 설정되어 있네요.
정의할 수 있는 속성은 아래 참조
htps : // / cs. 글쎄, ty3d. 코 m/쟈/쿤 t/마누아 l/SL-P 로페 치에 s. HTML
Reference
이 문제에 관하여(Shader 입문① 오브젝트의 색을 바꾸어 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kouuuki/items/f7e5d3735df2aac321d8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)