Releases: Nebukam/PCGExtendedToolkit
PCGEx 0.61
What's Changed
- New nodes
- Some tweaks
- Many bugfixes
New nodes
- Uber Blend : one-stop node for complex blending ops. Some more details here. Most notably, FQuat slerping and FTransform lerping!
- Copy to Points : PCGEx' own twist on Copy Point node. Some more details here.
- β-skeleton edge refinement! Check out Wikipedia
Tweaks
- More generalized support for attribute cleanup in various filters
- Vtx Filter : Angle : A vtx filter that can check angle against its connected edges (some caveats, made primarily for Zone Graph)
- Break Cluster to Path : Added support for Vtx filter to drive break conditions
- Staging + Mesh Collection : Full support for random material selection as specified in the collection settings.
- QoL Create or Update collection(s) from Selection(s) in the Asset Action menu to create/update Asset & Actor collection directly from the content browser
- Polygon 2D Inclusion Filter now support Min/Max inclusion settings (to filter out points that are included in more or less that N polygons -- very handy!)
- Path : Spline Mesh now a way to "expand" mesh segments along their tangents before spawning them to create overlap between them. Very handy if you work with organic assets.
- Attributes to Tag now support any input data that can have attributes, so that include splines and attribute set (was previously point-only)
Bugfix
- Heuristics some settings where ignored on some nodes
- Staging Node fixed before/after fitting
- Fixed a few issue with path nodes; Most notably
Split path
wasn't correctly handling closed loops.
Full Changelog: v0.60...v0.61
PCGEx 0.60
What's Changed
- API Exposed!
- A lot of classes and API are now properly exposed with their dependencies and stuff. This means if you feel adventurous, you can try extending PCGEx in CPP on a per-project basis and have access to all internals.
- This was specifically to be able to spawn a new pet project : ZoneGraph PCGEx interop !
- Fixed some unexpected behaviors on DiscardByPointCount and PointsToBounds by @coriumgit in #100
- Bugfixes, mostly
- Debug subgraph optimization (merging all points before debug speeds things up by a great deal with many collections)
- Small tweaks
New Contributors
- @coriumgit made their first contribution in #100
Tweaks
- Write Index can now output more infos, and can do so as
Tag:Value
format. (Point index, Collection Index, Collection Num Entries) -- very handy with the new tag-based collection filters. - Vtx Properties has a new Vtx Amplitude module that's very niche but can write the "amplitude" of a vtx based on its edges. Think of it like "bound" informations but based on edges (and as I'm writing that I realize bounds based on edges could be its own thing as well)
- Tensor self-intersection & merging woes. Still not 100% satisfactory but much better than the previous nothing.
- Random Filter now supports per-point threshold which makes it more straightforward to use for some use cases where the weight is less relevant as a parameter.
Bugfixes
- ShrinkPath could cause a crash in async
- AssetStaging fitting now properly handle before/after variations (yey!)
- Cluster Refine' MST was wrong all along, all edge selection was offset by 1. It's fixed and MSTs are now properly canon.
- Fixed a bug with clusters' node chain processing that would sometimes yield to duplicates not being identified as such. This affected Cluster : Break to Paths, Cluster : Simplify.
PCGEx 0.59
What's Changed
- Lots of tweaks & QoL + new "sub nodes"
- Bugfixes
- Fix compilation on mac by @staminajim in #97
- Add additional constants and ability to rename output by @EdBoucher in #98
Tweaks & Subnodes
- Extrude Tensors : Now support intersection with either external paths and/or actively extruded paths for precise stop conditions.
- Cherry Pick Point: Added new selectors,
Range
&Attribute Set
- Picker Filter: A new filter that can leverage Pickers submodule
- Added tag filtering to Copy Cluster to Points, so it's now possible to "select" which clusters will get copied to which point.
- Added a new attribute statistic to the Attribute Stats node :
Different Values
, which counts the number of different values. It's slightly different fromUnique Values
, and actually more useful - Added the option to output individual attribute stats as tags using the
Tag:Value
format. Very handy to then efficiently filter out collections.
Bugfixes
- Fixed a bug with group filters (yes, again, I keep forgetting it exists when I add new systemic behaviors)
- Fixed a nasty bug that would leave Discard by Overlap blocking graph execution by never completing execution.
- Lots of small things here and there, not worth mentionning.
Misc
- Spent way too much time trying to reduce binaries size with very limited success.
New Contributors
- @staminajim made their first contribution in #97
Full Changelog: v0.58...v0.59
PCGEx 0.58
What's Changed
- New nodes & Filters
- Bugfixes
- Some tweaks
New Nodes
- Bin Packing : An experimental, work-in-progress bin packing node. It's in a usable state but has very few exposed tweaks just yet.
- Cherry Pick Point: Complete refactor of the node. Now works with external config nodes.
New Filters
This releases introduce a new type of filter : collection-level filters, making the Uber Filter (Collection)
node more versatile. Since they're filters, they work with AND/OR and will work anywhere (although I'd avoid using them with clusters it's probably a recipe for disaster)
- Entry Count Filter : Lets you filter collections based on the number of entries
- Tag Check Filter : Lets you filter collections based on presence/absence of tags, with substring queries
- Tag Value Filter : Lets you filter collections based on the value of a tag for tags formatted as
Tag:Value
- Attribute Check Filter : Lets you filter collections based on the presence/absence of attribute (with optional type checking)
- Tweaked Random Filter : If not using per-point data, can be used at the collection level.
Note that the Uber Filter (Collection) has a unique optimization if the filters plugged all support collections, it executes super fast and completely ignore per-point filtering.
Tweaks & Fixes
- Sampler nodes QoL
- Per-axis distance output
- Option to directly mutate the point with the sampled data (Transform & Look At)
- Cluster : Simplify and Cluster : Break to Paths had some nasty bug that would show up with isolated edge loop only, it's fixed now. Issues could range from crashes to PCG execution simply never finishing; or broken outputs.
- Reverse Point Order properly swap attributes instead of crashing.
- Some filter were broken, they are now fixed.
- Fixed an issue with Path : Fuse Collinear that would not handle the last point of closed loops properly.
- Various fix and tweaks in the Tensor stack
- Fixed a general bug when dealing with splines that have no points
Full Changelog: v0.57...v0.58
PCGEx 0.57
What's Changed (not much!)
- Color update; now grabbing native colors if possible (Uncheck
Project Setting -> PCGEx -> Use Native Color if Possible
if you got used to the PCGEx colors ^^) - Fixed a bug where some data would be garbage collected before graph execution reached the end (Thanks @EdBoucher for his almost 1-full-minute-long-to-execute-graph)
- Exposed full control of the spline mesh' up vector that drives transform & twisting + a gimbal fix option to avoid weirdly twisted splines when doing loops & hoops
- General support for quieting errors/warning in filters, tensors etc
Full Changelog: v0.56...v0.57
PCGEx 0.56
What's Changed
- New nodes & Filters
- New cluster relax modes
- Some fixes
- Some tweaks
- Sponsors !
New Nodes
- Enum Constant (5.5 only) from @EdBoucher : Lets you choose any enum and output values as pins
- Attribute Hash: Lets you generate a hash from all (or a subset) values from a single attribute, and use it as tag or attribute.
- Box Fitting & Sphere Fitting, technically not new nodes, but new relax modes for the
Relax Cluster
node. Relaxes a cluster by attempting to prevent overlap & preserve a target edge length. - Neighbor Sampler Test : a neighbor sampler to be used with
Sample Neighbor
that uses filters and output how many neighbors pass/fail the tests. - Probe : Numeric Compare : a probe that performs a simple numeric comparison over an attribute against a candidate neighbor point -- if the comparison passes, a connection is created. Very handy to create rudimentary hierarchical connections.
New Filters
- Gameplay Tag Filter : Lets you filter points that have an actor reference by performing a query using gameplay tags
Tweaks & Fixes
- Discard Same now support same-ness based on a hash generated from all (or a subset) values from a single attribute. Very handy when you want to identify paths that end up connecting the same start & end IDs.
- Neighbor Attribute Sampler now support output data to a new, different attribute from the source.
- Tensors node now have filter-driven stop condition that can leverage some filters (basically all the ones that don't rely on attribute values)
- Those same tensors node can sample using different modes :
Default
,RK4
,Average
and more to come (they're easy to add) - Fixed Actor collection so it now uses a subclass and not an actor reference (duh); can now be used with the staging node as expected.
- Two new blendmodes :
Hash
&Hash (unsigned)
, the first outputs a hash of the blended values, the second one attempts at producing an "unsigned" hash (i.e, AB == BA); very useful with Edge Properties. - Fixed a bug with
Path Crossing
node, it now properly support self-intersection-only mode - Major speed improvement on fusing nodes (
Fuse Cluster
,Path to Cluster
) on top of enforcing deterministic vtx order through sorting.
Full Changelog: v0.55...v0.56
Contributions
- Enum constants by @EdBoucher in #94 (5.5 only)
- Fix enum constant value output attribute name being ignored by @EdBoucher in #95
- Add the option of selecting which values to output to the constant enum by @EdBoucher in #96
PCGEx 0.55
What's changed
- Various bugfixes
- Some new nodes
- Tensor updates & tweaks
New Nodes
Clusters
- Cluster : Edge Order : this one fills an old timer gap in the system. It allows you to fix which vtx are the start & end of an edge (endpoints order), making the edge filters based on endpoints super powerful. You can basically turn clusters into directed graphs reliably now, not just temporarily like
Edge Properties
does.
Tensors
- Tensor Inertia : a simple field that uses the sampling point' transform as input (fakes inertia/velocity)
- Tensor Inertia (Constant) : same as above but with no falloff.
Filters
- Distance Filter : lets you filter using a comparison against the distance to a nearest target. VERY USEFUL.
Tweaks
- Cluster nodes now offer the possibility to output solidified edges using basic, rudimentary options. This skips the need to go through
Edge Property
for when you just want stretched bounds to test stuff against. It's available in theGraph Output Settings
or any cluster-generating node. - Tweaked tensor maths & exposed parameters
- Target-based filters (Distance, Bounds) now accept multiple collections as targets!
Fixes
- Find Contours had a bug where the wrapping contour was random if there was more than one input cluster, this is fixed! :D
- Changed some editor-crashing asserts for logs instead.
- Sample Nearest Point distance properly supports distance to box bounds. This is actually huge because solidified edges can now be properly sampled like if they were paths.
Misc
- Simplified the
Room Graph
example so it doesn't rely on loops anymore (that's right! :D)
Full Changelog: v0.53...v0.55
PCGEx 0.53
What's Changed
- A boatload of new features & nodes!
- Tensor Field ecosystem
- Texture Data utils
- Bunch of small utils / QoL nodes
- Async Framework refactor, no more crashes for async reasons.
New Nodes
Tensor Ecosystem
The gist is, convert data into tensor fields, and then use these "tensors" into node that support them.
Overall the works like heuristics : you can combine any number of them and assign them a Tensor Weight
to tweak the importance of a tensor against the other plugged in the same node.
- Individual tensors (nodes that convert data to tensor fields) :
- Tensor Constant : a simple constant value field
- Tensor Flow : converts points to direction & influence in space
- Tensor Pole : converts points to "poles" in space which attract or repulse
- Tensor Spin : converts points to "spinners", which add angular velocity
- Tensor Null : converts points to nullifiers (requires a high tensor weight to work against the others)
- Tensor Spline/Path Flow : converts splines and paths to directional flows in space, in a radius
- Tensor Spline/Path Pole : converts splines and paths to linear "poles" that attract or repulse
- Tensors can be combined with the following nodes:
- Tensor Transform : transform points in space using tensors as directional influence
- Tensor Filter : same as the Dot Filter only it sample tensors to get its reference direction
- Tensor Heuristics : Weights in paths so they follow along a tensor field
- Tensor Probe : Used with
Connect Points
, probes in the direction of the tensor - Path : Extrude Tensors : create paths along tensors by "extruding" seeds points
PCGEx Textures nodes
The gist is, batch-get textures, batch-sample them, and extract texture parameters from material references and generate PCG textures from them (this is the real kicker)
This makes working with line trace/world raytrace super powerful as you can grab the render material at the end of the hit along with UVs, extract a texture param and sample its values at given coordinates.
- GetTextureData : Same as native'
GetTextureData
, only this one is attribute-based to go over soft path / string references. Integrates seamless support for RenderTexture2D! - SampleTexture : Again, similar to the native node; however you can sample multiple textures at the same time without the need for a loop using lookup attributes. (it is assumed that those attributes are the same used with
GetTextureData
in the first place) - Texture Params : a simple re-usable configuration data to be pluggued in texture nodes -- this avoid boilerplate and enables parameters to be easily passed through a hierarchy of subgraphs.
Utils
- Wait For PCG Data : designed specifically for runtime, it's an alternative to the native
GetPCGComponentData
that allows waiting for actor/components to exists, can trigger or refresh generation, and most importantly, waits for the data to be ready to output it. - Pack Actor Data has been heavily revamped to support instancing PCG-managed components directly from blueprints to arbitrary target actors (components that gets flushed when the PCG is refreshed), enabling some really neat stuff without all the regular PCG Blueprint boilerplate (more like a tradeoff really). Particulary useful for decals, and since it's directly in blueprint you can add some complex logic to set components parameters, all while having direct and easy access to attribute values (barely any admin required)
- GUIDs, Get them, Write them. A pair of node to create & manage deterministic GUIDs that can be based on a variety of criterias, spatial or not -- very handy to store & retrieve data for specific points or partitions without needing a reference to the whole hierarchy of actors. i.e, you can generate a GUID for a partition based on its position & bounds
- Attributes to Tags easily tag data with values from its own attributes, or external sources with different matching methods. It sounds silly but it's basically the useful mirror to the native
Attributes from Data Tags
, which converts tags to attributes. - Iterations a surprisingly useful node to output N dataset to drive iteration loops. By default, it's reusing the same pointer in memory for all entries, so very lightweight (the cost of a single attribute no matter how many iterations). I also added the ability to make each data unique in order to write down some easy-to-access data that's useful in the context of a loop:
Iteration
&NumIterations
(the current iterations, the total number of iterations -- I know there's alreadyGetLoopIndex
), making it ever easier to nest loop & give higher-level context to child loops.Progress
&OneMinusProgress
, a double that represent the current loop index as a scalar between 0 and 1. Very useful for lerping and other non-indice based stuff.
Tweaks
- Custom icons -- Hate'em or love'em, they're here to stay.
- Applicable Samplers can now output distance in a component-wise fashion, signed or unsigned (Manhattan/Taxi distance)
- Fixed directional Probes'
Favor
handling -- it actually never worked properly. You can now pick betweenFavor closest
orFavor best alignment
and it will work as expected. (this affectsTensor
,Direction
andAnisotropic
). - Too many small things for me to remember
- Fixed Spline Mesh that was overriding the collision settings from the descriptor
PRs
New Contributors
Full Changelog: v0.52...v0.53
PCGEx 0.52
PCGEx 0.50 - Hotfix 1
Hotfixed an oversight with filters groups not properly registering dependencies