I was thinking of creating some sort of material.xml and assign it to each
object (or a group of objects).
As far as I understand, the define approach creates one shader per object
eventually. And that turns out to be faster than one shader per pipeline
with different StateSets and uniforms per object.
Am I correct?
Thanks.


2013/11/7 Sebastian Messerschmidt <sebastian.messerschm...@gmx.de>

>  As this is company code and part of a bigger framework I can only give
> you some hints.
>
> I have a custom shader loader which parses the shader source in order to
> later add the defines and creates a osg::Program derived class
> e.g. CustomProgram.
>
> In GLSL you can use preprocessor macros like in C.
> So you can say:
>
> #define PATH_1
>
> and later
>
> vec4  color = vec4();
> #ifdef PATH_1
>     color = vec4(1,0,0,0);
> #else
>     color = vec4(0,0,1,0);
> #endif
>
> So  the shader loader will create the CustomProgram which holds a list of
> defines which should be applied later.
> The CustomProgram itself will do this in the ::apply function, by
> injecting the #define %DEFINE_NAME% in to the shadersource before compiling
> it.
>
> For setting the defines at the statesets you want, you can simply check
> the stateset for a program-attribute, cast it to CustomShader and add a
> define.
> You will have to do some management inside the CustomProgram to make it
> aware of changed define-sets etc. But it the end you are simply adding some
> custom attributes to control the compiled shader program at the state set,
> instead of setting uniforms directly.
> While this seems complicated it allows for two things:
> 1. Fast less-branching shader code
> 2. Different sets of shaders realizing rendering based upon defines. In my
> case I can do deferred and forward shading with the same framework without
> having to know which one is running under the hood, when assigning
> materials/material effects.
>
> cheers
> Sebastian
>
>   Can you please provide an example of how an object manages its
> define-set?
> In my case, I simply get the object's StateSet and setup uniforms. But I
> don't get how to setup defines.
> Thanks.
>
>
> 2013/11/7 Sebastian Messerschmidt <sebastian.messerschm...@gmx.de>
>
>>  Am 07.11.2013 12:55, schrieb michael kapelko:
>>
>>  Hi, Sebastian.
>>
>>  So you compose one shader per object?
>>
>>  No, one program per define-set (e.g. #define NORMAL_MAPPING,#define
>> PARALLAX_MAPPING, ...)
>> The idea is not to compose the shader from functional blocks, but to
>> write one shader containing all paths which are activated based upon the
>> defines.
>> It is still complicated to get all the paths correctly in the ubershader,
>> but i found it a good transition from uniform based de/activation.
>>
>> So you will end up with N different programs with N being the number of
>> define-combinations used.
>>
>>
>>
>>  Thanks.
>>
>>
>> 2013/11/7 Sebastian Messerschmidt <sebastian.messerschm...@gmx.de>
>>
>>>  Hi Michael,
>>>
>>> I solved a similar problem by overriding osg::Program which composes a
>>> shader from an Ubershader. This is not done via uniforms but defines.
>>> It seems to work somehow and improved the performance over branching
>>> based on uniforms.
>>>
>>>
>>>    Hi.
>>>
>>>  I decided to go with single pipeline that provides big shaders and
>>> objects using own uniforms and textures to change the pipeline behaviour.
>>> I started to design a simple material format so that it resembles the
>>> one of EffectCompositor.
>>>
>>>  Thanks.
>>>
>>>
>>> 2013/10/31 michael kapelko <korn...@gmail.com>
>>>
>>>>  Hi, Wang.
>>>>
>>>>  I've just checked if I can use some uber shader and control its
>>>> behaviour per object by setting the object's uniforms. And it works.
>>>> I wonder if that's ok to do that to make different objects rendered
>>>> differently in the same scene.
>>>> Thanks.
>>>>
>>>>
>>>> 2013/10/31 Wang Rui <wangra...@gmail.com>
>>>>
>>>>> Hi Michael,
>>>>>
>>>>>  Effect compositor in fact adds the child scene graph to a camera
>>>>> binding to a FBO, and then uses RTT cameras to perform the post processing
>>>>> work. The last step is always to show the final image on an HUD quad so 
>>>>> all
>>>>> other scene nodes will be occluded. The only way to make the effect
>>>>> compositor work with other fixed pipeline nodes is to write to the depth
>>>>> values in the shader code of the last step, which cannot be automated.
>>>>>
>>>>>  The dof.xml does such work so you may try ./osgeffectcompositor
>>>>> --normal-scene cessna.osg --effect dof.xml to see how normal and deferred
>>>>> shaded objects are merged. At present I haven't had a better idea about
>>>>> this problem. :-)
>>>>>
>>>>>  Wang Rui
>>>>>
>>>>>
>>>>>
>>>>> 2013/10/30 michael kapelko <korn...@gmail.com>
>>>>>
>>>>>>   Hi.
>>>>>>  I've recently implemented deferred shading with normal mapping and
>>>>>> shadow mapping using EffectCompositor, but it has effect on the whole
>>>>>> scene, not a single object.
>>>>>> Is it possible to use EffectCompositor to apply effects per object?
>>>>>> Thanks.
>>>>>>
>>>>>>  _______________________________________________
>>>>>> osg-users mailing list
>>>>>> osg-users@lists.openscenegraph.org
>>>>>>
>>>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> osg-users mailing list
>>>>> osg-users@lists.openscenegraph.org
>>>>>
>>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>>>>
>>>>>
>>>>
>>>
>>>
>>> _______________________________________________
>>> osg-users mailing 
>>> listosg-users@lists.openscenegraph.orghttp://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>>
>>>
>>>
>>> _______________________________________________
>>> osg-users mailing list
>>> osg-users@lists.openscenegraph.org
>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>>
>>>
>>
>>
>> _______________________________________________
>> osg-users mailing 
>> listosg-users@lists.openscenegraph.orghttp://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
>>
>>
>> _______________________________________________
>> osg-users mailing list
>> osg-users@lists.openscenegraph.org
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
>>
>
>
> _______________________________________________
> osg-users mailing 
> listosg-users@lists.openscenegraph.orghttp://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
>
> _______________________________________________
> osg-users mailing list
> osg-users@lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to