2015年12月7日月曜日

軽くて崩れないメッシュの作り方 ーLOD 編

この記事は、「セカンドライフ技術系 Advent Calendar 2015」の記事です。

セカンドライフ技術系 Advent Calendar 2015


前回は、軽いメッシュを作るために、

ポリゴン数を減らそう!

という方法をご紹介しました。

しかしそれだけでは、プリムと同等の軽さにはなりません。

「え?プリムと同等のポリゴン数にしたのに、なんで?
前回の話は嘘だったの!?」

いえいえ、そうではありません^^

実はプリムでは、LOD 用の適切なモデルも設定されているので、描画が軽いんです。


LOD というのは、Level Of Detail の略です。

LOD の機能が無い 3D 空間の場合、1万ポリゴンで作ったオブジェクトは、カメラの目の前にあっても、すごく遠くにあって画面上は1ドットでしか表示されない状態であっても、1万ポリゴンとして描画されます。

見た目上潰れていても、3D の描画の処理上は1万ポリゴンは1万ポリゴンなので、同じ場所に1万回ポリゴンが描画されます。

これって、すごく無駄ですよね?

オブジェクトが一つだけならまだいいかもしれないですけれど、たくさんのアバターや SIM 内の建築物、様々なオブジェクトがあって、そういうものが遠くにもたくさんあるとしたら、どうでしょう?

描画の無駄がありすぎますよね?

遠くにあるものは簡略化して描画出来れば、もっともっと早くなるはずです。

それを実現する仕組みが、LOD です^^




LOD は、カメラからオブジェクトまでの距離によって、表示するモデルを切り替える技術です。



“モデルを切り替える”

というところが大事です。

セカンドライフのサーバーやビュアーが、リアルタイムに勝手にモデルを書き換えて減らしてくれるわけではありません!
ここ重要!!!


プリムの場合、3段階の LOD が用意してあります。

無加工の Cube の場合、カメラからオブジェクトが遠ざかるにつれて、

1段階目:108ポリゴン 
2段階目:48ポリゴン 
3段階目:12 ポリゴン

という風にポリゴン数が変化していきます。

遠くになればなるほど描画の負担が少なくなって、その分たくさんのオブジェクトを表示出来るというわけです。

みなさんがアップロードするメッシュでもこれと同じことをすれば、プリムと同等の軽さにすることが出来ます^^


メッシュの LOD の設定は、メッシュのアップロード画面で行ないます。
公式ビュアーでは、「描画詳細度」という名称の項目が LOD の設定画面です。


セカンドライフでは、ユーザーがアップロードするメッシュの LOD は4段階あります。
描画詳細度の「高」「中」「低」「最低」のところが、LOD を設定するところです。

アップロード用に選択したモデルは、自動的に「高」に割り当てられます。
それ以外のレベルの LOD は、デフォルトでは自動設定(自動的に生成)されるようになっています。

このままアップロードしてもいいですし、「三角形の限度数」の値を調整して、自分好みのポリゴン数の LOD を設定しても大丈夫です。

この辺は、メッシュをアップロードされている方なら、普段やられていることですね。

少ないポリゴン数
適切な LOD

これで、軽いメッシュのアップロードが出来ました。
めでたしめでたし^^


「軽くなったのはいいけど、この方法だとメッシュ崩れるのよ!
そこはどうなってるの?」

そうなんです!

メッシュのお悩み二点目、

メッシュは崩れちゃう!

ここの解決方法を次にご紹介します。


そもそも、メッシュはなんで崩れちゃうんでしょう?

「セカンドライフのビュアーがメッシュを表示する際に、
リアルタイムの計算誤差とかで崩れちゃうんじゃないの?」

ブッブー!
ハズレです^^


メッシュが崩れる原因、それは、

適切な LOD 用のモデルが設定されていないから

です。

LOD で大事なことって何でしたか?

そう、

“モデルを切り替える”

です。

LOD では、リアルタイムにポリゴンの削減処理が行なわれているのではありません。

カメラからオブジェクトまでの距離が一定の範囲を超える毎に、

次の LOD のモデルに切り替えている

だけです。

次の LOD のモデル…、そう、メッシュのアップロードの画面にあった「中」「低」「最低」のモデルです。

これらのレベルの LOD のモデルは、実は何も設定していない状態、

生成

の時も、アップロードの際にそれらのモデルが自動生成されて、一緒にアップロードされています。

「中」「低」「最低」それぞれのモデルが、あらかじめ作られている状態です。

もしそこでモデルが崩れている状態になっていた場合、崩れたモデルがそのままアップロードされてしまいます。

つまり、メッシュが崩れるというのは、

崩れたメッシュのモデルをアップしているから

なんです!

LOD というのは、あらかじめ用意したモデルを切り替えるだけの仕組みですので、LOD に適切なモデルが用意されていないと、このようなことも起きてしまいます。


セカンドライフビュアーで LOD 用のモデルを自動的に作ってくれる機能では、
  • プログラムによるポリゴンの自動削減処理のため、ユーザーが意図した減らし方をしてくれない
  • オリジナルの頂点数が既に少なすぎる場合も、無理に LOD を作ろうとしてメッシュが崩れてしまう
ということが起きる場合があります。

これが、メッシュが崩れる原因です。


「え?なに?それって、
セカンドライフビュアーで、
LOD 用のモデルを自動的に作ってくれる機能が
原因ってこと?」

そうです!

「じゃあどうしたらいいの?
ポリゴン数を減らしたモデルを別に作って、
それをアップロードしたらいいの?」

はい、その通りです。
それが、崩れないメッシュを作る、唯一の方法です!


メッシュのアップロード画面で、「高」と同様に「中」以下も「ファイルからロード」の項目を選ぶことで、自分が作ったモデルを LOD 用としてアップロードすることが出来ます。


そうすれば、セカンドライフビュアーではあらかじめ用意されたモデルを切り替えるだけですので、崩れることはありません。


LOD 用のモデルを作る際に注意が必要な点は、下記の部分です。

3D ソフト側のマテリアルの数/名前は、
全ての LOD 用モデルで同じにしておく

これが揃っていないと、

モデルの材料は参考モデルのサブセットではありません。
material of model is not a subset of reference model

というエラーが出てアップロードが出来ませんので、その点だけ注意してください。

ちなみに、マテリアルが同一であれば、メッシュや UV は LOD のレベルごとに全然違う形状になっていても大丈夫なようです。

これで、軽くて崩れないメッシュが出来ました。
めでたしめでたし^^


「ちょっとまって!
崩れないのは分かったけど、
4種類の LOD 用のモデルを
それぞれ一から作るのは大変すぎない?」

はい、ごもっともです。

実は Blender にも、ポリゴン数を自動で削減する機能があります。

それは、「Decimate モディファイア」です。

Doc:JA/2.6/Manual/Modifiers/Generate/Decimate - BlenderWiki

Blenderモディファイア(Decimate)





Decimate モディファイアを使うと、セカンドライフビュアーのポリゴンの自動削減機能のようにポリゴン数を簡単に減らすことが出来ます。

セカンドライフビュアーの自動削減機能と違うのは、
  • Blender のオブジェクト毎に Decimate モディファイアを適用出来る
  • Decimate モディファイアを適用したあと、修正したい場所があれば、その場で直すことが出来る
という点です。

Decimate モディファイアでもメッシュが崩れてしまうことはありますが、崩れた部分をその場で修正出来るというところが、大きな特徴です。

もちろん、手作業で修正する手間は掛かりますが、LOD 用の 4 種類のモデルを全部一から作るよりは、ずっと手間は省けます。
ぜひ試してみてください。


もともと「最低」レベルのポリゴン数で作ってあるようなモデルの場合は、LOD 用のモデルを別途用意する必要はありません。
その場合は、「中」「低」「最低」に「上記の LoD を使用」を設定するだけです。


これで、自動設定ではポリゴン数が少なすぎて崩れていたモデルも、カメラが遠くにあってもきれいに表示されるようになります。

左:LOD を自動設定にして崩れてしまったもの
右:「上記の LoD を使用」を設定したもの

ただしこの方法はあくまでも、LOD 用にもうこれ以上ポリゴンが削減出来ないモデルの場合のみ行なってください。



LOD 用の低ポリゴンモデルを作成する際は、SIM 全体の環境を考慮して、可能な限り少ないポリゴン数で表現するようにしてください。

円柱も、一番遠い LOD では“箱”にしちゃうくらいさっぱりした表現にしても、遠くにあるものですからそんなに気付かないと思います。

作り手側としては、遠くにあるものも出来るだけきれいに見せたい…という気持ちもあるとは思いますが、

ポリゴン数=パソコンの描画の負荷

に直結しますので、そこは可能な限り抑えるようにしてください。
そうしていけば、メッシュで作っていても快適な環境になるはずです。



どうですか?
重い、崩れると言われているメッシュですけれど、メッシュが悪いわけじゃないのが分かりましたよね?^^

「軽くなりましたし、崩れなくなりましたし、
これで完璧ですね!」

実は、もう1点あります。

「え?」

長くなっちゃいましたので、それは次回のお楽しみにー^^/
このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿