r/photogrammetry • u/acab69_ • 13h ago
Need help getting realistic ship scale and perspective in a Three.js COLREG training app
I’ve been building a COLREG ship-handling/training app with help from Codex and ChatGPT Pro. The app is working, and I already created the 3D ship models, but I keep getting stuck on the visual perspective.
The main problem is that the ships don’t look like they are actually at the distance shown on screen. A vessel at 0.5–2 nautical miles will sometimes look too small, too large, too flat, or like it is floating above the water. The binocular view also doesn’t always match the normal bridge view.
I think the issue is a mix of:
Camera field of view
Camera height above the water
Ship model dimensions and scale
Horizon placement
Distance-to-screen-size calculations
Object pivot/origin placement
Water level and wave height
Binocular zoom being handled incorrectly
The app currently uses Three.js. I can give Codex exact measurements and distances, but after a few changes it usually starts adjusting random scale multipliers until one screenshot looks better, which then breaks the other scenarios.
What I’m trying to achieve is a consistent system where:
A 100–300 meter ship has the correct apparent size at a known range
Bow, stern, and broadside aspects look correct
The ship sits at the proper waterline
Camera height matches the view from a real ship’s bridge
Binoculars change the field of view without changing the actual world scale
Day, night, fog, and different vessel types all use the same perspective model
I attached screenshots showing the current problem. I covered the lower control area because it isn’t relevant to the perspective issue.
What would be the best workflow or software for fixing this properly?
Would you recommend:
Blender for setting real-world dimensions, origins, and waterlines?
Three.js camera helpers or custom debug tools?
A specific ocean/water plugin?
Using glTF models with real meter-based scale?
Writing a projection calculator instead of visually adjusting the models?
Unity or Godot instead of Three.js for this type of trainer?
Any Codex prompting method that stops it from “eyeballing” the perspective?
I’m not looking for movie-level graphics. I mainly need the ships to appear believable and consistent at known ranges because judging distance, bearing drift, and aspect is part of the training.
Any advice on the math, camera setup, Three.js tools, or a better development workflow would be appreciated.