月下電波

同人サークル「PhotonSystem」の電波

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- --:-- | スポンサー広告 | トラックバック(-) | コメント(-) |
いつだかに日記で公開した
当サークルで使用している地形作成方法(http://photons.blog71.fc2.com/blog-entry-90.html)

上記手法用に作成したスクリプトをメモ代わりに日記に残しておく事にしました。




そもそもMetasequoiaではツール上では面ごとに色を設定できますが
実際に吐き出されたxファイル等の形式で出力すると色がきっちり分かれてないことが有ります。

これはMetasequoiaでは面ごとに頂点の色データが保持されているようで
別の形式になると頂点ごとの色形式になってしまうので隣り合っている面の色情報が失われてしまいます。
(NC開発時には頭かかえて悩んでました)

●色情報が失われるパターン(面ごとに着色)
face2.jpg



●失われないパターン(頂点ごとに着色)
face1.jpg



どうしても色データを失いたくない場合には
この画像でいう「緑の部分」と「赤の部分」の頂点データを切り離すことで解決します。
例)赤の面だけのオブジェクトと緑の面だけオブジェクトにわけたあとに再結合するなど

だがここで問題があり
実際のゲームだとポリゴンの多さから切り離し作業が非常にネックとなります。
meta1.jpg




そこで今回はMetasequoiaのスクリプト機能で
自動で特定の色の面だけを抽出するスクリプトを組んでみました。


#ここに一致する色以外は削除する
#---------------------------------------
r = 1.0
g = 0.0
b = 0.0
#---------------------------------------
MQSystem.println("スクリプト開始")
doc = MQSystem.getDocument()
obj = doc.object[doc.currentObjectIndex]

if obj.numFace == 0:
   MQSystem.messageBox("対象オブジェクトを選択して実行して下さい")
   sys.exit()

for face in obj.face:

   if face.getColor(0).red == r and face.getColor(1).red == r and face.getColor(2).red == r and face.getColor(0).green == g and face.getColor(1).green == g and face.getColor(2).green == g and face.getColor(0).blue == b and face.getColor(1).blue == b and face.getColor(2).blue == b:
      pass
   else:
      MQSystem.println("face ["+str( obj.getFaceIndexFromUniqueID(face.id) ) +"] delete")
      obj.deleteFace( obj.getFaceIndexFromUniqueID(face.id) )

MQSystem.println("スクリプト正常終了")



上記のスクリプトを実行すると下記のようになります。
meta2.jpg



赤色以外は全て削除されます。

ソースを少しいじるだけで特定の色を削除したり、
もっと改良すれば 色ごとにオブジェクトを分割する なんてこともできそうです。

以上スクリプト紹介でした。
何かのお役に立てば幸いです!












管理者にだけ表示

トラックバックURL↓
http://photons.blog71.fc2.com/tb.php/103-b9b3c172

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。