WPF ViewPort3Dでの単一色の3Dオブジェクトの便利な照明
-
27-09-2019 - |
質問
私は家の3Dモデルを持っています。そこでは屋根が見えないので、部屋を見ることができます( ここ)
しかし(今のところ)私はテクスチャがなく、各表面には同じ色があります。
var myMaterial = new DiffuseMaterial (new SolidColorBrush(myColor))
WPF ViewPort3Dで表示する場合、表面を区別できるようにしたいと思います。たとえば、床がいつ終了し、壁が始まるかを見たいです。
これは、オブジェクトに照らすことで可能になるはずです。私はすでに試しました:
すべての表面が等しく色付けされるため、アンビエントライトは機能しません。
myViewport3D.Children.Add(new ModelVisual3D(){Content = new AmbientLight(Colors.White)})
また、方向性光を使用して移動カメラにその位置を貼り付けると、一部の表面標準はカメラ/光にほぼ垂直であることがあるため、ほぼ黒くなり、さらに不自然に見えます。
では、WPF ViewPort3Dにある単一色の3DObjectの表面を区別する良い方法は何ですか?
ユーザー「JDV」が彼のコメントを書いた後に編集されました
解決
2つのライトソースを使用できるため、薄暗いライトを使用して周囲の背景ライトとやや強い方向ライトとして機能して、表面とコントラストを与えることを試みます。
私は3Dの専門家ではありませんが、このように考えるでしょう。
懐中電灯(方向性光)のある暗い部屋(周囲の光なし)では、懐中電灯の表面の角度に基づいて劇的な違いが見えます。周囲の光源が強くなるにつれて、周囲の照明を追加し、それらの違いの過酷さは減少します。
幸運、あなたがあなたが望んでいる効果を達成できることを願っています。
他のヒント
個人的には、これは2つのライトの組み合わせによって「最高」に達することができることがわかります。
- 薄暗い(たぶん30%照らされた)周囲光。これは常にすべての表面を示しています。
- カメラに続く約80%の白い方向性光。 「カメラの左肩の上」の光は、人々がよく期待している傾向があると思います。
また、表面正数が必ずしも正しいとは限らない場合は、3番目のライトを使用できます。最初の方向の反対方向を指す別の方向光を使用できます。不適切な法線がある場合、これは表面の背面に火をつけます。