Diskuze: Úsporná hra

Tvůrce

Zobrazeno 7 zpráv z 7.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
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.
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.
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.
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.
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é.
Zobrazeno 7 zpráv z 7.