mieki256's diary



2024/05/05() [n年前の日記]

#1 [blender] blenderのカーブをobjで保存して加工したい

blender 3.6.9 x64 LTS 上で作成したカーブオブジェクト(ベジェ曲線)を、Wavefront obj形式でエクスポートして、OpenGLを使ったプログラムから利用できるようにしたい。

blenderから、一般的なモデルデータ形状を、Wavefront obj形式でエクスポートすることはできるけれど、belender上のカーブ(ベジェ曲線)は、Wavefront obj形式でエクスポートできるのだろうか…?

試してみたところ、一応エクスポートできるようだなと…。曲線を、細かい直線で近似したような状態にしてエクスポートしてくれる。

curve_take01_ss03.png

export_wavefront_obj_ss.png


ただ、直線の長さがバラバラで、そのままではプログラムから扱いづらい。

できれば一定の間隔で頂点が配置されてる状態にしたい。以下の作業をすることで、調整できるか試してみた。
  1. Wavefront obj形式からcsvを作成。
  2. csvを、Python + scipy のスクリプトで読み込んで、スプライン曲線に変換。
  3. スプライン曲線にしたcsvを、Pythonスクリプトで読み込んで、Wavefront obj形式に変換。
  4. blenderでWavefront obj形式をインポート。

テストで使った .obj は以下。

_curve.obj


まず、Wavefront obj形式をcsvにするPythonスクリプト、lineobj2csv.py を書いてみた。このスクリプトは、x,y,z のうち、x,z だけを出力する。

_lineobj2csv.py
python lineobj2csv.py -i curve.obj > curve2.csv

得られた csv は以下。

_curve2.csv

この csvを、Python + matplotlib で表示して、頂点の状態を確認してみる。

_draw_line_plot.py
python draw_line_plot.py curve2.csv

curve2_ss01.png

頂点の間隔がバラバラで、しっくりこない。


Python + scipy で、スプライン曲線にして、頂点の間隔を調整する。

_dump_spline.py
python dump_spline.py -i curve2.csv -n 1 > curve3_spline.csv

得られたcsvは以下。

_curve3_spline.csv

得られたcsvを、Python + matplotlib で表示してみる。頂点の間隔が調整された。

_draw_line_plot.py
python draw_line_plot.py curve3_spline.csv

curve3_ss01.png


こうして得られたcsvを、Pythonスクリプトに渡して、Wavefront obj形式に変換する。ちなみに、csvにはx,z値しか入ってないので、y値は0.0にして出力する。

_csv2lineobj.py
python csv2lineobj.py -i curve3_spline.csv > curve4.obj

得られた .obj は以下。

_curve4.obj

この .obj を blender でインポート。メッシュオブジェクト(線データ)としてインポートされる。形状がおかしくなってないか、頂点の間隔がおかしくないか確認。

こんな感じで、blender上のカーブ情報を .objでエクスポートして、Pythonスクリプトで加工して、.objにしてインポートし直すことができた。

メッシュからカーブへの変換 :

余談。インポートした線データは、メッシュオブジェクトになっている。カーブ情報に変換したい時は、以下のどちらかの操作をする。

  • オブジェクト → 変換 → カーブ、を選ぶ。
  • もしくは、右クリックして、変換 → カーブ。

そのままだと連続した直線データになっている。曲線にしたい時は、更に以下の操作をする。

  1. カーブを選んで、TABキーを叩いて編集モード(頂点編集モード)に入る。
  2. Aキーを何度か叩いて、全頂点を選択。
  3. 右クリックして、スプラインタイプを設定 → ベジエ、を選ぶ。
  4. 右クリック → ハンドルタイプ設定 → 自動、を選ぶ。

これで各頂点にハンドルがついて、曲線になってくれる。

2024/05/06追記 :

頂点の間隔を等間隔にしたいだけなら、LoopToolsアドオンを有効にして、「Space」をクリックするだけで済むと知った。上記のような面倒なことはしなくていい…。

以上です。

過去ログ表示

Prev - 2024/05 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project