Three.jsでCinema 4Dオブジェクトを読み込む

Cinema 4Dでモデリングした静止オブジェクトをThree.jsで表示する手順のメモ書きです。
(三年ぶりにThree.jsを触ったら1ミリも覚えていないことに気付き、要するにリハビリです…)
Three.js上では静止したオブジェクトが表示されるだけのシンプルなものです。実装後マウスでグリグリ動かせます。

完成デモはこちら!

使用したバージョン

Cinema 4D R18 (Broadcast)
Three.js r87

※Cinema 4Dが古いとマテリアルが書き出せないかもしれないので要注意。

Cinema 4D作業

・所望のモデリングデータを完成させておきます。ここでは木の額縁に花の写真画像をはめ込んでみました。
・[ファイル→エクスポート→Wavefront OBJ(*.obj)]を選びます。
・「OBJエクスポート」のダイアログが出るので下記の設定で。
Cinema 4D保存画面
※「Z軸を反転」のチェックを外すとThree.js上でテクスチャが裏返るようです。
※テクスチャ画像は「コンテンツブラウザ」で設定した画像は使いませんでした。使用許諾の範囲がわからなかったのと元画像が探せなかったからです。今回はフォトショで作ったjpgを貼りました。

・するとobjファイルとmtlファイルが出力されます。これらと貼り付けている元のテクスチャ画像(jpgなど)を同じ階層にまとめておいてください。ここではwooden_frame.jpg(額縁のテクスチャ)とDSC09065_wp.jpg(花の写真画像)が該当します。
・これでCinema 4Dの作業は終わりです。

html作業

公式サイトからthree.js-master.zipをダウンロードしましょう。このzipを展開しますが全部は使いません。ここでは下記のファイルだけを使います。

/build/three.min.js (Three.js本体)
/examples/js/loaders/DDSLoader.js (マテリアル表示用)
/examples/js/loaders/MTLLoader.js (マテリアル表示用)
/examples/js/loaders/OBJLoader.js (objロード用)
/examples/js/controls/OrbitControls.js (マウスでグリグリ動かす用)

index.htmlサンプル

htmlは極めて単純です。極力他の要素を排除しています。

main.jsサンプル

jsはjQueryっぽくなっていますので違う宗派の方は脳内で変換してください。
objファイルとmtlファイルとテクスチャ画像はobjディレクトリにまとめています。

これで完成です。

以前Three.jsを触ったときは三年ぐらい前で確かリビジョンは68でした。フロントエンドの三年前ってちょっと引くぐらい古いですね。恐ろしい世界…

参考にさせていただいたサイト:
https://threejs.org/examples/#webgl_loader_obj_mtl
http://isi-work.com/20151011/webglcode/