These images and videos are from an unreleased project that I had the pleasure of being a Senior Technical Artist for. They represent a work in progress Unreal Editor Widget Tool for editing our project's custom Paletized Look Up Table (PLUT) textures.
Our stylized visuals came from storing a material's lighting and fog values as a series of discreet steps within a texture. This allowed us to art direct all color and value within the scene from a single texture palette much like a pixel artist might. By limiting the overall number of color options the intent was to create a more unified, readable and appealing scene. Each biome was intended to have its own palette that would drive all content visuals from environment to characters to effects. Our Art Director Jeramy Cooke was responsible for the initial idea, prototype and implementation of this process.
It was very successful in achieve the above goals, but one of its big drawbacks was needing to manipulate a cumbersome LUT texture in an external DCC app (Photoshop). This meant that only one person could edit color values at any given moment and iteration was slow due to having to continuously tweak/export/import in order to see even the most minor changes in engine context.
The intent behind this tool was to create an in engine toolset for creating, previewing and modifying PLUT textures in a data driven manner that was easy to use and had a WYSWYG feel. Instead of working directly with texture files users would instead be manipulating data assets that could be sampled and modified by blueprint functions. At the end of the day the textural information in a LUT is just a 2D array of color samples that can be further simplified down to a 1D array and stored inside of a data asset to form a "Material" along with some other information such as an identifier string and hit material attributes. These material data assets can then be stored into a unified "Biome" asset that holds all of the materials for a given biome.
With the data storage method figured out it was fairly reasonable to use editor scripting tools to extract that data and write it to a render target pixel by pixel before outputting it directly to a texture file without leaving the editor. This was still a slightly destructive step in that users had to explicitly generate the texture file. Had the project continued we had planned work with the engineering team to nativize these data assets and prompt a texture file overwrite whenever they were modified to make it truly update in real time.
With the basic process setup it became apparent that manipulating color values from a data asset in a 1D array format was just as if not more painful than working in photoshop due to a lack of visual context for the relationships of these colors. The final piece of this puzzle was creating a Editor Widget Window that could take in this data, display it in contextually relevant manner and allow users to manipulate any given color using traditional color picking tools. On top of this I added extra features that would allow us to read existing PLUT textures created via the old process and automatically generate new data assets based on the colors sampled from that texture.
Had the project continued further work was planned to improve the process for changing the ordering of materials withing the PLUT texture. Traditionally lookup values were hard coded into material instances, but now that we had a data driven approach to generating this content it would have been possible to re-order/rename existing materials within the PLUT strip and then find relevant material instances to change their material lookup ID's in an automated fashion.
Creative Direction - Duncan Drummond
Art Direction - Jeramy Cooke