Jared Pemberton

← Home Tee Hero

Home Tee Hero V2

Full courses in first person, built on 1m LiDAR, for the Approach R50.

Role
Product Architect → Senior Technical Artist
Years
2022 to 2026
Focus
Enhanced Courses pipeline
Stack
Houdini TOPs, Python, VEX, Global Mapper Script, C#, Photoshop JSX
Garmin Approach R50 video
The Approach R50 launch video.

Version one opened a new market for the company. Afterward I worked with my supervisor and HR to define its first Technical Artist job title, which led to hiring a small team in that role.

The first version showed each hole from above, as an island, so it could run on low-end phones. The second version, for the Approach R50, put the player on the course in first person with the full course around them.

A first-person view needs a believable horizon: trees, buildings and terrain well beyond the hole itself. The source data had to grow to match.

A single golf hole generated as an island, seen from above.
Version one: one hole as an island.
A full course generated on a large disc of terrain.
Version two: the full course.

Better data

Version one and version two both ran on Intermap-derived elevation data at 4m resolution or coarser. For Enhanced Courses I sourced 1m USGS LiDAR data.

LiDAR elevation comes in two forms: a terrain model of the bare ground, and a surface model that still has the trees and buildings on it.

Grayscale bare-earth terrain.
Terrain model: bare ground.
The same area with trees and buildings standing on it.
Surface model: everything standing on it.
A soft, low-detail elevation map.
Standard elevation, Intermap-derived.
A sharp elevation map of the same hole showing cliffs and paths.
1m USGS LiDAR, same hole.

Tree coverage

On standard courses, tree areas are traced by hand around each hole. Tracing all 42,000 courses takes a large team more than two years.

The Enhanced method needs no tracing. From free USGS LiDAR data it finds tree areas automatically, along with their heights and some low-lying vegetation, across the whole area and not only beside the holes.

Aerial view of a real golf course with dense tree cover.
The real course from the air. Imagery: Google Earth.
The generated course with trees only in hand-traced areas near the holes.
Standard: hand-traced tree areas.
The same course with trees across the whole area, derived from LiDAR.
Enhanced: trees derived automatically from LiDAR.

Canopy and water

Subtracting the terrain model from the surface model cancels the ground and leaves only what stands on it. In Houdini I turned that difference into vegetation shapes with real heights: under 2m is brush, over 2m is trees. Removing known building footprints leaves vegetation alone, and the same step in reverse gives building heights.

Water came from the terrain itself. Flat regions of the heightfield were selected and extracted as ocean and lake shapes, including coastlines and islands.

Terrain with vegetation raised as colored height spikes.
The canopy model: vegetation height, derived automatically.
Coastal terrain with the ocean marked in red.
Ocean, detected from the heightfield.
Inland terrain with a lake marked in red.
Lakes and islands.

The pipeline

Doing this by hand meant exporting a stack of files for every hole, 18 holes a course. That was workable for a handful of courses and impossible for thousands, so I built it as an automated pipeline in Houdini TOPs.

Four processors run in sequence. Global Mapper crops and reprojects the data, driven by Global Mapper Script. A Photoshop step builds an editable template for each hole. A C# tool normalizes the elevation maps. A Houdini processor then converts everything into the same format as the standard source data, so the existing course generator runs on it unchanged.

Diagram of the pipeline: source data, four processors in Houdini TOPs, then the existing course generation.
The Enhanced Courses pipeline.
The Houdini TOPs network: eleven colored stages from input to output.
The TOPs network, one colored block per stage. Shown at low resolution on purpose: the overall flow is visible, the proprietary detail is not.

Custom features

Some courses need a human touch: a missing tee pad, a bridge. The pipeline generates a Photoshop template for each hole, so anyone with Photoshop can paint the feature in. On the next run the Houdini processor converts the edit into course data, with no Houdini or Unity license needed.

Painting a tee pad and a bridge into a hole’s template.
A hole’s template in Photoshop with features painted in flat colors over an aerial image.
The template: one layer per feature type.
The same painted shapes converted to course geometry in Houdini.
The same shapes, converted to course data in Houdini.

Result

  • Working prototype of the Enhanced Courses pipeline, completed in February 2025.
  • Per-hole data preparation that had been done by hand now runs automatically.
  • Output matches the standard source format, so the existing course generator needed no changes.
Home Tee Hero gameplay video
Home Tee Hero gameplay, embedded from YouTube.

Stack

  • Houdini
  • PDG / TOPs
  • HDAs
  • Python
  • VEX
  • Global Mapper Script
  • C# .NET
  • Photoshop JSX
  • Unity
  • USGS 3DEP LiDAR