昨日のカメラ深度の画像でメッシュを作成する方法のテストをしている時に
画像のアルファでメッシュ化する新しいものを思いついたのでメモとして残しておきます
Blender3.3での業務で利用したいので3.3で出来る内容で進めます
画像のアルファでグリッドを切り抜く
まずはグリッド上のアルファ値を利用してオブジェクトを切り抜いてみます
キャプチャ中のノードの大半は 実用のためにグリッドの縦横比を調整して正方形で分割されるようにする計算です
ジオメトリ削除で 画像のアルファが一定値以下(透明)な部分を削除しています
ここは デフォルトの画像を繰り返す設定では画面端で想定外の値が出るので
画像テクスチャの 2つ目のプルダウンの設定を延長にしています
(UVが0-1を超える場合にどういう値を出すかの設定で 縁から外は同じ値が引き延ばされて出る)
階段状のエッジの軽減
グリッドを基準にした面の切り抜きでは どうしても境界部分が階段状になってしまいます
見た目にも目立ちますし 無駄に頂点数が増えることになってしまうので対処したいです
そこで グリッドの頂点を階段状に選択して 移動させたものを三角化する計算をしてみました
面の構成する頂点のうち1つだけ移動した面がある場合に三角化すると
残った頂点だけで三角になるように辺ができて 辺が滑らかになっています
ノードで同様の処理をしたものの比較でも 境界が滑らかになりました
アウトラインのカーブ化とフィル
グリッドベースのメッシュ化では 内部のポリゴンは過剰になりがちなので
以前書いた シェイプを立体化する時に使った方法を利用してメッシュ化します
まずは今ある平面の境界をカーブに変換します
ジオメトリノードでは 「辺の共有面数」で辺に接続している面の数を取得できます
境界部分の辺は接続している面が1つなので 境界部分をフィルタして取得できます
この条件で「メッシュのカーブ化」をすると 境界のカーブが作れます
面のあった部分にポイントを配置して カーブのポイントを配置することで
カーブフィルで ポイント位置を頂点にしたメッシュが作られます
面の中のポイントの配置自体は現状ランダムなので 実用にはもう少し検討が必要です
後は属性転送で元のメッシュからUVを取得したり
カメラ基準の座標に変換したりそれぞれの用途に合わせて調整することになるかと思います
4.2の例
ここまでの例では境界ギリギリの部分でメッシュを作る形になっていましたが
用途によっては確実に全ての不透明ピクセルがメッシュの中にしたいこともあります
Bleder 3.6以降「属性ブラー」のノードがあるので値を隣接部分にぼかすことで 範囲を拡張できます
このほかの調整も加えて4.2ではこのようにしてみました
どこまで需要があるか分かりませんが 何かの参考になれば幸いです