top of page
Search

BMAD: Asset Pipelines, Performance, & Shaders

Chris Leu

Updated: Jan 20

I joined BMAD in May 2024, and found myself as the most senior technical artist on staff.


For reasons that predate my hiring, the art and programming teams were operating in complete isolation; all asset integration was fragile, depending on multiple versions of software to achieve mediocre results slowly and arduously; untriaged performance issues regularly dropped frames to single-digits even on mid-range devices; and shader development was at a standstill, debilitated by technical debt.

While I understandably can't detail too much of the work itself, I can explain how I tackled these issues.


Art-Code Harmony

While this issue is much more of a project management concern, and was also raised as an issue by the team lead, Carlos Herrera, as his ability to work with the art development team was limited by company structure. This remains an ongoing issue, with the programming lead not able to assign work from the official ticketing tools, or consistently meet with art and code coworkers simultaneously, and vice versa.

Initially, I created a document detailing performance losses caused directly by this isolation of the teams, largely focusing on the delays it adds to asset integration.

As an example, an issue rooted in a specific malformed texture would have stalled that asset's integration, and requesting a new version of that asset would be a task created at the beginning of next week, instead of promptly brought to the attention of the relevant artist. This made any issue with even the smallest feedback cause knock-on delays to the order of weeks!

I've since worked on creating strike-teams of talented artists working directly with the relevant skilled programmers to handle issues with prompt communication, instead of relying heavily on agile tickets to summarize tasks. Those tickets are still used, and very much valued, but no longer are required for back-and-forth revisions taking less than a few hours.

At an estimate, projects using this "strike team" format operate at more than 200% the Velocity of the previous stagnant teams, though systemic change to the company structure is slow-going.


Asset Integration

New and interesting assets were a critical selling point for the Title, but in part due to relying heavily on junior talent without senior guidance, and a reliance on rapid prototypes redefined as shipped product, the team's ability to digest concept art into shipped fresh assets was fraught with pitfalls, delays, impending doom, and inefficient workloads.

I really cannot overstate my concerns with how asset integration was handled before my arrival.

From the top, for reasons I've already discussed, the art team worked from concept art to models without technical input, leading to totally unforeseen roadblocks when trying to implement things like 10,000 particles, or layered transparency, or dynamic mesh resolution. Not necessarily impossible, but they dramatically expand the scope of what was supposed to be a simple added asset, needing dedicated R&D projects to develop the systems to support a single effect.

Assuming that artistic development went well, it was then moved into the Unity editor. This began with a specific programmer pulling the maya export into a local install of Unity 2020, to handle a unusual niche issue relating to bone renaming.

Once transferred, the asset would be repackaged, and sent to a junior developer for final integration.

This entailed an 82 step process. Creating prefabs from scratch, attaching textures and icons, populating references, editing multiple CSVs by hand, and adding the results to specific scenes invariably leading to issues with source control.

There was plenty of room for improvement!


To start, a technical artist now reviews all concept pitches for technical headaches, catching any unexpected issues before they can manifest.

I personally overhauled the integration pipeline, writing several editor tool windows to directly digest the exported maya files in an automated fashion, creating the final results of the previous protracted process directly.

This removed the dependence on an outdated unity version, and replaced the manual 82 steps with 10 clicks or less.

In summary, my work directly reduced asset integration per batch from 3 individuals and over 30 hours, to 1 individual and 30 minutes, a 98% reduction in work-hours.


Performance Profiling

Avoiding technical details, I tackled low-end performance in order to expand our target market. This entailed performance benchmarks using the builtin Android and Editor tools, and rewriting the offending shaders in HLSL, when they had previously been created by a junior programmer in a third-party shader-graph plugin.

Shaders I recreated this way had an average of 80% increased performance.

Most notably, rebuilding and optimizing the shader for a series of particle systems moved us from 17FPS to 60FPS on lowest-end devices, a frame-rate increase of 350%

Finally, I also optimized asset packaging for builds, reducing the file size by 30%, without compromising visuals, performance, or functionality.

Across 4 releases, our performance on specifically low-end android devices increased more than 400%
Across 4 releases, our performance on specifically low-end android devices increased more than 400%

Shader Development

As the most senior technical artist, and the only one comfortable with HLSL, I lead an series of 1-hour courses to educate and train them on GPU utilization and HLSL shader development.

Though the results may take some time to manifest, the junior TAs, volunteer programmers, and management enjoyed 12 sessions of weekly shader bootcamp, ranging from the absolute basics of how to write the simplest shader, to advanced profiling, debugging, render pipelines, and more.

The lectures and exercises have been archived, and are now available as reference for all employees to review.

More directly, as I detailed above, I handled direct rewrites of several problematic shaders, created before my arrival for prototyping, and never revised.

I was able to distill that functionality into efficient hand-written HLSL shaders, often observing an increase in performance by 100% to 200% on bottle-necked scenes.

9 views0 comments

Recent Posts

See All

Comments


Commenting has been turned off.
bottom of page