.[ ČeskéHry.cz ].
laicky popis herniho engine
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Popelnice
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
SamanCZ



Založen: 11. 04. 2011
Příspěvky: 10

PříspěvekZaslal: 11. duben 2011, 12:22:44    Předmět: laicky popis herniho engine Odpovědět s citátem

Ahoj, jsem grafik pracujici prevazne na hrach cca 11 let, nekteri me mozna znaji i z jinych for o grafice a HW

A ted k memu dotazu, v jednom nejmenovanem foru na jinem serveru jsem se zapojil do diskuze o tom jaky je spravny pomer mezi poctem poly a poctu textur pri pouziti do herniho engine.
Ciste a jednoduse muj text byl rozcupovan a proto bych rad jestli by se nasel nejaky programator ktery by byl ochoten zde jednoduse v jednotlivich bodech napsat co se deje s modelem/scenou od prvnich kroku az k samotnemu zobrazeni v zavislosti na HW a to s ohledem na vertexi, poly/faces a textury. Aby to muj text bud potvrdilo/vyvratilo, nebo opravilo kde tedy mam ve znalostech teto problematiky chyby.

Ja jsem napsal ze CPU spocita podle polohy modelu a poloh jednotlivich vertexu daneho modelu normaly/polygony/faces aby GPU vedelo kde ma dane normaly/poly/faces zobrazit a dale s nima pracovat, a tyto data posle GPU ktere s temy daty dale pracuje a dopracuje se as k finalovemu obrazu.
Zkracene jsem to shrnul tak ze CPU by melo problem s prilisnym mnozstvim vertexu a naopak GPU by zase melo problem s prilis mnoho texturama (pokud by se nevesli do pameti) proto pouzivame LODy a take mene textur (ne desitky textur na jediny objekt).

diky
_________________
www.stepanprokop.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
frca



Založen: 28. 07. 2007
Příspěvky: 1561

PříspěvekZaslal: 11. duben 2011, 12:48:44    Předmět: Odpovědět s citátem

Opravdu je to trochu jinak. Dnes už jsou na moderních GK uložené i vertexy, a ty se transformují na GPU. Pro grafický výkon není ani tak zásadní velikost paměti (laicky řečeno kolik se tam vejde textur apod.), jako výkon samotného jádra grafického procesoru a kvalita ovladačů.

K počtu textur na objekt: Je lepší, když je na objektu namapována jedna textura o velikosti 1024x1024 než 4 textury každá o velikosti 512x512. Paměti zabírají stejně, ale problém je to přepínání mezi nimi, které trvá nějakou dobu. Tady už to ale není o výkonu nebo o velikosti paměti, ale o lenosti grafiků.
_________________
www.FRANTICWARE.com


Naposledy upravil frca dne 11. duben 2011, 12:57:32, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 11. duben 2011, 12:53:38    Předmět: Odpovědět s citátem

Ahoj,
je to samozřejmě trochu komplikovanější, než si napsal. Každý engine si to může samozřejmě dělat po svém a určitě se najdou i enginy, které počítají spoustu věcí na CPU - zvlášť na některé konzole. Ale převážně to dnes funguje takto:

- načtený model se skládá z nějaké hierarchie objektů (auto, na něj jsou připojena kola, dveře na kterých jsou zrcátka, ...):

- Každý ten objekt (auto, kolo, ...) má typicky referenci na Vertex Buffer, Index Buffer a Materiál - tj. reference na Shader, (nebo effekt, chceš-li) a jeho nastavení (diffuse texture, specular, ...).

- Vertex a Index buffery obsahují geometrii modelu a jsou nahrané v grafické paměti (VRAM).

- Shadery jsou programy nahrané rovněž v grafické paměti, které mají za úkol zobrazit geometrii obsaženou ve Vertex a Index bufferu na obrazovku.

- V shaderech se počítá transformace modelu (tzn. posune, otočí, ... všechny vertexy objektu). A tady je to, na co ses ptal: vertexy (normály, ...) se transformují na GPU.

- Když má objekt hodně vertexů, musí GPU provést hodně operací s vertexy. Musí je provést i v případě, že objekt je v dálce a je velký několik pixelů. Z tohoto důvodu se používají LODy.

- Operace s pixely (to jsou ty textury, o kterých jsi mluvil) brzdí v případě, že doba potřebná pro vykreslení všech pixelů objektu je delší, než doba potřebná pro transformaci všech jeho vertexů. Záleží tedy na rozlišení a na tom, jak jsi k objektu blízko. Dnes většinou ve hrách brzí právě tyto operace.

- Takže: záleží na scéně, pokud máš třeba malou místnost, nemají lody prakticky cenu, ale pokud kreslíš les, musíš je udělat.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
SamanCZ



Založen: 11. 04. 2011
Příspěvky: 10

PříspěvekZaslal: 11. duben 2011, 13:26:07    Předmět: Odpovědět s citátem

Vseobecne me zajimalo hlavne to, jak se na celem procesu podili hlavne CPU, tedy otazka toho jak moc CPU vadi pokud ma model spousty vertexu, poly/faces.

rozdil rekneme model auta s 10tisic vertexi nebo 1milion vertexu, jak moc rozdilne to pro CPU je/bude z hlediska toho co musi spocitat (vertexi uvadim proto, ze me nejcasteji limity zadavaji firmy prave ve vertexech, nikoliv v poly/faces)

a to i treba z hlediska Fyziky kterou dnes ma nastarosti prevazne CPU, fyzika na GPU je pak jinej pripad, ale to je dnes tusim jen pripad GPU-PhysX, ostatni fyziky na GPU jsou rozsirene myslim spise sporadicky, pokud vubec
_________________
www.stepanprokop.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 11. duben 2011, 13:37:32    Předmět: Odpovědět s citátem

Při kreslení, je procesoru jedno, jestli model auta bude mít 1000 vertexů, nebo 1 000 000. Ale GPU je taky procesor a tomu to už jedno neni. Proto jsou tu limity.

CPU používá geometrii modelu typicky při nějakém efektu, kdy je potřeba provést kolizi s trojúhelníky - z firem, kde jsi pracoval, jistě znáš pojem "decaly" - když se do něčeho střelí, je potřeba detekovat přesně kolizi a vytvořit tam dírku. Nicméně v takovém případě se transformuje spíše přímka (trasa střely) do prostoru objektu. Tudíž opět nejde o počet vertexů, ale o počet trojúhelníků při kolizi.

Fyzika většinou používá vlastní modely nezávislé na grafice. Ještě jsem neviděl, že by to bylo jinak.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 11. duben 2011, 14:39:10    Předmět: Odpovědět s citátem

SamanCZ napsal:
Vseobecne me zajimalo hlavne to, jak se na celem procesu podili hlavne CPU, tedy otazka toho jak moc CPU vadi pokud ma model spousty vertexu, poly/faces.


Až na nějaké specifické algoritmy pro animace nedělá CPU s modelem nic. Jak řekl semoš, fyzika používá vlastní modely.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 11. duben 2011, 14:50:35    Předmět: Odpovědět s citátem

Jo. CPU vypočítá (příp. jen předá z fyziky) maximálně matice (16 čísel), které udávají pozici/natočení/scale modelu - vlastní transformaci vertexů dělá až GPU.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Jack M.A.X.



Založen: 28. 07. 2007
Příspěvky: 60

PříspěvekZaslal: 11. duben 2011, 15:53:53    Předmět: Odpovědět s citátem

Měl bych dotaz k tomu, co zmínil frca
kód:

K počtu textur na objekt: Je lepší, když je na objektu namapována jedna textura o velikosti 1024x1024 než 4 textury každá o velikosti 512x512. Paměti zabírají stejně, ale problém je to přepínání mezi nimi, které trvá nějakou dobu. Tady už to ale není o výkonu nebo o velikosti paměti, ale o lenosti grafiků

Dost často se ke mně dostávají modely, které jsou takto vytvořené. Zajímalo by mě, jak moc velký dopad to má na výkon?
Jestli to má vůbec cenu řešit, když je na scéně jen pár desítek modelů.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
SamanCZ



Založen: 11. 04. 2011
Příspěvky: 10

PříspěvekZaslal: 11. duben 2011, 15:58:12    Předmět: Odpovědět s citátem

diky za odpovedi
_________________
www.stepanprokop.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
nou



Založen: 28. 07. 2007
Příspěvky: 1050

PříspěvekZaslal: 11. duben 2011, 17:12:54    Předmět: Odpovědět s citátem

no kazda tetura navyse znamena zbytocny drawcall navyse. pri par modeloch to samozrejme nema zmysel ale pri stovkach uz ano.

ono to zacne potom limitovat procesor ktory nezvlada viac drawcall.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 11. duben 2011, 20:21:31    Předmět: Odpovědět s citátem

citace:
no kazda tetura navyse znamena zbytocny drawcall navyse. pri par modeloch to samozrejme nema zmysel ale pri stovkach uz ano.

ono to zacne potom limitovat procesor ktory nezvlada viac drawcall.

Na druhou stranu texturové atlasy se podstatně hůře anizotropně filtrují. Drawcalls afaik dneska už problém nejsou ani při stovkách modelů (už není doba Pentia III). Problém nastane až když drawcalls bude opravdu hodně (několik desítek, možná až stovek milionů, což snad ani nejde, pokud použijete nějakou správu scény).
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 11. duben 2011, 20:46:14    Předmět: Odpovědět s citátem

Vilem Otte> Draw calls je menší problém jenom u profi enginů (instancing atd.) Setkal jsem se i s enginy, které mají mnohem horší limity. Bez instancingu si toho moc nevykreslíš.

Průměrný amatérský engine (žádnej kick-ass ego-fap shader-heavy high-tech engine) plynule zvládne cca 1000 draw calls (příkaz 'renderuj') za snímek. Některé enginy zvládnout míň, třeba 200, a některé i statisíce, ale to jsou spíš ty profi. Odvíjí se to hodně od rychlosti CPU, GPU klidně můžete mít i z budoucnosti, ničemu nepomůže.

Každá změna textury, parametru materiálu (třeba barva), změna pozice nebo rotace = nový draw call. Každej submesh = nový draw call.

Každej model vám může vygenerovat i 30 draw calls a pokud máte limit 500, hru prostě neuděláte. Co s tím?

1) Textury celého modelu (nebo i více modelů) sloučit do jedné.
2) Když se mění parametry materiálu pro každou část modelu, dejte je do textury (různé specular a gloss mapy jsou právě hodnoty materiálu v textuře).
3) Všechny části modelu musíte sloučit, aby to byl celistvej neoddělitelnej kus geometrie.
4) Když jste něco udělali špatně, programátor vám to velmi rád vrátí na přepracování.

Sranda to přestává být, když takhle musíte slučovat i více modelů. Např. produkty ve výloze. Všechny musíte sloučit do jednoho modelu, i kdyby jich bylo 20! (včetně textur!) Jinak to uprostřed města prostě nevykreslíte.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 11. duben 2011, 21:06:05    Předmět: Odpovědět s citátem

Já mívám obvykle pár tisíc maximálně (pokud renderuji přes rasterizaci), ale vše je završeno v BVH (což v tomto případě hodně ušetří).

1.) Slučování textur jo, ale jen do určité velikosti a jen pro modely relativně blízko sebe (ať pracuje dobře LOD), při příliš velkých texturových atlasech by byl texture read a texture access velmi náročný na GPU (lookup do 512x512 textury je méně náročný než lookup do 4096x4096 textury).

2.) Zpravidla toto platí vždy (hlavně pokud chceme mít různé stínování pro pár submeshů, kdy by nás přepínání parametrů pro shadery výkonově docela zabilo).

3.) Statický model do jediného draw callu - jo, ale! Lepší ho dynamicky rozkouskovat na několik větších sektorů a prostě sektory co nejdou vidět ani nekreslit (a tím pádem všechny dynamické objekty uvnitř neviděných sektorů). Nejlepší je hodit ho do jediného kusu a pak rozkouskovat.

4.) Přepracovávat modely je docela drastické řešení. Ale také funguje ... horší pak pro toho, kdo vývoj platí (ten se pak jo prohne).

Další věc je místo malých shaderů používat ubershader (zase je třeba vyladit náročnost ubershaderu proti více malým shaderům - více malých je horší pro CPU, ubershader pro GPU).

Uprostřed města to sranda často je Twisted Evil když pak dojde k tomu, abys musel mít spoustu typů budov a začal slučovat texturu pro celou budovu (včetně obsahu výlohy) do jedné na 2048x2048 mapu a udržel dostatečnou kvalitu - to je taky sranda.
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
franz



Založen: 30. 07. 2007
Příspěvky: 1325

PříspěvekZaslal: 12. duben 2011, 11:55:51    Předmět: Odpovědět s citátem

Také bych se zeptal na výkon Arrow je nějaký rozdíl mezi použitím scale=1 a scale=0.002151541 ? Tím myslím měřítko veškeré geometrie.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 12. duben 2011, 12:09:21    Předmět: Odpovědět s citátem

Samotná skutečnost, že v matici jsou jiný čísla, pokles výkonu nezpůsobí Smile Ale pokud bude např. objekt na obrazovce kvůli tomu větší, tak se musí rasterizovat více pixelů a to se jistě na výkonu projevit může.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Popelnice Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna