キャラクタの描画について

がんばれーるのキャラクタの描画についてです。

がんばれーるのキャラやタンクの描画にはToony Colors Proを使っています。

Toony Colors Pro+Mobile(Asset Store)

シェーダーの構成としてはStandard PBS(物理シェーダー)+アウトライン+ランプです。

特に難しいことはやっていませんが、当初カスタマイズで色変更を考慮していなかったので、後から色変更(そのために複数テクスチャ化)に対応するため1メッシュ複数マテリアルというパフォーマンスの悪い実装になっています。もっともPCならさほど問題でもないでしょう。

例えば髪のレンダラーはこんな感じに複数マテリアルになっています。
chara_bobcut_colが髪、chara_bubcut_maskがハイライトになり、chara_bobcut_colの Albedoを変更することで色変更に対応してます。

ただ、やはりパフォーマンスや取り回しを考慮するならシェーダーを自作するべきでした。
例えばStandard PBSでテクスチャを3枚重ねるだけなら

#pragma surface surf Standard fullforwardshadows

void surf (Input IN, inout SurfaceOutputStandard o)
{
    fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;

    fixed4 tex2nd = tex2D(_Tex2nd, IN.uv_MainTex) * _Color2nd;
    c.rgb = lerp(c.rgb, tex2nd.rgb, tex2nd.a);

    fixed4 tex3rd = tex2D(_Tex3rd, IN.uv_MainTex) * _Color3rd;
    c.rgb = lerp(c.rgb, tex3rd.rgb, tex3rd.a);

    o.Metallic = _Metallic;
    o.Smoothness = _Glossiness;
    o.Albedo = c.rgb;
    o.Alpha = c.a;
}

だけで済みますし、アウトラインを入れるならUsePass “Toon/Basic Outline/OUTLINE”でUnity標準のアウトラインシェーダーを呼べばいいでしょう。
ランプテクスチャを用いた階調表現はUnity標準のToonLit.shaderを参考にすればいいと思いますが、Standard PBSと合成したいとかなると自前で実装する必要があると思います。もしShaderForgeを使うなら

Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編

の30ページからランプシェーダーについての説明があるので、これを参考にするのがいいと思います。

なお、今回の反省をから後日シェーダーに関しては自作してみました(途中)。
普段なら直接シェーダーを書くところですが、せっかくなのでShaderForgeで作ってみたり。
※ShaderForgeを使うにあたり、上記Unity道場の内容は非常に参考になりました!

左がToony Colors Pro、右が自作シェーダーになります。
ランプの実装がまだ途中なのでいまいちですが、全ての処理が1マテリアルで完結しているので、マテリアル情報が MaterialPropertyBlock で変更出来るようになります。
(MaterialPropertyBlockはレンダラーに対しての設定のため、マテリアルが複数ある場合の設定のしかたがわからなかった…)

ちなみにこれらで得られたノウハウはもれなくDustShootersに反映されています。

次回はゲーム本体についてです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です