Blender(v2.9) で
MSFS(FS2020)用のオブジェクトを作成する際の備忘録
気づいたことを「備忘録」として散漫に記録しています。 更新:2023年 11月 少々追加
・BlenderからMSFS(FS2020)用ファイルのエクスポートには、Blender2MSFS toolkitアドオンをBlenderにインストールして使う。BlenderのVer3以降では使えず、私は2.93で使っている。
エクスポート時には GUID付加 を指定。 出力形式は、glTF + bin + xml で。テクスチャ出力先は ../texture と入力。
・2023年9月時点では、Asobostudioの gltf-Blender-IO-MSFS(v.1.3.2) というエクスポート用アドオンが公開されている。MSFS公式ツールとなっているので、こちらがよいと思われる。
Blenderのバージョンは3.3.xのみ対応。
・エクスポート方法は拙 WEBのこのページを参考に(ページ内のB手順とC手順は、Blenderでモデル作成をして出力する場合は不要)。説明はBlender2MSFS toolkitを使った例だが、
新しい gltf-blender-IO-MSFS では、エクスポートはFileメニューからではなく、画面モード MultiExport GLTF 2.0 のメニューから行う点に注意。
テクスチャの貼り付け(テクスチャはPNG形式が便利)
各画像の元サイズは 1340ドット ほど。
・Layoutタブで、テクスチャ貼りをするオブジェクトを選択。
・①UV Editingタブで、②面モードにして ③Select -- ④All で すべての面を選ぶ。(貼りたくない面は外してもOK。)
・UV -- ⑤Smart UV Project -- ⑥OK とすると、左側画面に、オブジェクト各面の展開図が表示される。
・⑦Shadingタブに移動し、下段の作業スペースで、ノードを張る(結ぶ)。 緑と赤の2つのBOXが見えていなければ、+new を押せば2つのBOXが現れる。
⑧Add で、⑨Texture -- ⑩Image Texture を選択し、現れたBOXで、⑪準備した画像テクスチャを指定する。
・Color と Base Color を結ぶ。
・上の画像の⑫~⑲は、通常は省略。準備したテクスチャの一部を拡大縮小して貼り付けたい時や、その他の場合に、あらかじめ設定しておく項目。
・ここまでの作業で、上段に表示されているオブジェクトにテクスチャがめちゃめちゃな位置に貼りついているのが見える。
・⑳UV Editingタブで、オブジェクトの1面ずつを選んで、左に見えるテクスチャの正しい位置に合わせてテクスチャ貼りを行う。(A面、B面の例)。
・すべて貼り終えたら、Layoutタブに戻って、出来栄えを確かめる。
透過処理
・透過と半透過を1枚の画像で処理するのは、うまくいかないことがある(今のところ)。半透過用のテクスチャは別に準備する。半透過部分は別オブジェクトとしてテクスチャ貼り付け作業を行う。
・FSX/P3Dの時と同じように、全透過部分を黒色にしたアルファチャンネルを持つpng画像を準備する。
・shadingタブで、ノードを張る(結ぶ)。2つのBOXが見えていなければ、+new を押せば2つのBOXが現れる。
Add で、Texture -- ImageTexture を選択し、現れたBOXで、準備した画像テクスチャを指定する。
・Color と Base Color を結ぶ。
透過する面があるときは、Alpha と Alpha を結ぶのを忘れない。
・プロパティのSettingで、Alpha Clip または Alpha Blendを選択する。
・通常通りにUVマッピングで貼り付けを行い、Layoutタブでも透過して見えていればOK。
・png画像の代わりにdds画像を準備しても、Blender上では問題なく同じように貼り付け作業ができるが、FS2020用にエクスポートしてFS2020で見ると、テクスチャが貼りついていなかった。
png画像ならOK。特にModelConverterXを使用してFSX等のモデルを変換して、そのテクスチャの修正を行う場合は、ModelConverterXのMaterial
editorのTextureタブで簡単に形式変換できるので、何かとBlenderと親和性の高いPNG形式に変換してしまったほうが便利である。
半透過
・半透過の部分をグレー色にしたアルファチャンネルを持つpng画像を別に準備するほうが無難。(1枚のpng画像に透過/半透過が混ざっていてもOKの時もある。)
png画像のグレー色が明るければ透過度が高く、暗ければ透過度が低くなる。
半透過部分は全透過部分を持つオブジェクトとは別のオブジェクトとしてテクスチャ貼り付け作業を行う。 ほかは透過(全透過)の時と同じ作業。
・プロパティのSettingでの指定は、Blend Mode項目だけを、Alpha Blend にする。Shadow項目はOpaque(不透明)のままにしておかないと、思いがけない面が半透過する可能性がある。
アニメーション
・Blenderでアニメーションを設定した後、Scene Collectionで、アニメをつけたオブジェクトの項目中のAnimationツリーにあるアニメーション名(自由に名付けられる)を記録。
・BlenderでglTF+bin+xml でエクスポートする。GUID値付加。ほかの出力タブは通常のエクスポート時と同じでよい(Animation項目内の選択肢も特にチェックの必要なし。しない方が何かと無難)。
・出力されたxmlファイルは不完全なので、SDKのSampleにある形式に整形する。
・整形されたxml中に、次の一行を挿入する。
<Animation name="*記憶しておいたアニメーション名*" guid="f5f7a35d-*****" type="Standard" typeParam="AutoPlay" /> ← < >は半角文字に。
guidの値は、モデルとは別に新たな値を記入します。オンラインでGUID値を発行しているサイトを利用す
れ ば簡単に値が取得できます。
またAnimationに関する行でのguid値は{ }で囲わなくてよい。
・2023年1月現在、Blenderでエクスポートすると、xml記述の第1行目のencodingの項目と最終行の</ModelInfo>は出力されない。通常のモデルのエクスポートはそれで問題は起きないが、
アニメーションを含むモデルのエクスポートの際は、上記の白囲みの中で示した形にしないと、モデルは出力されるがアニメートはしない。
・FS2020のSDKで配置作業、コンパイルする。
オブジェクトの面を固める(landable surface, hard surface)
・橋の上や屋上ヘリポート等を着陸可能にするには、Blenderで設定作業を行う。
・固めて着陸可能にしたい面を選択し、「P」キーでオブジェクトから分割し別パーツ(別オブジェクト)にする。
(固めたい面が、始めから別オブジェクトになっているなら分割作業は不要。)
・分割したパーツをコピー&ペーストして、固め用パーツにする。
・固め用パーツを直上か真横に少しずらし、作業しやすく(見やすく)する。
・この後は、Layoutタブ -- Object Mode で作業。固め用パーツを
選択する。
・Material Properties で、MSFS Material Params項目の、Material Mode で、Select: を MSFS Invisible にする。
・すぐ下にある Gameplay parameters で、Road material にチェックを入れる。
・固め用パーツを、元パーツと同じ正しい位置に戻し、作業終了。
固め用パーツはMSFS内では見えない設定にしてあるので、わずかな位置誤差ならば大丈夫。
FS2020のSDKで地形を整形する(テラフォーミング、Terraforming)
・③Scenery Editorの View - Objects ④Polygonメニューで、⑤Terraformingにチェックを入れて地表整形作業をする。
・実線で標高変更する地表を囲む。各ポイントの高さは移動できるので、傾斜のある地形も設定できる。
・点線は周囲の地形に落ち込む外周線。実線のすぐ近くに設定すれば、実線のところからデフォルト地表の高さまで急激に標高が変化する。実線から離して設定すれば、 デフォルトの高さまで徐々に変化する。
・⑥の数値を変化させて(単位はメートル)、点線と実線の離れ具合を設定する。
(Dec.2022 追記)
・1つのプロジェクト内に何か所もテラフォーミングをすると、エラーが出ることがある。(確認済み)。テラフォーム範囲にとんでもない尖りがでたり、かなり離れた場所に尖った地形が現れたりする。
対策として、テラフォーミング範囲をPolygonで描かずにrectangleで描いた方が良い、という情報もあるが現在確認できていない。
ライトをモデルに追加(軒下などの照明ライトは簡単に付加できる。が、他は難物。)
・ライトの作成について、2023年時点でかなり有望な方法がYouTube動画で紹介されている。英
語ではあるが、この動画を参考にするのが一番スマートである。
しかし、以下にあげた方法もライトの使用場所によっては役に立つと思われる。
・ライトの追加はSDKでの配置の際に、デフォルトの照明ライトを配置することができる。点滅するビーコンも幾つかある(が、デフォルトのビーコンかどうか判別できないが...)。
しかしBlenderの作業での照明ライト付加の方が明るさや色など細かい所に手が届く。MSFS用の照明ライトは Point と spot の2つしか有効でないが、この2つで十分に事足りる。
ただしこの光は「反射光」であることと、あまり遠くからは見えないので残念であるが、SDKデフォルトのlight関連オブジェクトとBlenderで作成したライトを併用することで、表現効果を上げることはできる。
しかし問題は、自ら発光するように見えるライト(ビーコンやストロボのように、光そのものを見るためのライト)の自作で
ある。
こういった自ら発光し遠くからでも見える明るいオブジェクトを作るには、Blenderでのモデリング+SDKでの設定作業が必要であるが、先ずは、Blenderでの処理のみで出来る基本的なところを押さえておきたい。
・白ストロボは、Blenderで Add -- Light(Point) を設定。Object Data Properties -- Light -- Color は白。
( Pointだと不要部分も照らしてしまうので、
Spotの方が良さそうである。)
ObjectProperties -- MSFS Properties の MSFS Ligt parameters で、has symmetryにチェックを入れ、flash frequency=50 duration=0.2 で実験。
Flash frequency --- 1分間にフラッシュを何回光らせるかを指定。
Flash duration ----- 1回あたりのフラッシュ光が光っている時間(秒)。0.2なら0.2秒間光るフラッシュ光。
Flash phase ---- 発光し始めるタイミングを設定。シムが起動スタートしてからどれくらいの時間遅れで発光するか指定できる。
1.5と設定するとシム起動から1.5秒後に発光する。これを利用すると複数のフラッシュ光が流れるように見える効果を設定できる。
rotation speed --- spotの光を回転させられる。1分間の回転数を指定。上空からみて時計回りでspot光が回転する。
ただし、このLightは「周囲の物を照らすだけ」の効果しか持たないので、何らかの反射体が無い場合は光る効果が見えない。自ら発光するようには描画されない。
・赤ビーコンは、ライトの形のオブジェクト(物体)を置き、Material Properties で、Surface を Emissionに、Color を赤に
設定。
これで物体そのものが赤く光って見える。しかしFS内で見ると、あまり明るくはない。
それで、ライト状物体の直上に、Add -- Light(Point)でLightを置いて、赤色に設定。これでビーコン直近のアンテナ柱が赤く染まる。
・次に、SDKでの配置作業で出来るビーコンの配置方法も押さえておきたい。この方法で配置出来るビーコンは明るくて、かなり遠くからでもよく見えるが、少々気まぐれなところがあって、MSFSで飛行を始めても数分間ほど光ってくれないことがある。
まずダミーの物体を1つ作ってエクスポートし、SDKでダミーのオブジェクトを配置しHas beaconオプションを使う。ただし点滅するビーコンのみ可能。具体的手順はいあkの通り。
1.Blender等のモデリングツールでダミーの小さなオブジェクト(Blenderで製作の場合はEmptyオブジェクトか、小さくて見えに
くい立方体など。オブジェクトにはアタッチ用に分かりやすい名前を付けておく)を1個作り、SDKでMSFS内に配置する。
ダミーオブジェクトの31.0m上にビーコンが光るので、ビーコン予定位置の31.0m下にダミーを置くこと。
2.Properties -- Has beaconの特性にチェックを入れる。
3.アタッチポイント名欄に、1.で設定しておいたアタッチ用名前を入れる。
4.ビーコンのタイプは9種類で、フラッシュの間隔や放射秒数は任意に決められない。よって自由度は高くない。
CIVILIAN SEA_BASE 白--黄-- 交互に点滅
AIRPORT 青--白-- 交互に点滅
HELIPAD 青--白--黄-- この順で交互に点滅
MILITARY SEA_BASE AIRPORT HELIPADとも同じ 青----白-白-- この順で交互点滅
CANADIAN SEA_BASE 白--黄-- 交互に点滅
AIRPORT 白--白-- 点滅
HELIPAD 白-白-白-白---- 点滅
自ら発光するストロボ(フラッシュ光)の作製法として、Emission
指定の物体のアニメーションでやる方法もある。
発行体の色や大きさ、発光の強さ、発光間隔をBlender上で自由に設定できる。明るさには限界があるのではあるが。
・SurfaceをEmissionに指定。Colorは任意の色に。Strengthで光の強さ。
・アニメーションのフレーム1で強さ80に指定。Strength窓の横の「・」を押すと「♦」に変わり、アニメ設定欄にも
フレーム1の箇所に設定済みの印が入る。
・フレームを5に進め、強さを1程度に指定して♦を押す。アニメ設定欄のフレーム5の箇所にも印が入る。
・最終フレーム(この実験では25=約1秒)に進め、強さ1程度を指定し♦を押す。
・以上で、0.2秒間ピカッと光るのを1秒間隔で繰り返すアニメーションが出来る。
光り方の「切れ」はいまひとつ良くないが、何とか使えそう、
と思ったが、このアニメーションは今のところMSFS2020に出力できないことが判明。使えない。(Apr. 2021)
参考資料
FSDeveloper.comのフォーラム記事(Blender と MSFS SDKでの作業についての質疑応答。参考動画。) -- 赤ストロボの設定はちょっと難あり、ではありますが、参考になります。
(アニメーションと発光体(ポイントライトとスポットライト)の設定動画YouTube) --
回転ビーム灯を設定した灯台の作成方法。灯光とアニメのリレーション法も分かる。
割と簡単そうでMSFSでも動作しそうな方法 --
上の実験の「赤ビーコン」の発光体はこの方法で作成。
ノードを使用したちょっと高度な方法(Blenderバージョンはv2.8)
オブジェクトの色を変化させるアニメーション(フラッ
シュ光にも応用可能) -- 今回やってみたアニメーションの方法と同じ。
・SDKには空港オブジェクトとしてライトを配置する方法も書いてある。この空港ライトは色・フラッシュ間隔・向き・光芒の大きさ・光の見える距離等が設定できる仕様になっている!!。
しかしライト1個だけのために架空の空港を設定するのが不自然かつ面倒そうなのと、SDKに「今のところは列状のライト群しか設定できない」とも書いて
あるので、試してみるまでどうなるかは分からない。
・MSFSデフォルトに見える明るいビーコンや街路灯をモデルに付加する方法として、イフェクト(FX)を使う方法も考えら
れるが、あまり簡単ではなさそうである。
Blenderでモデルを作り、イフェクトを付加したい場所にDummyのキューブなどを付加して、パーツの名前をtowerbeacon-1などのように適当にリネイムし、モデルを出力する。その後、
SDKのイフェクトエディターでライトなどを付加する作業を行ってからモデルをコンパイルする。 参考YouTube動画 = https://www.youtube.com/watch?v=ohru5jw5hOo
イフェクトエディターは使い方がかなり複雑そうである。
厚みのある文字を配置する
・Layout -- Add -- Text で、「Text」という文字が作業画面に出現する。
・「Tab」キーを押すと、「Text」という文字の横に編集カーソルが現れる。
1バイト文字の場合は通常のエディターのように文字編集する。
・日本語を入力するのにはBlender v2.9はちょっと癖あり。
一時的にBlenderの使用フォントをMSゴシックなどの日本語フォントがあるものに変更
したうえで、別のテキストエディターで日本語を入力し、それをコピー&ペーストして
モデルにする。以下のように。
ObjectDataProperty -- Font -- Regular のフォントを、MSゴシックなどの日本語
フォントに変更する。
メモ帳などのエディターで日本語を入力し、コピーする。
編集カーソルの近くで右クリックして、現れたBoxのPastを押して日本語を配置。
・ObjectDataProperty -- Geometry の Extrude項目で、文字の厚みを指定。m単位。
画像の例では、0.15mを指定。
・文字の色指定は、Shadingタブで、下段の Add -- Color -- Brigt/Contrast のBoxで、
color窓で色を指定し、color と Principled BSDF の BaseColor をノードでつなぐ。
上のようにして配置したテキスト文字を、そのままMSFS用にエクスポートしてSDKでコンパイルしても、MSFS内では何も表示されない。
MSFS内で表示されるようにするために、テキスト文字をメッシュに変換する必要がある。
1.テキスト文字を選択し、Objectボタンを押す。
2.Convert -- Mesh と選択して、テキスト文字をメッシュに変換する。
変換後は通常の メッシュと同じように加工編集できるが、変換後の文字はポリゴン数が多いメッシュになっているので、文字数があまりに多いとMSFSのフレームレートに影響が出る可能性もある。
どうしても厚みのある文字が欲しい場合以外は、2Dタイプの文字か、テクスチャ処理で文字を表示する方が無難である。
曲面の表面を滑らかにする
・円柱やコーン、球体などのオブジェクトは多数のポリゴンを連ねて表現されているが、どうしても見た目が悪くなってしまう。そんな時は円滑化を行って見栄えを良くする。
・方法はA.とB.と2通りあるので、上手くいく方を選ぶ。A.の方が簡単。
A.
・円滑化したいオブジェクトを選んで、右クリックし、現れたメニューからShade Smoothを選ぶ。
B.
・シリンダーオブジェクトをベースに作る、円柱やコーンなどの場合は、次の3ステップで円滑化する。
0. Modifire Properties で Add Modifire の右にある下矢印三角をクリックしてメニューを出す。
1. EdgeSpilit を選ぶ。 Edge Angleは30ぐらいでよい。うまくいかない時は値を変化させてみる。
このステップを実行しても、製作画面上では何の変化も起きないように見えるが、気にせず次のステップへ。
2. subdivisionを選ぶ。 levels ViewPoint と Render の値を2以上に適宜設定して、滑らかに見える値を選ぶ。
3. File --- Export でgltf出力する際は、設定タブの Geometryにある、Apply Modifiers にチェックを入れるのを忘れないこと。
・円柱のような「辺」のないオブジェクト、例えば球体などのオブジェクトの場合は、1.の EdgeSplit を行わなくてよい。
ホームページに戻る (to Site Top)