3 registered members (Ayumi, Akow, AndrewAMD),
1,505
guests, and 9
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
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
X
|
X
Joined: Jul 2008
Posts: 2,107
Germany
|
Mittels oder 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
grinseengel
OP
Senior Member
|
OP
Senior Member
Joined: Jan 2008
Posts: 353
|
Vielen dank für deine Hilfe. Hat prima funktioniert. 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
X
|
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 ). 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
grinseengel
OP
Senior Member
|
OP
Senior Member
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
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:
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
X
|
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;
|
|
|
|