Spaces:
Running
on
Zero
Running
on
Zero
| import torch | |
| from easydict import EasyDict as edict | |
| from ..representations import Voxel | |
| from easydict import EasyDict as edict | |
| class VoxelRenderer: | |
| """ | |
| Renderer for the Voxel representation. | |
| Args: | |
| rendering_options (dict): Rendering options. | |
| """ | |
| def __init__(self, rendering_options={}) -> None: | |
| self.rendering_options = edict({ | |
| "resolution": None, | |
| "near": 0.1, | |
| "far": 10.0, | |
| "ssaa": 1, | |
| }) | |
| self.rendering_options.update(rendering_options) | |
| def render( | |
| self, | |
| voxel: Voxel, | |
| extrinsics: torch.Tensor, | |
| intrinsics: torch.Tensor, | |
| colors_overwrite: torch.Tensor = None | |
| ) -> edict: | |
| """ | |
| Render the gausssian. | |
| Args: | |
| voxel (Voxel): Voxel representation. | |
| extrinsics (torch.Tensor): (4, 4) camera extrinsics | |
| intrinsics (torch.Tensor): (3, 3) camera intrinsics | |
| colors_overwrite (torch.Tensor): (N, 3) override color | |
| Returns: | |
| edict containing: | |
| color (torch.Tensor): (3, H, W) rendered color image | |
| depth (torch.Tensor): (H, W) rendered depth | |
| alpha (torch.Tensor): (H, W) rendered alpha | |
| ... | |
| """ | |
| # lazy import | |
| if 'o_voxel' not in globals(): | |
| import o_voxel | |
| renderer = o_voxel.rasterize.VoxelRenderer(self.rendering_options) | |
| positions = voxel.position | |
| attrs = voxel.attrs if colors_overwrite is None else colors_overwrite | |
| voxel_size = voxel.voxel_size | |
| # Render | |
| render_ret = renderer.render(positions, attrs, voxel_size, extrinsics, intrinsics) | |
| ret = { | |
| 'depth': render_ret['depth'], | |
| 'alpha': render_ret['alpha'], | |
| } | |
| if colors_overwrite is not None: | |
| ret['color'] = render_ret['attr'] | |
| else: | |
| for k, s in voxel.layout.items(): | |
| ret[k] = render_ret['attr'][s] | |
| return ret | |