Three.js アプリでカメラの露出制御をシミュレートしたいのですが、どのようにアプローチすればよいかわかりません。
私の質問は、露出制御を実装またはシミュレートして、カメラまたはレンダラーを構成して、非常に暗いシーンの鮮明な画像を表示したり、非常に明るい光でシーンを露出しすぎないようにするにはどうすればよいですか? 理想的には、実際のカメラの動作に近い動作をする必要があります (絞り/シャッターではなく、ISO 速度の調整に似ています)。
現在、さまざまな構成可能な EffectComposer 後処理効果を使用しています。それらのいくつかは、レンダリング後に明るさ、コントラストなどを制御できます。既にレンダリングされた標準ダイナミック レンジ イメージから吹き飛ばされたハイライトや黒い影を復元することはできないため、明らかに、これは微調整以外には役に立ちません。
私が検討したいくつかのアプローチ:
- 必要な露出を得るために、各ライトを個別に手動で調整します。これは私の現在の方法であり、削除したいと考えています。
- 後処理についてはすでに説明しました。これは制限が多すぎるため、極端にすると画質が低下します。
- 露出の調整が可能な HDR レンダリングの例をいくつか見ました。これらはカスタム HDR シェーダーで実装されており、標準の Three.js MeshPhongMaterial システムとシェーダーを可能な限り使用したいと考えています。これは、シャドウなどの組み込み機能がすべてあるためです。これらの機能を使用するのは簡単ではないと思います。いくつかの HDR シェーダー アプローチを使用しますか? ハイ ダイナミック レンジは必要なく、調整可能な露出のみが必要であることに注意してください。
- シーン内のすべてのライトにある種の強度乗数を適用することによるごまかし。これを現実的に実装するのは難しいようです。ライト フォールオフ アルゴリズムなどによって複雑さが増し、完全には理解できません。また、カメラの感度を上げたり下げたりした場合と同じように見える結果を作成するのは簡単ではないと思います。
- WebGLRenderer でガンマを調整するだけです (事前レンダリング)。私はこれを行う方法を見つけることができず、ガンマが露出をシミュレートする正しい方法であるかどうか完全にはわかりません (多分そうですか?)。