játékfejlesztés.hu
FórumGarázsprojectekCikkekSegédletekJf.hu versenyekKapcsolatokEgyebek
Legaktívabb fórumozók:
Asylum:    5511
FZoli:    4894
Kuz:    4455
gaborlabor:    4449
kicsy:    4304
TPG:    3402
monostoria:    3284
DMG:    3172
HomeGnome:    2919
Matzi:    2529

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2198
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1654
syam:    1491
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] > 21 < [22]
TPG - Tag | 3402 hsz       Online status #27331   2006.08.24 08:20 GMT+1 óra  
Idézet
kuzanth :
Köv. kérdés : És mi van akkor, ha nem tudod, hogy hány textúrával kell dolgoznod?


Maximálod a textúrák számát mondjuk 8-ban, csinálsz hozzá samplereket és csinálsz 8 shadert 8 technique-val. Az első shader és a hozzá tartózó tec 1 texre működik, a második kettőre a harmadik háromra stb egészen nyolcig.
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #27285   2006.08.24 04:06 GMT+1 óra  
Kód:
float4x4 ModelWorld;
texture texture0;
texture texture1;

sampler MeshTextureSampler0 =
sampler_state
{
   Texture = <texture0>;
   MipFilter = LINEAR;
   MinFilter = LINEAR;
   MagFilter = LINEAR;
};

sampler MeshTextureSampler1 =
sampler_state
{
   Texture = <texture1>;
   MipFilter = LINEAR;
   MinFilter = LINEAR;
   MagFilter = LINEAR;
};

struct a2v
{
    float4 Position     : POSITION;
    float2 Texcoord0 : TEXCOORD0;
    float2 Texcoord1 : TEXCOORD1;
};

struct v2p
{
    float4 Position      : POSITION;
    float2 Texcoord0  : TEXCOORD0;
    float2 Texcoord1  : TEXCOORD1;
};

struct p2f
{
   float4 Color : COLOR0;
};

void vs( in a2v IN, out v2p OUT )
{   
    OUT.Position     = mul(IN.Position, ModelWorld);
    OUT.Texcoord0 = IN.Texcoord0;
    OUT.Texcoord1 = IN.Texcoord1;
}

void ps(in v2p IN, out p2f OUT)
{
   OUT.Color = tex2D(MeshTextureSampler0, IN.Texcoord0) +
                           tex2D(MeshTextureSampler1, IN.Texcoord1);
}

Tehát valahogy így? A hangsúly végülis a pixelshaderen van, mert a többit tk. ugyanúgy csináltam. Bár a ps-ben én float4-et használok, de ez nem okoz gondot asszem.

Köv. kérdés : És mi van akkor, ha nem tudod, hogy hány textúrával kell dolgoznod?
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
TPG - Tag | 3402 hsz       Online status #27155   2006.08.23 07:46 GMT+1 óra  
Kód:
texture ATex;
texture BTex;
float4x4 WVP;

sampler2D ATexSamp = sampler_state
{
        texture = <ATex>;
MinFilter=linear;
MagFilter=linear;
MipFilter=linear;
};

sampler2D BTexSamp = sampler_state
{
        texture = <BTex>;
MinFilter=linear;
MagFilter=linear;
MipFilter=linear;
};

struct VertexInput
{
float4 Pos : POSITION;
float2 Tex0 : TEXCOORD0;
float2 Tex1 : TEXCOORD1;
};

struct VertexOutput {
    float4 PositionOut : POSITION;
    float2 Tex0Out: TEXCOORD0;
    float2 Tex1Out: TEXCOORD1;
};

VertexOutput VS_Transform(VertexInput IN)
{
       VertexOutput OUT;
       OUT.PositionOut = mul(IN.Pos,WVP);
       OUT.Tex0Out = IN.Tex0;
       OUT.Tex1Out = IN.Tex1;
       return OUT;
}

float4 PS_SampleTexture(VertexOutput IN) : COLOR0
{
float3 Output = {0.0f,0.0f,0.0f};
        Output = tex2D(ATexSamp,IN.Tex0Out) + tex2D(BTexSamp ,IN.Tex1Out);
        return float4(Output,1.0f);
}

technique Tec
{
    pass p0
    {
VertexShader = compile vs_1_1 VS_Transform();
PixelShader = compile ps_1_1 PS_SampleTexture();
    }
}

Ennek elvileg működnie kell. A kód feltételezi hogy a két texhez két külön textúrakoordináta tartozik.
Reality is almost always wrong. - House

   
TPG - Tag | 3402 hsz       Online status #27154   2006.08.23 07:30 GMT+1 óra  
Idézet
kuzanth :
És már itt is van a következő kérdés, amit eddig a 3DStudio topicban tárgyaltunk :
Ha egy modellnek több diffuse textúrája is van, azokra hogyan kell hivatkozni a shaderben, mert az alábbi megoldás úgy látszik nem jó :
Kód:
struct a2v
{
    float4 Position : POSITION;
    float2 Texcoord0 : TEXCOORD0; //elvileg mindig ez az 1. diffuse textúra, amivel nincs is baj
    float2 Texcoord1 : TEXCOORD1; //de ezt már nem fogadja el, mert csak sima material színe lesz a modellnek
};

struct v2p
{
    float4 Position  : POSITION;
    float2 Texcoord0  : TEXCOORD0; //ez a kettő ugyanaz, mint előbb
    float2 Texcoord1  : TEXCOORD1;
};

A vertex shaderben pedig :
Kód:
void vs( in a2v IN, out v2p OUT )
{   
    OUT.Position = mul(IN.Position, ModelWorld); //ez most lényegtelen
    OUT.Texcoord0 = IN.Texcoord0;
    OUT.Texcoord1 = IN.Texcoord1;
}

Ha a vs-ben mind a két helyre IN.Texcoord0-t írok, akkor ugyan csak az első textúrával, de jól jelenik meg a modell, de ha így írom, mint itt fent, akkor a modellnek ilyen érdekes sárgás-barnás színe lesz. Mi lenne a jó megoldás?


A két külön textúrához meg van a két külön sampler? És külön textúrakoordináta tartozik vertexenként a textúrákhoz? Van Pixel Shader rész is vagy csak Vertex Shader üzemel? Hogy néz ki a Pixel Shder kódja?
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #27135   2006.08.23 05:30 GMT+1 óra  
Ez a megoldás, amit mindketten írtunk, miszerint :
OUT.Texcoord0 = IN.Texcoord0;
OUT.Texcoord1 = IN.Texcoord0;
csak az egyik textúrát rakja rá a modellekre (és ez az ami zavar, mert mindkét kockára rárakja). Ez már csak azért is fura, mert ha ez tényleg csak az első koordot használja, akkor a második kockán elvileg nem lehetne semmilyen textúra!!! Egyébként érthető a problémám, vagy próbáljam részletezni?
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
warlock - Törzstag | 704 hsz       Online status #27134   2006.08.23 05:24 GMT+1 óra  
nem tom te írtad

   
Kuz - Törzstag | 4455 hsz       Online status #27133   2006.08.23 05:20 GMT+1 óra  
Az .x fileban elvileg két textúrakoordináta is van (gondolom ez a két diffuse texkoord.), tehát elvileg úgy kellene írni, ahogy leírtam. Lehet, h csak az a probléma, hogy erre a progim nagyívből ..... és csak 1 texkoordot küld át? De akkor hogy kell előcsalni a másikat ???
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
warlock - Törzstag | 704 hsz       Online status #27129   2006.08.23 05:08 GMT+1 óra  
nah bár én nem vagyok mestere a dolognak de TEXCOORD1 a 2. texcoordlenne a vertexhez
namármost nagyon vszínű hogy csak egy 1 texcoordot küldesz át vagyis a jó megoldás:

OUT.Texcoord0 = IN.Texcoord0;
OUT.Texcoord1 = IN.Texcoord0;

   
Kuz - Törzstag | 4455 hsz       Online status #27121   2006.08.23 04:03 GMT+1 óra  
És már itt is van a következő kérdés, amit eddig a 3DStudio topicban tárgyaltunk :
Ha egy modellnek több diffuse textúrája is van, azokra hogyan kell hivatkozni a shaderben, mert az alábbi megoldás úgy látszik nem jó :
Kód:
struct a2v
{
    float4 Position : POSITION;
    float2 Texcoord0 : TEXCOORD0; //elvileg mindig ez az 1. diffuse textúra, amivel nincs is baj
    float2 Texcoord1 : TEXCOORD1; //de ezt már nem fogadja el, mert csak sima material színe lesz a modellnek
};

struct v2p
{
    float4 Position  : POSITION;
    float2 Texcoord0  : TEXCOORD0; //ez a kettő ugyanaz, mint előbb
    float2 Texcoord1  : TEXCOORD1;
};

A vertex shaderben pedig :
Kód:
void vs( in a2v IN, out v2p OUT )
{   
    OUT.Position = mul(IN.Position, ModelWorld); //ez most lényegtelen
    OUT.Texcoord0 = IN.Texcoord0;
    OUT.Texcoord1 = IN.Texcoord1;
}

Ha a vs-ben mind a két helyre IN.Texcoord0-t írok, akkor ugyan csak az első textúrával, de jól jelenik meg a modell, de ha így írom, mint itt fent, akkor a modellnek ilyen érdekes sárgás-barnás színe lesz. Mi lenne a jó megoldás?
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
Kuz - Törzstag | 4455 hsz       Online status #23895   2006.08.03 04:29 GMT+1 óra  
Leteszteltem azt az előbb említett 'null'-os dolgot, de még azt is megpróbáltam, hogy nem létező textúrát próbáltam átadni. Természetesen egyik sem sikerült, így várom továbbra is a segítségeket!
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
Kuz - Törzstag | 4455 hsz       Online status #23872   2006.08.03 01:47 GMT+1 óra  
Nos? Valaki?
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
Kuz - Törzstag | 4455 hsz       Online status #23715   2006.08.02 03:32 GMT+1 óra  
Már sikerült megírnom egy működő textúrázó shadert, viszont felmerült az a kérdés, hogy ha egy objectnek több textúrája is van, azt általánosan hogy szokás lekezelni? Feltételezem nem kell megírni 85 samplert, aztán ahol nincs textúra ott Null-t átadni, hanem biztos van erre vmi frappáns megoldás...? Avagy minden egyes objectnek külön shadert kell írni ? Gondolom nem, mert érdekes lenne egy RPG játékban a kismillió object mellett ugyanennyi shader ...
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
ferchild - Törzstag | 815 hsz       Online status #23586   2006.08.01 04:40 GMT+1 óra  
effect.SetValue("SceneTexture", meshTexture);
effect.CommitChanges();


ahol effect = Effect class
SceneTexture a shaderben textura változó
meshTexture = texture object
Feci Barath (by Kuz)
XD
http://már nem elérhető...új lesz
   
Kuz - Törzstag | 4455 hsz       Online status #23579   2006.08.01 04:08 GMT+1 óra  
Következő kérdésem : ha van egy shader, ami a textúrával foglalatoskodik, annak hogy kell átadni magát a textúrát?
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
beast - Törzstag | 1241 hsz       Online status #22660   2006.07.24 05:24 GMT+1 óra  
Sztem az jó érték!

   
Kuz - Törzstag | 4455 hsz       Online status #22659   2006.07.24 05:18 GMT+1 óra  
Lenne egy általánosabb kérdésem is! Nézzétek már meg ezt a képet, plíz! Szerintetek ezek az értékek (10125 vertices átlag 960-970 fps-sel) mennyire elfogadhatóak (háttérben egy diffuse+light shader megy)?
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
Kuz - Törzstag | 4455 hsz       Online status #22658   2006.07.24 05:00 GMT+1 óra  
Ha valakit érdekel (főleg a kezdőket), itt a működő változat. Ez a shader elvileg a bejövő object színét (helyesebben annak árnyalatát) változtatja (azaz pl. világos zöldből átmegy sötét zöldön keresztül feketéig, majd vissza). A 'szam' változó 1.0f-től -1.0f-ig megy 0.005f közökkel, majd visszafelé, így azt fogjuk (általában) tapasztalni, hogy egyszer elhalványul az object, egyszer pedig felerősödik a szín. És itt van még egy gond! Néha, amikor az .exe-ről indítom a progit, csak a fekete hátteret látom, és az fps érték ugyanannyi, mintha rendesen kirajzolna mindent (gondolom számolni számol, csak nem jelenít meg semmit az objectből). Ez miért lehet??? Fordítási és egyéb hibákat nem generál sem a shader, sem a progi, ráadásul nem is nyúltam hozzájuk a legutolsó működő verzió után! Még1x mondom, csak néha fordul elő ez a hiba!

Kód:
float4x4 worldMatrix;  // World matrix for object
float4x4 worldViewProjection; // World * View * Projection matrix
float szam;

struct a2v
{
   float4 Position : POSITION;
   float4 Color : COLOR0;
};

struct v2p
{
   float4 Position : POSITION;
   float4 Color : COLOR0;
};

struct p2f
{
   float4 Color : COLOR0;
};

//VERTEX SHADER
void ves(in a2v IN, out v2p OUT )
{
   OUT.Position = mul(IN.Position,worldViewProjection);
   OUT.Color = IN.Color;
}

void pixs(in v2p IN, out p2f OUT)
{
   OUT.Color = mul(IN.Color,szam);
}

//--------------------------------------------------------------------------------------
// Techniques
//--------------------------------------------------------------------------------------
technique RenderScene
{
    pass P0
    {
vertexshader = compile vs_1_1 ves();
pixelshader  = compile ps_1_1 pixs();
    }
}
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
Kuz - Törzstag | 4455 hsz       Online status #22233   2006.07.20 04:03 GMT+1 óra  
Bár még nem tudtam letesztelni, de találtam egy hibát! A shader első változója 'world' néven fut, a setValue-nál viszont worldMatrix-ot írtam! Csúnya hiba , így hát elnézést kérek! Ha még mindig nem lesz jó, akkor szólok!
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
TPG - Tag | 3402 hsz       Online status #22075   2006.07.19 08:02 GMT+1 óra  
Idézet
kuzanth :
Ahogy nézegettem az eddigi hozzászólásokat, megakadt a szemem TheProGamer shader-jén, ami szintén fényt használ. Ott viszont float4-et láttam, én viszont float3-at találtam az egyik .fx-ben, amiből a kódot is kiloptam. Most akkor mi is az a float3, ill. float4?


Pozíciókra jobban szeretek float4-et használni, kitudja mikor jöhet olyan eset mikor hirtelen jól jön hogy homogén koordinátás alakban van a cucc.
Reality is almost always wrong. - House

   
ferchild - Törzstag | 815 hsz       Online status #22062   2006.07.19 05:54 GMT+1 óra  
float3 : 3 komponensű vektor melynek az elemei lebegőpontos számok. Van egy implicit 4. eleme is ennek a vektornak (mert minden ilyen vektor a shaderekben 4 elemű) és az 1.0f -fel egyenlő.
pl: float4 Positionav : POSITION0; itt rendre a következők : X,Y,Z,1.0f ha homogén vágás után vagy


float4: 4 elemmel ugyanaz itt mind a 4 elemet te adod meg.
pl: float4 Colorpf : COLOR0; és itt minden egyes elem sorra ezt jelenti R,G,B,A

a lightpost szerintem jól adtad meg mert nem ott szállt el
a hiba szerintem az
Kód:
effect.SetValue("worldMatrix", mat);

sorban lesz..........a hiba lehetséges forrásai:

effect == null.......baj a betöltéskor van
|
mat != érvényes paraméter -> mat nem Matrix típus vagy nem létezik, vagy null vagy mittudoménmiértdenemjó
|
nincs kiválasztva technique


ui: lehet, hogy más az oka......nem tudom én sem. Nehéz shadert debugolni távolról. Ez nekem egy kicsit mindig olyan mint a felhívom a nagy mágust telefonon és megkérem hogy had érezzem már a bizyergést és meleget a fájós bokámban amit úgy küld nekem
Feci Barath (by Kuz)
XD
http://már nem elérhető...új lesz
   
Kuz - Törzstag | 4455 hsz       Online status #22054   2006.07.19 04:45 GMT+1 óra  
Ahogy nézegettem az eddigi hozzászólásokat, megakadt a szemem TheProGamer shader-jén, ami szintén fényt használ. Ott viszont float4-et láttam, én viszont float3-at találtam az egyik .fx-ben, amiből a kódot is kiloptam. Most akkor mi is az a float3, ill. float4?
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
Kuz - Törzstag | 4455 hsz       Online status #22031   2006.07.19 03:30 GMT+1 óra  
Több helyről próbáltam összeollózni egy fény-shadert. Mivel ez a második shaderem, ezért nem akartam nagy dolgot csinálni (az első csak a bejövő .X object színét változtatta), viszont nem a szokásos helyen akad ki a progi, azaz nem az effect = Effect.FromFile(...)-nál, hanem a második effect.SetValue(...)-nál! Íme a shader :

Kód:
float4x4 world;  // World matrix for object
float4x4 worldViewProjection; // World * View * Projection matrix
float szam; //float a színek folyamatos változtatásához

struct a2v
{
   float4 Positionav : POSITION0;
   float3 Normalav : NORMAL0;
};

//vertex to pixel shader structure
struct v2p
{
   float4 Positionvp : POSITION0;
   float4 Colorvp : COLOR0;
};

//pixel shader to screen
struct p2f
{
    float4 Colorpf : COLOR0;
};

//VERTEX SHADER
void vs(in a2v IN, out v2p OUT )
{
   float3 lightPos = float3(1.0f, 2.0f, 5.0f); //ezzel lehetnek gázok,
                                                                        //de nem tudtam hogy kell megadni

   OUT.Positionvp = mul(IN.Positionav, worldViewProjection);

   float3 posWorld = mul(IN.Positionav, world).xyz;

   float3 normal = mul(IN.Normalav, world).xyz;

   float3 light = normalize(lightPos - posWorld);

   float lightIntensity = clamp(dot(normal, light), 0, 1);

   float3 lightColor = float3(1.0f, 1.0f, 1.0f);

   float4 color = float4(lightColor * lightIntensity, 1.0f);

   color.rgb += 0.5f;

   OUT.Colorvp = clamp(color, 0, 1);
}

//void ps(in v2p IN, out p2f OUT )
//{
//    //output some color
//    OUT.Colorpf = IN.Colorvp*szam;
//}

//--------------------------------------------------------------------------------------
// Techniques
//--------------------------------------------------------------------------------------
technique RenderScene
{
    pass P0
    {
vertexshader = compile vs_1_1 vs();
//pixelshader = compile ps_1_1 ps(); //egyelőre nem akartam a pixelshaderrel
                                                                                         //foglalkozni, így ezt ne nézzétek
    }
}


A C#-os kódrészlet pedig :

Kód:
...
effect = Effect.FromFile(dev, "EmptyProject.fx", null, ShaderFlags.None, null);
...
effect.SetValue("worldMatrix", mat);
effect.SetValue("worldViewProjection", mat*view*proj); //és itt jelez
//hibát a fordító, de biztos, h nem ez a rossz, mert ehhez nem is
//nyúltam!!!
...

Mi lehet a gond? Talán a lightPos-t rosszul adtam meg (jelzem nem tudom, hogyan kell...)?
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
TPG - Tag | 3402 hsz       Online status #19468   2006.06.25 10:37 GMT+1 óra  
Idézet
kuzanth :
Kösze!!! Majd gyúrok rá, mert most átnézni nincs időm! Remélem érteni fogom. Majd úgyis nézegetem a többi hlsl-es anyagot, aztán majd lesz valami. Warlock-éhoz hasonló linket nem tudsz/tudtok directx-re (lehetőleg C#-hoz)? Ismétlésül : http://www.lighthouse3d.com/opengl/glsl/index.php?pipeline


Sajna nem tudok de ezeknek egy kis részével foglalkozom a cikkemben is. Bár az erősen elméleti megközelítésü.
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #19467   2006.06.25 10:31 GMT+1 óra  
Kösze!!! Majd gyúrok rá, mert most átnézni nincs időm! Remélem érteni fogom. Majd úgyis nézegetem a többi hlsl-es anyagot, aztán majd lesz valami. Warlock-éhoz hasonló linket nem tudsz/tudtok directx-re (lehetőleg C#-hoz)? Ismétlésül : http://www.lighthouse3d.com/opengl/glsl/index.php?pipeline
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
TPG - Tag | 3402 hsz       Online status #19462   2006.06.25 10:22 GMT+1 óra  
Idézet
kuzanth :
Hát, ha ezeket konkrét példán keresztül is elmagyarázod, én igazán nem fogok megharagudni rád ...


Render:
Kód:
effect.SetValue("tex",textureobject); // tex a textúrának fenntartott konstans neve az Effect fájlban, textureobject meg maga a tex amit átadok

Effectben:
Kód:
texture Tex; //textúra
matrix World;  //mátrixok ezeket is át kell küldeni SetValue-val de az nem írom le külön
matrix View;
matrix Proj;
float4 lightpos; //fény pozíciója

sampler2D samp= sampler_state  //a sampler
{
texture= <Tex>;
MinFilter=linear;  //filterek linearra állítva
MagFilter=linear;
MipFilter=linear;
};

struct vertexIn{
    float3 Position : POSITION;
    float3 Normal : NORMAL;
    float4 texturecord : TEXCOORD0;
};

struct vertexOut {
    float4 PositionOut : POSITION;
    float4 texturecordout: TEXCOORD0;
    float3 Normal: TEXCOORD1;  //itt küldöm tovább a normálokat a Pixel shadernek
};

vertexOut VertexShader (vertexIn In)
{
vertexOut  Out;
Out.PositionOut = mul(World*View*Proj,float4(IN.Position.xyz , 1.0));  //vertex pozíciójának kiszámolása
Out.Normal = normalize(mul(World,In.Normal)); //normál transzformálása object space-ből world space-be
Out.texturecordout = In.texturecord;
return Out;
}

float4 PixelShader(vertexOut In) : Color0  //azt adjuk a PS-nek inputnak amit a VS kiadott
{
float3 LocNormal = normalize(In.Normal);  //a bejövő normált normalizáljuk, hogy biztos 1 hosszú legyen
float3 LocLightPos = normalize(lightpos.xyz);
float diffuse = saturate(dot(LocNormal,-LocLightPos ); //diffuse komponens kiszámolása, per pixel diffuse fény
float4 Output = tex2D(samp,In.texturecordout)*diffuse;  //textúramintavétel, és a minta megszorzása a kiszámolt diffuse komponensel
Output.a=1.0f;  //alpha-t 1-re állítom hogy tuti ne látszon át
return Output;
}


Igen valószínü hogy vannak hibák a kódban, mert 10 perc alatt dobtam össze, de a lényeg remélem érthető.
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #19459   2006.06.25 09:54 GMT+1 óra  
Hát, ha ezeket konkrét példán keresztül is elmagyarázod, én igazán nem fogok megharagudni rád ...
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
TPG - Tag | 3402 hsz       Online status #19455   2006.06.25 08:09 GMT+1 óra  
Idézet
kuzanth :
Igen, eddig kb én is megvagyok... Erre utaltam azzal, h a kirajzolás köré teszem a shader kódját. És innentől kéne vmi tutor! Pl. van egy urhajo.X fileom, betöltöm, van egy shader.fx fileom (ez egy külön tutor ), betöltöm és akkor mit, hogy adok át kinek és miért ? Amit előbb leírtál, azt én is úgy csinálom.


Ha a mátrixokat áttolod a Vertex Shader-ben akkor kötelezően mást már nem kell átadni, onnantól a fantáziádra van bízva minden. Mondjuk én nem szoktam használni a FixedFunction SetTexture-t ilyenkor hanem úgymond konstansként átadom a tex-et is a shadernek, csinálok hozzá egy sampler-t s az alapján veszek mintát. De ennyi ezután már azt adsz át a shadereknek ami jól esik. Lighting calc-hoz a fényeket, HDR-nél adapted lum calc-hoz az előző frame óta eltelt időt stb. A trükk igazán ott van mikor a Vertex Shader olyan adatait adod át a Pixel Shadernek amit elvileg nem lehet. Ilyenkor texcoord-ként kell tovább küldeni a dolgokat, pl a normál-okat (a PS-ben normalizálni kell), pos adatokat stb. Még kérdés?
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #19453   2006.06.25 08:01 GMT+1 óra  
Igen, eddig kb én is megvagyok... Erre utaltam azzal, h a kirajzolás köré teszem a shader kódját. És innentől kéne vmi tutor! Pl. van egy urhajo.X fileom, betöltöm, van egy shader.fx fileom (ez egy külön tutor ), betöltöm és akkor mit, hogy adok át kinek és miért ? Amit előbb leírtál, azt én is úgy csinálom.
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
TPG - Tag | 3402 hsz       Online status #19452   2006.06.25 07:54 GMT+1 óra  
Idézet
kuzanth :
Minden érdekel, bár a C# jobban ! Viszont csak olyam kódot akarok látni, ahol nincs hivatkozás 85 másik .cs file kódjára (lásd sdk-s samlpe-ek...)! Meg vmi tutor szerű anyag sem ártana. Odáig megvagyok, h egy üres törzsű shader filet betöltök, ezt a mesh kirajzolás köré rakom, és lefut a progi, igaz az üres törzs miatt "nem csinál semmit" a shader (értjük...). Röviden ennyi az eddigi shader eredményem .


Megcsinálod a shadereket .fx fájlként (HLSL-ben). Effect.FromFile-al betöltöd. A Renderben Effect.Technique-ban beállítod a használni kívát technika nevét. Effect.Begin-el elkezded a shader renderelését és ez mindjárt visszadobja a pass-ok számát. Pass-ok számaszor Effect.BeginPass rajzolás Effect EndPass. A végén hívsz egy Effect.End-et. Az effect konstansait Effect.SetValue-val tudod beállítani. Az effekt fájl Vertex shader részében el kell végezni az alap mátrix műveleteket magyarul a Position koordinátákat megszorozni a 3 mátrix-al, a 3 mátrixot konstansként át tudod adni SetValue-val. A Pixel Shader-ben meg mindenképpen mintát kell venni a a beérkező texcoord-ok alapján, itt nem kell alapvetően beállítani semmit. Most leírtam mindent ami hirtelen eszembe jutott, remélem nincs benne hiba, az MDX-ben nagyon nem vagyok otthon.
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #19451   2006.06.25 07:40 GMT+1 óra  
Minden érdekel, bár a C# jobban ! Viszont csak olyam kódot akarok látni, ahol nincs hivatkozás 85 másik .cs file kódjára (lásd sdk-s samlpe-ek...)! Meg vmi tutor szerű anyag sem ártana. Odáig megvagyok, h egy üres törzsű shader filet betöltök, ezt a mesh kirajzolás köré rakom, és lefut a progi, igaz az üres törzs miatt "nem csinál semmit" a shader (értjük...). Röviden ennyi az eddigi shader eredményem .
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
TPG - Tag | 3402 hsz       Online status #19218   2006.06.23 07:04 GMT+1 óra  
Idézet
kuzanth :
Emberek! Nem tudnátok olyan tutort adni, ahol .x fileokra használnak shadert? Az SDK-s sample-ek s...t sem érnek, máshol meg mindig csak a vertexbufferes adatokkal dolgoznak, .x file meg vagy nincs, vagy túl bonyolult, mert nem az elejétől kezdik a magyarázatot.


D3DXMESH-es meshre utólag dobott shader megfelel? Mert olyat tudok mutatni, nem tutorial hanem részletet a motorom kódjából, igaz a C++ de a lényeget meg lehet belőle érteni.
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #19208   2006.06.23 04:13 GMT+1 óra  
Idézet
warlock :
Nah majd én
http://www.lighthouse3d.com/opengl/glsl/index.php?pipeline
Akit érdekel olvassa végig
ha vki vmit nem ért dobja be közösbe és megdumáljuk



DirectX-re nem tudsz vmi ilyet ? Lehetőleg C#-osat.
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
Kuz - Törzstag | 4455 hsz       Online status #19205   2006.06.23 03:15 GMT+1 óra  
Emberek! Nem tudnátok olyan tutort adni, ahol .x fileokra használnak shadert? Az SDK-s sample-ek s...t sem érnek, máshol meg mindig csak a vertexbufferes adatokkal dolgoznak, .x file meg vagy nincs, vagy túl bonyolult, mert nem az elejétől kezdik a magyarázatot.
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
TPG - Tag | 3402 hsz       Online status #17623   2006.06.11 12:28 GMT+1 óra  
Nah csodás, félig dobhatom ki a jól kitalált kis módszeremet az avg. Lum kiszámolásához mert az NV SDK mutatott jobbat. Az egésznek annyi a lényege hogy a Linear tex filterek-et csodásan lehet a negyedére kicsinyítéshez használni. Viszont itt jön az hogy a floating point texeken az ATI ha minden igaz csak a point filtert támogatja. Úgyhogy lehet hogy nem ártana valahova már kiírni a motorban hogy "optimized for nVidia".
Reality is almost always wrong. - House

   
warlock - Törzstag | 704 hsz       Online status #14935   2006.05.26 09:50 GMT+1 óra  
Na így már rögtön jobban néz ki.
G

   
TPG - Tag | 3402 hsz       Online status #14921   2006.05.26 08:40 GMT+1 óra  
Idézet
TheProGamer :
Most hogy volt egy kis időm agyalni, eszembe jutott egy kis technika amivel ha minden igaz baromi pontos avg.luminance értéket lehet számolni HDR-hez. Az egész lényege: először egy asszimetrikus kernel-el 12-edére csökkentem a textúra méretét ( és ezzel együtt a 4:3 arányu képből négyzet alaku lesz), majd ezután megkeresem a kapott magasság 2 és 5 közti legnagyobb osztóját (azért csak 5-ig mert a PS2.0 csak 32 textúra op-ot enged egy passban és ugye 6*6 az már 36), és egy akkora kernelel csökkentem (tehát pl ha 5 jön ki akkor 5*5-ös kernelt használok stb.). Utána ezt elvégzem a csökkentett tex-re is addig amíg el nem érem az 1x1-es tex méretet. Ezeket az adatokat az init részben kiszámolom, tehát a render folyamatot annyival lassítja csak az egész hogy pár menettel tovább tart mire elérem a végeredményt. Az egésznek az az előnye hogy az összes a képen létező pixel színe beleszámít a végeredménybe, ha minden igaz egy tökéletesen pontos végeredményt kapunk. Szerintetek érdemes használni ezt a kis trükköt?


Nah lekódoltam az ötletemet és működött, úgyhogy lehet használni nyugodtan. Teljesen pontos értékeket számolt, és alig lassított valamennyit, viszont a kód ami előállította hozzá a texeket és ami belerenderelt nagyon ronda lett. Ha valaki esetleg ingerenciát érez arra hogy a témakörnek szintén nekiálljon és esetleg elakad az szóljon, én az elmúlt pár napban amíg ezzel foglalkoztam minden létező hibát amit lehet elkövettem, nehéz már újat mutatni. Így hogy az ötletem működőképesnek bizonyult, teljesen sikerült a HDR-t beépítenem (nah jó Star effect még nincs de dolgozom rajta ). Azért mutatóba felrakom ide is a két screenshot-ot amit majd a weboldalamra fogok később felpakolni.


Reality is almost always wrong. - House

   
warlock - Törzstag | 704 hsz       Online status #14354   2006.05.23 08:02 GMT+1 óra  
D we are the borg

   
TPG - Tag | 3402 hsz       Online status #14341   2006.05.23 06:09 GMT+1 óra  
Szerintetek hasonlít a cucc így legalább valamilyen Bloom effektre, vagy még finomítsak rajta?
Reality is almost always wrong. - House

   
warlock - Törzstag | 704 hsz       Online status #13911   2006.05.22 04:57 GMT+1 óra  
Nah majd én
http://www.lighthouse3d.com/opengl/glsl/index.php?pipeline
Akit érdekel olvassa végig
ha vki vmit nem ért dobja be közösbe és megdumáljuk

   
kicsy - Szerkesztő | 4304 hsz       Online status #13908   2006.05.22 04:53 GMT+1 óra  
Kezd mondjuk te
kicsy ● SilentVertigo Team - project Solarah
http://blog.yscik.com
   
Kuz - Törzstag | 4455 hsz       Online status #13893   2006.05.22 02:55 GMT+1 óra  
Akkor tehát ki vállalja magára?
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
TPG - Tag | 3402 hsz       Online status #13812   2006.05.21 07:41 GMT+1 óra  
Idézet
kuzanth :
Ha már úgyis ide várjuk a shaderes dolgokat, szerintetek nagy hülyeség lenne ebbe a topicba összehozni egy shader tutort? Csak arra gondoltam, hogy az alapoktól kezdve be lehetne írkálni a különféle shadereket, és mondjuk el is magyarázhatná őket a hozzá értő ember. Bár ezeket az ötleteket nem szokták szeretni valamiért az emberek, de azért megpróbáltam...Nekem egyébként rengeteg hlsl-es anyagom van (C#-ra és C++ -ra), de még nem volt időm feldolgozni őket, azonban a téma mindenképp érdekel!


Végülis lehetne.
Reality is almost always wrong. - House

   
kicsy - Szerkesztő | 4304 hsz       Online status #13501   2006.05.19 14:43 GMT+1 óra  
Támogatom az elképzelést, úgyis tervezünk ilyesmit, hogy a fórumból kiemelünk hasznos dolgokat
kicsy ● SilentVertigo Team - project Solarah
http://blog.yscik.com
   
warlock - Törzstag | 704 hsz       Online status #13386   2006.05.19 07:39 GMT+1 óra  
ellenvetésre kár várnod

   
Kuz - Törzstag | 4455 hsz       Online status #13376   2006.05.19 06:34 GMT+1 óra  
Ha már úgyis ide várjuk a shaderes dolgokat, szerintetek nagy hülyeség lenne ebbe a topicba összehozni egy shader tutort? Csak arra gondoltam, hogy az alapoktól kezdve be lehetne írkálni a különféle shadereket, és mondjuk el is magyarázhatná őket a hozzá értő ember. Bár ezeket az ötleteket nem szokták szeretni valamiért az emberek, de azért megpróbáltam...Nekem egyébként rengeteg hlsl-es anyagom van (C#-ra és C++ -ra), de még nem volt időm feldolgozni őket, azonban a téma mindenképp érdekel!
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
TPG - Tag | 3402 hsz       Online status #13291   2006.05.18 13:39 GMT+1 óra  
Idézet
warlock :
de van
Mikor írsz már tutort


De majd írok (egyszer ha olyan kedvem lesz ).
Reality is almost always wrong. - House

   
TPG - Tag | 3402 hsz       Online status #13290   2006.05.18 13:37 GMT+1 óra  
Idézet
Seeting :
TheProGamer: akkor te most C++-t használsz vagy C#-t?


C++ .VisualC++. Halvány fogalmam van a C#-ről is.
Reality is almost always wrong. - House

   
Seeting - Törzstag | 2306 hsz       Online status #13289   2006.05.18 13:33 GMT+1 óra  
TheProGamer: akkor te most C++-t használsz vagy C#-t?
   
warlock - Törzstag | 704 hsz       Online status #13283   2006.05.18 13:04 GMT+1 óra  
de van
Mikor írsz már tutort

   
TPG - Tag | 3402 hsz       Online status #13282   2006.05.18 13:00 GMT+1 óra  
Idézet
TheProGamer :
Most hogy volt egy kis időm agyalni, eszembe jutott egy kis technika amivel ha minden igaz baromi pontos avg.luminance értéket lehet számolni HDR-hez. Az egész lényege: először egy asszimetrikus kernel-el 12-edére csökkentem a textúra méretét ( és ezzel együtt a 4:3 arányu képből négyzet alaku lesz), majd ezután megkeresem a kapott magasság 2 és 5 közti legnagyobb osztóját (azért csak 5-ig mert a PS2.0 csak 32 textúra op-ot enged egy passban és ugye 6*6 az már 36), és egy akkora kernelel csökkentem (tehát pl ha 5 jön ki akkor 5*5-ös kernelt használok stb.). Utána ezt elvégzem a csökkentett tex-re is addig amíg el nem érem az 1x1-es tex méretet. Ezeket az adatokat az init részben kiszámolom, tehát a render folyamatot annyival lassítja csak az egész hogy pár menettel tovább tart mire elérem a végeredményt. Az egésznek az az előnye hogy az összes a képen létező pixel színe beleszámít a végeredménybe, ha minden igaz egy tökéletesen pontos végeredményt kapunk. Szerintetek érdemes használni ezt a kis trükköt?


Nah senkinek nincs semmi gondolata ehhez?
Reality is almost always wrong. - House

   
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] > 21 < [22]