Hy3D Render MultiView
The control-image factory that tells the paint model what your mesh looks like from all sides
- trimesh
- camera_config
- normal_maps
- position_maps
- renderer
- masks
Hy3DRenderMultiView is the bridge between the shape and texture halves of Hunyuan3D. The shape model gave you geometry; this node renders that geometry from a ring of camera angles into the normal maps and position maps that the paint model uses to stay consistent when it colors the mesh. It's the 2.1 workflow's most important helper node, and the reason the texture stage knows what's front, back, top, and bottom.
Think of it as control-net for 3D. Just like a controlnet conditions a 2D diffusion model on pose or depth, these rendered maps condition the multiview paint diffusion so all six views of your object agree with each other. Without them, the texture model would invent a front that looks nothing like the back.
What it does
Inputs: a TRIMESH plus render_size and texture_size (both default 1024). The optional camera_config (HY3DCAMERA, from Hy3DCameraConfig) overrides the six default camera positions, and normal_space (world vs tangent) picks the normal map convention.
It renders the mesh from six fixed angles - azimuths 0/90/180/270 at eye level, plus top and bottom - using the pack's differentiable rasterizer. The outputs are:
normal_maps(IMAGE) - six surface-normal images, one per viewposition_maps(IMAGE) - six position/depth-ish mapsrenderer(MESHRENDER) - the renderer object itself, carrying the meshmasks(MASK) - alpha masks per view
All three image outputs feed Hy3DSampleMultiView; the renderer gets threaded forward to Hy3DBakeFromMultiview so the bake uses the exact same camera setup you rendered with. That thread-through is deliberate - if the bake and the render disagree on cameras, your texture warps.
Why the defaults are the defaults
The six-view ring (0/90/180/270 + top/bottom) is Hunyuan3D 2.1's standard layout, and Hy3DSampleMultiView expects that count by default. If you change cameras with Hy3DCameraConfig, you have to change them consistently across render, sample, and bake - the nodes won't check for you.
Where it sits
Hy3DPostprocessMesh → Hy3DRenderMultiView → Hy3DSampleMultiView → Hy3DBakeFromMultiview
It's always used in the textured-asset workflow. If you only want the raw shape (a print or a bare mesh), you can skip the entire render/paint/bake chain.
Install
Pack-level install: Manager search "Hunyuan3DWrapper" or git clone https://github.com/kijai/ComfyUI-Hunyuan3DWrapper, then pip install -r requirements.txt. Note this renderer is part of the texture-gen stage, which on Windows expects the prebuilt custom_rasterizer wheel from the pack's wheels/ folder matched to your torch/CUDA build - pick the +torch260.cuda126 variant for the current portable, and if you get "not a supported wheel on this platform," your Python/torch/CUDA don't match any of the four wheels and you're compiling it yourself (README has the setup.py install path).
Common issues
- Black or empty renders - the mesh may have no proper normals, or you skipped
Hy3DPostprocessMeshand floaters are occluding things. Clean the mesh first. - Bake comes out smeared - camera mismatch between render and bake. Use the threaded
rendereroutput and don't re-render in the middle. - Huge VRAM spikes at 1024 -
render_size1024 at six views is real work on a differentiable rasterizer. Drop to 768 or 512 for a first pass.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| trimesh | TRIMESH | — | |
| render_size | INT | 102464–4096 | — |
| texture_size | INT | 102464–4096 | — |
| camera_configopt | HY3DCAMERA | — | |
| normal_spaceopt | COMBO | world | 2 options: world, tangent |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| normal_maps | IMAGE | — |
| position_maps | IMAGE | — |
| renderer | MESHRENDER | — |
| masks | MASK | — |