2017-12-15 15 views
1

フルスクリーンのカスタムポストエフェクトを作成しようとしています。 メインのカムにスクリプトを追加し、1行でblit(src、dst、mat)をvoid OnRenderImage(src、dst)に追加しました。私は_MainTexでシェイダーを書いたので、 "Blit"で動作します。私はそれを(何度も)すべての正しい方法でやりました。このシェーダを任意のオブジェクト(テクスチャを持つ)に割り当てるとうまくいきますが、問題はシェーダ(素材)をスクリプト(blit(,, mat))に割り当てるときにddx、ddyパーツを無視するようなものです。 tex2D(tex、uv)。どうして?どうすれば修正できますか? ここにフラグメントコードがあります。tex2D(s、t、ddx、ddy)がフルスクリーンで統一されていません

fixed3 frag(vout v):sv_target 
    { 
     fixed3 c; 
     float2 cddx=float2(
      pow(abs(0.5-v.uv.x),1.6)*_xy, 
      -pow(abs(0.5-v.uv.y),1.6)*_xy); 
     float2 cddy=float2(
      -pow(abs(0.5-v.uv.x),1.6)*_xy, 
      pow(abs(0.5-v.uv.y),1.6)*_xy); 
     c=tex2D(_MainTex,v.uv,cddx,cddy); 
     return c*0.5; 
    } 
+0

もう1つ気がついたのは、エディタで再生したときに、frag()で説明したように画面が "blured"になっているのが分かります。それは1-2フレームの開始時にのみ発生します。 – Srul

+0

あなたはスクリーンショットを追加できますか? –

答えて

1

回答が見つかりました。 tex2D(sampler2D、uv、ddx、ddy)およびtex2Dgrad(...)メソッドは、ミップマップを使用します。私がblit(src、dst、mat)のシェーダに "screen"テクスチャを渡そうとしたとき、私はsrcにミップマップがないことに気付きました。だから、私はsrc.GenerateMips()でミップマップを追加するだけだと思ったので、うまくいきます。しかし、落とし穴があります:

  • :私は編集者がrendertextureが作成されたことを私の例外をスローすることをやろう場合は、MIPSを生成作成rendertextureや他のものにunsuportedされていることを...最終的に私はrecipyを見つけました1時間

    1. ターンオフ自動
    2. useMips =真のミップマップを生成
    3. 別の一時renderTextureを作成
  • 一時
  • から
  • すべてのフレーム(OnRenderImage(...))

    1. ブリットsrcが一時
    2. ブリット(温度、DST、マット)

でミップマップを生成します新しいレンダリングテクスチャにミップマップを生成し、エラーなしでシェーダに渡します。

最後に、私が生成したいミップマップカウントを指定する方法を知っている人は、教えてください。

私のようなシェイダーで初心者に役立つことを願っています。

関連する問題