Aufruf von Material.setPass mit benutzerdefiniertem Shader bricht GL - Unity

9

Hier ist mein Shader, der eine Farbe durch eine andere ersetzt:

%Vor%

Hier ist ein Test-Skript, das an GameObject angehängt ist und die Hauptkamera enthält. Darin versuche ich eine Linie und ein strukturiertes Quad zu rendern.

mat wird mit SwapColors mit einer Textur zugewiesen.

sprite_mat wird mit dem Standard-Sprite-Shader mit der gleichen Textur zugewiesen.

%Vor%

Wenn ich den Quad mit sprite_mat rende, ist alles in Ordnung.

Wenn ich mat verwende, verschwindet nicht nur das Quad, , sondern auch die Zeile , obwohl es mit sprite_mat dargestellt wird.

Wenn ich einen anderen Quad im Editor erstelle und sein Material auf mat setze, wird es korrekt gerendert.

Meine Hauptfrage ist, wie sich setPass auf die Geometrie auswirken kann, die nach einem anderen nicht verwandten setPass erstellt wurde.

Beispielprojekt: forum.unity3d.com/attachments/errorgl-7z.138105 /

Bearbeiten: Ich habe einen standardmäßigen Unity-Sprite-Shader gefunden und ihn mit meinem verglichen. Der Quad verschwand, weil er der Kamera in die entgegengesetzte Richtung zeigt. Es ist durch Cull Off festgelegt.

Wenn ich Zeile

hinzufüge

float4 color:COLOR;

bis VertexInput Struktur, Material mit meinem Shader stoppt die Geometrie mit anderen Materialien. Ich verstehe nicht, was passiert.

    
user2136963 10.05.2015, 06:56
quelle

1 Antwort

0

Ich denke nicht, dass du SetPass(0) zweimal zwischen GL.Begin(..) und GL.End(..) .

kannst

Du kannst verschiedene Pässe mit SetPass(0); [..] SetPass(1); setzen, aber wenn du deinen Shader betrachtest, denke ich nicht, dass du das machen willst.

Versuchen Sie also, den Quad mit 2 Durchgängen zu zeichnen? Eine mit dem Standard-Sprite-Material und die andere mit Ihrem eigenen Material? Oder einfach zweimal zeichnen?

Ich verstehe nicht ganz, was du hier machen willst.

    
Fonserbc 30.06.2015 09:40
quelle

Tags und Links