Unity sharder教程-第三課:実践!同じsharer、複数のmaterial.

3071 ワード

この記事の最初のアドレス:http://98jy.net/article/18
もっともっと適時な文章は98教育について教えてください.
この授業は私達が学んだPropties知識を利用してコードを変え始めました.一つのsharerで下記のようないくつかの異なる球体を実現します.
ステップ:
  • MonoDevelopを使ってsharerファイルを開く
  • 保証Proptiesの中身は以下の通り
  • _EmissiveColor ("Emissive Color", Color) = (1, 1, 1, 1)
    _AmbientColor ("Ambient Color", Color) = (1, 1, 1, 1)
    _SomeValue ("Coefficient", Range(0, 10)) = 2.5
  • コードの中の〓pragmaを見つける surface surf Lambertの一行は、車をバックにして次の3行のコード
  • float4 _EmissiveColor;
    float4 _AmbientColor;
    float _SomeValue;
  • 元ここにいたものを一掃する
  • sampler2D _MainTex;
  • 見つけた方法void surf(Input IN,inout SurfaceOutput o)は、中身を
  • float4 c = pow((_EmissiveColor + _AmbientColor), _SomeValue);
    	
    o.Albedo = c.rgb;
    o.Alpha = c.a;
    あなたが作った最後の内容は私と同じです.ここが最後のシャダコードです.
    Shader "myDiffuse"
    {
    	Properties
    	{
    		_EmissiveColor ("Emissive Color", Color) = (1, 1, 1, 1)
    		_AmbientColor ("Ambient Color", Color) = (1, 1, 1, 1)
    		_SomeValue ("Coefficient", Range(0, 10)) = 2.5
    	}
    	
    	SubShader
    	{
    		Tags { "RenderType"="Opaque" }
    		LOD 200
    		
    		CGPROGRAM
    		#pragma surface surf Lambert
    		
    		float4 _EmissiveColor;
    		float4 _AmbientColor;
    		float _SomeValue;
    		
    		struct Input
    		{
    			float2 uv_MainTex;
    		};
    		
    		void surf (Input IN, inout SurfaceOutput o)
    		{
    			float4 c = pow((_EmissiveColor + _AmbientColor), _SomeValue);
    			
    			o.Albedo = c.rgb;
    			o.Alpha = c.a;
    		}
    		ENDCG
    	}
    	FallBack "Diffuse"
    }
    ここに行けば、私たちはsharerを保存することができます.ユニティに戻る
    Unityに戻ったら、myDiffuseという名前のmaterialを選択して、キーボードのCtrl+Dを押して、materialをコピーして、myDiffuse 2と名前を変えます.同じように、myDiffuse 3、myDiffuse 4をコピーします.この方式は、同じsharerを使って異なる四つのmaterialを作ってきます.
    Sceneパネルに4つのスフィアを満タンにしていないと、今追加できます.この四つのボールをそれぞれ私たちのマイディフューズ、マイディフューズ2、マイディフューズ3、マイディフューズ4のいくつかのmaterialに入れます.
    任意のmaterialを選択すると、Inspector上でEmissive ColorまたはAmbint Colorを選択できます.スライダーをドラッグして数値を変更することもできます.変更する過程で、Scene中の物体はあなたの変化に従って表示されます.同時に、私達はひとつのsharerを書いて4つの物体の上で使うだけですが、一つの物体を変えるmaterialはそれとは違ったmaterialの物体を使うことに影響しません.つまり、私達の属性の中の値は、実はmaterialの中に存在します.私たちが関連する値を変える時、unityはmaterial対応のファイルに値を保存して、実行する時、sharderの必要なパラメータとしてsharerに送ります.これによって、私たちはsharderだけを書きましたが、送るパラメータが違っていますので、物体の表現も違っています.
    上に変更したコードの説明について
    Propertiesブロックで新しい属性値を宣言すると、ユーザーにInspectorパネルを通じて内部値を調整する方法を提供します.各変数は最後のユーザー修正の結果を記憶します.しかし、コードがSub Shader{}のブロックにこれらの値を使用する必要がある場合、同じ名前の変数をこのブロックで同時に宣言しなければならない.この方法では、Inspector上の値と最後のコードの値をリンクして、全体を形成する.
    Sub Shader{}ブロックでこれらの変数を宣言すると、surf()法でこれらの変数を使用することができます.surf()方法では、NVidiaのcg言語で提供される方法であり、unity sharderはcg中の方法を用いることができ、この方法は他の言語のpowと似ていて、「指定された数字の指定された乗を返す」という方法である.
    付録:
    Unityはいくつかのファイルをテキスト型に保存する方法を提供しています.この方法を利用してmaterialファイルの内容を確認できます.
    ステップ:
  • メニューEdit𞓜Project Settings Editorは、次のようなパネル
  • このパネルのAssset Serializationでは、Modeが点開し、Force Text
  • プログレスバー完了タスク
  • ハードディスク上に私達のmyDiffuseのファイルを見つけました.(以.mat)最後にテキストファイルを開くソフトウェアで開けます.(書写本、Ultraedit、Notepad++全部できます.)
  • 中身を見て、私のところは下の図
  • 図の明るいところに私たちが選んだ色の値が見えます.