簡単なシェーダ
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 } } } }
光源を考慮して、マテリアルの「拡散反射色」「環境光色」「鏡面反射色」を指定します。
また、テクスチャを指定することでテクスチャマッピングを行います。
詳しくは「マテリアルの作成」を参照。
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は頂点カラー(光源を考慮している場合は光源も加味されたもの)。
最終更新時間:2013年11月22日 21時18分52秒