Replies: 8 comments 3 replies
-
Goals:
|
Beta Was this translation helpful? Give feedback.
-
The unreal mesh formats do not have a proper common interface to query material and material groups, all Unreal meshes should have a way to easily identify the textures/materials and the effects applied to them for proper reordering and batching. |
Beta Was this translation helpful? Give feedback.
-
A lot of the rendering effects, such as lighting and texture panning may end up being reimplemented in shaders, for this reason these effects need to be moved to the headers/SDK so that they can also be used as documentation for renderer developers. |
Beta Was this translation helpful? Give feedback.
-
The game uses something called Moving Brush Tracker to temporarily merge dynamic geometry from movers into the level's geometry, this allows various BSP tree traversing routines to draw these surfaces, as well as use them to block some visibility checks. While getting rid of the Moving Brush Tracker for good won't be feasible for a while, at least not depending on it for rendering is a major milestone given that allows decoupling of dynamic BSP from static BSP, giving opportunities to optimize rendering for both separately. Another advantage of being able to render movers, or brushes in general as if they were simple models, is being able to preview them in Unreal Editor. |
Beta Was this translation helpful? Give feedback.
-
Currently visible actors and lights are both being picked from the actor list, and filtered through the viewport's point of view against the BSP tree, every single time a Frame is queued for rendering. Ideally, we want to first obtain all possible renderable frames (and their respective frustums) as well as specific renderer structures (shadow mapping 'frames') and then either:
|
Beta Was this translation helpful? Give feedback.
-
Unreal levels come with shadowmaps baked into surfaces where lighting is applied to them, this then allows the game to calculate proper lightmaps based on these. There are two ways a renderer can tackle this, by:
In either case, it's needed for the renderer have the necessary information regarding dynamic lights and surfaces they're being applied on to proceed. This particular issue depends on:
|
Beta Was this translation helpful? Give feedback.
-
When rendering geometry, the pipeline can properly sort objects based on transparency and other characteristics (Textures and Polyflags for example) to avoid switching rendering states which seriously speeds up the render device, one problem with this is how actors and movers (as well as the level itself) can contain multiple sets of characteristics and how the dynamic filtering system (as described on #937 (comment)) only accounts for the entire actor as a whole, forcing state changes and stalls on the render device if said actor has multiple parts with different polyflags on it. To deal with this, it's necessary to easily recognize these parts in the mesh (and also brush?) format as mentioned in #937 (comment), and split these into different 'material objects' if needed, this way these sub-sections of an actor can be assigned to separate rendering passes ensuring proper application of transparency effects. |
Beta Was this translation helpful? Give feedback.
-
Some renderers may apply certain optimizations when drawing solids depending on the draw order, while with renderers that don't make use of Depth/Z it was necessary to sort geometry back to front, with renderers that can discard geometry or pixels it's best to sort front to back. To avoid unnecessary one-size fits all approaches, the render device interface should be expanded so that they can optionally sort drawable objects as these renderers see fit. |
Beta Was this translation helpful? Give feedback.
-
Rendering pipeline design notes and ideas.
The rendering system in UE1 is on that is particularly complex compared to other games and engines of the time given it's capabilities.
We will be discussing here how to design a more modern and GPU friendly approach to achieving proper rendering, and establishing bases for improvements.
As a part of the discussion, we will be:
Beta Was this translation helpful? Give feedback.
All reactions