トップ 一覧 検索 ヘルプ RSS ログイン

unity_shader_basicの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!簡単なシェーダ
Unityでは「ShaderLab」という独自フォーマットで記載されます。
以下、参考サイト。
 http://marupeke296.com/UNI_S_No2_ShaderLab.html
 http://docs-jp.unity3d.com/Documentation/Components/SL-Material.html

一番参考になるのは、標準で内蔵されているShaderのソース。
 http://unity3d.com/unity/download/archive/
より、「Built-in shaders」をダウンロードして解凍。

シェーダは、
:サーフェイス シェーダ:シェーダがライトや影の影響を受ける必要がある場合に使用。
:頂点シェーダ/フラグメントシェーダ(ピクセルシェーダ):シェーダがライトの影響を受ける必要がない場合に使用。
:固定関数シェーダ:プログラマブルシェーダを必要としない古いハードウェアのための記述。

の3つが存在します。

!!シェーダーの新規作成

Projectウィンドウ内で右クリックし、ポップアップメニューで「Shader」を選択すると新規生成できます。
MaterialsでShaderを割り当てる際に「Custom」の中に作成したものが配置されます。
Shaderのソースで「Shader "Custom/simpleShader"」のようにしている命名がそのままメニューにも反映されています。

!!シェーディングをしない指定色だけで塗りつぶす
 Shader "Custom/simpleShader" {
   Properties {
     _Color ("Main Color", Color) = (1.0, 1.0, 1.0 ,1.0)
   }
   SubShader {
     Pass {
        Color [_Color]
        Lighting Off
     }
   }
 }
この場合は、光源を考慮せずに単一の白色で塗りつぶされます。

!!光源の反映、スペキュラ有効化
 Shader "Custom/myShader" {
   Properties {
     _Color ("Main Color", Color) = (1, 1, 1, 0)
     _SpecColor ("Spec Color", Color) = (1, 1, 1, 1)
     _Shininess ("Shininess", Range (0.01, 1)) = 0.7
     _MainTex ("Base (RGB)", 2D) = "white" {}
   }
   SubShader {
     Pass {
        ZWrite On
        SeparateSpecular On
        Lighting On
        Material {
          Diffuse [_Color]
          Ambient [_Color]
          Shininess [_Shininess]
          Specular [_SpecColor]
        }
        SetTexture [_MainTex] {
          Combine texture * primary DOUBLE, texture * primary
        }
     }
   }
 }
光源を考慮して、マテリアルの「拡散反射色」「環境光色」「鏡面反射色」を指定します。
また、テクスチャを指定することでテクスチャマッピングを行います。
詳しくは「[[マテリアルの作成|unity_script_create_material]]」を参照。

!Properties内
使用する変数宣言。

:_Color:基本色
:_SpecColor:鏡面反射色
:_Shininess:鏡面反射のサイズ値
:MainTex:テクスチャ情報

!SubShader のPass内

:ZWrite:Zバッファへの書き込みを行うかどうか
:SeparateSpecular:鏡面反射を有効化するか
:Lighting:光源をシェーディング表現で考慮するか
:Material:マテリアルの各種情報を指定
:SetTexture:テクスチャ指定時の定型文。
 SetTexture [_MainTex] {
   Combine texture * primary DOUBLE, texture * primary
 }
については「texture * primary DOUBLE」がRGBの計算、「texture * primary」がアルファの計算になります。
「DOUBLE」は2倍にする処理。
textureはテクスチャ色そのもの、primaryは頂点カラー(光源を考慮している場合は光源も加味されたもの)。

----
{{lastmodified}}