2016-04-25 19 views
-1

Ich genieße Computergrafik.Was ist der schnellste Motor zum Zeichnen einer großen Anzahl von halbtransparenten Triangen?

Ich habe mich gefragt, was der schnellste Motor mit folgenden Funktionalität war:

Zeichnen Dreiecken mit 4 Farbkanälen rgba und ermöglicht die Zeichnung von Punkt- und Richtungslichtern.

Texturing wäre ein cooles Zusatzfeature, aber ich suche wieder den schnellsten Motor, nicht den funktionalsten. Kameraanimation und Objektanimation sind zwingend erforderlich.

Schließlich gibt es wirklich 2 Antworten für diese Frage, 1 für die allgemeine Entwicklung und eine für das Web, aber wenn Sie nur mit dem einen oder dem anderen sprechen können, werden Ihre Beiträge geschätzt werden!

Antwort

1

Ihre beste Wette ist wahrscheinlich OpenGL. Im Falle des Webs könnten Sie WebGL verwenden und im Fall von nativer Desktop- oder mobiler Entwicklung könnten Sie direkt OpenGL verwenden.

+0

Aight damit ich etwas Erfahrung mit webgl mit 3js habe siehe https://krewn.github.io leider funktioniert da etwas nur in Chrome ... Soweit OpenGL vs WebGL Was ist die Beziehung/und Unterschiede? – kpie

+1

Die Beziehung ist, dass sie auf der gleichen API basieren. Der Unterschied ist, dass OpenGL für den Desktop und WebGL für den Browser ist. Ein Problem mit WebGL ist, dass es nicht überall unterstützt wird und Benutzer es möglicherweise in ihren Browsern explizit aktivieren müssen. – user1118321

+0

Gibt es noch etwas, das in der Leistung nahe kommt? – kpie

2

Es gibt ziemlich viele Motoren, die den Job machen. Einer der bekanntesten ist zum Beispiel Unity, wo Sie auch viele andere Funktionen in guter Leistung haben.

Aber ich denke, Sie suchen nicht wirklich nach einer Maschine, sondern nach einer API. Beispiele sind OpenGL oder DirectX (bereits erwähnt). OpenGL hat sogar einen bestimmten Web-Content (WebGL).

Es gibt ein weiteres Problem: die Dreiecke sollten halbtransparent sein. Was in der anderen Antwort fehlt, ist die Frage, ob die Dreiecke bereits geordnet sind. OpenGL zum Beispiel eignet sich gut zum Rendern von Objekten, bei denen es keine Rolle spielt, welches Dreieck dem Betrachter am nächsten kommt. Es "sucht" dieses on the fly und zeigt nur das Dreieck, das sichtbar ist. Aber mit halbtransparenten Dreiecken ist es möglich, verschiedene Dreiecke zu sehen, die einander überlappen, und daher ist es nicht nur notwendig zu wissen, welches Dreieck vorne ist, sondern welches Dreieck direkt danach kommt und so weiter. OpenGL bietet eine Überblendung für diese Funktion, aber es ist notwendig, die halbtransparenten Dreiecke vor dem Rendern manuell zu ordnen. Dies wird der Maler-Algorithmus genannt. Während das Sortieren von Objekten ein komplexes Problem ist, kann dies insbesondere bei einer großen Anzahl von Objekten ziemlich lange dauern.

Dafür gibt es eine andere Lösung namens "Tiefen-Peeling". Die Idee besteht darin, alle Dreiecke mehrfach mit OpenGL zu rendern. Beim ersten Mal bekommst du alle Dreiecke, die vorne liegen. Jetzt renderst du alle Dreiecke wieder, aber ohne die Dreiecke vorne. Dies führt zu den zweitnächsten Dreiecken für den Betrachter. Danach werden alle Dreiecke erneut gerendert, aber ohne die ersten zwei "Peels", was zu den drittnächsten Dreiecken führt und so weiter. Dies ist teuer, weil alles mehrfach gerendert werden muss, aber in Fällen mit einer sehr großen Anzahl von Dreiecken ist dies schneller als das Sortieren (und genauer wegen überlappender Dreiecke). In den meisten Fällen reichen vier Peelings für gute Ergebnisse. Für weitere Lektüre schlage ich folgendes Papier von Everitt vor: http://gamedevs.org/uploads/interactive-order-independent-transparency.pdf

+0

Upvote für die Referenz. Ich habe diese Technik in den 90er Jahren oft benutzt, als ich viel Code für 3D-Grafiken geschrieben habe. Hatte keine Ahnung, dass es einen Namen hatte - "Tiefenschälung". Und das ist ein guter Name. –