<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alicia lu</title>
    <description>The latest articles on DEV Community by Alicia lu (@alicia_lu).</description>
    <link>https://dev.to/alicia_lu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4195263%2F443b0bb4-9523-4dd3-a9f5-3b6ba40156ee.png</url>
      <title>DEV Community: Alicia lu</title>
      <link>https://dev.to/alicia_lu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alicia_lu"/>
    <language>en</language>
    <item>
      <title>Meshy Free to Houdini: What the GLB Actually Contained</title>
      <dc:creator>Alicia lu</dc:creator>
      <pubDate>Tue, 20 Oct 2026 05:32:14 +0000</pubDate>
      <link>https://dev.to/alicia_lu/meshy-free-to-houdini-what-the-glb-actually-contained-1jf0</link>
      <guid>https://dev.to/alicia_lu/meshy-free-to-houdini-what-the-glb-actually-contained-1jf0</guid>
      <description>&lt;p&gt;Originally published on &lt;a href="https://digitalgarden.si/blog/meshy-3d-agent-houdini-cleanup/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=meshy-cleanup" rel="noopener noreferrer"&gt;Digital Garden by Alicia&lt;/a&gt; on 20 October 2026. Codex operated the actual tests and assisted with this article; failed checks and untested limits are retained.&lt;/p&gt;

&lt;p&gt;The free route worked, with an important boundary: Meshy 3D Agent could not select Meshy 6 Lite, and the Agent's higher-tier generated models were not downloadable on this free account. I used the regular Text to 3D tool with 6 Lite, downloaded a real GLB, and tested the Houdini-to-browser pipeline from that file. This article is a free-workflow test, not a paid Agent export demonstration.&lt;/p&gt;

&lt;p&gt;Codex operated Meshy's web UI, Houdini 22.0.429 and the Three.js acceptance viewer on 20 October 2026. The account was already logged in by its owner. No paid subscription was purchased.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv3rrqj34jctdr7qhvdqv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv3rrqj34jctdr7qhvdqv.png" alt="Actual generated Meshy source compared with the reduced result under the same inspection material" width="799" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify the download before spending credits
&lt;/h2&gt;

&lt;p&gt;Meshy's current free-plan help described 100 monthly credits and 10 monthly downloads limited to Meshy 6 Lite. The Agent model selector offered higher-tier models, but no Lite option; its chat answer also directed the free-download workflow to the regular generator. I checked the actual selector and download controls rather than treating the chat answer as proof.&lt;sup id="fnref1"&gt;1&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;The regular Text to 3D panel allowed Meshy 6 Lite, quoted 10 credits and selected CC BY 4.0. The prompt requested one stylized grape hyacinth: a slender green stem, five narrow leaves and hanging purple-blue bells, with no pot, soil or ground plane. One generation completed and the GLB download counter changed from 10 to 9. The account also received a separate 30-credit daily check-in reward, so its final balance of 120 is not the generation cost.&lt;/p&gt;

&lt;p&gt;The page displayed a notice that Text to 3D would be retired on 31 October. That is a dated UI observation, not a promise that this exact free path will still exist afterward. Recheck access and download entitlement before a new batch; do not spend a session generating models that the account cannot export.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the downloaded file actually contained
&lt;/h2&gt;

&lt;p&gt;The GLB was 784,708 bytes, with 21,781 vertices and 43,546 triangles. Its only mesh attribute was POSITION. It contained no UVs, normals, material images or PBR materials. The requested flower colours therefore did not arrive as a textured deliverable. It was a geometry result, not a ready botanical asset with verified species anatomy.&lt;/p&gt;

&lt;p&gt;Houdini's imported and unpacked geometry had 13 connected components, zero boundary edges and zero edges shared by more than two faces. Those checks do not prove there are no self-intersections, that all parts form one connected object, or that it is ready for printing. The website's printable badge is not substituted for those measurements.&lt;/p&gt;

&lt;p&gt;The original file was preserved. Derived copies were centered in X/Z, placed at ground height and normalized to 0.6 units tall. The later browser inspection applies a common neutral material, with computed display normals where needed; that material is not a generated Meshy texture.&lt;/p&gt;

&lt;h2&gt;
  
  
  A failed cleanup made the tolerance problem visible
&lt;/h2&gt;

&lt;p&gt;The first Clean/PolyDoctor chain used defaults after the 0.6-unit normalization. It removed much of the thin geometry: only 23,817 triangles remained, with 11,625 boundary edges and 69 components. I rejected it. A smaller file with more holes is not an accepted cleanup.&lt;/p&gt;

&lt;p&gt;The accepted Clean degeneracy tolerance was reduced to 1e-12. Potential overlap/intersection conditions were marked rather than silently repaired. The accepted cleanup preserved all 43,546 triangles and the original closed-edge/component counts. SideFX documents that Clean's degeneracy tolerance is an edge-length measure whose square is compared with area; scale matters.&lt;sup id="fnref2"&gt;2&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;PolyReduce then used its actual Output Polygon Count target with finalcount=3000. Merely writing a count while leaving its target on percentage would not activate that target. The remesh branch used target size 0.006 and five iterations. Its loss of some leaf width is visible and consistent with the changed bounds, so it is not called visually identical.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Geometry stage&lt;/th&gt;
&lt;th&gt;Points&lt;/th&gt;
&lt;th&gt;Triangles&lt;/th&gt;
&lt;th&gt;Boundary edges&lt;/th&gt;
&lt;th&gt;Nonmanifold edges&lt;/th&gt;
&lt;th&gt;Components&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;raw&lt;/td&gt;
&lt;td&gt;21,781&lt;/td&gt;
&lt;td&gt;43,546&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;clean&lt;/td&gt;
&lt;td&gt;21,781&lt;/td&gt;
&lt;td&gt;43,546&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reduce&lt;/td&gt;
&lt;td&gt;1,508&lt;/td&gt;
&lt;td&gt;3,000&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;remesh&lt;/td&gt;
&lt;td&gt;2,785&lt;/td&gt;
&lt;td&gt;5,554&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All derived branches received a six-plane UV unwrap and computed normals before native GLB export. That creates inspectable UVs; it is not a hand-authored low-distortion UV layout. There was no source PBR image to rebake, so I did not invent a texture-baking success. The HIP was saved, reopened and cooked again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validate the browser deliverable
&lt;/h2&gt;

&lt;p&gt;The source and final GLBs passed glTF validation with zero errors and warnings; informational and buffer-view hints remain in the receipts. Three.js 0.186.1 loaded each candidate through five unique localhost URLs. Timings include parsing, compilation and a submitted frame with warm code/GPU pipelines, not public-network or device-cold time.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Candidate&lt;/th&gt;
&lt;th&gt;Bytes&lt;/th&gt;
&lt;th&gt;Median local load to submitted frame&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Original download&lt;/td&gt;
&lt;td&gt;784,708&lt;/td&gt;
&lt;td&gt;33.3 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;clean, with generated UVs/normals&lt;/td&gt;
&lt;td&gt;2,025,332&lt;/td&gt;
&lt;td&gt;33.3 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reduce, with generated UVs/normals&lt;/td&gt;
&lt;td&gt;214,740&lt;/td&gt;
&lt;td&gt;16.6 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;remesh, with generated UVs/normals&lt;/td&gt;
&lt;td&gt;391,480&lt;/td&gt;
&lt;td&gt;16.6 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Adding UVs and normals makes the full-resolution derived file larger than the position-only download; reduction and attribute creation are different operations. The 3,000-triangle candidate was repeated 1,000 times with explicit InstancedMesh: the receipt records 2 total render calls and 3,000,001 triangles, including the node renderer's output pass. Instancing shares data but does not remove the repeated triangle workload. Both WebGPU and forced WebGL2 fallback were checked.&lt;/p&gt;

&lt;p&gt;An independently authored Houdini hyacinth is included as a reference for geometry budget and visible structure, not as botanical ground truth or a blinded aesthetic comparison. The free AI result still needs art direction, material work, appropriate deformation attributes and a scene-specific acceptance check before replacing a production garden asset.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproduce it and retain attribution
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://digitalgarden.si/marketing/research/comparisons-20261020/assets-tests.zip" rel="noopener noreferrer"&gt;asset-test package&lt;/a&gt; contains the original free download, derived meshes, Houdini scripts, viewer and results. The Meshy source and its derivatives retain CC BY 4.0 attribution: model created with Meshy by Alicia. The package includes the license link and records the modifications. It does not grant rights to the private garden engine or its production models.&lt;sup id="fnref3"&gt;3&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;For a procedural alternative with explicit shape controls and wind data, read &lt;a href="https://digitalgarden.si/blog/houdini-procedural-plants-realtime-web/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=meshy-cleanup" rel="noopener noreferrer"&gt;the Houdini plant test&lt;/a&gt;. For the runtime budget, continue with &lt;a href="https://digitalgarden.si/blog/threejs-webgpu-vs-webgl-instanced-plants/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=meshy-cleanup" rel="noopener noreferrer"&gt;the nine-path instancing matrix&lt;/a&gt;.&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;Meshy, &lt;a href="https://help.meshy.ai/en/articles/15696428-what-is-included-on-the-free-plan" rel="noopener noreferrer"&gt;what is included on the free plan&lt;/a&gt; and &lt;a href="https://docs.meshy.ai/en/webapp/3d-agent" rel="noopener noreferrer"&gt;3D Agent documentation&lt;/a&gt;, checked 20 October 2026. Entitlement was also verified by an actual download.&amp;nbsp;↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;SideFX, &lt;a href="https://www.sidefx.com/docs/houdini/nodes/sop/clean.html" rel="noopener noreferrer"&gt;Clean SOP&lt;/a&gt; and &lt;a href="https://www.sidefx.com/docs/houdini/nodes/sop/polyreduce.html" rel="noopener noreferrer"&gt;PolyReduce SOP&lt;/a&gt;, checked 20 October 2026.&amp;nbsp;↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn3"&gt;
&lt;p&gt;Meshy, &lt;a href="https://help.meshy.ai/en/articles/10137554-what-is-the-ownership-of-the-generated-models" rel="noopener noreferrer"&gt;ownership of generated models&lt;/a&gt;, checked 20 October 2026. The model is distributed with &lt;a href="https://creativecommons.org/licenses/by/4.0/" rel="noopener noreferrer"&gt;CC BY 4.0&lt;/a&gt; attribution and modification notes.&amp;nbsp;↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>threejs</category>
      <category>ai</category>
      <category>webdev</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>How I Built a WebGPU 3D Garden with Houdini and Three.js</title>
      <dc:creator>Alicia lu</dc:creator>
      <pubDate>Tue, 20 Oct 2026 03:48:52 +0000</pubDate>
      <link>https://dev.to/alicia_lu/how-i-built-a-webgpu-3d-garden-with-houdini-and-threejs-1f69</link>
      <guid>https://dev.to/alicia_lu/how-i-built-a-webgpu-3d-garden-with-houdini-and-threejs-1f69</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://digitalgarden.si/blog/webgpu-garden-houdini-threejs/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=webgpu-garden" rel="noopener noreferrer"&gt;Digital Garden by Alicia&lt;/a&gt; on 19 October 2026. This article was prepared with Codex assistance from actual project tests; the measurements and limitations are stated below.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://digitalgarden.si/play/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=webgpu-garden" rel="noopener noreferrer"&gt;interactive garden&lt;/a&gt; starts in Houdini and runs in Three.js. Houdini makes the plant geometry and its deformation attributes; the browser places, lights and animates those plants. On 19 October 2026, I tested the current garden code on both WebGPU and WebGL2, then built a separate small plant to check the export pipeline. The useful result is a working authoring boundary, not a claim that switching APIs makes every scene faster.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F55dl2sx0a19qwn136n7x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F55dl2sx0a19qwn136n7x.png" alt="The actual spring garden running through Three.js WebGPURenderer, with the active backend visible in the test harness" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What the browser actually renders
&lt;/h2&gt;

&lt;p&gt;The garden has four seasonal compositions, day and night transitions, shader driven wind, plant interaction and a photography mode. It uses Three.js 0.186.1 and TSL materials. The renderer is WebGPURenderer, which can use its WebGPU backend or its WebGL2 fallback. The active backend is checked after renderer initialization; the constructor name alone cannot establish which one ran.&lt;sup id="fnref1"&gt;1&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Houdini exports reusable plant assets rather than a giant frozen scene. The browser owns placement, camera movement, screen space detail decisions and interactions. That keeps artistic geometry work in the DCC while allowing the website to respond without a Houdini installation. A stem is authored once and placed many times. Its wind attributes describe how it may deform; they do not contain a frame by frame animation cache.&lt;/p&gt;

&lt;p&gt;The production wind system keeps roots fixed and bends a shared stem while preserving coherent flower heads. It also deforms normals. The small downloadable experiment uses a much simpler sine displacement to make attribute loss easy to see. Its shader is a teaching fixture, not the production wind implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  A measured comparison of the current garden
&lt;/h2&gt;

&lt;p&gt;I imported the existing Experience module from source commit &lt;code&gt;9c25ecc6ab2e&lt;/code&gt; into a local measurement harness. Each backend ran the same 30 second partial orbit after a 1.5 second warmup. The canvas was 1920 × 1080 at device pixel ratio 1; the browser viewport was 1280 × 900 so the desktop scene policy stayed active. The spring scene contained 162,420 plant placements.&lt;/p&gt;

&lt;p&gt;The machine used an NVIDIA RTX 5070 Ti. The in app browser reported Chromium 155; WebGPU reported NVIDIA Blackwell, and the WebGL2 fallback reported ANGLE over Direct3D 11. Both tabs were visible. Other applications were not closed, and this was one sample per backend.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Active backend&lt;/th&gt;
&lt;th&gt;Mean FPS&lt;/th&gt;
&lt;th&gt;95th percentile frame time&lt;/th&gt;
&lt;th&gt;Mean render calls&lt;/th&gt;
&lt;th&gt;Mean triangles, including passes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;WebGPU&lt;/td&gt;
&lt;td&gt;54.66&lt;/td&gt;
&lt;td&gt;33.4 ms&lt;/td&gt;
&lt;td&gt;67.22&lt;/td&gt;
&lt;td&gt;9.49 million&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebGL2 fallback&lt;/td&gt;
&lt;td&gt;58.40&lt;/td&gt;
&lt;td&gt;16.8 ms&lt;/td&gt;
&lt;td&gt;67.24&lt;/td&gt;
&lt;td&gt;9.48 million&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;WebGL2 was faster in this particular run. The display was close to a 60 Hz ceiling, the detail scheduler was active, and the triangle totals vary slightly as detail transitions settle. These measurements do not isolate API overhead or establish a universal winner. They do establish that both backends render the current garden and that this scene does not justify an unconditional “WebGPU is faster” headline.&lt;/p&gt;

&lt;p&gt;Both runs reused 36 assets from the browser’s garden cache, with zero model downloads. First frame observations were 1.59 seconds for WebGPU and 10.81 seconds for WebGL2. Those are single initialization observations with different backend pipeline work, not controlled cold load or CDN benchmarks. They should not be used to predict a visitor’s loading time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the scene budget goes
&lt;/h2&gt;

&lt;p&gt;Instancing shares a plant geometry across many placements. It does not eliminate triangle processing, alpha testing or pixel shading. In the separate 1,000 plant fixture, 6,056 triangles per plant still produced about 6.06 million scene triangles. Reducing the plant to 2,116 triangles brought that to about 2.12 million. Both configurations remained near 60 FPS on this desktop, so the geometry reduction is clearer evidence than a rounded FPS comparison.&lt;/p&gt;

&lt;p&gt;The garden’s current desktop policy keeps two decoded seasons resident and uses a bounded 160 MiB model cache on disk. Background preparation pauses around activity and photography. The ordinary scene has a scene pass and bloom; depth of field belongs to photography mode. These are deliberate budgets and lifecycle choices, not benefits supplied automatically by WebGPU.&lt;/p&gt;

&lt;p&gt;Reversed depth is enabled only for the actual WebGPU backend in this project. Earlier fallback testing produced a blank post processing result with the reversed path. That is a project compatibility decision, not a general statement that WebGL2 cannot support any reversed depth technique.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test the boundary before scaling the garden
&lt;/h2&gt;

&lt;p&gt;The companion export test caught a practical failure: native Houdini GLB and the tested glTF Transform Meshopt path preserved &lt;code&gt;_STIFF&lt;/code&gt; and &lt;code&gt;_PHASE&lt;/code&gt;, while the tested gltfpack paths dropped them. A smaller file that loses the data required by wind is not an accepted replacement. The production garden assets were preserved during this experiment.&lt;/p&gt;

&lt;p&gt;The most useful sequence is to validate one plant, reopen its editable Houdini scene, inspect the exported attributes, load the compressed candidate with the real browser decoders, and only then test repeated placements. A renderer screenshot alone cannot prove that deformation data survived compression.&lt;/p&gt;

&lt;p&gt;Read the measured details in &lt;a href="https://digitalgarden.si/blog/houdini-gltf-threejs-optimization/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=webgpu-garden" rel="noopener noreferrer"&gt;Houdini glTF optimization&lt;/a&gt;, &lt;a href="https://digitalgarden.si/blog/houdini-procedural-plants-realtime-web/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=webgpu-garden" rel="noopener noreferrer"&gt;procedural plants and wind attributes&lt;/a&gt;, and &lt;a href="https://digitalgarden.si/blog/gaussian-splats-threejs/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=webgpu-garden" rel="noopener noreferrer"&gt;Gaussian splats in Three.js&lt;/a&gt;. The Gaussian article uses a separate synthetic fixture; splats are not part of the production garden.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproduce the experiment and understand its limits
&lt;/h2&gt;

&lt;p&gt;Codex executed the native scripts and browser checks. The &lt;a href="https://digitalgarden.si/marketing/research/webgpu-series-20261019/results-2026-10-19.json" rel="noopener noreferrer"&gt;compact measurement receipts&lt;/a&gt; preserve versions, counts and methods alongside the rendered evidence.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://digitalgarden.si/marketing/research/webgpu-series-20261019/webgpu-garden-tests.zip" rel="noopener noreferrer"&gt;experiment download&lt;/a&gt; contains the original small plant generator, compact results, owned fixtures and independent asset/splat viewers. It excludes the private garden engine and production models. The full garden measurements are supplied as dated results with their method, not as a promise that the private application is included in the download.&lt;/p&gt;

&lt;p&gt;No physical phone was tested. Responsive layout checks are not phone GPU tests. I also did not record historical TSL migration hours, measure total driver VRAM, or test every browser version. Those remain unmeasured rather than being filled with estimates. The concrete outcome is a working current garden on both backends, and a set of smaller tests that expose where its asset pipeline can fail.&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;Three.js, &lt;a href="https://threejs.org/docs/pages/WebGPURenderer.html" rel="noopener noreferrer"&gt;WebGPURenderer documentation&lt;/a&gt;, checked 19 October 2026.&amp;nbsp;↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>threejs</category>
      <category>webgpu</category>
      <category>webdev</category>
      <category>gamedev</category>
    </item>
  </channel>
</rss>
