[Unity] アサシンクリード3の雪の表現をがんばってみた
今回はUnityで雪の表現をしてみます。アナと雪の女王のような表現が出きればかっこいいのですが、素人には難しいのでできそうな情報を探して実装してみました。
参考サイト
A material point method for snow simulation(PDF)
【GDC 2013】「アサシンクリードIII」グラフィックス技術解説
西川善司の3Dゲームファンのための「ロスト プラネット」グラフィックス講座
Xbox 360グラフィックスここに極まる! 日本発の次世代技術の秘密とは?
3Dゲームファンのための「バーチャファイター5」グラフィックス講座
PCベースのアーケードシステムで実現される至極のリアルタイム3Dグラフィックスの秘密
環境
Unity 5.0.0f4
Albedoを白っぽくするデモ
アサシンクリード3の技術解説サイトにAlbedoを白っぽくするだけ、とありましたので試してみました。
アセットストアにある家を配置し、Shaderに白っぽくなるパラメーターを追加して対応しました。一部Shaderが適応されてなかったりしますが目をつぶります。あとTerrainはどうやって内部データにアクセスするか不明だったのでパスしました。
どうでしょうか、屋根以外も白っぽくなっているので、雪が降ったというよりは吹雪の後のような感じ。
デモ
アセット(家):Medieval house(アセットストア)
アセット(地面):Terrain Assets(アセットストア)
Displacement Mappingを使った足跡の表現
これまたアサシンクリード3の技術解説サイトにあるように、Displacement Mappingを使って表現します。サーフェイスシェーダーと DX11 テッセレーション(Unity公式サイト)にあるコードをそのまま使用してShaderを作成しました。VF5も同じ感じかな。
デモ
クリックした位置をへこませる。環境によっては動作しないかもしれません。
クリックするたびにテクスチャーを生成しているので重いです。へこませるだけでなく、足跡の周りを少し膨らませたりすると再現度アップか。
まとめ
本来はアナ雪のような雪表現をUnity上でリアルタイムに行えたらかっこいいな!なんて素人考えだったわけですが、アサシンクリード、バーチャファイター形式の雪表現も悪くないなと。その時あるハードウェアの機能を有効に使ってる感じがして大好きです。
数年前の技術の後追いですが、技術解説記事+Unityでそれっぽく動くものができるなんて楽しくなりますね。