メッシュ分析に色の凡例を追加する方法はありますか?

Aug 17 2020

このオブジェクトの壁の厚さを分析する必要がある医学研究を行っています。メッシュを自動的に色付けするメッシュ分析を使用しました。残念ながら、色の壁の厚さを示すために色の凡例を追加する方法が見つかりません。私はそのようなものを探しています:

https://www.researchgate.net/figure/Three-dimensional-3D-atrial-wall-thickness-variation-across-the-whole-human-atria-Top_fig2_319241926

この問題を解決する方法はありますか?

私はこのようなものを見ました。

この設定では、オブジェクトは青色のままです。

私はBlenderにまったく慣れていないので、シェーディングエディタを理解してスクリプトを使用するのはそれほど簡単ではありませんでしたが、ゆっくりとそれに慣れてきました。シェーディングエディターで設定を再構築しようとすると、スクリプトをグループ,, MaptThickness "に接続できませんでした。ボリュームプロジェクト@vkliduのtest_ThicknessからNormalDepthテキストをコピーし、インストールするために(.py)として保存しました。アドオンとしては機能しませんでしたが、(。osl)Blenderとして保存しても表示されません。非常に簡単だと思いますが、実際にスクリプトを実装するにはどうすればよいですか?

回答

6 vklidu Aug 17 2020 at 11:41

何についての周囲Oclussionを持つノード内の機能が有効になって?
結果がどれほど正確かはわかりませんが、メッシュ分析よりもはるかにうまく機能しているようです。

(画面のバーは単なる2Dグラデーションです。)

メッシュ分析と比較すると、このシェーダーは次のとおりです。

  • レンダリング可能(Cyclesエンジンを使用)
  • 色は頂点に割り当てられます(面ではありません)

チップ:

  • 両方のマテリアルで同じColorRampノードを共有するには、このノードを1つのマテリアルのノードグループに閉じ、このノードグループを2番目のマテリアルに追加します。
  • フィルムから標準へのカラーマネジメントの切り替え

注:AOが有効になっているイーブイは色を生成しますが、厚みに使用する「内部」機能はありません。


正確さ

厚さは測定の方向に依存するので、非常に興味深いQです。私たちが言い、深さ方向の厚さを測定するために使用するガラス板のように、それは薄いです。ただし、この場合は非常に厚くなる幅方向の厚さを測定することもできます。

それがメッシュ分析が測定するものです。@RobinBettsとOSLシェーダーのブレンドを確認すると、内部にはNormalDepthと呼ばれる1つのマテリアルがあり、メッシュ分析とまったく同じことを行います。つまり、面の法線方向から別の面まで単一の光線を発射します。この距離は、顔に割り当てられた対応する色で表されます。したがって、ノードグループを開いて[マップ範囲]ノードを確認すると、最初の2つの値はカラーランプの開始/終了を定義します。

-FromMin = 0は、赤が距離0で開始することを意味し、From Max = 1は、青が距離1mで終了することを意味します。これらの2つの値を試してみると、ColorRampが表す距離を正確に指定できます。ですから、この素材はあなたにとって最高のようです。

ただし、メッシュ分析と同じように、数学的に正しい「奇妙な」色の面を生成します。猿のあごの下部を確認するときのように、メッシュの部分がそれほど厚くなくても紺色がありますが、顔から発射される光線は眉毛まで届き、距離はその顔の紺色に対応します。

厚さを計算する方法は他にもありますが、単一の光線方向は使用されません。AOのように半球方向に多くを撃った。最終的な色は、これらの距離の平均を表します。

比較-通常の深さ(OSL)/アンビエントオクルージョン/ランバートの深さ(OSL)

バーオブジェクトは高さ1m、深さ1mでくさびオブジェクトの形をしています。左側のバーは、通常の深度シェーダーを使用しており、距離が一方向からのみ測定されるために機能します。立方体は0.5mなので、バーの中央の距離に対して正しい色の純粋な緑色です。しかし、他の2つのシェーダーを見るとわかるように、3D観測では、立方体の中央の質量よりも立方体の角が薄いことがわかります。

NormalDepthシェーダーは正確なようです...同様の色を取得するために、アンビエントオクルージョンランバートの値を使用する必要がありました。そして、私にはどのように制御するかについての手がかりがありません。

3 RobinBetts Aug 17 2020 at 21:16

これは@vkliduの答えを補足するだけです。AOは正しい道のようです。ただし、アプリケーションによっては、考慮すべき「厚さ」の他の測定値がある場合があります。

通常の光線の長さをとって、簡単なOSLシェーダーを作成するつもりでしたが、領域全体が@RobertPaliによって非常に包括的にカバーされています。したがって、この回答のクレジットはありません。スクリプトは彼のものです。

モデルに@Paliのランバート厚(法線にバイアスされていますが、その周りをサンプリング)を使用し、0から1までのカラーウェッジに彼の単純な法線厚を使用すると、次のようになります。

@vkliduが述べたように、マッピングの同期を維持することができます。範囲マッピングをグループに入れ、グループを編集することにより、すべてのマテリアルに対して1か所でマテリアル間を移動します。

@PaliのシェーダーとAOの唯一の違いは、AOが「サンプル」サンプリング光線をシェーディングポイントの法線の周りの半球に送信し、回答で説明した方法でバイアスされた1つだけを送信することです。