Loading
Rob Elam

Game Developer

Unity Expert

Tools Developer

Team Leader

Performance Analyst

Rob Elam

Game Developer

Unity Expert

Tools Developer

Team Leader

Performance Analyst

FSG Vegetation Optimizing

One of the major challenges in developing Full Swing Golf’s flagship product was improving the performance of its vegetation rendering system. Rendering trees and vegetation was the most significant performance bottleneck, and achieving a stable framerate was crucial. Here’s how I approached and solved the problem.

The Problem: A Legacy System with Limited Options

The existing system relied on Vegetation Studio for both placement and rendering of vegetation. However, transitioning to Vegetation Studio Pro wasn’t straightforward—there was no importer for old Vegetation Studio data. Adding to the challenge, management was resistant to adopting a more advanced vegetation solution or upgrading Unity to take advantage of its newer terrain rendering features. This left us with a system that wasn’t cutting it, yet upgrading or switching to a different tool wasn’t an option.

The Solution: Building a Custom Rendering Path

I identified an opportunity to leverage GPUInstancer for rendering vegetation. This approach enabled us to significantly boost rendering performance while keeping the existing Vegetation Studio workflows intact for artists. Here’s how I made it happen:

  1. Bridging the Gap Between Systems
    I developed an interface to convert Vegetation Studio data into a format compatible with GPUInstancer. This required writing custom tools to handle quirks in data organization and shader usage, ensuring seamless integration between the two systems.
  2. Automation for Efficiency
    To make the transition process less painful, I implemented automated tools to handle as much of the conversion as possible. While not everything could be automated, converting legacy courses to the new system usually took an hour or two—a manageable overhead considering the benefits.
  3. Research and Development
    I conducted thorough research to understand both tools’ capabilities and limitations. This informed the custom rendering path I designed, ensuring it delivered the performance improvements we needed without sacrificing visual fidelity.

The Results: A Big Win for Performance

The results exceeded expectations. By moving from Vegetation Studio’s rendering to GPUInstancer, we achieved:

  • Framerate Improvements: Frame rates improved by 30% to 60%, depending on the scene’s vegetation density.
  • Stability: The new system delivered far more consistent performance, eliminating many of the stalls and variable frame rate caused by the legacy approach.

Takeaways

This project was a great example of working within constraints to deliver a meaningful performance boost. By combining technical research with practical tools for artists, I created a solution that didn’t require retraining or major workflow changes but still had a massive impact on the product’s quality and user experience.