Ohhhh, thanks a lot! It's working perfectly fine now.DavidJE13 wrote:I think this is your problem - ppWhatever->render(NULL) replaces smgr->drawAll(). So remove the drawAll and it should be fine. Not sure why it's working without the skybox.Code: Select all
ppMotionBlur->render( NULL ); smgr->drawAll();
edit: worked it out; it's working when the skybox is disabled because smgr->drawAll isn't filling the screen, so transparent areas are showing the blur. With the skybox, nowhere is transparent during this second render.
btw, you're using non-power-of-two sizes for your post-processing render targets, which is fine but might cause slowdown on some cards (I'm not sure on the details). I'd recommend using 1024x512, unless graphics memory usage is important. This also gives you anti-aliasing on almost all setups for free!
A simple, robust and extendible postprocessing class
great
So I think now the only things left to do are the final directX conversions and fixing the water. If I've forgotten some bug or feature request please tell me!
Also I'm thinking of adding an XML format for loading shaders (no experience with making such things, but I imagine irrlicht's XML reading is simple enough to use)
Here's a sample of the type of XML I'm thinking of - if anyone has any comments on ways to improve it / can see a limitation it would bring, please tell me.
which would then be set up with;
ppChain would be a special node, which usually points to the last effect (as set by the "output" in the xml) which in this case is the pointless overlay. So calling ppChain->render( ); is like calling ppChain->find( "pointless" )->render( );
The renderer will render smgr. To have more than one scene, you would need to specify the others in code, like;
To have the chain link to an existing chain, smgr would be replaced with the existing last post processor, and the xml would have input="name1,name2,etc" near output="whatever". So anywhere "name1" appears, the first input is used. "name2" etc. can be set using ppChain->setInput( whatever ); This is another way to allow multiple scene managers.
calling delete ppChain; will delete all effects loaded from the xml file. Calling delete ppChain->find( "pointless" ); will delete only the output, and update ppChain's last effect to be "flare" in this case. Hence ppChain->render( ); will still be valid.
So I think now the only things left to do are the final directX conversions and fixing the water. If I've forgotten some bug or feature request please tell me!
Also I'm thinking of adding an XML format for loading shaders (no experience with making such things, but I imagine irrlicht's XML reading is simple enough to use)
Here's a sample of the type of XML I'm thinking of - if anyone has any comments on ways to improve it / can see a limitation it would bring, please tell me.
Code: Select all
<postprocessor name="myEffect" output="pointless">
<stage name="scene1" type="renderer" clearbackbuffer="yes" clearzbuffer="yes" background="140,120,180" />
<stage name="fuzzy" type="effect" effect="blur" input="scene1" param1="0.005" quality="fast" />
<stage name="flare" type="lensFlare" input="fuzzy" />
<stage name="pointless" type="effect" effect="overlay" input="flare,weird" param1="1.0" disabled="yes" />
<stage name="weird" type="effect" effect="custom" input="scene1">
<shader quality="default" language="glsl" version="2.0">(GLSL shader here)</shader>
<shader quality="default" language="hlsl" src="shader.hlsl" version="2.0" />
<shader quality="crude" language="glsl" version="1.1">(crude GLSL shader here)</shader>
<shader quality="crude" language="hlsl" version="1.1">(crude HLSL shader here)</shader>
<!-- etc -->
</stage>
</postprocessor>
Code: Select all
IPostProc* ppChain = new CPostProcChain( smgr, "pp.xml", "myEffect" );
((CLensFlarePostProc*) ppChain->find( "flare" ))->setTarget( myObject );
The renderer will render smgr. To have more than one scene, you would need to specify the others in code, like;
Code: Select all
IPostProc* ppChain = new CPostProcChain( smgr, "pp.xml", "myEffect" );
((CRendererPostProc*) ppChain->find( "scene1" ))->setSceneManager( smgr2 );
calling delete ppChain; will delete all effects loaded from the xml file. Calling delete ppChain->find( "pointless" ); will delete only the output, and update ppChain's last effect to be "flare" in this case. Hence ppChain->render( ); will still be valid.
I have a feature request if you have time. I would like effects like the pen and ink effect and the juicy effect that you can get on some Halo maps(forge). Sorry, no pictures. I am currently at school and can not get to any gaming sitesIf I've forgotten some bug or feature request please tell me!
multum in parvo
an ACSII render would be sweet, I've seen it done in the demos at Ogre. They have a great list of filters, take a look at there demo, it's sweet.
Edit:
Oh, no... I had most of the effects working from your version last week, but this week I just added the files to a project and the version I downloaded today won't compile. VS++ v9
Edit:
Oh, no... I had most of the effects working from your version last week, but this week I just added the files to a project and the version I downloaded today won't compile. VS++ v9
1>------ Build started: Project: teste, Configuration: Debug Win32 ------
1>Compiling...
1>main.cpp
1>IPostProc.cpp
1>CWaterPostProc.cpp
1>CTransitionPostProc.cpp
1>CSplitPostProc.cpp
1>CRendererPostProc.cpp
1>CLensFlarePostProc.cpp
1>Generating Code...
1>c:\users\admin\projet\irrlicht-1.5.1\include\irrarray.h(264) : warning C4793: 'irr::core::array<irr::video::S3DVertex,irr::core::irrAllocator<irr::video::S3DVertex> >::operator[]' : function compiled as native :
1> Inline native assembly not supported in managed code
1>c:\users\admin\projet\irrlicht-1.5.1\include\irrarray.h(264) : warning C4793: 'irr::core::array<float,irr::core::irrAllocator<float> >::operator[]' : function compiled as native :
1> Inline native assembly not supported in managed code
1>c:\users\admin\projet\irrlicht-1.5.1\include\irrarray.h(273) : warning C4793: 'irr::core::array<irr::video::S3DVertex,irr::core::irrAllocator<irr::video::S3DVertex> >::operator[]' : function compiled as native :
1> Inline native assembly not supported in managed code
1>c:\users\admin\projet\irrlicht-1.5.1\include\irrarray.h(264) : warning C4793: 'irr::core::array<irr::core::rect<float>,irr::core::irrAllocator<irr::core::rect<float> > >::operator[]' : function compiled as native :
1> Inline native assembly not supported in managed code
1>c:\users\admin\projet\irrlicht-1.5.1\include\irrarray.h(264) : warning C4793: 'irr::core::array<irr::video::S3DVertex,irr::core::irrAllocator<irr::video::S3DVertex> >::operator[]' : function compiled as native :
1> Inline native assembly not supported in managed code
1>c:\users\admin\projet\irrlicht-1.5.1\include\irrarray.h(273) : warning C4793: 'irr::core::array<irr::video::S3DVertex,irr::core::irrAllocator<irr::video::S3DVertex> >::operator[]' : function compiled as native :
1> Inline native assembly not supported in managed code
1>c:\users\admin\projet\irrlicht-1.5.1\include\irrarray.h(264) : warning C4793: 'irr::core::array<IPostProc::PSConnector,irr::core::irrAllocator<IPostProc::PSConnector> >::operator[]' : function compiled as native :
1> Inline native assembly not supported in managed code
1>c:\users\admin\projet\irrlicht-1.5.1\include\irrarray.h(273) : warning C4793: 'irr::core::array<irr::video::S3DVertex,irr::core::irrAllocator<irr::video::S3DVertex> >::operator[]' : function compiled as native :
1> Inline native assembly not supported in managed code
1>c:\users\admin\projet\irrlicht-1.5.1\include\irrarray.h(264) : warning C4793: 'irr::core::array<irr::video::S3DVertex,irr::core::irrAllocator<irr::video::S3DVertex> >::operator[]' : function compiled as native :
1> Inline native assembly not supported in managed code
1>Linking...
1>main.obj : error LNK2028: unresolved token (0A0004EA) "public: __thiscall CEffectPostProc::CEffectPostProc(class IPostProc *,class irr::core::dimension2d<int>,enum POSTPROC_EFFECTID,float,float,float,float,float,float,float,float)" (??0CEffectPostProc@@$$FQAE@PAVIPostProc@@V?$dimension2d@H@core@irr@@W4POSTPROC_EFFECTID@@MMMMMMMM@Z) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall CEffectPostProc::CEffectPostProc(class IPostProc *,class irr::core::dimension2d<int>,enum POSTPROC_EFFECTID,float,float,float,float,float,float,float,float)" (??0CEffectPostProc@@$$FQAE@PAVIPostProc@@V?$dimension2d@H@core@irr@@W4POSTPROC_EFFECTID@@MMMMMMMM@Z) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>C:\Users\Admin\Desktop\irrlicht-1.5.1\examples\teste\Debug\teste.exe : fatal error LNK1120: 2 unresolved externals
1>Build log was saved at "file://c:\Users\Admin\Desktop\irrlicht-1.5.1\examples\teste\teste\Debug\BuildLog.htm"
1>teste - 3 error(s), 9 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
hmm, looks exactly the same as the problem you had before; have you tried the same fix?
ASCII.. interesting, doubt it can be done in a shader, although I could make a special node for it. I'll take a look at their demo
edit: actually, it would be helpful if some guru could explain what this error means - maybe I can change something in the code so that this setting isn't necessary.Switch the compiler to /clr and it should work (Go into Project->Properties-> C++, and turn it from clr:pure or clr:safe to just 'Common Language Runtime support')
ASCII.. interesting, doubt it can be done in a shader, although I could make a special node for it. I'll take a look at their demo
Sorry no pictures again, i am at school. If you go to bungie.net or google/youtube "Halo 3 forge filters"(I think that's what they call them) you should be able to find something. There are about 5 of them, but most of them have already been implemented, except for the pen and ink one(which looks awesome). Sorry, i don't have the shader code, i am not very good with shaders. I wouldn't even know where to start.I'd be happy to add them, but I don't know what either would look like, so I'll need some screenshots / shader code!
multum in parvo
-
- Posts: 1691
- Joined: Sun May 18, 2008 9:42 pm
What about a watercolor rendering filter?
That would be illogical captain...
My first full game:
http://www.kongregate.com/games/3DModel ... tor#tipjar
My first full game:
http://www.kongregate.com/games/3DModel ... tor#tipjar
Won't build with SVN Irrlicht
Code: Select all
1>------ Build started: Project: Postp, Configuration: Debug Win32 ------
1>Compiling...
1>CSplitPostProc.cpp
1>e:\documents and settings\kompiuterius\my documents\downloads\postprocessor\postprocessor\ipostproc.h(78) : error C2664: 'irr::core::dimension2d<T>::dimension2d(const irr::core::vector2d<T> &)' : cannot convert parameter 1 from 'const irr::core::dimension2d<T>' to 'const irr::core::vector2d<T> &'
1> with
1> [
1> T=irr::s32
1> ]
1> and
1> [
1> T=irr::u32
1> ]
1> and
1> [
1> T=irr::s32
1> ]
1> Reason: cannot convert from 'const irr::core::dimension2d<T>' to 'const irr::core::vector2d<T>'
1> with
1> [
1> T=irr::u32
1> ]
1> and
1> [
1> T=irr::s32
1> ]
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Same error over and over and over again.
1>e:\documents and settings\kompiuterius\my documents\downloads\postprocessor\postprocessor\crendererpostproc.cpp(17) : warning C4018: '>=' : signed/unsigned mismatch
1>e:\documents and settings\kompiuterius\my documents\downloads\postprocessor\postprocessor\crendererpostproc.cpp(17) : warning C4018: '>=' : signed/unsigned mismatch
1>Generating Code...
1>Build log was saved at "file://e:\Andriaus\CPP Projektai\Postp\Postp\Debug\BuildLog.htm"
1>Postp - 13 error(s), 2 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
P1SQ4M
as i see you're using .Net project
sad, but in this case i can't help you
but if you want to use a Native C++(not managed), then i could help
also in your screen i see a "for" cycle. can you show this part of code?
edit: just i haven't right now an irrlicht sources, but looks like you have an uninitialised node using
as i see you're using .Net project
sad, but in this case i can't help you
but if you want to use a Native C++(not managed), then i could help
also in your screen i see a "for" cycle. can you show this part of code?
edit: just i haven't right now an irrlicht sources, but looks like you have an uninitialised node using
ok, a fair bit this time;
sp00n;
are you sure? it doesn't look like that to me. Oh well, I'm not very experienced with VS
Adler1337;
ah yes, I see them. (for anyone else interested, I found a good reference here http://hawtymcbloggy.com/2008/04/05/hal ... e-filters/ ) I think they could all be achieved with the effects I already included... let's see;
* gloomy ~= PP_SATURATE( 0.3 ) + PP_RANGE( 0.3, 0.8 )
* juicy ~= PP_SATURATE( 1.5 )
* old timey ~= PP_SEPIA( )
* pen & ink ~= PP_GREYSCALE( 0.8 ) + PP_BLOOM( 8.0, 0.01, 6.0 ) + PP_RANGE( 0.0, 0.95 )
* nova ~= PP_LIGHTEN( 0.6 ) + PP_BLUR( 0.005 ) + PP_BLOOM( 2.0, 0.003, 2.0 )
* colorblind ~= PP_TINT( 1.0, 1.0, 1.1, 1.0 )
haven't tested these, but that's what they look like to me. You may need to play with the numbers a little.
3DModelerMan;
I can think of a way to do this - I'll give it a go and see how it looks.
Murloc992;
I need to check some things with the new version of Irrlicht to see what's going on. I'll get back to you shortly.
As for the warnings, looks like the new Irrlicht is using unsigned integers for dimensions, which is far more logical than before. I've added a fix for them in the next version.
P1SQ4M;
That error means the MEDIA_DIRECTORY constant is wrong. I set it up to work for my environment, but I guess yours is different. Just change this line in main.cpp;
to
(which is what it used to be)
edit: sp00n - yes, you're right about using a NULL node - it's a bit of lazy code in the example, it doesn't test that the sydney model loaded correctly, so the first error is when trying to set the texture.
sp00n;
are you sure? it doesn't look like that to me. Oh well, I'm not very experienced with VS
Adler1337;
ah yes, I see them. (for anyone else interested, I found a good reference here http://hawtymcbloggy.com/2008/04/05/hal ... e-filters/ ) I think they could all be achieved with the effects I already included... let's see;
* gloomy ~= PP_SATURATE( 0.3 ) + PP_RANGE( 0.3, 0.8 )
* juicy ~= PP_SATURATE( 1.5 )
* old timey ~= PP_SEPIA( )
* pen & ink ~= PP_GREYSCALE( 0.8 ) + PP_BLOOM( 8.0, 0.01, 6.0 ) + PP_RANGE( 0.0, 0.95 )
* nova ~= PP_LIGHTEN( 0.6 ) + PP_BLUR( 0.005 ) + PP_BLOOM( 2.0, 0.003, 2.0 )
* colorblind ~= PP_TINT( 1.0, 1.0, 1.1, 1.0 )
haven't tested these, but that's what they look like to me. You may need to play with the numbers a little.
3DModelerMan;
I can think of a way to do this - I'll give it a go and see how it looks.
Murloc992;
I need to check some things with the new version of Irrlicht to see what's going on. I'll get back to you shortly.
As for the warnings, looks like the new Irrlicht is using unsigned integers for dimensions, which is far more logical than before. I've added a fix for them in the next version.
P1SQ4M;
That error means the MEDIA_DIRECTORY constant is wrong. I set it up to work for my environment, but I guess yours is different. Just change this line in main.cpp;
Code: Select all
#define MEDIA_DIRECTORY "media/"
Code: Select all
#define MEDIA_DIRECTORY "../../media/"
edit: sp00n - yes, you're right about using a NULL node - it's a bit of lazy code in the example, it doesn't test that the sydney model loaded correctly, so the first error is when trying to set the texture.
Thanks, I didn't realize they were already implemented.ah yes, I see them. (for anyone else interested, I found a good reference here http://hawtymcbloggy.com/2008/04/05/hal ... e-filters/ ) I think they could all be achieved with the effects I already included... let's see;
* gloomy ~= PP_SATURATE( 0.3 ) + PP_RANGE( 0.3, 0.8 )
* juicy ~= PP_SATURATE( 1.5 )
* old timey ~= PP_SEPIA( )
* pen & ink ~= PP_GREYSCALE( 0.8 ) + PP_BLOOM( 8.0, 0.01, 6.0 ) + PP_RANGE( 0.0, 0.95 )
* nova ~= PP_LIGHTEN( 0.6 ) + PP_BLUR( 0.005 ) + PP_BLOOM( 2.0, 0.003, 2.0 )
* colorblind ~= PP_TINT( 1.0, 1.0, 1.1, 1.0 )
haven't tested these, but that's what they look like to me. You may need to play with the numbers a little.
multum in parvo