Developer of Viy-Based AR Horror Game Builds 12 Monsters in Tripo AI and Cuts the Devil to 7 880 Triangles

The developer of Home Haunt, an AR horror game based on Gogol's Viy, generated all 12 of its monsters in the Tripo AI service. To make the models run on an iPhone alongside ARKit and the room mesh, a Blender script cut the Devil from 38 444 to 7 880 triangles and reduced textures from 4096 to 1024. Tripo built the 23-bone rig automatically, and the animations come from the free Quaternius library. The author's takeaway: count the triangle budget per scene, not per model. • The first batch of six characters, a coffin, a lectern and an icon cost 425 Tripo credits • The Kikimora and the old witch failed prerigcheck and were regenerated • The Blender 5.1.1 video: 3 002 frames, 30 fps, Eevee, 24 samples

AI-processed from Habr AI; edited by Hamidun News
Developer of Viy-Based AR Horror Game Builds 12 Monsters in Tripo AI and Cuts the Devil to 7 880 Triangles
Source: Habr AI. Collage: Hamidun News.
Listen to article
Article Fact Sheet & Key Figures
ParameterDetails
Primary sourceHabr AI ↗
Editor-in-Chief
Key metric #1The first batch of six characters, a coffin, a lectern and an icon cost 425 Tripo credits
Key metric #2The Kikimora and the old witch failed prerigcheck and were regenerated
The Blender 5.1.1 video3 002 frames, 30 fps, Eevee, 24 samples

An indie developer is building a prototype of Home Haunt, an AR horror game for iPhone based on Gogol's novella Viy. The game places the story in your own room: the dead Panochka rises from a coffin on the floor, and spirits watch from the walls. He generated all 12 monsters in Tripo AI, an AI service that creates 3D models from text or images.

The phone has to handle the camera, ARKit and the room mesh at the same time, so the models had to be slimmed down. The Devil took the biggest cut: a Blender script reduced it from 38 444 to 7 880 triangles (the polygons that make up a model's surface). The Unity project has been under way since October: the build log started on 2 October and had more than 50 entries by 30 October.

What the AI generated and what it did not

All 12 models were created in Tripo AI through the API from a Python script, using model version v3.1. Eleven characters came from a text description; the Old Woman came from a concept image in a T-pose. The list: Panochka, Viy, the Devil, the Old Woman, the Upyr, the Kikimora, the Vurdalak, the Winged One, three spirits from the wall (the Pig-Snouted Devil, the Hairy Imp, the Skinny Devil) and the Rooster. The designs are the author's own, not taken from film adaptations.

The prompts are written in English, and the pose is strictly specified, either A-pose or T-pose, because otherwise the automatic rig fails. The first batch of six characters, a coffin, a lectern and an icon cost 425 credits: the balance dropped from 1 500 to 1 075. Under Tripo's terms, a paying user owns the output and does not need to credit the service. The author notes that he reads clause 5.2.2 of the Terms in his own way and will re-read it before release.

The rig is also automatic: the biped mode in animate_rig produces a 23-bone skeleton with Mixamo-style bone names. That is only a naming match; Adobe Mixamo itself was used for neither the rig nor the animations. The clips come from the free Quaternius Universal Animation Library 1 and 2 (CC0 license), and he transferred them to the Tripo skeleton himself.

How the models were slimmed down for a phone

Tripo outputs models of 5 to 39 thousand triangles with 4096 textures. That is a lot for AR, where the camera, ARKit and the room mesh share the same hardware. So a Blender script (tripo_mobile.py) decimates the geometry to a target triangle count and reduces textures from 4096 to 1024, and then the GLB is converted to FBX for Unity.

Triangle counts per model (Tripo → in game):

  • Panochka: 23 528 → 14 774;
  • Viy: 38 566 → 15 759;
  • Devil: 38 444 → 7 880;
  • Old Woman: 28 101 → 13 789;
  • Upyr: 23 872 → 11 819;
  • Kikimora: 24 111 → 11 818;
  • Vurdalak: 14 872 → 11 820;
  • Winged One: 9 498 → 5 910;
  • Pig-Snouted Devil: 14 336 → 11 820;
  • Hairy Imp: 13 801 → 8 864;
  • Skinny Devil: 14 736 → 11 819;
  • Rooster: 4 781, unchanged.

The Devil lost the most and is now the lightest of the rigged characters. The author's main takeaway: count the triangle budget for the whole scene, not for each model separately.

Where the pipeline broke

Not everything worked on the first try. The Kikimora and the old witch failed the pre-rig check (prerigcheck) and were regenerated, which is where the _v2 versions came from. The Kikimora's rest pose in the rig turned out to be an A-pose, so he straightened it in Blender before transferring the clips. The Winged One and the Rooster have no bones at all: they have no humanoid skeleton and move through code. The Winged One flies with a wingspan compression of 0.8 ± 0.2 at 2 Hz, with sway and bank.

In the game, the Quaternius clips are retargeted with Unity's standard Humanoid avatar, which is fast and needs no manual work. For the videos, the author wrote a separate script that transfers the same clips to the Tripo rig: it takes bone rotation deltas relative to the T-pose and aligns the limbs. The result is close to the in-game look but does not match Unity frame for frame. Speeds are tuned to each character: Viy walks at 0.5× speed, the Devil at 0.7× in jerks, the Kikimora at 1.3× in jerks. Panochka rises in the video at 0.55×, because otherwise the motion does not read on screen.

The video was built in Blender 5.1.1: Eevee, 24 samples, a 1920×1920 frame, 30 fps, 3 002 frames. The lighting is a warm candle, a cold rim light and light fog. The fog washed out the floor, so the studio light was linked to the model only through light linking. The turntable makes one revolution in 5 seconds, and a glowing hot line travels up the model from the bottom: below it is the texture, above it is gray clay.

The game runs on Unity 6 (6000.5.6f1) with URP and AR Foundation 6 on top of ARKit. The automated tests, 24 solo smoke tests and 9 co-op pairs, pass as of 30 October, but they do not check how good the models look.

The author lists the unfinished items himself: there are no facial expressions or face animation, Viy's eyelids are procedural, Panochka's eyes do not glow in Blender (in the game that is a separate effect), the "swarm of hairy ones" is still replaced by the Devil, and the Upyr shows dark dots at the waist on the turntable, the cause of which the author has not found. The game is currently in a closed TestFlight test for iPhone.

Key Questions Answered

What the AI generated and what it did not?

All 12 models were created in Tripo AI through the API from a Python script, using model version v3.1. Eleven characters came from a text description; the Old Woman came from a concept image in a T-pose. The list: Panochka, Viy, the Devil, the Old Woman, the Upyr, the Kikimora, the Vurdalak, the Winged One, three spirits from the wall (the Pig-Snouted Devil, the Hairy Imp, the Skinny Devil) and the Rooster. The designs are the author's own, not taken from film adaptations. The prompts are written in English, and the pose is strictly specified, either A-pose or T-pose, becau

How the models were slimmed down for a phone?

Tripo outputs models of 5 to 39 thousand triangles with 4096 textures. That is a lot for AR, where the camera, ARKit and the room mesh share the same hardware. So a Blender script (tripo_mobile.py) decimates the geometry to a target triangle count and reduces textures from 4096 to 1024, and then the GLB is converted to FBX for Unity. Triangle counts per model (Tripo → in game): Panochka: 23 528 → 14 774; Viy: 38 566 → 15 759; Devil: 38 444 → 7 880; Old Woman: 28 101 → 13 789; Upyr: 23 872 → 11 819; Kikimora: 24 111 → 11 818; Vurdalak: 14 872 → 11 820; Winged One: 9 498 → 5

Where the pipeline broke?

Not everything worked on the first try. The Kikimora and the old witch failed the pre-rig check (prerigcheck) and were regenerated, which is where the _v2 versions came from. The Kikimora's rest pose in the rig turned out to be an A-pose, so he straightened it in Blender before transferring the clips. The Winged One and the Rooster have no bones at all: they have no humanoid skeleton and move through code. The Winged One flies with a wingspan compression of 0.8 ± 0.2 at 2 Hz, with sway and bank. In the game, the Quaternius clips are retargeted with Unity's standard Humanoid

ZK
Zhemal Khamidun — CPO at Alpina Digital, product manager of AlpinaGPT. Building AI products since 2019. Hamidun News is a pet project that grew into a production aggregator with 6,000+ readers.
✦ Unified AI Workspace · Nomad

Test Frontier LLMs & Autonomous Agents in One Workspace

Run Claude Opus 5.5, GPT-6, Gemini 3.1, and DeepSeek side-by-side in Nomad AI (nomadnet.ai) — unified model routing, deep research, and multimodal workflows under one subscription.

Try Nomad AI →Launch Nomad Agent
What do you think?
Loading comments…