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
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
3 registered members (AndrewAMD, Quad, M_D), 1,217 guests, and 1 spider.
Key: Admin, Global Mod, Mod
Newest Members
firatv, wandaluciaia, Mega_Rod, EternallyCurious, howardR
19050 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Der Camera einen Shader zuordnen #452069
06/01/15 17:31
06/01/15 17:31
Joined: Jan 2008
Posts: 353
G
grinseengel Offline OP
Senior Member
grinseengel  Offline OP
Senior Member
G

Joined: Jan 2008
Posts: 353
Hallo Community,

im User-WIKI befindet sich ein Blur-Shader. Wie kann ich der vorgegebenen Camera diesen Shader zuordnen? Das geht ja in diesem Fall nicht über eine Actions-Zuordnung. Kann mir jemand bei meinem Problem behilflich sein?

Gruß, Andreas

Re: Der Camera einen Shader zuordnen [Re: grinseengel] #452070
06/01/15 17:47
06/01/15 17:47
Joined: Jul 2008
Posts: 2,107
Germany
rayp Offline

X
rayp  Offline

X

Joined: Jul 2008
Posts: 2,107
Germany
Mittels
Code:
pp_add (shader);

oder
Code:
pp_set (camera, shader);

Vorher die mtlView.c per include einbinden ( natürlich nur wenn Du die Std - PP Shader nutzen willst ).

Wenn ich nicht irre, taucht PP_ADD nicht im Handbuch auf, btw. ^^

LG


Acknex umgibt uns...zwischen Dir, mir, dem Stein dort...
"Hey Griswold ... where u gonna put a tree that big ?"
1998 i married my loved wife ... Sheeva from Mortal Kombat, not Evil-Lyn as might have been expected
rayp.flags |= UNTOUCHABLE;
Re: Der Camera einen Shader zuordnen [Re: rayp] #452102
06/02/15 16:13
06/02/15 16:13
Joined: Jan 2008
Posts: 353
G
grinseengel Offline OP
Senior Member
grinseengel  Offline OP
Senior Member
G

Joined: Jan 2008
Posts: 353
Vielen dank für deine Hilfe. Hat prima funktioniert.

Quote:
Wenn ich nicht irre, taucht PP_ADD nicht im Handbuch auf, btw. ^^


Das stimmt, ich habe auch nochmal nachgesehen.

Jetzt habe ich noch eine Frage. Ich benötige nur im Hintergrund eine gewisse Unschärfe. Mit welchem Shader ict dies möglich. Jedenfalls nicht mit den mitgelieferten Shadern aus der mtlView.c.

Gruß, Andreas

Re: Der Camera einen Shader zuordnen [Re: grinseengel] #452108
06/02/15 16:59
06/02/15 16:59
Joined: Jul 2008
Posts: 2,107
Germany
rayp Offline

X
rayp  Offline

X

Joined: Jul 2008
Posts: 2,107
Germany
Was Du willst nennt sich DoF ( depth of field ). Gibt es nicht in den Std. Shadern, aber in ShadeC ( dem Tor zur modernen Welt grin ).

Vorsicht: Ein schlechter DoF PP killt Dir die Framerate, aber so was von! ^^

MfG


Acknex umgibt uns...zwischen Dir, mir, dem Stein dort...
"Hey Griswold ... where u gonna put a tree that big ?"
1998 i married my loved wife ... Sheeva from Mortal Kombat, not Evil-Lyn as might have been expected
rayp.flags |= UNTOUCHABLE;
Re: Der Camera einen Shader zuordnen [Re: rayp] #452139
06/03/15 14:22
06/03/15 14:22
Joined: Jan 2008
Posts: 353
G
grinseengel Offline OP
Senior Member
grinseengel  Offline OP
Senior Member
G

Joined: Jan 2008
Posts: 353
Ok, die ShadeC habe ich mir jetzt geladen. Ein weiteres Problem habe ich. Das Einbinden der Shader bereitet mir große Probleme. Ich ahbe jetzt den DoF Shader.

Das ist die Dof.h

Code:
void sc_dof_init(SC_SCREEN* screen);
void sc_dof_destroy(SC_SCREEN* screen);
void sc_dof_frm(SC_SCREEN* screen);

STRING* sc_dof_sMaterial = "sc_dof.fx";
STRING* sc_dof_sMaterialDownsample = "sc_dof_downsample.fx";
STRING* sc_dof_sMaterialBlurX = "sc_dof_blurX.fx";
STRING* sc_dof_sMaterialBlurY = "sc_dof_blurY.fx";



Das ist die Dof.c:

Code:
void sc_dof_MaterialEvent()
{
	SC_SCREEN* screen = (SC_SCREEN*)(mtl.SC_SKILL);
	/*
	if(screen)
	{
		if(screen.views.gBuffer == NULL)
		{
			//free(screen);
			return(1);
		}
	}
	else
	{
		//free(screen);
		return(1);
	}
	*/
	switch(render_view)
	{
		case screen.views.dof:
			screen.views.preDOF.bmap = screen.renderTargets.full0;
			break;
			
		case screen.views.dofDownsample:
			screen.views.preDOF.bmap = screen.renderTargets.full0;
			screen.views.dofDownsample.bmap = screen.renderTargets.quarter0;
			break;
			
		case screen.views.dofBlurX:
			screen.views.dofBlurX.bmap = screen.renderTargets.quarter1;
			screen.views.dofBlurX.target1 = screen.renderTargets.quarter2;
			break;
		
		case screen.views.dofBlurY:
			screen.views.dofBlurY.bmap = screen.renderTargets.quarter0;
			break;
		
		default:
			break;
	}
	//if(render_view == screen.views.dofDownsample) screen.views.deferred.bmap = screen.renderTargets.full0;
	//else screen.views.deferred.bmap = NULL;
}

void sc_dof_init(SC_SCREEN* screen)
{
	//create materials
	
		//dof
		screen.materials.dof = mtl_create();
		effect_load(screen.materials.dof, sc_dof_sMaterial);
		screen.materials.dof.skin1 = screen.renderTargets.full0;// this contains the current scene without dof
		screen.materials.dof.skin2 = screen.renderTargets.quarter0;// this contains the blurred scene
		screen.materials.dof.skin3 = screen.renderTargets.gBuffer[SC_GBUFFER_NORMALS_AND_DEPTH];
		screen.materials.dof.skill1 = floatv(0.25); // inverted downsample factor
		screen.materials.dof.event = sc_dof_MaterialEvent;
		screen.materials.dof.SC_SKILL = screen;
		set(screen.materials.dof, ENABLE_VIEW);
	
		//blur y
		screen.materials.dofBlurY = mtl_create();
		effect_load(screen.materials.dofBlurY, sc_dof_sMaterialBlurY);
		screen.materials.dofBlurY.skin1 = screen.renderTargets.quarter1;// this contains the x blurred scene, with unblurred focus
		screen.materials.dofBlurY.skin2 = screen.renderTargets.gBuffer[SC_GBUFFER_NORMALS_AND_DEPTH];
		screen.materials.dofBlurY.skin3 = screen.renderTargets.quarter2;// this contains the downsampled scene, with blurred focus
		screen.materials.dofBlurY.skill1 = floatv(screen.settings.dof.blurY); //blur strength
		screen.materials.dofBlurY.event = sc_dof_MaterialEvent;
		screen.materials.dofBlurY.SC_SKILL = screen;
		set(screen.materials.dofBlurY, ENABLE_VIEW);
			
		//blur x
		screen.materials.dofBlurX = mtl_create();
		effect_load(screen.materials.dofBlurX, sc_dof_sMaterialBlurX);
		screen.materials.dofBlurX.skin1 = screen.renderTargets.quarter0;// this contains the downsampled scene
		screen.materials.dofBlurX.skin2 = screen.renderTargets.gBuffer[SC_GBUFFER_NORMALS_AND_DEPTH];
		screen.materials.dofBlurX.skill1 = floatv(screen.settings.dof.blurX); //blur strength
		screen.materials.dofBlurX.event = sc_dof_MaterialEvent;
		screen.materials.dofBlurX.SC_SKILL = screen;
		set(screen.materials.dofBlurX, ENABLE_VIEW);
		
		//downsample
		screen.materials.dofDownsample = mtl_create();
		effect_load(screen.materials.dofDownsample, sc_dof_sMaterialDownsample);
		screen.materials.dofDownsample.skin1 = screen.renderTargets.full0;// this contains the current scene without dof
		screen.materials.dofDownsample.skin2 = screen.renderTargets.gBuffer[SC_GBUFFER_NORMALS_AND_DEPTH];
		screen.materials.dofDownsample.skill1 = floatv(4); //downsample factor
		screen.materials.dofDownsample.event = sc_dof_MaterialEvent;
		screen.materials.dofDownsample.SC_SKILL = screen;
		set(screen.materials.dofDownsample, ENABLE_VIEW);
	
	
	//setup views
	
		//dof
		screen.views.dof = view_create(2);
		set(screen.views.dof, PROCESS_TARGET);
		set(screen.views.dof, UNTOUCHABLE);
		set(screen.views.dof, NOSHADOW);
		reset(screen.views.dof, AUDIBLE);
		set(screen.views.dof, CHILD);
		screen.views.dof.size_x = screen.views.main.size_x;
		screen.views.dof.size_y = screen.views.main.size_y;
		screen.views.dof.material = screen.materials.dof;
		//screen.views.dof.bmap = screen.renderTargets.quarter0; //assign temp render target so Acknex does not automatically create a new one
	
		//blur y
		screen.views.dofBlurY = view_create(2);
		set(screen.views.dofBlurY, PROCESS_TARGET);
		set(screen.views.dofBlurY, UNTOUCHABLE);
		set(screen.views.dofBlurY, NOSHADOW);
		reset(screen.views.dofBlurY, AUDIBLE);
		set(screen.views.dofBlurY, CHILD);
		screen.views.dofBlurY.size_x = screen.views.main.size_x/4;
		screen.views.dofBlurY.size_y = screen.views.main.size_y/4;
		screen.views.dofBlurY.material = screen.materials.dofBlurY;
		screen.views.dofBlurY.stage = screen.views.dof;
		screen.views.dofBlurY.bmap = screen.renderTargets.quarter0; //assign temp render target so Acknex does not automatically create a new one
		
		//blur x
		screen.views.dofBlurX = view_create(2);
		set(screen.views.dofBlurX, PROCESS_TARGET);
		set(screen.views.dofBlurX, UNTOUCHABLE);
		set(screen.views.dofBlurX, NOSHADOW);
		reset(screen.views.dofBlurX, AUDIBLE);
		set(screen.views.dofBlurX, CHILD);
		screen.views.dofBlurX.size_x = screen.views.main.size_x/4;
		screen.views.dofBlurX.size_y = screen.views.main.size_y/4;
		screen.views.dofBlurX.material = screen.materials.dofBlurX;
		screen.views.dofBlurX.stage = screen.views.dofBlurY;
		screen.views.dofBlurX.bmap = screen.renderTargets.quarter0; //assign temp render target so Acknex does not automatically create a new one
		screen.views.dofBlurX.target1 = screen.renderTargets.quarter2; //assign temp render target so Acknex does not automatically create a new one
		
		//downsample
		screen.views.dofDownsample = view_create(2);
		set(screen.views.dofDownsample, PROCESS_TARGET);
		set(screen.views.dofDownsample, UNTOUCHABLE);
		set(screen.views.dofDownsample, NOSHADOW);
		reset(screen.views.dofDownsample, AUDIBLE);
		set(screen.views.dofDownsample, CHILD);
		screen.views.dofDownsample.size_x = screen.views.main.size_x/4;
		screen.views.dofDownsample.size_y = screen.views.main.size_y/4;
		screen.views.dofDownsample.material = screen.materials.dofDownsample;
		screen.views.dofDownsample.stage = screen.views.dofBlurX;
		screen.views.dofDownsample.bmap = screen.renderTargets.quarter0; //assign temp render target so Acknex does not automatically create a new one
		
		
		
	//apply to camera
	VIEW* view_last;
	view_last = screen.views.main;
	while(view_last.stage != NULL)
	{
		view_last = view_last.stage;
	}
	view_last.stage = screen.views.dofDownsample;
	screen.views.preDOF = view_last;
}

void sc_dof_destroy(SC_SCREEN* screen)
{
	if(!screen) return 0;
	if(screen.views.dof != NULL)
	{
		if(is(screen.views.dof,NOSHADOW))
		{
			
			reset(screen.views.dof,NOSHADOW);
			//purge render targets
			//bmap_purge(screen.views.deferred.bmap);
			//screen.views.deferred.bmap = NULL;
						
			//remove from view chain
			VIEW* view_last;
			view_last = screen.views.main;
			while(view_last.stage != screen.views.dofDownsample && view_last.stage != NULL)
			{
				view_last = view_last.stage;
			}
				
			if(screen.views.dof.stage) view_last.stage = screen.views.dof.stage;
			else view_last.stage = NULL;
			
			//if(screen.sc_dof_view.bmap) view_last.bmap = screen.sc_dof_mapOrgScene;
			//else view_last.bmap = NULL;
		}
	}
	return 1;
}

void sc_dof_frm(SC_SCREEN* screen)
{
	if(screen.views.dof != NULL)
	{
		screen.materials.dofDownsample.skill2 = floatv(screen.views.main.clip_far);
		screen.materials.dofDownsample.skill3 = floatv(screen.settings.dof.focalPos); //focal plane pos
		screen.materials.dofDownsample.skill4 = floatv(screen.settings.dof.focalWidth); //focal plane width
		
		screen.materials.dof.skill2 = floatv(screen.views.main.clip_far);
		screen.materials.dof.skill3 = floatv(screen.settings.dof.focalPos); //focal plane pos
		screen.materials.dof.skill4 = floatv(screen.settings.dof.focalWidth); //focal plane width
		
		screen.materials.dofBlurX.skill1 = floatv(screen.settings.dof.blurX); //blur strength
		screen.materials.dofBlurY.skill1 = floatv(screen.settings.dof.blurY); //blur strength
	}
}



Wie rufe ich das jetzt von meinem Projekt aus auf?

Re: Der Camera einen Shader zuordnen [Re: grinseengel] #452160
06/04/15 17:09
06/04/15 17:09
Joined: Jul 2008
Posts: 2,107
Germany
rayp Offline

X
rayp  Offline

X

Joined: Jul 2008
Posts: 2,107
Germany
So weit ich weiss darf man einzelne Teile nicht aus ShadeC entfernen. Ich dürfte / will Dir also nur helfen, so fern Du ShadeC komplett einbindest. Sry. ^^

edit: Wie man ihn dann nutzt, steht in den Dokus, ist ruck zuck eingestellt.

edit2: Grad fällt mir ein, Du könntest auch den DoF von "Slin" hier im Forum suchen, der war stand - alone. mfg


Last edited by rayp; 06/06/15 16:03.

Acknex umgibt uns...zwischen Dir, mir, dem Stein dort...
"Hey Griswold ... where u gonna put a tree that big ?"
1998 i married my loved wife ... Sheeva from Mortal Kombat, not Evil-Lyn as might have been expected
rayp.flags |= UNTOUCHABLE;

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