#enginedev — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #enginedev, aggregated by home.social.
-
so this is where the "spline" part of the "spline mesh" finally appears
every edge can be turned into a cubic spline
there's still a bunch of things that don't work yet (e.g. tangent visualization and editing, spline-aware edge picking and face previews)
but at least the intermediate positions are being generated, the spline edges are rendered correctly and they also appear in the exported polygons
-
making some progress with rig processing
- added conditional tagging
for now there's only face count for vertices/edges and part count for faces, so it's possible to find outlines and inner vertices/edges- added conversion to polygons/polylines
from there it's possible to make fill/edge meshes etc. from thatcould in theory add materials and other metadata to the rig directly but idk, will try to make upgrades as I proceed and see what's needed/helpful
-
created some extrusion code
the basic mesh transform (outline finding + vertex/edge duplication + face-vertex/face-edge redistribution + bridge faces) turned out much easier than expected
but making the full thing would probably require upgrading the transform gizmo
just need to do missing editing features (element tags, grid, selection modes) and element extraction and it'll be ~enough for editing procedural modeling rigs
-
finally developed enough features that I could finish skinning the test character at a base level (without finger or face bones)
also ended up not needing undo so far 🤷
the weird thing about developing a reasonably efficient tool is that suddenly the work ends up taking like a few hours total and you wonder if spending several weeks on the tool was worth the effort
hopefully I'll be able to cash in at scale (after skinning a bunch of characters, together with iterations)
-
noticed a really weird issue with dual quaternion skinning
at the end of the day, all skinning is a nasty approximation
(though in this case linear blending looks a lot less weird, even if still unnaturally stretchy)
I wish there was a better option that didn't involve lots of work (cloth simulation + overbuilding the character for it)
-
the slowest part in all this seems to be the process of figuring out what is it exactly that I want to make:
- dogfooding
- noticing problems
- coming up with several solutions
- coming up with their costs and effectiveness without actually making them
- picking the optimal combinationthere's a lot of fancy 3D view selection/editing things that I'd like to make but they seem to cost far more and thus I could only justify them if I have seen somewhere that they worked best
-
did a lot of tiny things but also
1️⃣ removed *shared* bone weight shapes (ones used for all skins)
reason: it would be more difficult to fit most of them to 2+ skins than I initially thought
2️⃣ made weight shape transforms absolute (used to be bone-relative)
reason: allows moving the bone pivot without moving the shapes
reason for both: now all skins are self-sufficient and could be moved into separate files to prevent shared changes from rebuilding all associated files
-
back to working on the mesh skin set editor - a second pass to support more cases
- made the test view functional (as in, finally allow pose changing)
- added the missing weight shape visualizationsyet to figure out how to design the weight shapes for optimal weights (spine seems to be especially complicated... but I have an idea)
self-intersecting meshes could be a challenge but flood fill might solve it (the test model has teeth, can test later)
-
been working on a "spline mesh" for some time (a tiny bit at a time) and finally have something to show
the data structure has been seemingly figured out now and there are a few basic actions available
it's not yet enough to design anything but could be eventually
the goal is to build control rigs for things like this and more: https://mastodon.gamedev.place/@archo/115384498813589175
eventually it should be possible to turn edges into splines and extract faces as polygons
-
starting a new "building generator" thread (previously https://mastodon.gamedev.place/@archo/116522023095047486) since the last one was getting a bit long
here's a new attempted approach for producing inner faces for stair cutouts
- emit requantized shape
- projected-intersect it against platform shape
- generate edge mesh by pushing vertices upwards up to top plane
- filter out entrance face
- added edge blend layergood stair sides are still annoying to make in this system tho
-
added a first set of mutexes for loading textures
there's a global one for the hash table/file texture list, and one mutex for each texture (for loading/unloading)
the whole thing is a bit messy currently (in part because there are several different types of textures) but a stress test seems to work
and it's a bit annoying to spend memory per texture for what's basically failsafe code
but it's the simplest approach I could come up with for now
-
another thing to fix eventually is force-pausing the game while BeginPlay is waiting for the data to be loaded
the idea is to emit a special signal if a partition expects to be activated but isn't yet loaded
and then use this signal to pause most update code and render some overlay indicating to the player that more time is needed before the game can resume
should reduce situations where scripting could fail due to missing parts of the world
-
thought about async loading for a while and landed on this extremely basic approach
since I'll only be loading one thing at a time, the idea is to pick the next thing to do and then apply it, depending on whether it can be streamed or not
anything under Load/Unload will eventually receive the appropriate mutexes
isAsyncBusy should be an event instead of an atomic bool but it should not fail on windows (unlike e.g. android where thread scheduling is far less forgiving)
-
but will I need a separate disk thread? not if most work happens on just one thread (e.g. the map loading thread)
which is true as long as it won't be necessary to load textures in parallel, separately from the rest (if they're not too large and not too many per partition)
hoping to avoid a good chunk of the complexity by steering clear of the cutting edge and not overdoing it with the granularity of partitioning
-
I think it's no secret that most of the issues are likely to appear in the process of making the streaming system work with real content
expecting a need for a loading thread (with all the necessary sync), and some way to attribute renderables to partitions (possibly with opt-out if I'll want to carry some stuff out) so that I can fade things in and out at the very least
but e.g. component addressing has been designed with streaming in mind already tho
-
worked on the runtime side of the partition system
basic support for loading and unloading works now (no multithreading of any kind yet, no hierarchy either)
there are a few basic shapes (sphere, box, cylinder*, capsule*) for measuring the distance between the partition and the reference point (= camera position for now)
(* - missing editor preview)
so far the work has been much simpler than anticipated, though in part due to prior design and extensive refactoring
-
One of the things that fascinated me about #Doom was its aggressive visibility determination, avoiding work for geometry that never reached the screen.
For #helios I opted for a non-hierarchical AABB culling #algorithm (Miettinen), currently testing against every scene member and switching MaterialHandles to highlight culled and visible objects. On to #BSP now! #indiedev #enginedev #indiegames -
been working on the editor side of the partition system
moved map items out of layers, into "indexed chunks"
the chunks are basically a list of map items that all have common filter parameters (initially layer, now also partition and whether it's inside the low or high LOD section of the partition)
starting small for now - currently partitions exist, can be edited, and items can be assigned to them but otherwise they don't affect much in practice yet
-
test animation 4
this is the animation I wanted to create initially
the transition points are visibly broken at the moment, but also necessary for this animation to work
I'm also rethinking the whole concept of transition points, as it doesn't make much sense from an editing standpoint for them to always be synchronized across the axes, possibly even if they contribute to the implicit acceleration curve
-
created a new test animation consisting of 3 keyframes that create a circular motion with decreasing speed
it appears that the new rotation curve editor is finally working well enough to stick with it
-
created a new test animation consisting of 3 keyframes that create a circular motion with decreasing speed
it appears that the new rotation curve editor is finally working well enough to stick with it
-
created a new test animation consisting of 3 keyframes that create a circular motion with decreasing speed
it appears that the new rotation curve editor is finally working well enough to stick with it
-
a very early preview of how the rotation editor might look (while nothing is hovered)
worried about vertical autosizing of the curves and keeping everything in the frame while keeping it still for editing (might need some state to freeze things while they're being edited)
the discontinuous curves are somewhat trippy but also purely visual since the curves as currently defined can't support discontinuities (rapid changes need two points next to each other)
-
a very early preview of how the rotation editor might look (while nothing is hovered)
worried about vertical autosizing of the curves and keeping everything in the frame while keeping it still for editing (might need some state to freeze things while they're being edited)
the discontinuous curves are somewhat trippy but also purely visual since the curves as currently defined can't support discontinuities (rapid changes need two points next to each other)
-
a very early preview of how the rotation editor might look (while nothing is hovered)
worried about vertical autosizing of the curves and keeping everything in the frame while keeping it still for editing (might need some state to freeze things while they're being edited)
the discontinuous curves are somewhat trippy but also purely visual since the curves as currently defined can't support discontinuities (rapid changes need two points next to each other)
-
so as expected, the curve view interface isn't really working for editing the rotation curves
and as expected, the issue is the adding of differences
moving a single point doesn't mean what one would expect
worse still, moving has this weird duality - the results are different depending on which segment of the curve is considered to be edited
so it's impossible to preserve the invariant during/after that operation
now contemplating making a fully custom insanity of a UI
-
so as expected, the curve view interface isn't really working for editing the rotation curves
and as expected, the issue is the adding of differences
moving a single point doesn't mean what one would expect
worse still, moving has this weird duality - the results are different depending on which segment of the curve is considered to be edited
so it's impossible to preserve the invariant during/after that operation
now contemplating making a fully custom insanity of a UI
-
so as expected, the curve view interface isn't really working for editing the rotation curves
and as expected, the issue is the adding of differences
moving a single point doesn't mean what one would expect
worse still, moving has this weird duality - the results are different depending on which segment of the curve is considered to be edited
so it's impossible to preserve the invariant during/after that operation
now contemplating making a fully custom insanity of a UI
-
created a first test animation
need to figure out a much better test since this is very axis-aligned and too fast overall
the fancy interpolation ends up being unused for rotation, basic slerps ended up being OK at this speed
also probably could use a time scaling parameter
-
created a first test animation
need to figure out a much better test since this is very axis-aligned and too fast overall
the fancy interpolation ends up being unused for rotation, basic slerps ended up being OK at this speed
also probably could use a time scaling parameter
-
created a first test animation
need to figure out a much better test since this is very axis-aligned and too fast overall
the fancy interpolation ends up being unused for rotation, basic slerps ended up being OK at this speed
also probably could use a time scaling parameter
-
working on the animation editor, only made vec3 curves minimally usable so far
I wish it was easier to line up the velocities of adjacent points when the velocities are small
-
working on the animation editor, only made vec3 curves minimally usable so far
I wish it was easier to line up the velocities of adjacent points when the velocities are small
-
working on the animation editor, only made vec3 curves minimally usable so far
I wish it was easier to line up the velocities of adjacent points when the velocities are small
-
working on the animation editor, only made vec3 curves minimally usable so far
I wish it was easier to line up the velocities of adjacent points when the velocities are small
-
- created the [animated mesh set] component
- fixed the data transfer bugs
- added an [initial pose] feature to the [animated mesh set] component...one thing led to another...
- created the leaning toilet 🚽
-
- created the [animated mesh set] component
- fixed the data transfer bugs
- added an [initial pose] feature to the [animated mesh set] component...one thing led to another...
- created the leaning toilet 🚽
-
- created the [animated mesh set] component
- fixed the data transfer bugs
- added an [initial pose] feature to the [animated mesh set] component...one thing led to another...
- created the leaning toilet 🚽
-
- created the [animated mesh set] component
- fixed the data transfer bugs
- added an [initial pose] feature to the [animated mesh set] component...one thing led to another...
- created the leaning toilet 🚽
-
(re-)added the ability to edit hit volumes
the previous skeleton metadata editor was capable of this so it's largely a matter of copying the code
but now there's a possibility to add more than one shape per bone, which could be useful in cases where one shape isn't quite enough
-
(re-)added the ability to edit hit volumes
the previous skeleton metadata editor was capable of this so it's largely a matter of copying the code
but now there's a possibility to add more than one shape per bone, which could be useful in cases where one shape isn't quite enough
-
(re-)added the ability to edit hit volumes
the previous skeleton metadata editor was capable of this so it's largely a matter of copying the code
but now there's a possibility to add more than one shape per bone, which could be useful in cases where one shape isn't quite enough
-
(re-)added the ability to edit hit volumes
the previous skeleton metadata editor was capable of this so it's largely a matter of copying the code
but now there's a possibility to add more than one shape per bone, which could be useful in cases where one shape isn't quite enough
-
the whiteboard case also showed in what ways calculated, non-destructively edited weights are superior to painting - subdividing the model wouldn't result in needing to repaint the subdivided bits
another interesting side effect of in-engine skinning is that I could combine any mesh generator with skinning at some point, making something animated entirely inside the engine
not that the existing capabilities help with character design but it's something to consider
-
the whiteboard case also showed in what ways calculated, non-destructively edited weights are superior to painting - subdividing the model wouldn't result in needing to repaint the subdivided bits
another interesting side effect of in-engine skinning is that I could combine any mesh generator with skinning at some point, making something animated entirely inside the engine
not that the existing capabilities help with character design but it's something to consider
-
the whiteboard case also showed in what ways calculated, non-destructively edited weights are superior to painting - subdividing the model wouldn't result in needing to repaint the subdivided bits
another interesting side effect of in-engine skinning is that I could combine any mesh generator with skinning at some point, making something animated entirely inside the engine
not that the existing capabilities help with character design but it's something to consider
-
the whiteboard case also showed in what ways calculated, non-destructively edited weights are superior to painting - subdividing the model wouldn't result in needing to repaint the subdivided bits
another interesting side effect of in-engine skinning is that I could combine any mesh generator with skinning at some point, making something animated entirely inside the engine
not that the existing capabilities help with character design but it's something to consider
-
got as far as getting a skeleton editor to a point where it's minimally usable, and starting work on a mesh skin set editor
figuring out the data structures and data flows took a long time but I think that might be largely done at this point
while testing the mesh skin set editor, noticed that the model I was initially testing it with (a movable whiteboard) wasn't sufficiently subdivided to make it bend, so I had to change it
-
got as far as getting a skeleton editor to a point where it's minimally usable, and starting work on a mesh skin set editor
figuring out the data structures and data flows took a long time but I think that might be largely done at this point
while testing the mesh skin set editor, noticed that the model I was initially testing it with (a movable whiteboard) wasn't sufficiently subdivided to make it bend, so I had to change it
-
got as far as getting a skeleton editor to a point where it's minimally usable, and starting work on a mesh skin set editor
figuring out the data structures and data flows took a long time but I think that might be largely done at this point
while testing the mesh skin set editor, noticed that the model I was initially testing it with (a movable whiteboard) wasn't sufficiently subdivided to make it bend, so I had to change it