【SketchUp】Blenderでインポートする方法、面の重なりに注意

SketchUp

SketchUpで作ったモデルをBlenderでインポートする方法についての検証メモです。

※ 本記事で使用したバージョンはSketchUp2019, Blender2.91です。

ファイル形式について

標準でSketchUpから書き出し、Blenderでインポートできるファイル形式はCOLLADA形式(.dae)、OBJ形式(.obj)の2つです。 FBX形式(.fbx)も一見できそうなのですが、できません。FBX形式の中でも2種類の形式(ASCII / Binary)があり、SketchUpとBlenderで扱いが異なるためです。

Blenderの外部アドオンSketchUp Importerをインストールすれば、.skpのファイルをそのまま読み込むことも可能です。

SketchUp検証シーン

SketchUpはマテリアル設定に関して次のような(独特な?)特徴があります。

  • 面(Face)の前面・背面に別々のマテリアルを設定することができる。(上図のように面を選択すると、前面と背面のマテリアルが分かれていることが確認できる)
  • グループまたはコンポーネントによるツリーの親にもマテリアルを設定することができる。(子に設定したマテリアルの優先順位が高い)

そこで、2種類のマテリアル mat1(白), mat2(黒)を下のように反映させた4枚の板を作りました。②では子のマテリアルが無いので前面・背面とも親のマテリアル(mat1)が適用されます。④では前面で子のマテリアル(mat1)が優先されています。

このシーンをCOLLADA形式、OBJ形式でそれぞれ書き出して、Blenderでインポートしてみます。

Blenderでインポート

COLLADA形式(.dae)の場合

下の図のようになりました。前面から見ているのですが、SketchUpと表示が異なります。これは実は表示がきちんと出来ていない状態です。まず注目すべきはポリゴン数。四角形が4枚なので、三角ポリゴン数は8となるはずですが・・・?

  • グループごとにオブジェクトが分かれている
  • 三角ポリゴン数:14

面を選択して少し動かしてみると分かるのですが、実はこういう状態になっています。②,③,④では全く同じ位置に面が2枚ずつ重なってしまっている状態だったのです。全く同じ位置に面が2枚あると、Blenderはどちらを描画していいのか判断できず、表示がおかしくなってしまいます。

SketchUpで前面・背面それぞれにマテリアルが適用されているときには前面と背面が重複した面として書き出されてしまうことが分かりました。②,④のように直接(子の)背面にマテリアルを指定していなくても、親のマテリアルが反映されている場合はやはり重複した面が生成されてしまうようです。

OBJ形式(.obj)の場合

OBJ形式のデータを読み込むと、mat1の白い面が表示されました。

  • 三角ポリゴン数:8
  • ツリー構造は破棄されてオブジェクトが 一つに統合されている
  • マテリアルはmat1のみ(背面のマテリアルは無視されている)

この結果を見ると個人的にはOBJ形式の方が圧倒的に扱いやすいと感じますが、そうとも言い切れません。OBJ形式では.obj、.mtlなど複数のファイルに分かれてしまうため、管理が煩雑になるというデメリットもあります。 マテリアルやテクスチャを後から編集する場合はCOLLADA形式でオブジェクトが分かれていた方が楽という場合もあります(このケースについては、本記事の最後に参考動画を紹介しています)。

ちなみに、より複雑なシーンで試したところ、OBJ形式で書き出しても法線の反転や面の重なりが起こってしまうことがありました。これの原因は良く分からず、個別に修正するしかなさそうです。(下図はBlenderで面の向きを表示した様子。青は表、赤は裏。)

SketchUp Importerプラグインの場合

Blenderの外部アドオンとしてSketchUp ImporterがGitHubで公開されていますので、これも試してみました。(インストール方法はここでは省きます。)

※使用したアドオンのバージョンはSketchUp Importer v0.21.1です。

  • 三角ポリゴン数:8
  • グループごとにオブジェクトが分かれている
  • マテリアルはmat1のみ(背面のマテリアルは無視されている)

COLLADA形式とOBJ形式といいとこ取り、のような印象を個人的には受けました。しかし、複雑なシーンで試してみると・・・

あれ。何か上手く行きませんでした。「複雑なシーン」と一口に言っても、人によってSketchUpのシーンの作り方は違うと思うので、結局自分に合うものを探す、という結論になってしまいそうです。

Blenderでデータをきれいにする

重なった面の削除や、法線の反転を修正したい場合は、メッシュを選択してから下記のコマンドを実行します。

Mesh > Clean Up > Merge by Distance(距離が近いメッシュを統合する)

Mesh > Normal > Recalculate Outside(法線を再計算して外側を向かせる)

他にも、Mesh > Merge > By Distance も使えるかもしれません。Clean Up > Merge by Distance と違いがあるのか良く分かりませんが・・・。

複雑なシーンの場合、これらの処理を行っても面の重なりや法線の反転が取り切れないことがあります。その場合は地道に一つずつ直していくしかありません。

結論

SketchUpからBlenderへのデータの受け渡しはOBJ形式またはCOLLADA形式で行うことができます。 外部アドオンSketchUp Importer.skpのファイルをそのまま読み込むことも可能です。 それぞれ一長一短なので、試してみて自分にベストな方法を選ぶのが良いと思いますが、どちらにしても適宜メッシュの重なりや法線の反転を修正する必要が出てきます。

簡単&キレイにデータのやり取りができるようになるといいなぁ・・・。

参考:TheSketchUpEssentialsさんの動画

TheSketchUpEssentialsさんの動画です。テクスチャ付きのモデルで、エクスポート時のチェックボックスオプションのことまで詳しく解説されています。 OBJ形式はシンプルで扱いやすいですが、マテリアルやテクスチャを後から編集する場合はCOLLADA形式でオブジェクトが分かれていた方が楽なようです。ケースバイケースですね。また、COLLADA形式で書き出す際にSketchUp上で全てが一つのグループにまとまっていると正しくエクスポートできないので、ある程度グループをバラしておく必要がある、という重要なノウハウが述べられています(動画の10:00~辺り)。(動画は英語のみ)

500% Faster Blender Renders?!?!?!
Exporting SketchUp Files TO BLENDER! Everything You Need to Know!

以上.

タイトルとURLをコピーしました