583 Views
July 15, 17
スライド概要
2016/10/30に開催されたUnity道場の資料です。
講師:小林 信行(ユニティ・テクノロジーズ・ジャパン合同会社)
リアルタイム3Dコンテンツを制作・運用するための世界的にリードするプラットフォームである「Unity」の日本国内における販売、サポート、コミュニティ活動、研究開発、教育支援を行っています。ゲーム開発者からアーティスト、建築家、自動車デザイナー、映画製作者など、さまざまなクリエイターがUnityを使い想像力を発揮しています。
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編 Unity Technologies Japan合同会社 コミュニティエバンジェリスト 小林信行 2016/10/30
本コースを受講することで得られる知見 本コースは、「ShaderForgeを使ってシェーダーを学ぶ」のが目的ですので、 ShaderForgeの全機能を紹介するものではありません。 本コースでは、ShaderForgeを使ってカスタムライティングについて学びます。 実際にシェーダーを組んでいく上で、よく使われるノードの機能や、しばしば 使われるパターンを見ていきましょう。最後にそれらの知識を元に、トゥーン シェーダーのサンプルをいくつか組んでみましょう。 ShaderForgeの基本的な操作については、『ShaderForge 101』のスライドを 参照してください。
カスタムライティングを ノードで組んでみよう
シェーダーの準備 SHADER FORGE v1.27 What kind of shader do you want to forge? This will simply affect the initial configuration of the shader. It will not "lock-in" any features Unlit Lit (PBR) Lit (Basic) Custom Lighting Sprite Particle (Additive) Particle (Alpha-Blended) Particle (Multiplicative) Sky Post-Effect Custom Lighting is set up with a simple example of how you can create your own lighting models. The initial setup is a Blinn-Phong shader. Back Custom Lightingを選択する 新規作成するとサンプル ノードが設定されている ので、不要なものを削除 する。
ライトとライトカラーのみが反映するシェーダー CustomLighting01 Created using SHADER FORGE v1.27 - http://u3d.as/6cc // Attenuate and Color Multiply Light Color RGB Light Atten. Main Diffuse Diffuse Power Specular Gloss Normal Emission Transmission Light Wrapping Diffuse Ambient Light Specular Ambient Light Diffuse Ambient Occlusion Specular Ambient Occlusion Custom Lighting Opacity Opacity Clip Refraction Outline Width Outline Color Vertex Offset DX11 Displacement DX11 Tessellation
ライトとライトカラーのみが反映するシェーダー Light Color RGB Light Colorノード レンダリング対象となるカレント ライトのカラーを取得する。 Light Atten. Light Attenuationノード ライトの減衰を取得する。 このノードはライトのフォールオフ とシャドウを同時に取得する。
ライトとライトカラーのみが反映するシェーダー
最も単純なLambertシェーダーを作ってみよう Normal Dir. N Perturbed Dot Positive Multiply Light Dir. L // Attenuate and Color Created using SHADER FORGE v1.27 - http://u3d.as/6cc Multiply Light Color RGB Light Atten. CustomLighting02 Main Diffuse Diffuse Power Specular Gloss Normal Emission Transmission Light Wrapping Diffuse Ambient Light Specular Ambient Light Diffuse Ambient Occlusion Specular Ambient Occlusion Custom Lighting Opacity Opacity Clip Refraction Outline Width Outline Color Vertex Offset DX11 Displacement DX11 Tessellation
最も単純なLambertシェーダーを作ってみよう Normal Dir. N Perturbed Light Dir. L Dot Standard Standard Positive Negative Abs Normalized Normal Directionノード ワールド空間でのメッシュの法線 方向を出力する。チェックをつけ るとノーマルマップを考慮する。 Light Directionノード レンダリング対象となるカレント ライトの方向を出力する。 Dot Productノード AとBの2つのベクトルの内積を とる。
内積 (Dot Product) とは? A θ B A・B = |A||B| cosθ このオレンジ部の長さは、|A|cosθ 特に、Aが長さ1の時、オレンジ部の長さはcosθとなる。 内積とは、2つのベクトルがなす角度の状態を示すスカラー値のこと。 特に2つのベクトルがノーマライズされている場合には、内積が即、 2つのベクトルの内角のcosθの値となっている。
内積 (Dot Product) とは? 内積がマイナスは、 「光が当たっていない」 ことを示している。 θ=135° ⇒ 内積 -0.5 θ=90° ⇒ 内積 0 θ=45° ⇒ 内積 0.5 θ=180° ⇒ 内積 -1 θ=0° ⇒ 内積 1 法線の方向 θ ライトの方向 上図のように、ライトベクトルと 法線ベクトルの内積を取ること で、光の当たり具合を0~1で 表現することができる!
内積 (Dot Product) とは? Dot Product Outputs the Dot product between [A] and [B]. Essentially; for two normalized vectors, it outputs how far they point away from each other. If they point in the same direction, it outputs 1, if they are perpendicular to each other, it outputs 0, if they point in opposite directions, it outputs -1. Dropdown selections: Standard - Regular Dot Product Positive - Makes all negative values 0 Negative - Makes all positive values 0 Abs - Makes all negative values positive Normalized - Outputs in the range 0 to 1 instead of -1 to 1 The graph below show how the different modes behave when using two normalized vectors. On the X axis you have the angle between them, on the Y axis you have the output value: 0.5 0.5 0.5 0.5 0.5 0° 45° 90° 135° 180° 0° 45° 90° 135° 180° 0° 45° 90° 135° 180° 0° 45° 90° 135° 180° 0° 45° 90° 135° 180° -0.5 -0.5 -0.5 -0.5 -0.5 -1 Standard -1 Positive -1 Negative -1 Abs -1 Normalized Dot Productノード内の設定で、出力される値域が変わるので注意!
「法線方向との内積」でよく使われるベクトル Light Direction L Outputs the direction to the current light being rendered View Direction V Outputs the direction from the current part of the geometry to the camera, in world space Half Direction H Outputs the half-direction. This is the direction that points halfway between the view and the light vector, which is commonly used in the blinn-phong specular model
「法線方向との内積」でよく使われるパターン Normal Dir. N Perturbed Dot Standard Light Dir. L Normal Dir. N Perturbed Dot Standard View Dir. V One Minus Normal Dir. N Perturbed Dot Standard Half Dir. H Power Val Exp Value 10 Light Directionノードと内積 をとって、ライティングの状 態を得る。 View Directionノードと内積をとっ て、One Minusで反転し、リムライト の状態を得る。 Half Directionノードと内積をとって、 Powerノードで絞り込み、スペキュラ (グロッシイ)反射の状態を得る。
Half Lambertを作ってみよう Half Lambertとは、通常-1~1の範囲で示されるライティングの状態を、0~1の範囲にリマップし直 すことです。結果、陰影の入り方が柔らかめになります。 Half Lambertの作成はいくつかありますが、ここでは「ライティング結果に、0.5を掛けて、0.5を足す」 という手法をとります。 Half Lambertの場合 Lambertの場合
Half Lambertを作ってみよう Normal Dir. N Perturbed Dot Standard Multiply Light Dir. L // Attenuate and Color Multiply Light Color RGB Light Atten. CustomLighting04 Multiply Add Value 0.5 Main Diffuse Diffuse Power Specular Gloss Normal Emission Transmission Light Wrapping Diffuse Ambient Light Specular Ambient Light Diffuse Ambient Occlusion Specular Ambient Occlusion Custom Lighting Opacity Opacity Clip Refraction Outline Width Outline Color Vertex Offset DX11 Displacement DX11 Tessellation
Blinn-Phongモデルを作ってみよう Lambertモデルに、スペキュラ反射を足すことで、Blinn-Phongスペキュラ反射モデルが作成できます。 Blinn-Phongモデルの場合、スペキュラ反射の計算は、ハーフベクトルとノーマルベクトルの内積より 求めます。 Blinn-Phongの場合 Lambertの場合
Blinn-Phongモデルを作ってみよう Half Dir. H Dot Standard Power Specular_Power Slider 15 Min 0 30 Max Normal Dir. N Perturbed // Lambert Dot Positive Light Dir. L Multiply // Attenuate and Color Multiply Light Color RGB Light Atten. CustomLighting05 Add スペキュラの計算 Main Diffuse Diffuse Power Specular Gloss Normal Emission Transmission Light Wrapping Diffuse Ambient Light Specular Ambient Light Diffuse Ambient Occlusion Specular Ambient Occlusion Custom Lighting Opacity Opacity Clip Refraction Outline Width Outline Color Vertex Offset DX11 Displacement DX11 Tessellation
Blinn-Phongモデルを作ってみよう Power E + LMB Texture Texture 2D UV MIP Tex RGB R G B A Default White Normal map Power Val Exp Value 3 Outputs the power [Val] ^ [Exp] Powerノード 値の累乗を求める。 この例の様に、明るい部分を絞り込むのに使われる。 Slider Allows you to easily tweak a value between a min and a max value. Is also exposed to the inspector Specular_Power Slider 15 Min 0 30 Max
Blinn-Phongモデルを改造してみよう Blinn-Phongモデルに、ノーマルマップとキューブマップによる環境マッピングを追加してみましょう。
Blinn-Phongモデルを改造してみよう Created using SHADER FORGE v1.27 - http://u3d.as/6cc Environment Cubemap DIR None (Cubemap) RGB MIP R G B Select A Positive X UV Coord. U V Base Texture 2D UV MIP Tex RGB R G B A Default White Normal map Normal Texture 2D UV MIP Tex RGB R G B A Default Bump Normal map キュ ー ブ マ ッ プ に よ る 環 境 マ ッ ピ ン グ ノーマルマップ Half Dir. H Dot Power Specular_Power Slider 1.5 Min 1 5 Max Multiply // Lambert Normal Dir. N Perturbed Dot Positive Exp Exp 2 Multiply Add Multiply Light Color RGB Light Dir. L Light Atten. // Attenuate and Color Multiply CustomLighting06 Main Diffuse Diffuse Power Specular Gloss Normal Emission Transmission Light Wrapping Diffuse Ambient Light Specular Ambient Light Diffuse Ambient Occlusion Specular Ambient Occlusion Custom Lighting Opacity Opacity Clip Refraction Outline Width Outline Color Vertex Offset DX11 Displacement DX11 Tessellation
Half Lambertで明るくする 陰が強くかかり過ぎているようなので、Half Lambertに切り替えることで明るくしてみましょう。 今回は別のやり方でやってみます。
Half Lambertで明るくする CustomLighting07 UV Coord. U V Environment Cubemap DIR None (Cubemap) RGB MIP R G B Select A Positive X // Specular Power Half Dir. H Dot Specular_Power Slider 1.5 Min 1 5 Max Base Texture 2D UV MIP Tex RGB R G B A Default White Normal map Multiply Normal Texture 2D UV MIP Tex RGB R G B A Default Bump Normal map // Lambert Normal Dir. N Perturbed Dot Normalized Light Dir. L Exp Exp 2 Multiply Multiply Add Light Color RGB Light Atten. // Attenuate and Color Multiply Normalized に変えることで、 Half Lambertに変更できる。 Main Diffuse Diffuse Power Specular Gloss Normal Emission Transmission Light Wrapping Diffuse Ambient Light Specular Ambient Light Diffuse Ambient Occlusion Specular Ambient Occlusion Custom Lighting Opacity Opacity Clip Refraction Outline Width Outline Color Vertex Offset DX11 Displacement DX11 Tessellation
トゥーンシェーダーを 作ってみよう!
トゥーンシェーダーとは? トゥーンシェーダーは、ライティングモデルを元に、光が当たっている場所と当たっていない場所を段階 を追って変化させるのではなく、明色と陰色のふたつにカラーを別けてしまう技法のことです。 DCCツールでは、主にランプシェーダーから作りますが、今回はHalf Lambertモデルから作ってみま しょう。 Shading Map Ramp Shader
Half Lambertを用意し、不要なノードを消す Normal Dir. N Perturbed Dot Standard Multiply Light Dir. L // Attenuate and Color Multiply Light Color RGB Light Atten. CustomLighting04 Multiply Add Value 0.5 不要なノードは 消してしまいます 不要なノードは 消してしまいます Main Diffuse Diffuse Power Specular Gloss Normal Emission Transmission Light Wrapping Diffuse Ambient Light Specular Ambient Light Diffuse Ambient Occlusion Specular Ambient Occlusion Custom Lighting Opacity Opacity Clip Refraction Outline Width Outline Color Vertex Offset DX11 Displacement DX11 Tessellation
Shading Map用のテクスチャを割り当てる Normal Dir. N Perturbed Dot Standard Multiply // Halt Lambert Add Light Dir. L Value 0.5 Toon01 One Minus Comp. Mask In RR FallOff Texture 2D UV MIP Tex RGB R G B A Default White Normal map マスクの反転 マスクをUVとして、テクスチャを貼る
Shading Map用のテクスチャを割り当てる One Minus Comp. Mask FallOff Texture 2D In RR UV MIP Tex RGB R G B A Default White Normal map One Minusノードでマスクを反転します。 テクスチャ座標系では、左が0で、右が1です が、ライティングモデルの値そのままだと、 明るい方が1で、暗いほうが0なってますの で、マスク反転することでテクスチャ座標系 と合わせます Component MaskノードでRRの数値を取り 出し、UV座標とします。 マスクからは、スカラーで各頂点の明るさの レベルが来ていますので、それをベクトルの 各要素に見立て、RRとして取り出すことで、 UV座標とします。 取り出したUV座標を元に、各頂点のカラー をシェーディングマップより割り出します。
ランプシェーダーを作ってみよう! ランプシェーダーも、Half Lambertモデルから作ることができます。 その際、StepノードとLerpノードの2つのノードを使用します。 Stepノードで2値のマスクを作成し、そのマスクに従って、明色と陰色を塗り分けます。 // Ramp mask Step (A <= B) Step_Level Slider 0.5 Min 0 1 Max Lerp Step (A<=B)ノード AがBと同じかそれ以下の場合、 1を出力。それ以外は0を出力する。 2値化の閾値を設定するノード Lerpノード マスク値として与えられるTに応じて、 A、Bを混ぜるノード
ランプシェーダーを作ってみよう! Normal Dir. N Perturbed Dot Standard Multiply // Halt Lambert Add Light Dir. L Value 0.5 Toon02 // Ramp mask Step (A <= B) Step_Level Slider 0.5 Min 0 1 Max UV Coord. U V Base_Normal Texture 2D UV MIP Tex RGB R G B A Default White Normal map Color_Normal Color 0.9 0.8 0.5 1 Base_Shade Texture 2D UV MIP Tex RGB R G B A Default White Normal map Color_Shade Color 0.6 0.3 0 1 Multiply Lerp Multiply Main Diffuse Diffuse Power Specular Gloss Normal Emission Transmission Light Wrapping Diffuse Ambient Light Specular Ambient Light Diffuse Ambient Occlusion Specular Ambient Occlusion Custom Lighting Opacity Opacity Clip Refraction Outline Width Outline Color Vertex Offset DX11 Displacement DX11 Tessellation
アンビエントカラーに反応するようにしよう シェーダーをアンビエントカラーに反応するようにしておくと、シーン全体にカラーを馴染ませるのが やりやすくなります。 アンビエントカラーの設定は、LightingウィンドウのSceneタブでおこないます。 Lerp Multiply Ambient Light RGB Lighting Object Scene Lightmaps Environment Lighting Skybox None (Material) Sun None (Light) Ambient Source Color Ambient Color Ambient Intensity Ambient GI Realtime Reflection Source Skybox Resolution 128 Compression Auto Reflection Intensity Reflection Bounces Ambient Lightノード シェーダーがレンダリングされるシーン のアンビエントライトを出力する アンビエントカラーの設定
アンビエントカラーに反応するようにしよう Normal Dir. N Perturbed Dot Standard Multiply // Halt Lambert Add Light Dir. L Value 0.5 // Ramp mask Step (A <= B) Step_Level Slider 0.5 Min 0 1 Max UV Coord. U V Base_Normal Texture 2D UV MIP Tex RGB R G B A Default White Normal map Color_Normal Color 0.9 0.8 0.5 1 Base_Shade Texture 2D UV MIP Tex RGB R G B A Default White Normal map Color_Shade Color 0.6 0.3 0 1 Multiply Lerp Multiply Lerp Ambient Light RGB s_AmbientLigh Switch Off On Multiply 例では、Switchノードを使って、 アンビエントライトの影響を ON/OFFできるようにした。 Main Diffuse Diffuse Power Specular Gloss Normal Emission Transmission Light Wrapping Diffuse Ambient Light Specular Ambient Light Diffuse Ambient Occlusion Specular Ambient Occlusion Custom Lighting Opacity Opacity Clip Refraction Outline Width Outline Color Vertex Offset DX11 Displacement DX11 Tessellation
アンビエントカラーに反応するようにしよう Ambient Source Color Ambient Color Ambient Intensity 1.38 アンビエントライトの影響 をONにした場合
FallOffをランプシェーダーのマスクにしてみよう FallOffをランプシェーダーのマスクとして使うことで、さらに複雑な明色と陰色のブレンドが可能に なります。 FallOff用のテクスチャはPhotoshopなどで簡単に作ることが出来ますので、いろいろと試してみると いいでしょう。 Fallout03 128x1 RGB 16 bit 510 B FallOff用のテクスチャの例 グレースケールで作成する
FallOffをランプシェーダーのマスクにしてみよう Normal Dir. N Perturbed Dot Standard Multiply // Halt Lambert Add Light Dir. L Value 0.5 FallOff_Position Slider 1 Min 0.1 3 Max Power Clamp 0-1 // Mask for Lerp of T Comp. Mask FallOff Texture 2D UV MIP Tex RGB R G B A Default White Normal map UV Coord. U V Base_Normal Texture 2D UV MIP Tex RGB R G B A Default White Normal map Color_Normal Color 0.9 0.8 0.5 1 Base_Shade Texture 2D UV MIP Tex RGB R G B A Default White Normal map Color_Shade Color 0.6 0.3 0 1 Multiply Lerp Multiply Ambient Light RGB s_AmbientLigh Switch Off On Multiply Main Diffuse Diffuse Power Specular Gloss Normal Emission Transmission Light Wrapping Diffuse Ambient Light Specular Ambient Light Diffuse Ambient Occlusion Specular Ambient Occlusion Custom Lighting Opacity Opacity Clip Refraction Outline Width Outline Color Vertex Offset DX11 Displacement DX11 Tessellation
FallOffをランプシェーダーのマスクにしてみよう FallOffをランプシェーダーの マスクにしてみた例 この面が明色と 陰色の中間に なっている
FallOffをマスクに使う時のTips FallOffを使っている時に、 へそがでる場合 このような場合は、FallOffに 使用しているテクスチャの WrapモードをClampにする とよい。
トゥーンライン(アウトライン) を設定してみよう
マテリアルベースのアウトラインを表示する Ambient Light RGB Line_Color Color 0.5 0.5 0.5 1 Multiply Comp. Mask // Outlineの入り抜き調整Sampler Outline_sampler Texture 2D UV MIP Tex RGB R G B A Default White Normal map Value 0.001 Outline_Width Slider 0 Min 0 10 Max Multiply Main Diffuse Diffuse Power Specular Gloss Normal Emission Transmission Light Wrapping Diffuse Ambient Light Specular Ambient Light Diffuse Ambient Occlusion Specular Ambient Occlusion Custom Lighting Opacity Opacity Clip Refraction Outline Width Outline Color Vertex Offset DX11 Displacement DX11 Tessellation アウトラインを設定するのは、とても簡単です。 Mainノードの Outline Width に数値を入力すると、 Outline Color にカラーが接続できるようになります。 これだけで、基本のアウトラインが表示されます。
「トゥーンライン」に見る、処理系による線表示の違い ノーマル反転によるマテリアルベースのトゥーンライン表示 カメラベースのポストエフェクトによるトゥーンライン表示 アウトライン 交差線は出ない クリー ス線 は出ない アウトライン 交差線 クリー ス線 ノーマル反転によるマテリアルベースのトゥーンライン(アウ トライン)表示は軽い分、クリース線や交差線は出ない。 またハードエッジに弱い等の弱点があるが、処理は軽く、 線の入り抜きなどの制御もしやすい。 古いハードウェアでも対応できるので、互換性が高い。 イメージエフェクトによるトゥーンラインの表示では、 アウトラインだけでなく、クリース線や交差線も表示 できる一方で、線の入り抜きなどの制御はしにくい。 またポストエフェクトとして処理される分、モバイル では負荷が高くなる可能性がある。
トゥーンシェーダーの実例として 「ユニティちゃんトゥーンシェーダー」 を見てみよう! トゥーンシェーダーとは、NPR系シェーダーの系譜としては、「あるオブジェクトへの光の当たり具合に 基づいて、そのオブジェクトを指定のカラーで塗り分けるシェーダー」にあたります。 ここでは「ユニティちゃんトゥーンシェーダー」を例に、その仕組みを見てみましょう。
ユニティちゃんトゥーンシェーダーとは? UnityChanToonShader ユニティちゃんトゥーンシェーダー セル風3DCGアニメーションの制作現場 での要望に応える形で設計 ... Version: 1.0.1 リリース日: 2016.09.06 カテゴリー: 3D 形式: zip DOWNLOAD http://unity-chan.com/download/index.php 「ユニティちゃんトゥーンシェーダー」は、セル風3DCG アニメーションの制作現場での要望に応えるような形で 設計された、映像志向のトゥーンシェーダーです。 特に影の制御に重点が置かれた設計になっています。 アウトラインの入り抜き調整は、テクスチャで指定可能 必ず影にしたい場所をテクスチャで指定可能 ノーマル色と陰色の混合部のぼけ足を調整可能 ライトの位置を変えずに影色の支配域を変更可能 モバイル環境/WebGLでも動作します Shader Forgeで確認できる、ノードベースで実装されています ⇒目的に合わせて、カスタマイズができます! アウトラインの 入り抜き調整 必ず影にしたい部分 の指定 モバイルでも表示可能 ライトの位置を変 えずに影色の支配 域を変更 ノーマル色と影色の 混合部のボケ調整 ノーマルマップを 影モデルに反映
ユニティちゃんトゥーンシェーダーのノードグラフ UV Coord. U V // 通常Color用テクスチャ BaseTexture Texture 2D UV MIP Tex RGB R G B A Default White Normal map // Normalマップを影に反映させるスイッチする isKage_Normal Switch Off On Normal Map Texture 2D UV MIP Tex RGB R G B A Default Bump Normal map Normal Dir. N Perturbed Normal Dir. N Perturbed Light Dir. L Dot Standard // HalfLambert Remap (Simple) From -1 1 To 0 1 // 影Color用テクスチャ KageTexture Texture 2D UV MIP Tex RGB R G B A Default White Normal map // Inverce for UV One Minus // 強制的に影にしたい部分をテクスチャで指定する setKage Texture 2D UV MIP Tex RGB R G B A Default White Normal map One Minus Comp. Mask R Mix_KageTexture Slider 0.5 Min 1.00 .999 Max Mix_BaseTexture Slider 0.49 Min .000 .999 Max Value 1 Value 0 Remap Clamp 0-1 Lerp Multiply Ambient Light RGB Line_Color Color 0.5 0.5 0.5 1 // Outlineの入り抜き調整Sampler Outline_sampler Texture 2D UV MIP Tex RGB R G B A Default White Normal map Outline_Width Slider 0 Min 0 10 Max Value 0.001 Multiply Comp. Mask R Multiply 光の当たり具合を求める 通常色と陰色を割り当てる 陰部分のマスクの調整 アウトラインの調整 トゥーンシェーダーとは、 「あるオブジェクトへの光の当たり 具合に基づいて、そのオブジェクト を指定のカラーで塗り分ける シェーダー」である。 Main Diffuse Diffuse Power Specular Gloss Normal Emission Transmission Light Wrapping Diffuse Ambient Light Specular Ambient Light Diffuse Ambient Occlusion Specular Ambient Occlusion Custom Lighting Opacity Opacity Clip Refraction Outline Width Outline Color Vertex Offset DX11 Displacement DX11 Tessellation
光の当たり具合を求めるノードパターン Normal Directionノード ワールド空間でのメッシュの法線方向 を出力する。チェックをつけるとノーマ ルマップを考慮する。 Light Directionノード レンダリング対象となるカレントライト の方向を出力する。 Normal Dir. N Perturbed Light Dir. L Dot Standard Dot Productノード AとBの2つのベクトルの内積をとる。 「内積」は、2つのベクトルが構成する 角度の開き具合を表している。 上図のように、ライトベクトルと法線ベクトルの内積を取ることで、 光の当たり具合を、 0(光が全く当たっていない) ~1(光が真正面から当たっている) の範囲で表現することができる!
マスク値を元に通常色と陰色を割り当てるノードパターン // 通常Color用テクスチャ BaseTexture Texture 2D UV MIP Tex RGB R G B A Default White Normal map // 影Color用テクスチャ KageTexture Texture 2D UV MIP Tex RGB R G B A Default White Normal map Lerp 通常色 陰色 「光の当たり具合」が マスク値Tとして接続される Lerpノード マスク値として与えられるTに応じて、 A、Bを混ぜるノード ※「光の当たり具合」をどのように マスク値として評価するかによって トゥーンカラーシェーダーごとの特徴が出る。
Inspector body Shader UnityChan/ToonShader_rim BaseTexture Tiling X 1 Y 1 Offset X 0 Y 0 Select Mix_BaseTexture 0.314 KageTexture Tiling X 1 Y 1 Offset X 0 Y 0 Select Mix_KageTexture 0.635 setKage (Texture) Tiling X 1 Y 1 Offset X 0 Y 0 Select Normal Map Tiling X 1 Y 1 Offset X 0 Y 0 Select isKage_Normal None (Texture) Tiling X 1 Y 1 Offset X 0 Y 0 Select Outline_Width 2 Line_Color Rim_Sharpness 1 Rim_Color isRim_Normal body AssetBundle None トゥーンシェーダーの本質は、 光の当たり方を元に、オブジェクトを 通常色と陰色の2種類のテクスチャで 塗り分けることだから、 両者に違うタッチのテクスチャを割り当て、 カメラ側でカラーを乗せることもできる。 unity-chan! In 《Tank!》
参考文献 SHADER FORGE Nodes http://acegikmo.com/shaderforge/nodes/ SA09 Realtime education - Try Real-time Shader for artist - Kazuhiro Fumoto, http:// www.slideshare.net/SIGTART/sa09-realtime-education Kansai cedec 2015_fumoto ノードベースリアルタイムシェーダ表現学習, Kazuhiro Fumoto, http://www.slideshare.net/SIGTART/kansai-cedec-2015fumoto 『ゲームを動かす数学・物理』堂前 嘉樹 / SBクリエイティブ / 2015 『DirectX シェーダプログラミング 仕組みからわかるゲームエフェクトテクニック』 N2Factory / SBクリエイティブ / 2007 「アーティストのアーティストによるアーティストのためのリアルタイムシェーダー入門 ~トゥーンシェーダーを書こう!~」本村・C・純也 / GTMF2016 Tokyo Session C-7
Thank you!