2017-12-15 11 views
1

Ich versuche, Vollbild benutzerdefinierte Post-Effekt zu machen. mit Skript hinzugefügt, um Hauptkamera, mit einer Zeile: Blit (src, dst, mat) in void OnRenderImage (src, dst). Ich habe den Shader mit _MainTex geschrieben, damit es in "Blit" funktioniert. Ich habe es (oft) richtig gemacht wie in Tuts. Wenn ich diesen Shader einem beliebigen Objekt (mit Textur) zuweise, funktioniert es gut, aber das Problem ist, wenn ich diesen Shader (im Material) dem Skript (blit (,, mat)) zuweise, ignoriert er den ddx, ddy Teil, es funktioniert wie tex2D (tex, uv). WARUM? wie kann ich es reparieren? Hier ist der Fragmentcode.tex2D (s, t, ddx, ddy) funktioniert nicht im Vollbild in Einheit

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

Ich bemerkte eine weitere Sache, wenn ich im Editor zu spielen, sehe ich, dass der Bildschirm "blured" wie es ist, wie es in frag() beschrieben. aber es passiert nur beim Start für 1-2 Frames. – Srul

+0

könnten Sie möglicherweise einen Screenshot hinzufügen? –

Antwort

1

Ich fand eine Antwort. Die Methoden tex2D (sampler2D, uv, ddx, ddy) und tex2Dgrad (...) verwenden mipmaps. als ich versuchte, "screen" textur an den shader in blit (src, dst, mat) zu übergeben, bemerkte ich, dass src keine mipmaps hat, nur die ursprüngliche textur. Also dachte ich, dass ich einfach mipmaps mit src.GenerateMips() hinzufügen werde und es funktioniert. aber es gibt einen Haken: Wenn ich versuche zu tun, dass der Editor wirft ich Ausnahmen, dass die rendertexture erstellt wird, das Erzeugen von Mips in erstellt rendertexture und anderen Sachen unsuported ist ... endlich ich die recipy gefunden:

  • eine Zeit

    1. eine andere Temperatur renderTexture
    2. Abschaltzeit auto Mipmaps
    3. erzeugen schaffen
    4. useMips = true
  • jeden Rahmen (OnRenderImage (...))

    1. Blit-src zu Temp
    2. erzeugen Mipmaps in Temp
    3. Blit (temp, dst, mat)

Er generiert Mipmaps für eine neue Render-Textur und übergibt sie fehlerfrei an den Shader.

eine letzte Sache, wenn jemand weiß, wie man Mipmap zählt, die ich erzeugen möchte, sag mir bitte.

Ich hoffe, dass es für Anfänger in Shadern wie mir hilfreich sein wird.

Verwandte Themen