3D-Volumen-Rendering und Mehrfach-Blickwinkel-Okklusion

8

Ich habe ein 'W x H x D' volumetrische Daten, die überall Null ist, außer für kleine kugelförmige Volumina, die 1 enthalten.

Ich habe den Shader geschrieben, um den "Schnittpunkt" dieses 3D-Volumes mit einem generischen Objekt aus Scheitelpunkten zu extrahieren.

Vertex-Shader

%Vor%

Fragment-Shader

%Vor%

Im OpenGL-Programm schaue ich das zentrierte Objekt mit den fast kugelförmigen weißen Flecken von (0,100,0) Augenkoordinaten, aber ich möchte das für einen anderen Betrachter (0,0,0) die Kugeln die auf derselben Sichtlinie liegen, sind korrekt verdeckt, so dass nur die Teile ausgestrahlt werden, die ich im Bild rot unterstrichen habe.

Ist dies eine Anwendung von Raycasting oder Ähnlichem?

    
linello 04.10.2013, 14:22
quelle

2 Antworten

3

Es scheint, was Sie wollen, ist Okklusionsauswahl, Sie haben zwei Hauptoptionen, um Okklusionsculling zu implementieren

Verwenden von GPU-Okklusionsabfragen

Es geht im Wesentlichen darum, die Hardware zu fragen, ob ein bestimmtes Fragment gezeichnet wird oder nicht, wenn Sie das Objekt nicht aussortieren können.

Bei Okklusionsabfragen wird die Anzahl der Fragmente (oder Stichproben) gezählt, die den Tiefentest bestehen. Dies ist nützlich, um die Sichtbarkeit von Objekten zu bestimmen.

Dieser Algorithmus ist komplexer als hier erklärt werden kann, hier ist ein ausgezeichneter Nvidia Artikel zum Thema.

Verwenden von CPU-Raycasting

Überprüfen Sie einfach jedes Objekt (oder möglicherweise sein begrenzendes Volumen), wenn ein Strahl das Objekt trifft, dann versteckt es möglicherweise andere Objekte dahinter. Die Objekte müssen mit Octree oder BSP Tree räumlich sortiert werden, damit Sie nicht jedes Objekt überprüfen und nur Objekte in der Nähe der Kamera überprüfen.

Für mehr über culling Techniken überprüfen Sie meine Antwort hier .

    
concept3d 09.12.2013, 12:17
quelle
2
  

Ist dies eine Anwendung von Raycasting oder Ähnlichem?

Dies ist im Wesentlichen der Raytracing-Schattenalgorithmus: Sobald Sie eine (sichtbare) Oberfläche mit Ihrem Betrachtungsstrahl getroffen haben, nehmen Sie diesen Punkt als Ausgangspunkt für eine Spur zum anderen Punkt (eine Lichtquelle oder was auch immer) und wenn Sie diesen Punkt (ohne) erreichen können, verwenden Sie diese Information als weitere Eingabe in Rendering-Berechnungen.

    
datenwolf 04.10.2013 14:53
quelle

Tags und Links