<?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: Hyeon Sang Jeon</title>
    <description>The latest articles on DEV Community by Hyeon Sang Jeon (@hyeonsangjeon).</description>
    <link>https://dev.to/hyeonsangjeon</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%2F4025501%2F4c4e7448-823b-4188-b0c0-8f13dd319c19.jpg</url>
      <title>DEV Community: Hyeon Sang Jeon</title>
      <link>https://dev.to/hyeonsangjeon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hyeonsangjeon"/>
    <language>en</language>
    <item>
      <title>I Wanted a World Tree in My Three.js City — So I Built a GitHub Copilot Plugin</title>
      <dc:creator>Hyeon Sang Jeon</dc:creator>
      <pubDate>Sat, 11 Jul 2026 19:38:00 +0000</pubDate>
      <link>https://dev.to/hyeonsangjeon/i-wanted-a-world-tree-in-my-threejs-city-so-i-built-a-github-copilot-plugin-184l</link>
      <guid>https://dev.to/hyeonsangjeon/i-wanted-a-world-tree-in-my-threejs-city-so-i-built-a-github-copilot-plugin-184l</guid>
      <description>&lt;p&gt;Repolis is a walkable Three.js city built from my GitHub repositories. Each repository becomes a building, activity changes the skyline, and visitors can walk or ask an AI taxi to find a project.&lt;/p&gt;

&lt;p&gt;After finishing the &lt;code&gt;repolis-2&lt;/code&gt; iteration and deploying it, I wanted the city to have a real landmark: a luminous World Tree above the night skyline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/threejs/comments/1utt9rk/i_built_a_world_tree_for_my_threejs_city_then/" rel="noopener noreferrer"&gt;Watch the 27-second build-to-deployment video on Reddit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first temptation was to hand-build one tree and stop. Instead, I treated it as a reusable question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can an agent turn a visual reference into structured procedural code, explore several useful concepts, and still preserve the object’s identity?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  From a reference to a sculpt contract
&lt;/h2&gt;

&lt;p&gt;While exploring that question, I found Vinh Hiển’s MIT-licensed &lt;a href="https://github.com/vinhhien112/Three.js-Object-Sculptor-Codex-Plugin" rel="noopener noreferrer"&gt;Three.js Object Sculptor&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Its workflow does not pretend that one image contains a complete 3D mesh. It first checks whether the reference has a readable silhouette and enough depth cues. It then creates a structured specification for components, materials, pivots, sockets, colliders, and visual evidence.&lt;/p&gt;

&lt;p&gt;The model is built through locked passes:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;blockout → structure → form → materials → surface → lighting → optimization&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Each pass produces a browser screenshot. The screenshot is compared with the reference before the next pass unlocks.&lt;/p&gt;

&lt;p&gt;I ported that foundation into the GitHub Copilot plugin format so the workflow could operate directly inside a development repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sculpt DNA is constrained variation, not random noise
&lt;/h2&gt;

&lt;p&gt;My original layer is &lt;strong&gt;Sculpt DNA&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A Sculpt DNA parameter describes a decision that a designer understands: canopy density, branch warmth, cyan foliage ratio, bark roughness, repetition count, or surface age. Every parameter has a bounded range and a semantic purpose.&lt;/p&gt;

&lt;p&gt;At the same time, invariants protect what must not change:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;component IDs and parent links&lt;/li&gt;
&lt;li&gt;attachment roots and local starts&lt;/li&gt;
&lt;li&gt;material references&lt;/li&gt;
&lt;li&gt;sockets and collider contracts&lt;/li&gt;
&lt;li&gt;build-pass order and visual review targets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;strong&gt;Coverage Curator&lt;/strong&gt; generates a larger deterministic candidate pool and then selects a small, broadly separated family. It avoids presenting three nearly identical random samples as meaningful design exploration.&lt;/p&gt;

&lt;p&gt;For the Repolis tree it produced 24 safe candidates and selected three concepts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Golden Canopy&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Solar Archive&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aurora Index&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&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%2Fpgudm6mxgksljkmabcf7.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%2Fpgudm6mxgksljkmabcf7.png" alt="Three curated Sculpt DNA concepts" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These were intermediate design directions, not three finished flagship assets. Their semantic hierarchy, attachment roots, sockets, colliders, and review targets stayed protected while their bounded material and repetition parameters changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Selecting and shipping Solar Archive
&lt;/h2&gt;

&lt;p&gt;I selected &lt;strong&gt;Solar Archive&lt;/strong&gt; and continued with object-specific art direction: curve geometry, branch hierarchy, generated PBR, instanced foliage, moss, code glyphs, energy paths, lighting, camera behavior, and mobile optimization.&lt;/p&gt;

&lt;p&gt;The production Repolis version uses deterministic seed &lt;code&gt;20260711&lt;/code&gt; and contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;0 imported meshes&lt;/li&gt;
&lt;li&gt;15 macro branches&lt;/li&gt;
&lt;li&gt;56 secondary branches&lt;/li&gt;
&lt;li&gt;112 merged fine branches&lt;/li&gt;
&lt;li&gt;3,016 instanced leaves&lt;/li&gt;
&lt;li&gt;68,904 tree triangles&lt;/li&gt;
&lt;li&gt;124 draws&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most importantly, the production factory used by the interactive plugin demo is the same factory integrated into Repolis. The city owns only a thin placement adapter.&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%2F178m2waa3zj2584fxojq.webp" 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%2F178m2waa3zj2584fxojq.webp" alt="Solar Archive deployed in the live Repolis night scene" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What the project is — and is not
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;threejs-sculpt-dna&lt;/code&gt; is not photogrammetry, exact mesh extraction, or a promise that every generated preview will look like a hand-finished asset.&lt;/p&gt;

&lt;p&gt;It is a disciplined way to move through:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;reference → structured procedural build → constrained family → curated concept → art-directed result&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That distinction matters. Automation creates leverage, but a flagship still needs a clear quality contract and visual judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Interactive tree demo:&lt;br&gt;
&lt;a href="https://hyeonsangjeon.github.io/threejs-sculpt-dna/" rel="noopener noreferrer"&gt;https://hyeonsangjeon.github.io/threejs-sculpt-dna/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Walk through the live Repolis deployment:&lt;br&gt;
&lt;a href="https://hyeonsangjeon.github.io/Repolis/" rel="noopener noreferrer"&gt;https://hyeonsangjeon.github.io/Repolis/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source and documentation:&lt;br&gt;
&lt;a href="https://github.com/hyeonsangjeon/threejs-sculpt-dna" rel="noopener noreferrer"&gt;https://github.com/hyeonsangjeon/threejs-sculpt-dna&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install the Copilot plugin marketplace and plugin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;copilot plugin marketplace add hyeonsangjeon/threejs-sculpt-dna
copilot plugin &lt;span class="nb"&gt;install &lt;/span&gt;threejs-sculpt-dna@threejs-copilot-plugins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The project is MIT licensed. I would especially value feedback from Three.js developers and technical artists on the invariant model, curated asset families, and where the workflow is stricter than it needs to be.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>threejs</category>
      <category>opensource</category>
      <category>github</category>
    </item>
  </channel>
</rss>
