DALL-E3の画像をもとにHDRIを作成してBlenderに取り込み

# 記事の概要

HDRI（High Dynamic Range Image）はHDR画像とも呼ばれ、パノラマ画像や複数画像をもとに作成することが可能。Blenderなどの3Dソフトに取り込むことで環境テクスチャとして使用し、3Dシーン全体の照明をリアルに再現することが可能。

今回は画像生成AIを使って、パノラマ画像を生成し、Blenderに表示するまでを手順化します。

■パノラマ画像

![wide3.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/a42a3080-42da-08e3-9c22-13d1182c4529.jpeg)

■Blender出力イメージ①

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/348f439a-e186-da5e-ef5c-032653192841.png)

■Blender出力イメージ②

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/388d8018-ba3a-4656-f4af-27635670df46.png)

※注意：前提として、この手順でBlenderに取り込むデータは、3Dモデルではないので、「操作性の悪さ」や「思ったのと違う感」があると思います。（***視点しか動かせないので***）

# 環境

OS:Windows 11
Blender:4.2.1

# 手順

### パノラマ生成

今回はDALL-E3を使ってパノラマ風画像を生成する。

まずは、作成したパノラマのイメージを普通の画像で作成してもらう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/2baab481-9cda-05fc-6bee-3c29a4353f0c.png)

以下の趣旨を踏まえて、パノラマ風の画像を作成する。
・パノラマ画像 or 360度カメラで撮った画像
・（地面に立っているようにみたい場合は）人の目線

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/777b5b4e-f8a4-ad6c-0f88-034029605689.png)

出力する画像のダウンロードボタンを押し、webp拡張子の画像ファイルをダウンロード。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/f8be66fe-6c87-cf06-3e3c-76a305381a97.png)

### 画像の解像度改善（この手順は任意）

以下のページで解像度を上げることができるので、設定値のような設定で画像の解像度を上げる。

https://www.waifu2x.net/index.ja.html

■設定値

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/cfccb45a-49ac-ca63-4447-adb373f14787.png)

### HDR画像に変換

以下のページで画像ファイル（png/jpeg/webpで可能であることを確認済み）をHDR画像ファイルに変換する。

https://convertio.co/ja/

以下のページに繊維する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/47e03158-55a1-2d25-c7af-773a897d3e29.png)

「ファイルを選ぶ」からファイルを選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/15d6d857-905e-b976-37b5-c8fa9df2d407.png)

プルダウンを選択して、「HDR」を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/d7a754ed-19e1-597d-3709-9102ed90253c.png)

「変換」を押下する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/a158daff-5feb-50f4-e13d-ed3755729185.png)

変換が完了したら、「ダウンロード」を押下する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/0f2aceab-bf38-a9ae-4208-f62db9af2017.png)

「HDR」ファイルがダウンロードされている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/4ffe058d-20a1-00ec-a806-de22b93e9958.png)


### Blenderへの取り込み

Blenderがインストールされていない場合は、以下からソフトをダウンロードしてください。

https://www.blender.org/download/

Blenderが起動できるようになったら、Blenderを起動する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/016818cf-38ab-59aa-8328-d23ae3329969.png)

ここから「Scripting」に移動する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/a3b54409-911a-5e33-e7ec-0d6f04427662.png)

以下の画面が表示されるので、「New」を押下する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/552faf40-0006-6f82-d3a0-cb780866a434.png)

テキストエディタモードになっていることを確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/77e02098-a43a-ef4e-d7e3-c7ee92e75638.png)

「hdr_path」の値だけHDR画像ファイルのパスに修正し、以下のスクリプトをテキストエディタに貼り付ける。

```py
import bpy
import os

def import_hdr_as_world_texture(hdr_path):
    # 新しいワールドを作成
    world = bpy.data.worlds.new("HDR World")
    bpy.context.scene.world = world
    
    # ワールドのノードを使用可能に設定
    world.use_nodes = True
    nodes = world.node_tree.nodes
    
    # 既存のノードをクリア
    for node in nodes:
        nodes.remove(node)
    
    # 環境テクスチャノードを作成
    env_tex = nodes.new(type='ShaderNodeTexEnvironment')
    env_tex.location = (-300, 300)
    
    # HDR画像をロード
    env_tex.image = bpy.data.images.load(hdr_path)
    
    # バックグラウンドノードを作成
    background = nodes.new(type='ShaderNodeBackground')
    background.location = (0, 300)
    
    # ワールドアウトプットノードを作成
    output = nodes.new(type='ShaderNodeOutputWorld')
    output.location = (300, 300)
    
    # ノードをリンク
    links = world.node_tree.links
    links.new(env_tex.outputs["Color"], background.inputs["Color"])
    links.new(background.outputs["Background"], output.inputs["Surface"])

def main():
    # HDRファイルのパス
    hdr_path = r"C:\Users\XXXXXXXX\AAAAA.hdr"
    
    # ファイルが存在するか確認
    if not os.path.exists(hdr_path):
        print(f"エラー: 指定されたパス '{hdr_path}' にHDRファイルが見つかりません。")
        return
    
    # HDRをインポートして世界の背景として設定
    import_hdr_as_world_texture(hdr_path)
    print(f"HDRファイル '{os.path.basename(hdr_path)}' が正常にインポートされ、ワールドの背景として設定されました。")

if __name__ == "__main__":
    main()
```

スクリプトを貼り付けできたら、再生ボタンを押下する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/919ae91b-90d9-0fbb-7b62-a5d0dab90ac7.png)

「bpy.ops.text.run_script()」と表示されていることを確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/e24fc166-a9b4-6cc9-c51f-52e91bde855e.png)

「Layout」タブに移動する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/e598e72d-6fc3-a94a-e461-655f6d939038.png)

このアイコンを選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/638f52e1-4ec4-5962-1b69-89d01b552681.png)

HDR画像がBlender上に表示される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/f408ab82-f2f7-4717-94d7-ab6dd37ef102.png)

この座標みたいなのを左クリック長押しでマウスを移動させると、視点が動かせます。（むしろ視点しか動かせません。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/442e72d9-d9f4-dd7f-fe56-819fb5ade602.png)

DALL-E3の作成したパノラマの質次第で、切れ目ができたり、歪んだりします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/b688fdf3-00e8-6477-a166-b3f67c6cb7e0.png)

# VRMのモデルとかをインポートしてimg2imgには使えるかも

とりあえず、試作だけしてみた。

Blenderでアニメーション出力。

https://x.com/jun_kongo/status/1842119881623278073

AnimateDiffでアニメ化。

https://x.com/jun_kongo/status/1842357573812678877