Unityシェーダーをボチボチ(2)

Half Lambert vs. Toon ShaderHalf Lambert vs. Toon Shader / Whitfield-In-World


pongeponge.hatenablog.jp
前の続き。

Properties色々

 シェーダーのプロパティをザラッと書いた。

Properties {
	[Header(Slider and Number)]
	_Slider("Slider sample", Range(-5, 5)) = 1
	_Float("Float sample", Float) = 0
	_Int("Int sample", Int) = 0

	[Header(Color and Vector)]
	_Color("Color sample", Color) = (0,1,1,1)
	_Vector("Vector sample", Vector) = (1,2,3,4)
		
	[Header(Texture)]
	_Texture2D("Texture2D sample", 2D) = "None" {}
	_TextureCube("TextureCube sample", Cube) = "None" {}
	_Texture3D("Texture3D sample", 3D) = "None" {}
}


 こう書くとシェーダーファイルのInspetorはこうなる。
f:id:pongeponge:20160409082133j:plain
下の方のPropertiesにプロパティ名と説明が一覧になって出てる。


 もう一つ、シェーダーをアタッチしてるMaterialでは、こう表示される。
f:id:pongeponge:20160409082401j:plain


 注意した方がいいのはこのあたり。

  • Range と Float プロパティーでは “13.37” のように 1 つの数字です。
  • Color と Vector プロパティーでは “(1, 0.5, 0.2, 1)” のように括弧()で括る 4 つの数字です。
  • テクスチャ( 2D , Cube )ではデフォルト値は空の文字列か内蔵のデフォルトテクスチャ: “ white ”、“ black ”、“ gray ”、“ bump ”

 「floatなんだから1.2fっと」と安易な気持ちで書くとエラーが出る(出た&ハマった)
fは死の存在なので、fは書いてはいけない。
f死すべし慈悲はない。


Unity - マニュアル: ShaderLab :プロパティー
Unity - スクリプトリファレンス: MaterialPropertyDrawer

Subshader

 シェーダーの中身とも言うべきSubshaderはこんな感じ。

Subshader { 
	[Tags]
	[CommonState]
	Passdef
	[Passdef ...]
}


 この中に処理をグリグリと書き込むわけです。
が。
正直ちょっとめんどくさい部分がありますよね。


Unity - マニュアル: ShaderLab :サブシェーダー

Tags

 どれを先に描画するとか透明より先にとか……実感を持ったことないので、わからん部分。
とりあえずまとめておく。


Queueタグ
タグ名効果
Background他より前にレンダリング
Geometryデフォルト値
AlphaTest透過情報を持ったものをαテストするらしい?
Transparentガラスやパーティクルはこれ
Overlay最後にレンダリングする


RenderTypeタグ
タグ名効果
Opaque不透明。普通はこれ
Transparentほとんどの部分的に透過なシェーダー(Transparent、パーティクル、フォント、Terrain 追加パスシェーダー)
TransparentCutoutマスキングされた透過シェーダー(Transparent Cutout、2 パス植生シェーダー)
BackgroundSkybox シェーダー
OverlayGUITexture、ハロー、フレアシェーダー
TreeOpaqueTerrain エンジン Tree の樹皮
TreeTransparentCutoutTerrain エンジン Tree Leaves
TreeBillboardTerrain エンジンビルボードの Tree
GrassTerrain エンジンの Grass
GrassBillboardTerrain エンジンビルボードの Grass


DisableBatchingタグ
タグ名効果
Trueドローコール無効?
Falseデフォルト値
LODFadingドローコール無効、Level of detailのスムーズな補完?


ForceNoShadowCastingタグ
タグ名効果
True影を作らない


IgnoreProjectorタグ
タグ名効果
Trueプロジェクターの影響を受けない?


CanUseSpriteAtlasタグ
タグ名効果
Falseスプライトやアトラスでシェーダーが動かない場合Falseに設定


PreviewTypeタグ
タグ名効果
Sphereデフォルト値。球でプレビュー
Plane板でプレビュー
SkyboxSkyboxでプレビュー


 よくわからない時は "RenderType"="Opaque"と書いて、後は放置でいいかな?


Unity - マニュアル: ShaderLab :サブシェーダータグ
Unity - マニュアル: Replaced Shaders でのレンダリング


何か多くなってきたのでこのへんで。


ゲームアプリの数学 Unityで学ぶ基礎からシェーダーまで

ゲームアプリの数学 Unityで学ぶ基礎からシェーダーまで