.[ ČeskéHry.cz ].
Textury a Shader

 
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: 13. duben 2010, 18:15:49    Předmět: Textury a Shader Odpovědět s citátem

Zdravím všechny,

zajímalo by mě, jak by se dalo elegantně řešit texturování. Momentálně před renderingem každého modelu nastavuju jeho texturu přes setEffectParametr, což mi nepřijde plně ideální. Nejlepší by bylo nahrát si všechny textury předem do shaderu a pak si je jenom vytahovat.
A tady mám právě problém jak to vyřešit ? Používám HLSL a DX 9. Nic jako pole texture samplerů nejde a vytvořit tuny proměných taky nejde, protože pak to nebude moc univerzální pro načtění libovolného modelu...

Napadlo mě třeba používat 3D textury a zapackovat textury pro jeden model to dds (textury, normal mapy, bump mapy apod), ale nevím jestli to neni nějaká čunačina Smile

Díky Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
micky



Založen: 28. 02. 2008
Příspěvky: 348
Bydliště: Plzeň, Praha

PříspěvekZaslal: 13. duben 2010, 18:35:03    Předmět: Odpovědět s citátem

Nemůžu si pomoct, ale nepřijde mi to jako dobrý nápad. SetEffectParameter? Jedná se skutečně o čisté DX9?

Jinak pokud tě irituje přepínání mezi texturami, lze vhodně seřadit jednotlivé části používající materiály tak, aby u sebe byly ty se shodnou texturou...

Pokud tě trápí více textur na model... Už pixel shader 2.0 dokáže používat najednou poměrné velké množství textur.
_________________
https://www.bluepulsar.cz/
https://twitter.com/11thDream_Game/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



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

PříspěvekZaslal: 13. duben 2010, 18:39:16    Předmět: Odpovědět s citátem

No... není to čisté DX, je to pod C#.. používám SlimDX...

Materiály mám seřazené podle textur, ale i tak.. pokud mám 20 modelů a každý má řekněme 2 textury, tak to je 40 přepnutí na 1 scénu.. to mi přijde moc. Když mám na grafice hromadu místa, kam ty textury můžu nahrát.

PS 2 sice může používat hromadu textur, ale nevím jak je tam dostat. Ručně tvořit samplery nejde (teda jde, ale pak bych musel shader přepisovat pro každý nový model) a pole samplerů PS 2 / 3 moc neumí.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
micky



Založen: 28. 02. 2008
Příspěvky: 348
Bydliště: Plzeň, Praha

PříspěvekZaslal: 13. duben 2010, 18:52:18    Předmět: Odpovědět s citátem

Vlastně ani těch 40 přepnutí mi nepřijde nějak vyloženě "zlých". SlimDX jsem si bohužel ještě nevyzkoušel, ale třeba ti někdo poradí lépe. Já bych 40 přepnutí neřešil. Smile
_________________
https://www.bluepulsar.cz/
https://twitter.com/11thDream_Game/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Manox



Založen: 30. 07. 2007
Příspěvky: 140
Bydliště: Brno

PříspěvekZaslal: 13. duben 2010, 18:58:41    Předmět: Odpovědět s citátem

Pole sampleru jde takovou trosku oklikou udelat, pouzivam to v XNA pro shadow mapy.

kód:
texture ShadowMap1;
texture ShadowMap2;
texture ShadowMap3;
texture ShadowMap4;

sampler ShadowMapSamplers[4] = {
sampler_state
{
   Texture = <ShadowMap1>;
   MinFilter = Linear;
   MagFilter = Linear;
   MipFilter = Linear;
   AddressU  = Clamp;
   AddressV  = Clamp;
},
sampler_state
{
   Texture = <ShadowMap2>;
   MinFilter = Linear;
   MagFilter = Linear;
   MipFilter = Linear;
   AddressU  = Clamp;
   AddressV  = Clamp;
},
sampler_state
{
   Texture = <ShadowMap3>;
   MinFilter = Linear;
   MagFilter = Linear;
   MipFilter = Linear;
   AddressU  = Clamp;
   AddressV  = Clamp;
},
sampler_state
{
   Texture = <ShadowMap4>;
   MinFilter = Linear;
   MagFilter = Linear;
   MipFilter = Linear;
   AddressU  = Clamp;
   AddressV  = Clamp;
}};


kod potom

kód:
for (int i = 0; i < lights.Count; i++)
            {
                ...
                material.Parameters["ShadowMap" + (i + 1).ToString()].SetValue((lights[i] as IShadowMapLight).ShadowMapTexture);
            }     


a pouziti v shaderu

kód:
depthFromMap = tex2D(ShadowMapSamplers[i], P0.xy)


Kolik to ovsem snese textur otestovane nemam, nicmene ted mam asi 8 sampleru a v pohode to jede
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: 13. duben 2010, 19:29:21    Předmět: Odpovědět s citátem

Manox:
kód:

depthFromMap = tex2D(ShadowMapSamplers[i], P0.xy)


Tohle z osobni zkusenosti moc spolehlive nefunguje Smile Narazil jsem na pripady, kdy ten shader pri prekladani skoncil errorem :/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Augi



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

PříspěvekZaslal: 13. duben 2010, 20:01:22    Předmět: Odpovědět s citátem

No záleží, kolik daný HW umí samplerů. 8 by snad dnes mohla mít každá karta...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Lando



Založen: 29. 07. 2007
Příspěvky: 33
Bydliště: Cestice

PříspěvekZaslal: 14. duben 2010, 07:09:15    Předmět: Odpovědět s citátem

perry napsal:
.. to mi přijde moc. Když mám na grafice hromadu místa, kam ty textury můžu nahrát.

Textury se defaultne alokujou v pameti graficky karty, takze to misto vyuzijes Wink Rec je jenom o prepinani aktivni textury.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



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

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

Jo... šlo mi jen o to přepínáni aktivních textur Smile Ze mam alokované textury na GPU mě napadlo, když jsem řešil LostDevice Smile

Ohledně 3D textur (Tex3D)... jak je na tom výkon ? Mám totiž několik typů stěn, každá jinou texturu podle ID stěny... a přišlo mi jako dobrý nápad vykreslit všechny stěny jako instance a poslat pozici a ID stěny, které by určovalo vrstvu v 3DTex (stěn je asi 8 typů, takže "vrstvy" nedojdou)
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
Strana 1 z 1

 
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