---
title: Unreal 3Dで眺める静岡県
tags: 
author: [ぽちお](https://www.docswell.com/user/3923277857)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/L73PV4WQE5.jpg?width=480
description: Unreal 3Dで眺める静岡県 by ぽちお
published: February 01, 25
canonical: https://www.docswell.com/s/3923277857/K3GLGJ-2025-02-01-224648
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/L73PV4WQE5.jpg)

02/01/2025
Unreal Engine Meetup in Shizuoka
Unreal 3Dで眺める静岡県
Shizuoka Prefecture in Unreal 3D


# Page. 2

![Page Image](https://bcdn.docswell.com/page/87DL8QKWEG.jpg)

Introduction
Unreal Engine Meetup in Shizuoka
FutureSoftware 代表
Toshiyuki Wada (ぽちお)
WEBシステム・AIシステム・モバイルアプリ・インフラ構 築・シス
テム 設 計 等 システムの 事 なら 何 でもやってます。
(C++/Java/PHP/Python/JS(TS)/Kotlin/Swift等を習得)
UnrealEngine歴は4年
UnrealEngine静岡実行委員会・UE5勉強会「UE5Night」運
営・UE5ぷちコン友の会運営


# Page. 3

![Page Image](https://bcdn.docswell.com/page/VJP28LKXJ8.jpg)

Contents
Unreal Engine Meetup in Shizuoka
TABLE OF CONTENTS
01 | Unreal 3DS
02 | Virtual Shizuoka
MotionJPEGを使った簡易的な
２画面立体視の仕組み
Virtual Shizuokaの点群データ
を使ったデモゲームの紹介
03 | Data Conversion
04 | UE5自動化のすゝめ
点群データからメッシュデータへ
変換
Editor Utility Widget &amp; Python
Scriptによる処理の自動化


# Page. 4

![Page Image](https://bcdn.docswell.com/page/2EVDNQV3EQ.jpg)

Section 01
Unreal Engine Meetup in Shizuoka
Unreal 3DS
MotionJPEGを使った簡易的な２画面立体視の仕組み


# Page. 5

![Page Image](https://bcdn.docswell.com/page/57GYKWLY7L.jpg)

Unreal 3DS
Unreal 3DSとは？
Qiita Unreal Engine (UE) Advent Calendar 2024の為に開発
した2画面＆立体視の仕組みです。
Google Cardboardを参考にしており、超低コストでＶＲ体験が
できます。
仕組みは単純で、ゲームカメラとは別に配置した立体視用のカ
メラ画像を、UnrealEngineに組み込んだWEBサーバ経由でス
マホに転送し続けているだけです。
スマホを2,000~3,000 円 で 売 ってるVRゴーグルにセットすれ
ば、簡易VRヘッドセットの完成！！
Unreal Engine Meetup in Shizuoka


# Page. 6

![Page Image](https://bcdn.docswell.com/page/4EQMN3Y6JP.jpg)

小難しい話しは置いといて・・・
Unreal Engine Meetup in Shizuoka
なんか楽しそう
な仕組みを作
りたかった
こんな動機で作ったものですが、モバイルアプリ開発の環境設定しなくていいし、VRヘッドセットも不要なの
で、気軽にVRを楽しめるという意味では良い開発ができたかな？と思っています。


# Page. 7

![Page Image](https://bcdn.docswell.com/page/KJ4VG1WME1.jpg)

Unreal 3DS 解説
Unreal Engine Meetup in Shizuoka
SceneCaptureカメラ(2つ)
左右の画像を合成
WEBサーバから画像を配信
(パラパラ漫画のように )
スマホの WEBブラウザで VR体験
https://ueblog.futuresoftware.dev/archives/2041


# Page. 8

![Page Image](https://bcdn.docswell.com/page/LE13DGYYJG.jpg)

Section 02
Unreal Engine Meetup in Shizuoka
Virtual Shizuoka
Virtual Shizuokaの点群データを使ったデモゲームの紹介


# Page. 9

![Page Image](https://bcdn.docswell.com/page/GEWPYKG1J2.jpg)

Virtual Shizuoka
静岡県をデジタル化！？
点群データやフォトグラメトリなど、デジタルツインに関連する技術
が発展することで、災害対策やシミュレーション、都市計画、環境
保全、観光、教育、建築、自動運転等様々な分野にメリットがあり
ます。
また、 世 界 的 に 見 ても「フューチャー・ナウ・プロジェクト」として 気
候 変 動の危 機に直 面しているツバルが国 家をデジタルツインで
バックアップするというニュースが話題になってます。
その可能性に無料で触れることができる Virtual Shizuokaはとても
素晴らしい取り組みだと思います。
Unreal Engine Meetup in Shizuoka


# Page. 10

![Page Image](https://bcdn.docswell.com/page/47ZKXZLX73.jpg)

小難しい話しは置いといて・・・
Unreal Engine Meetup in Shizuoka
ゲームの中で
空から自宅を
見たい！
注：自宅はこんなに広くありません
正直、知ってるエリアの３Ｄデータを眺めているだけでもテンション爆上がりです！
まだ２歳の息子だって、UnrealEngineでVirtualShizuokaのデータを開いてるだけで寄ってきます！


# Page. 11

![Page Image](https://bcdn.docswell.com/page/YJ6Q4ZWPJV.jpg)

そして、ここは静岡新聞社
Unreal Engine Meetup in Shizuoka
新聞社と言えば報道用ヘリコプター！
ヘリコプターで自 分の住んでい
るエリアを 飛 び 回 って、３ Dで 空
から眺めてみたい！！


# Page. 12

![Page Image](https://bcdn.docswell.com/page/GJ5RQWMP74.jpg)

ヘリコプターゲーム作ってみた
Unreal Engine Meetup in Shizuoka


# Page. 13

![Page Image](https://bcdn.docswell.com/page/9E2DPQ9ZER.jpg)

感想
すごく楽しい・・・
Unreal 3DS＆点群のドット感の組
み合わせも独特の雰囲気で悪くな
い！！
Unreal Engine Meetup in Shizuoka


# Page. 14

![Page Image](https://bcdn.docswell.com/page/D7Y25W4N7M.jpg)

Section 03
Unreal Engine Meetup in Shizuoka
Data Conversion
点群を３Dモデル(メッシュ)化してみよう


# Page. 15

![Page Image](https://bcdn.docswell.com/page/VEN8N9YVJ8.jpg)

Data Conversion
点群を3Dモデルに簡易変換
今回は以下の仕組みで変換してみました。
１．Las2Mesh(https://github.com/ksasao/Las2Mesh)を使用し
て点群形式(las)を、3Dモデル形式(ply)に変換
２．Blenderを使用して3Dモデル形式(ply)をデシメート(メッシュ
の頂点・面を削減)しながら、UnrealEngineで取り込めるFBX形
式に変換
３．FBXをUnrealEngineに取り込み、頂点カラーで着色するマ
テリアルを適用する
Unreal Engine Meetup in Shizuoka


# Page. 16

![Page Image](https://bcdn.docswell.com/page/Y79KR2PV73.jpg)

ただ・・・
Unreal Engine Meetup in Shizuoka
VirtualShizuokaの点群データの数、半端ない！！
膨大なデータ
データ変換時間
ヘリコプターゲームで使用し
た点群データは345個 ！
情報量が多いので、変換・デ
シメートに時間が掛かる
インポート時間
どうしよう・・・
UEへのインポートも時間が
掛かる
パソコンの前に張り付く時間
がもったいない・・・


# Page. 17

![Page Image](https://bcdn.docswell.com/page/G78RW5D4ED.jpg)

アンケート取ってみました
Unreal Engine Meetup in Shizuoka
あなたはデータ変換中に何をしますか？
100 %
80 %
60 %
40 %
20 %
0%
間食
寝る
遊ぶ
Youtube
X(twitter)
回答者： 1人(ぽちお)


# Page. 18

![Page Image](https://bcdn.docswell.com/page/L7LKNYMVER.jpg)

・・・てことで
Unreal Engine Meetup in Shizuoka
そうだ！自動化しよう！
PC稼働中は限界までスペックを使い倒してこそ意味がある！！CPUがアイドルしてるなんで勿体ない！！


# Page. 19

![Page Image](https://bcdn.docswell.com/page/4EM2XNYNEW.jpg)

Section 04
Unreal Engine Meetup in Shizuoka
UE5自動化のすゝめ
Editor Utility Widget と Python Scriptを使った自動化について


# Page. 20

![Page Image](https://bcdn.docswell.com/page/PERMND9479.jpg)

UE5自動化について
Unreal Engine Meetup in Shizuoka
UE5には様々な自動化の方法があります
Editor Utility
Widget
Python Editor
Script Plugin
ブループリントベースでエディタ操
作をカスタマイズできる仕組み。
アクタの配置から、データテーブル
への登録等様々な操作が行える。
Unreal Python APIを使用したエ
ディタ操作が行える。
バッチ処理・大量アセットインポート
・カスタムツールの作成などが行え
る。
Etc…
・Procedural Content Generation
・自動テストフレームワーク
・パッケージ化の自動化(UBT)
などなど


# Page. 21

![Page Image](https://bcdn.docswell.com/page/P7XVN1QZJX.jpg)

Editor Utility Widget
Unreal Engine Meetup in Shizuoka


# Page. 22

![Page Image](https://bcdn.docswell.com/page/37KQN29V7D.jpg)

Editor Utility Widget
Unreal Engine Meetup in Shizuoka
地図を自動的に配置させる為のロジックは以下のようになっています。
BPだけで組めるので、簡単に自動化ツールを作成することができます。
Virtual Shizuoka の点群データファイル名は”08AB1234”のよ
うになっており、3桁目・5桁目・7桁目が南北方向の、4桁目・6桁
目・8桁目が東西方向の座標となっており、１つの点群データが
40000×30000サイズになっている為、ファイル名から表示すべき
座標を算出しています。
08ND7763
08ND7772
08ND7773
08ND7783
08ND7774


# Page. 23

![Page Image](https://bcdn.docswell.com/page/LJ3PV49Q75.jpg)

Editor Utility Widget
Unreal Engine Meetup in Shizuoka
補助的な関数は、このようなロジックとなっています。ファイル
名から指定した桁数を抜き出して、英字を数字に変換していま
す。


# Page. 24

![Page Image](https://bcdn.docswell.com/page/8JDL8QGW7G.jpg)

Python Editor Script Plugin
Unreal Engine Meetup in Shizuoka
Unreal Python APIを使用して様々な自動化プロセスを組み込むことができます。Pythonを利用しているの
で、Unreal Engine Editor外のリソース(PC内のファイル等)を直接扱う事もできるという利点があります。今回
は、Blenderが出力したFBXファイルを取り込む際に利用しています。
マテリアルも自動で
割り当て
今回は全345ファイル
FBXのインポートだけならドラッグ＆ドロップだけで良いじゃん！って感じですが、「FBXが大きすぎて
(50～100MB)インポート時に落ちる可能性がある」＆「マテリアルも割り当て状態でインポートしたい」という理
由でPythonによるインポートを採用しました。


# Page. 25

![Page Image](https://bcdn.docswell.com/page/VEP28L3XE8.jpg)

Python Editor Script Plugin
Unreal Engine Meetup in Shizuoka
import os
import unreal
# アセットをインポート
asset_tools.import_asset_tasks([import_task])
def import_fbx_and_assign_material_with_skip(source_folder, destination_folder, material_path,
batch_size=3):
# インポートされたアセットをロード
imported_asset = editor_asset_lib.load_asset(asset_path)
# Unreal Engineの必要なAPIを取得
asset_tools = unreal.AssetToolsHelpers.get_asset_tools()
editor_asset_lib = unreal.EditorAssetLibrary
# 指定されたマテリアルが存在するか確認
material = editor_asset_lib.load_asset(material_path)
if not material:
unreal.log_error(f &quot;Material at &#039;{material_path}&#039; could not be found.&quot;)
return
# 指定フォルダ内のすべてのFBXファイルをリストアップ
fbx_ﬁles = [os.path.join(source_folder, f ) for f in os.listdir(source_folder) if f.endswith(&quot;.fbx&quot;)]
batch_counter = 0
for fbx_ﬁle in fbx_ﬁles:
# FBXファイル名（拡張子なし）とアセットパスを取得
asset_name = os.path.splitext(os.path.basename(fbx_ﬁle))[0]
asset_path = f &quot;{destination_folder}/{asset_name}&quot;
# アセットがすでに存在するか確認
if editor_asset_lib.does_asset_exist(asset_path):
unreal.log(f &quot;Skipped: {asset_name} (already exists in {destination_folder})&quot;)
continue
# インポートタスクを設定
import_task = unreal.AssetImportTask()
import_task.ﬁlename = fbx_ﬁle
import_task.destination_path = destination_folder
import_task.automated = True
import_task.save = True
# アセットが正しくロードされたか確認
if not imported_asset:
unreal.log_warning(f &quot;Asset &#039;{asset_name}&#039; could not be loaded.&quot;)
continue
# インポートされたアセットが Static Meshの場合、マテリアルを適用
if isinstance(imported_asset, unreal.StaticMesh):
static_mesh = imported_asset
static_mesh.set_material(0, material)
unreal.EditorAssetLibrary.save_loaded_asset(static_mesh)
unreal.log(f &quot;Material &#039;{material_path}&#039; assigned to &#039;{asset_name}&#039;.&quot;)
else:
unreal.log_warning(f &quot;Asset &#039;{asset_name}&#039; is not a Static Mesh.&quot;)
# バッチ処理のカウントを増加
batch_counter += 1
# 指定されたバッチサイズごとにメモリを解放
if batch_counter &gt;= batch_size:
unreal.log(&quot;Batch processed, clearing memory.&quot;)
unreal.SystemLibrary.collect_garbage()
batch_counter = 0
unreal.log(&quot;FBX import and material assignment completed.&quot;)
source_folder = &quot;H:/UnrealEngineSampleProjects/LiDARShizuoka&quot; # FBXが格納されたフォルダ
destination_folder = &quot;/Game/VirtualShizuoka&quot; # FBXをインポートする先
material_path = &quot;/Game/LiDAR/M_VirtualShizuokaMap&quot; # 共通マテリアル
import_fbx_and_assign_material_with_skip(source_folder, destination_folder, material_path)


# Page. 26

![Page Image](https://bcdn.docswell.com/page/27VDNQ437Q.jpg)

Python Editor Script Plugin
Unreal Engine Meetup in Shizuoka
Python Editor Script Pluginを使ったPython Scriptの実行方法はとても簡単です！
プラグインが有効になっていることを確認します。
(UE5.5ではデフォルトで有効になっていました )
[ツール] -&gt; [Pythonスクリプトを実行 ]を選択し、ファイル選択ダイアログで実行した
いPythonファイルを開くだけです


# Page. 27

![Page Image](https://bcdn.docswell.com/page/5JGYKW1YJL.jpg)

マテリアルについて
Unreal Engine Meetup in Shizuoka
点群データに頂点カラーが含まれてい
る為、点群データを変換した FBXでも、
このマテリアルを適用すれば色が付き
ます。


# Page. 28

![Page Image](https://bcdn.docswell.com/page/47QMN3D6EP.jpg)

Las2MeshとBlenderも自動化
Unreal Engine Meetup in Shizuoka
Las2Meshでlasをplyに一括変換
(.batファイルとして作成 )
Blender用のPython Scriptを使って plyをデシメートし
てFBXとして出力
@echo oﬀ
REM LASファイルが格納されたフォルダを指定
set &quot;INPUT_FOLDER=H:\UnrealEngineSampleProjects\LiDARShizuoka&quot;
import bpy
import os
REM las2mesh.exe のパスを指定
set &quot;LAS2MESH_EXE=C:\las2mesh_v0.2\las2mesh.exe&quot;
REM 出力形式の指定 (ply形式)
set &quot;OUTPUT_FORMAT=ply&quot;
REM フォルダ内のすべてのLASファイルを処理
for %%f in (&quot;%INPUT_FOLDER%\*.las&quot;) do (
REM ファイル名のみ取得（拡張子を除く）
setlocal enabledelayedexpansion
set &quot;FILENAME=%%~nf &quot;
endlocal
REM las2meshを実行し、ply形式で出力
&quot;%LAS2MESH_EXE%&quot; &quot;%%f &quot; -n -o &quot;%INPUT_FOLDER%\%%~nf.%OUTPUT_FORMAT%&quot;
echo %%f を変換中...
)
echo 全てのファイルが変換されました。
pause
input_dir = &quot;H:\\UnrealEngineSampleProjects\\LiDARShizuoka&quot;
output_dir = &quot;H:\\UnrealEngineSampleProjects\\LiDARShizuoka&quot;
# 出力ディレクトリが無い場合は作成
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 入力ディレクトリのファイルを全て取得
for ﬁle_name in os.listdir(input_dir):
if ﬁle_name.endswith(&quot;.ply&quot;):
input_path = os.path.join(input_dir, ﬁle_name)
output_path = os.path.join(output_dir, os.path.splitext(ﬁle_name)[0] + &quot;.fbx&quot;)
bpy.ops.wm.read_factory_settings(use_empty=True)
bpy.ops.import_mesh.ply(ﬁlepath=input_path)
imported_objects = bpy.context.scene.objects
for obj in imported_objects:
if obj.type == &#039;MESH&#039;:
# モディファイヤーでデシメート
mod = obj.modiﬁers.new(name=&quot;Decimate&quot;, type=&#039;DECIMATE&#039;)
mod.ratio = 0.5
bpy.context.view_layer.objects.active = obj
bpy.ops.object.modiﬁer_apply(modiﬁer=&quot;Decimate&quot;)
bpy.ops.export_scene.fbx(ﬁlepath=output_path)
print(f &quot;Converted: {ﬁle_name} to {output_path}&quot;)


# Page. 29

![Page Image](https://bcdn.docswell.com/page/KE4VG1ZM71.jpg)

Thank you
Unreal Engine Meetup in Shizuoka
THANK YOU!
Do you have any questions?
toshiyuki@futuresoftware.jp
@toshiyuki_wada


