(WARNING) Please read the [[ mutable/unreal-engine-4/user-documentation/create-projected-tattos-stickers/ | Create projected tattoos or stickers ]] section before reading this one. This section describes some issues that may arise implementing complex image projection with nodes and the solutions Mutable provides to streamline the process. There's a complementary guide for programmers [[ mutable/unreal-engine-4/multilayerprojectionprogramming/ | Multilayer projection programming ]].
(WARNING) The multilayer functionality only works with switchable parts that are implemented in child objects and use their own material nodes (not extend material nodes).
(WARNING) It's much easier to implement if all the switchable parts share a common base UE4 material.
Some games may need a lot of stickers, so creating nodes for each and every one of them can be cumbersome and create huge graphs. In fact, it may even be unknown during development how many will be needed because it could be up to the player to decide how many are wanted.
On top of that, the surface onto they have to be projected may even be unknown, or even not exist yet! That is the case with switchable parts. You may want to project an image onto the jacket the player is wearing, but that jacket is switchable at run-time. Duplicating the nodes required for projection for each and every jacket is just too much work.
Multilayer sticker projection is Mutable's solution for both of these problems. With just one node, this system will let you set up multiple layers of stickers, on any item of a group. For example, instead of having to add projection nodes to every single jacket in the project, you just have to connect one node to the jacket group node in the Customizable Object root asset, and you will get multiple layers of stickers on any jacket.
1) Open the base Mutable asset of a character, for example Bandit_forFPS. Then add a "Group Projector Parameter" node to the graph, and connect it to the Group node you want to put the stickers on, for instance, the shirts. If the group node doesn't have an orange pin input to connect to, right-click on it and refresh it to make it appear.
2) Then select the "Group Projector Parameter" node, and fill in its properties. Give it a unique parameter name:
3) Also specify which textures will be available as options to be projected as stickers. For each sticker, select one texture and give it a name:
3b) (Optional) To share textures between different projector nodes, the Option Images Data Table can also be used. Select a data table that has a column with Texture2D references, and fill the name of that column in the "Data Table Texture Column Name" property, just above the "Option Images Data Table" property. The names of the rows will identify the stickers and will be used as option names. Textures in the Option Images Data Table have priority over textures in the Option Images property if they share the same option name.
4) To perform editing of the projectors on characters that are not in the default T-pose in a customization lobby, fill up the "Option Poses" array. Set the name and the UE4 pose asset in each element.
5) It's absolutely necessary to specify which channel of the UE4 base cloth material used by the shirts/items will be used to overlay the stickers. That means that the UE4 material used by the shirts/items needs a possibly new channel that overlays the stickers onto the base material texture. First specify the name of the new channel as "StickerLayer":
6) Then open the UE4 common base material or materials used by the shirts/items (M_Bandit_Shirt_Basic_MM in this case) and add a "StickerLayer" texture parameter with a completely black and transparent texture by default, and blend it inside the material, for instance with the base color:
7) Important! If you change a base material to add a StickerLayer channel, the Mutable Material nodes in each shirt/item will not get the change automatically. They should have to be manually refreshed in each Mutable shirt/item child asset, but Mutable offers an automated solution, right-click on the shit/item group node and click on "Refresh all material nodes in children", then save all modified assets:
8) After all these steps, recompile the Mutable base character and when it finishes you should get the new Multilayer Sticker projector on the preview viewport:
9) Just press the AddLayer button and a row of projector controls will appear below it. Use them to place and control the sticker:
10) Press the AddLayer button multiple times to add multiple stickers, and the projector controls to change the stickers, their type, their placement, opacity and projection pose. If you change the pose, it only affects the projection calculations but not the character's pose in the viewport. Drag and drop a pose asset to the viewport to set the character's pose.
11) Set the reference texture property in the "Group Projector Parameter" node to let Mutable know what properties the generated projection textures should have (compression, sRGB, etc.).