AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

schnelstmöglich dividieren?

Ein Thema von Memnarch · begonnen am 26. Mai 2011 · letzter Beitrag vom 1. Jun 2011
Antwort Antwort
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#1

AW: schnelstmöglich dividieren?

  Alt 27. Mai 2011, 14:14
Na für die Depthmap
Sonst quadrutschelt es mir ja alles durcheinander (Selbs wenn ich vorher sortieren würde).

Ist dieselbe Technik wie sie auch seit Jahren für alle 3dspiele angewand wird.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: schnelstmöglich dividieren?

  Alt 27. Mai 2011, 15:04
Uhlala, nen vollwertiger Z-Puffer in Software ist allerdings happig du. Da kenne ich, als "üblich" Sortierung nach Dreiecksschwerpunkt-Z und Front-to-Back Rendering mit einfachem Stencil. Man kann natürlich Fälle bekommen (bzw. mutwillig erzeugen ), bei denen dann mal was komisch wird (das ein oder andere Loch ggf.), aber die Ersparnis in der Verarbeitungszeit ist doch gewaltig dann - verglichen mit dem gerigen Umfang an "glitches" den man sich einhandelt vor allem.
Bei Front-to-Back muss man so allerdings Transparenz etwas spezieller behandeln. Es kann die Sache aber dennoch sehr wert sein finde ich.

Nichtsdestotrotz ließe sich volles Z-Buffering mit o.g. Scanlinemethode wie vorgeschlagen schneller erledigen als mit baryzentrischen bzw. trilinearen Koordinaten, wenn es denn unbedingt sein muss =)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#3

AW: schnelstmöglich dividieren?

  Alt 27. Mai 2011, 15:25
Ich nutze FrontToBack rendering + Groben TopLevel ZBuffer + PerPixelZbuffer.

Der grobe Buffer Speichert von einem dreieck an den stellen immer nur den Größt möglichen ZWert des dreiecks, so können andere dreiecken deren kleinster ZWert darunter liegt an diesen stellen gleich verworfen, und der ZWert nicht erst interpoliert werden .
Indem ich Die dreiecke in Quadrate unterteile, die die ganz Im Dreieck sind(immer 8*8 pixel), können anhand des ZWerts des quadrats diese stellen vom dreieck halt komplett verworfen werden, was bei meinen scenerien doch schon nen guten schub bietet.(Als Drahtgitter render war gut zu sehen, wie die Gitter anderer objecte hinter vorderen verschwanden, hatte mal zum debuggen nachgeguckt)

Bild ist immoment 512*512 PX groß, die Optimale füllgeschwindigkeit erlaubt im Moment ca 30FPS(GouradShading)
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#4

AW: schnelstmöglich dividieren?

  Alt 27. Mai 2011, 15:45
Eventuell könnte dir vielleicht auch, je nach Komplexität und Polygonanzahl, die Technik des Span-Buffers weiterhelfen...
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: schnelstmöglich dividieren?

  Alt 27. Mai 2011, 16:02
Das heisst, dass dein Wert 7.864.320 op/s für die Ermittlung der Z-Koords nur ein Worst-Case ist gell? Das aber nur am Rande. Nach wie vor bin ich überzeugt, dass diese dual-lineare Interpolation schneller wäre als trilinear (was du jetzt machst).

Ich hatte vor einiger Zeit auch mal einen Artikel zu heaven7 gelesen. Dort wurde mit Hilfe eines Octrees entschieden, ob Punkte tatsächlich getraced werden müssen, oder ob die Szene in dem bereich so simpel ausfällt, dass Interpolation im Screenspace von bereits berechneten Pixeln ausreicht. Das ist zwar ein Raytracer, aber ggf. dennoch eine möglicher weiterverwurstbarer Ansatz zur Optimierung.

Der Span-Buffer ist interessant, riecht aber nach mächtig Overhead. Mag sowas nicht, wenn die Effizienz einer Optimierung je nach Datenlage zur Verschlechterung mutieren könnte
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

AW: schnelstmöglich dividieren?

  Alt 27. Mai 2011, 15:55
Zunächst mal gucken, ob es bestimmte Werte gibt, die fest sind oder nicht jedes mal neu berechnet werden, wie Jumpy in #4 gesagt hat.

Ansonsten könnte auch SSE interessant sein. Die 128Bit breiten Register von SSE bestehen, wenn ich es richtig verstanden habe, aus 4 32Bit breiten Unterregistern, sind also quasi ein Vierer-Vektor. Operationen werden dann immer für alle Register ausgeführt.

Deine 3 Ergebnisse kannst du ja als Dreier-Vektor auffassen. Was du aktuell machst ist ja folgendes:
Delphi-Quellcode:
Ergebnis[1] := (A*X1 + B*Y1 + C*Z1) div Wert;
Ergebnis[2] := (A*X2 + B*Y2 + C*Z2) div Wert;
Ergebnis[3] := (A*X3 + B*Y3 + C*Z3) div Wert;
Mit SSE könntest du (A*X1 + B*Y1 + C*Z1), (A*X2 + B*Y2 + C*Z2) und (A*X3 + B*Y3 + C*Z3) in einen Vektor packen, und dann alle Divisionen in einem Rutsch ausführen!

Ich habe aber selbst noch nicht mit SSE gearbeitet, daher kann ich es nur oberflächlich beschreiben...
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

(?)

LinkBack to this Thread

Erstellt von For Type Datum
Untitled document Post #0 Refback 30. Mai 2011 16:36

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz