2013年11月24日日曜日

81-C# Script-NewBehaviourScript.cs.txtを自分用に

Unity\Editor\Data\Resources\ScriptTemplates を見るとC#やUnityScriptを作成したときのテンプレートが置いてある。書き換えて自分流にできる。


2013年9月30日月曜日

Unityプロジェクトのテンプレート生成(シェルスクリプト)

Unityのプロジェクトを実験用途で作成することが何度かあるので、フォルダ構成を含め一気に作成するシェルスクリプトを使ってます。のでメモ。

環境はcygwin上のzshです(bashで動くかは試してません)。


alias unity='/cygdrive/c/Program Files/Unity/Editor/Unity.exe'  # パスは環境依存

function unity_new {
    mkdir $1
    pushd $1
    mkdir Unity LW Photoshop etc
    cd Unity
    unity -quit -batchmode -createProject .
    cd Assets
    mkdir Sounds Textures Scripts Materials FBXs Prefabs Models Scenes GUIElements
    popd
}

プロジェクトフォルダやAssetsの中身も適時かえてください。
これで

$ unity_new path/to/new_project

とすればそこにとりあえずのテンプレートが作成されます。ただしアセットストアなどのアセットのインポートはその後に手動でやる必要があります。

2013年4月4日木曜日

LightWaveでテクスチャを焼き込んでUnityへもってくメモ

UnityProにはBeastLightmappingでグローバルイルミネーションの焼き込み(Baking)ができますが、Free版にはありません。LightWaveでグローバルイルミネーションのテクスチャを焼き込む作業を何回もやってるのでメモしておきます。

おそらくBeastを使ったほうが数倍楽で、しかも速いと思われます。Beastでの焼き込みでもパラメーター調整しないとノイズが乗ることがあるようですが、それはLightWaveでも同じです。Pro版を使ってる方はBeastを使いましょう。Free版で尚且つLightWaveを持ってる場合にしか以下は参考になりません。

まず適当に部屋(ただのflipした箱)の中でボールが発光してるシーンを組み立てます。光源はボールだけです。焼き込むのは部屋だけにするので、箱のUVマップをAtlas展開で作っておきます。



Layoutに持っていき、マテリアルの設定とGlobalIlluminationの設定を行います。この時点でVPRでレンダリング結果が見れればOKです。Render GlobalsのCamerasでターゲットをSurface Baking Cameraにします。PropertiesでModelとUVを箱に設定してレンダリングすれば焼き込み結果がレンダリングされます。その際、レンダリングするサイズは1024x1024のような、正方形にしておきましょう。



単純なモデルなのでGlobalIlluminationはInterpolated(グラディエント補間)でサンプル数を増やして焼き込みました(後述しますが、複雑なモデルだとInterpolatedだとなぜか現実的な時間で終わらない場合があります)。Indirect Bouncesは2~3程度にしてます。シーンをFBXでUnityにもっていき、スケールをあわせたら箱のマテリアルをUnlit/Textureにし、先程焼き込んだテクスチャを設定すれば完了です。





WebPlayer版をここに置いておきました。


Q:部屋の角にInterpolated特有のノイズが出る

サンプル数を上げるなど、パラメータ調整で緩和できます。あるいはInterpolatedをOFFにしましょう。


Q: Unityで再生するとマッハバンドのような境目が見える

たぶんしょうがないです。プレインなマテリアルは難しいです。何かしらテクスチャ(コンクリート、壁紙、等)を張ると目立たなくなります。あるいは10bit深度が当たり前になるのを待ちましょう。


Q: メッシュが複雑だとInterpolatedでウルトラ時間がかかる

これの原因は分かりません。InterpolatedをOFFにしましょう。どちらにしろノイズを収束させるまで時間がかかりますが、Interpolatedほどではありません。この場合キレイなテクスチャが焼きあがるまで一晩かかることは普通にありえます。Maximum samples(旧Adaptive Antialiasingだったかな)を64とかにしてノイズが収束するまでがんばりましょう。Adaptive SamplingのThreshold(収束条件の閾値のようなもの)も調整したほうがいい場合もあります。

追記: LightWaveの11.6で改善されてるかもしれません。FeatureにTexture Bakingがよくなったとの記述があります。

いずれにしろ、InterpolatedのON/OFFでは結果が少し異なります。interpolatedでは焼き込むサーフェス(可視面)に対してグローバルイルミネーションのマップを作成しますが、これだと見えない面、特に多重反射して外側からやってくる光線の影響が省かれる場合があるようです。難しい局面ではInterpolatedは避けたほうがいいかもしれません。

Q: メッシュを分割すると継ぎ目に黒い線が出る

UVの対応するメッシュの外側の色(完全透明→プレーヤー上では黒)が出てしまっています。Surface BakingのPropertiesのUV Borderの値を増やすことで多少緩和されるかもしれません。この値の単位はPixelだそうなのでレンダリングする解像度によっても調整が必要です。テクスチャの解像度を上げるのも有効です。(AnisoLevelの調整も有効かもしれません。未確認。)

あとはPhotoshop等でEXRを透明度で読み込んで、複製→下のレイヤーを少しぼかす→それを複製→下の2つを統合→下のレイヤーを複製→下の2つを統合・・・ を数回繰り返せばメッシュ上の色を維持したまま、メッシュ外への参照を黒以外(近隣のメッシュの色)にできます。とてもアナログな方法なのであまりお勧めできません。良い方法あったら教えてください。

Q: Unity内のライティングや他のテクスチャと併用したい

ShaderをSelf-Illumin/Diffuseや、Legacy Shaders/Lightmapped/VertexLitなどにすればできます。細かい調整をしたい場合はShaderを書かないと無理かもしれません。

Legacy Shaders/Lightmapped/VertexLitで焼き込みテクスチャ+他のテクスチャ
Lightmapの輝度*RGBと思われる
ここ






めんどくさいですが、がんばればそこそこいけますね (でもPro版が欲しい・・・)


2013年2月21日木曜日

Sculptrisとか


いきなりUnityから外れた話題ですが、ZBrushの開発元であるPixologicからSculptrisという彫像ツールが無料で配布されています。ZBrushなどの彫像ツールは一度も触ったことないのですが、これはスゴイですね。こういうので遊んでいるとZBrushが欲しくなってしまいます。

何も考えずに彫ってるとすぐに数万ポリゴンのモデルになってしまうので、Unityに持っていくにはリダクションが必須です。しかも3角ポリゴンベースなのでトポロジ的にあまりよろしくないようです。こういうのを整列された4角ポリゴンにするのをリトポロジ、略してリトポというらしいのですが、Sculptris単体にはその機能はありません(リダクションはあります)。

もう一つ、安価な彫像ツールとして3D-Coatというのもあります。これも試したのですがちょっと使い勝手が、特にUIで評判落としてるような気がします。こちらはボクセルベースでも彫れるので鋭角なポリゴンがどーのこーのみたいな事件は起こりませんが、代わりにモデルの中に空洞ができる事件があるようです。ウクライナには悪いのですが、3D-Coatで3万とか払うなら、倍払ってZBrushの方が無難な印象です(3D-Coatはウクライナ製)。

Sculptrisは機能が少ないからか、UIがとてもシンプルで覚えやすいです。モデルはWavefront-Objectでエクスポートできるのでたいていの3DCGのツールなら読み込めると思います。UnityでもWavefront-Objectで読めますが、誤ってAssetsに数万ポリゴンのモデルを置いちゃうと結構大変なことになるので気をつけましょう。Unityは65535頂点以上のモデルはメッシュ分割してインポートしますので、その分割処理に時間がかかります。しかも、Sculptrisが悪いのかUnityが悪いのか、シンメトリの左側の法線か何かが壊れた感じでインポートされます。別のツールでちゃんとリダクション、リトポしてfbx形式が確実っぽいです。

どっかにZBrush落ちてないですかね。

2013年2月20日水曜日

Unity始めました

前々から興味はあったのですが、TokyoDemoFest2013でUnityのセミナーみたら思ってた以上によくできてたのでハマり始めました。一応3DCGのツール(LightWave)とかもあるのでこいつらで遊んだり調べたことをここにまとめてこうと思います。

Unityはライセンス形態が良いですね。その甲斐あってユーザーも増えて、情報も増えて、結果的にUnity自体の開発も進む好循環が生まれてるんじゃないでしょうか。ライセンスの違いのみならず、UnityはCryEngineやUDKと違って、ゲームエンジンよりもエディターに重点を置いてる印象があります。例えばエディター自体を拡張できます(他でもできるのかもしれませんが)。構造がMayaのようなアトリビュートベースで、UIもそれに従ってるのでシンプルだけど使いやすいです。

ところで今時なんでLightWaveなのかというと、単にバージョン5.0から使ってるという歴史的経緯です・・。ですがUnityとの連携も対応しているので不便はありません、、というのはウソで、いろいろ模索中です。良い点はテクスチャの焼き込みに対応していることです。フリーライセンスのUnityでもそこそこキレイな感じになります。UnityProだとそんなことしなくてもGlobal-IlluminationのLightmapできるようです。



遊ぶ過程でハマりどころはかなりありそうなので、シェアできるものがあればここに上げてこうと思います。