Volume-Rendering: Verwirrung bei der Komposition von vorne nach hinten

9

Zum Beispiel GPU Gems die Kompositionsgleichung von vorne nach hinten (für Farbe) ist

C ' i = (1 - A' i-1) C i + C 'i-1

wobei C ' der ausgegebene akkumulierte Farbwert ist; A ' i-1 ist der akkumulierte Alpha (Opazitätswert) bis zum vorherigen Voxel; C i ist der Farbwert des aktuellen Voxels; und C 'i-1 ist der akkumulierte Farbwert bis zum vorhergehenden Voxel.

Diese Formulierung wirft zwei Fragen auf:

  1. Der Abbruch von vorne nach hinten tritt auf, sobald die akkumulierte Deckkraft ungefähr 1 erreicht. Was ist dann mit den Farbkanälen (RGB) zu tun, die über das Maximum hinausgehen, bevor das Deckkraftlimit erreicht ist? Klemmen Sie einfach die Werte zwischen 0..255 (z. B. 500.1000.2000 würde 255.255.255 werden) oder schauen Sie auf das Verhältnis zwischen den Kanälen (zB 500.1000.2000 würde 64.128.255 werden).

  2. Die Antwort auf die vorhergehende Frage kann dazu führen. Die Farbausgabe des aktuellen Voxels hängt von eins minus der akkumulierten Opazität ab. Was ist, wenn die akkumulierte Opazität null ist? und die Deckkraft des aktuellen Voxels ist null? - Die Ausgabe ist ein vollständig undurchsichtiges Voxel, da (1 - A 'i-1) = 1 ist, obwohl es ein transparentes Voxel ist!?

Alle Hinweise sehr geschätzt.

    
Dave 24.05.2011, 13:57
quelle

3 Antworten

1
  1. A und C sollten im Bereich 0-1 liegen. (Wenn Sie unsignierte Bytes als Repräsentation verwenden, dividieren Sie diese durch 255.0, beachten Sie jedoch, dass dies für einige Volume-Rendering-Anwendungsbereiche unzureichende Kontrolle über kleine Alpha / Low-Opazitätsregionen zur Folge hat mit Schwimmern von Anfang an berechnen). Es stellt sich heraus, dass die Alpha- und Farbwerte mit den Formeln niemals außerhalb dieses Bereichs entweichen können.

  2. Die Sequenz für den Strahl alpha A 'ist A' (i) = (1-A '(i-1)). A (i) + A' (i-1) (wobei A (i ) ist das Voxel alpha), wenn also dein akkumulierter Strahl mit A 'Null beginnt und durch ein transparentes (Null A) Voxel geht, hat der Strahl jetzt A' = (1-0) * 0 + 0, was immer noch Null ist wie erwartet.

timday 24.05.2011, 20:14
quelle
0

A und C sollten zwischen 0 und 1 liegen. Verwenden Sie vormultipliziertes Alpha; Sie werden keine Überlaufprobleme haben.

    
tkerwin 24.05.2011 19:14
quelle
0

Hm, lassen Sie uns annehmen, dass C und A zwischen 0 und 1 liegen. Wie man sieht sequence C'(i) = [1 - A'_(i+1)]C(i) + C'(i-1) wächst mit dem Wachstum von i . Ich denke, C ist keine Farbe (von RGB oder irgendeinem anderen Modell). Vielleicht ist es Grauheit eines Voxels. I.e. Wenn Voxel viele Voxel davor hat, sollte es grauer als Top Voxel sein.

Also meine Annahme ist, dass C_i die Farbe nicht direkt beschreibt. Es sagt uns, wie grau wir Farbe eines Voxels machen sollten.

Verzeih mir mein schlechtes Englisch und fülle mich frei, um erneut zu fragen, ob etwas nicht klar ist.

BTW: Wenn Sie glauben, C_0 (Graustufe des oberen Voxel) sollte 1 sein, und A_0 sollte 0 sein.

    
Eugeny89 24.05.2011 19:39
quelle