Diskuze: Úsporná hra

Ostatní jazyky Petr Lite Petr Úsporná hra

Avatar
adam440
Redaktor
Avatar
adam440:

Zdravim,
byl bych rád kdyby ke tutoriálům o Petrovi přibyl článek který by popisoval jak psát úsporný kód který nezatěžuje paměť. Ve 2D to vcelku nevadí protože 2D hry nejsou tak náročné ale ve 3D je to potřeba a já tyhle problémy řeším každou chvíli když v Petrovi programuji 3D hry. A nevím pořádně jak je odstranit.

 
Odpovědět 12.6.2012 17:22
Avatar
Panda38
Redaktor
Avatar
Odpovídá na adam440
Panda38:

Je to tam trochu popsáno, ale ne moc důkladně, protože většina začínajících programátorů na to moc nedbá a spíš by je takové informace odrazovaly.

Hlavní zátěží paměti jsou samozřejmě textury. Petr má bohužel nectnost, že si textury připravuje předem do několika různých formátů (aby se mohl přizpůsobovat různým formátům vyžadovaných rozhraním) a tak jednak načítání textur trvá dost dlouho a jednak každá textura zabere asi 5násobek paměti oproti RGB obrázku. Tedy např. textura 256x256 bodů (RGB nebo paletová, na tom nezáleží) zabere nějak 2562564*5 tj. asi 1 MB paměti (odhad, přesný údaj teď nevím). Proto pro efektivní práci s texturami platí:

Používat textury co nejmenší a spíše sestavovat obraz z menších segmentů. Některé podobné segmenty se dají sdílet mezi více objekty. Například místo potáhnutí stěny domu jednou velkou texturou (která bude v takovém rozlišení stejně rozmazaná) rozdělit na části. Jedna malá textura (např. 16x16) zajistí světelnou mapu osvětlení stěny (lze ji namapovat dokonce na barvy vrcholů), na ni se multitexturingem položí opakovaně povrchový rastr zdi (např. 64x64), případně se může ještě položit třetí vrstva tvořící hrubost povrchu (např. 32x32 s hustším opakováním než povrchový rastr). Na stěnu se přilepí jednotlivé objekty, které budou mít samostatné textury - okna, dveře. Textury oken mohou být sdílené. Oproti přilepení jedné velké textury na dům lze takto dosáhnout mnohem kvalitnějšího vzhledu a přitom textury nezaberou moc v paměti, mohou se sdílet mezi různými typy objektů (používají se jako skládačka) a i načítání i renderování je mnohem rychlejší.

Neefektivní textury lze poznat např. tak (lze se s tím setkat u mnoha začátečnických programů), že po spuštění scény a otáčení kamerou dokola se kamera zadrhává při zobrazení některých míst scény, protože v té chvíli se inicializuje nevhodně veliká textura. Proto je tak trochu záměrně u Lite verze omezena velikost textur - začátečníci to cítí jako omezení, ale ve skutečnosti je to má naučit pracovat efektivně s texturami. Při dobré přípravě objektů se dá i s malými texturami dosáhnout velmi kvalitního vzhledu. Když se podíváte na textury některých profesionálních 3D her, tak je překvapivé jak malé rozměry textur používají a přitom vzhled scény je kvalitní (např. textury v Half Life nebo Hidden&Dangerous, kde jsou textury zpřístupněné jako běžné soubory).

Ještě jedno kritérium - nově načtené textury se v Petrovi po zobrazení udržují ve videopaměti, což také zvyšuje zabranou paměť. Proti tomu lze udělat opatření - občas chvilkově vypnout a zapnout 3D rozhraní, tím se textury z paměti uvolní. To je vhodné dělat např. při přechodu mezi scénami.

Ano, máte pravdu, zdá se že by návody na efektivní texturování daly na samostatný tutoriál.

 
Nahoru Odpovědět 12.6.2012 17:50
Avatar
adam440
Redaktor
Avatar
Odpovídá na Panda38
adam440:

Dík ale mě se zdá že něco to není jen texturami. Dělám na závodní hře v petrovi a mám tam terén načtený z obrázku a když to spustím, chvíli mi to chroustá a pak se na obrazovce objeví že je nedostatek paměti (zabere mi to asi necelých 900 MB operační paměti). A to tam mám prozatím jen jednu texturu, několikrát sem projel kód a vyhodil všechny nepotřebné věci a stejně se mi tam zobrazí totéž. Jinak velikost plochy je asi jen 32x32 a to je podle mě dost málo aby to zabralo tolik oper. paměti.

 
Nahoru Odpovědět 12.6.2012 18:04
Avatar
Panda38
Redaktor
Avatar
Odpovídá na adam440
Panda38:

Myslíte 32x32 velikost obrázku terénu v grafických borech, ne v políčkách, že? Protože 32x32 v políčkách by byl neúnosně velký terén. Terén z 32x32 bodů by to způsoboval běžně neměl, ale může to způsobit v případě, že se nastaví velký stupeň vyhlazení textur, to může velmi zvýšit počet trianglů potřebných na terén.

 
Nahoru Odpovědět 12.6.2012 18:18
Avatar
adam440
Redaktor
Avatar
adam440:

Já myslím velikost plochy - ta je 32x32 políček. Rozhodně ne velikost textury terénu, mám tam asi 128x128 pixelů.

 
Nahoru Odpovědět 12.6.2012 18:32
Avatar
adam440
Redaktor
Avatar
Odpovídá na adam440
adam440:

A ta operační paměť - mě se zdá divný že zpočátku je tam asi jen 100 MB což je hodně ale je to ještě únosné a pak to najednou vyskočí na těch necelých 900.

 
Nahoru Odpovědět 12.6.2012 18:36
Avatar
adam440
Redaktor
Avatar
Odpovídá na adam440
adam440:

Tak nic - už jsem to vyřešil, nevšiml jsem si že mám načítání terénu z výškové mapy zdvojené.

 
Nahoru Odpovědět 12.6.2012 18:40
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.