Making Tera

たまに書く不定期ブログ

Unityで水際シェーダー

湿地帯マップの沼を表現するためシェーダーを作る必要があったのでメモを残しておきます。

具体的には水際のエッジが直線っぽく見えるのを防ぐためのシェーダーです。


水際シェーダー

実装は案外簡単で以下のシェーダーを水面に適用すればOKです。

・Input構造体に以下の二つを追記
float4 screenPos;
float eyeDepth;

サンプラーを用意
sampler2D_float _CameraDepthTexture;

・頂点シェーダー内に以下を追記して頂点の視点空間の深度マップをoに出力
COMPUTE_EYEDEPTH(o.eyeDepth);

・後はサーフェイスシェーダーで深度を扱うことができます。
float depth = SAMPLE_DEPTH_TEXTURE_PROJ(_CameraDepthTexture, UNITY_PROJ_COORD(IN.screenPos));//深度

・水際かどうかは以下のように求められます(深度の差*係数を0~1に収める)
float waterSite = saturate((LinearEyeDepth(depth) - IN.eyeDepth) * _Amount);

実際には上記のwaterSiteにノイズを加えた値を2つのテクスチャの合成値として利用することで動画のようになります。

壊れた地蔵モデリング

瘴気漂うマップのモデルの依頼がありましたのでメイキングをまとめてみました。
色んな風に壊れたお地蔵さんが4つ!各々が△200ポリということでディテールには限界が見えます。

暗い場所に置くらしいのでディフューズマップを無くしてノーマルマップのみで細部を表現することで描写コストを下げる作戦に。
もちろん4つのテクスチャは一つのテクスチャ、マテリアルにしておきます。
では早速スタート!

お地蔵さんのような彫刻系?はスカルプトで作成したほうが早いので3Dcoatで作成。
(一時期ZBrushも試したけどカメラをはじめ、あまりに独特の操作が多くて断念)

地蔵壊す前

原型を壊す!ここが一番楽しいけどあっという間!

地蔵ベイク前

作成したハイポリをリトポ。これが一番辛い。ただただ辛い。
詳細に作成したモデルのディティールをポリ数制限によって崩していくのが辛い。
(今回は表示される大きさもあってハイポリが適当だからいいけどっ)
f:id:makingT:20170301013049j:plain

ハイポリからローポリにベイクすると差分が法線マップとして作成される。
このとき表面の材質などはあとから合成するのでモデルの差だけを焼き込む!
f:id:makingT:20170301013604j:plain

SubstanceDesignerを使って材質の法線画像を合成する。
高ポリに材質を彫り込んじゃうと、大抵あとから「材質が綺麗に出てないな~」ってなります。
なぜか本番環境でだけ綺麗にでないっす。泣きます。
ってことでトライアンドエラーが気楽にできる方法を選択しておくのがお勧めっす。
f:id:makingT:20170301013726j:plain

あとはUnity上でどう表示されるか確認しながら微調整!

黄泉 瘴気エリア地蔵

枝垂桜モデリング

ある日、サークルの方から「枝垂れ桜」のモデルが欲しいと言われまして、分かってはいたのですがポリ数との戦いでした。
Unity用のモデルをModoで作成しております、誰かの役にたてば…とせっかくなので記事にしました。

まず最初に、普通に綺麗に見えるモデルを作成したのですが、四角ポリで7万ポリ!植物特有のやばい予感。
これをリトポ→ベイクしようと思ったはいいものの案の定ビジョンが見えない!!
さっくりモデルを捨てて作戦を立て直しました。


まずはバランスを見ながら幹をローポリで作成
f:id:makingT:20170226003903j:plain

細かい枝はすぐに頂点数が増えるので板ポリで作成
f:id:makingT:20170226004119j:plain

拡大すると分かりますが板ポリを「Ctrl+C → Ctrl+V → F(反転)→ 移動」で裏側にも同様の板ポリが配置されています。
シェーダーで両面描写してもよさそうですが、マテリアル分離などを考えるとこちらのほうがコストが低いと思われます。
f:id:makingT:20170226004441j:plain


物理演算で枝を垂らすことにしました。
まずはサーフェイスジェネレータでポイントを作成
次にリプリケータでカーブを配置
f:id:makingT:20170226005139j:plain

カーブを一つのメッシュにまとめたらダイナミックカーブを適用
プロパティウィンドウのダイナミクスの中にあるカーブ項目でカーブ始点をピン留めしてジョイント角度やピンの角度を調整
カーブパーティクルジェネレータで枝のメッシュを配置してから物理演算を行う!

物理演算


これである程度、完成が見えたと思ったのですが実際にゲーム内に置いてみると「見下ろし視点」の影響でシルエットが思ったように定まりません。
結局すべて手動で配置しなおすことにしました。
カーブにメッシュを沿わせるあたりは一緒ですが、カーブに対してペイントタブにある「ヘアツール」を多用します。
今回のような場合は大きいブラシで「分離」が使いやすいかも
f:id:makingT:20170226193131j:plain

ローポリのモデルが完成したらテクスチャの作成に移ります。
今回、「桜のモデルは暗いマップでライトアップしたい」とのことで通常のワークフローとは異なります。

まずは少ないポリ数でも綺麗に見えるようにノーマルマップを高ポリからベイクして作成。
エミッション用テクスチャも欲しくなるのでAO画像を代用
f:id:makingT:20170226012907j:plain

幹はライトのせいで色が飛ぶと思われるので暗いベース色+法線による表現で。
植物の高ポリモデルはスカルプトで作成するのが楽で早いです。
今回はModoではなくCoatを利用。
気合いを入れてもローポリによってはベイクに限界があるのでここは元モデルにさっと肉付けして終わり。
f:id:makingT:20170226013708j:plain

ここまで来たらゲーム内に持って行って画像を見ながら調整します。
Modoのゲームツールタブを利用するとワンクリックでUnity内で描画の様子を確認できるので捗ります!
(「表示の切替→選択したものだけ書き出し」の部分をマクロ化してショートカットに割り当てておくと便利です)

桜テスト

Modoで自動マップ生成機能を作成しようと格闘中

最近、時間があったのでマップ自動作成機能を作ろうと格闘しておりました。

せっかくModoもバージョンアップしたばかりなので手を付けていなかったスケマティックまわりにようやく触れました!
ノードはやはり強力ですね。

完成したららせつのMAP作成に使えるかなぁ・・・。
Unityに持っていくことも考えないとですね。

とりあえず現状は以下のような感じになってます。

分割数、凹ませ具合、地形の形などはすべてあとから変更できる仕組みです。


AutoGround

次は境界にアイテムを自動で置いたり、テクスチャあたりに着手予定!

葉っぱのテクスチャ作成

葉っぱを一枚ずつ描写するとリアル系になってしまう。

柔らかいイメージの樹木に合う葉っぱのテクスチャを作成した時の忘却録。

 

まずは手書きで適当に色をつける

f:id:makingT:20160207023719j:plain

 

スタンプツールでいろのむらを適当に揃える

f:id:makingT:20160207023723j:plain

 

色が寂しいので[色彩補正]→[色の置き換え]で刺し色投下

f:id:makingT:20160207023721j:plain

 

FilterForgeのNoiseDistortionを適用(SeamlessTilingはONにする)

f:id:makingT:20160207023804j:plain

 

アンシャープマスクをかける

f:id:makingT:20160207023717j:plain

 

[カラーバランス]+[レベル補正]+[トーンカーブ]+[自然な彩度]で印象を柔らかくする

f:id:makingT:20160207023715j:plain

 

紫色のレイヤーを比較(明)で重ねる

f:id:makingT:20160207023713j:plain

 

完成!