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:
4369840
Jetzt (Chat):
10 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-
"kc3d engine Techdemo" von reto da forno (keepcoding)


Hier seht ihr einen Screenshot aus der „kc3d engine Techdemo“. Diese 3D-Engine hab ich im vergangenen Jahr als Maturaarbeit (Abiturarbeit) entwickelt.

Das ganze wurde mit einem Mix aus C und C++ programmiert und läuft mit DirectX9. Sämtliche Shader sind in HLSL geschrieben (ausschliesslich VS 1.1 und PS 2.0). Aus diesem Grunde musste ich leider auch die Mindestanforderung für das Techdemo auf eine Grafikkarte mit Pixel-Shader 2.0 Support (also mindestens Nvidia 5600 oder ATI 9500) festlegen.

Features der kc3d engine:

Grafik: Initialisierung von DirectX9, Matrizen, Vektoren (3D, 4D), Ebenen, Kollisionsabfrage (Binarytree, Quadtree, Octree), Render-Manager, Bitmap-Fonts (Textausgabe), grafische Benutzeroberfläche (GUI), Skybox / Skydome, Lens-Flares, Rendern von 3D-Modellen (x, 3ds und kcm-Format), eigenes Dateiformat für 3D-Modelle und Terrains (kcm, kct), Indoor-Rendering (Portale), Diverse HLSL-Shader (siehe unten), Shadow-Volumes, Shadow-Mapping

Diverse Funktionen: Timer, integrierte Logbuch-Datei-Funktion, Speichermanagement, Konfigurationsdialog, Eingabe per Maus / Tastatur, Netzwerkfähigkeit (DirectPlay)

Die Techdemo findet ihr auf meiner Homepage oder direkt hier: http://keepcoding.myflathost.com/Terrainv2.0DemoEndUser.rar
Der „kc3d Terrain Editor“ kann hier gedownloadet werden: http://keepcoding.myflathost.com/Terraineditorv1.0EndUser.rar

Technik (in der Demo):

Terrain
- Heightmap
- Quadtree
- Geomipmapping (3 LOD-Stufen)
- Potentially Visible Set (PVS)
- View-Frustrum-Culling und Front-to-Back-Rendering
- in Echtzeit zerstörbar

Texturierung
Texturiert wird das Terrain mit einer Splattering-Methode mittels Alphamap (vier Kanäle, jeder Kanal repräsentiert eine Textur), welche automatisch generiert wird und nach belieben manuell abgeändert werden kann (so können z.B. mit einem Bildbearbeitungsprogramm Wege in die Landschaft gezeichnet werden).
Die Vegetation (Grashalme) wird über eine Textur platziert (drei Farben entsprechen drei verschiedenen Grashalmen).

Water
- Realtime Planar Reflection / Refraction
- Normal Mapping

Gras
- Realtime Hardware Animated Grass
- Alpha Transparency

Lighting
- Lightmapping für das Terrain
- Realtime Soft-Edged Shadow Mapping für Objekte auf dem Terrain
- Normal-Mapping (Terrainboden)

Shader (Objekte)
- Cube Environment Mapping (Reflection, Refraction)
- Parallax-Mapping
- Marble- und Wood-Shader
- Oily / Wood / Marble Surfaces

Post Process Effekte
- Depth of Field
- Bloom
- Farbfilter (Sepia, Monochrome)
- Height-Based Fog
- Motion Blur
- Edge-Detection

Pläne für die weitere Entwicklung existieren noch nicht. Wahrscheinlich werde ich jedoch einen Ego-Shooter entwickeln... naja, mal sehen ob ich irgendwann Zeit dafür finde :-)

Gerne beantworte ich weitere Fragen und selbstverständlich ist auch Kritik willkommen ;-)

Weitere Informationen und einige Tutorials findet ihr auf meiner Homepage (http://www.keepcoding-development.ch.vu).

mfg
Keepcoding






Von sebi am 04.07.2006, 22:12:19 Uhr
_Erster_
sieht wirklich genial aus. weiter so ;)

leider kann ich deine HP nicht aufrufen. Ist der Server evtl. down? würde mir das gerne in echtzeit ansehen ;)

Von keepcoding am 04.07.2006, 23:42:32 Uhr
ja, der server scheint zurzeit probleme zu haben...
hier ein alternativer Link:
http://prdownloads.sourceforge.net/kc3d/Terrainv2.0DemoEndUser.rar?download

Von Richard Schubert am 05.07.2006, 00:08:22 Uhr
nicht übel, auch wenn die cubemaps statisch sind, macht es auf den ersten blick nicht den eindruck. nett ausgedacht.

Die Auflösungsenumeration könntet ihr aber vollständiger gestalten, bei 1600x1200 ist schon schluss, die frage ist nun warum dem so ist?

Von Nygma am 05.07.2006, 09:41:57 Uhr
Nett, sehr nett!

Vor allem die niedlichen Effekte wie Sepia oder Bloom und sowas. Zwar nur Eye Candy aber sehr huebsch das alles. Und dann noch Geschwindigkeitstechnisch top! Fand ich.

Immer nur weiter so. Wuerde sich gut fuer nen RPG eignen :)

Von Torsten Richter am 05.07.2006, 10:03:43 Uhr
Die Screenshots sehen gut aus.
Die Demo läuft leider nicht bei mir. Fehlermeldung: "d3dx9_29.dll" wurde nicht gefunden. Auf meinen Rechner ist DX9c installiert.



Von keepcoding am 05.07.2006, 10:11:59 Uhr
danke für die positiven Rückmeldungen!

@Richard Schubert: hab ich nun geändert

@Torsten Richter: ja, das ist ein problem von microzoff ;) die legen diese DLL aus irgendwelchen Gründen nicht zu den redist.-Versionen bei. die fehlende DLL kann z.B. unter
http://www.threelights.de/index.php?page=projects/d3dx9_xx_dll_files.php
runtergeladen und ins System32-Verzeichnis kopiert werden.

Von Extrawurst am 05.07.2006, 13:41:43 Uhr
ist das ne weiterentwicklung von "natureScene" bei NVIDIA ( http://developer.nvidia.com/object/nature_scene.html ) oder haste nur die selben Texturen um ganz vorsichtig zu fragen ?

Von Lynxeye am 05.07.2006, 13:56:06 Uhr
Genau das dachte ich auch zuerst als ich die Screens gesehen hab, dass es irgendwas mit der Nature Scene zu tun hat. Aber wenns alles selber gemacht ist das wirlich Top. Wenn du nur die Texturen verwendet hast kann man das ja noch verschmerzen.

Von keepcoding am 05.07.2006, 14:42:27 Uhr
weder texturen (ausser evtl. die himmeltextur... bin kein Grafiker^^), noch code stammt von der demo. hab aber die heightmap von da. die engine ist eine komplette eigenentwicklung, hab mir den code von dieser demo nicht einmal angeschaut.

Von Seraph am 05.07.2006, 17:02:02 Uhr
Zitat von Nygma:
Und dann noch Geschwindigkeitstechnisch top! Fand ich.

Fand ich auch, bahnbrechende 10-25 FPS bei aktiviertem Gras, ohne sogar ein wenig mehr. Und wenn ich mir die bösen Monster angesehen habe, ging es wieder runter. *heul*

Optisch ist es wirklich nett, jedoch wie in letzter Zeit so oft, auf meiner GF FX5900 nicht mehr wirklich "spielbar".

Von Guru am 05.07.2006, 20:50:55 Uhr
Sehr schöne Demo und sehr feine Engine.

Hat Laune gemacht damit rumzuspielen. Jetzt fehlt ihr wirklich nur noch ein kleines nettes Spielchen um das ganze Potential zu zeigen.

Warte gespannt drauf. Super Arbeit.

Gruß

Rainer

Von Salacryl am 06.07.2006, 08:56:51 Uhr
hi,

ich muß zugeben, bis jetzt eines der wenigen IOTWs von denen ich tatsächlich beeindruckt bin.

Ausserdem konnt ich mir noch ein paar, sagen wir, Inspirationen abgreifen *g*

Sehr gut gemacht!

Von Salacryl am 06.07.2006, 08:57:42 Uhr
ach und Seraph 33.5 FPS :-PPPP

Mit Bloom, Schatten, Gras, etc.

Von Das Ich am 06.07.2006, 13:07:06 Uhr
Gratuliere, echt sehr gut! Würde ich auch in die oberste Kategorie einstufen!

Ich mag besonders den Himmel und das Gras. Auch die implementierung der Geo-Mipmaps ist dir scheinbar sehr gut gelungen.

Was mir nicht gefällt ist der Performanceverlust bei der Grasdarstellung, vielleicht solltest du hier auch nur Billboards nehmen oder Point-Sprites. Und die Wasserdarstellung mit Reflection und Refraction zieht bei mir auch gewaltig an der Performance.

Ansonsten wirklich astrein! Technisch absolut auf der Höhe der Zeit.

Ein Tip hätte ich noch für dich: Die Terrainauflösung ist viel zu hoch, 1/4 davon langt völlig, die "Minihügel", auch auf flachen Grund, sind doch eher störend. Ausserdem würde die Performance steigen.

Von keepcoding am 06.07.2006, 13:34:29 Uhr
danke für eure positiven Antworten!

@Seraph: und da fragen doch tatsächlich noch Leute wie Richard Schubert, wieso man die maximale Auflösung im Konfigurationsdialog auf 1600x1200 festgelegt hat :D

@Das Ich: Der Performanceverlust erklärt sich von selbst, wenn man bedenkt, dass für das Gras etwa 10 Mal soviele Vertices verwendet werden wie für das Terrain selbst ;) Eine Optimierungsmöglichkeit sehe ich vor allem beim herunterregeln der Sichtweite vom Gras.
In einem Game würde ich natürlich das Terrain noch um den Faktor 2 oder gar 4 (wie du vorgeschlagen hast) strecken.

Übrigens noch ein Hinweis für Leute mit einer ATI-Karte: Bei aktiviertem Anti-Aliasing (2 - 4x) sieht das Gras aufgrund von Transparency AA noch eine Stufe besser aus, dafür aber muss auf den Effekt Depth of Field verzichtet werden!

Von Fred Feuerstein am 06.07.2006, 20:14:52 Uhr
Sauber, sauber .. auch grad mal runtergeladen und getestet. Gelacht hab ich bei dem blau-marmorierten Elephanten ;)
Ansonsten: Ziemlich gut gemacht, mehr davon ;)


Von Lui am 06.07.2006, 23:11:32 Uhr
Wow, die Screenshot sehen echt gut aus und die Features gefallen mir auch, habs deswegen dann auch gleich runter geladen.

So, hab nun eine ziemlich lange Zeit getestet. Performancebeschwerden hatte ich keine.
(Laptop mit Centrino 1.76Ghz und x700)

Ein paar Punkte die ich ansprechen möchte:

Schatten wird übers Gras gezeichnet, wird dir aber sicher schon aufgefallen sein, ich schätze du renderst das Gras aber einfach nicht in die Depthtextur. (ist jetzt nicht so schlimm)
Nur so nebenbei, welche Shadowmapping Technik verwendest du?

Das Gras find ich echt gut animiert!, wenn ich da meinst so anseh... ha, werd mir jetzt gleich deine Textur fladern :) (bring das auch selber nicht hin, habs aber auch nicht wirklich probiert, also mit wirklich losziehen, Gras ausreißen fotografieren, einscannen, what ever)
Ich nehm an du animierst die Vertices einfach über sin/cos im VS. (mach ich zumindest so) Was ich immer schon aus ausprobieren oder verbessern wollte ist, dass die Grassbücheln nebeneinander nicht komplett gegeneinander wackeln, sondern zb max 20% abweichen dürfen. Hab das noch nicht probiert, vielliech irgendwann wenn ich Zeit hab :)
Kannst du dir vorstellen was ich mein, dachte, dass dich das auch interessieren könnte.

Zuletzt noch: Schöne Halo und Blend-Effekt wenn man in die Sonne blickt! Aber Moment, da fehlt doch was: Die Sonne. Wo ist die verschwunden, ohne siehts nicht wirklich echts aus?

Die Kritik ist keinesfalls negativ gemeint, ich find es echt schon recht gut was derzeit da läuft. Freu mich schon wenn ich dann mit ner Krnarre rumrennen und Sachen kaputt machen kann ;)

Weiter So! MfG, Lui

Von Gene am 06.07.2006, 23:17:06 Uhr
Sieht echt gut aus(guck ganz neidisch^^)
Leider hab ich auch nicht so viel ahnung, mir ist aber folgendes aufgefallen, wenn man sich die Teekanne anguckt sieht man das sich die anderen Objekte nicht bewegen, das gleiche bei dem KAnninchen, einfach mal so hinstellen das man durch das kanninch den Elefanten anschaut, Man wird sehen das sich der Elefant nicht dreht.

Aber eins das kann ich euch sagen. Ich wünschte ich könnte auch etwas coden, bei dem ich überhaupt durch ein kanninch gucken kann und etwas sehe^^
mfg Gene

Von keepcoding am 07.07.2006, 01:19:48 Uhr
Danke für die Anregungen!

@Lui: Das Prob mit den Schatten war mir in der Tat bekannt... bisher hab ich noch keine (schnelle) Lösung dafür gefunden. Momentan wird die Shadow-Map in Form einer Textur mit Alpha-Blending über die gesamte Szene "gelegt". Das muss ich auf jeden Fall noch verbessern...
Es handelt sich um gewöhnliches Shadow-Mapping (halt directional lighting), nur, dass die Shadow-Map vor der Verwendung noch durch einen Gaussian-Blur-Shader gejagt wird. Eine Shadow-Map für alle Objekte: 2048x2048
Die Idee mit den Grasbüscheln (nicht gegeneinander) find ich gut... werd ich bei Gelegenheit ändern, hmm, da hab ich auch schon eine Idee, wie ich das anstellen werde :)
Jo, die Sonne hab ich weggelassen^^ hab noch keine schöne Textur gefunden.

@Gene: Ja, die Environment-Map in Echtzeit (also praktisch jeden Frame neu zu erstellen) ist sehr langsam... jene mit einem schnellen System können das aber gern ausprobieren: einfach die Taste F4 gedrückt halten, und schon wird die Environment-Map in jedem Frame neu erstellt!

Von Schrompf am 08.07.2006, 00:44:20 Uhr
Hab die Demo früher schonmal durch Zufall entdeckt. Optisch wirklich hübsch und hier bei 1280x1024 mit 50 bis 100 fps auch ziemlich fix. Das der Schatten über dem Gras liegt, ist wirklich hässlich, aber das ist wahrscheinlich nur eine Folgeerscheinung der Schattenmethode. Du renderst den Schatten doch zuerst in eine Offscreen-Textur von niedriger Auflösung, oder? Dort dann noch einen Weichzeichner drüber, weswegen der Schatten auch nicht direkt hinter dem Objekt beginnt, sondern scheinbar erst hinter dem Objekt eingeblendet wird. Spart ne Menge PixelShader-Performance, aber die Nebenwirkungen haben mich bisher immer davon abgehalten, diese Methode einzusetzen.

Wie flexibel und zuverlässig die Engine wirklich ist, bemerkt man leider immer erst, wenn man sie wirklich mal in einem Spiel einsetzen will. Optisch ist die Engine aber auf jeden Fall schon jetzt ein Glanzstück. Glückwunsch und weiter so!

Von Lynxeye am 08.07.2006, 13:17:31 Uhr
Es tut mir leid wenn das jetz so rübergekommen ist als wollte ich sagen das ist Ideenklau, aber der Grün-blaue Himmel ist ja in der Nature Scene genauso drin und das Gras ist auch zum Verwechseln ähnlich.(was aber bei Gras vieleicht oft so ist) Aber das sind halt die Dinge die einem als erstes ins Auge fallen. Wenn man das Terrain betrachtet sieht man den Unterschied zur Nature Demo aber so vom ersten Eindruck her...
Naja ich hoffe du kannst mit der Engine auch mal ein schönes Spiel zaubern! Viel Erfolg noch!

Von Neo.uc am 12.07.2006, 10:43:24 Uhr
Wow Sieht cool aus ^^ Besonders gefallen tun mir die Kugeln, die Oberfläche sind einfach nur geil aus :)

Von Peter Müller am 17.07.2006, 04:35:54 Uhr
*auch-in-aktion-seh-will*

leider mag meine geforce 2mx die demo nicht, kannst du vielleicht ein vid wo hochladen?

Von keepcoding am 17.07.2006, 10:19:21 Uhr
@Peter Müller: Auf meiner Homepage gibt es zwei videos zur Demo:
http://www.keepcoding-development.ch.vu

Von greenhybrid am 21.07.2006, 00:47:09 Uhr
*wow* Echt klasse Bilder. Was ich aber immer besonders geil finde das ist extreme Weitsicht.

Die Shader machen das aber wieder wett. Bitte implementiere Bäume, gute Baum-Models sind in Terrain-Engines leider selten (also nicht im Engine-Code selbst natürlich).

Für Kollisionsabfragen kann ich Kd-Bäume sehr empfehlen, für die Bäume dann lokale Kd's.

In Hinblick auf DX10 schonmal Instancing in Betracht ziehen (Doku bereits teilweise im DXSDK9 enthalten).

Von Jonathan am 10.08.2006, 19:57:14 Uhr
Ich hab die auch mal angeschaut, sieht ziemlich gut aus und die Features hören sich auch gut an.
Nur leider hats bei mir arg geruckelt, ich hattte bei 1024x768x32 2,5frames...
Auf der niedrigsten Auflösung hatte ich dann 17 Frames was immerhin genug war um rumzulaufen.
Ich hab ne GeForce FX 5600 512 MB ram und 2,4 Ghz HT von Intel.
Naja, Half Life 2 läuft bei mir auf 800x600 gut spielbar und da sind erstens größere Landschaften, zweitens viel mehr Objekte und drittes noch Haufenweise andere Berechnungen wie Physik und KI drinne.
Ich weiß ich hab net den besten Computer aber man könnte da bestimtm noch das ein oder anderer optimieren.
Die schon angesprochene Fernsicht ist vielleicht einerseits cool, aber andere Spiele haben eben genau deshalb die Sichweite beschränkt weils sonst ruckeln würde. Natürlich sollte man sowas auf sehr schnellen Rechnrn ausschalten können, aber sowas und noch andere Leistungseinstellungen wären doch schon sehr schön.
Wie gesagt bis auf die Geschwindigkeit ist alles sehr schön, aber ich zumindest konnte es genau deshlab nicht so ganz genießen.

Von keepcoding am 10.08.2006, 20:45:54 Uhr
Das sollte nicht sein, 10 Frames solltest du schon hinkriegen... ich hab mit meinem PC (AMD 2600+, 9500Pro 128 MB) mit 1280 x 1024 und vollen Details zwischen 10 und 15 Frames... Hast du mal in die Log-Datei geguckt? Evtl. ist da drin ein Hinweis. Schreib mir doch bitte eine E-Mail...
greez

Von NeoInferno am 29.08.2006, 14:19:06 Uhr
Wirklich sehr beeindruckend. Du bist mit deinen Skills wahrscheinlich dort, wo viele hinwollen :)

Von SamMumm am 08.09.2006, 13:06:51 Uhr
Besonders cool finde ich den Effekt, der sich ergibt, wenn man depth-of-field und distortion gleichzeitig anschaltet:

http://jostone.jo.funpic.de/Bilder/zfx/distortion_and_depth_of_field.jpg

Falls das nur bei mir der Fall sein sollte, ich verwende eine ATI X1900GT.

Ansonsten echt coole Engine.

gruß jostone

Von keepcoding am 09.09.2006, 01:00:40 Uhr
thx für den Hinweis: das ist tatsächlich ein Fehler im Shader..
es wird aus dem falschen Depth-Buffer gesampelt:
Code:
float4 PSDoFDist(float2 Tex : TEXCOORD0) : COLOR0
{
    float2 Perturb1 = 2 * (tex2D(DistortionSampler, Tex) - 0.5);
    float2 Perturb2 = 2 * (tex2D(DistortionSampler, Tex + g_fDistSpeed * g_fTime) - 0.5);

    // Durchschnitt berechnen
    float  Depth  = tex2D(SpecialsSampler, Tex).r;
    float2 Offset = lerp(Perturb1, Perturb2, Depth);

    // die neuen Texturkoordinaten
    float2 NewCoords = Tex + Offset * g_fDistScale;

    Depth = tex2D(SpecialsSampler, NewCoords).r;

    float3 Color  = lerp(tex2D(SceneSampler, NewCoords), tex2D(DownSceneSampler, NewCoords), Depth);

    return float4(Color, g_fMotionBlur);
}


Das sollte so sein:

Code:
float  Depth  = tex2D(SceneSampler, Tex).a;
...
Depth = tex2D(SceneSampler, NewCoords).a;

Von J!0X am 07.10.2006, 14:00:37 Uhr
Genial,
wirklich atemberaubend.
Ich bin Anfänger und deshalb so erstaunt.
Weiter so!

Von postprocessor am 11.03.2007, 12:11:28 Uhr
Gratuliere! Die Graphik ist genial, ich denke, diese engine könnte man bereits als Basis für ein Spiel nehmen. 2 Anregungen hätte ich noch:

1. Unterstützung für mehrere postprocessing-Effekte gleichzeitig. Entweder in einem pass(ps 3.0, zusammenstellen des Shaders mithilfe des HLSL-Präprozessors) oder in mehreren durchgängen wie im postprocess-sample des DX-SDK

2. Ist postprocessing aktiv, verschiebt sich das ganze Bild etwas. Falls es das ist was ich meine, könnte der Artikel "Directly mapping pixels to texels" in der doku was helfen.

postprocessor

Von Herror am 01.04.2007, 20:49:58 Uhr
Alter sieh das hammer aus... sag mal, wie lange hast du so an dem Projekt gesessen?

Von keepcoding am 09.05.2007, 08:48:58 Uhr
Ich kann nicht genau sagen, wie lange ich für die Entwicklung der Engine gebraucht habe.. schätzungsweise so gegen die 1000 Stunden, nicht eingerechnet ist natürlich die Zeit, die ich gebraucht habe, um mir die Grundkenntnisse über C++ und DirectX anzueignen ;)

mfg
keepcoding