Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 13. duben 2010, 18:15:49 Předmět: Textury a Shader |
|
|
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
Díky  |
|
Návrat nahoru |
|
 |
micky

Založen: 28. 02. 2008 Příspěvky: 348 Bydliště: Plzeň, Praha
|
Zaslal: 13. duben 2010, 18:35:03 Předmět: |
|
|
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 |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 13. duben 2010, 18:39:16 Předmět: |
|
|
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 |
|
 |
micky

Založen: 28. 02. 2008 Příspěvky: 348 Bydliště: Plzeň, Praha
|
|
Návrat nahoru |
|
 |
Manox

Založen: 30. 07. 2007 Příspěvky: 140 Bydliště: Brno
|
Zaslal: 13. duben 2010, 18:58:41 Předmět: |
|
|
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 |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 13. duben 2010, 19:29:21 Předmět: |
|
|
Manox:
kód: |
depthFromMap = tex2D(ShadowMapSamplers[i], P0.xy)
|
Tohle z osobni zkusenosti moc spolehlive nefunguje Narazil jsem na pripady, kdy ten shader pri prekladani skoncil errorem :/ |
|
Návrat nahoru |
|
 |
Augi

Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 13. duben 2010, 20:01:22 Předmět: |
|
|
No záleží, kolik daný HW umí samplerů. 8 by snad dnes mohla mít každá karta... |
|
Návrat nahoru |
|
 |
Lando
Založen: 29. 07. 2007 Příspěvky: 33 Bydliště: Cestice
|
Zaslal: 14. duben 2010, 07:09:15 Předmět: |
|
|
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 Rec je jenom o prepinani aktivni textury. |
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 14. duben 2010, 11:44:14 Předmět: |
|
|
Jo... šlo mi jen o to přepínáni aktivních textur Ze mam alokované textury na GPU mě napadlo, když jsem řešil LostDevice
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 |
|
 |
|