Unityでのトゥーンセットアップ
Unity



今回はUnity用のオリキャラ「カレン」をUnityのトゥーンシェーダーを使ってセットアップしてみたいと思います。




今回使用するこのキャラのFBXはShade 3Dから直接エクスポートしたものです。




まず、メニューバーの[Assets >> Import Package >> Effects]にある「ToonShading」をインポートしておきます。これでシェーダーに「Toon」が追加されます。




トゥーン調にしたいマテリアルに「ToonBasicOutline」を割り当てます。目の影は半透明で表現していますが「ToonBasicOutline」では透明度が反映されないので「Standard」のままです。このトゥーンシェーダーだと法線マップも反映されないのでテクスチャーは描き直しました。




Unityでは共通なプロパティーであれば複数選択しておくことで一括で変更できるので便利ですね。




う~ん、何か残念な感じです。このままではちょっと使えませんね。少しスクリプトを弄る必要があるようです。近づけば輪郭線の太さも良さ気に思える時もありますが、離れると線が太くなっていくように見えてしまいます。キャラクターに近づけば太くなり、遠ざかれば細くなるようにしたいです。

そこで、まず「ToonBasicOutline.shader」をエディタで開いてみると、38行目にある
o.pos.xy += offset * o.pos.z * _Outline;
のo.pos.zがカメラからの距離によらず輪郭線の太さを一定にしているところなので、それを消して
o.pos.xy += offset * _Outline;
と書き換えます。

これで、カメラからの距離(Z値)によって輪郭線の太さが変わるようになります。




輪郭線の色と太さはインスペクター上でマテリアルごとに変更ができます。しかし、輪郭線の太さを一番細くしてもまだ太く見えます。これは、スクリプトで最小値が0.002より小さく出来ないように制限されているからのようです。

5行目にある、
_Outline ("Outline width", Range (.002, 0.03)) = .005
という部分がその制限範囲のようです。ですので、Range (.002, 0.03)はRange (0.0, 0.03)と書き直して最小値を0にしてみます。




これで輪郭線の太さをちょうどいい具合の0.0015まで値を小さく出来ました。しかし、輪郭線がギザギザしていて綺麗に見えないのが気になります。

これはアンチエイリアスをもっと強めにかければ解決しそうです。メニューバーから[Edit >> Project Settings >> Quality]と辿って行くと「Anti Aliasing」の設定項目があります。



ここを「4x Multi Sampling」以上にすると綺麗な感じになります。







これは、「Anti Aliasing」を「8x Multi Sampling」にした図です。これで、自然なトゥーン調になりました。あと、白目と口内の輪郭線は無い方が良いので太さを0にしてあります。

MMD用モデルを編集するときに使うPMXEでは輪郭線の設定等はサーフェスグループごとに細かく設定できるのですが、Unityの場合はマスターサーフェスごととなるようです。

白目と口内は当初は顔のパーツのマスターサーフェス(同一テクスチャー)に入れていたので、そのままでは輪郭線を消せませんでした。なので白目と口内は独立したマテリアルにして個々に輪郭線の設定が出来るようにしました。(ちなみに、目の影部もそういう理由で独立してあります)

Unityの標準シェーダーのカリング設定では片面ポリゴンの場合裏面が表示されません、両面表示にしたいときはスクリプトを書き直す必要があります。このキャラの腰巻きなどは片面ポリゴンなのでその作業をする必要があるのかと思ったら、トゥーンシェーダーでは両面表示が標準のようですね。

このキャラクターのボーンとスキンの設定はすでに終えていて、記念にUnity上でアニメーションでもと思っていたのですが、さらに長くなりそうなので、ここで区切りとして次回に持ち越したいと思います。


スポンサーサイト
テーマ: CG ジャンル: 日記

コメント

コメントの投稿


非公開コメント

カテゴリ
ini-T MUSIC SKY
プロフィール