.[ ČeskéHry.cz ].
Výkon aplikace (FPS)
Jdi na stránku Předchozí  1, 2, 3, 4  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 6. prosinec 2009, 17:41:35    Předmět: Odpovědět s citátem

Ok... Smile 150FPS je hodně.. jenomže to je hodně na High-End grafice... když to pojede na slabší, tak to letí rychle dolu Smile ... no ale řekněme, že zatím je to až až... ono to s přidáváním vysoce polygonálních modelů zase poletí dolu.. a pak už se LODu nevyhnu (asi budu muset nahodit LOD i na modely... na terén je to imho zatim zbytečné, právě vzhledem k rozlišení)


Jinak ohledně kreslení od nejbližšího po nejdál.
Přehodil jsem to, terén se kreslí, ale částice dělají "bordel"
http://www.perry.cz/files/water-particles-bug.jpg, což byl taky důvod, proč jsem to kreslil od zadu.
Když vypnu ZBuffer, tak to sice vypadá OK, ovšem pak to zase vidím skrz zdi :/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Marek



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

PříspěvekZaslal: 6. prosinec 2009, 18:44:19    Předmět: Odpovědět s citátem

Protože kreslíš částice blbě. Musíš mít na ně vypnutý zápis do zbufferu, ale zapnutý depth test. Průhledné objekty také musíš kreslit až na konec a musíš je kreslit odzadu. Neprůhledné objekty ale kresli standardně odpředu!

Možná tam máš ještě jiný bug a při kreslení scény odzadu se neprojevoval.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 6. prosinec 2009, 19:30:56    Předmět: Odpovědět s citátem

Kreslím je:
kód:

this.device.SetRenderState(RenderState.ZEnable, ZBufferType.UseZBuffer);
...
this.device.SetRenderState(RenderState.ZWriteEnable, false);
this.particles.Render(camera.ViewMatrix * camera.ProjectionMatrix, Matrix.Identity, Environment.TickCount);
this.device.SetRenderState(RenderState.ZWriteEnable, true);


A tohle mi castice maluje tak, ze je vidim skrz zdi. Dělá to ovšm pouze tehdy, pokud scénu kreslím po jednotlivých pásech v CSM. Když celý viewport namluju najednou a pak částice, tak se nakreslí kde mají

Poté co proběhne tento kus kódu to přestane fungovat.
kód:

for (int i = 0; i < stiny.PSSMLevel; i++)
{
  float near =  stiny.SplitDistances[i];
  float far = stiny.SplitDistances[i + 1];
 
  /* zalohujeme si aktualni nastaveni sceny */
  viewPort = this.device.Viewport;
  origViewport = this.device.Viewport;
  origFar = this.camera.CamFar;
  origNear = this.camera.CamNear;
 /* ------ */

 /* upravime vieport a nastavime nove far a near pro kameru */
 viewPort.MinZ = (near - this.camera.CamNear) / (this.camera.CamFar - this.camera.CamNear);
  viewPort.MaxZ = (far - this.camera.CamNear) / (this.camera.CamFar - this.camera.CamNear);
   this.camera.CamFar = far;
  this.camera.CamNear = near;
  this.camera.CreateProjectionMatrix();
  /* ------ */
            
  this.device.Viewport = viewPort; // set up new viewport
  this.effect.SetTexture(xShadowMap, stiny.ShadowMaps[i]);
  this.effect.SetValue<Matrix>(xTextureMatrix, stiny.TextureMatrix[i]);

  this.effect.CommitChanges();
  this.RenderScene(this.camera.ViewMatrix * this.camera.ProjectionMatrix, "MultiTextured", RenderSceneType.WithoutBlendingPass);
 
/* restore viewportu */
  this.device.Viewport = origViewport;
  this.camera.CamNear = origNear;
  this.camera.CamFar = origFar;
  this.camera.CreateProjectionMatrix();
  /* ----------------- */
   
 }


Pokud zavolám jenom
this.RenderScene(this.camera.ViewMatrix * this.camera.ProjectionMatrix, "MultiTextured", RenderSceneType.WithoutBlendingPass);
Tak to funguje normálně.... Nikde tam se ZBufferem nehýbu během této smyčky (v žádné funkci)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 7. prosinec 2009, 09:47:16    Předmět: Odpovědět s citátem

Když se tak dívám na ten zdrojový kód... v jakém jazyce to píšeš? Není to náhodou Java nebo C#?

Nemám proti Javě a C# nic, dnes jsou na grafiku poměrně použitelné, ale věřím, že fps 150 může být způsobeno také právě zvoleným jazykem.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 7. prosinec 2009, 09:55:55    Předmět: Odpovědět s citátem

Tych 150 fps mas po tych desiatich passoch ?

Lebo to vobec nie je zle, mat 150 fps po tom vsetkom co tam stvaras.

K vyssim hodnotam (300-1500 fps) sa dostanes uz fakt iba pri 1-2 passoch a velmi nizkom pocte DX calls a samozrejme pri minimalnej zatazi CPU (ziaden A* a podobne zverstva).
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: 7. prosinec 2009, 10:39:13    Předmět: Odpovědět s citátem

klapauciusk: On ale používá C# de facto jen na "programování" grafické karty (plnění command bufferu), takže tohle opravdu vliv nemá...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 7. prosinec 2009, 15:19:39    Předmět: Odpovědět s citátem

No C# sám o sobě může "užrat" max. 10% výkonu (ani to ne). To ovšem nic nemění na tom, že výše uvedený kód prostě funguje nějak divně a nevidím tam žádný zásadní problém
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Marek



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

PříspěvekZaslal: 7. prosinec 2009, 16:07:55    Předmět: Odpovědět s citátem

Argument "10% výkonu" je zcestný a nevím, proč se tím furt oháníš. V okenní klikací aplikaci je to 0%, v nenáročné 3D aplikaci taky asi 0%, v aplikaci provádějící náročné numerické výpočty to může být mnohem mnohem víc než 10%.

Dále, Visual C++ compiler s každou verzí generuje stále rychlejší kód, ve verzi 2010 se oproti verzi 2008 zrychlil kód přibližně o 10% pro x86 a 15% pro x64. Taky má smysl podotknout, že GCC často generuje ještě rychlejší kód než Visual C++ (ručně ověřeno).
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



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

PříspěvekZaslal: 7. prosinec 2009, 16:25:01    Předmět: Odpovědět s citátem

Eosie napsal:

Dále, Visual C++ compiler s každou verzí generuje stále rychlejší kód, ve verzi 2010 se oproti verzi 2008 zrychlil kód přibližně o 10% pro x86 a 15% pro x64. Taky má smysl podotknout, že GCC často generuje ještě rychlejší kód než Visual C++ (ručně ověřeno).


Pro okení aplikaci, nebo snad pro nenáročné 3D, či dokonce rozsáhlé numerické výpočty? :-D:-D:-D Nebo jen pro obyčejný "průměrný kód", pro který platí i perryho 10%? :-)
_________________
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: 7. prosinec 2009, 16:46:23    Předmět: Odpovědět s citátem

Rozsáhlé numerické výpočty samozřejmě. Na Visual C++ blogu o tom zrychlení taky něco bylo.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 7. prosinec 2009, 17:05:58    Předmět: Odpovědět s citátem

10% jsem našel na diskuzi myslím gamedev. Někde tam rozebírali v nějakém threadu výkon C# / C++ v DirectX a přibližně jim to vyšlo 10% pokles výkonu (jednalo se o aplikaci v XNA).

Imho C# nikdy rychlostí nedosáhne na C++, už jenom třeba pro správu paměti. Co jsem zkoušel tak třeba spoják structů v C# moc ideálně nejde. Interně to sice optimalizuje, ale pokles tam vždycky bude. Třeba Java má ve 3D (Jogl) brutální pokles oproti skoro stejnému kódu v C++, naopak na výpočty zase Java úplně k zahození není (proč by taky kus Matlabu jinak běžel pod Javou)
Na každou věc se trochu hodí něco jiného. Kdyby byl rozdíl výkonu oproti C++ / C# minimální, tak proč by se Dx aplikace hromadně nepsali v C# ? Proč by Microsfot neudělal Managed DX (nebo XNA) pro DX 10/11 ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Marek



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

PříspěvekZaslal: 7. prosinec 2009, 19:10:38    Předmět: Odpovědět s citátem

Měřit pokles výkonu v XNA je k ničemu, tam je tolik jiných faktorů, že výkon C# je až na jednom z posledních míst. Kdyby tam počítali nějaký fyzikální problém pro hodně instancí, pak by to nějakou vypovídací hodnotu mělo.

DX aplikace se moc nepíšou v C# právě proto, že velká část herních platforem ten jazyk nepodporuje. To ale nemá nic společnýho s jeho rychlostí.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 8. prosinec 2009, 10:11:07    Předmět: Odpovědět s citátem

Ani 5%, ani 10%, ale az 84% :

Realny priklad z praxe - prepisovali sme C++ aplikaciu (prehravanie videa) do C# a ta C++ verzia to prehravala o 84% rychlejsie. Kapanek sokujuce, ale je to tak. S tou C# verziou uz nespravime nic, tam je vsetko nadoraz.

Merane v style max throughput - pocet framov co to stihne prehrat (to iste video) za 2 minuty. Tie presuny blokov pamate su pod C# abnormalne pomale.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 8. prosinec 2009, 10:43:59    Předmět: Odpovědět s citátem

boze to je zas OT - tak toho rychle nechte a bezte to resit jinam - tema uz tu bylo
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 11. prosinec 2009, 17:59:47    Předmět: Odpovědět s citátem

Dobrý.. ještě bych měl dotaz, co mám dělat s modely... když jsem od něj daleko, ale stále ho vidím, přijde mi zbytečné kreslit vysoký počet polygonů, jak když stojím před ním.

A za druhé.. stojím na jedné straně, ale kreslím i tu kterou nevidím. Např. Mám velkou loď. stojím a koukám na levobok... a pravobok vůbec nevidím a kreslím ho.. maluji 2x tolik polygonů než potřebuji.

Modely mám načtené z 3d Studia (3ds) ve VB a IB. Loader jsem musel napsat sám Smile
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 -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2, 3, 4  Další
Strana 3 z 4

 
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