View previous topic :: View next topic |
Author |
Message |
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Sep 01, 2009 11:11 pm Post subject: |
|
Tas ir tieši tas, sneik, ko mēs tev visu laiku esam mēģinājuši ieskaidrot visur citur. Ka ar šeideri var ērtāk un vieglāk panākt gribēto rezultātu - šajā piemērā "single-pass lighting shader for 8 lights with diffuse, specular and attenuation, of course with normal map". Gan lielākas optimizācijas iespējas (tev kā programmētājam), gan veids kā to videokartei pateikt (nevis simts stāvokļus slēgāt iekšā/ārā). |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Wed Sep 02, 2009 1:35 am Post subject: |
|
Nu tas jau man it kā bija skaidrs, ka ar šeideri ir ērtāk / vieglāk. Bet kad pieķeršos 3D spēlēm, būs laikam jāsāk domāt par FFP lietošanas atmešanu... Varbūt ne pavisam, bet tomēr.. 3d spēles pat bez šeideriem neiet labi uz videokartēm, kuras nav tik ātras.. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Wed Sep 02, 2009 7:50 am Post subject: |
|
Es gan kaut kā atceros, ka tas tev nebija vis skaidrs, citādi jau nebūtu bijušas diskusijas pa N-lapusēm, kurās tu mēģini mūs pārliecināt, ka ir jālieto FFP, nevis šeideri. Slikums vecos logus meklēt tagad.
Un vai tas būtu kāds brīnums, ka 3D speles neiet labi uz videokartēm, kuras nav ātras? Man tas šķiet ļoti dabiski, ka arī 2D (un 1D) spēles neiet labi uz videokartēm/datoriem, kuri nav tik ātri. |
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Wed Sep 02, 2009 11:56 am Post subject: |
|
Tikai snake paarprata visu to sisteemu, kaa jau iesaaceejs, GPU darba optimizaacija notiek ar n'vidia gpu perf hud tooli (vai ja ir ATI tad ir kautkaads, bet toolji ATI saliidzinaajumaa ar nvidia ir meesli) Un tad mees mekleejam bottleneckus visaa aplikaacijaa - saakot ar to vai ir vispaar GPU limiteets, tad kura tiesi dalja no visas pipeline ir bottlenecks - interoplatori, vertex shaders, pixel shaders, texture brandwidth, draw calls etc. Un optimizeejam tikai bottlenecku.
Dzeks postaa ieteica kautkaadas optimizaacijas, bet tas nenoziimee ka vinjas ir jaaizmanto un jaaaieguust zemaaka kvalitaate. Taapeec ka normaali tev nebuus visu laiku 8 gaismas teiksim un neviens nav teicis ka konkreetaa persona nevareeja vienkaarsi uzraksiit 2 pass 4 lights un dziivot ar taadu pasu performanci jo vins ir CPU limiteets anyway. _________________ Izraadaas ka dazu dev.gamez.lv lietotaaju absurdaa ignorance meedz eksisteet arii augstaakas paakaapees : http://www.gamedev.net/community/forums/topic.asp?topic_id=411552 |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Wed Sep 02, 2009 2:24 pm Post subject: |
|
Storm, topiks ir par šeideru optimizāciju, nevis GPU darba optimizāciju, man šķiet, ka tu drīzāk esi kaut ko pārpratis.
bubu, idejas aug. Agrāk likās, ka varēšu mierīgi supportēt arī vecās videokartes bet izskatās, ka tam darbam nevar tik lielu prioritāti uzstādīt. Vismaz ne 3D spēlēm. _________________ "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 Sep 12, 2009 11:06 pm Post subject: |
|
Nu tagad es pats arī pamēģināju kaut ko optimizēt/samazināt lietoto instrukciju skaitu.
ShadowMap (DX SDK August 2006 paraugs)
Izveidoju PCF3x3 ēnas filtru, izdevās nooptimizēt līdz 64 (vai pat nedaudz mazāk) instrukcijām (ps_2_0).
Jaunais šeidera kods (tur ir daudz citu eksperimentālu modifikāciju, bet svarīgākais slēpjas PixScene3 funkcijā):
http://paste.php.lv/90176ec4fb7737a6f4cdaf9aeb88dfdd?lang=c
Te ir oriģinālais kods:
http://paste.php.lv/ee8371f1c7983a6006d3e6be718b8e4e?lang=c
Izmantoju vektorizācijas padomu no tā raksta, bet mad_sat instrukcijas noderīgumu vajadzēja atklāt pašam..
..sākumā kods bija tāds:
Code: | pcil *= 0.25;
// Light it
Diffuse = ( saturate( dot( -vLight, normalize( vNormal ) ) ) * pcil * slcone + g_vLightAmbient ) * g_vMaterial; |
..pēc optimizācijas:
Code: | pcil = saturate( pcil * 0.25 - slcone );
// Light it
Diffuse = ( saturate( dot( -vLight, normalize( vNormal ) ) ) * pcil + g_vLightAmbient ) * g_vMaterial; |
_________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Sun Sep 13, 2009 1:56 am Post subject: |
|
Manupraat fail. Nafig tev triis dazaadi maniigie prieks viena un taa pasa? Tur kur tev taas 12 saskaitiisanas vareeja buut viens dot produkts un 3 saskaitiisanas citaa vietaa. Turklaat 3x3 pcf = galiigi nesmuki. 5x5 un 7x7 ir ok, bet 3x3 reti kad buus ok. _________________ Izraadaas ka dazu dev.gamez.lv lietotaaju absurdaa ignorance meedz eksisteet arii augstaakas paakaapees : http://www.gamedev.net/community/forums/topic.asp?topic_id=411552 |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sun Sep 13, 2009 3:18 am Post subject: |
|
Quote: | Nafig tev triis dazaadi maniigie prieks viena un taa pasa? |
Kur tu tos izraki?
Quote: | Tur kur tev taas 12 saskaitiisanas vareeja buut viens dot produkts un 3 saskaitiisanas citaa vietaa. |
Negribi pastāstīt, kā? Es izmēģināju tur dažādus variantus, bet rezultāts bija pavisam neapmierinošs. Vispār jau tādu variantu, par kādu tu te stāsti, neredzēju, jo.. tas, ko tu piedāvā, izskatās diezgan neiespējami. Bet nu lūdzu, pārveido kodu un parādi, varbūt tomēr kļūdos.
Quote: | Turklaat 3x3 pcf = galiigi nesmuki. |
Man jau pašam šķiet, ka tieši labi - nav pārāk "mīkstas" ēnas un nav pārāk asas malas ēnām.. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sun Sep 13, 2009 10:54 am Post subject: |
|
Nesaprotu, kas tur optimizēts. PixScene no PixScene3 pie tam pamatīgi atšķirās funkcionalitātē - viens varbūt izskatās pēc PCF 3x3 filtra, taču otrs galīgi ne - tas lasa 4x4 pikseļus. Kā var divas dažādas lietas salīdzināt performancē?? Tas atgādina "es uzrakstīju ātrāku vector'u" topiku.
Code: | ShadowTexC.y = 1.0f - ShadowTexC.y; |
ir lieka instrukcija. Šadowmapi vajag ģenerēt jau uzreiz pareizā orientācijā, tad nebūs šitā jāgroza/jāflipo pie izmantošanas.
Un toties uz SM3, kas ir >>50% lietotājiem-spēlētājiem, tavs šeideris būs lēnāks. Dēļ dinamiskā brančinga, kas PixScene funkcijā nerēķina PCF filtru, ja tas nav vajadzīgs - tu turpretīt to rēķināši vienmēr. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sun Sep 13, 2009 12:33 pm Post subject: |
|
Oriģinālā PCF3x3 koda man diemžēl nav. Bet optimizēt nācās gan savu kodu, gan to, kas jau bija oriģinālajā shadowmap.fx failā.
paste.php.lv 1. koda aprakstā paskaidroju, ka nav tādas pašas funkcijas.
Un es nesalīdzinu darbības ātrumu, es vienkārši centos iespiest šeideri 64 instrukciju slot'os.
Tāpēc jāskatās oriģinālajā kodā līdzīgās koda rindas.
Quote: | ir lieka instrukcija. |
Nav mans darbs. Un programmas sourci es neaiztiku, tāpēc arī šeiderī nelaboju neko tādu. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Sun Sep 13, 2009 6:50 pm Post subject: |
|
Tad izreekini Snake cik te instrukcijas un ko vins izdara:
Code: | float4 sum;
float res;
sum = float4( whatever);
sum += float4( whatever);
sum += float4( whatever);
sum += float4( whatever);
res = dot(sum, float4(1.0f, 1.0f, 1.0f, 1.0f)); |
Bubu - viegli pateikt - gruuti izdariit - nav taadi panjeemieni, kuriem nevajag prieksdarbus, ar kuriem var pateikt ir vai nav nepieciesami visi samplji... _________________ Izraadaas ka dazu dev.gamez.lv lietotaaju absurdaa ignorance meedz eksisteet arii augstaakas paakaapees : http://www.gamedev.net/community/forums/topic.asp?topic_id=411552 |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sun Sep 13, 2009 7:54 pm Post subject: |
|
Quote: | Tad izreekini Snake cik te instrukcijas |
Nu mēģināšu.. 1 mov, 3 add, 1 dp4
Saskaita 16 float'us kopā.
Bet to man PixScene3 kodā nekur nevajag. Biju mēģinājis pārkārtot to ēnas testu kodu, bet rezultātā sanāca pat vairāk instrukcijas.
Quote: | nav taadi panjeemieni, kuriem nevajag prieksdarbus, ar kuriem var pateikt ir vai nav nepieciesami visi samplji... |
Njā.. es nesen lasīju par ēnām un tikai sarežģītām metodēm tos IFus var viegli pielikt, bet tās metodes pašas par sevi ir diezgan lēnas..
Parasti var ēnu nerēķināt tikai tad, ja objekta apgaismojums (bez ēnām) = 0, bet es šaubos (varbūt jau nepamatoti, vienkārši dēļ nesekošanas videokaršu iespējām), ka IFi atmaksājas. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle
Last edited by snake5 on Sun Sep 13, 2009 8:00 pm; edited 1 time in total |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sun Sep 13, 2009 7:54 pm Post subject: |
|
Nesapratu, Storm. Tu par ko to saki? |
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Sun Sep 13, 2009 8:14 pm Post subject: |
|
Nu vieniigais normaalais ifs ir tas dot light. Bet savaadaakaa veidaa kaa tad tu pateiksi ka vajag vai nevajag visus sampljus, tur ir nepieciesami speciaali prepass etc _________________ Izraadaas ka dazu dev.gamez.lv lietotaaju absurdaa ignorance meedz eksisteet arii augstaakas paakaapees : http://www.gamedev.net/community/forums/topic.asp?topic_id=411552 |
|
Back to top |
|
|
|