Sehenswerte GPU-Raytracing-Screenshots aus den Optix-Entwickler-Demos

Optix-Raytracing-Demo: "Cook-Scene"
In dieser Szene von Rob Cook wird die Startaufstellung einer Pool-Billard-Partie gezeigt. Die 15 Billardkugeln sind dabei hochglanzpoliert und spiegeln sich in mehrfachen Reflektionen ineinander. Sie zeigen neben nahezu perfekten Rundungen in diesem Beispiel auch hochgradig fein berechnete Soft-Shadows, abgerundet von einem Blur-Effekt, welcher den Kamera-Fokus darstellt (als "Object Motion Blur" bezeichnet). Damit vereint diese Demo klassische Schwächen des Rasterisierungsverfahrens, die gleichzeitig Stärken des Raytracings darstellen - einzig Refraktionen, also Lichtbrechungen fehlen hier.

Also der blur-effekt ist eine überlagerung von vielen frames wobei dabei um den fokuspunkt der camera rotiert wird. Das kann 3Ds Max in der Preview schon seit Jahren ohne raytracing die softshadows scheinen einer ähnliche technik zu unterliegen... also auch hier nix raytracing aber vllt. werden messdaten um die überlagerung zu realisieren ausgelesen... die Reflexionen ja... die sind raytraced...
 
Yo, toller Virenscanner:

Binpatch.exe:
http://www.virustotal.com/de/analis...a38c72bbbac21179e094b69d958961941b-1252334717
(patched) Nvidia-OptiX-Cook.exe:
[folgt]
(patched) Nvidia-OptiX-JuliaSet.exe
[folgt]
(patched) Nvidia-OptiX-Whitted.exe
[folgt]
Beyond3D Forum - View Single Post - nVidia releases interactive raytracing engine
Code:
#include <iostream>
#include <fstream>
using namespace std;

ifstream::pos_type size;
char * memblock;

int hex2bin(char *s,char *o) {
  int r=0;
  while(strlen(s)>=2) {
    int b;
    sscanf(s,"%02X",&b);
    o[r++]=b;
    s+=2;
  }
  return r;
}

int main (int argc, char* argv[]) {
  if (argc<4) { cout << "Usage:\n patch file.exe 7504C2 EB04C2\n";return -1; }
  fstream file (argv[1], ios::in|ios::out|ios::binary|ios::ate);
  if (!file.is_open()) { cout << "Unable to open file";return -1; }

  size = file.tellg();
  memblock = new char [size];
  file.seekg (0, ios::beg);
  file.read (memblock, size);

//  cout << "the complete file content is in memory\n";

  char *s1 = new char [strlen(argv[2])/2];
  int l1 = hex2bin(argv[2],s1);
  char *s2 = new char [strlen(argv[3])/2];
  int l2 = hex2bin(argv[3],s2);
//  cout << "searching for " << l1 << " bytes";

  int p;
  for(p=0; p+l1 < size; p++) 
    if(!memcmp(memblock+p, s1, l1)) break;
  if (p+l1 == size) { cout << "Unable to find pattern";return -1; }

  cout << "found at: " << hex << p << "\n";

  file.seekg (p, ios::beg);
  file.write (s2, l2);

  cout << "patched\n";

  file.close();
  delete[] memblock;

  return 0;
}
 
Zuletzt bearbeitet:
Also der blur-effekt ist eine überlagerung von vielen frames wobei dabei um den fokuspunkt der camera rotiert wird. Das kann 3Ds Max in der Preview schon seit Jahren ohne raytracing die softshadows scheinen einer ähnliche technik zu unterliegen... also auch hier nix raytracing aber vllt. werden messdaten um die überlagerung zu realisieren ausgelesen... die Reflexionen ja... die sind raytraced...
Wo steht denn, dass diese Effekte brandneu sind und in herkömmlichem Raytracing nicht möglich?
Und wenn du viele geraytracete Bilder rotierst, ist das Ergebnis auf einmal kein Raytracing mehr?
 
Wo steht denn, dass diese Effekte brandneu sind und in herkömmlichem Raytracing nicht möglich?
Und wenn du viele geraytracete Bilder rotierst, ist das Ergebnis auf einmal kein Raytracing mehr?

Denk jetzt nochmal genau drüber nach was du gerade geschrieben hast. Natürlich ist es kein Raytracing mehr, da es nur eine Überlagerung von viele Bildern ist. Die Bilder zum überlagern sind raytraced. Der Soft-shadow ist keiner (viele überlagerte harte raytraced Schatten) und die geringe Tiefenschärfe auch nicht. Das sind Effekte die mit dem rendering einhergehen... das nur als Klarstellung... sollte ja keine Kritik sein aber ihr glorifiziert einen Effekt der augenscheinlich nix neues und nix bahnbrechendes ist und so nie in einem Spiel anwendung finden wird, da bei jeder Veränderung der Blur Effekt neu berechnet werden muss... wie man gut im Video sehen kann.
 
Mit deiner Logik dürfte ja gar kein Bild raytracet sein. Jeder Pixel wird raytraced und die dann zusammengesetzt. Mehrere Datensätze ergeben - genau wie im Diskussionsgegenstand - ein Bild.

Oder anders:
Nur, weil in dieser Implementation die einzelnen Buffer nacheinander addiert werden, anstatt intern, ist es auf einmal kein Raytracing mehr? IMO: Nein (bzw. Ja, es ist immer noch Raytracing).
 
Mit deiner Logik dürfte ja gar kein Bild raytracet sein. Jeder Pixel wird raytraced und die dann zusammengesetzt. Mehrere Datensätze ergeben - genau wie im Diskussionsgegenstand - ein Bild.

Anscheinend willst du mich nicht verstehen. Die Bilder die genommen werden sind raytraced. Das habe ich nicht bestritten nur ist der Effekt an sich kein Raytracing. Du kannst das selbe auch mit einer Rasterisierten Scene machen. der Effekt ist der selbe und das ausgegebene bild ist dann ein Rasterimage. Sozusagen z.b. 64 Bilder auf einmal overlayed zu einem.

Das ist ein Posteffekt. Auch gut daran zu erkennen, das er nur dann einsetzt wenn die kamera still steht. Solltest mal genau hin schauen.

Verstanden oder soll ich dirs noch aufmalen?
 
Anscheinend willst du mich nicht verstehen. Die Bilder die genommen werden sind raytraced. Das habe ich nicht bestritten nur ist der Effekt an sich kein Raytracing. Du kannst das selbe auch mit einer Rasterisierten Scene machen. der Effekt ist der selbe und das ausgegebene bild ist dann ein Rasterimage. Sozusagen z.b. 64 Bilder auf einmal overlayed zu einem.

Das ist ein Posteffekt. Auch gut daran zu erkennen, das er nur dann einsetzt wenn die kamera still steht. Solltest mal genau hin schauen.

Verstanden oder soll ich dirs noch aufmalen?
Toller Umgangston vorallem mit einem Redakteur. Redest du mit Mama und Papa auch so?
 
Toller Umgangston vorallem mit einem Redakteur.

Muss ich mich jetzt davor verbeugen, dass er ein Redakteur ist? Er hat mich nicht verstanden und mir die Worte im Mund rum gedreht... das kann ich so gar nicht ab, dann soll er ordentlich lesen und bei zweifel des Verständnisses lieber nachfragen als gleich los zu wettern.

Redest du mit Mama und Papa auch so?

Sag mal was denkst du wie alt ich bin?
 
Anscheinend willst du mich nicht verstehen. Die Bilder die genommen werden sind raytraced. Das habe ich nicht bestritten nur ist der Effekt an sich kein Raytracing. Du kannst das selbe auch mit einer Rasterisierten Scene machen. der Effekt ist der selbe und das ausgegebene bild ist dann ein Rasterimage. Sozusagen z.b. 64 Bilder auf einmal overlayed zu einem.

Das ist ein Posteffekt. Auch gut daran zu erkennen, das er nur dann einsetzt wenn die kamera still steht. Solltest mal genau hin schauen.

Verstanden oder soll ich dirs noch aufmalen?
Au ja - bitte mal's mir auf. :ugly:


Wie wird beim "echten" Raytracing denn ein Soft-Shadow oder eine Unschärfe (egal ob für Fokus oder Bewegungsu.) erzeugt? Wenn's hilft: Wie wird dort Anti-Aliasing gemacht? Indem pro Punkt mehrere Strahlen verfolgt werden und die Ergebnisse dann gemittelt (oder per anderer, komplizierter Formel auf einen Einzelwert heruntergebrochen) werden. Anders geht es aufgrund der Lokalität der Daten, die nur pro Punkt abgetastet werden, mW auch gar nicht.

Diese Werte werden irgendwo zwischengespeicher - ob du das nun pro Pixel machst oder pro fertigem Bild ist eine Implementations- aber keine Verfahrensfrage.

Ebenso, ob du erst den endgültig verrechneten Wert/Buffer ausgibst oder diese nach und nach übereinander legst.

Hier handelt es sich um Techdemos - die sollen unter anderem auch grundlegende Verfahrensweisen vermitteln, daher ist es mMn durchaus sinnvoll, wenn die Ausgabe so erfolgt, dass man auch vom Beobachten etwas lernen kann.

--
Zu dem was Rollora sagte: "Wettern" würde ich meine Postings nicht unbedingt nennen. Ich erwarte auch keine Verbeugungen, nur weil unter meinem Benutzernamen "Redakteur" steht. Wenn du allerdings rumpflaumen möchtest, stell' dich (nicht nur hier, sondern auch im Real-Life) bitte drauf ein, dass du entweder Antworten im selben Stil bekommst oder einfach ignoriert wirst.
 
Au ja - bitte mal's mir auf. :ugly:


Wie wird beim "echten" Raytracing denn ein Soft-Shadow oder eine Unschärfe (egal ob für Fokus oder Bewegungsu.) erzeugt? Wenn's hilft: Wie wird dort Anti-Aliasing gemacht? Indem pro Punkt mehrere Strahlen verfolgt werden und die Ergebnisse dann gemittelt (oder per anderer, komplizierter Formel auf einen Einzelwert heruntergebrochen) werden. Anders geht es aufgrund der Lokalität der Daten, die nur pro Punkt abgetastet werden, mW auch gar nicht.

Diese Werte werden irgendwo zwischengespeicher - ob du das nun pro Pixel machst oder pro fertigem Bild ist eine Implementations- aber keine Verfahrensfrage.

Ebenso, ob du erst den endgültig verrechneten Wert/Buffer ausgibst oder diese nach und nach übereinander legst.

Hier handelt es sich um Techdemos - die sollen unter anderem auch grundlegende Verfahrensweisen vermitteln, daher ist es mMn durchaus sinnvoll, wenn die Ausgabe so erfolgt, dass man auch vom Beobachten etwas lernen kann.

--
Zu dem was Rollora sagte: "Wettern" würde ich meine Postings nicht unbedingt nennen. Ich erwarte auch keine Verbeugungen, nur weil unter meinem Benutzernamen "Redakteur" steht. Wenn du allerdings rumpflaumen möchtest, stell' dich (nicht nur hier, sondern auch im Real-Life) bitte drauf ein, dass du entweder Antworten im selben Stil bekommst oder einfach ignoriert wirst.

Ach OK es ist also das selbe verfahren?:ugly:

Sagen wir 2 mio. rays auszusenden als das 64-128 fache für ein Bild. Das verfahren was meist bei raytracing angewendet wird nennt sich Subpixel Jittering. Findent anwendung für Antialiasing und DOF. Beim schatten ist das ähnlich. nur wird dann die zahl der Subpixel extrem hoch und so kann eine simple scene schnell 1-2 stunden mit dem rendering dauern... ich denke das die technik von nvidia wesentlich zeitsparender ist, da afaik bei weitem weniger rays ausgesendet werden müssen als mit den anderen verfahren.
 
Ach OK es ist also das selbe verfahren?:ugly:
Vom rechnerischen Standpunkt aus: Ja.
Unterschiede: Anzahl der Samples, Positionierung der Samples.

Wie ich das Verteilungsmuster meiner Strahlen nenne, ist doch egal: Wenn ich es "Büchsenschinken" nenne, ist es immer noch Raytracing, wenn es das vorher auch war.

Ordered Grid, Rotated Grid und auch Jittered Grid gibt es genauso im Rasterizer-Bereich wie im Raytracing-Bereich. In allen Fällen wird pro Bildpixel mehrfach abgetastet - mit verschiedenen Mustern.
Supersampling - Wikipedia, the free encyclopedia
Zugegebenermaßen ist (stochastically) jittered Grid dabei das beste Verfahren, unterscheidet sich dennoch lediglich in der Position der Subsamples relativ zu Pixelzentrum.

Sagen wir 2 mio. rays auszusenden als das 64-128 fache für ein Bild. Das verfahren was meist bei raytracing angewendet wird nennt sich Subpixel Jittering. Findent anwendung für Antialiasing und DOF. Beim schatten ist das ähnlich. nur wird dann die zahl der Subpixel extrem hoch und so kann eine simple scene schnell 1-2 stunden mit dem rendering dauern... ich denke das die technik von nvidia wesentlich zeitsparender ist, da afaik bei weitem weniger rays ausgesendet werden müssen als mit den anderen verfahren.
Klar ist sie zeitsparender. Wie du schon bemerkt hast, werden bei stillstehender Kamera ja weitere Buffer, also bildgroße Arrays an Pixeln drübergelegt. Das dauert mehrere Sekunden für, sagen wir mal, acht Buffer (hab nicht mitgezählt).

Dass es bei klassischem Raytracing (auf der CPU!) etwas länger dauert, dürfte aus mehreren Gründen einleuchten:
a) Eine CPU ist pro Quadratmillimeter mit weniger Rechenleistung ausgestattet. Pro Chip würde ich aktuell mal mit Faktor 8 bis 10 rechnen.
b) Eine CPU kommt i.d.R. nicht so nahe an ihre theoretische Rechenleistung heran wie ein Grafikchip an die sein, fällt also noch weiter zurück. Gründe: Speichergeschwindigkeit und schlechtes Caching-Verhalten insbesondere der sekundären und weiter verzweigten Strahlen (Paradigma "Primary Rays Cache, Secondary Rays Thrash").
c) Die stundenlange Renderdauer pro Bild, auf die du dich beziehst liegen auch mit an den wesentlich längeren Materialshadern, welche im Filmbereich (auf den du dich vermutlich beziehst) genutzt werden; zudem "trashen" die vielen Subsamples beim Antialiasing weitaus mehr als es weniger Samples tun würden - die Rohleistung sinkt noch weiter.
 
Das ist aus einer lizenzierten, aber GEMA-Abzocke-freien Musiksammlung. Leider sind dort nur nichtssagende Titel wie "Elektro_Mix_5.mp3" angeführt. Wenn es dir hilft kann ich morgen gern nochmal nachsehen, welcher Titel es genau war.
 
Zugegebenermaßen ist (stochastically) jittered Grid dabei das beste Verfahren, unterscheidet sich dennoch lediglich in der Position der Subsamples relativ zu Pixelzentrum.
Genau, da man es vllt. in ein paar jahren auch in realtime umsetzen könnte.

Klar ist sie zeitsparender. Wie du schon bemerkt hast, werden bei stillstehender Kamera ja weitere Buffer, also bildgroße Arrays an Pixeln drübergelegt. Das dauert mehrere Sekunden für, sagen wir mal, acht Buffer (hab nicht mitgezählt).
Es sind sogar viel mehr gewesen aber es ist auch keine wirkliche real world szene... ;)

Dass es bei klassischem Raytracing (auf der CPU!) etwas länger dauert, dürfte aus mehreren Gründen einleuchten:
a) Eine CPU ist pro Quadratmillimeter mit weniger Rechenleistung ausgestattet. Pro Chip würde ich aktuell mal mit Faktor 8 bis 10 rechnen.
b) Eine CPU kommt i.d.R. nicht so nahe an ihre theoretische Rechenleistung heran wie ein Grafikchip an die sein, fällt also noch weiter zurück. Gründe: Speichergeschwindigkeit und schlechtes Caching-Verhalten insbesondere der sekundären und weiter verzweigten Strahlen (Paradigma "Primary Rays Cache, Secondary Rays Thrash").
c) Die stundenlange Renderdauer pro Bild, auf die du dich beziehst liegen auch mit an den wesentlich längeren Materialshadern, welche im Filmbereich (auf den du dich vermutlich beziehst) genutzt werden; zudem "trashen" die vielen Subsamples beim Antialiasing weitaus mehr als es weniger Samples tun würden - die Rohleistung sinkt noch weiter.

a) Klar.
b) OK
c) Interessant ist auch, das im Vergleich zu Toy Story, wo ein Frame etwa 1 - 2 Stunden dauerte, heute ein Frame für Wall-E um die 6-7 Stunden. Man merkt einfach, dass sobald die Designer mehr Rechenleistung haben diese auch gleich inflationär einsetzten ;)
 
Zurück