見出し画像

Unreal Engineの自動生成技術を活用した土木設計の新たな可能性

こんにちは。今回は、Unreal Engineの自動生成技術を実際に使用してみた感想を、BIM/CIMモデルに関係する土木設計技術者の皆様に共有したいと思います。

Unreal Engineとの出会い

私たち土木設計者が扱うBIM/CIMモデルは、詳細な情報を持つ一方で、その可視化やシミュレーションには限界がありました。そこで注目したのが、ゲームエンジンとして知られるUnreal Engineです。高品質なリアルタイムレンダリングと自動生成機能を持つこのツールが、土木分野でどのように活用できるのか興味を持ち、試してみることにしました。

自動生成技術の魅力

Unreal Engineの自動生成技術は、Procedural Generationと呼ばれる手法を用いています。これは、アルゴリズムに基づいてコンテンツを自動的に生成する方法で、複雑な地形や構造物を短時間で作成できます。

地形の自動生成

まず試したのは、広大な地形の生成です。パラメータを設定するだけで、山や谷、川などの地形要素がリアルに再現されました。これにより、従来手作業で時間をかけていた地形モデルの作成が大幅に効率化されました。

構造物の配置

次に、道路や橋梁などの構造物を自動配置する機能を試しました。既存のBIMモデルを取り込み、特定のルールに基づいて構造物を配置することで、一貫性のある設計が可能になりました。

ソースコードによる自動配置

Unreal Engineでは、C++を使用して高度な処理を行うことができます。以下は、道路のセグメントを自動的に配置する簡単な例です。

// RoadGenerator.h
#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "RoadGenerator.generated.h"

UCLASS()
class MYPROJECT_API ARoadGenerator : public AActor
{
    GENERATED_BODY()
    
public:    
    ARoadGenerator();

protected:
    virtual void BeginPlay() override;

public:    
    virtual void Tick(float DeltaTime) override;

    UPROPERTY(EditAnywhere, Category = "Road Properties")
    UStaticMesh* RoadMesh;

    UPROPERTY(EditAnywhere, Category = "Road Properties")
    int32 NumberOfSegments;

    UPROPERTY(EditAnywhere, Category = "Road Properties")
    float SegmentLength;

    void GenerateRoad();
};

// RoadGenerator.cpp
#include "RoadGenerator.h"

ARoadGenerator::ARoadGenerator()
{
    PrimaryActorTick.bCanEverTick = true;
}

void ARoadGenerator::BeginPlay()
{
    Super::BeginPlay();
    GenerateRoad();
}

void ARoadGenerator::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);
}

void ARoadGenerator::GenerateRoad()
{
    for (int32 i = 0; i < NumberOfSegments; ++i)
    {
        UStaticMeshComponent* RoadSegment = NewObject<UStaticMeshComponent>(this);
        RoadSegment->SetStaticMesh(RoadMesh);
        RoadSegment->SetupAttachment(RootComponent);
        RoadSegment->SetRelativeLocation(FVector(i * SegmentLength, 0.0f, 0.0f));
        RoadSegment->RegisterComponent();
    }
}

コードの詳細説明

  • クラスの定義:

    • ARoadGeneratorクラスは、AActorを継承しており、シーン内に配置可能なオブジェクトです。

  • プロパティの設定:

    • RoadMesh: 道路のセグメントに使用する静的メッシュ。

    • NumberOfSegments: 道路を構成するセグメントの数。

    • SegmentLength: 各セグメントの長さ。

  • GenerateRoad関数:

    • ループを使用して、指定された数のセグメントを生成。

    • 各セグメントをシーン内に配置し、適切な位置に移動。

  • BeginPlay内での呼び出し:

    • ゲーム開始時にGenerateRoadを呼び出し、道路を生成。

実際に使ってみた感想

作業効率の向上

自動生成技術により、初期段階のモデル作成時間が大幅に短縮されました。これにより、設計の検討により多くの時間を割くことができ、プロジェクト全体の効率が向上しました。

高品質なビジュアル

Unreal Engineの強みであるリアルタイムレンダリングにより、クライアントや関係者に対して説得力のあるビジュアルを提供できました。光の反射や影の表現が非常にリアルで、設計意図を正確に伝えることができました。

学習コスト

一方で、Unreal Engineの機能は非常に豊富であるため、最初は学習に時間がかかりました。しかし、オンラインのチュートリアルやコミュニティが充実しており、必要な情報を容易に得ることができました。

BIM/CIMとの連携

Unreal Engineは、Datasmithというプラグインを通じて、主要なBIM/CIMソフトウェアと連携できます。これにより、既存のモデルをスムーズに取り込むことができ、データの再利用性が高まりました。

BIMモデルのインポートと配置

既存のBIMモデルを取り込む際には、Datasmithプラグインを使用しました。

  1. BIMソフトウェアからのエクスポート:

    • RevitやNavisworksなどからDatasmith形式でエクスポート。

  2. Unreal Engineへのインポート:

    • Datasmithインポートオプションで、モデルやマテリアルを調整。

  3. 配置の自動化:

    • インポートしたアセットをブループリントやC++で制御。

    • 特定の条件に基づいて配置位置や回転を設定。

配置の自動化例

  • ブループリントでの条件分岐:

    • Branchノードを使用して、高度や傾斜に応じた配置を実現。

  • 配列の活用:

    • 複数のアセットをArrayに格納し、For Each Loopで処理。

今後の展望

今回の体験を通じて、Unreal Engineの自動生成技術が土木設計に大きな可能性をもたらすことを実感しました。特に、初期設計段階での迅速なモデル生成や、説得力のあるビジュアルプレゼンテーションが求められる場面で有効だと感じました。

今後は、さらに高度な機能の習得や、他のツールとの連携を深めて、設計プロセス全体の効率化と品質向上を目指していきたいと思います。

まとめ

Unreal Engineの自動生成技術は、私たち土木設計技術者にとって強力なツールとなり得ます。最初の学習コストはあるものの、それを上回るメリットがあると感じました。皆様もぜひ一度試してみてはいかがでしょうか。

採用情報

株式会社Malme 開発チームでは、いっしょに働いていただけるエンジニアを募集しています。
構造設計・構造解析だけでなく、プログラミング技術を活かして新しいものを生み出したいと思っている方、ぜひご応募ください。 採用HPはこちら→https://malme-doboku.studio.site/recruit

いいなと思ったら応援しよう!