2017年03月12日

Unity研究メモ(ボクセル、IronPython)

追記

DLR回りの使用は他のプラットフォームで難しそうな感じ。
Windowsでは問題なく動くが、WebGLでもAndroidでも(AndroidはバックエンドがIL2CPPではなくMonoであっても)動かなかった。これはまずい。IronPythonはリフレクションがないとC#側の関数が取り込めない仕組みっぽいのでほぼなにも出来ない。PC専用になってしまうとUnity使う意味があまりないしなあ。PS4とかでは動くんだろうか? 残念ながらIronPythonの使用は見送るかも。この記事内容については訂正します。
MoohSharpで、DLR回りの仕様に頼らず色々グルーコード書いて、HTMLパーサもどこかで用意するしかないか。

モデリング・リギング・アニメーション

コンテンツパイプラインがだいたい確立しそう。

  • MagicaVoxelもしくはQubicleでモデリング
  • VoxelImporterで取り込む。アニメするモデルの場合はボーンを入れる。
  • 簡単なモデルならAnimationClipの編集だけでも十分アニメを作れそうだが、専用の外部ツールを使いたい場合は外に出す。
    • VoxelImporterからCOLLADA形式(.dae)でエクスポートする。MayaLTに持ち込んでボーン構造をUnity内部のものと同じにする(オブジェクト名がルートに入ってることが多いのでそれを外す)。
    • あとは外部ツール(私はAkeytsuを使う)でアニメを作ってFBXでUnityに持ち込み、FBX内のアニメーションクリップをCtrl+Dで複製すればそちらは編集可能であり、同じボーン構造のモデルに適用出来る。
    • HumanoidアニメはもちろんUnityの普通のやり方で流用可能

レベルデザイン

レベルデザインに関してはまだ途中。

現状、マイクラ風のキューブによる地形デザインはめどが立っている。動的に更新出来るのが強み。あとは各面に違うテクスチャを貼り付けられるようにしたり、ハーフブロックや階段(これは1/8サイズのブロックを管理させれば統一して作れる)を実装すればいい。柵とかガラス板とかは別オブジェクトでいいかなあと。とりあえず表示部分だけ作り込んで設定はIronPythonを組み込んでツール作ればいいかなと。

2017-02-06 (2).jpg

また、地面に関してはUnityの標準のテレインを低解像度で使うといかにも味のある絵作りになるのでこれもありかと思っている。

2017-02-03.jpg

IronPythonを採用する

IronPythonはリフレクションの取り込みが深いのと、マニュアルがかなり充実している(英語だが)のと、Pythonの各種ライブラリが使えるのとが良い感じなので、今後の開発はこれを基盤に据えていく。基礎部分を作る。こういう構造を考えている。

  • C#コード (UnityEditor,VisualStudio)
    各パーツ、ゲームオブジェクトなどの細かい機能をここで実装する。例えばAIナビゲーションやアニメーション管理など。それをIronPythonから呼び出す。レベルデザインは未定だが、ここでやるか、外部ツールから取り込むか。ゲームのUIは普通にuGUIで作る。
  • IronPythonコード
    ゲームのメインロジックはここに書く。リフレクションが使えるので必要ならだいたい何でも出来るはず。特にPCゲームを作る場合は、MODを作成しやすい環境にしたい。標準のHTMLパーサを使ってシナリオスクリプトを読み込んで実行する。
  • シナリオスクリプト
    シナリオや演出の記述を直列化するための独自文法のスクリプト。HTML形式と同様のタグを使う(意味づけは異なる)。単純で使いやすいはず。変数を処理したり条件分岐したりするところはPHPに似た感じでPythonを呼び出して処理させる。こんなスクリプトを動かしたい。
    
    <label name="samplescene">
    XMLと違って<c>閉じタグを必ずしも必要としないのがいいですね。<p>
    <bg name="town">
    <chr name="girlA" x=0>
    こんな感じで演出。<p>
    <?py save.v1=1 ?>
    <!-- Python呼び出し。PHP風 -->
    <?py
        if save.v1==1 :
            labeljump("samplescene2")
    ?>
    <!-- Python呼び出し。複数行も化 -->
    

    これなら、直列化したいところだけを独自文法に切り出して、アルゴリズム的なところだけ全部Pythonで書ける。シナリオスクリプトは粒度の高い指令をさせて、細かいことはPythonの関数を呼ばせてそちらで実行する。
posted by NTak_Indies at 08:00| Comment(4) | TrackBack(0) | 日記

2016年12月29日

ボクセル作業メモ(MagicaVoxel,CubikStudio)

エクスポート設定について

ボクセルをちょっと本気でやろうと思う。俺の腕でもぼちぼち満足できるものが仕上がるので。作業工程についてメモ。

  • MagicaVoxelのほうがモデリングはシンプルで使いやすいのだが、エクスポート機能が弱い。そこをCubikStudioで補う。
  • CubikStudioのObjの出力設定はメインウィンドウ左端の「Model」メニューの歯車マーク「Settings」より「OBJ」タブ。
  • Griddy mesh + texture (no AO)を使うと、グリッドを維持したまま色別にUVを振ったテクスチャを出力する。
    • 頂点数は増えるが、関節が消えないのでそのままスキンメッシュアニメーション出来る。
    • 色ごとに別のUVを持つため、UVエディタから色を選択することで塗り分けておいた領域を選択可能。
  • Optimized mesh + texture (no AO)を使うと、最適化されたメッシュにテクスチャを出力する。
    • このテクスチャを出力されたままで使う場合は補間を切らないとぼやける。
    • 最大の矩形でメッシュを区切るので使いやすい。アニメしないメッシュならこれで決まり。
    • グリッドは消失するが、例えば顔の表面の平たい部分は一つの面にまとまるので、マテリアルを差し替えるのは簡単そう。
    • 関節はエッジを追加して付け加える必要があるが、ポリゴン数を最小に押さえたスキンメッシュを作るにはこちらを使うべきかも。
  • いずれにしても作業前に頂点のマージやクリーンアップ、四角化などはやっておいたほうがよさそう。

ボクセルで作りにくい単純なメッシュ(たとえばマイクラでいう柵とか、ビルボード使った草とか)は今まで通りMayaLTやFusion360で編集していけばよさそう。

検討課題

  • レベルデザインをどうするか。今の所、普通にUnityのエディタ上で配置しようと思っている。MagicaVoxelで大きくレベル全体を作ってしまえるので、あとは動くものやイベントを発生させるものだけ別に作って配置すればいい。
    • タイルエディタで作って配置するのもお手軽なのだが、たとえば壁メッシュをタイルごとに複製していると、たとえ結合しても見えない面が残ってしまって効率が悪いのがどうしても気になる。
  • キャラクターの表情変化をどうするか。今の解像度だと顔の領域が8x3ボクセルしかないのでさすがに表情を描くのは無理がある。
    • 方法1:漫符だけで乗り切る。ラグナロクオンラインのように、吹き出し+漫符を頭の上にビルボードででも表示する。
    • 方法2:顔を別マテリアルにして顔だけ描く。絵作業が必要になってしまうのだが、いろんな漫画のデフォルメ表情や顔文字を参考にイラレで乗り切る。そこだけボクセル表現じゃなくなってしまうのが統一感上やや難点。
  • リギングは、人型は最小限のhumanoidに合わせたHumanIKでやればいいが、人型以外の生き物も多少は必要だろう。四足歩行動物と鳥くらいはテンプレートを作っておいた方がいいのかも。いずれ必要になったら頑張る。
  • アニメーション作成がまだまったく手つかず。今まではUnityちゃんとかイーサンのモーションだけで乗り切ってきたけど、さすがにそれで全部足りるということはないだろう。自力で作れるようにはなっておかなければ。

なんにしても、ついに自分が満足できるレベルの絵素材を作成できる能力を手に入れた。これは大きい。
プログラム的にはボクセル固有の技術は今の所使う予定がない(Unityちゃんでも他のどんなモデルでも使えるものしか使わない。最終的には単にFBXファイルにしている)ので、モデリングを外注するに当たっても問題は無い。

2016-12-27 (3).jpg
posted by NTak_Indies at 06:11| Comment(2) | TrackBack(0) | 日記

2016年12月28日

次回作開発に向けて研究中

ローポリモデリングからリギングまで

MayaLTによるモデリングとリギングの訓練。身体を一体で、重なる部分を出来るだけ少なくモデリングすることで、リギング作業を楽にしている。ひとまずMayaLTによるリギングはだいぶ上達した。これ以上は絵心の問題が出てくるかな……。

ボクセルにチャレンジ

MagicaVoxelでモデリングし(19x19x19)、それをCubikStudioにvox形式経由で読み込んでOBJファイルを出力してリギングした。上手く行っているようだ。作業がとにかく早いのが魅力(これだけドット荒いと、四体(実質三体)作るのに数時間程度で済んでいます)。途中で有料ツール(安いが)を挟むのがちょっと残念ではあるが。いくつか気付いたことをメモ。

  • なぜCubikStudioを挟んだかというと、MagicaVoxelのobj出力はメッシュを最適化してしまうからだ。CADのデータをobjで出したときみたいな、三角面でみっちり最適化してしまうので、格子で関節を取りたいときには使いづらい(もちろん動かないなら最適化したほうがありがたい)。

  • CubikStudioのobj出力(最適化せず色をテクスチャに出力)の場合、同じ色は同じUVで出力されるようだ。あとでMayaLTからそのUV部分をUVエディタで範囲選択すれば、同じ色、つまり顔だけを抽出できる。顔を差し替えるのは簡単そうだ。ワールドオブファイナルファンタジーのSDキャラみたいな感じの顔に出来ないか検討中。そこだけボクセルでなくなるのが不自然そうだったら、顔は変えずに漫符で解決するかも。どっちがいいのかなあ。

  • さすがにこれをStandardシェーダーでレンダリングするのはマシンパワーの無駄遣い感がある。レガシーのDiffuseシェーダーにするか(三枚目のゆかりさんは試しにそうしている)、いっそシェーダー書くべきか。演出が色々やれそうだし場合によっては頂点カラーによるレンダリングも出来る。

  • 次回作レベルエディタをどうするか。キャラがこういうのだしいっそまたタイルマップ式でもいいかなとか考えているのだが、一方で、ぼちぼちUnityの素のレベルエディタにも慣れておくべきかも知れないなあと。そもそも何を作るのかもまだ決めてないけど。

  • インディーズスマホゲームだとボカロやCevioの使用条件が実費程度までということになっていて、将来的に逸脱する可能性もあるかなと思うので(広告モデルからいずれそれなりに収益化を試していくつもりだし)、ゲームに使うのはオリジナルキャラにする予定。それを紹介する動画をボイロやCevioで作りたいのです。ニコニコ動画やYouTubeデビューも狙っている。

2016-12-18.jpg2016-12-27 (3).jpg2016-12-28 (1).jpg
posted by NTak_Indies at 13:06| Comment(0) | TrackBack(0) | 日記