/ / C oder ObjC für Echtzeit-Raytracer auf iOS? - Ziel-c, c, ios, Echtzeit-Raytracing

C oder ObjC für Echtzeit Raytracer auf iOS? - Ziel-c, c, ios, Echtzeit-Raytracing

Ich fange an, einen Echtzeit Raytracer füriOS. Ich bin neu bei dieser Raytracing-Sache, alles was ich bisher getan habe, ist ein rudimentäres Schreiben in ObjC. Es scheint mir, dass ein C-basierter Raytracer schneller sein wird als einer, der in ObjC geschrieben wurde, aber der ObjC wird viel einfacher sein, da Objekthierarchien sehr praktisch sind. Geschwindigkeit ist jedoch sehr wichtig, da ich möchte, dass es in Echtzeit ist, sagen wir 30 fps.

Was ist deine Meinung darüber, ob die Geschwindigkeit von Clohnt sich die zusätzliche Komplexität? Ich kann vorhersehen, dass der C-Code viel länger dauert und mir Kopfschmerzen mit vielen Fehlern bereitet (obwohl ich nicht neu in C bin), aber die Geschwindigkeit ist anfangs verführerisch.

Gibt es da draußen Beispiele von Raytracern, die in C geschrieben sind? Meine Google-Suche nach solchen Dingen ist mit vielen Ergebnissen für C ++ und C # kontaminiert.

Antworten:

1 für die Antwort № 1

Wenn Sie eine schnelle Raytracing-Funktion wünschen, können Sie praktisch vergessen, sie zu verwenden entweder C oder Objective C. Sie möchten mit Sicherheit OpenCL verwenden. Es wird immer noch nicht genug sein, um Sie (sogar sehr nahe) 30 fps zu bekommen, aber es wird wahrscheinlich mindestens doppelt so schnell sein wie alles, was auf der CPU läuft (und 5-10 mal schneller wäre es überhaupt nicht) echte Überraschung).


0 für die Antwort № 2

Wie Zneak sagte, ist C ++ die beste Kombination für Geschwindigkeit und Polymorphie.

Sie können jedoch etwas in der Nähe erreichenReduzieren der Objc-Aufrufe (lesen: reduzieren Sie die polymorphe Schnittstelle auf die erforderliche Mindestmenge, dann setzen Sie einfach die Teile, die schnell sein müssen, in einfaches c oder c ++).

objc message dispatch ist ziemlich schnell, und Sie könnenNormalerweise entfernen Sie einen Großteil der virtuellen / dynamischen Methoden von Ihren Schnittstellen (gehen Sie davon aus, dass jede objc-Instanzmethode virtuell ist). c-code in objc-methoden ist immer noch c-code ... von dort, bestimmen sie, wo ihre engpässe sind - es tut nicht weh zu profile vor ändern funktionierenden code, entweder;)


0 für die Antwort № 3

Einen "Realtime Raytracer" zu schreiben ist ohne den Einsatzvon Hand-Optimized Assembly (oder die Verwendung des "billigen" Intel-Compilers;), aber das ist für diese Plattform nicht möglich), unmöglich, weil man die Geschwindigkeit braucht.

Außerdem brauchst du viel RechenleistungAber ich denke, sogar der OpenCL - Pfad ist nicht stark genug (das ist meines Erachtens auch bei echten Desktop - Rechnern der Fall, der Grund dafür ist das Fehlen eines echt groß Cache auf dem Grafikprozessor).


0 für die Antwort № 4

Schaut es euch durch http://ofps.oreilly.com/titles/9780596804824/ das ist so nah wie du kommst.

Es ist kein Ray-Tracing, ich habe einen Strahl geschriebenTracer und es ist eine riesige Menge an Arbeit. GL verwendet eine andere Technik für Grafiken, daher wird es zum Beispiel nicht in der Lage sein, die Fähigkeit eines Diamanten zum Einfangen von Licht zu rendern. Dieser Link enthält Beispielcode, den Sie herunterladen und ausführen können. Sie werden feststellen, dass sogar einige der mäßig komplexen Beispiele wirklich auf einem tatsächlichen Gerät tuckern ... wir sprechen <1 fps.