*[[OpenFOAMの結果からBlenderで動画作成]] [#a59dbce3]

3次元CGソフトウェア[[Blender:https://www.blender.org]]を使用して、[[OpenFOAM:http://www.openfoam.com]]の結果から写実的な動画を作成することができます。

//#ref(bubble_ring.png,center,nowrap,70%,OpenFOAM bubble_ring);
#youtube(W-bD_Gs9EVY)

動画を作成する手順は

+ [[ParaView:http://www.paraview.org]]で可視化
+ ParaViewからx3dファイルを時系列分出力
+ Blenderの各時間ステップ毎に画像を作成
+ ImageMagicなどで画像から動画に変換

となります。

[[Blender® Cou­pling:http://www.holzmann-cfd.de/scripts/blenderScripts.tar.gz]]にあるスクリプト

-blenderRender.py
-paraview.py

を参考に作成します。

ここでは、OpenFOAMのinterPhaseChangeDyMFoamのチュートリアル

multiphase/interPhaseChangeDyMFoam/propeller

をデフォルト設定で計算した結果を使用します。

#youtube(https://www.youtube.com/watch?v=UovsN1FHlM0)
#youtube(UovsN1FHlM0)

(一番下にx3dファイルからのサンプルがあります)

** ParaViewで可視化とx3d出力 [#g1e0f779]

可視化ソフトウェアParaViewを使用して、OpenFOAMの結果を可視化し、動画にしたい形状をx3dファイルで出力します。

*** 結果の読み込み [#b8c00255]

まず、OpenFOAMの結果を読み込みます。読み込み方が分からない場合は、
[[OpenFOAM結果の読み込み:http://www.rccm.co.jp/icem/pukiwiki/index.php?OpenFOAM%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF]]をご参照ください。

ここで、読み込む領域として

Mesh Regions: internalMesh

だけを選択し、変数は

Cell Arrays: alpha.water

のみを選択します。0ステップ目で、エラー(リーダーに未対応の境界条件があるため)が出ますが無視して構いません。

#ref(OpenFOAMReaderOptions.png,center,nowrap,70%,OpenFOAMReader Options);

*** 気体部分の抽出 [#ma552df2]

Iso Volumeフィルターを使用して、alpha.water(水相率)の値から気体部分を取り出します。

まず

  Filters > alphabetical > Iso Volume

と進み、

-Minimum: 0
-Maximum: 0.99

とし、"Apply"します。

(ここで、0.5が水と気体の境界ですが、30ステップ当たりのバブルリングが上手く取れなかったのでこの値としました。。)

#ref(IsoVolume.png,center,nowrap,70%,IsoVolume);

*** プロペラ形状の抽出 [#od01c863]

次に、プロペラ形状を抽出するために、更に、OpenFOAMの結果を読み込みます。

File > Open..から、x.foamを選択し、

-Mesh Regions: propellerTip, propellerStem1, propellerStem2, propellerStem3
-Cell Arrays: 選択なし

で"Apply"します。

#ref(propeller.png,center,nowrap,70%, propeller);

*** x3dファイルの出力 [#s3155775]

ParaViewから、Pythonスクリプトparaview.pyを使用し、プロペラ形状と気体部分の形状を時系列分のx3dファイルで出力します。

ここでは、サンプルとして、23ステップ目から27ステップ目までの5ステップを使用します。

paraview.pyのうち

-時間ステップ数(for文のrange)
-出力するファイル名(name)

を変更します。

#code(c){{
# # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Paraview python script for exporting x3d scenes
# Tobias Holzmann
# February 2016
# Tobias.Holzmann@Holzmann-cfd.de
# # # # # # # # # # # # # # # # # # # # # # # # # # # #

from paraview.simple import *

# Change 500 to the amount of timesteps
for num in range(0,5):
    print 'Export scene ' + str(num)

    renderView1 = GetActiveViewOrCreate('RenderView')
    renderView1.ViewSize = [1371, 775]

    # Build file name
    # Change to your folder
    name = 'G:/propeller/BlenderPropeller/x3d/blenderX3D_' + str(num) + '.x3d'
    print 'Save as ' + str(name) 
    ExportView(name, view=renderView1)

    animationScene1 = GetAnimationScene()

    animationScene1.GoToNext()
}}

ファイル修正後、timeステップを23に指定し、メニューバーのTools > Python Shell から"Run Script"を開き、paraview.pyを実行しますと、23ステップから5ステップ分のx3dファイルが作成されます。

#ref(export_x3d.png,center,nowrap,70%, exportx 3d);

** Blenderによる画像作成 [#abeb03b9]

blenderRender.pyを適宜修正します。

-9行目と292行目のファイルパスを変更

(Blenderの心得がある場合は、修正して、もっと綺麗な画像を作成できると思います)

コマンドプロンプトから

  blender -P blenderRender.py

を実行することで、各時刻の画像が保存されます。(水中に見えるように要改善)

#ref(blended_06.png,center,nowrap,50%, blender image);

** 画像から動画に変換 [#u89a2c94]

最後に、ImageMagicなどを使用して、Blenderで作成した各時刻の画像から動画を作成します。

**ダウンロード [#o2dc9c05]

[[BlenderPropeller.zip:https://www.rccm.co.jp/cgi-bin/dfs2/ticket.cgi?ticket=aU5kMjAxNjA2MjMxNzEyMzRvN3lvc2hpbWl3UWk=7]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS