iRICの格子をBlenderで編集してみた

# はじめに
今回の記事では「iRIC2Blender」という @toshimushi 氏が作成されたアドオンの機能を使用しています。

 @toshimushi 氏の投稿でチュートリアルが整理されているのですが、Blenderで編集した地形をiRICに戻すものはなかったので作成しました。
 インストール方法等は@toshimushi 氏の投稿を御覧ください。

## 環境

iRIC v4.1.0.6927
Blender 4.1.1
iric2blender ver0.1

:::note
私の環境(iric2blender ver0.1)だとBlenderのインターフェースの言語を日本語に設定しているとiRIC2Blenderの`1-2-1: 画像をBlenderの格子に貼付`の実行時に`KeyError: 'bpy_prop_collection[key]: key "Principled BSDF" not found'`と表示されてiRIC2Blenderが動かないバグがありました。
これは日本語表示にしているのが問題なのでインターフェースを英語にすれば治ります。

逆に`1-3-1: iRIC格子(Nays2dh/植生データ)を読み込み`の機能はインターフェースが日本語じゃないと動かないです。

混ざっていてめんどくさいのでBlenderを英語環境で使用したのであればアドオンのソースコード中の`プリンシプルBSDF`を`Principled BSDF`に、`画像テクスチャ`を`Image Texture`に書き換えましょう。
日本語で使用したいのであれば`Principled BSDF`を`プリンシプルBSDF`に、`Image Texture`を`画像テクスチャ`に書き換えてください。

インポートしたアドオンは`C:\Users\ユーザー名\AppData\Roaming\Blender Foundation\Blender\4.1\scripts\addons`に入っていると思います。

ソースを書き換えたりBlenderのインターフェースを変更したあとは一度Blenderを再起動しましょう。

**2025/01/06追記**
iric2blender ver0.2ではこの問題は解決しているようです。
https://github.com/toshimushi/iric2blender/releases/tag/v0.2
:::

:::note
Blenderにアドオンをインストールする際、Blenderのバージョンが3.5以降だとマニュアルに記載のある「テスト中」のタブが表示されません。
以下の記事の対応で「テスト中」タブを表示することができます。


「Blender 3.5/3.6で、addonにTestingを復活させる方法」 by @SaitoTsutomu 
https://qiita.com/SaitoTsutomu/items/5872c5e0358394360697

:::

## iRIC2Blenderとは

https://github.com/toshimushi/iric2blender

[iRIC](https://i-ric.org/ja/) と [Blender](https://www.blender.jp/)間でデータをやり取りできるBlender用のアドオンです。現状で以下の機能が備わっています。

**計算格子関連**
1. iRICの計算格子の標高からBlenderで地形のグリッドメッシュを作成する
1. 作成した地形の範囲の衛星画像の取得
1. 2で取得した画像をオブジェクトへ貼り付け
1. iRICの計算格子から植生密度を読み込みオブジェクト上に樹木を配置

**建物関連**
1. OSMBuildingから建物データをダウンロード
1. ダウンロードした建物データの読み込み
1. Plateau DEMデータを読み込み
1. Plateau 建物データを読み込み
1. 選択したオブジェクトを接地

**Nays2DHの計算結果関連**
1. iRICの計算結果から時系列の水面のグリッドメッシュを作成する
    （水深コンター、流速コンター、任意色での表示が選択可能）
1. 河床変動計算結果の読み込み
（使ったことがないのでよくわからない）

**Nays2DFloodの計算結果関連**
1. iRICの計算結果から時系列の水面のグリッドメッシュを作成する
    （水深コンター、流速コンター、任意色での表示が選択可能）

**出力関係**
1. Blenderの地形データ（グリッドメッシュ）をiRICで読み込めるcsv形式出力
1. OSMBuildingの建物をshpに書き出し

# 全体の流れ

全体の流れは以下のようになります。
そんな難しいことはやっていないですが、Blenderの操作は覚えるのが面倒でした。

1. 地形を編集したい箇所の格子をiRICで作成
1. iRIC2Blenderで1の格子を読み込み
1. 2で取り込んだグリッドメッシュをBlenderで編集
1. iRIC2Blenderで3の編集後のグリッドメッシュを点群データとして出力
1. iRICで4の点群データを読み込み

# 地形を編集したい箇所の格子をiRICで作成

まずはiRIC上で地形を編集したい範囲の**矩形の格子**を作成します。
iRICでは河道に合わせた曲線の格子などもつくれますが、iRIC2Blenderで衛星画像を貼り付ける際にうまくいかないので矩形で作成しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/3e50702f-4610-0ac8-3cb2-cd37a1b3e245.png)

## 格子生成について

詳細な手順は以下を御覧ください。

https://qiita.com/toshimushi/items/337c67dd971ea818bf55#3-1-iric2blender%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9--iric%E4%B8%8A%E3%81%A7%E6%A0%BC%E5%AD%90%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8Biric%E6%93%8D%E4%BD%9C

矩形の格子はiRICの機能の「[矩形領域の格子を作成](https://iric-gui-user-manual.readthedocs.io/ja/v4_jp/04/05/01_05_rectangular_region.html)」を使うと簡単につくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/67c5053c-196b-54c8-f355-fa3f0da48bc4.png)

格子にマッピングするための地形情報はiRIC上でダウンロードできる「[地理院タイル 基盤地図情報数値標高モデル DEM5A](https://maps.gsi.go.jp/development/ichiran.html#dem)」と横断測量データを組み合わせて作成しています。
横断測量データは[北海道開発局が公開している横断測量データ](https://www.hkd.mlit.go.jp/ky/kn/kawa_kan/slo5pa000000zpx4.html)をiRICでそのまま読み込める形式に変換したものを取得できる「[横断測量データ取得ツール](https://rivopen.ricplace2.org/pref/1)」のデータをiRIC上でダウンロードできるのでそれを使用しています。

横断測量データからの点群データ作成や点群データのマージについては以下を御覧ください。

https://iric-gui-user-manual.readthedocs.io/ja/v4_jp/04/04/03_riv_data.html

https://iric-gui-user-manual.readthedocs.io/ja/v4_jp/04/04/02_pointcloud_data.html

https://qiita.com/starfieldKt/items/1001c39610d064af8765

## 作成した格子の出力

格子を作成したらiRICのメニューバーの`ファイル`>`エクスポート`>`格子` から**csv形式**で保存します。
任意の場所で任意の名前で保存してください。

iRIC2Blenderで対応しているのが**csv形式**だからです。*.cgns形式で出力した格子は読み込めません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/46cf1799-ba2e-626e-f48d-f7df5dc0f2b6.png)


# iRIC2Blenderで格子を読み込み

* Blenderを起動します
* 新規プロジェクトを開きます(全般でいいと思います)
* 初期に配置されているオブジェクトは使わないで消してしまします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/581a75e5-f0bc-cecb-a8a9-a52a53e29104.png)


## グリッドメッシュの作成

iRIC2Blenderをインストールしていると表示される、ヘッダーメニューの`iRIC` > `1-1-1: irIC格子(csv)の読み込み`からダイアログを立ち上げ、先程出力した格子のcsvを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/753666cd-f6c2-7bf1-8e57-57433f96718f.png)


選択したら右下の`1-1-1: irIC格子(csv)の読み込み`をクリックして実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/9b0b28dc-8ea1-5d01-2af8-1d1c2c52dc14.png)

これで格子を読み込むことができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/46f93aaf-79fc-3493-4a5f-6f7378953e04.png)

# 格子範囲の衛生画像を取得

* キーボードのNキーを押してサイドバーを開き`iRIC_setting`タブを開きます
* 画像読み込み関係で「DL画像のzoom設定」、「DL画像の解像度の設定」、「格子のEPSGの設定」、「読み込み画像の設定」を設定します

今回はiRICで読み込んだデータの座標系が`EPSG:6680: JGD2011/ Japan Plane Rectangular CS Ⅻ`なので「格子のEPSGの設定」には6680を入力します。その他の設定はお好みで調整してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/2c166dfc-8427-3e50-d724-74e2caa49a35.png)

設定したらヘッダーメニューの`iRIC` > `1-1-2: irIC格子(csv)から画像をダウンロード`からダイアログを立ち上げ、先程出力した格子のcsvを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/bb1d7420-ecd7-17bb-367f-bab094469829.png)

選択したら右下の `1-1-2: irIC格子(csv)から画像をダウンロード`をクリックして実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/8506251d-7275-854b-7c1d-c3ad50b1f716.png)

成功すると読み込んだcsvと同じフォルダに画像ファイルが保存されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/9c30a48d-a7d8-225a-e507-ecb8d23d24aa.png)

## 取得した画像の貼り付け

画面上のグリッドメッシュをクリックして選択し、ヘッダーメニューの`iRIC` > `1-2-1: 画像をBlenderの格子に貼り付け`からダイアログを立ち上げ、先程保存した画像ファイルを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/6c3252d3-509b-5814-0cf1-a7ac5f0e92f4.png)

選択したら右下の `1-2-1: 画像をBlenderの格子に貼り付け`をクリックして実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/285f7348-957a-aedc-1220-51d31dcc0d36.png)

実行したら画像の矢印で示すアイコンをクリックしてマテリアルモードに変更します。すると貼り付けた画像を表示することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/c909d98f-ad5a-8859-946f-52b534cb257d.png)

# グリッドメッシュをBlenderで編集

あとは取り込んだグリッドメッシュをBlenderの機能で自由に編集してください。
ただし、メッシュ頂点のXYがズレると格子点の位置もずれてしまうので編集モードやスカルプトモードで編集する際にはXYの座標がずれないようにするとよいかもしれません。

![モデリング.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/843f174f-4940-c3ea-039e-d50821c63e4f.gif)




Blenderでのオブジェクトの編集方法についてはいろいろな資料があると思うのでそちらを参照してください。


## 注意点
:::note warn

注意点として、読み込んだグリッドメッシュはiRCで作成した格子の座標の位置に作成されるのですが、原点(0,0)から大きく離れている場合スカルプトモードでマウスカーソルの位置とブラシの位置が異なるなど不具合が私の環境ではおきました。

そのような場合、グリッドメッシュの座標をメモしておいてから、ワールド座標の(0,0)付近に一度移動して、編集後にまたもとの座標に戻してあげてください。
:::

私の場合、格子の左下の座標を確認して格子左下が(0,0)になるように格子全体を移動して作業を行っています。

やり方を以下に示します。

ワークスペースをModelingモードに変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/b6ec6836-e35a-6648-792c-f73d0290840f.png)

格子の左下の頂点を選択するとサイドバーの`アイテム`タブの`トランスフォーム`に座標が表示されるのでグローバルのXY座標をメモ（このとき値をクリックすると小数点以下の値を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/d7a6cbc5-fa6f-66b1-9ef1-bbdc017541b8.png)

ワークスペースをLayoutモードに切り替え、サイドバーの`アイテム`タブの`トランスフォーム`の`位置`に先ほどのXY座標の正負を反転させた値を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/0cb8336e-738e-8529-9ee7-9a3219e010bc.png)

すると格子がワールド座標原点の位置に移動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/4795c408-8203-c83e-6b08-642368bebc46.png)

地形の編集が終わったら先ほどと逆でメモっておいた値を`トランスフォーム`に入力し元の位置に戻します。

河川などの地形はz軸方向の変化が小さいので一時的にトランスフォームでz軸のスケールを大きくしてあげて編集するのもよいかもしれません。

# iRIC2Blenderで編集後のグリッドメッシュを点群データとして出力

地形データを編集したらiRICで読み込めるようにエクスポートを行います。
Layoutモードに切り替えグリッドメッシュをクリックして選択した状態で、ヘッダーメニューの`iRIC` > `4-1: 地形データをiRIC用にCSVで書き出し`からダイアログを立ち上げ、任意の場所に点群データを出力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/def3e624-0245-d855-d37f-c3a638ae0480.png)

ダイアログでcsvファイルを保存したい場所を開いた状態で右下の`4-1: 地形データをiRIC用にCSVで書き出し`をクリックして実行するとその場所に`out_tpo_blender2iric.csv`が出力されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/3397af23-3569-c0c2-6d38-776ea268abad.png)

# iRICで点群データを読み込み

先ほど出力したデータは点群の地形高のデータとなっているのでiRICで読み込んで更新にマッピングを行います。

今回は違いが分かりやすいように堤内地にスカルプト機能を使って山をつくってみました。
iRICの格子の鳥観図ウィンドウで表示すると以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/37c98904-ad89-117a-5e37-db93fe771e59.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/ebb0e532-ebc3-a8f8-18b3-0a61466327bc.png)

この方法を使えば横断測量データ間の補完で不自然になった箇所の修正や、任意の箇所に砂州を作ってみることや、
Blenderでいちから地形グリッドメッシュを作成し、仮想の地形での計算なども簡単に行えるようになりますのでぜひやってみてください！


# まとめ
* Blenderの高度な編集機能を使用して地形データをグリッドメッシュで編集できた
* iRIC2Blenderを使用することでiRIC↔Blenderのデータの入出力が簡単に行えた