Arteries is a procedural modeling toolkit base on UE4 blueprint. By using this plugin you can implement the whole modeling procedure in UE4 blueprint graph without any other modeling software.
To implement a modeling procedure is rather simple. Just creating a blueprint inherited from ArteriesActor and implement its OnBuild event. In the event graph you can create a serial of different geometry operation nodes and any logic you want to build the final geometry.
- Runtime generation.
- Multi-threaded.
- Most of common geometry operations.
- Per Point/Primitive/Geometry lua code snippet for custom operations.
- Point/Primitive group.
- Point/Primitive custom attributes.
- Tangent space and UV coordinates generation.
- Procedural static mesh instancing.
- Full source code provided.
- 1. The modeling procedure
- 2. The extended blueprint editor
- 3. BP callable functions
- 4. Lua callable functions
1) Creating a blueprint inherited from ArteriesActor. | 2) Implement its OnBuild event. |
3) Finish the implementation then click compile and build button. |
The final result will be displayed in Arteries Viewport after you click build button. Sometimes it's also neccessary to check the result of each steps. You can display results of any selected geometry operation nodes using Arteries extended functions in context menu or just press "D" key.
a) Scatter node creates points inside specific primitives randomly.
b) CopyToPoints node copies a staticmesh to points created by previous node. A HierarchicalInstancedStaticMeshComponent attached to the final actor will be created for each static mesh.
Arteries is designed for multi-threaded to improve generation performance. There are 2 threads for each Arteries actor in the process of generation. One for calling OnBuild event and another is a task queue to process all Completed event of all sub actors.
In modeling procedure you can spawn other Arteries actors then attach them to current actor as children or merge geometries generated by them to a new geometry for further operations.
In order to support multi-thread generation please use SpawnActorAsync instead of SpawnActorFromClass.
a) If you don't need to process the final geometry of the spawned actor, just want it to be attached as child actor, please set "Attach to Caller" to true and leave Completed event unbind.
b) If you set "Attach to Caller" to false, this spawned actor will be destroyed after current actor finish its generation. So you should bind Completed event of spawned actor and make sure its geometry (ArteriesObject) has been merged to the geometry of current actor.
Arteries extends blueprint editor for its specific functions. You could always find the two extended windows in window menu.
Arteries Viewport works just like original viewport in addition to Arteries specific functions for selection and editing. Don't forget to close the original viewport otherwise it will be very slow due to redundant rendering. Although most of geometries (ArteriesObject) are generated by procedure, manual editing is still neccessary for profile curves and some initial shapes.
a) Arteries extended windows. | b) Arteries Viewport. |
In Arteries Toolbox there are 4 tabs covering editing modes, statistics and settings.
- Select Mode
There are 4 selection types in this mode. You can select elements by clicking them in Arteries Viewport or just in the property sheet.
You can also modify properties of current selected elements in the property editor on bottom of the toolbox.
- Create Mode
In this mode you can create primitive by drawing lines in the viewport.
- Settings
In this page you can modify some settings of the editor.
- Statistics
In this page you can see some statistics of building process.
- Line
- Grid
- Circle
- Sphere
- Tube
- Torus
- Box
- Add
- Copy
- CopyAndTransform
- CopyToPoints
- Transform
- Merge
- MergeArray
- SortRandomly
- SortByAttribute
- GroupRange
- Measure
- Hole
- SetMaterial
- Execute
- Carve
- BreakPoints
- Scatter
- Voronoi
- SubDivide
- Blast
- Facet
- Divide
- Fuse
- Clean
- MakeGrids
- PolyExpand
- Clip
- Resample
- Reverse
- PolyBevel
- PolyExtrude
- Sweep
- GetInt
- GetFloat
- GetVec2
- GetVec3
- HasInt
- GetInt
- SetInt
- HasFloat
- GetFloat
- SetFloat
- HasVec3
- GetVec3
- SetVec3
- Position (Property)
- GetTargets
- GetPrimitives
- Insert
- Add
- NumPoints
- GetPoint
- Delete
- AddPoint
- AddPrimitive
- NumPoints
- NumPrimitives
- GetPoint
- GetPrimitive
- DeletePoint
- DeletePrimitive
- SetPointGroup
- SetPrimitiveGroup