Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Granatapfel

Treue Seele

  • »Granatapfel« ist der Autor dieses Themas

Beiträge: 184

Wohnort: Chemnitz

Beruf: Schule

  • Private Nachricht senden

1

06.09.2010, 19:01

Raytracing...Wie Anfangen?

Hy
Erstmal will ich klar stellen, dass ich keine Belehrungen haben möchte, wie zum Beispiel: "Das schaffst du noch nicht!" oder "Mach erstmal was anderes!!!!1"

Ok...also, wie schon vielen aufgefallen, mach ich jetzt eine kleine Anwendung mit WPF und C#. Diese "kleine Anwendung" soll mit den Jahren zu einer, wer hätte es gedacht, "großen Anwendung" werden.
Also einer Engine. Aber nun...Ich möchte meine Engine nicht auf handelsüblichen Rasterern beruhen lassen, sondern schon ein wenig "Zukunftsorientiert" rangehen.
Natürlich bin ich mir im klaren, dass ich mir erstmal ein Haufen "Raytracer" Literatur reinziehen muss, aber das ist ja jetzt nicht mein Problem.
Mein Problem ist: Kann ich denn auch anfangen die ganz "üblichen" Vektoren Header zu implementieren? Oder hat Raytracing "nichts" mit Polygonen und ähnlichen zutun?
Sorry, aber Wikipedia hat mich in diesem Thema nicht sehr schlau gemacht. :S

Nebenbei...Was kann man in WPF für ein Control nehmen um in einem Tab ein Render Fenster (DX) darzustellen?
Ich hab gestern deine Eltern gesehen.
Warn' 2 nette Kerle.

________________________________

http://www.youtube.com/user/MsKENNYster

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

06.09.2010, 19:18

Wenn du Echtzeitraytracing auf der CPU machen willst dann würd ich C# vergessen. Da brauchst du maximale Performance. Für mehr als sehr sehr einfaches Raytracing kann ich mir nicht vorstellen dass C# das in Echtzeit hinbekommt. Natürlich gibts auch die Möglichkeit moderne GPUs für Raytracing zu nutzen (z.B. über CUDA). In dem Fall spielt die Wahl der Sprache wohl keine ganz so große Rolle mehr. Allerdings seh ich generell keinen Grund hier C# zu verwenden da du wohl keinen Gebrauch des .NET Framework machen wirst!?

Anyway, schreib mal einen kleinen (nicht Echtzeit) Raytracer, das kannst du auch mit C# machen. Im Prinzip ist sowas ganz einfach. Nimm deine übliche Vektoren Klasse und was auch immer, implementier einen Strahl/Kugel Schnittpunkt Test und render dein erstes Bild. Damit hast du dann schonmal einen venünftigen Start. Raytracing kann man natürlich für polygonbasierte Modelle betreiben, was auch oft gemacht wird, alles was man braucht ist eine Strahl/Polygon Schnittpunktsberechnung...

Eines noch:
Egal wie toll und interessant Raytracing auch sein mag, du solltest nicht blind dem, seit einiger Zeit ja endlich wieder abflauenden, Raytracing Hype nachlaufen. Raytracing ist lediglich eine Art Bilder zu generieren und nicht die Art. Es hat seine Vor- und Nachteile wie alles andere auch und ist keineswegs der heilige Gral der Computergrafik als der es immer wieder gerne dargestellt wird. Raytracing spielt sicher eine zunehmend wichtige Rolle in der Echtzeitgrafik aber ich denke nicht dass es Rasterisierung als primäres Renderingverfahren verdrängen wird. Zumindest sehe ich im Moment keinen wirklichen Grund dafür. In 5 Jahren mag alles natürlich schon wieder ganz anders aussehen. Eine professionelle "zukunftsorientierte" 3D Engine würde heutzutage jedenfalls auf D3D11 setzen und nicht auf Software Raytracing ;)

Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von »dot« (06.09.2010, 19:30)


Granatapfel

Treue Seele

  • »Granatapfel« ist der Autor dieses Themas

Beiträge: 184

Wohnort: Chemnitz

Beruf: Schule

  • Private Nachricht senden

3

06.09.2010, 19:29

:huh:
Eine Person (oder sogar mehrere) hat mir in nem anderen Thread zu C# geraten, weil es sehr gute Performance haben soll.
Aber, naja :wacko:
Also, kann ich erstmal alles implementieren, was ich sonst auch machen würde....also Vektorberechnung....Matrizen....etc.
Die Engine will ich ja jetzt noch ne benutzen, erst wenn sie ausgereift ist (Pi*Daumen=8Jahre)
Und dann wird es auch dementsprechende GPU`s geben.
Und für jetzt....Ich hol mir demnächst ein Tower mit 2* GTX480....oder was es denn dann geben wird, in nem halben Jahr. Ich glaube jedenfalls dass das reicht... ^^
Ich hab gestern deine Eltern gesehen.
Warn' 2 nette Kerle.

________________________________

http://www.youtube.com/user/MsKENNYster

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

06.09.2010, 19:44

Eine Person (oder sogar mehrere) hat mir in nem anderen Thread zu C# geraten, weil es sehr gute Performance haben soll.

Nun C# liefert durchaus gute Performance, die Frage ist jedoch: Im Vergleich zu was? Für normale Anwendungsentwicklung ist C# sicherlich ideal und effizient genug. Aber Echtzeit Raytracing ist alles andere als normale Anwendungsentwicklung. Um brauchbares Echtzeitraytracing hinzubekommen brauchst du maximale Kontrolle auf hardwarenaher Ebene. Etwas was C# dir kaum bieten kann. Da geht es dann um so Dinge wie Strukturen so ausrichten dass der CPU Cache möglichst effizient genutzt wird, Gebrauch von erweiterten Befehlssätzen (SSE) machen und dabei ständig den Maschinencode den der Compiler ausspruckt im Auge behalten um das ganze nur irgendwie knapp hinter die Echtzeitschallmauer zu schleifen.
Außerdem sieht es mir danach aus dass du wohl dem Trugschluss erlegen bist dass eine tolle Grafikkarte irgendwie deinen C# Code schneller macht. Das ist natürlich nicht der Fall. Wenn du eine GTX 480 für Raytracing gebrauchen willst (was natürlich durchaus möglich ist, siehe NVIDIA Optix) dann wirst du dazu mit Hilfe entsprechender Libraries (CUDA, Stream SDK, OpenCL, DirectCompute) selbst die GPU dazu Programmieren müssen. Mit C# fütterst du dann nurmehr die Grafikkarte. Die GPU selbst programmierst du in entsprechend anderen Sprachen.

Granatapfel

Treue Seele

  • »Granatapfel« ist der Autor dieses Themas

Beiträge: 184

Wohnort: Chemnitz

Beruf: Schule

  • Private Nachricht senden

5

06.09.2010, 19:55

Also nun sind wir wieder beim altbekannten Problem (Danke^^)
C# für die WPF-Anwendung und C++ für die Header, und sonstiges Programmieren.
Also könnte ich alles mit C# machen, was mit der Oberfläche zutun hat, und das "Fenster" im TabControl (welches mir immer noch keiner verraten hat) mit C++ füttern.
Oder wie soll ich es nun machen?
Bitte kommt mir jetzt nicht mit...."WPF...ne, nur C++ mit Qt"
BITTE NICHT!
Dann darf auch meine Engine langsam sein...naja, darf sie nicht, aber ich habe schon das "fast" KOMPLETTE Interface gemacht....und meinem Dad gefällt es....Das passiert nicht alle Tage, denn mein Dad ist ziemlich penibel wenn es um Aussehen und Funktionalität in einem geht.! :D
Ich hab gestern deine Eltern gesehen.
Warn' 2 nette Kerle.

________________________________

http://www.youtube.com/user/MsKENNYster

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

06.09.2010, 20:02

Hältst du es wirklich für praktikabel eine "Engine" zu schreiben die ein Verfahren implementieren soll von dem du noch absolut keine Ahnung hast? Schreib doch einen einfachen Raytracer. Und dann schreib einen komplizierteren Raytracer. Mach das in C#. Dann schreib einen noch komplizierteren Raytracer. Und dann schreib ein einfaches Spiel. Und dann schreib ein komplizierteres Spiel. Dann hast du mal ein wenig Ahnung um überhaupt mal zu verstehen was so eine "Engine" tun muss. Und erst dann würd ich frühestens damit anfangen mir Gedanken zu machen über was auch immer du dir gerade Gedanken machst. Jemand der Raumfahrtingenieur werden will fängt auch nicht damit an einfach mal draußen im Garten ein Spaceshuttle zu bauen...

Granatapfel

Treue Seele

  • »Granatapfel« ist der Autor dieses Themas

Beiträge: 184

Wohnort: Chemnitz

Beruf: Schule

  • Private Nachricht senden

7

06.09.2010, 20:03

So viele im Thread drin, aber keiner traut sich zu schreiben.
Ich hab gestern deine Eltern gesehen.
Warn' 2 nette Kerle.

________________________________

http://www.youtube.com/user/MsKENNYster

Granatapfel

Treue Seele

  • »Granatapfel« ist der Autor dieses Themas

Beiträge: 184

Wohnort: Chemnitz

Beruf: Schule

  • Private Nachricht senden

8

06.09.2010, 20:07

mhh....also morgen leih ich mir erstmal ein Buch über Raytracer aus und werde mich mal mit einem Raytracer beschäftigen.
Aber, was ich noch mit der "Engine" mache ist....ich werde Header implementieren....das mach mir irgendwie Fun!
Und würde das jetzt klappen? C++ für Rendern, Header etc. und C# für die Oberfläche?
Ich hab gestern deine Eltern gesehen.
Warn' 2 nette Kerle.

________________________________

http://www.youtube.com/user/MsKENNYster

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

06.09.2010, 20:09

Und würde das jetzt klappen? C++ für Rendern, Header etc. und C# für die Oberfläche?

Ja das würde es vermutlich.

Hier ist vielleicht ein guter Punkt um anzufangen:
http://www.devmaster.net/articles/raytra…eries/part1.php

Granatapfel

Treue Seele

  • »Granatapfel« ist der Autor dieses Themas

Beiträge: 184

Wohnort: Chemnitz

Beruf: Schule

  • Private Nachricht senden

10

06.09.2010, 20:17

lese ich mir gerade durch.
Danke nochmal, so ein guten Thread mit wirklich passenden Antworten, habe ich selten erlebt. :thumbsup:
Und wenn noch jemandem einfällt, was man für ein Control benutzen könnte, um das alles darzustellen....SCHREIBT!
Ich hab gestern deine Eltern gesehen.
Warn' 2 nette Kerle.

________________________________

http://www.youtube.com/user/MsKENNYster

Werbeanzeige