Fully customizable, contemporary urban-type billboard kit with 2 display types, and multiple support frames based on height.
Easily swap out any images you want to display, and configure an auto-generated billboard with a convenient and optimized blueprint tool.
Number of Textures: UE4 = 87, UE5 = 90
Number of Materials: 35
Number of Material Functions: 8
Number of Meshes: UE4 = 22, UE5 = 29
Mesh LODs: Yes / Handcrafted (for UE4)
Number of Sounds/Cues: 4
Number of Blueprints: 1
Number of Data Structures: 1
The Custom Primitive Data Workflow in Materials
In this pack, we adopted a micro-optimization approach in an attempt to make our more advanced effects (Weathering FX, Custom Paint Colors, Prism mesh animations, etc.) very optimized with low overhead from the get-go. This means that, instead of generating dynamic material instances at runtime, the default behavior for the billboard blueprint is to make use of Custom Primitive Data to send data to the materials that drives these advanced effects.
<aside> 💡 For those unfamiliar with Custom Primitive Data, you can read about it in detail on the engine wiki, but here is a brief explanation provided by the page on the wiki:
Use your Materials to store custom data in an index array that is accessible through Blueprint and code to effect changes for scene primitives when using the Custom Primitive Data (CPD) workflow. This functions similarly to how Material Instance Dynamics (MID) does, providing a way for you to control parts of your material graph dynamically at runtime through scalar and vector parameters. The difference is that CPD has the advantage of storing data on the primitives themselves rather than with the Material Instance, which lowers the number of draw calls for similarly placed geometry in your Levels (such as walls, floors, or other duplicated geometry).
</aside>
Now, while this is the default behavior, you can override the blueprint to instead generate dynamic materials to make use of what is arguably the more convenient workflow. Sure, the differences in performance might be negligible in an isolated use-case, but we wanted to make sure this pack would scale to practical usage in the large environments. That is the reason why the default behavior is set to make use of Custom Primitive Data.