Seite 1 von 1
raytracer in Python
Verfasst: Montag 31. Oktober 2011, 13:51
von jens
Re: raytracer in Python
Verfasst: Donnerstag 24. November 2011, 11:55
von jens
Auf der Suche nach einem Ray Tracer implementation, welches das multiprocessing nutzt habe ich noch ein paar Interessante Seiten über Python/Raytracing gefunden:
PyGmy
An extremely slow raytracer:
http://www.pawfal.org/index.php?page=PyGmy
MiniLight
Ein minimal global illumination renderer:
http://www.hxa.name/minilight/
MiniLight ist eigentlich in C++ geschrieben, wurde aber in verschiedenen Sprachen portiert, u.a. in Python. Sourcen habe ich im Python-to-C++ compiler "Shed Skin" gefunden:
https://gitorious.org/shedskin/mainline ... xamples/ml
Es gibt bei MiniLight auch Vergleiche:
Code: Alles auswählen
Code Zeilen (gesammt / relativ zu C++)
Python 2.5.1 490 lines / 0.52
Python ShedSkin 0.1.1 496 lines / 0.52
Geschwindigkeit (in bezug zur C++ implementierung):
Python 2.5.1 1 / 180
Python ShedSkin 0.1.1 1 / 1.8
Lustig ist auch die Implementierung in Flash, welches direkt live im Browser rechnet:
http://www.hxa.name/minilight/minilight-flex.html
Pygame
Was anderes: Ray-Tracer mit Pygame:
http://pygame.org/project-Ray+Tracer-794-.html Kann anscheinend auch
.obj Dateien lesen und ist auch recht übersichtlich...
Re: raytracer in Python
Verfasst: Donnerstag 24. November 2011, 14:55
von jens
Ich fand die Idee so toll, da hab ich den Sourcecode mal abgeändert, das man das Rendering live in einem Tkinter Fenster sehen kann:
https://github.com/jedie/python-code-sn ... aytrace.py
Re: raytracer in Python
Verfasst: Donnerstag 24. November 2011, 20:05
von jens
So, nachdem ich nun
auch TKinter mit PyPy verwenden kann, kann ich mal vergleichen:
PyPy schaft das 640x480 in 13.4Sec
CPython 54.4sec!
Re: raytracer in Python
Verfasst: Donnerstag 24. November 2011, 22:32
von Dav1d
WOW! Damit habe ich definitiv nicht gerechnet, ich habe pypy immer als Spielerei angesehen …
CPython: "Rendered in 23.3sec"
Pypy: "Rendered in 5.2sec"
Re: raytracer in Python
Verfasst: Freitag 25. November 2011, 14:15
von jens
Gerade beim raytracer merkt man wie der JIT nach und nach die Sache schneller macht. Wobei es auch wegen dem Szenen-Aufbau am Ende schneller ist...
Ich frage mich allerdings ob PyPy nicht die JIT Optimierungsdaten speichern könnte, um diese beim nächsten Lauf wieder verwenden zu können. Sowas ähnliches wie .pyc...
Re: raytracer in Python
Verfasst: Freitag 25. November 2011, 14:28
von Hyperion
jens hat geschrieben:
Ich frage mich allerdings ob PyPy nicht die JIT Optimierungsdaten speichern könnte, um diese beim nächsten Lauf wieder verwenden zu können. Sowas ähnliches wie .pyc...
Damit verlierst Du dann aber die Plattformunabhängigkeit bzw. müsstest ja vor einem Lauf wissen, ob das System noch dasselbe ist
Edit: Nicht genug nachgedacht

Man könnte ja mittels Metainformationen das System hinterlegen - zur Laufzeit muss PyPy das intern ja selber ermitteln und bräuchte dann nur noch abgleichen.
Re: raytracer in Python
Verfasst: Freitag 25. November 2011, 19:34
von Leonidas
Außerdem ist die Idee bei JIT ja, dass Just-in-Time optimiert wird, das heißt der auch tatsächlich das optimiert wird, was ein Hotspot ist. Das kann bei mehreren Durchläufen verschiedener Code sein. Jens, was du dir vermutlich wünscht ist sowas wie Profile Guided Optimization (PGO), wie das etwa GCC bietet.
Zudem vermute ich mal das der generierte Code eher enorm ist, wenn man bedenkt dass quasi alle JIT-Compiler relativ viel Speicher benötigen.
Re: raytracer in Python
Verfasst: Freitag 25. November 2011, 22:23
von DasIch