Gamestudio Links
Zorro Links
Newest Posts
AlpacaZorroPlugin v1.3.0 Released
by kzhao. 05/22/24 13:41
Free Live Data for Zorro with Paper Trading?
by AbrahamR. 05/18/24 13:28
Change chart colours
by 7th_zorro. 05/11/24 09:25
Data from CSV not parsed correctly
by dr_panther. 05/06/24 18:50
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
2 registered members (NnamueN, 1 invisible), 1,489 guests, and 6 spiders.
Key: Admin, Global Mod, Mod
Newest Members
LucasJoshua, Baklazhan, Hanky27, firatv, wandaluciaia
19054 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 1 of 4 1 2 3 4
Texturteilabschnitte "leuchten" lassen. #331535
07/04/10 21:38
07/04/10 21:38
Joined: Nov 2005
Posts: 112
M
miez Offline OP
Member
miez  Offline OP
Member
M

Joined: Nov 2005
Posts: 112
Ich habe eine Frage bezüglich eines sehr alten Effekts, den ich in Quake 1 gesehen habe.

Ich habe folgende Textur erstellt:


Ich möchte nun der Textur "sagen", dass die roten Linien immer die maximale Helligkeit anzeigen, unabhängig von der Dunkelheit des Levels, selbst bei völliger Dunkelheit, sogesehen dass diese Bereiche nicht von der Shadowmap abgedunkelt werden.
Zu 90% vermute ich schon als Antwort Shader, nur kann ich keine Schreiben (Bin ja grad mal an Lite-C dran).
Nur, Q1 hatte noch keine Shader, wie man sie heute kennt.
Wie wurde das damals gemacht?
Und mit dem GS ist es auf jeden Fall möglich, denn ich habe heute eine interessante A6-Demo gesehen, ein Kirmes-Gefährt ähnlich dem Breakdancer und dort war genau der Effekt zu sehen, bei den animierten Glühbirnen am Mittelpodest und den Hecks der Fahrgondeln. Durch die Demo bin ich überhaupt erst wieder darauf aufmerksam geworden.

Leider war es eine WRS Datei, sonst hätte ich es durch den Code herausbekommen...

Last edited by miez; 07/04/10 21:39.
Re: Texturteilabschnitte "leuchten" lassen. [Re: miez] #331540
07/04/10 22:23
07/04/10 22:23
Joined: May 2005
Posts: 2,713
Lübeck
Slin Offline
Expert
Slin  Offline
Expert

Joined: May 2005
Posts: 2,713
Lübeck
Shader! laugh
Du könntest in 2 passes rendern, einmal mit und einmal ohne Shading und zweiteres anhand der Alphamap der Textur, bei der dann die hellen Bereiche voll sichbar sein sollten, blenden.
Warscheinlich geht es noch irgendwie elegeanter in einem Pass, aber in diesen eher altmodischen Tricks stecke ich nicht so sehr drinn wink.

Re: Texturteilabschnitte "leuchten" lassen. [Re: miez] #331545
07/04/10 23:27
07/04/10 23:27
Joined: Apr 2010
Posts: 172
W
wdlmaster Offline
Member
wdlmaster  Offline
Member
W

Joined: Apr 2010
Posts: 172
Originally Posted By: miez
...Zu 90% vermute ich schon als Antwort Shader...

Korrekt!
Code:
float4x4 matWorldViewProj;

texture entSkin1;
texture entSkin2;

sampler SKIN 	= sampler_state { texture = <entSkin1>;};
sampler LIGHT 	= sampler_state { texture = <entSkin2>;};

float4 VS (	in float4 P : position,
		in float2 T1 : texcoord0,
		in float2 T2 : texcoord1,
		out float4 tex : texcoord0) : position {

	tex.xy = T1;
	tex.zw = T2;
	return mul(P,matWorldViewProj);}

float4 PS (	in float4 tex : texcoord0) : color {

	float4 color = tex2D(SKIN,tex.xy);
	color = lerp (color,color*tex2D(LIGHT,tex.zw),color.a);
	return color;}

technique t{ pass p{
	
	zWriteEnable = 1;
	AlphaBlendEnable = 0;
	VertexShader = compile vs_2_0 VS();
	PixelShader = compile ps_2_0 PS();	}}


Du brauchst ledeglich im Alphakanal deiner Textur anzugeben, was NICHT beleuchtet werden soll --> je schwärzer desto leuchtender...

Re: Texturteilabschnitte "leuchten" lassen. [Re: wdlmaster] #331549
07/04/10 23:56
07/04/10 23:56
Joined: Feb 2009
Posts: 2,154
Damocles_ Offline
Expert
Damocles_  Offline
Expert

Joined: Feb 2009
Posts: 2,154
Ich schätze mal zu Quake Zeiten, wo man noch eine Palette
benutzt hatte, hat man die entsprechene Farbe der Textur einfach als "unbeschattet" definiert, und sie dann in einem hellen Farbton dargestellt.

Re: Texturteilabschnitte "leuchten" lassen. [Re: Damocles_] #331570
07/05/10 06:49
07/05/10 06:49
Joined: Jul 2001
Posts: 6,904
H
HeelX Offline
Senior Expert
HeelX  Offline
Senior Expert
H

Joined: Jul 2001
Posts: 6,904
@WDLMaster: das Problem an deinem Shader ist aber, dass das Standard-Gamestudio Lightning damit, so wie ich es sehe, komplett außer Kraft gesetzt wird... dann kannste das auch gleich so in die Textur einbacken und UNLIT setzen ;-)

Ich würde ein seperates Rendertarget aufmachen und darein über einen Pixelshader den Alphakanal maskieren welcher Pixel leuchten soll und zwar über den Alphakanal der Textur, der angibt, wo was leuchten soll. Der Vorteil ist, dass das Mipmapping dann auch schon korrekt die Alpha-Daten interpoliert, sodass du niemals "zu scharfe" Leuchtränder hast auch wenn du bereits mipmaps verwendest. Dann setzt du den RGB Wert des Pixels mit dem direkten Farbwert aus der Textur. Anschließend kannst du dann in einem Postprocessing-Shader dann das Kamerabild und das Leuchtbild kombinieren, indem du den Farbpixel des Kamerabildes um den maskierten Alphawert in Richtung der Leuchtfarbe mittels lerp interpolierst.

Der Vorteil des Verfahrens ist, dass es "over the top" laufen würde, das heißt, du kannst es einfach über dem normalen Gamestudio-Lightning laufen lassen. Zusätzlich könntest du auch das Leuchtbild blurren, sodass ein echter "Glüh" Effekt auftritt.

Last edited by HeelX; 07/05/10 06:57.
Re: Texturteilabschnitte "leuchten" lassen. [Re: HeelX] #331596
07/05/10 10:23
07/05/10 10:23
Joined: May 2005
Posts: 2,713
Lübeck
Slin Offline
Expert
Slin  Offline
Expert

Joined: May 2005
Posts: 2,713
Lübeck
Ich habe es nicht getestet, aber soetwas müsste eigentlich funktionieren:
Code:
texture entSkin1;

technique t0
{
	pass P0
	{
		AlphaBlendEnable = False;
		AlphaTestEnable = False;
		ZEnable = True;
		ZWriteEnable = True;
	}
	Pass p1
	{
		AlphaBlendEnable = True;
		SrcBlend = SrcAlpha;
		DestBlend = InvSrcAlpha;
		ZEnable = True;
		ZWriteEnable = True;
		DitherEnable = True;
		
		Texture[0] = <entSkin1>;
		MagFilter[0] = Linear;
		MinFilter[0] = Linear;
		MipFilter[0] = Linear;
		
		texcoordindex[0] = 0;
		ColorArg1[0] = Texture;
		ColorOp[0] = selectarg1;
		AlphaOp[0] = selectarg1;
		
		ColorOp[1] = Disable;
		AlphaOp[1] = Disable;
	}
}



Re: Texturteilabschnitte "leuchten" lassen. [Re: HeelX] #331597
07/05/10 10:35
07/05/10 10:35
Joined: Apr 2010
Posts: 172
W
wdlmaster Offline
Member
wdlmaster  Offline
Member
W

Joined: Apr 2010
Posts: 172
Quote:
das Problem an deinem Shader ist aber, dass das Standard-Gamestudio Lightning damit, so wie ich es sehe, komplett außer Kraft gesetzt wird...

ja, das hab ich im Nachhinein auch gemerkt. Aber ich kann ja als Ausrede immer noch behaupten, dass es 1:30 morgens war...

Quote:
dann kannste das auch gleich so in die Textur einbacken und UNLIT setzen ;-)

Das stimmt nicht ganz, denn es wird ja immerhin die Lightmap berücksichtigt laugh

Re: Texturteilabschnitte "leuchten" lassen. [Re: wdlmaster] #331603
07/05/10 11:39
07/05/10 11:39
Joined: Nov 2005
Posts: 112
M
miez Offline OP
Member
miez  Offline OP
Member
M

Joined: Nov 2005
Posts: 112
@HeeliX: Es heißt nicht jemand in deiner Verwandschaft zufällig "Carmack" oder...? Ich find es immer wieder erstaunlich, was einige hier draufhaben.

Also der erste Code in einem Shader gepackt funktioniert!
WdlMaster, hast du das mal eben aus dem Ärmel programmiert?
Ich wäre ja schon froh, wenn ich sowas um 12 Uhr Mittags Hinkriegen würde, aber die Shadersyntax ist mir zu abstrakt.



Freude Götterfunken! Seit A5 hab ich darauf gewartet und hatte damals diese Frage gestellt (Ewig her, 5 Jahre vielleicht...) und damals konnte niemand etwas dazu sagen, bzw. hatte zwei "Keine Ahnung"-Replies.

Aber es stimmt...
Es funktioniert nur mit statischem Licht. Wenn ich mit dynamischen Licht runrenne, bleiben die dunklen\schwarzen Flächen wie sie sind.
Was mache ich eigentlich mit dem zweiten geposteten Codesnippet? Der sieht für einen Shader irgendwie nicht komplett aus. Ich hab den Code mal als FX ausprobiert, aber im Level waren alle Wände mit 255 Helligkeit erleuchtet.
Muss ich den Code im vorangegangenen Shader an einer Stelle einfügen?

Last edited by miez; 07/05/10 12:31.
Re: Texturteilabschnitte "leuchten" lassen. [Re: miez] #331605
07/05/10 12:16
07/05/10 12:16
Joined: May 2005
Posts: 2,713
Lübeck
Slin Offline
Expert
Slin  Offline
Expert

Joined: May 2005
Posts: 2,713
Lübeck
Naja, es handelt sich um die von dir gewünschte Shaderlose Lösung die zumindest auf Hardware von 2000 noch funktionieren müsste wink. Sie sollte auch mit der Beleuchtung zurecht kommen. Verwendet wird es wie ein Shader, es handelt sich aber um einen Fixed Function Effekt. Wie es aussieht habe ich aber irgendetwas falsch gemacht wink. Die HLSL, CG oder auch GLSL Syntax ist mir deutlich geläufiger als dieser doch ziemlich altmodische Kram.
Es soll eigentlich die Umsetzung von dem sein, was ich in meinem ersten Post geschrieben habe. Dabei entspricht es auch in etwa dem von Christian beschriebenen, nur etwas performanter und altmodischer, was dabei auch verzicht auf einen Blur bedeutet. Was man mit simplem Bloom aber vielleicht nachholen könnte wink.

Re: Texturteilabschnitte "leuchten" lassen. [Re: miez] #331607
07/05/10 12:30
07/05/10 12:30
Joined: Apr 2010
Posts: 172
W
wdlmaster Offline
Member
wdlmaster  Offline
Member
W

Joined: Apr 2010
Posts: 172
ich hab hier noch die performance-lastige Variante (braucht Shader Model 3, es sei denn, du brauchst nur Vertex lighting, dann tuts auch 2)
Code:
#define sat saturate
#define dst distance
#define vlc vecLightColor
#define vlp vecLightPos

float4x4 matWorldViewProj;
float4x4 matWorld;

float4 vecLightColor[8];
float4 vecLightPos[8];
int iLights;

texture entSkin1;
texture entSkin2;

sampler SKIN 	= sampler_state { texture = <entSkin1>;};
sampler LIGHT 	= sampler_state { texture = <entSkin2>;};

float4 VS (	in float4 P : position,
		in float2 T1 : texcoord0,
		in float2 T2 : texcoord1,
		out float4 tex : texcoord0,
		out float3 pos : texcoord1) : position {

	tex.xy = T1;
	tex.zw = T2;
	pos = mul(P,matWorld).xyz;
	return mul(P,matWorldViewProj);}

float4 PS (	in float4 tex : texcoord0,
		in float3 pos : texcoord1) : color {

	float4 color = tex2D(SKIN,tex.xy);
	float4 L = 0;	
	for (int i=0; i<iLights; i++) L += vlc[i] * sat((vlp[i].w - dst(vlp[i].xyz,pos)) / vlp[i].w);
	color = lerp (color,color * (tex2D(LIGHT,tex.zw) + L),color.a);
	return color;}

technique t{ pass p{
	
	zWriteEnable = 1;
	AlphaBlendEnable = 0;
	VertexShader = compile vs_2_0 VS();
	PixelShader = compile ps_3_0 PS();	}}


aber wahrscheinlich is der FFP Effekt für so ein Oldschool Projekt angemessener grin

Page 1 of 4 1 2 3 4

Moderated by  HeelX, Spirit 

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