モコモコフレンズの3Dモデルをソフトウェアレンダリングで鑑賞する

まとめ: http://d.hatena.ne.jp/mjt/20150422/p1 From: http://www.columbia-games.com/3ds/mocomoco/

キャラクターデータ提供:見習い魔女とモコモコフレンズ

ネタが全く思いつかなくて早くもヤバい状況ではあるが、今日もモコモコフレンズのキャンペーンで提供される3Dモデルを表示させてみる。一日一モコモコ

本日は、ソフトウェアレンダリングの良さを現代に伝えるゲームエンジンIrrlichtでの表示。

Irrlichtエンジンでの表示

Irrlicht(Irr + licht(= light)で憶えると良い)はC++で書かれたオープンソースゲームエンジンで、DoomQuakeのステージ読み込み等細かいユーティリティの充実したライブラリとなっている。動作環境もOpenGL / DX8 / ソフトウェアレンダリングと幅広い。OpenGL ES対応は進行中で、他のエンジンに比べると遅れをとっていると言える。

  • モデルの準備

Irrilichtのローダは、いわゆる.objやb3dを読み取ることができるが、一応COLLADAにも対応しているので今回はこれを利用する。残念ながらIrrlichtのColladaローダはアニメーションに対応していないため、初期のポーズ(いわゆるバインドポーズ)での表示となる。
モコモコフレンズのモデルはfbx形式で提供されるため、これをopen3mod( http://www.open3mod.com/ )にロードし、.daeにエクスポートする。
Irrilichtの画像ローダも.tiffをテクスチャとして使用できないため、昨日と同様にconvertコマンドなりなんなりで.pngに予め変換しておく。

  • テクスチャパスの修正

Collada形式はXMLなので、テキストエディタで修正することができる。

というわけで、テクスチャのパスを.tiffから.pngに修正する。

  • MeshViewerサンプルでの表示

Irrlichtを公式サイト( http://irrlicht.sourceforge.net/ )から入手し、ライブラリ本体とサンプルをビルドする。VisualStudioを使用している場合は、"irrlicht-1.8.1\source\Irrlicht\Irrlicht11.0.sln"でライブラリ本体をビルドしてから、"irrlicht-1.8.1\examples\BuildAllExamples_vc11.sln"でサンプルをビルドすることができる。 追記: 公式からSDKをダウンロードするとビルド済のものが入っている。
サンプルの中にはMeshViewerが有り、これから先に生成した.daeを開くことでロードさせることができる。Windowsの場合は irrlicht-1.8.1\bin\Win32-VisualStudio に出力される。

Burning's VideoレンダラとSoftware Renderer

Irrlichtのサンプルを起動すると、レンダラの選択肢がいくつか出現する

 (a) OpenGL 1.x/2.x/3.x
 (b) Direct3D 9.0c
 (c) Direct3D 8.1
 (d) Burning's Video
 (e) Software Renderer
 (f) NullDriver

これらのうち、Burning's videoがポリゴン表示に対応したソフトウェアレンダラとなっている。(e) の Software Rendererは基本的に2D用で、パースペクティブ変換や透視変換のような重要な機能に対応していない。テクスチャのアルファにも対応していないので、手でテクスチャを編集する必要がある。

手でテクスチャを修正して、Software Rendererで表示させるとこんな感じ。意外とマトモな表示に見えるが背景等を合わせるとかなり絶望的な表示になるので、実際の3Dゲームでは実用的でない。
Burning's Videoはコンパイル時オプションでそれなりの設定が可能で、高速化のためにシェーディングやパースペクティブ補正を無効化することもできる。今やQuakeのようなオリジナルの気合の入ったソフトウェアレンダラを積んだエンジンは世間に殆ど無いので、Irrlichtのように両サポートを未だに続けるゲームエンジンは貴重な存在と言える。
ちなみに、Irrlichtを採用したゲームタイトルとしてはオクトダッド( http://www.jp.playstation.com/software/title/octodad.html )が有る。PS4への移植やMove対応等はデベロッパ自身によるもの。