2015年12月5日土曜日

軽くて崩れないメッシュの作り方 ーポリゴン数編

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

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

セカンドライフのアドベントカレンダーは毎年見ていたのですが、なかなかタイミングが合わなくて参加出来ていませんでした。
今年初めて参加します。よろしくお願いいたします^^


セカンドライフの「メッシュ」について、みなさんはどんな印象をお持ちですか?

メッシュのものがあるところは重い

カメラから離れるとすぐ崩れる

そう思われている方、多いと思います。

セカンドライフのメッシュって、そういうものなのでしょうか?
実は違います。

それらは、メッシュの特徴をうまく生かしきれていないために起きていることです。


一番身近にある、軽くて崩れないメッシュってご存知ですか?

それは、

プリム

です。

 「え?プリムは昔からあるもので、メッシュは最近追加された機能でしょ?
  どこがメッシュなのよ!」

そう思われた方もいらっしゃるかもしれません。

実は、セカンドライフの 3D の世界の中で表示されているもの、
  • プリム
  • パーティクル
  • アバター
これらは全て、メッシュなんです!


セカンドライフに限らず、3D の世界で表示されているものは、全てメッシュで出来ています。

セカンドライフではそれを、つい最近まで“メッシュ”とは呼んでいなかっただけです。
プリムも、みなさんがアップロードしているメッシュも、セカンドライフビュアーの中では同じメッシュです。

従来からある“プリム”は、リンデンがあらかじめ用意した、

基本図形(プリミティブ図形)のメッシュ

のことです。

それを分かりやすく、「プリム」という名前で呼んでいただけです。

ユーザーがアップロードしているメッシュは、そのプリムの図形を、ユーザーがアップロードしたものに入れ替えたものです。


ではなぜ、プリムは軽くて崩れないのに、ユーザーがアップしたメッシュは重くて崩れることがあるのでしょうか?

理由は三つあります。

それは、
  • ポリゴン数
  • LOD
  • マテリアル
です。

今回は、最初の「ポリゴン数」について見ていきましょう。


ポリゴンというのは、メッシュを作る際の最低単位の三角形のことです。


一部の 3D ソフトでは、四角形などの多角形をポリゴンにすることも出来ますが、セカンドライフの世界ではポリゴンは三角形です。

セカンドライフの世界がポリゴンで出来ているというのは、ワイヤーフレーム表示にすることで確認することが出来ます。

ワイヤーフレーム表示への切り替えは、開発メニューの「レンダリング」の「ワイヤーフレーム」で可能です。


通常表示 
ワイヤーフレーム表示
アバターはもちろん、プリムのものも、海も空も、全て三角形が集まって出来ていますよね?
これがポリゴンです。
そして、ポリゴンが集まって出来たオブジェクトが、「メッシュ」なんです。

セカンドライフの世界は、すべてメッシュ(ポリゴン)で出来ているんです^^


ワイヤーフレーム表示している画面の中には、ものすごい数のポリゴンがあると思いませんか?
アバターのポリゴン数なんかすごいですよね?

3D の世界ではこの画面を、1秒間に何十回も描画しています。

セカンドライフはもちろん、他のゲームなどでも、表示の重さを表現するのに、

ここの FPS は 30fps くらいなので軽いよね

という会話すると思いますが、それは

1秒間に 30 回画面を描画している

という意味なんです。

ここでの「FPS」というのは「frame per second」つまり、一秒間に何回画面を書き換えるかという意味です。

フレームレート - Wikipedia

セカンドライフビュアーの FPS は、「アドバンス」メニューの「パフォーマンスツール」の「統計バー」で見ることが出来ます。


この大量のポリゴンを、一秒間に何十回も表示しているんですよ。

さらに、ポリゴンには様々なテクスチャーや透明度、グローなどのエフェクトも適用出来ます。
それらも同様に、1秒間に何十回も描画が行われています。
3D 画面内の物が動いていても、動いていなくても…です。

3D が重いと言われるのは、こういう計算や描画を大量に行なっているからです。

それを軽くするために、GPU というハードウェアがパソコンなどには搭載されていて、CPU への負担を減らそうとしています。

Graphics Processing Unit - Wikipedia


しかし、凝ったものを作ろうとすればするほど、ポリゴンはたくさん必要になってしまいます。
メッシュアバターやメッシュの服などは、その顕著な例です。

そんなアバターや風景用のオブジェクトが山のように出てくることもある世界、それがセカンドライフです。
それでは、いくら最新の GPU を搭載したパソコンを購入しても、重いはずですよね。

ポリゴンが多い=重くなる

これは、3D の世界での基本的なことです。

ですので、メッシュの物の描画の負荷を軽くしようと思うなら、真っ先に行なう必要があるのは、

ポリゴン数を減らす

です。


先ほど、軽いメッシュはプリムだと言いました。
では、プリムのポリゴン数はどれくらいなのでしょうか?


一つのプリムのポリゴン数は、

キューブ108 ポリゴン
プリズム12 ポリゴン
ピラミッド12 ポリゴン
四面体12 ポリゴン
シリンダー192 ポリゴン
半円柱108 ポリゴン
円錐192 ポリゴン
半円錐108 ポリゴン
球体576 ポリゴン
半球340 ポリゴン
トーラス1152 ポリゴン
チューブ576 ポリゴン
リング432 ポリゴン
スカルプテッドプリム2048 ポリゴン
※無加工で、かつ LOD が最高の場合

です。

オブジェクトのポリゴン数は、インワールドで確認することが出来ます。

公式ビュアーや Firestorm ビュアーなどでは、開発メニューの「情報を表示」の「描画情報を表示する」で表示される情報の、Index Data の項目でポリゴン数を見ることが出来ます。


ポリゴン数は、「*.*** KTris」の部分に表示されています。

オブジェクトを選択すると、そのオブジェクトのポリゴン数が表示されます。
単位が「K(1000)」なので小数点が付いていますけれど、小数点を無視してそのままポリゴン数と考えたら大丈夫です^^

Alchemy Viewer では、「描画情報を表示する」の方法以外に、オブジェクトのプロフィールでもポリゴン数を見ることが出来ます。


「Triangles」の部分です。
「描画情報を表示する」の表示が分かりにくい場合は、こちらで確認してみてください。


自分で作ったモデルの場合は、Blender の編集画面でも確認出来ます。
編集画面の上に、選択したオブジェクトのポリゴン数などの情報が表示されています。


「Faces」が面数で、通常は“面数=ポリゴン数”となるんですけれど、Blender では多角形もポリゴンとして扱える「NGON(エヌゴン)」という概念がありますので、これはポリゴン数ではありません。

「Tris」、こちらが三角形のポリゴン数です。


たとえば、プリム製のアクセサリーで、そのプリム数が 100 プリムで出来ているとします。

これと同じ描画の負荷のメッシュオブジェクトを作りたい場合、仮に無加工の Cube だけで作られているケースでは、

108 x 100 = 10800 ポリゴン

で作らないといけません。

実際には、プリム製のオブジェクトでは様々な図形のプリムを組み合わせたりしていますので、プリム製の商品もポリゴン数はもう少し多いかもしれません。

みなさんが作られているメッシュのアイテムは、何ポリゴンくらいですか?

メッシュでものすごく細かくてきれいに作り込まれていても、ポリゴン数が何十万ポリゴンとかになってしまっていたらそれだけで、

重いメッシュ

になってしまっているかもしれません。


メッシュになって、作り手側の自由度はものすごく上がりました。
何十万ポリゴンのモデルだってアップロード出来ます。

しかし、その分ビュアーでの描画が早くなったわけではありません

ユーザーのパソコンの描画能力が同じであれば、プリムの描画の負荷とも比較しながら物づくりをしていかないと、

きれいだけど重くて住みにくい世界

になってしまいます。

メッシュが重いと言われる原因の一つが、この部分です。


もちろん、少ないポリゴン数できれいに見せるのは、それなりのテクニックが必要です。
そこは、デザイナーさんの腕の見せ所です!

ぜひ、環境にやさしい素敵なメッシュオブジェクトを作ってください^^


ポリゴン数を減らしました。
これで、メッシュが重い問題は解決でしょうか?

いいえ、実はまだ解決しなければいけない問題があります。

この続きは、また次回ー!^^/
このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿