Transparente Texturen löschen an den transparenten Stellen andere Meshes aus
-
Um das zu verdeutlichen, hier ein Screenshot. Wie kann man dieses Problem lösen? Es scheint manchmal auch innerhalb des eigenen Meshes aufzutreten, ich habe aber noch nicht genau erkennen können, wann. Es mag vielleicht was damit zu tun haben, wenn man von dem einen Polygon die Vorder- und vom anderen die Rückseite sieht. Das zwischen zwei Meshes tritt aber immer auf.
-
hmm, ist nur ne idee, aber: könnte ja sein das durch das culling definiert wird, das diese bereiche nicht sichtbar sind, obwohl sie es wegen durchsichtigkeit eben doch sind, und somit nicht gezeichnet werden.....
wie gesagt, nur ne rein theorethische idee....
-
Ich denk eher, dass die Karte wegen dem Z-Buffer denkt, dass sie alles was dahinter liegt nicht zeichnen muss. Shalt mal für die transparenten Teile den Depth Test aus.
-
YASC schrieb:
Ich denk eher, dass die Karte wegen dem Z-Buffer denkt, dass sie alles was dahinter liegt nicht zeichnen muss. Shalt mal für die transparenten Teile den Depth Test aus.
Ich denke auch, dass das die Ursache ist, denn amsonsten passt von der Tiefe her alles. Wie ich geschrieben habe, machen die transparenten Bereiche Ärger, aber ich kann die Transparenz ja schlecht ausschalten, weil die Blätter vom Baum eben so aussehen, wie sie aussehen. In FarCry gibt es auch Bäume und da sieht man zwischen den Blättern alles durch, also muss es prinzipiell möglich sein.

Es ist ja auch auffällig, wie es innerhalb des eigenen Mesh passt, d.h. die transparenten Bereiche löschen keine Teile vom eigenen Baum aus. Ich ändere zwischendrin aber nichts, nur die World-Transform.
-
Wenn du die transparenten Teile renderst, schalt mal den Depth Test aus, nicht die Transparenz vielleicht gehts dann.
Aber komisch dass das bei dem eigenen Mesh nicht auftritt
-
Was genau meinst du jetzt mit dem Depth Test? Ich habe bzgl. des Tiefenrenderings eigentlich nicht mehr gemacht, als den Z-Buffer aktiviert. Ohne den geht ja sowieso gar nichts. Sorry, bin noch Anfänger.
-
Mir is grad in der Doku ZWRITEENABLE als Renderstate aufgefallen. Schalt das mal für die transparenten Polys auf false und lass ZENABLE auf true, musst ich bei den Partikelengines mit transparenten Quads immer machen, damit die nich ganz oben liegen
-
@ YASC pssst, das wäre doch schon fast zu einfach

rapso->greetes();
-
Ok, ich sehe schon, was das macht. Das nützt mir aber leider natürlich nichts, wenn die Baumkronen dann nicht depth-sortiert gerendert werden.

rapso schrieb:
@ YASC pssst, das wäre doch schon fast zu einfach

Willst du mich vielleicht an deinem unendlichen Wissen teilhaben lassen?

-
@YASC: Ich sollte es vielleicht dazu sagen, die Baumkronen bestehen aus ein paar wenigen Polygonen und sind mit einer Textur überzogen die an manchen Stellen durchsichtig ist. Es gibt also keine ganzen transparenten und nicht-transparenten Polygone.
-
Dann mach mal für die die wenigstens ein bisschen transparent sind
-
Hmm, aber dann kanns doch passieren, dass die Blaetter der hinteren Baeume vor denen der vorderen Baeume liegen, so trivial wie ein Partikelsystem mit gleichen Partikeln ist das ja nicht (oder?..)
IMHO muessen die transparenten Teile zum Schluss gerendert werden und zwar nach Tiefe sortiert. Kann mir irgendwie nicht vorstellen, dass es anders funktionieren sollte, lasse mir aber gerne erklaeren wie's einfacher geht

-
Screenshot
Es könnte sein, dass speziell dieses Problem damit gelöst ist. Genau kann ich es allerdings nicht sagen, wenn die meiste Zeit Objekte, die im Hintergrund sein sollten, Objekte im Vordergrund überlagern. Als Lösung kommt das leider so noch nicht in Frage. Oder wolltest du damit nur was herausfinden?
-
durito schrieb:
IMHO muessen die transparenten Teile zum Schluss gerendert werden und zwar nach Tiefe sortiert. Kann mir irgendwie nicht vorstellen, dass es anders funktionieren sollte, lasse mir aber gerne erklaeren wie's einfacher geht

Wenn sie als letztes gerendert werden, können sie doch auch wieder vor Objekten erscheinen, hinter denen sie eigentlich sein sollten oder? Oder hast du es anders gemeint. Amsonsten sehe ich das Problem genauso wie du. Eigentlich gäbe es ja überhaupt kein Problem, wenn der transparente Bereich wirklich transparent wäre und nicht einfach andere Meshes auslöschen würde. Wieso ist das überhaupt so?

-
durito schrieb:
IMHO muessen die transparenten Teile zum Schluss gerendert werden und zwar nach Tiefe sortiert. Kann mir irgendwie nicht vorstellen, dass es anders funktionieren sollte, lasse mir aber gerne erklaeren wie's einfacher geht
Ja stimmt, dann die als letztes und ZENABLE auf false, vielleicht gehts ja dann.
Probieren macht Spass

-
Optimizer schrieb:
durito schrieb:
IMHO muessen die transparenten Teile zum Schluss gerendert werden und zwar nach Tiefe sortiert. Kann mir irgendwie nicht vorstellen, dass es anders funktionieren sollte, lasse mir aber gerne erklaeren wie's einfacher geht

Wenn sie als letztes gerendert werden, können sie doch auch wieder vor Objekten erscheinen, hinter denen sie eigentlich sein sollten oder? Oder hast du es anders gemeint. Amsonsten sehe ich das Problem genauso wie du. Eigentlich gäbe es ja überhaupt kein Problem, wenn der transparente Bereich wirklich transparent wäre und nicht einfach andere Meshes auslöschen würde. Wieso ist das überhaupt so?

Das "ausloeschen" liegt daran, dass wenn das transparente Dreieck zuerst gerendert wird und nix im Hintergrund ist, der transparente Teil des Dreieckes grau (Hintergrund) wird. Spaeter wird der hintere Baum gezeichnet, allerdings verhindert der Z-Test, dass der Baum vor dem (ganzen) "transparenten" Dreieck liegt, d.h. das "Transparente" ist nach wie vor vorne mit seinem grauen Hintergrund. (Z-Test ist auf das Dreieck bezogen, nicht nur auf die sichtbaren Teile)
-->
Transparente Teile muessen gerendert werden, nachdem der Hintergrund bereits besteht, damit der transparente Teil auf den bereits existierenden Hintergrund (Baum) addiert werden kann.Uhm, verstaendlich?..
Jedenfalls sollte die nicht-transparente Szene erst mal gerendert sein, damit anschliessen die transparenten Elemente dazuaddiert werden koennen. Auch dabei gilt wieder, dass das hintere Teil bereits existieren muss wenn das vordere kommt... (Es sei denn die transparenten Teile sehen alle gleich aus, dann kannst Du Z-Write deaktivieren, sieht man ja nicht welches von denen vorne liegt. Bei Baeumen weiss ich aber auch nicht, wie das gehen soll, ausser wirklich mit sortieren.. mal rapso fragen
)
-
YASC schrieb:
durito schrieb:
IMHO muessen die transparenten Teile zum Schluss gerendert werden und zwar nach Tiefe sortiert. Kann mir irgendwie nicht vorstellen, dass es anders funktionieren sollte, lasse mir aber gerne erklaeren wie's einfacher geht
Ja stimmt, dann die als letztes und ZENABLE auf false, vielleicht gehts ja dann.
Probieren macht Spass

Dann koennen aber immernoch hintere Blaetter ueber vorderen zu liegen kommen.
-
durito schrieb:
YASC schrieb:
durito schrieb:
IMHO muessen die transparenten Teile zum Schluss gerendert werden und zwar nach Tiefe sortiert. Kann mir irgendwie nicht vorstellen, dass es anders funktionieren sollte, lasse mir aber gerne erklaeren wie's einfacher geht
Ja stimmt, dann die als letztes und ZENABLE auf false, vielleicht gehts ja dann.
Probieren macht Spass

Dann koennen aber immernoch hintere Blaetter ueber vorderen zu liegen kommen.
Deswegen ja nach der Tiefe sortiert, die tiefsten zuerst
-
Also ich verstehe schon, was du meinst. Ich dachte, D3D sortiert nach Tiefe und rendert dann einfach die vorderen über die hinteren rüber. So gibt das natürlich Sinn.
Wenn man am Ende die teilweisen transparenten Elemente dazurendert, werden die dann noch korrekt von davor liegenenden Objekten verdeckt, d.h. werden nur die wirklich sichtbaren Teile dazugemalt? Wenn nicht -> böse.
Kann man den Z-Test nicht auch einfach deaktivieren? Ist natürlich performance-mäßig nicht unbedingt eine gute Überlegung, aber wenn ich einen fetten Wald abbilde, habe ich mit der manuellen Methode doch wahrscheinlich insgesamt noch mehr Aufwand, als wenn ich einfach alles rendere? Zumindest für Testzwecke würde ich das gerne probieren, habe aber kein entsprechendes RenderState gefunden.
-
ZENABLE auf false, schon is der Z-Buffer aus