CINXE.COM

kaolin.ops.conversions — NVIDIA Kaolin Library documentation

<!DOCTYPE html> <html class="writer-html5" lang="en" > <head> <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>kaolin.ops.conversions &mdash; NVIDIA Kaolin Library documentation</title> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> <!--[if lt IE 9]> <script src="../_static/js/html5shiv.min.js"></script> <![endif]--> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script src="../_static/jquery.js"></script> <script src="../_static/underscore.js"></script> <script src="../_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="../_static/doctools.js"></script> <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> <script src="../_static/js/theme.js"></script> <link rel="index" title="Index" href="../genindex.html" /> <link rel="search" title="Search" href="../search.html" /> <link rel="next" title="kaolin.ops.pointcloud" href="kaolin.ops.pointcloud.html" /> <link rel="prev" title="kaolin.ops.coords" href="kaolin.ops.coords.html" /> <!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-5SC4NP45F7"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-5SC4NP45F7'); </script> <script async type="text/javascript" src="/_/static/javascript/readthedocs-addons.js"></script><meta name="readthedocs-project-slug" content="kaolin" /><meta name="readthedocs-version-slug" content="latest" /><meta name="readthedocs-resolver-filename" content="/modules/kaolin.ops.conversions.html" /><meta name="readthedocs-http-status" content="200" /></head> <body class="wy-body-for-nav"> <div class="wy-grid-for-nav"> <nav data-toggle="wy-nav-shift" class="wy-nav-side"> <div class="wy-side-scroll"> <div class="wy-side-nav-search" > <a href="../index.html" class="icon icon-home"> NVIDIA Kaolin Library </a> <div role="search"> <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> <input type="text" name="q" placeholder="Search docs" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </div> </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> <p class="caption"> <span class="caption-text">Getting Started:</span> </p> <ul> <li class="toctree-l1"><a href="../index.html">Welcome</a></li> <li class="toctree-l1"><a href="../notes/installation.html">Installation</a></li> <li class="toctree-l1"><a href="../notes/overview.html">API Overview</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Tutorials:</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="../notes/tutorial_index.html">Tutorial Index</a></li> <li class="toctree-l1"><a class="reference internal" href="../notes/simplicits.html">Physics Simulation for Points, Meshes, Splats and more</a></li> <li class="toctree-l1"><a class="reference internal" href="../notes/conversions.html">Conversions across 3D Representations</a></li> <li class="toctree-l1"><a class="reference internal" href="../notes/volumetric_meshes.html">Volumetric Mesh Optimization</a></li> <li class="toctree-l1"><a class="reference internal" href="../notes/surface_meshes.html">Working with Surface Meshes</a></li> <li class="toctree-l1"><a class="reference internal" href="../notes/diff_render.html">Differentiable Rendering</a></li> <li class="toctree-l1"><a class="reference internal" href="../notes/differentiable_camera.html">Differentiable Camera</a></li> <li class="toctree-l1"><a class="reference internal" href="../notes/differentiable_lighting.html">Differentiable Lighting</a></li> <li class="toctree-l1"><a class="reference internal" href="../notes/pbr_shader.html">Easy PBR Shader (USD, gltf, obj)</a></li> <li class="toctree-l1"><a class="reference internal" href="../notes/visualizer.html">Interactive Jupyter 3D Viewer</a></li> <li class="toctree-l1"><a class="reference internal" href="../notes/spc_summary.html">Structured Point Clouds (SPCs)</a></li> <li class="toctree-l1"><a class="reference internal" href="../notes/quaternions.html">Quaternions in PyTorch</a></li> <li class="toctree-l1"><a class="reference internal" href="../notes/checkpoints.html">3D Checkpoint Visualization</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">API Reference:</span></p> <ul class="current"> <li class="toctree-l1 current"><a class="reference internal" href="kaolin.ops.html">kaolin.ops</a><ul class="current"> <li class="toctree-l2"><a class="reference internal" href="kaolin.ops.batch.html">kaolin.ops.batch</a></li> <li class="toctree-l2"><a class="reference internal" href="kaolin.ops.coords.html">kaolin.ops.coords</a></li> <li class="toctree-l2 current"><a class="current reference internal" href="#">kaolin.ops.conversions</a></li> <li class="toctree-l2"><a class="reference internal" href="kaolin.ops.pointcloud.html">kaolin.ops.pointcloud</a></li> <li class="toctree-l2"><a class="reference internal" href="kaolin.ops.gcn.html">kaolin.ops.gcn</a></li> <li class="toctree-l2"><a class="reference internal" href="kaolin.ops.mesh.html">kaolin.ops.mesh</a></li> <li class="toctree-l2"><a class="reference internal" href="kaolin.ops.gaussian.html">kaolin.ops.gaussian</a></li> <li class="toctree-l2"><a class="reference internal" href="kaolin.ops.random.html">kaolin.ops.random</a></li> <li class="toctree-l2"><a class="reference internal" href="kaolin.ops.reduction.html">kaolin.ops.reduction</a></li> <li class="toctree-l2"><a class="reference internal" href="kaolin.ops.spc.html">kaolin.ops.spc</a></li> <li class="toctree-l2"><a class="reference internal" href="kaolin.ops.voxelgrid.html">kaolin.ops.voxelgrid</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="kaolin.math.html">kaolin.math</a></li> <li class="toctree-l1"><a class="reference internal" href="kaolin.metrics.html">kaolin.metrics</a></li> <li class="toctree-l1"><a class="reference internal" href="kaolin.io.html">kaolin.io</a></li> <li class="toctree-l1"><a class="reference internal" href="kaolin.physics.html">kaolin.physics</a></li> <li class="toctree-l1"><a class="reference internal" href="kaolin.render.html">kaolin.render</a></li> <li class="toctree-l1"><a class="reference internal" href="kaolin.rep.html">kaolin.rep</a></li> <li class="toctree-l1"><a class="reference internal" href="kaolin.utils.html">kaolin.utils</a></li> <li class="toctree-l1"><a class="reference internal" href="kaolin.visualize.html">kaolin.visualize</a></li> <li class="toctree-l1"><a class="reference internal" href="kaolin.non_commercial.html">kaolin.non_commercial</a></li> </ul> </div> </div> </nav> <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > <i data-toggle="wy-nav-top" class="fa fa-bars"></i> <a href="../index.html">NVIDIA Kaolin Library</a> </nav> <div class="wy-nav-content"> <div class="rst-content"> <div role="navigation" aria-label="Page navigation"> <ul class="wy-breadcrumbs"> <li><a href="../index.html" class="icon icon-home"></a> &raquo;</li> <li><a href="kaolin.ops.html">kaolin.ops</a> &raquo;</li> <li>kaolin.ops.conversions</li> <li class="wy-breadcrumbs-aside"> <a href="../_sources/modules/kaolin.ops.conversions.rst.txt" rel="nofollow"> View page source</a> </li> </ul> <hr/> </div> <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <section id="kaolin-ops-conversions"> <span id="id1"></span><h1>kaolin.ops.conversions<a class="headerlink" href="#kaolin-ops-conversions" title="Permalink to this heading">¶</a></h1> <section id="module-kaolin.ops.conversions"> <span id="api"></span><h2>API<a class="headerlink" href="#module-kaolin.ops.conversions" title="Permalink to this heading">¶</a></h2> <dl class="py function"> <dt class="sig sig-object py" id="kaolin.ops.conversions.marching_tetrahedra"> <span class="sig-prename descclassname"><span class="pre">kaolin.ops.conversions.</span></span><span class="sig-name descname"><span class="pre">marching_tetrahedra</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">vertices</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tets</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sdf</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_tet_idx</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#kaolin.ops.conversions.marching_tetrahedra" title="Permalink to this definition">¶</a></dt> <dd><p>Convert discrete signed distance fields encoded on tetrahedral grids to triangle meshes using marching tetrahedra algorithm as described in <a class="reference external" href="https://search.ieice.org/bin/summary.php?id=e74-d_1_214">An efficient method of triangulating equi-valued surfaces by using tetrahedral cells</a>. The output surface is differentiable with respect to input vertex positions and the SDF values. For more details and example usage in learning, see <a class="reference external" href="https://arxiv.org/abs/2111.04276">Deep Marching Tetrahedra: a Hybrid Representation for High-Resolution 3D Shape Synthesis</a> NeurIPS 2021.</p> <dl class="field-list simple"> <dt class="field-odd">Parameters</dt> <dd class="field-odd"><ul class="simple"> <li><p><strong>vertices</strong> (<em>torch.tensor</em>) – batched vertices of tetrahedral meshes, of shape <span class="math notranslate nohighlight">\((\text{batch_size}, \text{num_vertices}, 3)\)</span>.</p></li> <li><p><strong>tets</strong> (<em>torch.tensor</em>) – unbatched tetrahedral mesh topology, of shape <span class="math notranslate nohighlight">\((\text{num_tetrahedrons}, 4)\)</span>.</p></li> <li><p><strong>sdf</strong> (<em>torch.tensor</em>) – batched SDFs which specify the SDF value of each vertex, of shape <span class="math notranslate nohighlight">\((\text{batch_size}, \text{num_vertices})\)</span>.</p></li> <li><p><strong>return_tet_idx</strong> (<em>optional</em><em>, </em><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.13)"><em>bool</em></a>) – if True, return index of tetrahedron where each face is extracted. Default: False.</p></li> </ul> </dd> <dt class="field-even">Returns</dt> <dd class="field-even"><p><ul class="simple"> <li><p>the list of vertices for mesh converted from each tetrahedral grid.</p></li> <li><p>the list of faces for mesh converted from each tetrahedral grid.</p></li> <li><p>the list of indices that correspond to tetrahedra where faces are extracted.</p></li> </ul> </p> </dd> <dt class="field-odd">Return type</dt> <dd class="field-odd"><p>(<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#list" title="(in Python v3.13)">list</a>[<a class="reference external" href="https://pytorch.org/docs/main/tensors.html#torch.Tensor" title="(in PyTorch vmain (2.7.0a0+git84ba9c6 ))">torch.Tensor</a>], <a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#list" title="(in Python v3.13)">list</a>[torch.LongTensor], (optional) <a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#list" title="(in Python v3.13)">list</a>[torch.LongTensor])</p> </dd> </dl> <p class="rubric">Example</p> <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">vertices</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">tensor</span><span class="p">([[[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="gp">... </span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="gp">... </span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="gp">... </span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]]],</span> <span class="n">dtype</span><span class="o">=</span><span class="n">torch</span><span class="o">.</span><span class="n">float</span><span class="p">)</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">tets</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">tensor</span><span class="p">([[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]],</span> <span class="n">dtype</span><span class="o">=</span><span class="n">torch</span><span class="o">.</span><span class="n">long</span><span class="p">)</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">sdf</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">tensor</span><span class="p">([[</span><span class="o">-</span><span class="mf">1.</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">]],</span> <span class="n">dtype</span><span class="o">=</span><span class="n">torch</span><span class="o">.</span><span class="n">float</span><span class="p">)</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">verts_list</span><span class="p">,</span> <span class="n">faces_list</span><span class="p">,</span> <span class="n">tet_idx_list</span> <span class="o">=</span> <span class="n">marching_tetrahedra</span><span class="p">(</span><span class="n">vertices</span><span class="p">,</span> <span class="n">tets</span><span class="p">,</span> <span class="n">sdf</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">verts_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="go">tensor([[0.0000, 0.6667, 0.0000],</span> <span class="go"> [0.0000, 0.0000, 0.6667],</span> <span class="go"> [0.3333, 0.6667, 0.0000],</span> <span class="go"> [0.3333, 0.0000, 0.6667]])</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">faces_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="go">tensor([[3, 0, 1],</span> <span class="go"> [3, 2, 0]])</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">tet_idx_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="go">tensor([0, 0])</span> </pre></div> </div> </dd></dl> <dl class="py function"> <dt class="sig sig-object py" id="kaolin.ops.conversions.pointclouds_to_voxelgrids"> <span class="sig-prename descclassname"><span class="pre">kaolin.ops.conversions.</span></span><span class="sig-name descname"><span class="pre">pointclouds_to_voxelgrids</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">pointclouds</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">resolution</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">origin</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">scale</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_sparse</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#kaolin.ops.conversions.pointclouds_to_voxelgrids" title="Permalink to this definition">¶</a></dt> <dd><p>Converts pointclouds to voxelgrids. It separates the 3D space into empty voxelgrid, and for each boxes, if there is a corresponding point, set that voxelgrid to be occupied.</p> <p>Will convert only points in the range <cite>[0, 1]</cite> after been shifted and scaled as following <code class="docutils literal notranslate"><span class="pre">(pointclouds</span> <span class="pre">-</span> <span class="pre">origin)</span> <span class="pre">*</span> <span class="pre">scale</span></code>.</p> <dl class="field-list simple"> <dt class="field-odd">Parameters</dt> <dd class="field-odd"><ul class="simple"> <li><p><strong>pointclouds</strong> (<a class="reference external" href="https://pytorch.org/docs/main/tensors.html#torch.Tensor" title="(in PyTorch vmain (2.7.0a0+git84ba9c6 ))"><em>torch.Tensor</em></a>) – Exact batched pointclouds, of shape <span class="math notranslate nohighlight">\((\text{batch_size}, \text{num_points}, 3)\)</span>.</p></li> <li><p><strong>resolution</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.13)"><em>int</em></a>) – Resolution of output voxelgrids.</p></li> <li><p><strong>origin</strong> (<em>optional</em><em>, </em><a class="reference external" href="https://pytorch.org/docs/main/tensors.html#torch.Tensor" title="(in PyTorch vmain (2.7.0a0+git84ba9c6 ))"><em>torch.Tensor</em></a>) – Origin of the voxelgrid in the pointcloud coordinates, of shape <span class="math notranslate nohighlight">\((\text{batch_size}, 3)\)</span>. Default: <code class="docutils literal notranslate"><span class="pre">torch.min(pointcloud,</span> <span class="pre">dim=1)[0]</span></code>.</p></li> <li><p><strong>scale</strong> (<em>optional</em><em>, </em><a class="reference external" href="https://pytorch.org/docs/main/tensors.html#torch.Tensor" title="(in PyTorch vmain (2.7.0a0+git84ba9c6 ))"><em>torch.Tensor</em></a>) – Scale by which we divide the pointclouds’ coordinates, of shape <span class="math notranslate nohighlight">\((\text{batch_size})\)</span>. Default: <code class="docutils literal notranslate"><span class="pre">torch.max(torch.max(pointclouds,</span> <span class="pre">dim=1)[0]</span> <span class="pre">-</span> <span class="pre">origin,</span> <span class="pre">dim=1)[0]</span></code>.</p></li> <li><p><strong>return_sparse</strong> (<em>optional</em><em>, </em><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.13)"><em>bool</em></a>) – Whether to return a sparse voxelgrids or not. Default: False.</p></li> </ul> </dd> <dt class="field-even">Returns</dt> <dd class="field-even"><p>Exact batched voxelgrids, of shape <span class="math notranslate nohighlight">\((\text{batch_size}, \text{resolution}, \text{resolution}, \text{resolution})\)</span>. If return_sparse is <code class="docutils literal notranslate"><span class="pre">True</span></code>, a sparse FloatTensor is returned.</p> </dd> <dt class="field-odd">Return type</dt> <dd class="field-odd"><p>(<a class="reference external" href="https://pytorch.org/docs/main/tensors.html#torch.Tensor" title="(in PyTorch vmain (2.7.0a0+git84ba9c6 ))">torch.Tensor</a> or torch.FloatTensor)</p> </dd> </dl> <p class="rubric">Example</p> <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">pointclouds</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">tensor</span><span class="p">([[[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="gp">... </span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="gp">... </span> <span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">]]],</span> <span class="n">dtype</span><span class="o">=</span><span class="n">torch</span><span class="o">.</span><span class="n">float</span><span class="p">)</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">pointclouds_to_voxelgrids</span><span class="p">(</span><span class="n">pointclouds</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="go">tensor([[[[1., 0., 0.],</span> <span class="go"> [0., 0., 0.],</span> <span class="go"> [0., 0., 0.]],</span> <span class="go"> [[0., 0., 0.],</span> <span class="go"> [0., 1., 0.],</span> <span class="go"> [0., 0., 0.]],</span> <span class="go"> [[0., 0., 0.],</span> <span class="go"> [0., 0., 0.],</span> <span class="go"> [0., 0., 1.]]]])</span> </pre></div> </div> </dd></dl> <dl class="py function"> <dt class="sig sig-object py" id="kaolin.ops.conversions.sdf_to_voxelgrids"> <span class="sig-prename descclassname"><span class="pre">kaolin.ops.conversions.</span></span><span class="sig-name descname"><span class="pre">sdf_to_voxelgrids</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sdf</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bbox_center</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bbox_dim</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1.0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">init_res</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">32</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">upsampling_steps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#kaolin.ops.conversions.sdf_to_voxelgrids" title="Permalink to this definition">¶</a></dt> <dd><p>Converts SDFs to voxelgrids.</p> <p>For each SDF returns a voxel grid with resolution <span class="math notranslate nohighlight">\(init\_res * 2 ^ {upsampling\_steps} + 1\)</span> (so the underlying voxel resolution is <span class="math notranslate nohighlight">\(init\_res * 2 ^ {upsampling\_steps}\)</span>) where each grid point holds a binary value determined by the sign of the SDF at the location of the grid point after normalizing the voxel grid to the bounding box defined by bbox_center and bbox_dim.</p> <p>This solution is largely borrowed from “Multiresolution IsoSurface Extraction (MISE)” proposed in the CVPR 2019 paper “Occupancy Networks: Learning 3D Reconstruction in Function Space”: <a class="reference external" href="https://arxiv.org/abs/1906.02739">https://arxiv.org/abs/1906.02739</a>. Instead of evaluating SDF values of all grid points at high resolution, this function incrementally builds an octree and only evaluate dense grid points around the surface.</p> <dl class="field-list simple"> <dt class="field-odd">Parameters</dt> <dd class="field-odd"><ul class="simple"> <li><p><strong>sdf</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#list" title="(in Python v3.13)"><em>list</em></a><em>[</em><em>callable</em><em>]</em>) – A list of callable that takes 3D coordinates as a <a class="reference external" href="https://pytorch.org/docs/main/tensors.html#torch.Tensor" title="(in PyTorch vmain (2.7.0a0+git84ba9c6 ))"><code class="xref py py-class docutils literal notranslate"><span class="pre">torch.Tensor</span></code></a>, of shape <span class="math notranslate nohighlight">\((\text{num_points}, 3)\)</span> and output the N corresponding SDF values as a <a class="reference external" href="https://pytorch.org/docs/main/tensors.html#torch.Tensor" title="(in PyTorch vmain (2.7.0a0+git84ba9c6 ))"><code class="xref py py-class docutils literal notranslate"><span class="pre">torch.Tensor</span></code></a>, of shape <span class="math notranslate nohighlight">\((\text{num_points})\)</span>.</p></li> <li><p><strong>bbox_center</strong> (<em>optional</em><em>, </em><a class="reference external" href="https://docs.python.org/3/library/functions.html#float" title="(in Python v3.13)"><em>float</em></a>) – Center of the surface’s bounding box. Default: 0.</p></li> <li><p><strong>bbox_dim</strong> (<em>optional</em><em>, </em><a class="reference external" href="https://docs.python.org/3/library/functions.html#float" title="(in Python v3.13)"><em>float</em></a>) – Largest dimension of the surface’s bounding box. Default: 1.</p></li> <li><p><strong>init_res</strong> (<em>optional</em><em>, </em><a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.13)"><em>int</em></a>) – The initial resolution of the voxelgrids, should be large enough to properly define the surface. Default: 32.</p></li> <li><p><strong>upsampling_steps</strong> (<em>optional</em><em>, </em><a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.13)"><em>int</em></a>) – Number of times the initial resolution will be doubled. Default: 0.</p></li> </ul> </dd> <dt class="field-even">Returns</dt> <dd class="field-even"><p>Binary voxelgrids, of shape <span class="math notranslate nohighlight">\((\text{batch_size}, \text{init_res} * 2 ^ \text{upsampling_steps} + 1)\)</span>.</p> </dd> <dt class="field-odd">Return type</dt> <dd class="field-odd"><p>(<a class="reference external" href="https://pytorch.org/docs/main/tensors.html#torch.Tensor" title="(in PyTorch vmain (2.7.0a0+git84ba9c6 ))">torch.Tensor</a>)</p> </dd> </dl> <p class="rubric">Example</p> <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span><span class="w"> </span><span class="nf">sphere</span><span class="p">(</span><span class="n">points</span><span class="p">):</span> <span class="gp">... </span> <span class="k">return</span> <span class="n">torch</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">points</span> <span class="o">**</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="o">**</span> <span class="mf">0.5</span> <span class="o">-</span> <span class="mf">0.5</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">sdf_to_voxelgrids</span><span class="p">([</span><span class="n">sphere</span><span class="p">],</span> <span class="n">init_res</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span> <span class="go">tensor([[[[0., 0., 0., 0., 0.],</span> <span class="go"> [0., 0., 0., 0., 0.],</span> <span class="go"> [0., 0., 1., 0., 0.],</span> <span class="go"> [0., 0., 0., 0., 0.],</span> <span class="go"> [0., 0., 0., 0., 0.]],</span> <span class="go"> [[0., 0., 0., 0., 0.],</span> <span class="go"> [0., 1., 1., 1., 0.],</span> <span class="go"> [0., 1., 1., 1., 0.],</span> <span class="go"> [0., 1., 1., 1., 0.],</span> <span class="go"> [0., 0., 0., 0., 0.]],</span> <span class="go"> [[0., 0., 1., 0., 0.],</span> <span class="go"> [0., 1., 1., 1., 0.],</span> <span class="go"> [1., 1., 1., 1., 1.],</span> <span class="go"> [0., 1., 1., 1., 0.],</span> <span class="go"> [0., 0., 1., 0., 0.]],</span> <span class="go"> [[0., 0., 0., 0., 0.],</span> <span class="go"> [0., 1., 1., 1., 0.],</span> <span class="go"> [0., 1., 1., 1., 0.],</span> <span class="go"> [0., 1., 1., 1., 0.],</span> <span class="go"> [0., 0., 0., 0., 0.]],</span> <span class="go"> [[0., 0., 0., 0., 0.],</span> <span class="go"> [0., 0., 0., 0., 0.],</span> <span class="go"> [0., 0., 1., 0., 0.],</span> <span class="go"> [0., 0., 0., 0., 0.],</span> <span class="go"> [0., 0., 0., 0., 0.]]]])</span> </pre></div> </div> </dd></dl> <dl class="py function"> <dt class="sig sig-object py" id="kaolin.ops.conversions.trianglemeshes_to_voxelgrids"> <span class="sig-prename descclassname"><span class="pre">kaolin.ops.conversions.</span></span><span class="sig-name descname"><span class="pre">trianglemeshes_to_voxelgrids</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">vertices</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">faces</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">resolution</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">origin</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">scale</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_sparse</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#kaolin.ops.conversions.trianglemeshes_to_voxelgrids" title="Permalink to this definition">¶</a></dt> <dd><p>Converts meshes to surface voxelgrids of a given resolution. It first upsamples triangle mesh’s vertices to given resolution, then it performs a box test. If a voxel contains a triangle vertex, set that voxel to 1. Vertex will be offset and scaled as following: <span class="math notranslate nohighlight">\(\text{normalized_vertices} = (\text{vertices} - \text{origin}) / \text{scale}\)</span> the voxelgrids will only be generated in the range [0, 1] of normalized_vertices.</p> <dl class="field-list simple"> <dt class="field-odd">Parameters</dt> <dd class="field-odd"><ul class="simple"> <li><p><strong>vertices</strong> (<em>torch.tensor</em>) – Batched vertices of the input meshes, of shape <span class="math notranslate nohighlight">\((\text{batch_size}, \text{num_vertices}, 3)\)</span>.</p></li> <li><p><strong>faces</strong> (<em>torch.tensor</em>) – Unbatched faces of the meshes, of shape <span class="math notranslate nohighlight">\((\text{num_faces}, 3)\)</span>.</p></li> <li><p><strong>resolution</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.13)"><em>int</em></a>) – desired resolution of generated voxelgrid.</p></li> <li><p><strong>origin</strong> (<em>torch.tensor</em>) – Origin of the voxelgrid in the mesh coordinates, of shape <span class="math notranslate nohighlight">\((\text{batch_size}, 3)\)</span>. Default: <code class="docutils literal notranslate"><span class="pre">torch.min(vertices,</span> <span class="pre">dim=1)[0]</span></code>.</p></li> <li><p><strong>scale</strong> (<em>torch.tensor</em>) – The scale by which we divide the vertex position, of shape <span class="math notranslate nohighlight">\((\text{batch_size})\)</span>. Default: <code class="docutils literal notranslate"><span class="pre">torch.max(torch.max(vertices,</span> <span class="pre">dim=1)[0]</span> <span class="pre">-</span> <span class="pre">origin,</span> <span class="pre">dim=1)[0]</span></code>.</p></li> <li><p><strong>return_sparse</strong> (<em>optional</em><em>, </em><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.13)"><em>bool</em></a>) – If True, sparse tensor is returned. Default: False.</p></li> </ul> </dd> <dt class="field-even">Returns</dt> <dd class="field-even"><p>Binary batched voxelgrids, of shape <span class="math notranslate nohighlight">\((\text{batch_size}, \text{resolution}, \text{resolution}, \text{resolution})\)</span>. If return_sparse is True, sparse tensor is returned.</p> </dd> <dt class="field-odd">Return type</dt> <dd class="field-odd"><p>(<a class="reference external" href="https://pytorch.org/docs/main/tensors.html#torch.Tensor" title="(in PyTorch vmain (2.7.0a0+git84ba9c6 ))">torch.Tensor</a> or torch.FloatTensor)</p> </dd> </dl> <p class="rubric">Example</p> <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">vertices</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">tensor</span><span class="p">([[[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="gp">... </span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="gp">... </span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]]],</span> <span class="n">dtype</span><span class="o">=</span><span class="n">torch</span><span class="o">.</span><span class="n">float</span><span class="p">)</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">faces</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">tensor</span><span class="p">([[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">]],</span> <span class="n">dtype</span><span class="o">=</span><span class="n">torch</span><span class="o">.</span><span class="n">long</span><span class="p">)</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">origin</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">))</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">scale</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">ones</span><span class="p">((</span><span class="mi">1</span><span class="p">))</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">trianglemeshes_to_voxelgrids</span><span class="p">(</span><span class="n">vertices</span><span class="p">,</span> <span class="n">faces</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="n">origin</span><span class="p">,</span> <span class="n">scale</span><span class="p">)</span> <span class="go">tensor([[[[1., 1., 1.],</span> <span class="go"> [0., 0., 0.],</span> <span class="go"> [0., 0., 0.]],</span> <span class="go"> [[1., 1., 0.],</span> <span class="go"> [0., 0., 0.],</span> <span class="go"> [0., 0., 0.]],</span> <span class="go"> [[1., 0., 0.],</span> <span class="go"> [0., 0., 0.],</span> <span class="go"> [0., 0., 0.]]]])</span> </pre></div> </div> </dd></dl> <dl class="py function"> <dt class="sig sig-object py" id="kaolin.ops.conversions.unbatched_mesh_to_spc"> <span class="sig-prename descclassname"><span class="pre">kaolin.ops.conversions.</span></span><span class="sig-name descname"><span class="pre">unbatched_mesh_to_spc</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">face_vertices</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">level</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#kaolin.ops.conversions.unbatched_mesh_to_spc" title="Permalink to this definition">¶</a></dt> <dd><p>Convert a mesh into a <a class="reference internal" href="../notes/spc_summary.html#spc-octree"><span class="std std-ref">Structured Point Cloud octree</span></a>.</p> <p>The conversion is using a conservative rasterization process, the resulting octree is fully wrapping the mesh.</p> <div class="admonition note"> <p class="admonition-title">Note</p> <p>The mesh will be voxelized in the range <span class="math notranslate nohighlight">\([-1, 1]\)</span> of the vertices coordinate system.</p> </div> <dl class="field-list simple"> <dt class="field-odd">Parameters</dt> <dd class="field-odd"><ul class="simple"> <li><p><strong>face_vertices</strong> (<em>torch.LongTensor</em>) – The vertices indexed by faces (see <a class="reference internal" href="kaolin.ops.mesh.html#kaolin.ops.mesh.index_vertices_by_faces" title="kaolin.ops.mesh.index_vertices_by_faces"><code class="xref py py-func docutils literal notranslate"><span class="pre">kaolin.ops.mesh.index_vertices_by_faces()</span></code></a>), of shape <span class="math notranslate nohighlight">\((\text{num_faces}, 3, 3)\)</span>.</p></li> <li><p><strong>level</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.13)"><em>int</em></a>) – number of levels in the returned SPC.</p></li> </ul> </dd> <dt class="field-even">Returns</dt> <dd class="field-even"><p><ul class="simple"> <li><p>The generated octree, of size <span class="math notranslate nohighlight">\((\text{num_nodes})\)</span>, where <span class="math notranslate nohighlight">\(\text{num_nodes}\)</span> depends on the geometry of the input mesh.</p></li> <li><p>The indices of the face corresponding to each voxel at the highest level, of shape <span class="math notranslate nohighlight">\((\text{num_voxels})\)</span>.</p></li> <li><p>The barycentric coordinates of the voxel with respect to corresponding face of shape <span class="math notranslate nohighlight">\((\text{num_vertices}, 2)\)</span>.</p></li> </ul> </p> </dd> <dt class="field-odd">Return type</dt> <dd class="field-odd"><p>(torch.ByteTensor, torch.LongTensor, torch.FloatTensor)</p> </dd> </dl> </dd></dl> <dl class="py function"> <dt class="sig sig-object py" id="kaolin.ops.conversions.unbatched_pointcloud_to_spc"> <span class="sig-prename descclassname"><span class="pre">kaolin.ops.conversions.</span></span><span class="sig-name descname"><span class="pre">unbatched_pointcloud_to_spc</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">pointcloud</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">level</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">features</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#kaolin.ops.conversions.unbatched_pointcloud_to_spc" title="Permalink to this definition">¶</a></dt> <dd><p>This function takes as input a single point-cloud - a set of continuous coordinates in 3D, and coverts it into a <a class="reference internal" href="../notes/spc_summary.html#spc"><span class="std std-ref">Structured Point Cloud (SPC)</span></a>, a compressed octree representation where the point cloud coordinates are quantized to integer coordinates.</p> <p>Point coordinates are expected to be normalized to the range <span class="math notranslate nohighlight">\([-1, 1]\)</span>. If a point is out of the range <span class="math notranslate nohighlight">\([-1, 1]\)</span> it will be clipped to it.</p> <p>If <code class="docutils literal notranslate"><span class="pre">features</span></code> are specified, the current implementation will average features of points that inhabit the same quantized bucket.</p> <dl class="field-list simple"> <dt class="field-odd">Parameters</dt> <dd class="field-odd"><ul class="simple"> <li><p><strong>pointclouds</strong> (<a class="reference external" href="https://pytorch.org/docs/main/tensors.html#torch.Tensor" title="(in PyTorch vmain (2.7.0a0+git84ba9c6 ))"><em>torch.Tensor</em></a>) – An unbatched pointcloud, of shape <span class="math notranslate nohighlight">\((\text{num_points}, 3)\)</span>. Coordinates are expected to be normalized to the range <span class="math notranslate nohighlight">\([-1, 1]\)</span>.</p></li> <li><p><strong>level</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.13)"><em>int</em></a>) – Maximum number of levels to use in octree hierarchy.</p></li> <li><p><strong>features</strong> (<em>optional</em><em>, </em><a class="reference external" href="https://pytorch.org/docs/main/tensors.html#torch.Tensor" title="(in PyTorch vmain (2.7.0a0+git84ba9c6 ))"><em>torch.Tensor</em></a>) – Feature vector containing information per point, of shape <span class="math notranslate nohighlight">\((\text{num_points}, \text{feat_dim})\)</span>.</p></li> </ul> </dd> <dt class="field-even">Returns</dt> <dd class="field-even"><p>A Structured Point Cloud (SPC) object, holding a single-item batch.</p> </dd> <dt class="field-odd">Return type</dt> <dd class="field-odd"><p>(<a class="reference internal" href="kaolin.rep.spc.html#kaolin.rep.Spc" title="kaolin.rep.Spc">kaolin.rep.Spc</a>)</p> </dd> </dl> </dd></dl> <dl class="py function"> <dt class="sig sig-object py" id="kaolin.ops.conversions.voxelgrids_to_cubic_meshes"> <span class="sig-prename descclassname"><span class="pre">kaolin.ops.conversions.</span></span><span class="sig-name descname"><span class="pre">voxelgrids_to_cubic_meshes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">voxelgrids</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">is_trimesh</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#kaolin.ops.conversions.voxelgrids_to_cubic_meshes" title="Permalink to this definition">¶</a></dt> <dd><p>Convert voxelgrids to meshes by replacing each occupied voxel with a cuboid mesh (unit cube). Each cube has 8 vertices and 6 (for quadmesh) or 12 faces (for triangular mesh). Internal faces are ignored. If <cite>is_trimesh==True</cite>, this function performs the same operation as “Cubify” defined in the ICCV 2019 paper “Mesh R-CNN”: <a class="reference external" href="https://arxiv.org/abs/1906.02739">https://arxiv.org/abs/1906.02739</a>.</p> <dl class="field-list simple"> <dt class="field-odd">Parameters</dt> <dd class="field-odd"><ul class="simple"> <li><p><strong>voxelgrids</strong> (<a class="reference external" href="https://pytorch.org/docs/main/tensors.html#torch.Tensor" title="(in PyTorch vmain (2.7.0a0+git84ba9c6 ))"><em>torch.Tensor</em></a>) – binary voxel array, of shape <span class="math notranslate nohighlight">\((\text{batch_size}, \text{X}, \text{Y}, \text{Z})\)</span>.</p></li> <li><p><strong>is_trimesh</strong> (<em>optional</em><em>, </em><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.13)"><em>bool</em></a>) – if True, the outputs are triangular meshes. Otherwise quadmeshes are returned. Default: True.</p></li> </ul> </dd> <dt class="field-even">Returns</dt> <dd class="field-even"><p><ul class="simple"> <li><p>The list of vertices for each mesh.</p></li> <li><p>The list of faces for each mesh.</p></li> </ul> </p> </dd> <dt class="field-odd">Return type</dt> <dd class="field-odd"><p>(<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#list" title="(in Python v3.13)">list</a>[<a class="reference external" href="https://pytorch.org/docs/main/tensors.html#torch.Tensor" title="(in PyTorch vmain (2.7.0a0+git84ba9c6 ))">torch.Tensor</a>], <a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#list" title="(in Python v3.13)">list</a>[torch.LongTensor])</p> </dd> </dl> <p class="rubric">Example</p> <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">voxelgrids</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">ones</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">verts</span><span class="p">,</span> <span class="n">faces</span> <span class="o">=</span> <span class="n">voxelgrids_to_cubic_meshes</span><span class="p">(</span><span class="n">voxelgrids</span><span class="p">)</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">verts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="go">tensor([[0., 0., 0.],</span> <span class="go"> [0., 0., 1.],</span> <span class="go"> [0., 1., 0.],</span> <span class="go"> [0., 1., 1.],</span> <span class="go"> [1., 0., 0.],</span> <span class="go"> [1., 0., 1.],</span> <span class="go"> [1., 1., 0.],</span> <span class="go"> [1., 1., 1.]])</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">faces</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="go">tensor([[0, 1, 2],</span> <span class="go"> [5, 4, 7],</span> <span class="go"> [0, 4, 1],</span> <span class="go"> [6, 2, 7],</span> <span class="go"> [0, 2, 4],</span> <span class="go"> [3, 1, 7],</span> <span class="go"> [3, 2, 1],</span> <span class="go"> [6, 7, 4],</span> <span class="go"> [5, 1, 4],</span> <span class="go"> [3, 7, 2],</span> <span class="go"> [6, 4, 2],</span> <span class="go"> [5, 7, 1]])</span> </pre></div> </div> </dd></dl> <dl class="py function"> <dt class="sig sig-object py" id="kaolin.ops.conversions.voxelgrids_to_trianglemeshes"> <span class="sig-prename descclassname"><span class="pre">kaolin.ops.conversions.</span></span><span class="sig-name descname"><span class="pre">voxelgrids_to_trianglemeshes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">voxelgrids</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">iso_value</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.5</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#kaolin.ops.conversions.voxelgrids_to_trianglemeshes" title="Permalink to this definition">¶</a></dt> <dd><p>Converts voxelgrids to triangle meshes using marching cube algorithm. Please refer to: <em>Lorensen, William E.; Cline, Harvey E.</em> in <a class="reference external" href="https://www.researchgate.net/publication/202232897_Marching_Cubes_A_High_Resolution_3D_Surface_Construction_Algorithm">Marching cubes, A high resolution 3D surface construction algorithm</a></p> <dl class="field-list simple"> <dt class="field-odd">Parameters</dt> <dd class="field-odd"><ul class="simple"> <li><p><strong>voxelgrids</strong> (<a class="reference external" href="https://pytorch.org/docs/main/tensors.html#torch.Tensor" title="(in PyTorch vmain (2.7.0a0+git84ba9c6 ))"><em>torch.Tensor</em></a>) – Exact batched voxel array with shape <span class="math notranslate nohighlight">\((\text{batch_size}, \text{X}, \text{Y}, \text{Z})\)</span>.</p></li> <li><p><strong>iso_value</strong> (<em>optional</em><em>, </em><a class="reference external" href="https://docs.python.org/3/library/functions.html#float" title="(in Python v3.13)"><em>float</em></a>) – Value in the range <span class="math notranslate nohighlight">\([0, 1]\)</span> used to determine whether a voxel is inside the surface or not. Isovalue is also used to interpolate newly created triangle vertices. Defaults to 0.5</p></li> </ul> </dd> <dt class="field-even">Returns</dt> <dd class="field-even"><p><ul class="simple"> <li><p>The list of vertices of each mesh.</p></li> <li><p>The list of faces of each mesh.</p></li> </ul> </p> </dd> <dt class="field-odd">Return type</dt> <dd class="field-odd"><p>(<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#list" title="(in Python v3.13)">list</a>[torch.FloatTensor], <a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#list" title="(in Python v3.13)">list</a>[torch.LongTensor])</p> </dd> </dl> <p class="rubric">Example</p> <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">voxelgrid</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">tensor</span><span class="p">([[[[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="gp">... </span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]],</span> <span class="gp">... </span> <span class="p">[[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="gp">... </span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]]]],</span> <span class="n">device</span><span class="o">=</span><span class="s1">&#39;cuda&#39;</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">torch</span><span class="o">.</span><span class="n">uint8</span><span class="p">)</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">vertices</span><span class="p">,</span> <span class="n">faces</span> <span class="o">=</span> <span class="n">voxelgrids_to_trianglemeshes</span><span class="p">(</span><span class="n">voxelgrid</span><span class="p">)</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">vertices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="go">tensor([[1.0000, 1.0000, 0.5000],</span> <span class="go"> [1.0000, 0.5000, 1.0000],</span> <span class="go"> [0.5000, 1.0000, 1.0000],</span> <span class="go"> [1.0000, 1.0000, 1.5000],</span> <span class="go"> [1.0000, 1.5000, 1.0000],</span> <span class="go"> [1.5000, 1.0000, 1.0000]], device=&#39;cuda:0&#39;)</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">faces</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="go">tensor([[0, 1, 2],</span> <span class="go"> [3, 2, 1],</span> <span class="go"> [4, 0, 2],</span> <span class="go"> [4, 2, 3],</span> <span class="go"> [0, 5, 1],</span> <span class="go"> [5, 3, 1],</span> <span class="go"> [4, 5, 0],</span> <span class="go"> [5, 4, 3]], device=&#39;cuda:0&#39;)</span> </pre></div> </div> </dd></dl> </section> </section> </div> </div> <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> <a href="kaolin.ops.coords.html" class="btn btn-neutral float-left" title="kaolin.ops.coords" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> <a href="kaolin.ops.pointcloud.html" class="btn btn-neutral float-right" title="kaolin.ops.pointcloud" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> </div> <hr/> <div role="contentinfo"> <p>&#169; Copyright 2024, NVIDIA.</p> </div> Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. </footer> </div> </div> </section> </div> <script> jQuery(function () { SphinxRtdTheme.Navigation.enable(true); }); </script> <style> :root { --nvidia-color: #76B900; --dark-green: #008564; } a, a:visited, a:active { color: var(--nvidia-color); } /* Sidebar header (and topbar for mobile) */ .wy-side-nav-search, .wy-nav-top { background-color: var(--nvidia-color); } /* Sidebar */ .wy-menu-vertical header, .wy-menu-vertical p.caption { color: #DFDFDF; } .rst-content .note, .rst-content .seealso, .rst-content .wy-alert-info.admonition, .rst-content .wy-alert-info.admonition-todo, .rst-content .wy-alert-info.attention, .rst-content .wy-alert-info.caution, .rst-content .wy-alert-info.danger, .rst-content .wy-alert-info.error, .rst-content .wy-alert-info.hint, .rst-content .wy-alert-info.important, .rst-content .wy-alert-info.tip, .rst-content .wy-alert-info.warning, .wy-alert.wy-alert-info { background: #eaefe0; } .rst-content .note .admonition-title, .rst-content .note .wy-alert-title, .rst-content .seealso .admonition-title, .rst-content .seealso .wy-alert-title, .rst-content .wy-alert-info.admonition-todo .admonition-title, .rst-content .wy-alert-info.admonition-todo .wy-alert-title, .rst-content .wy-alert-info.admonition .admonition-title, .rst-content .wy-alert-info.admonition .wy-alert-title, .rst-content .wy-alert-info.attention .admonition-title, .rst-content .wy-alert-info.attention .wy-alert-title, .rst-content .wy-alert-info.caution .admonition-title, .rst-content .wy-alert-info.caution .wy-alert-title, .rst-content .wy-alert-info.danger .admonition-title, .rst-content .wy-alert-info.danger .wy-alert-title, .rst-content .wy-alert-info.error .admonition-title, .rst-content .wy-alert-info.error .wy-alert-title, .rst-content .wy-alert-info.hint .admonition-title, .rst-content .wy-alert-info.hint .wy-alert-title, .rst-content .wy-alert-info.important .admonition-title, .rst-content .wy-alert-info.important .wy-alert-title, .rst-content .wy-alert-info.tip .admonition-title, .rst-content .wy-alert-info.tip .wy-alert-title, .rst-content .wy-alert-info.warning .admonition-title, .rst-content .wy-alert-info.warning .wy-alert-title, .rst-content .wy-alert.wy-alert-info .admonition-title, .wy-alert.wy-alert-info .rst-content .admonition-title, .wy-alert.wy-alert-info .wy-alert-title { background: #b8d27c; } html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt, html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list):not(.simple)>dt.sig { background-color: #eaefe0; border-left: 3px solid var(--nvidia-color); } html.writer-html4 .rst-content dl:not(.docutils)>dt, html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt.sig { background: #eaefe0; border-top: 3px solid var(--nvidia-color); } html.writer-html4 .rst-content dl:not(.docutils)>dt, html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt { color: var(--dark-green); } .icon, .version, a.icon.icon-home { color: white; } table.center-align-center-col td { text-align: center } .rubric, p.rubric { margin-bottom: 15px; font-weight: 700; font-size: 120%; color: var(--dark-green); border-bottom: 1px solid var(--dark-green); } </style> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10