1

私が抱えている問題を詳しく説明する前に、より多くのコンテキストが必要です。FontRendererテキストをレンダリングするクラスを作成しました。実行時にABCという文字列を表示するGameObjectと、アトラス テクスチャから検索されたすべてのグリフの UV 座標を持つ 3 つのクワッドが生成されます。

十分に単純です。これにより、同じマテリアルが使用されている場合、単一のドローコールが可能になります。

ただし、特定のグリフの前景を変更するなどの機能を追加する場合、この問題にどのように対処すればよいでしょうか? \c次のようなエスケープ シーケンスを計画しています\c[A-F]{2}[A-F]{2}[A-F]{2}

たとえば、AABCFontRenderer赤で、残りの文字列を白に色付けする場合、次の文字列を:に渡します"\cFF0000A\cFFFFFFBC"

最初に考えたのは、アトラス テクスチャを利用することでした。この背後にある考え方は、新しい前景色で新しいグリフをプロットし、アトラス テクスチャ内にスプライトを割り当てることです。ただし、これは非常に複雑になる可能性があります。

私の次のアイデアは、頂点/フラグメント シェーダーを使用することでしたが、これが可能かどうかはわかりません。もう 1 つの問題は、可能であれば、私のシェーダーを使用するマテリアルのインスタンスがレンダリングされた文字列ごとに必要になり、ドロー コールの数が増えることです。

他にどのような方法がありますか?

4

1 に答える 1

1

おそらく、最も単純な手順によるアプローチは、拡散シェーダの mainColor を変更してアトラス マテリアルに色を付けることです。ここでの注意点は、インスタンス化されたマテリアルごとに 1 つの色しか使用できないということです。つまり、ABC 文字列の A、B、および C をそれぞれ異なる色にしたい場合は、それらを分割する必要があり、3 つのドロー コールが発生します。 1つの代わりに。

もう 1 つのオプションは、頂点カラーとシェーダーを使用して、プロシージャルにマテリアルを色付けすることです。したがって、四角形を生成するときに、各頂点の色も指定した色に設定します。

シェーダーを使用して頂点の色に基づいてマテリアルを色付けすることに関する、Unity3D に固有のいくつかの簡単なリソース:

最後に、上記のいずれにも当てはまらない場合は、フォント レンダリングのプラグイン マーケットプレイスを調べて、購入するか試してから学ぶことをお勧めします。

幸運を。

于 2013-08-13T06:48:51.203 に答える