View previous topic :: View next topic |
Author |
Message |
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Sat Oct 13, 2007 7:56 pm Post subject: Paints/Citas Operaacijas uz tekstuuras |
|
Ir nepieciesams izveidot taadu kaa "paint" shaderi, kur kaa ievade tiek doda kursora poziicija un "otas" izmeers. "Ota" ir rinkja formas. Bez "paint" metodes jaaabuut iespeejai arii izmantot arii citas funkcijas dotajam apgabalam (piemeeram sapludinaat apgabalu, uc) -> atkriit vienkaars tekstuuru "belnd". Es esmu inmplementeejis gandriiz identisku metodi, ar veselu kaudzi jaukaam funkcijaam, bet taa paredzeeta "paintosanai" uz 1024x1024 izmeera tekstuuras, bet izmantojot lielaaka izmeera tekstuuru, piemeeram kaa sajaa gadiijumaa -> man ir nepieciesama 4096x4096 tekstura, aatrums ir neapmierinoshs, taatad nepieciesams izstraadaat aartraaku saderi vai citu "tehnalogiju" tai "paintosanai"...
HLSL snippets ar pasreizeejaa shadera visparastaako metodi (vnk pieskirt veertiibu apgabalam) :
Code: |
float2 Pos;
float Val;
float widthSq = (32.0f / 4096.0f)*(32.0f / 4096.0f); //brush izmeers kvadraataa
texture textureMap_Add0;
sampler textureSampler0 : register(s1) = sampler_state
{
Texture = (textureMap_Add0);
ADDRESSU = Clamp;
ADDRESSV = Clamp;
MAGFILTER = POINT;
MINFILTER = POINT;
MIPFILTER = POINT;
};
float distanceSq(float2 point1, float2 point2)
{
float xd = point2.x - point1.x;
float yd = point2.y - point1.y;
return (xd * xd + yd * yd);
}
float4 Set(float2 texCoord : TEXCOORD0) : COLOR0
{
float4 color0 = tex2D(textureSampler0, texCoord);
float dist = distanceSq(Pos, texCoord.xy);
if (dist < widthSq)
{
color0.r = Val;
}
return color0;
}
technique Paint_Set
{
pass P0
{
pixelShader = compile ps_3_0 Set();
}
}
|
|
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sat Oct 13, 2007 8:25 pm Post subject: |
|
Tiešām 32x32 brusha pielietošana ar šo šeideri bremzē? Kautkā neticās, ka videokarte nespētu apstrādāt 32*32 = 1024 pikseļus realtaimā... Jautājums tad ir, kā tu to pielieto? |
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Sat Oct 13, 2007 8:27 pm Post subject: |
|
Code: |
float dist = distanceSq(Pos, texCoord.xy);
|
Tiek reekinaats katram texelim |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sat Oct 13, 2007 8:33 pm Post subject: |
|
a vai tad nevar to zīmēšanu ar render targetiem nostrādāt?
hmm tev vajag paint shaderi, tā skatos... bet kāpēc tieši ar šeideri tas jādara? _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Sat Oct 13, 2007 8:36 pm Post subject: |
|
Snake, es iztiksu bez taviem komentaariem, ok? |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sat Oct 13, 2007 8:41 pm Post subject: |
|
-edit-
šis nav d3d _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle
Last edited by snake5 on Sat Oct 13, 2007 8:57 pm; edited 1 time in total |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sat Oct 13, 2007 8:44 pm Post subject: |
|
Storm wrote: | Code: |
float dist = distanceSq(Pos, texCoord.xy);
|
Tiek reekinaats katram texelim ;) |
Nu labi katram. Nu 32*32=1024, to jau teicu. Tātad 2048 starpības, 1024 summas un 2048 reizināšanas. Videokartei tas ir nieks. Sīkums tas ir. Kāpēc tev tas varētu bremzēt? Uz kautkādas iebūvētās videokartes to visu laid, ka šeideris strādā softwarē, vai kā?
Tu tā arī nepateici, kā to pielieto. Atkal būs ar gaišreģību jānodarbojas ... :)
Pieņemu, ka tu uz tekstūru/ekrānu uzrenderē pamata bildi, lai arī no kurienes tā nāktu, un tad spiežot peli, tu renderē virsū kaudzi ar 32x32 brušiem, kuri ir šis šeideris. Pareizi? |
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Sat Oct 13, 2007 8:48 pm Post subject: |
|
Shaderis ir kaa post-process tekstuurai, kuras izmeers ir 4096x4096 -> tiek rendereets viens quads rendertagetaa ar mineeto saderi |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sat Oct 13, 2007 8:51 pm Post subject: |
|
Ah, nu tagad sapratu. Tu visu renderē ar šo šeideri.
Tā nevajag. Post-procesē divos piegājienos - vienā uzrenderē visu tekstūru ar vienkāršu Copy, un otrā piegājienā lieto uzrenderē virsū mazu 32x32 brušu ar šo šeideri. |
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Sat Oct 13, 2007 8:59 pm Post subject: |
|
Es jau taa arii sapratu, tikai man sanaak baigais juuklis ar teksturu koordinaataam (man jaasampljo lielaa tekstuura no mazaas) |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sat Oct 13, 2007 9:05 pm Post subject: |
|
varbūt tev nepatīk mani komentāri bet..
nu...
kā es no GM laikiem atceros, ar surfacēm bija ātri un ērti...
neliekas labi šādu zīmēšanu ar šeideriem veidot...
bet nu dari kā uzskati labāk
hmm, nu tagad sapratu, kāpēc to šeideri lieto - dēļ tās "attāluma sistēmas" ar ko tos apļus zīmē..
nu to var arī ar surfacēm 2 variantos:
1. katru punktu šādi noliek (lēni)
2. izveido lielākā iespējamā brush'a bildi un tad tikai samazina kā vajag (te atkal iespējamas mazas neprecizitātes, bet galā visam būtu jāiznāk OK!) _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle
Last edited by snake5 on Sat Oct 13, 2007 9:12 pm; edited 1 time in total |
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Sat Oct 13, 2007 9:09 pm Post subject: |
|
Pastaasti kaa tu uztaisiisi izpludinaasanu (blur) apgabalaa |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sat Oct 13, 2007 9:09 pm Post subject: |
|
snake5: videokarte ir daudz-daudz ātrāka šāda veida aprēķiniem, ja to pareizi pielieto. Tavas surfaces ne tuvu stāvēs tam, ko var ar šeideriem panākt. Palasi kautvai šo te: http://dev.gamez.lv/viewtopic.php?t=871 |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sat Oct 13, 2007 9:14 pm Post subject: |
|
Storm wrote: | Pastaasti kaa tu uztaisiisi izpludinaasanu (blur) apgabalaa |
esmu uz tā paša GM redzējis realtime 640x480 blur un gāja diezgan ātri!
varu iedot GML, būs iespējams saprast, kā tur notikās viss! _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sat Oct 13, 2007 9:18 pm Post subject: |
|
bubu wrote: | snake5: videokarte ir daudz-daudz ātrāka šāda veida aprēķiniem, ja to pareizi pielieto. Tavas surfaces ne tuvu stāvēs tam, ko var ar šeideriem panākt. Palasi kautvai šo te: http://dev.gamez.lv/viewtopic.php?t=871 | zinu, ko ar šeideriem var panākt, jo vkartes jau sen ir jaudīgākas šādos aprēķinos par CPU
bet ar surfacēm šo izdarīt ir viegli!!!
ew pag! ienāca prātā bbox tests - vispirms pārbauda vai punkta x/y ir robežās un tad tikai attāluma testu uz šiem pikseļiem.. jo sqrt ir palēna funkcija.. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
|