2016-11-15 12 views
2

UV座標を使用してスプライトに光り輝きたいが、問題は、スプライトがUnityのスプライトパッカーで作成されたアトラスに由来する場合、UVは0から1、しかし2つの任意の値からです。どのようにして、アトラスにある単一のスプライトに対してUVデータを正規化するのですか?シェーダに追加情報を解析する必要がありますか、またはこのプロセスを実行するために必要な情報を既に持っている必要がありますか?下の画像は、状況を説明しますアトラスUVマップvs.ローカルUVマップ

enter image description here

手を左にアトラスからスプライトではありません。右の手はアトラスのスプライトです。私は右手が左手の手と同じに見えるようにします。

私はまだシェーダーに精通していないので、私はshaderforgeの使用に頼っています。私は次のshaderforgeレイアウトを使用しています: enter image description here

答えて

1

あなたはすでにこれを知っていますが、基本的な問題は "UV Coords"ノードの出力です。あなたのシェーダの他のノードは、0から1の範囲の正規化されたUVを期待していますが、それはテクスチャアトラスを使用するときに得られるものではありません。

私はそれを解決する2つの方法を考えることができます。どちらも実用的なので、ワークフローにもっときれいに当てはまるものを試してみることをおすすめします。

は、それが唯一のUVチャネルとしてUV0を処理するのは簡単ですが、特定の技術のために、各頂点に複数のUV座標を追加すると便利可能な第2のUVチャンネル

を追加します。

例として、ライトマッピングは、各モデルが独自のテクスチャ(拡散/ノーマル/等)を持つ一般的な機能ですが、各シーンには複数のモデル間で共有される事前焼き付けライトマップテクスチャがあります照明情報用のアトラスこれらのUVは一致しないので、ライトマップUVは第2のチャンネル(UV1)に格納されます。

同様の方法で、アトラスUVにはUV0、ローカルUVにはUV1を使用できます。これにより、その乗算エフェクトに使用できる[0,1]の範囲できれいに入力できます。

彼らは正規化されているように、あなたはUVをscale and offsetでき

のparams材料を追加します。

  1. レンダリングする前に、
  2. 範囲が正規化されるように、入力されたUVをスケーリング及びオフセットするシェーダノードを追加
  3. が等の材料パラメータのそれらの値を渡し、メッシュのUV座標のためminmax値を見つけます

たとえば、あなたがしてmax - min(スケール)で割る、各UV(オフセット)にminを追加することができます。

関連する問題