Which engine are you building on and why exactly that one?
Three.js over WebGL, in the browser. The reason is practical: the deliverable is a link. No installation, no store, no review process, and a fix reaches everyone at the moment of publishing. We use it in five repositories — versions 0.184 and 0.185 — sometimes through `@react-three/fiber` and `@react-three/drei`, sometimes written directly, down to the point where we manually handle buffer attributes. Four of the projects are openly public right now, so the statement can be checked without asking us.
Can you do it in Unity or Unreal?
We take them on by order, but the honest answer starts differently: we have not delivered any project in Unity or Unreal. We searched all the code on the workstation — no `UnityEngine` reference, no `.uproject` file, no `.csproj`, no Unreal macro. The engines are not even installed. What changes in practice if you choose one of them: the deliverable is no longer a web address, but a platform build; distribution goes through a store or installer; and the licensing terms are those published by Unity, respectively Epic, at the project date, and we check them then, not assume them. How we proceed: we start with a paid prototype and, if the project requires engine experience we do not have in-house, we say so before the contract.
Does it work on mobile?
Yes, and it is a decision made at build time, not a hope. The shader on this site has three quality levels — 24, 40 and 80 iterations — and scales down on its own: on mobile it starts at the lightest one, and on any device with 4 cores or fewer the maximum step becomes the middle one. The pixel ratio is capped everywhere: 0.5 on the low step here, 1.5 on mobile in the world demonstrator, 1.6 and 1.75 in the two urban map scenes. When the canvas goes off-screen, the loop stops. What I cannot give you: an FPS figure on a specific phone — we do not have a publishable measurement of that, so we do not invent one.
Does the game open in the browser or is it installed?
Everything we have built so far opens in the browser. Three of the projects are static builds served by Nginx from our server; one is on Vercel. An installable game — desktop, phone or console — is a different discussion: it requires a developer account, a review process, age rating and, most likely, another engine. None of our projects are distributed through a store, so that would be a new path, with its own steps.
Who owns the code and assets at the end?
The code written for your project belongs to you, and the terms are written in the contract before the work starts. For assets, the distinction matters: those generated from primitives or public data come without additional constraints — the car in the world demonstrator is built from boxes, capsules and cylinders, the city in the urban scene is OpenStreetMap over Copernicus DEM. Imported ones keep their licence: the Unitree robots are BSD-3-Clause from MuJoCo Menagerie, with the notice next to the model. In a project with custom-made graphics, the source and ownership of each asset are set out on a list, asset by asset.
What happens with multiplayer?
This is the most honest reservation we have. None of the five projects has shared player state: the investigation game keeps everything in `localStorage`, and the robot simulation keeps state in page memory. A game with several people at once needs an authoritative state server, synchronisation, and network lag handling — new pieces, not a ticked setting. It can be built, but it enters the project as a separate subsystem, with its own work, not as an option.
How long until I see something playable?
I am not giving you a number I cannot stand behind. I am giving you the order: the first delivery is a playable prototype with the correct rule and minimum graphics, and it must work with no API key at all — just as our investigation game is played through entirely on scripted lines. Only after the rule holds are graphics, voice and the model added. If a supplier promises the deadline before seeing the rule, they are promising something they have not measured.
What does it cost to keep the characters “alive”, meaning on the model?
You control the cost through the limits written in code, not through hope. In the investigation game: the history sent to the model is cut to the last 20 messages, the player’s message to 600 characters, the reply to 400 tokens, and the maximum wait time is 45 seconds. Voice synthesis cuts the text to 900 characters. Each of these thresholds is a line we can move together, with a direct effect on the bill. And the no-key mode remains, where the game works on scripted lines and consumes nothing.
What do you not do?
We do not claim that an animation is physically proven. In the robot simulation, all 15 actions are marked in code as `cinematic`, the evidence panel declares `actionValidation: "none"`, and the launch checker says today “Release qualification: blocked”, because the 5 ms response of the joint stopper is not calibrated on real hardware. We do not deliver multiplayer as a hidden option. We do not present ourselves as a Unity or Unreal studio. And we do not put a demo in the offer without saying whether it is public — our investigation game, for example, runs only locally and has no address.