POV-Rayによる科学技術可視化
このスキルは、実際の制作プロジェクト(磁気基底状態のレンダリング4点+グラント提案用コンセプトアイコン5点)で開発され、複数回のビジュアルレビューを経て洗練されたPOV-Rayのビルディングブロックと規則をパッケージ化したものです。成果物が、UIやWebページではなく、誰かが読む文書に配置される独立した図やアイコンである場合に使用してください。
POV-Rayを選ぶ理由と、これによって得られるもの
POV-Rayシーンはプレーンテキストで記述されるため、以下の利点があります。
- パラメータ化が容易(N個の原子をループ、格子を生成、パラメータを掃引)
- 再利用可能なマクロから構成しやすい
- 作業をやり直すことなく、異なる解像度で再レンダリングできる
出力はフラットで精密に制御されたラスター画像(インタラクティブな3Dシーンではありません)であり、論文、スライド、グラントPDFが実際に求める形式そのものです。
クイックスタート
- 最初に
#include "common.inc"を記述します。これにより、カメラ、ソフトな3点照明、背景/透明設定、共有の仕上げプリセットが設定されます。一度目を通してください。コメントには各設定の選択理由(変更が必要な場合に重要)が説明されています。 - 必要に応じて、以下のファイルを取り込みます。
molecule.inc- 原子 (sv_atom)、結合 (sv_bond)、ベクトル矢印 (sv_arrow)wave.inc- 振動管:伝搬波と曖昧な「抽象的な相互作用」コネクタは、同じマクロ (sv_wave_tube) を異なるパラメータで使用しますglow.inc- 発光/高温/エネルギッシュに見せたいものに使用するレイヤードハロー効果 (sv_glow_sphere)orientation_color.inc- 方向/角度を知覚的に異なる色にマッピングします (sv_orientation_colour/sv_colour_wheel)。方向そのものがデータ(スピン角度、流れ方向、位相)である場合に使用します。
povrayを直接呼び出す代わりに、scripts/render.sh <scene.pov> [W] [H] [out.png]を使用してレンダリングします。このスクリプトは+UA(実際のアルファチャンネル)、適切なアンチエイリアスを設定し、POV-Rayにこのスキルのassets/ディレクトリを指し示すため、#includeがファイルをコピーせずに解決されます。また、アルファチャンネルが正しく出力されなかった場合に警告を発します(以下の注意点を参照。実際のセッションで黙って失敗したことがあります)。- 結果を確認してから完了と判断してください。
ReadツールでPNGを読み込み、実際に目視で確認します。POV-Rayは、エラーを出さずに微妙に間違った結果(カメラフレームによるクリッピング、色の誤り、矢印の重なり)をレンダリングすることがあります。
5つのウィジェットテンプレート
assets/widgets/ には、上記のビルディングブロックを使用した、そのまま適用可能な5つのシーンが用意されています。
| ファイル | 説明 | 構成要素 |
|---|---|---|
laser.pov | 伝搬する振動波+方向矢印(光、音、任意の信号) | sv_wave_tube(開放、テーパーなし) |
particle_current.pov | それぞれがベクトル特性を持ち、流れ方向にドリフトするN個の粒子の列 | sv_atom + sv_arrow +流れ矢印 |
thermal_grid.pov | 小さな位置ジッターを持つNxN格子。中心からの距離に応じて高温から低温に発光 | sv_glow_sphere +ジッター付き格子ループ |
interaction_triangle.pov | 曖昧で発光する、非剛体の「相互作用」線(物理的な結合とは区別)で結合されたN個のオブジェクト | sv_atom + sv_wave_tube(テーパー、ジッター、発光) |
必要なものに最も近いものをコピーし、ジオメトリ自体を変更する前に、上部で宣言されたパラメータ(色、数、間隔、振幅)を変更してください。4つすべてのウィジェットは「調整ノブ」が上部に配置されるよう記述されています。
実際の分子/結晶構造(概念アイコンではない)の場合は、ウィジェットをスキップして直接 molecule.inc を使用してください。原子座標をループして sv_atom と sv_bond を呼び出し、原子ごとのベクトル(スピン、双極子、変位)には sv_arrow を、そのベクトルの方向自体が色分けする価値のある意味のあるデータである場合には sv_orientation_colour を使用します。
維持すべきデザイン規則
これらは恣意的なものではなく、実際のビジュアルレビューから生まれたものです。
- 白色背景、実際のアルファチャンネル (
+UA)。 レンダリング結果は、スライド/ページ/図に可視のボックスなしで直接配置でき、背景に関係なく他のパネルの隣にきれいに合成されます。 common.incの3点照明リグ。単一のポイントライトではありません。1つのハードライトはレンダリングされた3Dオブジェクト(「クリップアート」)として読み取られますが、ソフトなキー+フィル+フィルリグは、洗練されたマットな印刷イラストとして読み取られます。複数パネルの図では、すべてのパネルで同じリグを維持し、1つのファミリーとして読めるようにしてください。異なる照明のパネルは、ジオメトリスタイルが一致していても、不一致のステッカーのように見えます。- 結合/剛体コネクタには、カメラから遠ざかる小さなzオフセット(
sv_bondのZOffsetパラメータ)。結合と矢印が同じ領域でほぼ平行に走る可能性がある場合に使用します。そうしないと、zファイティングが発生したり、結合が矢印の先端に 視認できる形で切り込んだりします。典型的なシーンスケールで0.15~0.25単位と小さく、誰も意識的に存在に気づくことはありません。 - 矢印は「接触する」長さより10~20%短くします。 2つのベクトル矢印が共有点で交わる場合、
Scaleを縮小して先端同士が干渉しないようにします。接触する先端は、データとしてではなく、レンダリングのグリッチとして読み取られます。 - 抽象的な接続と物理的な接続は、異なる視覚言語を使用します。 実際の結合 (
sv_bond):剛体、鮮明、マット。抽象的な結合/力/相関 (sv_wave_tubeでGlow=true):波状、ソフトエッジ、発光。文字通りの原子-原子軌道オーバーラップを指し示せない相互作用を、物理的なロッドであるかのように描かないでください。 - 「一般的な」配置をわずかに歪めます。 完全な正三角形や完全に規則的なグリッドは、クリップアートとして読み取られます。意図的な小さな不規則性(
interaction_triangle.povの三角形やthermal_grid.povのジッターを参照)は、シミュレーション出力ではない模式アイコンであっても、「実際のシステム」として読み取られます。
アイコンではなく実際のシミュレーションデータをレンダリングする場合
原子位置/ベクトルが実際のシミュレーション(DFT、分子動力学、マイクロマグネティクスなど)から得られている場合、上記のアイコンウィジェット規則は引き続き適用されますが、手動で値を選択する代わりに、実際の座標データから sv_atom/sv_bond/sv_arrow 呼び出しを生成します。実用的な注意点:
- 結合は、手動ではなく、原子ペア間の距離カットオフによって生成します。
- 物理的に周期的なタイル状パッチ(1つのシミュレーションセルよりも大きな領域)を、高価なシミュレーションを再実行せずに表示したい場合、かつ特性が均一にタイル状になる場合(ほとんどの単純な規則的な基底状態に当てはまります)、より大きなシステムを再シミュレーションする代わりに、既に収束した小セルの結果を幾何学的に複製することが有効な場合が多いです。ただし、その特性がセル間で本当に変わらないことを最初に確認してください。
- 物理的に意味のある境界(例:1つの完全な配位シェル/単位モチーフ)でクロップし、任意の矩形ではクロップしないでください。クロップ自体が構造について何か真実を語るべきです。
トラブルシューティング
POV-Rayのパースエラーや見た目がおかしいレンダリングをデバッグする前に、references/troubleshooting.md を読んでください。このスキルの構築中に実際に遭遇した特定の落とし穴(通常の変数名に見える予約済みSDLワード、静かなアルファ透過バグ、POV-Rayのカメラの手系、sphere_sweep/配列スコープの癖)がリストされています。ほとんどのPOV-Rayエラーメッセージは構文問題について正直ですが、通常のプログラマの期待から見てなぜそのように見えるかについては役に立ちません。このファイルは、同じ数少ない罠を再発見しなくて済むように存在します。
各マクロのパラメータと設計根拠のより詳細な説明(ここに収まらないより多くの呼び出し例を含む)については、references/techniques.md を参照してください。