Gamestudio Links
Zorro Links
Newest Posts
Help with plotting multiple ZigZag
by degenerate_762. 04/30/24 23:23
M1 Oversampling
by 11honza11. 04/30/24 08:16
Trading Journey
by howardR. 04/28/24 09:55
Zorro Trader GPT
by TipmyPip. 04/27/24 13:50
Data from CSV not parsed correctly
by jcl. 04/26/24 11:18
Why Zorro supports up to 72 cores?
by jcl. 04/26/24 11:09
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
4 registered members (AndrewAMD, 7th_zorro, VoroneTZ, Quad), 912 guests, and 0 spiders.
Key: Admin, Global Mod, Mod
Newest Members
firatv, wandaluciaia, Mega_Rod, EternallyCurious, howardR
19050 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Beleuchtungsrichtung bei einem Normalmapping Shader #368296
04/23/11 21:24
04/23/11 21:24
Joined: Jan 2011
Posts: 797
Da wo du nicht bist! Muhahaha!
xxxxxxx Offline OP
User
xxxxxxx  Offline OP
User

Joined: Jan 2011
Posts: 797
Da wo du nicht bist! Muhahaha!
Hi,
meine alten verhassten Shader mal wieder... ich will gar nicht wissen wie man mich für diese frage verkloppen wird
Also ich wollte neulich mal den Normalmapping-Shader aus dem Shader Tutorial auf 8 Lichter umschreiben, 8 Lichter sind jetzt mehr oder weniger gut untergebracht. NUR die Beleuchtungsrichtung passt nicht richtig das ganze sieht so auf dem modell(nur der Kopf das andere zeug benutzt einen anderen Normal-Mappingshader, der auf dem Kopf nicht gut aussieht) aus:

ja die hachfresse ist beabsichtigt grin
so berechne ich die richtungen(im vertex shader) blush
Code:
OutLightDir0 = normalize(mul(matTangent, vecLightPos[0]-InPos.xyz));


und so wende ich sie im(pixel shader)
Code:
Diffuse[0] = DiffuseIntensity * saturate(dot(InLightDir0, BumpNormal));
	Diffuse[0] *= vecLightColor[0];
	R = normalize(2 * dot(BumpNormal, InLightDir0) * BumpNormal - InLightDir0);
	InViewDir = normalize(InViewDir);
	Specular[0] = pow(saturate(dot(R, InViewDir)), SpecularPower) * SpecularIntensity;
...
...
...
	float4 Color = tex2D(ColorMapSampler, InTex);
	
	return (Ambient + Diffuse[0] + Specular[0]) * Color;



wer sich jetzt fragt was wie zusammen hängt hier der ganze shader:
Code:
static const float AmbientIntensity	= 1.0f;
static const float DiffuseIntensity = 1.0f;
static const float SpecularIntensity = 1.0f;
static const float SpecularPower = 9.0f;
float4x4 matWorldViewProj;
float4x4 matWorld;
float4 vecAmbient;
float4 vecViewPos;
float4 vecLightColor[8];
float4 vecLightPos[8];

float3x3 matTangent;

texture entSkin1;
sampler ColorMapSampler = sampler_state
{
	Texture = <entSkin1>;
	MipFilter = LINEAR;
};

texture entSkin2;
sampler NormalMapSampler = sampler_state
{
	Texture = <entSkin2>;
	MipFilter = NONE;
};

void NormalMapVS(	in float4 InPos	: POSITION,
in float3 InNormal	: NORMAL,
in float2 InTex		: TEXCOORD0,
in float4 InTangent	: TEXCOORD2,

out float4 OutPos	: POSITION,
out float2 OutTex	: TEXCOORD0,
out float3 OutViewDir: TEXCOORD1,
out float3 OutLightDir0: TEXCOORD2,)
{
	OutPos = mul(InPos, matWorldViewProj);
	OutTex = InTex;
	matTangent[0] = mul(InTangent.xyz, matWorld);
	matTangent[1] = mul(cross(InTangent.xyz,InNormal)*InTangent.w, matWorld);
	matTangent[2] = mul(InNormal, matWorld);
	
	OutViewDir = normalize(mul(matTangent, vecViewPos - mul(InPos, matWorld)));
	
	OutLightDir0 = normalize(mul(matTangent, vecLightPos[0]-InPos.xyz));
}


float4 NormalMapPS(	in float2 InTex  : TEXCOORD0, in float3 InViewDir	: TEXCOORD1, in float3 inPos  :  TEXCOORD3,
in float3 InLightDir0	: TEXCOORD4) : COLOR
{
	float3 BumpNormal = 2 * tex2D(NormalMapSampler, InTex) - 1;
	float4 Ambient = AmbientIntensity * vecAmbient;
	float4 Diffuse[8];
	float Specular[8];	
	float3 R;
	
	Diffuse[0] = DiffuseIntensity * saturate(dot(InLightDir0, BumpNormal));
	Diffuse[0] *= vecLightColor[0];
	R = normalize(2 * dot(BumpNormal, InLightDir0) * BumpNormal - InLightDir0);
	InViewDir = normalize(InViewDir);
	Specular[0] = pow(saturate(dot(R, InViewDir)), SpecularPower) * SpecularIntensity;
	
	float4 Color = tex2D(ColorMapSampler, InTex);
	
	return (Ambient + Diffuse[0] + Specular[0]) * Color;
}

technique SpecularTechnique
{
	pass P0
	{
		VertexShader = compile vs_3_0 NormalMapVS();
		PixelShader  = compile ps_3_0 NormalMapPS();
	}
}


und es ist das ganze nur für 8 lichter, ich hab den shader entsprechend gekürzt, damit er nicht solang ist...
xxxxxxx


Es ist immer wieder erstaunlich, dass Leute die riesen Scripte schreiben die einfachsten sachen nicht können zb. mich mit SIEBEN x zu schreiben! tongue
Re: Beleuchtungsrichtung bei einem Normalmapping Shader [Re: xxxxxxx] #368343
04/24/11 11:44
04/24/11 11:44
Joined: May 2005
Posts: 2,713
Lübeck
Slin Offline
Expert
Slin  Offline
Expert

Joined: May 2005
Posts: 2,713
Lübeck
Dein inPos bei der Berechnung der Lichtrichtung ist im Objectspace, die Lichtposition aber im Worldspace. Bei der Viewrichtung machst du es korrekt, da soeine Matrixmultiplikation allerdings nicht grad billig ist, solltest du die Transformation der Vertexposition nur einmal machen.
Statt phong-shading, kann ich dir auch blinn-phong empfehlen, da es besser aussieht und schneller läuft. Dazu must du nur die specularity etwas abändern.
Wenn du die Viewdir im Pixelshader normalisierst, musst du sie nicht auch noch im Vertexshader normalisieren. Im Pixelshader zu normalisieren ist korrekter, ist aber natürlich lagsamer als im Vertexshader. Da solltest du mal ausprobieren wie sehr sich das aufs Ergebniss auswirkt. Eventuell machts auch Sinn die Normale zu normalisieren, je nach Auflösung der Normalmap.

Re: Beleuchtungsrichtung bei einem Normalmapping Shader [Re: Slin] #368373
04/24/11 18:59
04/24/11 18:59
Joined: Jan 2011
Posts: 797
Da wo du nicht bist! Muhahaha!
xxxxxxx Offline OP
User
xxxxxxx  Offline OP
User

Joined: Jan 2011
Posts: 797
Da wo du nicht bist! Muhahaha!
ich schaffs immer noch nicht...
so siehts jetzt aus(ich hab auch schon mehrfach die vectoren umgedreht usw.):
Code:
OutLightDir0 = normalize(mul(matTangent, -(vecLightPos[0]-mul(InPos, matWorld))));


und so sieht das modell aus:

xxxxxxx


Es ist immer wieder erstaunlich, dass Leute die riesen Scripte schreiben die einfachsten sachen nicht können zb. mich mit SIEBEN x zu schreiben! tongue
Re: Beleuchtungsrichtung bei einem Normalmapping Shader [Re: xxxxxxx] #368567
04/26/11 15:36
04/26/11 15:36
Joined: Jan 2011
Posts: 797
Da wo du nicht bist! Muhahaha!
xxxxxxx Offline OP
User
xxxxxxx  Offline OP
User

Joined: Jan 2011
Posts: 797
Da wo du nicht bist! Muhahaha!
*pUSH


Es ist immer wieder erstaunlich, dass Leute die riesen Scripte schreiben die einfachsten sachen nicht können zb. mich mit SIEBEN x zu schreiben! tongue
Re: Beleuchtungsrichtung bei einem Normalmapping Shader [Re: xxxxxxx] #368678
04/27/11 15:21
04/27/11 15:21
Joined: Jan 2011
Posts: 797
Da wo du nicht bist! Muhahaha!
xxxxxxx Offline OP
User
xxxxxxx  Offline OP
User

Joined: Jan 2011
Posts: 797
Da wo du nicht bist! Muhahaha!
So hab jetzt den anderen Shader genommen abgesehen davon das die haare von einem bestimmten blickwinkel grau erscheinen(der grund warum ich diesen shader vorher nicht verwendet habe) mad sieht er doch ganz gut aus, ist halt gewöhnugsbedürftig...
xxxxxxx


Es ist immer wieder erstaunlich, dass Leute die riesen Scripte schreiben die einfachsten sachen nicht können zb. mich mit SIEBEN x zu schreiben! tongue

Moderated by  Blink, Hummel, Superku 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1