|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sun May 04, 2008 12:05 am Post subject: ASM un HLSL šeideru atšķirības |
|
es nedaudz padarbojos ar rendermonkeyu..
nezinu, vai tas ir manas, vai citas kļūdas pēc.. bet bump šeideris uz ASM un HLSL neizskatās vienādi..
ASM:
HLSL:
varbūt ko esmu nepareizi noportējis (no ASM uz HLSL), bet tam itkā nevajadzētu būt..
ASM kods:
http://paste.php.lv/7297?lang=asm
HLSL kods:
http://paste.php.lv/7298?lang=c
visas konstantes un "ārējie" mainīgie ir tie paši, tur nevajadzētu būt kļūdai.. _________________ "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 May 04, 2008 7:37 am Post subject: |
|
ASM šeiderī vektori tiek normalizēti koordināšu kā trīs dimensionāli vektori (ja es pareizi saprotu dp3 instrukcijas būtību pēc tās vārda). Kā arī gaismas un kameras koordinātes tangent-space tiek rēķinātas ar 3 dimensiālu vektoru skalāro reizinājumu - taču tu tur darbojies ar 4d skalāro reizinājumu un normalizēšanu. Ja kādam vektoram sanāks, ka pēdējā koordināte nebūs 0.0, tad rezultāti atšķirsies. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sun May 04, 2008 11:01 am Post subject: |
|
es nomainīju uz float3..
tāpat rezultāti atšķiras..
reku RFX projektfails:
http://yy.lv/download.php?f=128163
EDIT:
interesants tas metāliskā bumpa efekts..
es uz HLSL dabūju ļoti līdzīgu (vai tādu pašu).. (ASM koda komentāri beigās bija galīgi garām, izrādās tur "N.L * diffuse" nemaz nebija lietots)
HLSL kods vertex šeiderim:
Code: |
float4x4 view_proj_matrix;
float4x4 inv_view_matrix;
float4 light;
float4 eye;
struct VS_INPUT
{
float4 Position : POSITION0;
float3 Normal : NORMAL0;
float2 Texcoord : TEXCOORD0;
float3 Tangent : TANGENT0;
float3 Binormal : BINORMAL0;
};
struct VS_OUTPUT
{
float4 Position : POSITION0;
float2 Texcoord : TEXCOORD0;
float3 HalfAngleVec : TEXCOORD1;
};
VS_OUTPUT vs_main( VS_INPUT Input )
{
VS_OUTPUT Output;
Output.Position = mul( Input.Position, view_proj_matrix);
Output.Texcoord = Input.Texcoord;
float3 light_obj_space = mul(light,inv_view_matrix);
float3 lightvec_obj_space = normalize(light_obj_space - Input.Position);
float3 lightvec_tan_space;
lightvec_tan_space.x = dot(lightvec_obj_space,Input.Tangent);
lightvec_tan_space.y = dot(lightvec_obj_space,Input.Binormal);
lightvec_tan_space.z = dot(lightvec_obj_space,Input.Normal);
float3 eyepos_obj_space = mul(eye,inv_view_matrix);
float3 viewvec_obj_space = normalize(eyepos_obj_space - Input.Position);
float3 viewvec_tan_space;
viewvec_tan_space.x = dot(viewvec_obj_space,Input.Tangent);
viewvec_tan_space.y = dot(viewvec_obj_space,Input.Binormal);
viewvec_tan_space.z = dot(viewvec_obj_space,Input.Normal);
Output.HalfAngleVec = normalize((lightvec_tan_space+viewvec_tan_space)/2);
return( Output );
} |
pixel šeiderim:
Code: |
sampler2D base_map;
sampler2D bump_map;
float4 specular;
float specular_exponent;
float4 ps_main(float2 Texcoord : TEXCOORD0,
float3 HalfAngleVec : TEXCOORD1) : COLOR0
{
float3 havnorm = normalize(HalfAngleVec);
float3 map_norm = (tex2D(bump_map,Texcoord).xyz-0.5)*2;
float ndoth = saturate(dot(havnorm,map_norm));
ndoth = pow(ndoth.x,specular_exponent);
float4 slx = specular*ndoth;
float4 col = tex2D(base_map,Texcoord);
col += slx * col;
col*= col;
float4 finalcol = saturate(col);
return finalcol;
}
|
_________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Sun May 04, 2008 11:03 pm Post subject: |
|
Vienkaarsi met pie miera to ASM un stick with HLSL, tas tev vismaz noderees arii peec gada _________________ 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 |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Sun May 04, 2008 11:53 pm Post subject: |
|
Mans iteteikums buutu izprast bump mappingu, nevis kaut ko tulkot no kaut kaa. Panjem tutoriaali un step-by-step raksti sheideri no 0. _________________ long time; /* know C */ |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Mon May 05, 2008 9:07 am Post subject: |
|
bumpmappings ir jau izprasts, ASM un HLSL šeideri arī
vnk galīgi nevarēju saprast, kāpēc ASM bumpā (kurš izrādījās tikai specular) viss izskatījās metāliskāk, bet HLSL bumpā, kuru es, vadoties pēc ASM komentāriem, pārnesu, viss izskatījās plastiskāk _________________ "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: Mon May 05, 2008 10:53 am Post subject: |
|
Dodu 99%, ka tev nepareizi input dati, ja vien abi kodi dara vienu un to pašu.
Bet pēc tā tavā pēdējā kodā 100% neizskatās. Jo kur gan asmā tev ir col*= col; atbilstoša operācija. Kāda vispār matemātiska jēga no krāsas reizināšanas ar sevi?? Tur tak sanāk pilnīgi līka rezultāta mērvienība (kautkāda krāsa kvadrātā...)
Kā arī esi pazaudējis L vektora padošanu pikseļšeiderim.
Ne tuvu neizskatās, ka tu būtu izprastis ne bumpmappingu, ne šeideru kodu. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Mon May 05, 2008 11:54 am Post subject: |
|
tu paskaties rūpīgāk..
N.L * diffuse nemaz asm'a kodā netiek izmantots
asm koda beigās ir:
mad_sat r0, r0, r0, r1
kur r0 ir krāsa no base map uz texcoorda
un r1 = (N.H)^spec_exponent * spec_color
bet N.L * diffuse atrodas r2 reģistrā ;)
krāsas reizināšana ar sevi dod vienu efektu, neesmu precīzi izpētījis visu, bet parasti krāsa kļūst tumšāka, mērvienības liec pie malas, jo šeideri ir grafiska lieta, tātad jebkāds kods (vēlams tomēr optimāls) ir labs, kamēr tas dod vajadzīgo efektu
nedaudz biju nokļūdījies, jo neapskatījos "mad_sat" darbību
te īstais pixelšeiderkods:
Code: |
sampler2D base_map;
sampler2D bump_map;
float4 specular;
float specular_exponent;
float4 ps_main(float2 Texcoord : TEXCOORD0,
float3 HalfAngleVec : TEXCOORD1) : COLOR0
{
float3 havnorm = normalize(HalfAngleVec);
float3 map_norm = (tex2D(bump_map,Texcoord).xyz-0.5)*2;
float ndoth = saturate(dot(havnorm,map_norm));
ndoth = pow(ndoth.x,specular_exponent);
float4 slx = specular*ndoth;
float4 col = tex2D(base_map,Texcoord);
float4 finalcol = saturate(col*col+slx);
return finalcol;
}
|
vajadzētu būt precīzi _________________ "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: Mon May 05, 2008 12:07 pm Post subject: |
|
snake5 wrote: | tu paskaties rūpīgāk..
N.L * diffuse nemaz asm'a kodā netiek izmantots
asm koda beigās ir:
mad_sat r0, r0, r0, r1
kur r0 ir krāsa no base map uz texcoorda
un r1 = (N.H)^spec_exponent * spec_color
bet N.L * diffuse atrodas r2 reģistrā ;) |
Tādā gadījumā atļaušos apgalvot, ka šeiderī ir kļūda. Imho tur tiešām bija domāts izmantot N.L, nevis kautko mistisku.
Quote: | mērvienības liec pie malas, jo šeideri ir grafiska lieta, tātad jebkāds kods (vēlams tomēr optimāls) ir labs, kamēr tas dod vajadzīgo efektu |
Slima suņa murgi. Visi nopietnie šeideri (nevis paspēlēšos te randomā ar matemātiskām operācijām) ievēro korektas lielumu mērvienības - tipa: rezultāts ir krāsa, nevis krāsas kvadrāts, krāsas kvadrātu nevar saskaitīt ar krāsu utml.
Un tas attiecas ne tikai uz šeideriem, bet arī uz jebkuru citu matemātisku kodu spēlē - gan fiziku, gan kolīzijām, gan vienkārši darbībām ar vektoriem, utt.
Protams, var iegūt "interesantus" vai "kūl" efektus, ja kautko tur pamaina pilnīgi uz greizu pusi - bet tādu efektu būs kontrolēt un pieregulēt daudz grūtāk, jo tas nepaļausies ne uz kādu veselo saprātu tā darbībā tieši tā iemesla dēļ, ka tas darbojas pilnīgi ne pēc dabiskiem/intuitīviem likumiem. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Mon May 05, 2008 12:29 pm Post subject: |
|
vari apgalvot, ka šeiderī ir kļūda, bet izskatās smuki tāpat, un parastais plastmasbumps jau ir nedaudz apnicis
Quote: | Protams, var iegūt "interesantus" vai "kūl" efektus, ja kautko tur pamaina pilnīgi uz greizu pusi |
tieši tā!
tagad apskatījos
par cik krāsa ir starp 0 un 1, tad krāsas kvadrāts izskatās šādi:
http://content5-foto.inbox.lv/albums66169995/snake5/_crap_/colorsquare.png _________________ "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: Mon May 05, 2008 1:52 pm Post subject: |
|
Nu tad reku tev būs vēl viens "kūl" efekta pikseļšeideris (ļoti universāls - ar to var izveidot jebkuru citu "kūl" efektu):
Code: | return float4(noise(float4(1.0)), noise(float4(1.0)), noise(float4(1.0)), 1.0); |
Dīvainā pasaulē tu dzīvo... Uzraksta kautkādu random šeideri, nosauc to par bumpmapingu un tad visiem te prasa atrast kļūdu. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Mon May 05, 2008 2:16 pm Post subject: |
|
nestrādā
COMPILE ERROR: API(D3D) /../Textured/Pass 0/Pixel Shader/ memory(11,11): error X4532: cannot map expression to pixel shader instruction set _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Mon May 05, 2008 8:47 pm Post subject: |
|
Nu jopcik, tu ar aciim nevari to sheideri uzkompileet? Tur tak skaidri un gaishi rakstiits, kas notiks. _________________ long time; /* know C */ |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Mon May 05, 2008 8:55 pm Post subject: |
|
"nu jopcik", neesi izgulējies?
var jau, bet nu kods nav tik universāls, pietam es īsti nezinu, kā vajadzētu izskatīties tas noise (vai vnk noise - pilnīgi neatkarīgs, vai kautkas tuvāk tekstūrai, kuru vnk katru kadru pārģenerē or wtf?) _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Mon May 05, 2008 9:54 pm Post subject: |
|
Ir taada lieta kaa google, kur var ierakstiit sho tik mistisko un nepaziistamo vaardu: noise.
Luuk noise, ko tu savaa muuzhaa noteikti esi skatiijis: http://en.wikipedia.org/wiki/Image:TV_noise.jpg _________________ long time; /* know C */ |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|