Blenderで点群(.ply)を色付きでレンダリングする
概要
Blenderで点群データ(.ply)を色付きでレンダリングする方法を紹介します。
以前はBlenderで色付きのplyファイルをインポートするためには外部のツール等を利用する必要があったようですが、Blender 3.6ではplyのインポーターが更新され、標準機能で色情報も含めてインポートが可能となっています。
Stanford PLY
- 新しい C++ ベースの PLY インポーターとエクスポーター(43e9c900、6c6edaf5、48496f14)。Python アドオンに比べ、エクスポートが約4倍から20倍、インポートが8倍から30倍高速化しました。また、下記のような修正や改善があります。
- 頂点カラーのあるポイントクラウドのインポートが動作するように
- 行末文字が非標準な PLY ファイルのインポート
- 複数のオブジェクトのエクスポート(以前のエクスポーターは頂点のインデックスを考慮していませんでした)
- インポーターに頂点をマージするオプションが付きました
- エクスポーターが UV マップデータとともに孤立する辺/頂点のエクスポートに対応
- 頂点カラーを sRGB またはリニア色空間で処理可能に。
- インポーターが "face" の代わりに "tristrips" 要素を使用するモデルに対応
インポート後の操作は下記の記事を参考として、手順を紹介します。
手順
以下では、Blender 3.6.3 を使用しています。
レンダーエンジンの変更
まずレンダーエンジンを Eevee から Cycles に変更しておきます。

plyファイルのインポート
ファイル > インポート > スタンフォードPLY (.ply) (実験的機能) からplyのインポートを行います。下にある スタンフォードPLY (.ply) では色情報がインポートされません。

点群はインポートされましたが、まだレンダリングはできません。

マテリアルの設定
plyからインポートしたオブジェクトに含まれる色情報を参照するマテリアルを作成します。
インポートしたオブジェクトを選択してシェーディングタブに移り、新規 からマテリアルを追加します。

デフォルトのプリンシプルBSDFに加えて属性ノードを追加し、以下のように設定します。
追加>入力>属性- 名前に
Colと入力し、オブジェクトの属性に含まれる色情報を参照するように指定
- 名前に

ジオメトリノードの設定
plyでインポートしたオブジェクトはメッシュオブジェクトとして扱われているため、メッシュの頂点をポイントオブジェクトに変換してレンダリングするように設定します。
オブジェクトを選択した状態でジオメトリノードタブに移り、新規 からジオメトリノードグループを追加します。

以下のようにノードを追加、設定します。
追加>メッシュ>処理リスト>メッシュのポイント化- 半径は対象物の大きさとバランスが合うようにレンダリング結果を見ながら調整
追加>マテリアル>マテリアル設定- 前の手順で作成したマテリアルを設定

これらの設定の上でレンダリングを行うことで、色付きで点群のレンダリングができます。

補足:色味の調整
上記でレンダリングした点群は iPad Pro の LiDAR でスキャンした白いサーキュレーターなのですが、部屋の照明や床の反射で茶色っぽい色味になってしまっています。実物とかなり印象が違っているので、色を補正してみます。
シェーディングタブに戻り、以下のように属性ノードとプリンシプルBSDFノードの間に輝度/コントラストノードを追加します。
追加>カラー>輝度/コントラスト- 輝度とコントラストに適宜値を入力

茶色味が和らぎ、実際の色味に多少近づきました。

あとがき
インポートの際のラベルには スタンフォードPLY (.ply) (実験的機能) とあるのでベータ版としてのリリースなのかもしれませんが、Blenderのデフォルトの機能で点群のレンダリングができるようになり、便利になりました。CloudCompare等での点群のレンダリングに比べてリッチなグラフィックに仕上げられるので、活用していきたいところです。