パストレーシングは、光の物理的な挙動をシミュレートするレンダリング手法です。各ピクセルから複数の光線を飛ばし、オブジェクトとの相互作用を計算することで、リアルな照明効果を実現します。
このデモでは、球体オブジェクトに対してパストレーシングを適用し、拡散反射と鏡面反射を計算しています。
光源: 明るく光る小さな球体が3つの光源です。メイン光源(黄白色・中央上)、補助光源1(暖色系・左上)、補助光源2(寒色系・右上)
パストレーシングの理解を深めるために、3D空間でマウス制御によるカメラ操作が可能なHTMLとJavaScriptのコードを作成します。パストレーシングの理解を深めるためのインタラクティブなデモを作成しました。このコードの主な特徴は以下の通りです: ## 主な機能 **マウス制御** - マウスドラッグでカメラを回転 - マウスホイールでズーム - リアルタイムでビューを更新 **パストレーシングの実装** - 各ピクセルから複数の光線を飛ばすマルチサンプリング - 拡散反射と鏡面反射の計算 - 光の反射回数を制御可能 **シーンの構成** - 異なる材質の球体(拡散、金属) - 床面として大きな球体を配置 - 環境光による基本照明 ## 学習ポイント 1. **光線の追跡**: カメラから各ピクセルに向けて光線を飛ばし、オブジェクトとの交点を計算 2. **材質の違い**: 拡散反射(マット)と鏡面反射(金属)の実装 3. **モンテカルロ積分**: ランダムサンプリングによる光の計算 4. **ガンマ補正**: 最終的な色の調整 スライダーでサンプル数や反射回数を調整して、品質と計算時間のトレードオフを体験できます。パストレーシングの基本概念を視覚的に理解するのに役立つでしょう。
画像サイズを600x480に変更し、明るさの問題を修正します。光源の設定と色の計算を改善します。修正を行いました。主な改善点は以下の通りです: ## 修正内容 1. **画像サイズを600x480に変更** 2. **明るさの問題を解決**: - 発光する球体を光源として追加(上部に配置) - より明るい色の係数を使用 - 環境光の強度を上げました(0.1 → 0.15) - 反射率を向上(拡散: 0.8、金属: 0.9) 3. **色の処理を改善**: - より適切なトーンマッピング(露光調整)を追加 - ガンマ補正を正確に実装(2.2乗根) - 空の色も少し明るく調整 4. **光源の追加**: - 発光する球体を上部に配置 - 発光材質('light')を新しく追加 これらの修正により、球体がより明るく、リアルに表示されるようになりました。光源からの光が球体や床面を照らし、より自然な照明効果が得られます。
光源の位置を視覚的にわかりやすくするため、発光球体をより明るくし、位置も調整します。光源の位置をより明確に視覚化しました。主な改善点は以下の通りです: ## 光源の改善 1. **複数の光源を追加**: - **メイン光源**:中央上部の黄白色の球体(最も明るい) - **補助光源1**:左上の暖色系(オレンジ系)の球体 - **補助光源2**:右上の寒色系(青白系)の球体 2. **光源の特徴**: - 各光源は異なる色温度で発光 - サイズを小さくして光源らしく表示 - 発光強度を調整して自然な照明効果を実現 3. **位置の配置**: - カメラから見やすい位置に配置 - 異なる角度からシーンを照らすように配置 - 各光源が作る影やハイライトの違いを観察可能 これで光源の位置が明確に見え、それぞれの光源がシーンにどのような影響を与えているかを理解しやすくなりました。マウスでカメラを回転させると、異なる角度から光源の配置と照明効果を確認できます。
現在のコードを確認すると、「アニメーション」という名前は少し誤解を招くかもしれません。実際には**リアルタイム更新のON/OFF**を制御しています。 ## 現在の「アニメーション」の動作 - **ON(デフォルト)**: マウス操作やスライダー変更時に画像がリアルタイムで更新される - **OFF**: マウス操作やスライダー変更時に画像が更新されない(手動で他のボタンを押すまで静止) ## より分かりやすい実際のアニメーションを追加しましょう 光源や球体が動くアニメーションを実装して、より理解しやすくします:アニメーション機能を明確に分けて実装しました。これで2つの独立した機能になりました: ## 新しいアニメーション機能 ### 1. **リアルタイム更新 ON/OFF** - マウス操作やスライダー変更時に画像を即座に更新するかどうかを制御 - パフォーマンスが重い場合はOFFにして手動更新可能 ### 2. **光源アニメーション ON/OFF**(新機能) - 3つの光源が実際に動きます: - **メイン光源**: 円運動しながら上下にも移動 - **補助光源1**: 楕円軌道で複雑な動き - **補助光源2**: 異なるパターンで3次元的に移動 ## アニメーションの効果 光源が動くことで以下が観察できます: - **動的な影の変化**: 球体に落ちる影がリアルタイムで変化 - **ハイライトの移動**: 金属球の鏡面反射が光源の動きに追従 - **色温度の混合**: 異なる色の光源が混ざり合う効果 - **間接照明の変化**: 床面の明るさが動的に変化 これで「アニメーション」という名称がより適切になり、パストレーシングにおける動的な照明効果を学習できるようになりました。
ボタンに現在の状態を表示するように改善します。ボタンの状態表示を改善しました。主な変更点は以下の通りです: ## 改善内容 ### 1. **ボタンテキストに状態表示** - **リアルタイム更新**: "ON" / "OFF" を明確に表示 - **光源アニメーション**: "ON" / "OFF" を明確に表示 ### 2. **視覚的な状態表示** - **ON状態**: 緑色のボタン(#4CAF50) - **OFF状態**: 赤色のボタン(#f44336) - ホバー時の色も状態に応じて変化 ### 3. **初期状態の明確化** - リアルタイム更新:デフォルトで **ON** - 光源アニメーション:デフォルトで **OFF** ### 4. **動作の改善** - 光源アニメーションをOFFにすると、光源が元の位置に戻る - 状態変更時にボタンの見た目も即座に更新 これで各機能の現在の状態が一目でわかるようになり、より使いやすいインターフェースになりました。緑は有効、赤は無効という直感的な色分けも追加されています。
パスの経路を可視化する機能を追加します。画面上の点をクリックして、その点からの光線パスを表示できるようにします。パスの経路を可視化する機能を追加しました! ### 1. **パス可視化モード** - 「パス可視化: OFF/ON」ボタンで切り替え - ONにするとマウスカーソルが十字に変化 ### 2. **クリック操作** - パス可視化モード時に画面をクリック - 最大4点まで選択可能 - 各点から光線の経路が表示される ### 3. **視覚化の特徴** - **各パスは異なる色**で表示(赤、緑、青、黄) - **光線の経路**が線で表示される - **衝突点**が小さな四角で表示される - **選択点**が白と黒の四角で表示される ### 4. **パスの追跡** - カメラから選択点への光線を発射 - オブジェクトとの衝突点を記録 - 反射・拡散による光線の方向変化を追跡 - 最大反射回数まで経路を表示 ### 5. **コントロール** - 「選択点クリア」ボタンですべての選択とパスをリセット - パス可視化OFF時は通常のカメラ操作に戻る ## 学習効果 この機能により以下が観察できます: - **光線がどのような経路を辿るか** - **材質による反射の違い**(拡散 vs 鏡面反射) - **複数回の反射による光の伝播** - **パストレーシングの実際の計算過程** パス可視化をONにして、異なる材質の球体や床面をクリックしてみてください。光がどのように跳ね返っていくかが視覚的にわかります!