August 2022 Progress Report
Pragma Renderer
Next to Cycles X and LuxCoreRender, I've now added Pragma as a renderer option. Unsurprisingly, this renderer uses Pragma's internal rendering system. The main purpose for the Pragma renderer is for animations, since render times with Cycles X and LuxCoreRender are excessively high for large image sequences, even on modern hardware (days, weeks or even months depending on hardware, scene complexity and framerate).
To make Pragma actually viable as a renderer, I've added some new features:
Lightmapping
The lightmap system has been significantly improved, and now includes directional lightmaps. The direct and indirect components are baked with Cycles X, while the directional component is using my own baking implementation. Without going into too much detail, this (along with other improvements) allows for much prettier lightmaps than before:
For comparison, here is a pure Cycles X render of the same scene:
The pure Cycles X render still looks slightly better, but I think the baked version is a pretty damn good substitute. I am not entirely sure why the colors look more intense in the baked version, that is something I will still have to investigate.
Lightmap baking still takes some time (8 hours for the example above with my GTX 1050 Ti), but the major advantage is that it only has to be done once per scene, regardless of how many frames you render. Obviously this only works for static lighting, but it's still a pretty major milestone. For dynamic / animated actors you would still use dynamic light sources with a baked reflection probe.
Once lightmaps are baked, the rendering with the Pragma renderer is practically real-time, so the only render time to worry about is the actual lightmap baking.
Since baked lightmaps are very cheap to render during real-time playback, Prelewd will also heavily benefit from this.
Motion Blur
I've added support for camera, object and skeletal animation motion blur, however this is currently implemented for the Pragma renderer only.
(If the difference in the video is too hard to spot, try pausing it.)
There are still some artifacts in some cases (like the Medic's finger in the right example), but it's not very noticeable in motion.
Technically the same motion blur implementation could be used for Cycles X/LuxCoreRender renders, but I don't think I'll have time to implement that any time soon, so it's restricted to the Pragma renderer for now.
Misc
Some misc features include:
- SSAA: The Pragma renderer uses SSAA for anti-aliasing. Looks good, but does require a fair amount of VRAM.
- Color Correction: You can use OpenColorIO color correction with the Pragma renderer. Default is filmic-blender, just like for the Cycles X / LuxCoreRender renderers.
- Virtual Reality: Of course the Pragma renderer also has full support for rendering image sequences for VR:
New Transform Gizmo System
I've completely overhauled the transform gizmo system, since the previous one was... severely lacking in many ways. The new one is significantly more pleasant to use, and has some new features:
- Snap-to-grid (both for translations and rotations)
- Transforming multiple selected objects at once (not supported for scaling yet)
- Rectangle-select by clicking +dragging mouse cursor
- x/y/z shortcuts for transforming an object quickly on a specific axis
- World/Object/Camera transform spaces (not new)
Smart Move
There is also a new "smart" move system, which allows you to quickly move objects around while keeping their relative orientation to the environment:
Decals
Not much to say here. I already implemented decals a while ago, but I never got around to add them to PFM until now:
They can correctly wrap around most surfaces, doesn't work with animated actors at the moment though.
Tutorials
I've added a bunch of new tutorials on the wiki:
Some are more complete than others, but Getting Started is a good starting point. The Rendering Animations workflow describes how to effectively use the new lightmap system.
Other Changes
- Undo-redo system: Not much to say here other than that undoing and redoing actions is now implemented. The maximum number of undo steps can be controlled with the "pfm_max_undo_steps" console command. Some actions (like adding new actors or components) don't have undo support yet.
- Map Import: You can "import" a map, which adds all of the map's props (and the world), light sources, etc. as actors to the current project. You can use this if you want to use parts of different maps in the same project, for example.
- Improved viewport interaction: I've added an object BVH system for fast raycasts. Effectively this means that selecting actors in the viewport is significantly faster and more accurate now.
- Various UI improvements and fixes
- Lots of general bug fixes and minor improvements
Going Forward
With that I unfortunately also have some bad news. In part thanks due to the current economic crisis, I can't actually afford to continue working on this project for much longer, unless I can somehow get significantly more supporters on board. For that end I will have to make some changes going forward..
Primarily this means that, starting next month, Prelewd will become my main priority and I will have to reduce the amount of time I can put into everything else as a result. I know that's hardly ideal considering progress has already been pretty slow, but sadly I don't have any other options at the moment. If I can use Prelewd to reach some of my milestones, I may be able to put more time into the project as a whole again, but for now that's somewhat up in the air. I hope that's not too much of a disappointment, but with prices absolutely skyrocketing, and things likely to get worse, unfortunately this is a compromise I have to make at this point 😅.
Full Changelog
Latest release is still being built, but should be available on GitHub in a few hours:GitHub: https://github.com/Silverlan/pragma/releases/tag/nightly
(For previous versions, see https://wiki.pragma-engine.com/books/pragma-engine/page/changelog)
{{@19#bkmrk-version-1.0.4-%5B2022-}}
{{@19#bkmrk-filmmaker-v0.4.2}}
{{@19#bkmrk-added-pragma-rendere}}
{{@19#bkmrk-engine}}
{{@19#bkmrk-added-motion-blur-ef}}
{{@19#bkmrk-lua}}
{{@19#bkmrk-added-table.count%2C-t}}