Feel Physics Backyard

HoloLensの出張授業をする会社で、教材を開発しています

シェーダからおまじないを取り除いた裸のコードはシンプルだった

Unityのシェーダの勉強を始めました。

まず、シェーダを書くにはSublime TextShaderLangageというパッケージを入れるとSyntaxHighlightされて書きやすいです。

f:id:weed_7777:20171031142055p:plain

さて、最初に勉強するシェーダのコードはほとんどがおまじないだとわかりました。

例えば以下のコード。

Shader "Custom/MyShader" {
    SubShader{  // おまじない
        Tags{  // おまじない
            "RenderType" = "Opaque"  // おまじない
        }
        CGPROGRAM  // おまじない
        #pragma surface surf Lambert  // おまじない
        struct Input {  // おまじない
            float4 color : COLOR;  // おまじない
        };
        void surf(Input IN, inout SurfaceOutput o) {  // おまじない
            o.Albedo = half3(1.0, 0.5, 0.4);
        }
        ENDCG  // おまじない
    }
}

つまり、以下のようになります。

Shader "Custom/MyShader" {
    o.Albedo = half3(1.0, 0.5, 0.4);
}

halfというのはデータの型で、以下のページに一覧が載っています。

docs.unity3d.com


以下引用です:

高精度: float

float は最高精度の浮動小数点値で、通常のプログラミング言語の float と同じように一般な 32 ビットです。

ワールド空間位置、テクスチャ座標、複雑な関数を含むスカラー計算 (三角法、累乗法など) には、 たいてい 32 ビットの float が使用されます。

中精度: half

half は中精度の浮動小数点値で、一般に 16 ビットです (–60000 から +60000 の範囲で、小数点以下約 3 桁)。

Half は、ショートベクトル、方向、オブジェクト空間位置、HDR カラー に使用されます。

低精度: fixed

fixed は低精度で、固定小数点数です。一般的に 11 ビットで、–2.0 から +2.0 の範囲で、1/256 精度です。

固定精度は、標準カラー (一般的に標準テクスチャに保管されるので) とそれらの単純な制御に使用されます。

f:id:weed_7777:20171031171422p:plain

おお、これなら俺でもわかる。とにかくも一歩前進。