Archiv verlassen und diese Seite im Standarddesign anzeigen : OpenGL/DirectX Diskussion (zu Studienzwecken)
Monger
2004-01-25, 14:16:12
Hallo allerseits,
in etwa drei Monaten soll ich für mein Studium einen kleinen Vortrag über Grafikschnittstellen, mit Schwerpunkt auf DirectX (oder besser: Direct3D) machen.
Da weder meine Zuhörer noch ich selbst jetzt viel davon haben würden, wenn man mit Spezifikationen, Marketinggeblubber und irgendwelchen Shader-Hochsprachen rumjongliert, habe ich mir gedacht, dass ich lieber ein bißchen über die Geschichte der beiden großen Schnittstellen schreibe.
Und dazu würde ich ganz gerne eure persönliche Meinung und Erfahrung hören.
Erste Frage zum warmlaufen: Was für Anwendungsgebiete gibt es für Grafikschnittstellen, und wo funktioniert es nicht? Meines Wissens hat man ja z.B. in der Filmbranche bisher darauf verzichtet, mit Unterstützung der Grafikkarte zu rendern, aber warum?
LOCHFRASS
2004-01-25, 14:26:55
Original geschrieben von Monger
Erste Frage zum warmlaufen: Was für Anwendungsgebiete gibt es für Grafikschnittstellen, und wo funktioniert es nicht? Meines Wissens hat man ja z.B. in der Filmbranche bisher darauf verzichtet, mit Unterstützung der Grafikkarte zu rendern, aber warum?
Dafür sind die Grafikkarten zu ungenau, sowas wird per Raytracing (http://80.237.203.42/vbulletin/showthread.php?s=&postid=1376260#post1376260) gemacht.
Monger
2004-01-25, 14:34:25
Original geschrieben von LOCHFRASS
Dafür sind die Grafikkarten zu ungenau, sowas wird per Raytracing (http://80.237.203.42/vbulletin/showthread.php?s=&postid=1376260#post1376260) gemacht.
Ich hab auch mal was läuten hören, dass bei Filmen - anders als bei den meisten Spielen - nicht das typische Polygonmodell verwendet wird, sondern irgendwas komplexeres... ist das so richtig?
Aber vielleicht formuliere ich meine Frage etwas um: Was außer Computerspielen verwendet OpenGL oder DirectX?
Ich kann mir kaum vorstellen, dass OpenGL ursprünglich als industrieller Standard eingeführt wurde, um Computerspiele zu produzieren.
Matti
2004-01-25, 14:40:33
DirectX - OpenGL
(+) API für Grafik Sound, Input usw - reine Grafik-API
nur auf Windows verfügbar - für (fast) alle Betriebssysteme (+)
(+) von Microsoft standardisiert - zusätzliche Funktionalität über (meist Hersteller-spezifische) Extensions
extrem schwierig zu programmieren - wesentlich einfacher zu programmieren, weil logischer aufgebaut (+)
OpenGL wurde afaik in erster Linie für CAD-Anwendungen entwickelt.
Original geschrieben von Monger
Erste Frage zum warmlaufen: Was für Anwendungsgebiete gibt es für Grafikschnittstellen, und wo funktioniert es nicht? Meines Wissens hat man ja z.B. in der Filmbranche bisher darauf verzichtet, mit Unterstützung der Grafikkarte zu rendern, aber warum?
Mal schauen:
- Games: muss gut aussehen
- Technische Konstruktionen: riesigen Polyongzahlen
- Architektur: grosse Polygonzahlen + einigermassen realistisches Aussehen
- Designstudien: riesige Polygonzahlen + realistisches Aussehen
- Filme: muss in Bewegung fotorealistisch aussehen
Es gibt für alle Anwendungsgebiete Schnittstellen. DirectX wird vorallem beim obersten Punkt eingesetzt. OpenGL geht noch etwas weiter und spätestens bei Designstudien ist Raytracing angesagt. Aber auch da gibts dutzende Schnittstellen.
Da du einen Vortrag machen musst über das Thema, solltest du wohl auch auf die Spezifikationen und Shader-Hochsprachen eingehen. Vorallem auf die Unterschiede zwischen den Beiden . Dazu ein paar Sachen zur Geschichte und was in Zukunft sein wird. Ein paar Demos und deine Zeit ist wohl schon zum grössten Teil rum ;)
Edit: da findest du schonmal was zu OpenGL
http://www.cs.newcastle.edu.au/~comp3320/history/opengl/
Demirug
2004-01-25, 14:49:32
Original geschrieben von LOCHFRASS
Dafür sind die Grafikkarten zu ungenau, sowas wird per Raytracing (http://80.237.203.42/vbulletin/showthread.php?s=&postid=1376260#post1376260) gemacht.
Da wird auch schon gerendert wobei man für Filme da derzeit noch eher mit Softwarerenderer arbeitet.
Demirug
2004-01-25, 14:50:20
Original geschrieben von Matti
extrem schwierig zu programmieren - wesentlich einfacher zu programmieren, weil logischer aufgebaut (+)
Ansichtssache ;)
zeckensack
2004-01-25, 15:01:50
Original geschrieben von Matti
DirectX - OpenGL
(+) von Microsoft standardisiert - zusätzliche Funktionalität über (meist Hersteller-spezifische) ExtensionsAnsichtssache ;)
OpenGL wurde afaik in erster Linie für CAD-Anwendungen entwickelt.Nein. OpenGL wurde nicht für irgendein spezifisches Anwendungsgebiet entwickelt, sondern für Polygongrafik.
Jegliches "für blablub" ist Gewäsch, respektive in diesem Fall ein primär von Microsoft verbreiteter Marketingmythos aus den API-Kreuzzügen zu DX5-Zeiten. DX5 kann man womöglich unterstellen, es sei nur für Spiele zu gebrauchen gewesen, aber es ist von der Architektur her (!=tatsächliche Implementierung) sicher auch für andere Anwendungsgebiete nutzbar - eben wie OpenGL auch. Der Schnittstelle ist es ziemlich egal, ob das Ausgabefenster nun "Quake" oder "Lightwave" heisst.
marco42
2004-01-25, 15:15:18
Original geschrieben von Monger
Hallo allerseits,
Erste Frage zum warmlaufen: Was für Anwendungsgebiete gibt es für Grafikschnittstellen, und wo funktioniert es nicht? Meines Wissens hat man ja z.B. in der Filmbranche bisher darauf verzichtet, mit Unterstützung der Grafikkarte zu rendern, aber warum?
Weil du meisten mit globalen Rendermodellen arbeitest. Raytracing ist ein globales. OpenGL und D3D sind lokale Beleuchtungsmodelle. Obwohl der meistverwendete Renderer Renderman nicht mal ein Raytracer ist, sondern nur ein Raycaster. Die OpenGL Shading Language und HLSL von D3D stammen uebrigen mehr oder weniger direct von der Renderman Shading Language ab. Es arbeitet intern auch mit Gouraud Shading, genau wie OpenGL, allerdings zerlegt er die Dreiecke in viele kleine Dreiecke.
Als input kannst du ihm aber auch Kurven Oberflaechen(NURBS), Subdivision Surfaces etc geben.
Der Hauptnachteil der Graphickarten liegt einfach noch in der Ungenauigkeit. Da findest du immer wieder Rundungfehler. Es gibt aber auch Hardware Renderer, Maya besitzt so einen.
Du kannst den Leuten also ruhig erklaeren, was eine Shading Language ist oder noch besser locale Beleutungsmodelle. Phong bietet sich da. Den Unterschied zwischen procedualen und Bildtexturen. Um erste zu beschreiben, benutzt du uebrigen eine Shading Langage oder einen Shader Tree. Das sind also alles keine wirklcih neuen Dinge, die jetzt beim Real Time Rendering passieren. Raytracing wuerde ich lieber nicht machen. Obwohl es sehr einfach ist, wird es oft falsche verstanden. Viele glauben zB das Raytracing die Wirklichkeit abbildet(was eindeutig nicht der Fall ist).
http://www.3dconcept.ch/artikel/pixelshader/2.htm
http://www.google.de/search?hl=de&ie=UTF-8&q=phong+beleuchtungsmodell&spell=1
Renderman ist ein Rasterizer, kein Raycaster!
Es arbeitet intern auch mit Gouraud Shading, genau wie OpenGL, allerdings zerlegt er die Dreiecke in viele kleine Dreiecke.
Was es? Und nein.
Original geschrieben von zeckensack
Nein. OpenGL wurde nicht für irgendein spezifisches Anwendungsgebiet entwickelt, sondern für Polygongrafik.
Wurde OpenGL nicht als Konkurenz zu PEX entwickelt?
Auf jeden Fall wars wohl Ziel von SGI eine eigene API durchzusetzen, was ihnen als Marktführer damals auch gelang. Hoffen wir das Microsoft keine solchen Erfolg hat seine API durchzudrücken... Konkurenz belebt immer das Geschäft :)
Ausserdem würde ich imo das ganze auf polygonbasierte Rasterizer-Grafik einschränken :)
Jegliches "für blablub" ist Gewäsch, respektive in diesem Fall ein primär von Microsoft verbreiteter Marketingmythos aus den API-Kreuzzügen zu DX5-Zeiten. DX5 kann man womöglich unterstellen, es sei nur für Spiele zu gebrauchen gewesen, aber es ist von der Architektur her (!=tatsächliche Implementierung) sicher auch für andere Anwendungsgebiete nutzbar - eben wie OpenGL auch. Der Schnittstelle ist es ziemlich egal, ob das Ausgabefenster nun "Quake" oder "Lightwave" heisst.
Man muss OpenGL imo in der Praxis immer noch einen Vorsprung im CAD-Bereich zusprechen. Oder sind die DX Treiber der entsprechenden Karten (Quadra, FireGL,usw) inzwischen auch darauf so optimiert?
Ausserdem denk ich mal, dass die Entwickler solcher Programme sehr oft von der Plattformunabhängigkeit von OpenGL profitieren wollen und zudem Gewohnheitstiere sind ;)
Original geschrieben von Coda
Renderman ist ein Rasterizer, kein Raycaster!
Hmpf
Interessant ist wohl das das Renderman Interface.
Und das ist nicht auf eine Technik festgelegt
Zitat:
"The RenderMan Interface is designed so that the information needed to specify a photorealistic image can be passed to different rendering programs compactly and efficiently. The interface itself is designed to drive different hardware devices, software implementations and rendering algorithms. Many types of rendering systems are accommodated by this interface, including z-buffer-based, scanline-based, ray tracing, terrain rendering, molecule or sphere rendering and the Reyes rendering architecture."
Monger
2004-01-25, 17:15:40
Original geschrieben von RLZ
...
Da du einen Vortrag machen musst über das Thema, solltest du wohl auch auf die Spezifikationen und Shader-Hochsprachen eingehen. Vorallem auf die Unterschiede zwischen den Beiden . Dazu ein paar Sachen zur Geschichte und was in Zukunft sein wird. Ein paar Demos und deine Zeit ist wohl schon zum grössten Teil rum ;)
...
Danke auch an alle für die rege Beteiligung ... war inklusive den Links eine Menge Lesestoff für einen Sonntag Nachmittag! ;)
Ich greife nur beispielhaft diesen Post auf:
Man muss sich vorstellen: Mein Publikum besteht aus Leuten, die (genauso wie ich) erst zwei Semester objektorientierte Programmierung hatten. Wir haben gerade mal ganz grob angeschnitten, wie man per Java die kommunikation zwischen ein paar Buttons und Windows herstellen kann - von 2D Grafik oder 3D - geschweige denn Shaderprogrammierung - sind wir noch meilenweit entfernt, und werden vermutlich bis Ende des Studiums da auch nicht hinkommen.
Deshalb will ich meinen Kommilitonen einen groben Überblick geben, mehr nicht. Das heißt nicht, dass ich nicht selber auch noch was dazulernen will, und etwas genauer nachhake.
Ich werde ganz zum Schluss auf Shader eingehen, weil sie nunmal wohl wirklich einen bedeutenden Sprung vorwärts bedeuten. Aber bis auch nur einer von uns mal in die Versuchung kommt mit HLSL oder Cg zu schreiben, ist sowieso nichts mehr wie es heute ist.
Zeckensack hat hier gesagt, dass OpenGL für Polygongrafik entworfen wurde. Was für Möglichkeiten jenseits von Polygongrafik gibt es denn noch?
Mir fällt spontan nur die Voxelgrafik aus der Comanche-Reihe ein.
Matti
2004-01-25, 17:30:19
Polygon-Grafik hat meist das beste Qualitäts-Aufwands-Verhältnis, deshalb wird Voxel-Grafik kaum verwendet. Höchstens bei Wolken, Rauch, Feuer u.ä. könnte Voxel-Grafik sinnvoll sein.
Original geschrieben von Monger
Man muss sich vorstellen: Mein Publikum besteht aus Leuten, die (genauso wie ich) erst zwei Semester objektorientierte Programmierung hatten. Wir haben gerade mal ganz grob angeschnitten, wie man per Java die kommunikation zwischen ein paar Buttons und Windows herstellen kann - von 2D Grafik oder 3D - geschweige denn Shaderprogrammierung - sind wir noch meilenweit entfernt, und werden vermutlich bis Ende des Studiums da auch nicht hinkommen.
Darf man fragen welche Uni das ist? :)
Hört sich ja recht locker an.
Deshalb will ich meinen Kommilitonen einen groben Überblick geben, mehr nicht. Das heißt nicht, dass ich nicht selber auch noch was dazulernen will, und etwas genauer nachhake.
Ich werde ganz zum Schluss auf Shader eingehen, weil sie nunmal wohl wirklich einen bedeutenden Sprung vorwärts bedeuten. Aber bis auch nur einer von uns mal in die Versuchung kommt mit HLSL oder Cg zu schreiben, ist sowieso nichts mehr wie es heute ist.
Sag das nicht zu früh ;)
Zeckensack hat hier gesagt, dass OpenGL für Polygongrafik entworfen wurde. Was für Möglichkeiten jenseits von Polygongrafik gibt es denn noch?
Mir fällt spontan nur die Voxelgrafik aus der Comanche-Reihe ein.
Alles was sich mathematisch darstellen lässt. Steht übrigens auch schon im Thread über Raytracing ;)
e.g. Splines, geometrische Grundobjekte (Kugel, Würfel, Kegel, Torus,...), Subdivision Surfaces, volumetrische Daten (nicht unbedingt Voxels),...
Nur die momentane Mainstreamhardware ist auf Dreiecke begrenzt. Das ist allerdings nicht unbedingt ein Nachteil, da man trotzdem sehr flexibel bleibt.
zeckensack
2004-01-25, 18:23:22
Jo. Btw, die Ergänzung von wegen "Rasterizer" ist auch wichtig.
Das ganze eignet sich hervorragend für Hardware-Beschleunigung, weil die Daten recht beschaulich und einfach verwaltbar sind.
Wenn ein traditioneller IMR ein Dreieck fertig gerastert hat, liegt's eben im Framebuffer, aber der Chip selbst kann das Dreieck dann komplett vergessen und sich ignorant dem nächsten widmen. Die Polygone werden dem Chip quasi einzeln seriell angefüttert.
Raytracing dagegen erfordert immer eine mehr oder weniger komplette Szenenbeschreibung, die immer wieder kreuz und quer durchsucht werden muss, um Schnittpunkte (Lichtstrahl auf Fläche) zu finden.
Rasterizer fressen daher primär nur Bandbreite, aber selbst wenn sie subjektiv "zu wenig" davon haben, werden sie nur langsamer. Trotzdem funktionieren sie unter beliebigen Lastbedingungen*.
Raytracer verbrauchen Speicherplatz, und können uU nicht mehr korrekt arbeiten, wenn dieser nicht ausreicht, um die Szenengeometrie komplett zu speichern.
*das ist auch nur halbwahr, weil zB die mögliche Texturgrösse immer nach oben hin begrenzt ist. Jedenfalls ist es IMO wahr genug, um es als Wahrheit zu verkaufen.
Original geschrieben von zeckensack
Raytracing dagegen erfordert immer eine mehr oder weniger komplette Szenenbeschreibung, die immer wieder kreuz und quer durchsucht werden muss, um Schnittpunkte (Lichtstrahl auf Fläche) zu finden.
....
Raytracer verbrauchen Speicherplatz, und können uU nicht mehr korrekt arbeiten, wenn dieser nicht ausreicht, um die Szenengeometrie komplett zu speichern.
Das mag ja vielleicht auf z.B. PovRay zutreffen. Aber das kann man eigentlich mit einem vernünftigen Aufbau der Beschleunigerstrukturen auch teilweise umgehen ;)
Monger
2004-01-25, 19:23:05
Original geschrieben von RLZ
Darf man fragen welche Uni das ist? :)
Hört sich ja recht locker an.
Keine Uni, sondern Berufsakademie Karlsruhe. Fachrichtung: Informationstechnik, drittes Semester. Ich weiß, dass die Informatik-Studenten im 10. Semester darüber nur die Nase rümpfen können ;) , aber unser Schwerpunkt liegt eben weniger im puren Kampf gegen den konfusen Algorithmus, sondern eher in einem breiten, praxisnahen Basiswissen in Sachen Computertechnik.
Und so wie ich das sehe, gehört 3D-Grafik und dessen praktische Umsetzung nicht gerade zu den Alltagsanwendungen deutscher Firmen! ;)
Dass ich mich freiwillig zu einem Vortrag über Grafikschnittstellen verpflichtet habe, liegt einfach daran, dass mich das Thema selbst interessiert. Ich muss doch bewerten können, welches Computerspiel Zukunft hat und welches nicht! :)
marco42
2004-01-25, 19:31:20
Original geschrieben von Coda
Renderman ist ein Rasterizer, kein Raycaster!
Was es? Und nein.
???
Da Renderman Shading Language AFAIK auch eine trace enthaelt, kann man ihn auch als Raytracer implementieren. BMRT hat das gemacht.
marco42
2004-01-25, 19:41:38
Original geschrieben von RLZ
Wurde OpenGL nicht als Konkurenz zu PEX entwickelt?
Auf jeden Fall wars wohl Ziel von SGI eine eigene API durchzusetzen, was ihnen als Marktführer damals auch gelang. Hoffen wir das Microsoft keine solchen Erfolg hat seine API durchzudrücken... Konkurenz belebt immer das Geschäft :)
Ausserdem würde ich imo das ganze auf polygonbasierte Rasterizer-Grafik einschränken :)
Wenn du mal an einer SGI gesessen haettest, dann wuesstest du, warum sich OpenGL durchgesetzt hat. AFAIK ist IrisGL(der Vorgaenger von OpenGL) auch aelter als PEX.
PEX hat sich zum Glueck nicht durchgesetzt, im Gegensatz zu X-Windows. Ausserdem war OpenGL immer offen. IrisGL war was eigenes von SGI, aber auch immer etwas inkompatibel von Maschine zu Maschine.
Man muss OpenGL imo in der Praxis immer noch einen Vorsprung im CAD-Bereich zusprechen. Oder sind die DX Treiber der entsprechenden Karten (Quadra, FireGL,usw) inzwischen auch darauf so optimiert?
Ausserdem denk ich mal, dass die Entwickler solcher Programme sehr oft von der Plattformunabhängigkeit von OpenGL profitieren wollen und zudem Gewohnheitstiere sind ;)
Naja, Spiele haben halt eine viel kuerzere Lebensdauer als andere Anwendungen und sie sind meist doch eher Prototypen, die dann beim Kunden debuggt werden.
OpenGL gibt es halt unter UNIX(linux), MaxOS und Windows. Und erstere spielt in vielen Bereichen doch eine wichtige Rolle.
Warum sollte man sich also an einen Hersteller ketten?
marco42
2004-01-25, 19:50:51
Original geschrieben von Monger
Zeckensack hat hier gesagt, dass OpenGL für Polygongrafik entworfen wurde. Was für Möglichkeiten jenseits von Polygongrafik gibt es denn noch?
Naja, OpenGL besitzt auch bezier splines, aber richtig gut werden die nicht unterstuertzt. Du kannst sie nicht zusammen mit vertex arrays verwenden. Es gibt auch noch Subdivision Surfaces etc.. Du kannst aber alle in Dreiecke umwandeln, sie eignen sich halb besser zur Modellierung und besitzen mehr Informationen bei gleicher Datenmenge.
Stell dir vor, eine Kurve wird mit vier Punkten beschrieben, wie bei eimer bezier spline oder mit sehr vielen, wenn sie aus lauter kleinen Linien besteht. Hat halt so seine Vorteile. Die Geforce 3/4 unterstuetzen das auch.
OpenGL besitzt auch bezier splines
Das ist ein Gerücht. glut oder glaux (oder ne andere GL lib, bin mir nicht sicher) können beziers als polygone rendern, aber in OpenGL direkt ist das nicht enthalten (zumindest nicht in 3D)
Oder meinst du Truform und Konsorten? Naja das war wohl nicht im ursprünglichen OpenGL enthalten, außerdem werden da auch Polys draus gemacht im Grafikchip.
Original geschrieben von Coda
Das ist ein Gerücht. glut oder glaux (oder ne andere GL lib, bin mir nicht sicher) können beziers als polygone rendern, aber in OpenGL direkt ist das nicht enthalten (zumindest nicht in 3D)
Oder meinst du Truform und Konsorten? Naja das war wohl nicht im ursprünglichen OpenGL enthalten, außerdem werden da auch Polys draus gemacht im Grafikchip.
Falsch, Bezierflächen gibts direkt in OpenGL mittels der glMap und glEvalCoord Funktionen. GLU bietet darauf basierend zusätzlich NURBS an.
eXistence
2004-01-26, 16:06:24
Auch auf die Gefahr, als Laie jetzt Stuss zu reden:
Selbst wenn es sich bei den Geometrie-Daten um NURBS oder SubD handelt, die meisten Renderer tessilieren intern ja beim rendern, so gesehen handelt es sich doch auch nur um eine sehr große Anzahl an Flächen (= "Polygone"), oder!?
marco42
2004-01-26, 16:12:40
Original geschrieben von Coda
Das ist ein Gerücht. glut oder glaux (oder ne andere GL lib, bin mir nicht sicher) können beziers als polygone rendern, aber in OpenGL direkt ist das nicht enthalten (zumindest nicht in 3D)
Oder meinst du Truform und Konsorten? Naja das war wohl nicht im ursprünglichen OpenGL enthalten, außerdem werden da auch Polys draus gemacht im Grafikchip.
# uname -a
IRIX64 loriot 6.4 02121744 IP27 mips
# man glMap1d
...
Evaluators provide a way to use polynomial or rational polynomial mapping
to produce vertices, normals, texture coordinates, and colors. The
values produced by an evaluator are sent to further stages of GL
processing just as if they had been presented using glVertex, glNormal,
glTexCoord, and glColor commands, except that the generated values do not
update the current normal, texture coordinates, or color.
ll polynomial or rational polynomial splines of any degree (up to the
maximum degree supported by the GL implementation) can be described using
evaluators. These include almost all splines used in computer graphics,
including B-splines, Bezier curves, Hermite splines, and so on.
Evaluators define curves based on Bernstein polynomials. Define p(^) as
n n(^)Ri
p(^) = i^NR^O0Bi
n(^) is the ith Bernstein polynomial of
degreeRn (ordero=tn+1):oint and Bi
( )
n(^) = |n |^i(1-^)n-i
Bi (i )
Recall that
( )
00 = 1 and |n | = 1
( 0 )
...
Das glaube ich nicht, ich benutze die. OpenGL bietet Bernstein Polynomials. Hast du schon mal mit OpenGL programmiert? Was du meinst sind die NURBS in GLU. Das hat dann auch nichts mit Glut oder glaux(das ist ja schon toter als athena widgets) zu tun.
Uhm, ok hast gewonnen.
Die Funktionen hab ich trotzdem noch nie gesehen Oo
Monger
2004-01-31, 20:09:35
Ohne jetzt einen Glaubenskrieg zwischen DirectX und OpenGL vomZaun brechen zu wollen:
Was sind eurer Meinung nach die wichtigsten Meilensteine in der Entwicklung von DirectX (und somit natürlich auch der Grafikkarten und der Anwendungen)?
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.