ミラーまたは他の反射面をレンダリングするにはどうすればよいですか?


16

3Dゲーム内でミラーを作成する方法を知りたいですか?私の提案は、光線をトレースし、「ミラー」オブジェクトをヒットし、ミラーオブジェクトのヒット側を使用して、元のカメラのミラー「ポイント」にある「ミラー」オブジェクトに2番目のカムの絵を描くことですミラーリング平面。

元のカメラの中心から来る1つの光線を使用して、ビジョンの中心が鏡面上にあるポイントを決定する必要があります。


1
このことの「どういう意味か」のスケッチ/図面を持ちたいですか?
daemonfire300

これはゲーム開発に直接関係しないため、stackoverflow.comに投稿してみてください。おそらく、そこにもっと役立つグラフィックの専門家がいるでしょう。
リケット

回答:


14

OpenGLを使用している場合、OpenGL FAQセクション9:変換はこれを行う方法を正確にカバーしています。いいえ、レイトレーシングは含まれていません。これは、当然ながら非常に非効率的(ただし高品質)な方法であるためです。

9.170ミラーをレンダリングするにはどうすればよいですか?

基本的に、FAQエントリの内容は次のとおりです。コード例は次のとおりです。

  • 反射ビューマトリックスを設定します。これを軸調整ミラーで行う方法については、2番目の段落で説明します。
  • シーンを描く
  • ビュー行列を復元し、深度バッファをクリアします
  • シーンを再度レンダリングします。このシーンの実際のミラージオメトリは、以前にレンダリングされたミラーシーンが透けて見えるように、半透明または完全に透明でなければなりません。

明らかに、最適化の余地はたくさんあります。ミラーは通常小さく、デフォルトのオフスクリーンカリングは、画面上にあるがミラーを通して見えないジオメトリに対しては機能しないため、反射シーンをレンダリングするときは、可能な限りカリングする必要があります。また、ミラーを通してシーンの単純化されたバージョンのみをレンダリングすることもできます。エフェクトの場合、および品質の低下にユーザーが気付かないようにするには、ミラーレンダリングを行うときにシェーダー(ぼかし、または明るい/ウォッシュアウトなど)を適用できます。

DirectXを使用している場合、手順はほぼ同じだと思います。


3
別の方法として、レンダリング時間よりも多くのメモリがある場合は、3Dエディターのミラーを介してワールドジオメトリを単純に反映し、必要に応じて外観を変更することができます(ミップレベルを低くするなど)。これをPS1で行い、光沢のある床に座っているものを地下で複製/反転し、床自体を半透明にしました。
ダッシュトムバン

サンプルコードは非推奨のOpenGL仕様を参照していることに注意してください。それにもかかわらず、概念は普遍的であり、おそらく最新のOpenGL 仕様を使用して同様に適用することができます
patryk.beza
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.