歪みのないビルボードレンダリング?


8

私はUnity内のビルボードに標準的なアプローチを使用していますが、これは問題ありませんが、理想的ではありません。

transform.LookAt(camera)

問題は、特に視野角が大きくなると、ビューポートのエッジに向かって歪みが発生することです。これは、例えば、あなたが見る完璧なビルボードとは異なります。スクリーンスペースのどこにいるかに関係なく、任意の角度から敵を見ると破滅します。

明らかに、画像をビューポートに直接ブリットして単一の頂点を中心に配置する方法がありますが、シェーダーは苦手です。

誰かがこのアプローチのサンプル(可能な場合はGLSL)を持っているか、それが通常この方法で行われない理由(前述の四角形変換メソッドと比較して)に関する提案はありますか?

編集:私は混乱しました、頭を上げてくれたネイサンに感謝します。もちろん、クワッドにカメラを向けさせても、クワッドがビュープレーンに平行になることはありません-これが必要です。

回答:


4

標準の透視投影では、ビルボードをビュー平面に平行に描いても歪みは生じないので、私はあなたの質問で混乱しています。これは、ある程度のスケーリングでビューポートに画像をブリットするのと同じです。スケーリングは、深度(ビュー平面からの垂直距離)に依存します。

表示されている「歪み」は、システムが実際にパーティクルをビュープレーンではなくカメラの方に向けている場合に発生する可能性があります。画面の端付近でゆがみが発生します。または、カメラを回転させるとスプライトのスケールが変化することがあります。カメラではなくビュープレーンまでの距離が測定されると、スプライトは「近づき」、画面外に行くにつれて大きくなるためです。


1
@NickWiggill Unityについては特に詳しくありませんが、クワッドをカメラに向けるのではなくビュープレーンに向けたい場合は、基本的にクワッドの回転行列をカメラの回転行列に設定します。クワッドの構成方法によっては、180度の回転が必要になる場合があります。
Nathan Reed、

1

私はあなたがこれを行うためにアイデンティティーに一番上の3x3マトリックス(列優先で話す)を設定できると信じています。シェーダーでこれを実行できなかった理由はわかりませんが、その方法でより多くの作業を行っている可能性があります。この方法で(xformationマトリックスの)スケールが失われます。

編集:この記事は、看板や詐称者のために私に役立ちました:

http://www.flipcode.com/archives/Billboarding-Excerpt_From_iReal-Time_Renderingi_2E.shtml

これがどのように一般的であるかはわかりませんが、遠近法が維持されている場合は「偽物」、そうでない場合は「ビルボード」と呼びます。


気づいた。Unity iOS / Androidを使用していますが、一部の古いデバイスはOpenGL ES 1.1であり、パイプラインが修正されています。したがって、シェーダーなしでそれを行うことがここで重要です。シェーダーでそれをせずにこれをどうやってやりますか?
エンジニア

1
とにかく、それはおそらくより安価な方法です。私のコードでは、スプライトにフラグを付けて、描画呼び出しを行う前に、看板にするか偽装するかを指示しています。この場合は、現在の行列を取得し、上部の3x3を単位に設定してから、現在の行列を更新します。
notlesh

ああ...追加の詳細に感謝しますが、私はGL呼び出し(Unityはそれを抽象化します)にアクセスできないので、私はこのアプローチにかなり夢中になっていると思います。
エンジニア

現在の行列を取得または設定できませんか?私は結束を使ったことがありません...そうでない場合は、「ユニティビルボード」または「ユニティ詐欺」を検索してみてください
notlesh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.