ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4420317
Jetzt (Chat):
21 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-
"CSG für Indoor/Outdoor" von Torsten Richter (Torsten Richter)


Hallo Leute,

da anscheinend ein Mangel an IOTW herrscht, hier ein kleiner Screenshort der beim Testen meiner CSG entstand. Folgendes Problem entsteht wenn man eine Portal-Engine mit Terrain kombinieren will:

Das Terrain muß unter den Gebäuden deaktiviert werden und Gebäudeteile unterhalb der Erdoberfläche auch. Nicht nur wegen des erhöhten Owerdraws sondern man will ja schliesslich nicht im Wohnzimmer den grünen Rasen haben.

Ältere Grafikkarten ,wie die RivaTNT,sind meist nur im 16bit-Modus richtig schnell. Aber leider scheint dann auch der Z-Buffer nur mit 16Bit zu arbeiten und es kommt zu Grafikfehlern bei Flächen die im flachen Winkel aufeinander liegen. (Gehwegplatten vor Gebäude und Terrain)
Die Lösung ist ein CSG-Algoritmus, der nicht sichtbare Geometrie entfernt. Dieser braucht später im Game nur einmal nach dem Laden des Terrains und der Portalmap aufgerufen werden.

Das unter Bild zeigt die Orginal-Portalmap.
Oben sieht man das Gebäude eingepasst in des Terrain, dieses ist zum Testen zur Zeit nur 64*64 Höhenpunkte groß.






Von LordHoto am 21.06.2003, 00:06:26 Uhr
hi,

ich finds cool!
weiter so und kannst uns mal eine DEMO davon schicken?

MFG

LordHoto

Von crazy_vox am 21.06.2003, 01:49:55 Uhr
Hi,
Sieht echt nicht schlecht aus! Ich fände es auch nicht schlecht, wenn du mal ne Demo machen könntest!
Weiter so...

ciao Flo

Von Lambert am 21.06.2003, 10:54:02 Uhr
Naja - an sich sieht das wirklich nett aus.
Wenn du mir ein bisschen (konstruktive) Kritik erlaubst würde ich aber gerne mal was bemängeln.

Die Linienüberlagerung auf den Texturen sieht etwas seltsam aus. Ich glaube das nennt sich Moree-Effekt oder so. Kann aber auch daran liegen wie das Bild verkleinert wurde (sprich Grafikprogramm). Ansonsten versuch mal Mip-Maps für die Wandtexturen.

Ansonsten sieht es echt nicht schecht aus!

Von Etahfrance am 21.06.2003, 11:49:56 Uhr
Ja, sieht nicht schlecht aus.
Aber sind das nicht schon Mipmaps?

Von Eisflamme am 21.06.2003, 11:59:18 Uhr
Hallo,

ich finds auch cool.
Ist natürlich nicht der Hammerscreenshot, aber darum geht es ja nicht.
Das Haus sieht aber garnet so schlecht aus ^^

@
Das sieht aber schon sehr so aus, als wären da keine MipMaps da...

MfG MAV

Von Timm von Puttkamer am 21.06.2003, 12:07:00 Uhr
Da sind Mip-Maps. (schau mal auf das Dach)

Hast du zu diesem Thema irgendein Paper/Tutorial?
Was mich aber interessiert ist, ob es bei einer detaillierteren Heightmap noch sinnvoll ist, da dann warscheinlich viel zu viele Dreiecke generiert werden, oder?

Von Torsten Richter am 21.06.2003, 13:00:02 Uhr
Ja,das sind Mip-Maps ohne Filterung aber das ist hier eher nebensächlich.

"detaillierteren Heightmap noch sinnvoll ist, da dann warscheinlich viel zu viele Dreiecke generiert werden"

Ja ich weiss,habe jetzt schon eine Optimierung drin,die versucht Nachbarpolygone
zuvereinen,so das diese aber noch konvex sind. Diese Funktion reduziert die
Anzahl im CSG-Mesh von 291 auf 172 Polygone.

Der IOTW-Screenshort ist vielleicht etwas ungünstig gewählt.
Hier zum Vergleich: Bild oben ohne CSG,unten mit


http://www.3dprogrammierung.gmxhome.de/bilder/csg_test.jpg



Eine Demo gibst jetzt noch nicht,da dies nur ein Modul eines größen Projektes ist.

Von Dr. Fred am 21.06.2003, 14:18:25 Uhr

Sieht nicht schlecht aus. Bloß die Texturen sind etwas schlecht auf gelöst.

Von ChrisM am 21.06.2003, 14:32:43 Uhr
Sieht bis auf die Texturauflösung toll aus. :)

Wieviel FPS schafft der obere Shot bei dir (natürlich mit Rechnerangaben)?

ChrisM

Von CrystalCoder am 21.06.2003, 15:20:49 Uhr
Wow, sowas ist schon sehr praktisch... (wenn 3dsmax sowas auch hätte...).

Bis auf die nicht so gut gewählten texturen hab ich nichts zu bemängeln. Wie lang hast du denn dafür gebraucht?

Von Torsten Richter am 21.06.2003, 16:16:28 Uhr
@CrystalCoder

4 Tage habe für das CSG-Modul gebraucht. Als
Rahmenanwendung habe ich gleich meine Portalmapkonverter mißbraucht.
(siehe IOTW vom 08.06.)

@ChrisM
Etwa 57 Fps,ist ja auch noch nicht sehr viel Geometrie zu sehen.(AMD-Duron 600Mhz,1024x768,16bit Farbtiefe,RivaTNT2)

Von joeydee am 21.06.2003, 18:52:24 Uhr
Ich finds immer klasse, wenn sich jemand über Standard-Techniken hinaus Gedanken macht, das sind für mich "echte" Entwickler. Wen interessieren zu diesem Zeitpunkt schon die Texturen? Weiter so!

Jo

Von Fireface am 21.06.2003, 21:31:53 Uhr
hübsch hübsch... aber du schreibst ja, dass es eigentlich nur ein Modul eines größeren Projektes ist.
Von welchem sprichst du hier?

Von SiC am 22.06.2003, 13:46:49 Uhr
@CrystalCoder: 3DSM hat sowas. Das nennt sich Boolean Operations oder so aehnlich, hab auch noch nix damit gemacht, weiss nur das es das gibt

@Torsten: CSG bin ich auch bei mir am einbauen, d.h. ich kriegs net gebacken. Wie machst du das? Darf ich dich mal in ICQ adden?

Von Torsten Richter am 22.06.2003, 14:36:05 Uhr
Endlich,ich dachte schon da fragt keiner danach.
Die Funktion in groben Schritten:

2 Polygonarrays, Array1 für Terrain, Array2 für Gebäude

Array mit für CSG in fragekommenden Polygonen füllen

Bondingbox um jedes Polygon in Arrays berechnen

die 2 Arrays gegenseitig nach sich überlappenten Bondingboxen absuchen
-Überlappung gefunden?
-ja,durchdringt sich das Terrain- Gebäudepolygone gegenseitig?
-Ja,das Terrain- Gebäudepolygone splitten sich gegenseitig
-Bondingbox für neu entstandene Polys berechnen

Polygonsalat testen
-Gebäudepoly unter Terrain? Ja,dann löschen
-Terrainpoly in Gebäude? (Wand,Boden) ? Ja ,dann löschen

und zum Schluß das ganze noch optimieren
-Nachbarpolys mit gleicher Ausrichtung testen.
Entsteht beim Vereinen eins,das noch konvex ist?
-Ja,dann Verschmelzen
-Punkte von jeden Poly optimeren

Von SiC am 22.06.2003, 14:51:16 Uhr
ach so machst du das, ich mach das bei mir d.h ich will das bei mir so machen das man 2 bspbaeume hat und die miteinander kombiniert entweder mit add oder subtract. So wie das im Unreal Ed ist. Aber ich kriegs nicht hin. :(

Von Torsten Richter am 22.06.2003, 16:04:23 Uhr
@SiC
Sind ungefähr 940 Zeilen Quellcod,
läßt sich auch autonom einsetzen.

Code:
//Funktionen die von Außen zugänglich sind
csgface_t * CSGface_New(int typ);//TERRAIN=0,INDOOR=1
void CSGface_AddVertex(CVector*v); //neuen Punkt in aktuelles Polygon (CSGface_New)
void CSGface_Set(int texinfo,char*notvis,int id);
int  csg_texinfo_new(secTexinfo_t*texinfo);
csg_mesh_t*   CSGMesh_Built();
void          CSGMesh_Free(csg_mesh_t*p);
void          CSGMesh_Draw(csg_mesh_t*p);


@SiC ich weiß aber nicht,ob ich so einfach weitergeben so,hat mich schlieslich Zeit gekostet.

Von SiC am 22.06.2003, 16:52:59 Uhr
naja ist auch nicht so wichtig, meine engine hat da halt nur n paar bugs, aber ich guck jetzt das ich erstmal das laden und speichern meiner klassen hinkrieg und meine engine auf das neue klassensystem umstelle. Danach wende ich mich wieder dem CSG zu.

Von sebi am 26.06.2003, 08:14:17 Uhr
Coole Sache. Sag mal, wie bist du zu diesem Algorithmus gekommen? Ausem Internet gezogen, oder selbst ausgedacht?

Ich glaube ich habe so etwas ähnliches auch schonmal für meinen Modeller geschrieben. Da heißt es allerdings Carving;)