Slide 1

Slide 1 text

1 PLATEAUの3DCGモデルを WebXRコンテンツ向けに調整するBlenderの Pythonスクリプトについて | Limes | 2021.7.26

Slide 2

Slide 2 text

本⽇の概要 2 ・Project PLATEAU ・PLATEAUモデルをUnity以外の環境で 読み込むときの問題 ・Blender/Pythonスクリプトによる⾃動処理 ・おまけ:Godot Engineで動かしてみました

Slide 3

Slide 3 text

Project PLATEAUとは? 3 PLATEAU は、国⼟交通省が進める 3D都市モデル整備・活 ⽤・オープンデータ化 のリーディングプロジェクトである。 都市活動のプラットフォームデータとして 3D都市モデルを整 備し、 そのユースケースを創出。さらにこれをオープンデー タとして公開することで、誰もが⾃由に都市のデータを引き出 し、活⽤できるようになる。 Project PLATEAU | PLATEAU [プラトー] (mlit.go.jp)

Slide 4

Slide 4 text

4 PLATEAUについて 東京都23区を始め、⽇本全国の都市の3DCGモデルが gml, fbx, objの形式で取得可能 3D都市モデル「PLATEAU」から取得するファイルの構成と、Blenderで読み込んで確認する⽅法 - CrossRoad (crossroad-tech.com) Unityを使えば、fbx形式の3DCGモデル表⽰は簡単

Slide 5

Slide 5 text

5 軽くVRでウォークスルーをさせよう。 みんなUnityを使っているので、WebXRで使えるように しよう。 と思ったのですが、Unity以外では⾊々と問題があって うまくいきませんでした。

Slide 6

Slide 6 text

6 PLATEAUモデルをWebGLフレームワークで 読み込むときの問題 問題1:そもそも表⽰されない Babyon.js Editor

Slide 7

Slide 7 text

7 PLATEAUモデルをWebGLフレームワークで 読み込むときの問題 問題1:そもそも表⽰されない Godot Engine Three.js Editor

Slide 8

Slide 8 text

8 PLATEAUモデルをWebGLフレームワークで 読み込むときの問題 問題2:全オブジェクトのグローバル座標が(0,0,0)に なっていて、位置関係がよくわからない 異なるオブジェクトを選 択してもPositionが同じ

Slide 9

Slide 9 text

9 PLATEAUモデルをWebGLフレームワークで 読み込むときの問題 問題3:ちょっと確認したいだけの利⽤⽅法では、データ 量が⼤きい。 Babylon.js Editorでは、未補正のファイルの⼀部で読み 込みに失敗することがありました。

Slide 10

Slide 10 text

10 PLATEAUモデルをWebGLフレームワークで 読み込むときの問題と解決⽅針 # 問題 解決⽅針 1 そもそも表⽰されない 原点から遠すぎるので、適度に近づける 2 全オブジェクトのグローバ ル座標が(0,0,0)になってい て、位置関係がよくわから ない 各オブジェクトのOriginをgeometryの重⼼ に合わせる 3 ちょっと確認したいだけの 利⽤⽅法では、データ量が ⼤きい。 崩れない程度にポリゴン数を下げる これらを解決するため、BlenderのPython読み込み機能 で⾃動補正する機能を実装しました。

Slide 11

Slide 11 text

11 Pythonスクリプトで実施できるようにしたこと ・個別にOrigin to Geometryを適⽤ →問題2を解決。各オブジェクトが固有のx, y, z値を持つ ・個別にAdd ModifierのDecimate (容量削減)を適⽤ →問題3を解決。いったん40%程度⼀律削減。調整可能 ・全オブジェクトのoriginと原点の距離を算出し、最も原 点から遠い距離のオブジェクトのxとy (Blenderはz-up) の値で各オブジェクトのx, yの値を引き算して原点付近に 移動→問題1を解決。

Slide 12

Slide 12 text

12 問題1の解決 原点 原点 原点から最も遠い オブジェクト a 全てのオブジェクトのx,y座標について、 で引き算 距離d 𝑑 = 𝑥!"# $ + 𝑦!"# $ 𝑥!"# , 𝑦!"# 移動後の各オブジェクトの座標 (𝑥!"# − 𝑥, 𝑦!"# − 𝑦, 𝑧) x, yの値が70000などになっており、ドラッグで移 動はものすごく時間がかかる。Blenderだと複数 選択してInspectorから座標変更ができない 原点から最も遠いオブジェクトaのx, y座標で 引き算し、全オブジェクトを原点付近に集める

Slide 13

Slide 13 text

13 実際のPythonコード GitHubに公開済みです。 flushpot1125/automated_optimization_PLATEAUmodel (github.com)

Slide 14

Slide 14 text

14 Blenderで⾃動制御する例 Blenderでfbxを読み込むところから、変換できるように するところまでの動画を流します。 https://youtu.be/APV7epiRBI4 動画はYouTubeで公開済みです。

Slide 15

Slide 15 text

15 おまけ:Godot Engineで動かしてみました Godot Engineとは、OSSで提供されている3DCGコンテ ンツ開発環境。Win/Mac/iOS/Android/WebXR書き出 しが可能。Unityと似ている。 公式ドキュメントの⽇本語対応が充実している。 WebXR対応は、こりんさん (@korinVR) の記事がおすす めです。 Godot Engine VR開発メモ(Oculus Quest、SteamVR、WebXR対応) - フレームシンセシス (framesynthesis.jp)

Slide 16

Slide 16 text

16 Godot Engineで動かした例 発表時は動画を再⽣します。

Slide 17

Slide 17 text

17 ご静聴ありがとうございました。