- July 2023 Progress Report
- March 2023 Progress Report
- December 2022 Progress Report
- August 2022 Progress Report
- May 2022 Progress Report
July 2023 Progress Report
A new release is available on GitHub: https://github.com/Silverlan/pragma/releases/tag/v1.1.0
The tutorial system that I've mentioned in my last progress report is now complete 😄! Here's a preview:
As you can see, the tutorials are also voiced now, using the ElevenLabs AI. This should make it easier to follow the instructions of the tutorials. The tutorials are currently only available in English, but I've set up the system so that voices could be added for other languages relatively easily.
If you want to try the tutorials yourself, you can download the latest version and just start "pfm.exe". There should be a popup after a few seconds, which will lead you to the intro tutorial by clicking it, which will then tell you how to find the other tutorials.
Here's an overview of all of the tutorials I have currently planned, as well as their completion percentage:
- Intro (100%): Introduction to PFM and the basic interface
- Viewport (100%)
- Asset Catalogs (100%)
- Render (100%)
- Web Browser (100%)
- Actor Editor (100%)
- Dynamic Lighting (0%)
- Static/Baked Lighting (0%)
- Animating Basics (100%): How to animate basic properties and how to use the graph editor
- Character Posing with IK (90%)
- Constraints (0%)
- Math expressions (0%)
- Full Body IK (0%)
- Animation Drivers (0%)
- Retargeting (0%)
- VR Animating (0%)
- Motion Capture (0%)
- Cel Shading (0%)
- Decals (0%)
- Depth of Field (0%)
- Motion Blur (0%)
- Sky (0%)
- Volumetric Spot Lights (0%)
- Pragma Renderer (0%)
- SFM Import (0%)
- Scenebuilds (0%)
- Prelewd Projects (0%)
- Material Overrides (0%)
- Particle Editor (0%)
- UDM Editor (0%)
As you can see, most tutorials are still a work-in-progress, only the interface series is fully complete, as well as the first animating tutorial. I was hoping to get more done with this release, but creating new tutorials is pretty time-consuming, so it'll have to wait a bit longer. Finishing the lighting and animation series is my main priority for the moment.
If anyone would like to see any tutorials that aren't listed, please let me know. I could also use some feedback on the completed tutorials, it's hard for me to tell if they do a good job of explaining things or not 😄.
The new IK system is now fully implemented (based on BEPUik), with the exception of one pesky bug I have not been able to fix yet, but here's a small showcase:
IK Rig Editor
The IK rig editor allows you to set up a custom IK rig using various constraint types and limits:
You can restrict the range of rotation for each axis, which helps to prevent unnatural poses. The same method can be used to create full-body IK rigs, but I have to fix the aforementioned bug before I can showcase that.
Here's an actual usage example:
Tutorials coming up soon-ish!
If you have a VR headset with controllers, you can now use them for basic motion capture:
The way it works is, you can assign an ik control (like a hand) to a VR controller and then animate that in first-person. The system should be compatible with any VR headset, but I've only tested it with a Vive. You should also be able to use custom trackers, like the VIVE tracker (e.g. if you want to animate feet as well), but that is also untested.
I also still have to implement a curve fitting algorithm, so that the resulting animation can be edited in the graph editor, as well as a tutorial, but otherwise the system is fully operational.
Video Motion Capture
In addition, I've also been working on adding support for motion capture from video or webcam using the mediapipe library. This is an experimental feature and still in an early development stage:
(Please ignore the hands.)
In theory it allows tracking of facial movements, body poses, as well as finger tracking, but it is somewhat unstable. I'm also not sure if I'll have the time to finish this feature, so no promises yet.
I have set up some scripts to fully automate the translation of PFM into other languages using the ChatGPT API. This will make it significantly easier for me to add (and maintain) support for other languages in PFM. Using this system, PFM is now fully localized for French, Spanish and Chinese (simplified), in addition to the previous languages. I can add more languages on request.
The standalone version of PFM now has an auto-updater, so you don't have to download the latest release from GitHub every time. It will notify you whenever there's a new update available. You can also enroll for experimental updates in the PFM settings, though I generally would not recommend it:
I have added a new system to customize the layout of PFM. For instance, you can change it to a three-column layout like this:
If you detach any windows or resize them you can also save that layout state as the default, so it will be restored the next time you start PFM. The layout state can also be saved with a PFM project, so you can have individual layout setups for specific projects (similar to Blender). The intro tutorial explains how it works if you want to know more.
I don't have any more plans at the moment for new features and will be focusing on the remaining tutorials, bug fixes and quality-of-life improvements for the foreseeable future. There's still a ton that could be implemented of course, but I feel like all of the core features are there now and just have to be cleaned up a little. I'm also way overdue for a new Prelewd release, but I needed to get some other stuff out of the way first. I do plan on putting a lot of time into that next month though🎉!
March 2023 Progress Report
I've implemented a new system for interactive in-game tutorials:
It's still work-in-progress, but it should hopefully make it much easier to learn how PFM works. So far I have only (mostly) finished two tutorials, but I'm planning on creating one for most of PFM's features. Compared to wiki- or video-tutorials, there are several advantages:
- The in-game tutorials can be localized easily into other languages
- If there are interface or functional changes, the in-game tutorials don't become outdated
- It's a more hands-on experience. It's much easier to learn if you're actively doing something compared to watching a video or reading an article.
- They're a part of PFM, so even if the wiki is ever shut down, they'll still be around.
There will be an introductory tutorial, which will lead to several tutorial series covering UI, render effects, common workflows (like importing SFM sessions), etc. This will be my main priority for the next few weeks, as I think it will make a big difference and it'll be worth the time investment 😄.
There's a new constraint system with several different types of constraints for animating:
- Copy Location/Rotation/Scale: A set of constraints to copy the position, rotation, or scale of an actor to another actor.
- Limit Location/Rotation/Scale: A set of constraints to restrict the position, rotation, or scale of an actor to a certain range or axis.
- Limit Distance: A constraint that limits the distance between two actors in the scene, ensuring they remain within a specific range of each other. You can choose to make them stay within a certain radius to each other, exactly at a specific radius, or a minimum distance away from each other.
- Look-at: A constraint that causes an actor to face towards a target, orienting itself to always point in its direction.
- Child-of: A constraint that links two actors together in a parent-child relationship, causing one actor to follow the other's movements and transformations as if it were a child of the parent object.
I used Blender's constraints as a reference point, but I think they should work largely the same as the ones in SFM as well.
(No IK here, just constraints.)
Any two properties of any two actors can be constrained together, as long as they're transform-types (Vector3/Quaternion/etc.). All constraints have some base properties:
- influence: This property determines how much the constraint affects the driven actor. It is a value between 0 and 1, where 0 means no influence and 1 means full influence.
- driverSpace: This property specifies the coordinate space in which the driver actor (the actor that controls the constraint) is defined. Possible spaces are world/local/object.
- drivenObjectSpace: This property specifies the coordinate space in which the driven actor (the actor that is affected by the constraint) is defined. Possible spaces are world/local/object.
- orderIndex: This property determines the order in which multiple constraints are applied to the same object. It is an integer value that can be used to prioritize constraints.
Depending on the constraint type, some additional options are available. Blender also has a "custom space" option for the driverSpace and drivenObjectSpace, which may come in handy. I haven't added something like that yet, but I may do so.
The new (full-body) IK system is now technically fully integrated, however I still have to do a lot of testing and tweaking, so I can't show it off properly yet.
Unfortunately there is also no way for me to add support for SFM IK rigs, since the IK system is a fundamentally different one, and since SFM's IK rigs are python-based, which can't be converted automatically. The good news is I put in a lot of effort to try and simplify the process for creating IK rigs in PFM:
IK Rig Editor
There's a new editor for creating custom IK rigs. The general approach is very different compared to SFM, but hopefully less convoluted since you don't have to mess around with scripting: