2008年11月23日
スカルプト用モデルの最適化
今日は居合刀制作中に問題になった部分をピックアップして、スカルプト用モデルの最適化作業について書いてみるでござる。 作例は、刀の刀身でござる。
まず、過去に何度か書いておるスカルプの仕様についての基礎知識でござるが…
スカルプテッドプリムは、プリムを構成する頂点のローカル座標(X,Y,Z)を、それぞれ24ビットカラーの(R,G,B)に対応させたポジションマップを使って、形状を定義する仕組みでござる。
言葉にするとどうにも難しく感じる故、まずは下図をご覧くだされ。
(各図、クリックで拡大)
これはスカルプテッドプリム(円柱)とそのローカル座標空間(水色の格子)をイメージした図でござる。
この図では、スカルプテッドプリム周囲の空間は、X,Y,Z軸それぞれに10分割してあり、10x10x10=1000個のブロックを積み上げたような状態になっておるのがお分かり頂けるでござろうか。
ここでは見やすいように10分割にしており申すが、実際には各軸8ビットの階調で表すわけでござる故、256分割される事になり申す。
…で、スカルプテッドプリムの頂点は必ず、このいずれかのブロックの中心位置にスナップされてしまうのが、仕組み上の制約…と云う訳でござる。
上記を踏まえた上で、実際の作例を見てくだされ。 まずは悪い例。
刀の刀身のような細長~い形状の切っ先部分に、このように細かくメッシュ分割したモデリングをしても、長手方向の分解能が足りずに、定義不良の頂点が出てくるのは自明の理でござる。
理…などと云いつつ、形状のスナップショットがあるのは、拙者がやっちまった証でござる。orz
何も考えずに、これをそのままスカルプ出力すると…
ご覧のとおり、ガッタガタ。
さて、こうなると元モデルをスカルプト用に最適化する必要がある訳でござるが…
どんなに手間が掛かっても、高々33×33=1089頂点。 特別な事をする訳ではなく、チマチマと頂点を並べ直すだけでござる。 わはは。
では、実際に頂点配置がどのように「悪い」のかを確認するために、256分割したグリッドを敷いて、モデルをグリッドいっぱいに引き伸ばしてみるでござる。
図を見れば分かる通り、案の定縦方向の分解能が全く足りて無いのが確認できるでござる。
このままでは、頂点を並べ直すだけでは埒が開かなそうでござる故、頂点をもう少しまとめる等して整理し直す必要がありそうでござるな。
また、頂点を並べやすいように「切っ先」部分がグリッドの升目に垂直になるよう、刀身の角度を調整してから再度グリッドいっぱいに引き伸ばして作業する事にするでござる。
メッシュの構成も見直して無駄な分割を避け、斜めのラインが破綻しないように注意しつつ…各頂点がグリッドの升目中央に来るよう再配置したでござる。
こうして最適化したモデルをスカルプテッドプリムとして出力したのが次の図。
同じ形状を出力するにしても、モデリングの段階でスカルプテッドプリムの仕様に沿った最適化をすることで、ここまでクオリティに差が出る…と云う良い例でござる。
逆に言えば、ここまで手をかけてやらないと元モデルのクオリティを再現できないつーのもナンだかなぁ…と思う気持ちも、正直大有りなジジイなのではござるが…。;;
いやはや、勉強になったでござるなあ~。 わしが。(´・ω・`)
まず、過去に何度か書いておるスカルプの仕様についての基礎知識でござるが…
スカルプテッドプリムは、プリムを構成する頂点のローカル座標(X,Y,Z)を、それぞれ24ビットカラーの(R,G,B)に対応させたポジションマップを使って、形状を定義する仕組みでござる。
言葉にするとどうにも難しく感じる故、まずは下図をご覧くだされ。
(各図、クリックで拡大)
これはスカルプテッドプリム(円柱)とそのローカル座標空間(水色の格子)をイメージした図でござる。
この図では、スカルプテッドプリム周囲の空間は、X,Y,Z軸それぞれに10分割してあり、10x10x10=1000個のブロックを積み上げたような状態になっておるのがお分かり頂けるでござろうか。
ここでは見やすいように10分割にしており申すが、実際には各軸8ビットの階調で表すわけでござる故、256分割される事になり申す。
…で、スカルプテッドプリムの頂点は必ず、このいずれかのブロックの中心位置にスナップされてしまうのが、仕組み上の制約…と云う訳でござる。
上記を踏まえた上で、実際の作例を見てくだされ。 まずは悪い例。
刀の刀身のような細長~い形状の切っ先部分に、このように細かくメッシュ分割したモデリングをしても、長手方向の分解能が足りずに、定義不良の頂点が出てくるのは自明の理でござる。
理…などと云いつつ、形状のスナップショットがあるのは、拙者がやっちまった証でござる。orz
何も考えずに、これをそのままスカルプ出力すると…
ご覧のとおり、ガッタガタ。
さて、こうなると元モデルをスカルプト用に最適化する必要がある訳でござるが…
どんなに手間が掛かっても、高々33×33=1089頂点。 特別な事をする訳ではなく、チマチマと頂点を並べ直すだけでござる。 わはは。
では、実際に頂点配置がどのように「悪い」のかを確認するために、256分割したグリッドを敷いて、モデルをグリッドいっぱいに引き伸ばしてみるでござる。
図を見れば分かる通り、案の定縦方向の分解能が全く足りて無いのが確認できるでござる。
このままでは、頂点を並べ直すだけでは埒が開かなそうでござる故、頂点をもう少しまとめる等して整理し直す必要がありそうでござるな。
また、頂点を並べやすいように「切っ先」部分がグリッドの升目に垂直になるよう、刀身の角度を調整してから再度グリッドいっぱいに引き伸ばして作業する事にするでござる。
メッシュの構成も見直して無駄な分割を避け、斜めのラインが破綻しないように注意しつつ…各頂点がグリッドの升目中央に来るよう再配置したでござる。
こうして最適化したモデルをスカルプテッドプリムとして出力したのが次の図。
同じ形状を出力するにしても、モデリングの段階でスカルプテッドプリムの仕様に沿った最適化をすることで、ここまでクオリティに差が出る…と云う良い例でござる。
逆に言えば、ここまで手をかけてやらないと元モデルのクオリティを再現できないつーのもナンだかなぁ…と思う気持ちも、正直大有りなジジイなのではござるが…。;;
いやはや、勉強になったでござるなあ~。 わしが。(´・ω・`)
Posted by KT爺 at 21:49│Comments(2)
│ものづくり
この記事へのコメント
いやはや!これはお見事です! なるほど~。256分割の中心にスナップされるくだりはもの凄い勉強になりました! これは 256の仮想線を引けると強いですね・・・・まだまだ奥が深いですね~。
密集した頂点がガタガタになる理由。 こうして原因がわかると、なるほどもっともだなぁ~ってわかりますね。無駄に細かくてもいいってわけじゃない...ψ(。。)メモメモ... 無駄になる頂点は ゼロ距離集約でまとめちゃっても良いですね。
密集した頂点がガタガタになる理由。 こうして原因がわかると、なるほどもっともだなぁ~ってわかりますね。無駄に細かくてもいいってわけじゃない...ψ(。。)メモメモ... 無駄になる頂点は ゼロ距離集約でまとめちゃっても良いですね。
Posted by よねまる♪ at 2008年11月26日 01:08
>よねまる殿
ご参考になれば幸いでござる。^^
グリッドの間隔設定は、たいていのモデリングソフトにはついておるので、
どうしても形が崩れてしまう場合は、こういうふうにグリッドを設定しての最適化作業も検討してみると良いでござるよ。
スカルプテッドプリムの仕組みは分からずとも、ツールを使えばとりあえず作成は出来申す。
しかし、こういった問題にぶつかったときに
「じゃあ、どうすればいいのか?」
を考えるには、やはり仕組みの理解がどうしても必要になってくるでござるよな。^^;
ご参考になれば幸いでござる。^^
グリッドの間隔設定は、たいていのモデリングソフトにはついておるので、
どうしても形が崩れてしまう場合は、こういうふうにグリッドを設定しての最適化作業も検討してみると良いでござるよ。
スカルプテッドプリムの仕組みは分からずとも、ツールを使えばとりあえず作成は出来申す。
しかし、こういった問題にぶつかったときに
「じゃあ、どうすればいいのか?」
を考えるには、やはり仕組みの理解がどうしても必要になってくるでござるよな。^^;
Posted by KT爺 at 2008年11月26日 13:34