Jump to content

  • Log In with Google      Sign In   
  • Create Account


modular pass-based (forward / deferred) rendering


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 woutervd   Members   -  Reputation: 122

Like
0Likes
Like

Posted 17 January 2012 - 12:48 PM

Hi,

For the next 5 months I will be working on a rendering engine (very bare bone) for a school project. The main requirement is to have an innovating key feature like deferred rendering used to be 5 years ago. Because I am fairly new to graphic programming (on this level, I have done 2D and some XNA and a little DirectX9 back in the day) I would like to ask what such an innovating (relatively new) feature could be.

I do have an idea of my own but I'm not sure if its new or actually doable.

My idea is to build a pass-bases render system in which shaders (diffuse, normal, SSAO) can be linked together to form passes.
A forward rendering configuration path would typically have one pass which does the diffuse, normal and light. A Deferred rendering configuration would have the base pass which renders the diffuse, normal, specular and depth to seperate textures which can be used in following passes. A next pass could be the light and pass after that SSAO (or they run concurrently). So each shader has required input and output. Some shaders can be linked together to form a pass because they dont interfere with each other, some do and have to be in a separate pass and has to wait. Also the passes used are exposed to the material system so only used parameters are available.

This might all be too vague and i'm not sure if this is really something but all feedback about this and how to manage shaders or passes is welcome.
Also I am really curious about any suggestions on how to go about this 'innovating' factor. Please help Posted Image

Regards,

Wouter

Edited by woutervd, 17 January 2012 - 03:27 PM.


Sponsor:

#2 Digitalfragment   Members   -  Reputation: 813

Like
0Likes
Like

Posted 17 January 2012 - 06:55 PM

What you described sounds like a tree based system for rendering passes, using adaptive inputs and outputs. A 'compile' step would check to see if two adjacent passes could be collapsed into a single pass; Sounds like fun.

Take a brief look at the shader editor in the UDK, its a node based system that generates a shader based on connected inputs & outputs. If your passes (nodes) are discreet enough, then it should be trivial to create a wrapper function that can call both and direct re-direct outputs to multiple bound rendertargets etc.

A similar system i've written worked on the concept of meta-targets. A pixel shader could declare say, 40 outputs of different types, then the compiler would take hardware MRT limitations and create multi-pass shaders that tightly packed those into the appropriately bound rendertargets for each pass. So, in the case of say, 40 float2 outputs, on a machine that only supported 4 simultanous targets, it would create 5 passes (40 float2s == 20 float4s, 20 / 4 RTs = 5 passes)




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS