| 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 |
| ... |
| """ |
| |
| 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_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 |
|
|