dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

ASM un HLSL šeideru atšķirības
Goto page 1, 2  Next
 
dev.gamez.lv Forum Index -> Microsoft DirectX
View previous topic :: View next topic  
Author Message
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
Storm



Joined: 11 Apr 2006
Posts: 742

PostPosted: 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 Wink
_________________
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
View user's profile
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: 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
View user's profile Visit poster's website
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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 Wink
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: 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
View user's profile Visit poster's website
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Mon May 05, 2008 8:55 pm    Post subject:

Shocked "nu jopcik", neesi izgulējies? Smile

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?) Wink
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: 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
View user's profile Visit poster's website
Display posts from previous:   
dev.gamez.lv Forum Index -> Microsoft DirectX All times are GMT + 2 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
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