<div dir="ltr">Here's the Claude intro to the MuJoCo <flexcomp>  element:  If someone knows what an MJCF element is, cool.<div><br></div><div>John<br><div><br></div><div><p class="gmail-font-claude-response-body gmail-break-words gmail-whitespace-normal">Based on my research, I can provide you with a comprehensive summary of the MuJoCo <code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">flexcomp</code> element and its children.</p>
<h2 class="gmail-font-claude-response-heading gmail-text-text-100 gmail-mt-1 gmail--mb-0.5">MuJoCo <code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">flexcomp</code> Element Summary</h2>
<p class="gmail-font-claude-response-body gmail-break-words gmail-whitespace-normal"><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">flexcomp</code> is a meta-element in MuJoCo's MJCF format that procedurally generates deformable objects <span class="gmail-inline-flex"><a href="https://mujoco.readthedocs.io/en/stable/XMLreference.html" target="_blank" class="gmail-group/tag gmail-relative gmail-h-[18px] gmail-rounded-full gmail-inline-flex gmail-items-center gmail-overflow-hidden gmail--translate-y-px gmail-cursor-pointer"><span class="gmail-relative gmail-transition-colors gmail-h-full gmail-max-w-[180px] gmail-overflow-hidden gmail-px-1.5 gmail-inline-flex gmail-items-center gmail-font-small gmail-rounded-full gmail-border-0.5 gmail-border-border-300 gmail-bg-bg-200 gmail-group-hover/tag:bg-accent-secondary-900 gmail-group-hover/tag:border-accent-secondary-100/60"><span class="gmail-text-nowrap gmail-text-text-300 gmail-break-all gmail-truncate gmail-font-normal gmail-group-hover/tag:text-text-200">Readthedocs</span></span><span class="gmail-transition-all gmail-opacity-[0%] gmail-h-[17px] gmail-absolute gmail-right-[0.5px] gmail-inline gmail-rounded-r-full gmail-flex gmail-items-center gmail-px-1.5 gmail-bg-gradient-to-r gmail-from-accent-secondary-900/0 gmail-via-accent-secondary-900/100 gmail-via-30% gmail-to-accent-secondary-900/100 gmail-group-hover/tag:opacity-[100%]"></span></a></span>. It was introduced in MuJoCo 3.0 as a convenience macro for creating deformable objects, similar to how <code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">composite</code> works for rigid structures <span class="gmail-inline-flex"><a href="https://mujoco.readthedocs.io/en/3.1.0/changelog.html" target="_blank" class="gmail-group/tag gmail-relative gmail-h-[18px] gmail-rounded-full gmail-inline-flex gmail-items-center gmail-overflow-hidden gmail--translate-y-px gmail-cursor-pointer"><span class="gmail-relative gmail-transition-colors gmail-h-full gmail-max-w-[180px] gmail-overflow-hidden gmail-px-1.5 gmail-inline-flex gmail-items-center gmail-font-small gmail-rounded-full gmail-border-0.5 gmail-border-border-300 gmail-bg-bg-200 gmail-group-hover/tag:bg-accent-secondary-900 gmail-group-hover/tag:border-accent-secondary-100/60"><span class="gmail-text-nowrap gmail-text-text-300 gmail-break-all gmail-truncate gmail-font-normal gmail-group-hover/tag:text-text-200">Readthedocs</span></span><span class="gmail-transition-all gmail-opacity-[0%] gmail-h-[17px] gmail-absolute gmail-right-[0.5px] gmail-inline gmail-rounded-r-full gmail-flex gmail-items-center gmail-px-1.5 gmail-bg-gradient-to-r gmail-from-accent-secondary-900/0 gmail-via-accent-secondary-900/100 gmail-via-30% gmail-to-accent-secondary-900/100 gmail-group-hover/tag:opacity-[100%]"></span></a></span>. Like other meta-elements, <code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">flexcomp</code> disappears from the model upon saving the XML and is replaced with the generated low-level MJCF elements <span class="gmail-inline-flex"><a href="https://mujoco.readthedocs.io/en/latest/modeling.html" target="_blank" class="gmail-group/tag gmail-relative gmail-h-[18px] gmail-rounded-full gmail-inline-flex gmail-items-center gmail-overflow-hidden gmail--translate-y-px gmail-cursor-pointer"><span class="gmail-relative gmail-transition-colors gmail-h-full gmail-max-w-[180px] gmail-overflow-hidden gmail-px-1.5 gmail-inline-flex gmail-items-center gmail-font-small gmail-rounded-full gmail-border-0.5 gmail-border-border-300 gmail-bg-bg-200 gmail-group-hover/tag:bg-accent-secondary-900 gmail-group-hover/tag:border-accent-secondary-100/60"><span class="gmail-text-nowrap gmail-text-text-300 gmail-break-all gmail-truncate gmail-font-normal gmail-group-hover/tag:text-text-200">Readthedocs</span></span><span class="gmail-transition-all gmail-opacity-[0%] gmail-h-[17px] gmail-absolute gmail-right-[0.5px] gmail-inline gmail-rounded-r-full gmail-flex gmail-items-center gmail-px-1.5 gmail-bg-gradient-to-r gmail-from-accent-secondary-900/0 gmail-via-accent-secondary-900/100 gmail-via-30% gmail-to-accent-secondary-900/100 gmail-group-hover/tag:opacity-[100%]"></span></a></span>.</p>
<h3 class="gmail-font-claude-response-subheading gmail-text-text-100 gmail-mt-1 gmail--mb-1.5">Purpose</h3>
<p class="gmail-font-claude-response-body gmail-break-words gmail-whitespace-normal"><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">flexcomp</code> is designed to simulate soft objects like cloth, soft bodies, and deformable materials, replacing older composite types that were used for these purposes <span class="gmail-inline-flex"><a href="https://mujoco.readthedocs.io/en/latest/modeling.html" target="_blank" class="gmail-group/tag gmail-relative gmail-h-[18px] gmail-rounded-full gmail-inline-flex gmail-items-center gmail-overflow-hidden gmail--translate-y-px gmail-cursor-pointer"><span class="gmail-relative gmail-transition-colors gmail-h-full gmail-max-w-[180px] gmail-overflow-hidden gmail-px-1.5 gmail-inline-flex gmail-items-center gmail-font-small gmail-rounded-full gmail-border-0.5 gmail-border-border-300 gmail-bg-bg-200 gmail-group-hover/tag:bg-accent-secondary-900 gmail-group-hover/tag:border-accent-secondary-100/60"><span class="gmail-text-nowrap gmail-text-text-300 gmail-break-all gmail-truncate gmail-font-normal gmail-group-hover/tag:text-text-200">Readthedocs</span></span><span class="gmail-transition-all gmail-opacity-[0%] gmail-h-[17px] gmail-absolute gmail-right-[0.5px] gmail-inline gmail-rounded-r-full gmail-flex gmail-items-center gmail-px-1.5 gmail-bg-gradient-to-r gmail-from-accent-secondary-900/0 gmail-via-accent-secondary-900/100 gmail-via-30% gmail-to-accent-secondary-900/100 gmail-group-hover/tag:opacity-[100%]"></span></a></span>.</p>
<h3 class="gmail-font-claude-response-subheading gmail-text-text-100 gmail-mt-1 gmail--mb-1.5">Main Attributes</h3>
<p class="gmail-font-claude-response-body gmail-break-words gmail-whitespace-normal">From the examples in the search results, <code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">flexcomp</code> supports the following key attributes:</p>
<ul class="gmail-[&:not(:last-child)_ul]:pb-1 gmail-[&:not(:last-child)_ol]:pb-1 gmail-list-disc gmail-space-y-2.5 gmail-pl-7">
<li class="gmail-whitespace-normal gmail-break-words"><strong><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">type</code></strong>: Defines the type of deformable object. Common values include:
<ul class="gmail-[&:not(:last-child)_ul]:pb-1 gmail-[&:not(:last-child)_ol]:pb-1 gmail-list-disc gmail-space-y-2.5 gmail-pl-7">
<li class="gmail-whitespace-normal gmail-break-words"><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">"grid"</code> - creates a grid-based structure</li>
<li class="gmail-whitespace-normal gmail-break-words"><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">"gmsh"</code> - imports tetrahedral meshes from GMSH format files</li>
<li class="gmail-whitespace-normal gmail-break-words"><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">"mesh"</code> - uses mesh-based deformation</li>
</ul>
</li>
<li class="gmail-whitespace-normal gmail-break-words"><strong><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">name</code></strong>: Identifier for the flexcomp object</li>
<li class="gmail-whitespace-normal gmail-break-words"><strong><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">count</code></strong>: For grid types, specifies the number of elements in each dimension (e.g., <code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">"10 5 1"</code> for a 2D cloth)</li>
<li class="gmail-whitespace-normal gmail-break-words"><strong><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">spacing</code></strong>: Defines the distance between elements (e.g., <code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">".025 .025 .025"</code>)</li>
<li class="gmail-whitespace-normal gmail-break-words"><strong><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">pos</code></strong>: Position in 3D space</li>
<li class="gmail-whitespace-normal gmail-break-words"><strong><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">radius</code></strong>: Visual radius of the deformable elements</li>
<li class="gmail-whitespace-normal gmail-break-words"><strong><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">rgba</code></strong>: Color and transparency</li>
<li class="gmail-whitespace-normal gmail-break-words"><strong><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">dim</code></strong>: Dimensionality (1, 2, or 3) - 2 for cloth/shells, 3 for solid deformables</li>
<li class="gmail-whitespace-normal gmail-break-words"><strong><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">mass</code></strong>: Total mass of the deformable object</li>
<li class="gmail-whitespace-normal gmail-break-words"><strong><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">file</code></strong>: For <code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">gmsh</code> or <code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">mesh</code> types, specifies the mesh file to load</li>
<li class="gmail-whitespace-normal gmail-break-words"><strong><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">material</code></strong>: References a material asset for appearance</li>
</ul>
<h3 class="gmail-font-claude-response-subheading gmail-text-text-100 gmail-mt-1 gmail--mb-1.5">Child Elements</h3>
<p class="gmail-font-claude-response-body gmail-break-words gmail-whitespace-normal"><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">flexcomp</code> supports several child elements:</p>
<ol class="gmail-[&:not(:last-child)_ul]:pb-1 gmail-[&:not(:last-child)_ol]:pb-1 gmail-list-decimal gmail-space-y-2.5 gmail-pl-7">
<li class="gmail-whitespace-normal gmail-break-words"><strong><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]"><contact></code></strong> - Defines collision properties
<ul class="gmail-[&:not(:last-child)_ul]:pb-1 gmail-[&:not(:last-child)_ol]:pb-1 gmail-list-disc gmail-space-y-2.5 gmail-pl-7">
<li class="gmail-whitespace-normal gmail-break-words"><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">condim</code>: Contact dimensionality (3 or 6)</li>
<li class="gmail-whitespace-normal gmail-break-words"><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">solref</code>: Solver reference parameters</li>
<li class="gmail-whitespace-normal gmail-break-words"><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">solimp</code>: Solver impedance parameters</li>
<li class="gmail-whitespace-normal gmail-break-words"><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">selfcollide</code>: Controls self-collision behavior</li>
<li class="gmail-whitespace-normal gmail-break-words"><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">friction</code>: Friction coefficients</li>
</ul>
</li>
<li class="gmail-whitespace-normal gmail-break-words"><strong><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]"><edge></code></strong> - Controls edge behavior
<ul class="gmail-[&:not(:last-child)_ul]:pb-1 gmail-[&:not(:last-child)_ol]:pb-1 gmail-list-disc gmail-space-y-2.5 gmail-pl-7">
<li class="gmail-whitespace-normal gmail-break-words"><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">equality</code>: Whether edges act as equality constraints (typically <code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">"true"</code>)</li>
<li class="gmail-whitespace-normal gmail-break-words"><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">damping</code>: Damping coefficient for edges</li>
</ul>
</li>
<li class="gmail-whitespace-normal gmail-break-words"><strong><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]"><plugin></code></strong> - Specifies elasticity model and material properties
<ul class="gmail-[&:not(:last-child)_ul]:pb-1 gmail-[&:not(:last-child)_ol]:pb-1 gmail-list-disc gmail-space-y-2.5 gmail-pl-7">
<li class="gmail-whitespace-normal gmail-break-words">Most commonly uses <code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">plugin="mujoco.elasticity.solid"</code> (for 3D volumes) or <code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">plugin="mujoco.elasticity.shell"</code> (for 2D surfaces)</li>
<li class="gmail-whitespace-normal gmail-break-words">Child <code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]"><config></code> elements set material properties:
<ul class="gmail-[&:not(:last-child)_ul]:pb-1 gmail-[&:not(:last-child)_ol]:pb-1 gmail-list-disc gmail-space-y-2.5 gmail-pl-7">
<li class="gmail-whitespace-normal gmail-break-words"><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">key="poisson"</code> - Poisson's ratio</li>
<li class="gmail-whitespace-normal gmail-break-words"><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">key="young"</code> - Young's modulus (in Pascals)</li>
<li class="gmail-whitespace-normal gmail-break-words"><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">key="thickness"</code> - For shell elements, material thickness</li>
<li class="gmail-whitespace-normal gmail-break-words"><code class="gmail-bg-text-200/5 gmail-border gmail-border-0.5 gmail-border-border-300 gmail-text-danger-000 gmail-whitespace-pre-wrap gmail-rounded-[0.4rem] gmail-px-1 gmail-py-px gmail-text-[0.9rem]">key="damping"</code> - Material damping</li>
</ul>
</li>
</ul>
</li>
</ol>
<h3 class="gmail-font-claude-response-subheading gmail-text-text-100 gmail-mt-1 gmail--mb-1.5">Example Usage</h3>
<p class="gmail-font-claude-response-body gmail-break-words gmail-whitespace-normal">A typical cloth simulation might look like:</p>
<div class="gmail-relative gmail-group/copy gmail-bg-bg-000/50 gmail-border-0.5 gmail-border-border-400 gmail-rounded-lg"><div class="gmail-sticky gmail-opacity-0 gmail-group-hover/copy:opacity-100 gmail-top-2 gmail-py-2 gmail-h-12 gmail-w-0 gmail-float-right"><div class="gmail-absolute gmail-right-0 gmail-h-8 gmail-px-2 gmail-items-center gmail-inline-flex gmail-z-10"><button class="gmail-inline-flex gmail-items-center gmail-justify-center gmail-relative gmail-shrink-0 gmail-can-focus gmail-select-none gmail-disabled:pointer-events-none gmail-disabled:opacity-50 gmail-disabled:shadow-none gmail-disabled:drop-shadow-none gmail-border-transparent gmail-transition gmail-font-base gmail-duration-300 ease-[cubic-bezier(0.165,0.85,0.45,1)] gmail-h-8 gmail-w-8 gmail-rounded-md gmail-active:scale-95 gmail-backdrop-blur-md gmail-Button_ghost__BUAoh" type="button" aria-label="Copy to clipboard"><div class="gmail-relative"><div class="gmail-flex gmail-items-center gmail-justify-center gmail-transition-all gmail-opacity-100 gmail-scale-100" style="width:20px;height:20px"></div><div class="gmail-flex gmail-items-center gmail-justify-center gmail-absolute gmail-top-0 gmail-left-0 gmail-transition-all gmail-opacity-0 gmail-scale-50" style="width:20px;height:20px"></div></div></button></div></div><div class="gmail-text-text-500 gmail-font-small gmail-p-3.5 gmail-pb-0">xml</div><div><pre class="gmail-code-block__code gmail-!my-0 gmail-!rounded-lg gmail-!text-sm gmail-!leading-relaxed" style="background:transparent;color:rgb(171,178,191);font-family:var(--font-mono);direction:ltr;word-spacing:normal;word-break:normal;line-height:1.5;padding:1em;margin:0.5em 0px;overflow:auto;border-radius:0.3em"><code class="gmail-language-xml" style="background:transparent;font-family:var(--font-mono);direction:ltr;word-spacing:normal;word-break:normal;line-height:1.5"><span class="gmail-token"><</span><span class="gmail-token" style="color:rgb(224,108,117)">flexcomp</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">type</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">grid</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">count</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">10 5 1</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">spacing</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">.025 .025 .025</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> 
</span><span class="gmail-token" style="color:rgb(224,108,117)">         </span><span class="gmail-token" style="color:rgb(209,154,102)">mass</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">0.1</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">name</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">cloth</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">radius</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">0.001</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">dim</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">2</span><span class="gmail-token">"</span><span class="gmail-token">></span>
  <span class="gmail-token"><</span><span class="gmail-token" style="color:rgb(224,108,117)">contact</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">condim</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">6</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">solref</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">0.001</span><span class="gmail-token">"</span><span class="gmail-token">/></span>
  <span class="gmail-token"><</span><span class="gmail-token" style="color:rgb(224,108,117)">edge</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">equality</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">true</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">damping</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">0.1</span><span class="gmail-token">"</span><span class="gmail-token">/></span>
  <span class="gmail-token"><</span><span class="gmail-token" style="color:rgb(224,108,117)">plugin</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">plugin</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">mujoco.elasticity.shell</span><span class="gmail-token">"</span><span class="gmail-token">></span>
    <span class="gmail-token"><</span><span class="gmail-token" style="color:rgb(224,108,117)">config</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">key</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">poisson</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">value</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">0</span><span class="gmail-token">"</span><span class="gmail-token">/></span>
    <span class="gmail-token"><</span><span class="gmail-token" style="color:rgb(224,108,117)">config</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">key</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">thickness</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">value</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">10e-3</span><span class="gmail-token">"</span><span class="gmail-token">/></span>
    <span class="gmail-token"><</span><span class="gmail-token" style="color:rgb(224,108,117)">config</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">key</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">young</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">value</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">3e4</span><span class="gmail-token">"</span><span class="gmail-token">/></span>
  <span class="gmail-token"></</span><span class="gmail-token" style="color:rgb(224,108,117)">plugin</span><span class="gmail-token">></span>
<span class="gmail-token"></</span><span class="gmail-token" style="color:rgb(224,108,117)">flexcomp</span><span class="gmail-token">></span></code></pre></div></div>
<p class="gmail-font-claude-response-body gmail-break-words gmail-whitespace-normal">A 3D soft body example:</p>
<div class="gmail-relative gmail-group/copy gmail-bg-bg-000/50 gmail-border-0.5 gmail-border-border-400 gmail-rounded-lg"><div class="gmail-sticky gmail-opacity-0 gmail-group-hover/copy:opacity-100 gmail-top-2 gmail-py-2 gmail-h-12 gmail-w-0 gmail-float-right"><div class="gmail-absolute gmail-right-0 gmail-h-8 gmail-px-2 gmail-items-center gmail-inline-flex gmail-z-10"><button class="gmail-inline-flex gmail-items-center gmail-justify-center gmail-relative gmail-shrink-0 gmail-can-focus gmail-select-none gmail-disabled:pointer-events-none gmail-disabled:opacity-50 gmail-disabled:shadow-none gmail-disabled:drop-shadow-none gmail-border-transparent gmail-transition gmail-font-base gmail-duration-300 ease-[cubic-bezier(0.165,0.85,0.45,1)] gmail-h-8 gmail-w-8 gmail-rounded-md gmail-active:scale-95 gmail-backdrop-blur-md gmail-Button_ghost__BUAoh" type="button" aria-label="Copy to clipboard"><div class="gmail-relative"><div class="gmail-flex gmail-items-center gmail-justify-center gmail-transition-all gmail-opacity-100 gmail-scale-100" style="width:20px;height:20px"></div><div class="gmail-flex gmail-items-center gmail-justify-center gmail-absolute gmail-top-0 gmail-left-0 gmail-transition-all gmail-opacity-0 gmail-scale-50" style="width:20px;height:20px"></div></div></button></div></div><div class="gmail-text-text-500 gmail-font-small gmail-p-3.5 gmail-pb-0">xml</div><div><pre class="gmail-code-block__code gmail-!my-0 gmail-!rounded-lg gmail-!text-sm gmail-!leading-relaxed" style="background:transparent;color:rgb(171,178,191);font-family:var(--font-mono);direction:ltr;word-spacing:normal;word-break:normal;line-height:1.5;padding:1em;margin:0.5em 0px;overflow:auto;border-radius:0.3em"><code class="gmail-language-xml" style="background:transparent;font-family:var(--font-mono);direction:ltr;word-spacing:normal;word-break:normal;line-height:1.5"><span class="gmail-token"><</span><span class="gmail-token" style="color:rgb(224,108,117)">flexcomp</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">type</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">grid</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">count</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">5 5 5</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">spacing</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">.02 .02 .02</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> 
</span><span class="gmail-token" style="color:rgb(224,108,117)">         </span><span class="gmail-token" style="color:rgb(209,154,102)">pos</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">0 0 0</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">radius</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">0</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">rgba</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">0 .7 .7 1</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> 
</span><span class="gmail-token" style="color:rgb(224,108,117)">         </span><span class="gmail-token" style="color:rgb(209,154,102)">name</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">softbody</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">dim</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">3</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">mass</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">1</span><span class="gmail-token">"</span><span class="gmail-token">></span>
  <span class="gmail-token"><</span><span class="gmail-token" style="color:rgb(224,108,117)">contact</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">condim</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">3</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">solref</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">0.01 1</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">solimp</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">.95 .99 .0001</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">selfcollide</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">none</span><span class="gmail-token">"</span><span class="gmail-token">/></span>
  <span class="gmail-token"><</span><span class="gmail-token" style="color:rgb(224,108,117)">edge</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">damping</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">1</span><span class="gmail-token">"</span><span class="gmail-token">/></span>
  <span class="gmail-token"><</span><span class="gmail-token" style="color:rgb(224,108,117)">plugin</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">plugin</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">mujoco.elasticity.solid</span><span class="gmail-token">"</span><span class="gmail-token">></span>
    <span class="gmail-token"><</span><span class="gmail-token" style="color:rgb(224,108,117)">config</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">key</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">poisson</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">value</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">0.2</span><span class="gmail-token">"</span><span class="gmail-token">/></span>
    <span class="gmail-token"><</span><span class="gmail-token" style="color:rgb(224,108,117)">config</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">key</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">young</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(224,108,117)"> </span><span class="gmail-token" style="color:rgb(209,154,102)">value</span><span class="gmail-token">=</span><span class="gmail-token">"</span><span class="gmail-token" style="color:rgb(152,195,121)">5e5</span><span class="gmail-token">"</span><span class="gmail-token">/></span>
  <span class="gmail-token"></</span><span class="gmail-token" style="color:rgb(224,108,117)">plugin</span><span class="gmail-token">></span>
<span class="gmail-token"></</span><span class="gmail-token" style="color:rgb(224,108,117)">flexcomp</span><span class="gmail-token">></span></code></pre></div></div></div></div></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Wed, Dec 10, 2025 at 5:00 AM John Carlson <<a href="mailto:yottzumm@gmail.com">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Poncho "IndexedTriangleSet" for MuJoCo:<div><br></div><div><flexcomp name="f1" type="direct" rgba=".8 .2 .2 1" radius="0.01" dim="2" pos="0 0 2"<br>              mass="1"<br>         point="...MFVec3F..."  (Coordinate.point)</div><div>element="...MFInt32..." (IndexedTriangleSet coordIndex?)</div><div><br></div><div>    <edge equality="true" damping="0.1"/><br>      <elasticity young="3e5" poisson="0" thickness="8e-3" elastic2d="bend"/><br>      <contact solref="0.003"/><br>    </flexcomp></div><div><br></div><div>Help converting this to something that works for X3D IndexedTriangleSet welcome.</div><div><br></div><div>Hammock grid:</div><div><br></div><div> <flexcomp name="hammock" type="grid" count="11 9 1" spacing="0.2 0.2 0.2" material="hammock"<br>              radius="0.04" dim="2"><br>      <pin id="0 8 90 98"/><br>      <edge equality="true" solref="0.002 5"/><br>      <contact selfcollide="none" internal="false" solimp=".99 .999 .00001"/><br>    </flexcomp></div><div><br></div><div><!-- Copyright 2021 DeepMind Technologies Limited<br><br>     Licensed under the Apache License, Version 2.0 (the "License");<br>     you may not use this file except in compliance with the License.<br>     You may obtain a copy of the License at<br><br>         <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">http://www.apache.org/licenses/LICENSE-2.0</a><br><br>     Unless required by applicable law or agreed to in writing, software<br>     distributed under the License is distributed on an "AS IS" BASIS,<br>     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<br>     See the License for the specific language governing permissions and<br>     limitations under the License.<br>--><br></div></div>
</blockquote></div>