Shader 입문① 오브젝트의 색을 바꾸어 본다

6887 단어 ShaderUnity

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

좋은 웹페이지 즐겨찾기