Eine schon sehr oft gefragte Frage - Tga Sprites

Posted By: Maxisoft2

Eine schon sehr oft gefragte Frage - Tga Sprites - 08/26/03 08:15

Hallo ,

Wie vielleicht schon manche von euch wissen , pruduziert Hawkgames gerade eine Grafikdemo , in der unter anderem auch ein großes Urwaldgebiet dargestellt werden wird . Doch da liegt das Problem - man kann die ganzen Pflanzen , Sträucher und Baumkronen nur mit TGA sprites machen - bei bmp´s würden die schwarzen Aussenränder das "Ambiente" zerstören . Doch leider gibt es einen scheuslichen effekt , wenn man eine Baumkrone aus TGA sprites macht . Alle Sprites überlappen sich merkwürdig und immer nur das hinterste Sprite wird angezeigt , das vordere ist unsichtbar .(Ist schwer zu beschreiben , aber die die den Bug kennen,wissen was ich meine)

Meine Frage an euch :
Gibt es schon eine effektive Lösung gegen das Tga-Spriteproblem??

Ich hoffe ihr könnt mir helfen.
Posted By: Anonymous

Re: Eine schon sehr oft gefragte Frage - Tga Sprites - 08/26/03 10:19

ich glaube auf loleks seite war mal so ein tut.

er hat einfach einem baum gemodelt, bmp-sprites an die äste gemacht und beim model overlay=on; gestellt.

ich hoffe ich konnte helfen.

Cu
Bobba
Posted By: Maxisoft2

Re: Eine schon sehr oft gefragte Frage - Tga Sprites - 08/26/03 10:28

Hi!
Das hilft nur bedingt - Denn wenn man einer Texturierten Oberfläche (z.b. einen Ast oder ein Blatt) das Overlay - Flag zuweist verpixelt die textur ! - darum geht das mit dem Overlay nicht. Jedenfalls nicht ohne großen Qualitätsverlust.

Hat noch jemand eine Idee?
Posted By: Anonymous

Re: Eine schon sehr oft gefragte Frage - Tga Sprites - 08/26/03 10:54

Ich glaube da gibt es einen befehl (zumindest in A5) mit dem man die soritierung transparenter sprites anschalten kann.

D3D_entsort;

ich weiß nicht ob es daran liegt aber versuch mal unter den includes

Code:
 
var D3D_ENTSORT =1;



zu schreiben.

mfg
Bobba
Posted By: Maxisoft2

Re: Eine schon sehr oft gefragte Frage - Tga Sprites - 08/26/03 11:03

Hi!
Tut mir leid - das funktioniert leider nicht .
(Wenn es euch was weiter hilft : Die Blätter sind keine einzelnen Spriites sondern sind schon fest ins modle eingearbeitet , und sozusagen als Texturen mit transparentem Background auf Cubes "geklebt")
Posted By: Harry Potter

Re: Eine schon sehr oft gefragte Frage - Tga Sprit - 08/26/03 12:51

Also grundsätzlich ist es so:

- TGA-Sprites werden immer anhand ihres Mittelpunktes sortiert. Das Sprite dessen Mittelpunkt näher beim Betrachter liegt, überlagert die Sprites deren Mittelpunkt weiter entfernt liegt. Überkreuzte Sprites machen daher Probleme, da die Mittelpunkte zu sehr beisammen liegen, und daher die Sprites oft falsch überlagert werden. Überkreuzte Sprites müssen also halbiert werden, wie in folgendem Beispiel:

Code:


Also nicht 2 Sprites (A, B) überkreuzen:

|
B
|
---A---+-------
|
|
|

Sondern 4 Sprites verwenden (A,B,C,D):

|
A
|
---B--- O ---C---
|
D
|



- Bei MODELS ist es so, dass die Polygone des Models NICHT anhand des Mittelpunktes sortiert werden, sondern nach der REIHENFOLGE DER ERSTELLUNG.
Man muss also schon beim Erstellen der Polygone darauf achten, welche Polygone ZUERST erstellt werden. Das ist ziemlich mühsam, aber die einzige Möglichkeit die ich kenne.

Wenn man also einen Baum immer von unten sieht, dann muss man ZUERST die OBEREN Teile des Baumes (Baumkrone) modellieren, und sich von OBEN nach UNTEN vorarbeiten. Denn die zuletzt erstellten Polygone überlagern immer alle anderen.

Allgemein würde ich empfehlen, die Bäume immer aus 2 Models zu machen. Ein Model OHNE TGA für alle Teile die NICHT transparent sind (also Baumstamm, Äste). Und ein Model für die Blätter. Dadurch hat man die falsche Überlagerung schlimmstenfalls bei den Blättern, und dort fällt es nicht so auf.
Posted By: XeXeS

Re: Eine schon sehr oft gefragte Frage - Tga Sprites - 08/26/03 14:11

Ja das Problem kenn ich auch !
Ich würde auch gerne wissen wie man es behebt.
Posted By: Maxisoft2

Re: Eine schon sehr oft gefragte Frage - Tga Sprites - 08/26/03 15:06

Hi!
Das Problem ist : Ich habe gerade über 40 Bäume in Arbeit - mit dieser umständlichen Methode währe es zuviel arbeit. Wenn es nur über diese methode geht - dann ist 3D Gamestudio für Landschaft - und Baumdarstellung schlichtweg UNGEEIGNET . Oder könnte Conitec das villeicht im nächsten A6 Update beheben??
Ansonnsten müssen wir das mit dem Urwald aufgeben , weil es einfach zu unprofessionell aussehen würde.
Posted By: Harry Potter

Re: Eine schon sehr oft gefragte Frage - Tga Sprit - 08/26/03 15:21

Das richtige Sortieren von Models mit TGA-Skin wäre laut Conitec zu zeitaufwändig. Die Framerate würde dabei ziemlich in die Knie gehen.

Conitec empfiehlt in diesem Fall, dass man Bitmaps anstatt TGA´s verwenden soll, in Kombination mit d3d_autotransparency = on;

Dann sehen die Ränder der Sprites zumindest nicht SCHWARZ aus, sondern man kann eine beliebige andere Farbe für die Transparenz verwenden (also z.B. grün). Dann sind also auch die Ränder grün anstatt schwarz.

Aber eine sehr schöne Lösung ist das meiner Meinung nach nicht.

Ich selbst verwende die zuvor beschriebene Technik mit TGA´s. Da ich 3DStudioMax verwende, ist es etwas einfacher. Ich erstelle zuerst alle Teile des Models in beliebiger Reihenfolge, und erst wenn das Model fertig ist, füge ich die einzelnen Teile in RICHTIGER Reihenfolge zu einem einzigen Mesh zusammen (mit "edit mesh" und "append"). Ist zwar auch mit Max sehr mühsam, aber das Ergebnis sieht mit TGA´s wegen der weichen Ränder viel schöner aus als mit Bitmaps.
Posted By: FRAJO

Re: Eine schon sehr oft gefragte Frage - Tga Sprit - 08/26/03 20:02

ich glaube mit my.flare=on; gehen die schwarzen ränder von bitmaps weg.

MfG FraJo
Posted By: XeXeS

Re: Eine schon sehr oft gefragte Frage - Tga Sprit - 08/26/03 22:54

Ich habs schonmal beschrieben aber da kam keine Antworten:

Ich will Conitec nicht anmachen aber mann könnte es ja mal probieren.

Im normalfall werden bei einer 3D Engine immer zuerst die völlig undurchsichtigen Objekte gerendert. Dann werden die Transparenten Objekte in der Reienfolge so sortiert das man sie von hinten nach vorne Rendern kann. Auserdem schaltet man im normalfall das Culling aus ( das ist das damit die Dreiecke die auf der Rückseite sind also diese die man eh nicht sieht wegfallen) weil durch ein Transparentes Objekt kann man ja hindurchsehen und sieht so eventuell auch die Rückseite eines Objekts. Das Reicht aber nicht denn dann kommt es zu diesen Modell Internen Fehlern Wo mal eines der Hinteren dreiecke plötzlich Vorne ist etc.
Kennen wir ja alle nicht oder ? . Eine Liste zu machen wo man für jedes Modell die Reienfolge der zu zeichnenden Faces speichert kann man auch vergessen das wär zu langsam.

Wenn man nun aber Das Objekt zuerst einmal so zeichnet das alle Faces die zu Kamera hinzeigen wegfallen. ( D3DCULL_CW ). Und dann das Objekt nocheinmal zeichnet so das alle die wegfallen die von der Kamera wegzeigen ( D3DCULL_CCW ) dann sind Die Polygone nähmlich schon sortiert. Das ist nicht immer hundert Prozentig aber es ist meistens ausreichend genau.


Man rendert das Objekt also zweimal einmal von der Rückseite und einmal von der Vorderseite die Polygone sind sortiert und die die auf der Rückseite sind können die auf der Vorderseite nich überschneiten.

Wie ichs noch erklären soll weiß ich nicht ich weiß nur das des so funktioniert und ausreichend schnell ist. Und hoffe das sich das ein Conitecler mal anschaut.


Posted By: ventilator

Re: Eine schon sehr oft gefragte Frage - Tga Sprit - 08/26/03 22:59

der einzigste unterschied zwischen a6 und deiner methode ist, dass du zusätzlich auch die backfaces zeichnest. aber die polygone werden deshalb nicht besser sortiert als in a6!
Posted By: XeXeS

Re: Eine schon sehr oft gefragte Frage - Tga Sprit - 08/26/03 23:14

Oh mann, jetzt mach ich mich unbeliebt, wilst dus nicht checken.

Nur für dich:

Haste schonmal in einen Glaßkasten geschaut ? Bei der Methode die Conitec verwendet sieht man plötzlich wenn man reinschaut die innen Wände Nimmer. Wäre aber komisch oder klar das dabei dann keine Sortierfehler auftreten wenn man sie nicht zeichnet.

Sie sollten aber gezeichnet werden um den nötigen Realismus zu bieten. Denn wenn du in eine Glaßvitrine schaust siehst du innen auch die Rückseite. Jetzt kommt dann du kanst dir deinen kasten ja aus sprites bauen jo richtig kann man ist aber total beschissen weils

1. Zeitaufwendiger ist und 2. ungenauer

Anstatt könnte man doch ein Modell machen. So jetzt hat man sein tolles Modell und legt es als Vitrine in sein level. Normalerweiße ist jetzt D3DCULL_NONE aktiv so das beide seiten gezeichnet werden. Aber wenn das stimmt was du sagst dann ist D3DCULL_CCW aktiv und die rückseite fällt weg ADE Realismus . . Jo jetzt haste noch ne möglichkeit du machst es so das du in den Kasten als Modell noch mal einen setzt und die normalen wendest. Su durch die allgemeinen Sortierprobleme die wir ja alle kennen weiß die Engine gar nimmer was vorne und hinten ist und rendert halt mal. Blob Fehler. So hätte man das nur gelassen mit dem inneren kasten den anstatt die Rückseite wegfallen zu lassen damit sich die 2 Transparenten seiten nicht überschneiten kann man ja zweimal rendern und dann das aus dem Vorigen thread.

So wenns jetzt checkst ok ansonsten mir auch wurscht ich habs schon gemacht und klapt prima. Ob dus glaubst oder nicht es funktioniert.


So und jetzt noch ne Idee zu den Bäumen. Halbiere oder viertle ihn dann sollte es die Objekt sortierung schon einigermaßen hinbekommen.
Posted By: ventilator

Re: Eine schon sehr oft gefragte Frage - Tga Sprit - 08/26/03 23:22

ich hab schon verstanden was du meinst. a6 zeichnet keine backfaces und meistens würde das auch nichts bringen. z.b. bei einer glasvitrine modelliert man auch den innenraum wenn es gut aussehen soll. die seitenwänden sollen ja nicht einfach dünne polygonplatten sein! für was braucht man dann backfaces?

du hast recht, dass für manche transparente objekte doppelseitig dargestellte polygone von vorteil wären, aber mit der lösung des sortierungsproblems hat das nicht viel zu tun! z.b. auf einem baum hättest du dann trotzdem genau so viele sortierungsfehler. und falls conitec doppelseitige geometrie implementieren würde, würden sie schätze ich schon auf die idee gekommen bei transparenten objekten die backfaces zuerst zuzeichnen.
Posted By: XeXeS

Re: Eine schon sehr oft gefragte Frage - Tga Sprit - 08/27/03 07:13

Also ich hab jetzt mal ein Baum modelliert ihn in eine Scene gestellt er hat auch Transparentsfehler aber die fallen kaum auf damit ihr das sehen könnt zeig ich den jetzt mal.


Posted By: PHeMoX

Re: Eine schon sehr oft gefragte Frage - Tga Sprit - 08/27/03 10:54

Quote:

Hi!
Das Problem ist : Ich habe gerade über 40 Bäume in Arbeit - mit dieser umständlichen Methode währe es zuviel arbeit. Wenn es nur über diese methode geht - dann ist 3D Gamestudio für Landschaft - und Baumdarstellung schlichtweg UNGEEIGNET . Oder könnte Conitec das villeicht im nächsten A6 Update beheben??
Ansonnsten müssen wir das mit dem Urwald aufgeben , weil es einfach zu unprofessionell aussehen würde.





Hmmm, aber was wenn du es einpackt in eine art random tree-generator script??

Es gibt glaube ich schon ein par schöne und wirkende scripts auf das Net!
Posted By: Maxisoft2

Re: Eine schon sehr oft gefragte Frage - Tga Sprit - 08/27/03 13:58

Hi!

Vielen Dank für die zahlreichen Antworten . Es stimmt schon , das das Transparenz-Problem in den Blättern nicht so arg auffällt.Aber das Problem ist , das die bäume dennoch einen Grafikfehler haben würden . (Und es ist bestimmt ganz im Sinne von Conitec , das in einer Grafikdemo , die die Engine representieren soll , keinerlei auch noch so kleine Bugs zu finden sind , die auf die Engine zurrückzuführen sind )Und ich bin mir absolut sicher , das es eine Möglichkheit gibt , durch ein paar zeilen Code das Problem zu beheben.
Leider bin ich kein guter skripter-ich kann nur ein paar zeilen Wdl , sonnst würde ich mich daran versuchen.

Naja - ich hoffe auf weitere Lösungsvorschläge , und evtl kann conitec sich überlegen , ob sie -sofern es möglich ist- den Bug auszumärzen (soll heisen entfernen)zu versuchen.
Posted By: Perro

Re: Eine schon sehr oft gefragte Frage - Tga Sprit - 08/27/03 15:25

so einfach ist das nicht. diesen "bug" findet man sogar in grossen kommerziellen spielen (fifa 2003). nur haben sie da darauf geachtet dass er kaum auffaellt.
Posted By: XeXeS

Re: Eine schon sehr oft gefragte Frage - Tga Sprit - 08/27/03 15:28

Ihr redet immer von einem Bug es ist aber eigentlich keins. Denn ein Bug bezeichnet ja einen Fehler. Dies ist aber eigentlich kein Fehler sondern ein ganz logischer nebeneffekt welchen man nicht einfach so beheben kann.
Posted By: Harry Potter

Re: Eine schon sehr oft gefragte Frage - Tga Sprit - 08/27/03 17:38

Diesen "Bug" gibt es, soviel ich weiß, in fast allen anderen Engines auch.
Wie ich aber schon weiter oben beschrieben habe, kann man diesen "Bug" durch geschicktes Design umgehen. Es ist zwar mühsam, aber es funktioniert.

Ich habe schon Pflanzen-Models mit TGA-Skin erstellt, bei denen keine falsche Überlagerung sichtbar ist.

Man muss die Models oft in MEHRERE Models aufsplitten. Also Models mit BMP-Skin und Models mit TGA-Skin. Man kann nicht einfach eine Glas-Vitrine und den Inhalt dieser Vitrine (Vasen, Geschirr) in einem einzigen Model machen. Man muss die undurchsichtigen Teile mit Bitmap-Skin-Models machen, und die transparenten Teile als eigenes TGA-Skin-Model. Und man muss bei transparenten Models auf die Reihenfolge der Erstellung der Polygone achten. Von Vorteil ist dabei, dass ein Polygon immer nur von EINER Seite sichtbar ist.

Nur ein einfaches Beispiel:

Seite A

-----A1-------
-----A2-------

-----B1------
-----B2------

---C1---
---C2---

Seite B

Dies soll ein Model für Gras-Sprites von oben gesehen darstellen. Jedes "Sprite" besteht aus 2 Polygonen (also aus einem Rechteck). Da so ein "Sprite" ja nur von einer Seite sichtbar ist, muss das Model aus zwei solcher Sprites zusammengesetzt werden (mit unterschiedlich ausgerichteten Normalen). Ein von beiden Seiten sichtbares Gras-Sprite besteht also z.B. aus den Polygonen A1 und A2.

Beim Erstellen der Polygone muss man nun wie folgt vorgehen:
- Zuerst Polygon C1 erstellen, dann B1, dann A1. Nun ist gewährleistet, dass die Polygone immer richtig überlagern, wenn der Betrachter von Seite A darauf blickt.
- Als nächstes erstellen wir die Polygone A2, B2, C2 (in genau dieser Reihenfolge). Somit sind die Polygone auch richtig sortiert, wenn der Betrachter von Seite B darauf blickt (der Vorteil dabei: die Polygone A1, B1, C1 sieht man ja von dieser Seite nicht, daher können sie auch nicht falsch überlagern).

Und genauso muss man auch z.B: bei Bäumen vorgehen: also Pflanzen, die sehr klein sind, und auf die man von oben drauf blickt, sollten immer von unten nach oben konstruiert werden. Bei hohen Bäumen, die man immer von unten sieht, muss es genau umgekehrt gemacht werden. Bei Glas-Vitrinen mit Innenflächen muss man wie bei dem Gras-Beispiel vorgehen.

Ist mühsam, zahlt sich aber aus. Und ich schätze mal, in professionellen Spielen wird es genauso gemacht!?!?
Posted By: Maxisoft2

Re: Eine schon sehr oft gefragte Frage - Tga Sprit - 08/27/03 19:19

Hi!

Danke nochmal für die Antworten - dann muss man wohl mit diesem Transparenz-Problem leben , und es - so gut wie möglich - verstecken.

© 2024 lite-C Forums