3D Engine frage



  • Ich lese gerade etwas über eine neue 3D Engine. Diese basiert auf DX9. Doch die Effekte werden auf DX7 und DX8 Karten durch Software realisiert.
    Wie ist den so eine Engine aufgebaut?



  • so:

    ENGINE
                  /      \
                 /        \------------ RENDERER
                /          \
           DIRECTX 9   DIRECTX 8
                             \
                              \
                          DIRECTX 7
    


  • Was 4n7w0rt0r geschrieben hat ist Bullshit.

    Die Engine wurde wohl komplett in DirectX9 geschrieben, und nutzt dann auch einige der neuen Features dieser Grafiklib. Wenn man die Engine jetzt aber auf Grafikkarten ausführt die diese neuen FUnktionen noch nicht können, werden diese eben im CPU berechnet. So ist das.

    Für Informationen über 3D Engines empfehle ich dir die Suchfunktion



  • das ist auch bullshit!!!
    wenn du ein bißchen ahnung hättest wüßtest du daß direct3d in puncto software emulation so gut wie NIX drauf hat!
    also ist das quatsch 😡



  • Original erstellt von <4ntw0r70r>:
    das ist auch bullshit!!!
    wenn du ein bißchen ahnung hättest wüßtest du daß direct3d in puncto software emulation so gut wie NIX drauf hat!
    also ist das quatsch 😡

    @4n7w0rt0r

    was headhunter gesagt hat ist vollkommen richtig und kein bullshit. das einzige was hier bullshit ist ist dein name.

    zu deinem "engine-aufbau":

    es geht hier um directx 7/8 GRAFIKKARTEN nicht die directx-api! wenn jemand eine grafikkarte hat, die nur directx 7 oder 8 kompatibel ist, dann muss man funktionen des directx 9 standards, die nicht im 7er oder 8er enthalten sind per software emulieren. da nützt es dir nichts, wenn du die directx 7 oder 8 api verwendest! also ist das was du da hingeschrieben hast nicht richtig. (wenn du es anders gemeint hast, dann ist dein aufbau sehr schlecht gewählt)

    allerdings glaube ich kaum, das sich jemand (außer microsoft) die mühe macht, den directx 9 standard nachzuprogrammieren, nur um auf allen systemen directx 9 kompatibel zu sein.

    begründung:

    zum einen dürfte die geschwindigkeit einer solchen engine miserabel sein. sie wäre für echtzeitanwendungen nicht zu gebrauchen, vorallem deshalb, weil die pixelshader per software extrem langsam sind.

    der entscheidenste grund aber dürfte sein, das in spätestens zwei jahren 90% aller grafikarten, die von der großen masse der bevölkerung benutzt werden, directx 9 kompatibel sind, und man somit keine emulation mehr braucht. wer hat heute noch eine directx 6 karte? - jeder der moderene spiele spielen möchte auf gar keinen fall.

    wer heute eine neue engine schreibt, die directx 9 emulation unterstützt, der sollte lieber eine engine schreiben, die raytracing und radiosity unterstützt, dann ist er wenigstens directx 13 kompatibel 🙂

    [ Dieser Beitrag wurde am 06.06.2003 um 18:03 Uhr von KXII editiert. ]

    [ Dieser Beitrag wurde am 06.06.2003 um 18:08 Uhr von KXII editiert. ]


  • Mod

    *mitflamenwill*

    die emulation ist wird auf verschiedene weisen realisiert, oft wird jedes kleine bisschen ersatz als emulation beschrieben.

    also als einfache beispiel wären vertexshader, wenn eine graka das nicht in hardware kann, was man gerne haben möchte, kann man die emulieren lassen, dafür kann man beim initialisieren von D3D angeben ob man software/mixed/hardware haben möchte, bei mixed mach d3d soviel mit hardware wie nur geht und sonst per cpu.
    dass das langsamm ist muss ich verneinen, ist sogar sau optimiert. microsoft hat amd und intel gesagt, dass sie deren shadercompiler selbst schreiben dürfen, damit die alles aus der cpu raushollen (dass nannten die wohl support 🙂 ) und somit werden die shader in richtigen cpu-code übersetzt der ISSE/3DNow/MMX unterstützt um alles aus der cpu raus zu hollen, wie effizient das ist kann man sich an der Kyro karte anschauen, mittels treiber kann man dort einschalten, dass die karte "hardware"-shader hat, die werden dann nicht von d3d sondern von den kyro treibern in software gerechnet, leider wohl ca 10% langsammer als d3d das macht.

    weitere dinge die emuliert werden sind highorder surfaces,skinning,...

    aber mit den pixelshadern hat er recht, die wäre fast immer zu langsam in der cpu..
    eigentlich macht man das andersrum, man versucht operationen von der cpu in die shader zu bringen... 🙂

    rapso->greetS();



  • Original erstellt von rapso:
    ***mitflamenwill*

    also als einfache beispiel wären vertexshader, wenn eine graka das nicht in hardware kann, was man gerne haben möchte, kann man die emulieren lassen, dafür kann man beim initialisieren von D3D angeben ob man software/mixed/hardware haben möchte, bei mixed mach d3d soviel mit hardware wie nur geht und sonst per cpu.

    **

    das stimmt zwar, ist aber nur die halbe wahrheit. software/hardware/mixed-vertexprocessing bezieht sich lediglich auf transform and lighting und das ist in jeder 3d-engine notwendig (vertexshader aber nicht), denn ohne transform, egal ob hard oder software, siehts schlecht aus mit 3d-grafik.

    das "vertexshader-konzept" ist ein spezialsystem, mit dem man transform and lighting mit einer art assemblersprache definieren kann, die dann auf modernen karten extrem schnell per hardware ausgeführt wird. das ist flexibler und schneller als die klassische "alte" methode.

    deshalb kann man hardware-vertexprocessing auch ohne vertexshader benutzen.

    da sich hardware- und mixed-vertexprocessing lediglich auf transform and lightung bezieht und pure-hardwarevertexprocessing lediglich auf transform, lighting and shading, gibt es, natürlicherweise, auch noch andere dinge in directx 9, die NICHT standardmäßig "von directx emuliert" werden können. diese muss man dann selber emulieren und das wird dann extrem langsam. (z.b. pixelshader oder spezielles bumpmapping)

    Original erstellt von rapso:
    **

    dass das langsamm ist muss ich verneinen, ist sogar sau optimiert.

    **

    ich habe nicht gesagt, dass DAS (->vertexshader) langsam ist. ich bezog meine ausssage auf die gesamt engine, und gab lediglich ein beispiel (->pixelshader). das einzelteile der engine mit akzeptabler geschwindigkeit ablaufen können ist selbstverständlich.



  • Es wird einmal ein DX9 Renderer programmiert und einer für DX7 und DX8. Dadurch wird die Anwendung langsamer. Wenn die Grafikkarte keine DX9 unterstützt.


  • Mod

    schön dass du mir zustimmst, auch wenn's viel text ist @ KXII

    rapso->greets();


Anmelden zum Antworten