ResearchSep 2026· 7 min read

Splatting Saigon from the air

3D Gaussian Splatting at Viettel AI Race 2026: reading the metric scene by scene, the geometry fix worth twelve points, and the experiments that went nowhere

Zillexa research
Viettel AI Race 2026, where this work earned the Promising Award.
Viettel AI Race 2026, where this work earned the Promising Award.

Viettel AI Race 2026 handed us photos of real places, each with a known camera position, and asked for the pictures a camera would take from positions it never visited. That is novel view synthesis, and it sits underneath every digital twin you can fly through.

The task

Seven scenes: two objects shot up close, a bonsai and a chair, and five aerial captures over Ho Chi Minh City. A submission was 386 rendered images, scored per scene and then averaged:

score = 0.4 × (1 − LPIPS) + 0.3 × SSIM + 0.3 × min(PSNR / 50, 1)

Each team had fifteen submissions a day, and only the last one counted.

Read the metric scene by scene

LPIPS has the biggest weight, but where to push depended on which term still had room. The aerial scenes already had low LPIPS, around 0.10 to 0.13, so PSNR was the axis left to move. The objects sat at 0.22 to 0.27, and there LPIPS was the lever. Our rule of thumb: taking 0.05 off LPIPS was worth about two points, and one more decibel of PSNR about 0.6.

Break the score down per scene before changing anything

The biggest fix was geometry, not learning

The aerial cameras had radial lens distortion, and the test images we were scored against were distorted too. So we undistorted the training photos, trained a pinhole model, rendered the test views, and re-applied the exact distortion with cubic resampling. On the first version of the task1, this one step took us from 65 to 77.

What moved the score

  • Capacity where the scene was under-resolved. Raising the cap from 12 to 16 million Gaussians helped four of the five aerial scenes by filling in far-field detail
  • Averaging models, pixel by pixel. The real jumps came from fusing renders of several independently trained models, with a plain mean or a trimmed mean that drops the extremes at each pixel. Fusion alone lifted the chair by more than a point
  • Sharding. The largest models did not fit on one GPU, so training was split across four and merged afterwards

What didn't

  • Regularising a fit that was already good. A higher spherical-harmonics degree and penalties on scale and opacity all made the novel views worse
  • Refining camera poses, which cost almost two points
  • Diffusion enhancers. They help when views are sparse and the model has to extrapolate. Our test views sat between training views, and there they gave nothing back

Our validation lied

A held-out split of the training photos said one change was worth +0.16. The official score said −0.08. From then on every object experiment had to prove itself on the official leaderboard, and fifteen submissions a day became the budget we planned around.

The final

We made the final as one of twelve teams. It was a single large urban scene, scored against sharp full-resolution images, with inference time measured separately on an H200. Post-processing that had been useless against the softer qualifying images came back to life. We brought MCMC densification up to 14 million Gaussians, weight-decay regularisation, multi-view accumulation in training, and a SCUNet restoration model fine-tuned on our own renders. That run earned the Promising Award.

What's next

We kept the pipeline, the experiment log and the list of dead ends. If you work on large-scene reconstruction, let’s compare notes.

3D Gaussian SplattingNovel view synthesisDigital twin
  1. Eight aerial scenes over Hanoi and Ho Chi Minh City. It was later replaced by the seven-scene task above. ↩

Keep reading

All notes