Voor zover ik weet kun je dat soort taken allemaal door je videokaart uit laten voeren tegenwoordig
Sorry, maar dan heb je een totaal verkeerd beeld wat een videokaart precies kan, namelijk pixels plotten waarbij per pixel een programmaatje uitgevoerd wordt. Als je echter alle polygonen en alle lichten naar de GPU stuurt dan verzuipt ie in de data. Daar is aansturing voor nodig vanaf de CPU. Waarom denk je dat er 3D engines gemaakt worden, als de videokaart het toch allemaal zelf kan? Visible surface determination is een heel belangrijk proces in een 3D engine. Ik zal eens een globale omschrijving geven hoe dat er in Tomb Raider en Deus Ex 3 aan toe gaat, aangezien ik die code heb geschreven.
De wereld is effectief opgedeeld in cells, die weer verbonden zijn middels portals. De cell structuur staat opgeslagen in een bsp tree, zodat je makkelijk voor een willekeurig punt uit kunt vogelen in welke cell hij staat. Dit wordt oa gedaan voor alle objecten in de wereld, zodat deze in de cells geplaatst kunnen worden. Ook voor de camera en de lichten. Vervolgens wordt er vanuit het camerapunt door de cells heen getraced. In eerste instantie begin je met view volume die gelijk is aan het
view frustum in de start cell. Vervolgens wordt, voor elke cell die je tegenkomt, het view volume aangepast aan de hand van de occluders die in de cell staan (dit zijn grove objecten waar je niet doorheen kunt kijken - handig voor bepaalde muurtjes die niet groot genoeg zijn om de cellstructuur daarvoor aan te passen). Dan wordt met dat volume alle objecten in die cell getest, en alle objecten waarmee het volume snijdt worden aangemerkt als 'zichtbaar'. Vervolgens worden alle portals in de cell langsgelopen, en wordt het viewvolume aangepast zodat alleen het gedeelte dat door de portal gaat overblijft, en met dat nieuwe volume begint het hele proces in de aansluitende cell van voor af aan. Net zo lang tot je niet meer verder kan. Zo'n zelfde proces gebeurt ook voor de lichten in de wereld. Natuurlijk zijn er tal van optimalisaties die ervoor zorgen dat er dingen niet meerdere keren berekend hoeven te worden, zodat de boel snel blijft draaien.
Nou kun je voor een dergelijk proces ook wel deels een GPU inzetten, maar dat gaat wel ten koste van je daadwerkelijke graphics en daarnaast is een CPU veel beter in al die hierarchische structuren en het aanspreken van geheugenplekken op willekeurige locaties (waar de GPU het meer moet hebben van gelijkwaardige parallelle berekeningen met geheugen waarin alles mooi bij elkaar staat)
Een videokaart een veredelde polyfiller noemen is wel wat kort door de bocht, je kunt er zelfs video mee laten decoderen (bv VDPAU).
Ja duh, weet je hoe ze dat doen? Meerdere passes een full-screen quad tekenen met de decoding logic in de pixel shader. Wellicht dat dat voor jou allemaal zo bijzonder is, maar wat mij betreft niet heel erg
[Reactie gewijzigd door .oisyn op 3 augustus 2024 00:59]