<?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: Lewis Liu</title>
    <description>The latest articles on DEV Community by Lewis Liu (@lewisywliu).</description>
    <link>https://dev.to/lewisywliu</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%2F1941424%2F4a89a30a-e9e8-4300-acc6-7db12b3f6afc.png</url>
      <title>DEV Community: Lewis Liu</title>
      <link>https://dev.to/lewisywliu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lewisywliu"/>
    <language>en</language>
    <item>
      <title>Four Open-Source Unreal Engine Indexes for AI Tools, Plugins, Games, and More</title>
      <dc:creator>Lewis Liu</dc:creator>
      <pubDate>Sat, 29 Aug 2026 14:56:09 +0000</pubDate>
      <link>https://dev.to/lewisywliu/four-open-source-unreal-engine-indexes-for-ai-tools-plugins-games-and-more-2168</link>
      <guid>https://dev.to/lewisywliu/four-open-source-unreal-engine-indexes-for-ai-tools-plugins-games-and-more-2168</guid>
      <description>&lt;p&gt;Unreal Engine has an enormous open-source ecosystem. The hard part is often not finding &lt;em&gt;a&lt;/em&gt; project; it is finding the right project for the job, checking whether it supports your UE version, and understanding its license before you build on it.&lt;/p&gt;

&lt;p&gt;Today we are opening four focused Unreal Engine collection sites from SeeleAI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/SeeleAI/awesome-unreal-ai-tools" rel="noopener noreferrer"&gt;Awesome Unreal AI Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SeeleAI/awesome-unreal-engine" rel="noopener noreferrer"&gt;Awesome Unreal Engine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SeeleAI/awesome-unreal-plugins" rel="noopener noreferrer"&gt;Awesome Unreal Plugins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SeeleAI/awesome-unreal-open-source-games" rel="noopener noreferrer"&gt;Awesome Unreal Open Source Games&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to move from an idea to a native Unreal prototype, you can also &lt;a href="https://www.seeles.ai/features/create/unreal-game?utm_source=devto" rel="noopener noreferrer"&gt;try the SeeleAI Unreal Game Creator&lt;/a&gt;. The collections below are useful when you want to inspect the tools, plugins, and projects behind that workflow.&lt;/p&gt;

&lt;p&gt;These are curated indexes, not replacements for the original projects. Every entry links back to its authors, and each project keeps its own license and support requirements. The four index repositories themselves are MIT-licensed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why four lists instead of one?
&lt;/h2&gt;

&lt;p&gt;One giant list quickly becomes difficult to scan. A developer looking for an MCP bridge has a different starting point from a technical artist looking for a procedural-world plugin, or a student looking for a complete gameplay sample.&lt;/p&gt;

&lt;p&gt;The four repositories share a simple rule: make the next useful Unreal project easier to discover, while keeping enough context to make a responsible first evaluation.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Awesome Unreal AI Tools
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/SeeleAI/awesome-unreal-ai-tools" rel="noopener noreferrer"&gt;Awesome Unreal AI Tools&lt;/a&gt; is for the rapidly growing intersection of Unreal and AI. It covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI assistants and agent workflows&lt;/li&gt;
&lt;li&gt;MCP servers and editor bridges&lt;/li&gt;
&lt;li&gt;reusable agent skills&lt;/li&gt;
&lt;li&gt;generative-AI integrations&lt;/li&gt;
&lt;li&gt;simulation and embodied-AI tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The list includes projects such as &lt;a href="https://github.com/kevinpbuckley/VibeUE" rel="noopener noreferrer"&gt;VibeUE&lt;/a&gt;, &lt;a href="https://github.com/Natfii/UnrealClaude" rel="noopener noreferrer"&gt;UnrealClaude&lt;/a&gt;, &lt;a href="https://github.com/chongdashu/unreal-mcp" rel="noopener noreferrer"&gt;unreal-mcp&lt;/a&gt;, &lt;a href="https://github.com/prajwalshettydev/UnrealGenAISupport" rel="noopener noreferrer"&gt;UnrealGenAISupport&lt;/a&gt;, and &lt;a href="https://github.com/microsoft/AirSim" rel="noopener noreferrer"&gt;AirSim&lt;/a&gt;. It also links to SeeleAI's own public Unreal projects, including &lt;a href="https://github.com/SeeleAI/seele-scatter-regions" rel="noopener noreferrer"&gt;Seele Scatter Regions&lt;/a&gt; and &lt;a href="https://github.com/SeeleAI/Seele-art-unreal" rel="noopener noreferrer"&gt;Seele Art Unreal&lt;/a&gt;, so the collection includes both community references and inspectable examples from its maintainer.&lt;/p&gt;

&lt;p&gt;This is a useful starting point when your question is: “How can an AI system inspect, author, or automate part of an Unreal workflow?” It is also a good place to compare the boundaries of different approaches: an editor bridge, a coding skill, an MCP transport, and a simulator are not interchangeable components.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Awesome Unreal Engine
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/SeeleAI/awesome-unreal-engine" rel="noopener noreferrer"&gt;Awesome Unreal Engine&lt;/a&gt; is the broad map of the ecosystem. It brings together open-source:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;development tools and editor extensions&lt;/li&gt;
&lt;li&gt;gameplay, networking, GAS, and UI projects&lt;/li&gt;
&lt;li&gt;rendering, materials, Niagara, and technical-art tools&lt;/li&gt;
&lt;li&gt;PCG, procedural worlds, and simulation projects&lt;/li&gt;
&lt;li&gt;tutorials, learning resources, samples, and assets&lt;/li&gt;
&lt;li&gt;games and community research projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Examples include SeeleAI's &lt;a href="https://github.com/SeeleAI/seele-scatter-regions" rel="noopener noreferrer"&gt;Seele Scatter Regions&lt;/a&gt; and &lt;a href="https://github.com/SeeleAI/Seele-art-unreal" rel="noopener noreferrer"&gt;Seele Art Unreal&lt;/a&gt;, alongside &lt;a href="https://github.com/TriAxis-Games/RealtimeMeshComponent" rel="noopener noreferrer"&gt;RealtimeMeshComponent&lt;/a&gt;, &lt;a href="https://github.com/nxrighthere/UnrealCLR" rel="noopener noreferrer"&gt;UnrealCLR&lt;/a&gt;, &lt;a href="https://github.com/CesiumGS/cesium-unreal" rel="noopener noreferrer"&gt;Cesium for Unreal&lt;/a&gt;, &lt;a href="https://github.com/tomlooman/ActionRoguelike" rel="noopener noreferrer"&gt;ActionRoguelike&lt;/a&gt;, and &lt;a href="https://github.com/tranek/GASDocumentation" rel="noopener noreferrer"&gt;GASDocumentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Start here when you are still exploring the problem space. Once you know whether you need a plugin, a playable reference, or an AI integration, the focused lists make the next step faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Awesome Unreal Plugins
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/SeeleAI/awesome-unreal-plugins" rel="noopener noreferrer"&gt;Awesome Unreal Plugins&lt;/a&gt; focuses on reusable Unreal modules and integrations. Its categories include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;runtime rendering and procedural content&lt;/li&gt;
&lt;li&gt;character movement and animation&lt;/li&gt;
&lt;li&gt;loading and workflow utilities&lt;/li&gt;
&lt;li&gt;C#, Lua, and other language integrations&lt;/li&gt;
&lt;li&gt;DCC and shader development&lt;/li&gt;
&lt;li&gt;geospatial and XR workflows&lt;/li&gt;
&lt;li&gt;navigation, gameplay AI, source control, and networking&lt;/li&gt;
&lt;li&gt;packaging and asynchronous workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The collection also includes two SeeleAI plugins:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/SeeleAI/seele-scatter-regions" rel="noopener noreferrer"&gt;Seele Scatter Regions&lt;/a&gt;&lt;/strong&gt; — an MIT-licensed, editor-side C++ plugin for seeded, recipe-driven village, farm, and cemetery layouts. It exposes C++, Blueprint-callable, and JSON automation paths and is validated for UE 5.5 and 5.8 on Windows/Win64.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/SeeleAI/Seele-art-unreal" rel="noopener noreferrer"&gt;Seele Art Unreal&lt;/a&gt;&lt;/strong&gt; — an MIT-licensed editor plugin that imports validated FBX, GLB, glTF, and OBJ transfers from Seele Web into a local project through a narrow localhost bridge. Its current beta packages target UE 5.5 and 5.8 on Windows/Win64; it is an editor integration, not a packaged-game runtime dependency.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Projects such as &lt;a href="https://github.com/PCGEx/PCGExtendedToolkit" rel="noopener noreferrer"&gt;PCGExtendedToolkit&lt;/a&gt;, &lt;a href="https://github.com/PanicPetal/ALS-Community" rel="noopener noreferrer"&gt;ALS-Community&lt;/a&gt;, &lt;a href="https://github.com/UnrealSharp/UnrealSharp" rel="noopener noreferrer"&gt;UnrealSharp&lt;/a&gt;, &lt;a href="https://github.com/sideeffects/HoudiniEngineForUnreal" rel="noopener noreferrer"&gt;HoudiniEngineForUnreal&lt;/a&gt;, and &lt;a href="https://github.com/CesiumGS/cesium-unreal" rel="noopener noreferrer"&gt;Cesium for Unreal&lt;/a&gt; show the range of the list.&lt;/p&gt;

&lt;p&gt;The goal is not to declare a “best plugin.” It is to give you a shortlist that you can evaluate against your engine version, target platforms, project architecture, and maintenance needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Awesome Unreal Open Source Games
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/SeeleAI/awesome-unreal-open-source-games" rel="noopener noreferrer"&gt;Awesome Unreal Open Source Games&lt;/a&gt; is organized around playable projects and complete examples. It currently groups projects into areas such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;survival and horror&lt;/li&gt;
&lt;li&gt;action, RPG, and fighting&lt;/li&gt;
&lt;li&gt;FPS&lt;/li&gt;
&lt;li&gt;animation and gameplay systems&lt;/li&gt;
&lt;li&gt;simulation and building&lt;/li&gt;
&lt;li&gt;gameplay-architecture samples&lt;/li&gt;
&lt;li&gt;focused indie projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good study candidates include &lt;a href="https://github.com/tomlooman/EpicSurvivalGame" rel="noopener noreferrer"&gt;EpicSurvivalGame&lt;/a&gt;, &lt;a href="https://github.com/tomlooman/ActionRoguelike" rel="noopener noreferrer"&gt;ActionRoguelike&lt;/a&gt;, &lt;a href="https://github.com/PolygonHive/GASPALS" rel="noopener noreferrer"&gt;GASPALS&lt;/a&gt;, &lt;a href="https://github.com/MothCocoon/FlowGraph" rel="noopener noreferrer"&gt;FlowGraph&lt;/a&gt;, and &lt;a href="https://github.com/Megafunk/MassSample" rel="noopener noreferrer"&gt;MassSample&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Reading a plugin README tells you what a component exposes. Opening a complete game shows how systems meet in practice: input, UI, abilities, AI, networking, content organization, and the gameplay loop. That makes this list especially useful for learning and for validating architecture decisions with real project structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical discovery workflow
&lt;/h2&gt;

&lt;p&gt;When evaluating a new idea, I use the lists in this order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Map the space.&lt;/strong&gt; Start with &lt;a href="https://github.com/SeeleAI/awesome-unreal-engine" rel="noopener noreferrer"&gt;Awesome Unreal Engine&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose the project shape.&lt;/strong&gt; Need an installable module? Open &lt;a href="https://github.com/SeeleAI/awesome-unreal-plugins" rel="noopener noreferrer"&gt;Awesome Unreal Plugins&lt;/a&gt;. Need a playable reference? Open &lt;a href="https://github.com/SeeleAI/awesome-unreal-open-source-games" rel="noopener noreferrer"&gt;Awesome Unreal Open Source Games&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add AI only where it helps.&lt;/strong&gt; For agent, MCP, or generative workflows, use &lt;a href="https://github.com/SeeleAI/awesome-unreal-ai-tools" rel="noopener noreferrer"&gt;Awesome Unreal AI Tools&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify before adopting.&lt;/strong&gt; Read the original repository's license, supported UE version, target platforms, dependencies, recent activity, and build instructions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can clone any list locally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/SeeleAI/awesome-unreal-engine.git
git clone https://github.com/SeeleAI/awesome-unreal-plugins.git
git clone https://github.com/SeeleAI/awesome-unreal-ai-tools.git
git clone https://github.com/SeeleAI/awesome-unreal-open-source-games.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The lists are intentionally plain Markdown, so they are easy to search, fork, review, and contribute to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Curation principles
&lt;/h2&gt;

&lt;p&gt;We keep the scope practical:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;link to public projects and preserve attribution;&lt;/li&gt;
&lt;li&gt;record license and Unreal Engine version when the source provides them;&lt;/li&gt;
&lt;li&gt;call out legacy or unstated compatibility rather than hiding it;&lt;/li&gt;
&lt;li&gt;avoid treating stars as a quality score;&lt;/li&gt;
&lt;li&gt;do not include private repositories or closed-source services as if they were open source.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The collections are independent indexes. Inclusion is an invitation to investigate, not a security, compatibility, or production-readiness guarantee.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contribute a project
&lt;/h2&gt;

&lt;p&gt;If you maintain a public Unreal project, open a pull request to the most relevant list. Include the original repository URL, license information, supported UE version, and a short explanation of what makes the project useful to study or use.&lt;/p&gt;

&lt;p&gt;The Unreal ecosystem gets more valuable when discovery is paired with context. If these lists save you time—or if a project is missing—please open an issue or pull request and help us keep them useful.&lt;/p&gt;

&lt;p&gt;If you are ready to test a native Unreal workflow after browsing the collections, &lt;a href="https://www.seeles.ai/features/create/unreal-game?utm_source=devto" rel="noopener noreferrer"&gt;open the SeeleAI Unreal Game Creator&lt;/a&gt;.&lt;/p&gt;




</description>
      <category>ai</category>
      <category>unrealengine</category>
      <category>opensource</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>We Shortened Every Path in Our Unreal Build. That Wasn’t the Real Fix.</title>
      <dc:creator>Lewis Liu</dc:creator>
      <pubDate>Fri, 21 Aug 2026 12:20:33 +0000</pubDate>
      <link>https://dev.to/lewisywliu/we-shortened-every-path-in-our-unreal-build-that-wasnt-the-real-fix-kmc</link>
      <guid>https://dev.to/lewisywliu/we-shortened-every-path-in-our-unreal-build-that-wasnt-the-real-fix-kmc</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/bugsmash"&gt;DEV's Summer Bug Smash: Smash Stories&lt;/a&gt;, powered by &lt;a href="https://sentry.io/" rel="noopener noreferrer"&gt;Sentry&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We had already done the obvious thing.&lt;/p&gt;

&lt;p&gt;The Unreal Engine 5 project was copied to a very short build root. Folder names were trimmed. The packaging workspace was deliberately shallow.&lt;/p&gt;

&lt;p&gt;Cook still failed with the familiar pair:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Couldn't save package, filename is too long (... &amp;gt;= 260)
AutomationTool exiting with ExitCode=25 (Error_UnknownCookFailure)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our first response was to shorten paths even more. That was useful as a defensive measure, but it was not the fix that restored the build. The missing piece was Windows long-path support.&lt;/p&gt;

&lt;p&gt;This post explains why a short project root may still be insufficient, what we changed, and how to verify the result without mistaking a started job for a successful package.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the short-root workaround was convincing
&lt;/h2&gt;

&lt;p&gt;Unreal packaging does not operate only on the path you see in the Content Browser. Cook and staging add their own directory structure around it. Conceptually, a source asset can become something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;short-root&amp;gt;\Saved\Cooked\Windows\&amp;lt;project&amp;gt;\Content\&amp;lt;nested-asset-path&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The project root is only one part of the total length. Deep asset folders, duplicated import directories, generated names, plugin content, and Cook's output structure all spend characters from the same budget.&lt;/p&gt;

&lt;p&gt;That is why moving a project from a long workspace into a path such as &lt;code&gt;E:\u\work&lt;/code&gt; can reduce risk without guaranteeing success. The generated destination can still cross the legacy &lt;code&gt;MAX_PATH&lt;/code&gt; boundary.&lt;/p&gt;

&lt;p&gt;Short paths remain good build hygiene. They are especially useful when your pipeline includes tools whose long-path behavior is unknown. But they should not hide a misconfigured Windows runner.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Windows setting that changed the outcome
&lt;/h2&gt;

&lt;p&gt;On modern Windows, long paths are not simply enabled for every process by default. Microsoft documents two requirements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The system setting &lt;code&gt;LongPathsEnabled&lt;/code&gt; must be set to &lt;code&gt;1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The application must declare itself &lt;code&gt;longPathAware&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We enabled the system side from an elevated PowerShell session:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;New-ItemProperty&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-LiteralPath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'LongPathsEnabled'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-PropertyType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;DWord&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we verified the effective registry value:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-ItemPropertyValue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-LiteralPath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'LongPathsEnabled'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The expected output is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also configure the equivalent policy through Group Policy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Computer Configuration
  &amp;gt; Administrative Templates
  &amp;gt; System
  &amp;gt; Filesystem
  &amp;gt; Enable Win32 long paths
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After this Windows configuration was applied in our build environment, the Unreal packaging flow returned to normal with the longer asset paths intact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Restarting is part of the change
&lt;/h2&gt;

&lt;p&gt;There is an easy trap here: Windows caches the registry value per process after an affected filesystem function is first called.&lt;/p&gt;

&lt;p&gt;If Unreal Editor, AutomationTool, a build agent, or a long-running sandbox service was already running, changing the registry and immediately retrying inside the same process tree may produce the same failure.&lt;/p&gt;

&lt;p&gt;Restart the affected UE/UAT and worker processes. For a machine image or persistent build runner, rebooting Windows is the clearest way to remove ambiguity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is not a universal one-line fix
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;LongPathsEnabled=1&lt;/code&gt; removes the OS-side limit only for applications that opt in. A packaging chain can include several executables, plugins, archive utilities, and scripts. Any one of them may still impose its own limit.&lt;/p&gt;

&lt;p&gt;If the same error remains after a clean restart, check which layer is rejecting the path:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows/API boundary:&lt;/strong&gt; the executable is not long-path-aware.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unreal validation:&lt;/strong&gt; your UE version or configuration still performs an explicit length check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plugin or third-party tool:&lt;/strong&gt; an intermediate cooker, archiver, or file library still assumes 260 characters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Project content:&lt;/strong&gt; deeply repeated folders or generated filenames make the pipeline unnecessarily fragile.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At that point, shortening paths is still a valid compatibility fallback. For durable content cleanup, move or rename assets inside Unreal Editor and fix redirectors. Do not rename &lt;code&gt;.uasset&lt;/code&gt; files directly in File Explorer.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we verified the real fix
&lt;/h2&gt;

&lt;p&gt;A successful API response that says "job started" is not packaging proof. Neither is the absence of the first long-path message.&lt;/p&gt;

&lt;p&gt;The useful verification sequence is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Keep the original deeply nested asset that reproduced the failure.&lt;/li&gt;
&lt;li&gt;Enable the Windows policy and restart the relevant process tree.&lt;/li&gt;
&lt;li&gt;Run the same &lt;code&gt;BuildCookRun&lt;/code&gt; path again.&lt;/li&gt;
&lt;li&gt;Confirm Cook and AutomationTool complete successfully.&lt;/li&gt;
&lt;li&gt;Confirm the staged or archived build artifact actually exists.&lt;/li&gt;
&lt;li&gt;If your pipeline uploads the artifact, verify that stage separately.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This matters because long-path failures often create secondary messages such as missing Cook content. Fixing the first path error should remove the downstream symptoms, but only the final artifact proves that the whole packaging chain recovered.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we kept after the incident
&lt;/h2&gt;

&lt;p&gt;We did not abandon short build roots after enabling long paths. We kept them as a low-cost safety margin for plugins and external tooling.&lt;/p&gt;

&lt;p&gt;The resulting policy is deliberately layered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable Windows long-path support on every UE build runner.&lt;/li&gt;
&lt;li&gt;Restart or rebuild runners after changing the setting.&lt;/li&gt;
&lt;li&gt;Keep temporary packaging roots shallow.&lt;/li&gt;
&lt;li&gt;Avoid needless directory duplication in imported assets.&lt;/li&gt;
&lt;li&gt;Test the complete Cook, stage, archive, and upload path.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The lesson was not "path length no longer matters." It was that shortening every folder is not a substitute for configuring the operating system that runs the build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation" rel="noopener noreferrer"&gt;Microsoft: Maximum Path Length Limitation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://imzlp.com/posts/25331/" rel="noopener noreferrer"&gt;UE development notes covering the same class of long-path issue&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I work on SEELE AI, and this post comes from maintaining an Unreal packaging workflow. If you want to see the Unreal game-building workflow behind that work, here is the &lt;a href="https://www.seeles.ai/features/create/unreal-game?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=ue5_windows_long_paths"&gt;SEELE AI Unreal game creation page&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;What fixed your worst UE packaging path failure: a shorter root, Windows policy, an Unreal setting, or asset cleanup?&lt;/p&gt;

</description>
      <category>unrealengine</category>
      <category>gamedev</category>
      <category>debugging</category>
      <category>bugsmash</category>
    </item>
    <item>
      <title>Best AI Model for Unreal Engine in 2026? Kimi K3 vs Claude Opus 5 vs Qwen3.8</title>
      <dc:creator>Lewis Liu</dc:creator>
      <pubDate>Sat, 25 Jul 2026 12:26:14 +0000</pubDate>
      <link>https://dev.to/lewisywliu/best-ai-model-for-unreal-engine-in-2026-kimi-k3-vs-claude-opus-5-vs-qwen38-5025</link>
      <guid>https://dev.to/lewisywliu/best-ai-model-for-unreal-engine-in-2026-kimi-k3-vs-claude-opus-5-vs-qwen38-5025</guid>
      <description>&lt;p&gt;&lt;em&gt;Evidence checked on July 25, 2026. This comparison separates vendor claims, general coding evidence, and native Unreal Engine delivery. Those are not the same thing.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Kimi K3, Claude Opus 5, and Qwen3.8-Max-Preview all arrived with unusually strong claims around coding, visual iteration, long-running agents, or 3D creation. That makes one question inevitable for game developers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which AI model is actually best for building an Unreal Engine 5 game?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The short answer is &lt;strong&gt;Claude Opus 5 currently has the strongest public evidence for reliable agentic engineering and 3D reconstruction; Kimi K3 has the clearest first-party claim around playable 3D games and vision-in-the-loop iteration; Qwen3.8-Max-Preview is promising for large, multimodal engineering tasks but remains a preview with no official Unreal delivery proof.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The more important answer is that &lt;strong&gt;none of these model announcements, by itself, proves that the model can deliver a valid native Unreal project, compile Blueprint or C++, cook assets, package a build, and reproduce the result.&lt;/strong&gt; For Unreal work, the execution environment often matters more than a small difference in model intelligence.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR: the Unreal-specific verdict
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Strongest relevant evidence&lt;/th&gt;
&lt;th&gt;Unreal-specific gap&lt;/th&gt;
&lt;th&gt;Best current role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Claude Opus 5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Strong agentic coding, verification, computer use, a successful 3D FreeCAD reconstruction case, and early-user reports of better games and 3D output&lt;/td&gt;
&lt;td&gt;No official native Unreal project or packaging benchmark&lt;/td&gt;
&lt;td&gt;Lead engineering agent for difficult implementation, debugging, and review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Kimi K3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;First-party claim for playable multiplayer and 3D games, native vision, 1M context, long-horizon tool use, and screenshot-driven iteration&lt;/td&gt;
&lt;td&gt;Showcases do not establish &lt;code&gt;.uproject&lt;/code&gt;, Blueprint, C++, cook, or package success&lt;/td&gt;
&lt;td&gt;Long-context, visually iterative game prototyping and tool-driven workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qwen3.8-Max-Preview&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2.4T multimodal preview positioned for repository-scale coding, long tasks, image/video/document understanding, and agent workflows&lt;/td&gt;
&lt;td&gt;Preview status; no official Unreal or native 3D game-delivery evidence&lt;/td&gt;
&lt;td&gt;Cost-aware experimentation, repository analysis, and implementation planning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Other frontier coding models&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Strong general software-engineering and terminal-agent baselines&lt;/td&gt;
&lt;td&gt;General coding scores still do not prove Unreal asset or build validity&lt;/td&gt;
&lt;td&gt;Secondary implementer, reviewer, or fallback inside a controlled harness&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;My practical ranking is therefore task-dependent:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;For difficult code, debugging, and self-verification:&lt;/strong&gt; Claude Opus 5.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For visual iteration and open-ecosystem experimentation:&lt;/strong&gt; Kimi K3.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For large-context, multimodal, cost-sensitive evaluation:&lt;/strong&gt; Qwen3.8-Max-Preview.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For a playable native Unreal result:&lt;/strong&gt; choose the workflow that can actually open Unreal, inspect screenshots and logs, modify the project, and package the build. Do not choose from model marketing alone.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  First, define what “building a 3D game” means
&lt;/h2&gt;

&lt;p&gt;Many impressive AI game demos are browser projects using Three.js, Babylon.js, WebGL, or a custom JavaScript runtime. Those can be excellent results, but they are not Unreal Engine projects.&lt;/p&gt;

&lt;p&gt;A credible Unreal evaluation should require all of the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A valid native project with a &lt;code&gt;.uproject&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;Correct &lt;code&gt;Config&lt;/code&gt;, &lt;code&gt;Content&lt;/code&gt;, &lt;code&gt;Source&lt;/code&gt;, and plugin structure for the chosen scope.&lt;/li&gt;
&lt;li&gt;A map that opens without missing dependencies.&lt;/li&gt;
&lt;li&gt;Working input, camera, collision, and a small gameplay loop.&lt;/li&gt;
&lt;li&gt;Blueprint and C++ that compile where those systems are used.&lt;/li&gt;
&lt;li&gt;Assets that cook correctly for a named target platform.&lt;/li&gt;
&lt;li&gt;A packaged build that launches outside the editor.&lt;/li&gt;
&lt;li&gt;Logs, screenshots, and a reproducible handoff rather than a one-shot video.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Epic's packaging documentation describes &lt;strong&gt;Build, Cook, Stage, Package, Deploy, and Run&lt;/strong&gt; as distinct operations. An attractive screenshot only covers a fraction of that pipeline.&lt;/p&gt;

&lt;p&gt;This distinction is the most important part of the comparison. A frontier model can write excellent C++ and still fail because it cannot see the Unreal editor, resolve an asset reference, regenerate project files, inspect a cook error, or rerun the packaged executable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Release status: what is actually available?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Kimi K3
&lt;/h3&gt;

&lt;p&gt;Moonshot AI introduced &lt;strong&gt;Kimi K3 on July 17, 2026&lt;/strong&gt; as a 2.8-trillion-parameter model with native vision and a 1-million-token context window. K3 is available through Kimi, Kimi Work, Kimi Code, and the Kimi API. Its technical blog says the full model weights are scheduled for release by &lt;strong&gt;July 27, 2026&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That date matters. On July 25, the hosted product and API are available, but “open model” should not be interpreted as “the full weights are already downloadable everywhere.”&lt;/p&gt;

&lt;p&gt;Kimi's most relevant claim is unusually direct: K3 combines 3D reasoning, coding, and vision to create playable interactive experiences, with a &lt;strong&gt;vision-in-the-loop&lt;/strong&gt; workflow that alternates between code and live screenshots. The homepage also explicitly promotes playable multiplayer and 3D game creation.&lt;/p&gt;

&lt;p&gt;This is highly relevant to game development. It is not yet Unreal-specific proof.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Opus 5
&lt;/h3&gt;

&lt;p&gt;Anthropic released &lt;strong&gt;Claude Opus 5 on July 24, 2026&lt;/strong&gt;. It is available through Claude products and the API as &lt;code&gt;claude-opus-5&lt;/code&gt;, at the same base API price Anthropic listed for Opus 4.8.&lt;/p&gt;

&lt;p&gt;The release emphasizes long-running software agents, verification, computer use, professional work, and improved visual output. Two pieces of evidence are particularly relevant to 3D work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In an Anthropic evaluation, Opus 5 reconstructed a machine part as a 3D FreeCAD model after building its own computer-vision pipeline to extract geometry from raw pixels.&lt;/li&gt;
&lt;li&gt;An early-access partner reported the best animations, games, and 3D work they had seen from an Opus model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Opus 5 also places unusual emphasis on checking its own work before reporting success. That behavior is valuable in Unreal, where a model must distinguish “the code looks plausible” from “the editor compiled it and the packaged build launched.”&lt;/p&gt;

&lt;p&gt;Again, neither example is a published native Unreal packaging benchmark.&lt;/p&gt;

&lt;h3&gt;
  
  
  Qwen3.8-Max-Preview
&lt;/h3&gt;

&lt;p&gt;The currently accessible model is &lt;strong&gt;Qwen3.8-Max-Preview&lt;/strong&gt;, not a final open-weight Qwen3.8 release. Alibaba Cloud's developer-community overview describes a 2.4-trillion-parameter multimodal preview for engineering, long-running agents, large repositories, and image, video, and document understanding. It is available through selected Alibaba/Qwen coding and API surfaces, while the final weights remain future-facing.&lt;/p&gt;

&lt;p&gt;Qwen's current public positioning is strongest around general engineering and WebDev. That can transfer to Unreal tasks such as reading a C++ module, proposing a subsystem architecture, refactoring build scripts, or interpreting screenshots. But I could not find an official claim that Qwen3.8 generates native &lt;code&gt;.uproject&lt;/code&gt; files, compiles Blueprint graphs, cooks assets, or packages a production Unreal build.&lt;/p&gt;

&lt;p&gt;Treat it as a promising preview, not a proven Unreal generator.&lt;/p&gt;

&lt;h2&gt;
  
  
  The readiness matrix: claims versus Unreal delivery
&lt;/h2&gt;

&lt;p&gt;The labels below are evidence grades, not synthetic benchmark scores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Strong:&lt;/strong&gt; directly supported by a current first-party release or concrete case.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Moderate:&lt;/strong&gt; supported indirectly by adjacent capabilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unproven:&lt;/strong&gt; no current public evidence specific to the requirement.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Claude Opus 5&lt;/th&gt;
&lt;th&gt;Kimi K3&lt;/th&gt;
&lt;th&gt;Qwen3.8-Max-Preview&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Long-horizon coding&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Strong&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Strong&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Moderate–Strong&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visual/screenshot iteration&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Strong&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Strong&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Moderate&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3D creation evidence&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Strong&lt;/strong&gt;, via FreeCAD case and partner reports&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Strong&lt;/strong&gt;, via first-party 3D/game claims&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Moderate&lt;/strong&gt;, via multimodal/WebDev transfer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Large repository reasoning&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Strong&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Strong&lt;/strong&gt;, 1M context&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Strong&lt;/strong&gt; in current positioning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool/terminal orchestration&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Strong&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Strong&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Moderate–Strong&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native &lt;code&gt;.uproject&lt;/code&gt; generation&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Unproven&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Unproven&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Unproven&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blueprint asset compilation&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Unproven&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Unproven&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Unproven&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unreal C++ build success&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Unproven&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Unproven&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Unproven&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cook/package/launch proof&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Unproven&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Unproven&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Unproven&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This table is intentionally conservative. General coding benchmarks can help predict performance, but they do not test binary assets, editor-only APIs, plugin compatibility, shader compilation, cook rules, target SDKs, or packaged runtime behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  How each model is likely to behave in an Unreal workflow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Claude Opus 5: the strongest engineering lead
&lt;/h3&gt;

&lt;p&gt;Opus 5 looks best suited to tasks where judgment matters more than raw generation volume:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tracing a multi-module Unreal C++ bug;&lt;/li&gt;
&lt;li&gt;questioning an unsafe architecture before editing;&lt;/li&gt;
&lt;li&gt;planning a Gameplay Ability System implementation;&lt;/li&gt;
&lt;li&gt;interpreting build, cook, and runtime logs;&lt;/li&gt;
&lt;li&gt;checking whether a fix addresses the root cause;&lt;/li&gt;
&lt;li&gt;iterating with screenshots and tool output;&lt;/li&gt;
&lt;li&gt;reviewing a handoff before claiming completion.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Its biggest advantage is not that it can draw the prettiest 3D scene. It is the combination of coding, computer use, iteration, and verification.&lt;/p&gt;

&lt;p&gt;The risk is assuming this automatically gives it Unreal asset access. A language model cannot reliably create or repair binary &lt;code&gt;.uasset&lt;/code&gt; files without an engine-aware tool path. Give it Unreal, source control, logs, screenshots, and explicit pass/fail checks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kimi K3: the strongest 3D-native claim
&lt;/h3&gt;

&lt;p&gt;K3 has the clearest vendor claim around playable 3D creation. Its native vision, long context, terminal orchestration, and screenshot loop are a good match for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;creating a playable prototype over a long session;&lt;/li&gt;
&lt;li&gt;iterating on composition, navigation, and visual defects;&lt;/li&gt;
&lt;li&gt;retaining a large design brief plus repository context;&lt;/li&gt;
&lt;li&gt;coordinating code, research, asset preparation, and testing;&lt;/li&gt;
&lt;li&gt;working through a game-development task with minimal supervision.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;K3's published limitations are also relevant. Moonshot warns that quality may become unstable if a harness does not preserve the expected thinking history, and that the model can be excessively proactive when instructions are ambiguous. In an Unreal workspace, that means permissions, file boundaries, plugin policy, allowed commands, and packaging targets should be explicit.&lt;/p&gt;

&lt;p&gt;K3 may be an excellent engine inside a game-building agent. The current evidence still does not show that the base model alone is an Unreal pipeline.&lt;/p&gt;

&lt;h3&gt;
  
  
  Qwen3.8-Max-Preview: promising, but evaluate the preview as a preview
&lt;/h3&gt;

&lt;p&gt;Qwen3.8-Max-Preview is attractive when the task contains a very large repository, mixed documents and visuals, or many repeated engineering operations. Possible Unreal uses include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reading project source, configuration, build files, and technical design documents together;&lt;/li&gt;
&lt;li&gt;generating C++ or automation scripts under a review loop;&lt;/li&gt;
&lt;li&gt;analyzing screenshots, logs, and specifications;&lt;/li&gt;
&lt;li&gt;planning migrations or repository-wide changes;&lt;/li&gt;
&lt;li&gt;running cheaper exploratory passes before a stronger verifier reviews the result.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The problem is evidence maturity. The public material I found emphasizes preview access, general engineering, long agents, and WebDev—not a repeatable Unreal result. Until the final release, model card, and native engine tests are available, Qwen3.8 should be evaluated with stricter checkpoints rather than broader claims.&lt;/p&gt;

&lt;h2&gt;
  
  
  A reproducible Unreal benchmark that would actually matter
&lt;/h2&gt;

&lt;p&gt;If you want to compare models fairly, give each one the same environment, prompt, time budget, tool permissions, and clean Unreal project.&lt;/p&gt;

&lt;p&gt;Here is a compact benchmark:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build a small third-person Unreal 5 game in which the player explores a mountain-and-water environment, reaches three checkpoints, and sees a completion screen. Use only redistributable or generated assets. Add a restart action, package for Windows, launch the packaged build, and provide the project, build logs, runtime logs, and five screenshots.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Score it with observable gates:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Gate&lt;/th&gt;
&lt;th&gt;Pass condition&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project validity&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;.uproject&lt;/code&gt; opens in the specified Unreal version&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dependency integrity&lt;/td&gt;
&lt;td&gt;No missing plugin, module, map, or asset references&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gameplay&lt;/td&gt;
&lt;td&gt;Movement, camera, checkpoints, completion, and restart work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code health&lt;/td&gt;
&lt;td&gt;Blueprint and C++ compile without blocking errors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visual review&lt;/td&gt;
&lt;td&gt;Screenshots show the intended scene and readable UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Packaging&lt;/td&gt;
&lt;td&gt;Build, cook, stage, and package complete&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Runtime&lt;/td&gt;
&lt;td&gt;Packaged executable launches and completes the loop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reproducibility&lt;/td&gt;
&lt;td&gt;A second run from clean state produces the same result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Handoff&lt;/td&gt;
&lt;td&gt;Source project, logs, build, assets, and rights notes are present&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Record the number of human interventions, tool calls, elapsed time, retries, and unresolved warnings. That will tell you more than a model's generic coding rank.&lt;/p&gt;

&lt;h2&gt;
  
  
  So which model should an Unreal developer choose?
&lt;/h2&gt;

&lt;p&gt;Choose &lt;strong&gt;Claude Opus 5&lt;/strong&gt; when you already have a capable tool environment and need the strongest current engineering judgment, difficult debugging, or careful verification.&lt;/p&gt;

&lt;p&gt;Choose &lt;strong&gt;Kimi K3&lt;/strong&gt; when visual iteration, long context, and 3D/game experimentation are central—and when your harness can preserve its expected history and constrain its autonomy.&lt;/p&gt;

&lt;p&gt;Choose &lt;strong&gt;Qwen3.8-Max-Preview&lt;/strong&gt; when you want to evaluate a large multimodal model for repository analysis, automation, or cost-sensitive exploration, while accepting preview risk and the lack of native Unreal proof.&lt;/p&gt;

&lt;p&gt;For serious work, a multi-model pipeline may be better: one model drafts and implements, another reviews the change, while Unreal itself remains the source of truth through compile, cook, package, and runtime tests.&lt;/p&gt;

&lt;h2&gt;
  
  
  The deeper conclusion: the harness beats the headline
&lt;/h2&gt;

&lt;p&gt;The 2026 model race is making 3D demos faster and more impressive. But Unreal game development is not one generation step. It is a feedback loop across source code, Blueprints, assets, editor state, logs, rendering, performance, packaging, and runtime behavior.&lt;/p&gt;

&lt;p&gt;The best Unreal AI system is therefore not automatically the model with the largest parameter count or the most attractive demo. It is the system that can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;create a native project;&lt;/li&gt;
&lt;li&gt;observe the real editor and runtime;&lt;/li&gt;
&lt;li&gt;repair failures using logs and screenshots;&lt;/li&gt;
&lt;li&gt;package and launch the result;&lt;/li&gt;
&lt;li&gt;return editable artifacts with honest limitations.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you want to evaluate that complete workflow rather than another isolated model claim, &lt;strong&gt;&lt;a href="https://www.seeles.ai/features/create/unreal-game?utm_source=dev_to&amp;amp;utm_medium=community&amp;amp;utm_campaign=ai_model_unreal_comparison&amp;amp;utm_content=article_cta" rel="noopener noreferrer"&gt;SEELE AI provides a native Unreal 5 project workflow with browser preview, packaging, and local download&lt;/a&gt;&lt;/strong&gt;. It is an independent product and is not affiliated with or endorsed by Epic Games. Generated projects, third-party assets, plugins, platform requirements, and release readiness still require review.&lt;/p&gt;

&lt;p&gt;That link is included as a practical test option, not as evidence that one underlying model “wins” this comparison.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources and methodology
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.kimi.com/blog/kimi-k3" rel="noopener noreferrer"&gt;Kimi K3: Open Frontier Intelligence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.anthropic.com/news/claude-opus-5" rel="noopener noreferrer"&gt;Introducing Claude Opus 5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://qwen.ai/home" rel="noopener noreferrer"&gt;Qwen Studio official product page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.aliyun.com/article/1749290" rel="noopener noreferrer"&gt;Alibaba Cloud developer-community overview of Qwen3.8-Max-Preview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.epicgames.com/documentation/en-us/unreal-engine/packaging-your-project" rel="noopener noreferrer"&gt;Epic Games: Packaging Unreal Engine Projects&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I prioritized current first-party sources, dated every time-sensitive claim, and marked capabilities as unproven when I could not find public Unreal-specific evidence. Vendor benchmarks and customer quotes are useful signals, but they are not a substitute for an identical, independently run Unreal benchmark.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: AI tools assisted with source collection and article drafting. The capability boundaries, model status, and linked sources were reviewed against the pages listed above on July 25, 2026.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>unrealengine</category>
      <category>gamedev</category>
      <category>llm</category>
      <category>ai</category>
    </item>
    <item>
      <title>We Open-Sourced a Seeded UE5 Village Generator — Here’s the C++ Pipeline</title>
      <dc:creator>Lewis Liu</dc:creator>
      <pubDate>Sat, 18 Jul 2026 04:05:51 +0000</pubDate>
      <link>https://dev.to/lewisywliu/how-we-built-a-seeded-procedural-region-generator-in-unreal-engine-5-4ahe</link>
      <guid>https://dev.to/lewisywliu/how-we-built-a-seeded-procedural-region-generator-in-unreal-engine-5-4ahe</guid>
      <description>&lt;p&gt;Randomly scattering meshes is easy. Generating a village that follows the terrain, avoids obvious overlaps, stays art-directable, and can be reproduced from a seed is the harder problem.&lt;/p&gt;

&lt;p&gt;We open-sourced the solution as &lt;a href="https://github.com/SeeleAI/seele-scatter-regions" rel="noopener noreferrer"&gt;Seele Scatter Regions&lt;/a&gt;, an MIT-licensed Unreal Engine 5.5 editor plugin developed by &lt;a href="https://www.seeles.ai/" rel="noopener noreferrer"&gt;SEELE AI&lt;/a&gt;. It generates villages, farms, and cemeteries from project-owned Static Mesh recipes without depending on Unreal Engine's PCG framework.&lt;/p&gt;

&lt;p&gt;The repository includes the public C++ source, Blueprint-callable editor tooling, a JSON automation path, packaging validation, and a &lt;a href="https://github.com/SeeleAI/seele-scatter-regions/releases/tag/v0.1.0" rel="noopener noreferrer"&gt;UE5.5 release&lt;/a&gt;. This article walks through how those pieces fit together.&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%2Fimages.weserv.nl%2F%3Furl%3Dhttps%253A%252F%252Fraw.githubusercontent.com%252FSeeleAI%252Fseele-scatter-regions%252Fmain%252FDocs%252Fimages%252Fseele-scatter-regions-banner.png%26w%3D600%26h%3D180%26fit%3Dcover%26output%3Dwebp%26q%3D75" 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%2Fimages.weserv.nl%2F%3Furl%3Dhttps%253A%252F%252Fraw.githubusercontent.com%252FSeeleAI%252Fseele-scatter-regions%252Fmain%252FDocs%252Fimages%252Fseele-scatter-regions-banner.png%26w%3D600%26h%3D180%26fit%3Dcover%26output%3Dwebp%26q%3D75" alt="Seele Scatter Regions generating villages, farms, and cemeteries in Unreal Engine 5" width="600" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This post walks through the current C++ implementation: how recipe assets become topology, how candidate points are filtered into believable layouts, how instances are projected onto Landscape, and how the generator exposes enough telemetry to be automated safely.&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%2Fimages.weserv.nl%2F%3Furl%3Dhttps%253A%252F%252Fraw.githubusercontent.com%252FSeeleAI%252Fseele-scatter-regions%252Fmain%252FDocs%252Fimages%252Fjiangnan-scatter-region-preview.png%26w%3D800%26h%3D450%26fit%3Dcover%26output%3Dwebp%26q%3D80" 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%2Fimages.weserv.nl%2F%3Furl%3Dhttps%253A%252F%252Fraw.githubusercontent.com%252FSeeleAI%252Fseele-scatter-regions%252Fmain%252FDocs%252Fimages%252Fjiangnan-scatter-region-preview.png%26w%3D800%26h%3D450%26fit%3Dcover%26output%3Dwebp%26q%3D80" alt="A village generated by Seele Scatter Regions on an Unreal Engine Landscape" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Current scope: beta &lt;code&gt;0.1.0&lt;/code&gt;, Unreal Engine 5.5, editor-side generation, and C++ projects.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The actual problem: controlled randomness
&lt;/h2&gt;

&lt;p&gt;A useful procedural tool needs more than a random position and yaw. We wanted five properties:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Repeatability&lt;/strong&gt; — the same seed should reproduce the layout when the recipe and scene are unchanged.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Art direction&lt;/strong&gt; — artists should provide meshes, weights, density, and scale without recompiling C++.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spatial logic&lt;/strong&gt; — roads, buildings, fields, tombs, gates, and props need different placement rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terrain awareness&lt;/strong&gt; — generated content must land on Landscape instead of floating at the input Z.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automation-friendly results&lt;/strong&gt; — callers need structured counts, warnings, bounds, and errors, not just a log line.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The implementation became a pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;JSON / C++ input
        ↓
Recipe Data Asset
        ↓
Seeded boundary + road topology
        ↓
Candidate point generation
        ↓
Density, distance, slope, and collision filters
        ↓
Landscape projection
        ↓
Instanced Static Mesh components
        ↓
Structured generation result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important design decision is that randomness is only one stage. Most of the believable result comes from constraints applied after candidate generation.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Put art direction in recipe assets
&lt;/h2&gt;

&lt;p&gt;The public recipe starts with a small piece of shared mesh data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;USTRUCT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;FScatterRegionMeshRecipeData&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;GENERATED_BODY&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;UPROPERTY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EditAnywhere&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BlueprintReadOnly&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;TSoftObjectPtr&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;UStaticMesh&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Mesh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;UPROPERTY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EditAnywhere&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BlueprintReadOnly&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;FVector&lt;/span&gt; &lt;span class="n"&gt;ScaleMin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FVector&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;OneVector&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;UPROPERTY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EditAnywhere&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BlueprintReadOnly&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;FVector&lt;/span&gt; &lt;span class="n"&gt;ScaleMax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FVector&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;OneVector&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;UPROPERTY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EditAnywhere&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BlueprintReadOnly&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;bUniformScale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;UPROPERTY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EditAnywhere&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BlueprintReadOnly&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;meta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClampMin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.0"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;Weight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A &lt;code&gt;UScatterRegionRecipeDataAsset&lt;/code&gt; then exposes type-specific slots:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Village:&lt;/strong&gt; weighted building slots, local props, fence, gate, road, roadside props, and scatter props&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Farm:&lt;/strong&gt; road, dirt tiles, crops, and scarecrows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cemetery:&lt;/strong&gt; road, tombs, and a memorial/panteon slot&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The asset normalizes its slot layout in the constructor, &lt;code&gt;PostLoad&lt;/code&gt;, and &lt;code&gt;PostEditChangeProperty&lt;/code&gt;. When the region type changes, irrelevant slots disappear and the expected slots are restored.&lt;/p&gt;

&lt;p&gt;This gives us a stable contract without hard-coding production art. The open-source repository includes lightweight recipes using Unreal's Basic Shapes, while real projects can duplicate a recipe and assign their own assets.&lt;/p&gt;

&lt;p&gt;Soft object references matter here: recipes can describe content without eagerly loading every mesh. At generation time, the compiler resolves the selected recipe, validates its slots, loads meshes synchronously, and converts the author-facing data into a compact internal representation.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. A seed should control topology, not only decoration
&lt;/h2&gt;

&lt;p&gt;Every random choice flows through one &lt;code&gt;FRandomStream&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;FRandomStream&lt;/span&gt; &lt;span class="nf"&gt;Stream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Spec&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Seed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Spec&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RegionType&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"farm"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;GenerateFarm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Spec&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Recipe&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Stream&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Spec&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RegionType&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"cemetery"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;GenerateCemetery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Spec&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Recipe&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Stream&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;GenerateVillage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Spec&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Recipe&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Stream&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The seed influences boundary irregularity, road bends, branch placement, building selection, density filtering, mesh weights, position jitter, yaw, and scale. This is more useful than applying a seed only to the final prop scatter: the large-scale composition is reproducible too.&lt;/p&gt;

&lt;p&gt;For villages, the generator builds a smoothed closed boundary, chooses a gate along the boundary, and grows the road graph inward from that gate. The primary road is made from short quadratic Bézier segments; secondary branches search for valid endpoints inside the polygon.&lt;/p&gt;

&lt;p&gt;In simplified form:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;FVector2D&lt;/span&gt; &lt;span class="n"&gt;Control&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Start&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;End&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="n"&gt;Normal&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Stream&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FRandRange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;BendStrengthCm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BendStrengthCm&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;int32&lt;/span&gt; &lt;span class="n"&gt;Index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Index&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;SegmentCount&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;Index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;static_cast&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;SegmentCount&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;FVector2D&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FMath&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Lerp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Control&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;FVector2D&lt;/span&gt; &lt;span class="n"&gt;B&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FMath&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Lerp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Control&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;End&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;FVector2D&lt;/span&gt; &lt;span class="n"&gt;Current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FMath&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Lerp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Segments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MakeRoadSegment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Previous&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bPrimary&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="n"&gt;Previous&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Current&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result is deterministic but not rigidly grid-shaped.&lt;/p&gt;

&lt;p&gt;There is one important caveat: deterministic generation means &lt;strong&gt;same seed + same recipe + same scene state&lt;/strong&gt;. If the Landscape or mesh bounds change, projection and collision decisions can change as well. The seed makes a build reproducible; it does not freeze the world around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Treat placement as a point-processing pipeline
&lt;/h2&gt;

&lt;p&gt;The reusable core is a lightweight graph-point structure containing location, yaw, density, bounds radius, Z offset, and a scale multiplier.&lt;/p&gt;

&lt;p&gt;Instead of placing a mesh immediately, each region strategy creates candidate points and runs them through small transforms. The village roadside-prop path is a good example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;SidePropPoints&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ScatterRegionDensityFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;SidePropPoints&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Stream&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;SidePropPoints&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ScatterRegionDifferenceAgainstRoads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;SidePropPoints&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;RoadSegments&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;MinRoadDistance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;MaxRoadDistance&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;SidePropPoints&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ScatterRegionDifferenceAgainstPlacements&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;SidePropPoints&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;BuildingPlacements&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;BuildingClearance&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;SidePropPoints&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ScatterRegionSelfPruning&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;SidePropPoints&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Stream&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;MinimumSpacing&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;ScatterRegionLookAtRoad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SidePropPoints&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;RoadSegments&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;ScatterRegionTransformPoints&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;SidePropPoints&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Stream&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="mf"&gt;80.0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;          &lt;span class="c1"&gt;// position jitter in cm&lt;/span&gt;
    &lt;span class="mf"&gt;12.0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;          &lt;span class="c1"&gt;// yaw jitter in degrees&lt;/span&gt;
    &lt;span class="n"&gt;FVector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.85&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;FVector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.15&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each operation has one job:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Density filter&lt;/strong&gt; accepts points probabilistically from recipe density.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Difference against roads&lt;/strong&gt; enforces a minimum and optional maximum road distance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Difference against placements&lt;/strong&gt; keeps props away from buildings or reserved landmarks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-pruning&lt;/strong&gt; rejects candidates that are too close to already accepted points.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Look-at-road&lt;/strong&gt; rotates a point toward its nearest road segment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transform&lt;/strong&gt; adds controlled position, yaw, and scale variation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Collision reservation uses mesh bounds when available, so a large building and a small prop do not consume the same amount of space.&lt;/p&gt;

&lt;p&gt;This pipeline is the heart of the system. Region generators can create very different candidate sets while reusing the same constraints.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Project every accepted instance onto Landscape
&lt;/h2&gt;

&lt;p&gt;Candidate generation happens in local XY space around a root actor. Before an instance is committed, the plugin traces vertically through the editor world:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;FVector&lt;/span&gt; &lt;span class="nf"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;WorldXY&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;WorldXY&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Center&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;LocalLocation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;200000.0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;FVector&lt;/span&gt; &lt;span class="nf"&gt;End&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;WorldXY&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;WorldXY&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Center&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;LocalLocation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;200000.0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;TArray&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;FHitResult&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Hits&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;World&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;LineTraceMultiByChannel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;Hits&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;End&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ECC_Visibility&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;QueryParams&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;FHitResult&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;Hit&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Hits&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IsLandscapeTraceHit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Hit&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;OutLocalLocation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
            &lt;span class="n"&gt;Hit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ImpactPoint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Center&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ProjectionHits&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The trace ignores the root actor and actors tagged as previously generated regions. Without that, later generations could project onto earlier generated meshes instead of the Landscape.&lt;/p&gt;

&lt;p&gt;After projection, the mesh is grounded using its bounds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;Location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;GroundedZ&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RecipeMesh&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Scale&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;VerticalOffsetCm&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The generator tracks projection attempts, hits, and misses. A complete miss becomes a warning rather than silently producing a misleading "success."&lt;/p&gt;

&lt;p&gt;Slope checks reuse Landscape samples around building or memorial candidates. That lets large semantic objects be rejected on steep terrain before they are committed.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Batch output with Instanced Static Mesh components
&lt;/h2&gt;

&lt;p&gt;Spawning one Actor per crop, tomb, or fence segment would create unnecessary editor and rendering overhead. The plugin groups instances by &lt;strong&gt;slot + mesh path&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;FString&lt;/span&gt; &lt;span class="n"&gt;ComponentKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Slot&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"|"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;RecipeMesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UInstancedStaticMeshComponent&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="n"&gt;Existing&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
        &lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Components&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ComponentKey&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Existing&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;UInstancedStaticMeshComponent&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Component&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
    &lt;span class="n"&gt;NewObject&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;UInstancedStaticMeshComponent&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RootActor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;ComponentName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;Component&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SetStaticMesh&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RecipeMesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Mesh&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Component&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;AttachToComponent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RootActor&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;GetRootComponent&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="n"&gt;FAttachmentTransformRules&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;KeepRelativeTransform&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every accepted transform is added to the matching &lt;code&gt;UInstancedStaticMeshComponent&lt;/code&gt;. The generated region remains one tagged root actor with a manageable component set, while slot counts and world bounds are updated as instances are added.&lt;/p&gt;

&lt;p&gt;We have deliberately not attached a benchmark number to this design: performance depends on meshes, materials, instance counts, and the target machine. The architectural benefit is still concrete—thousands of repeated objects do not become thousands of Actors.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Three content grammars, one infrastructure
&lt;/h2&gt;

&lt;p&gt;The generators share recipes, random streams, point filters, projection, collision reservation, output components, and telemetry. What differs is the content grammar.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Region&lt;/th&gt;
&lt;th&gt;Topology&lt;/th&gt;
&lt;th&gt;Main placement rules&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Village&lt;/td&gt;
&lt;td&gt;Irregular boundary, gate-rooted main road, bent branches&lt;/td&gt;
&lt;td&gt;Road-facing building clusters, local props, perimeter fence/gate, roadside and free scatter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Farm&lt;/td&gt;
&lt;td&gt;Closed boundary, two-lane access roads, tiled fields&lt;/td&gt;
&lt;td&gt;Dirt tiles avoid road footprints; crops sit above dirt; scarecrows are density-filtered and spaced&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cemetery&lt;/td&gt;
&lt;td&gt;Closed boundary and access paths&lt;/td&gt;
&lt;td&gt;Memorials reserve exclusion zones; tomb grids avoid roads and memorials, then self-prune&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This separation is valuable. A "universal" random scatter function would bury these differences in flags. Three small domain strategies over shared primitives are easier to reason about and extend.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Make the generator safe to automate
&lt;/h2&gt;

&lt;p&gt;The same generator can be called from C++, a Blueprint-callable Editor Subsystem, or a JSON adapter.&lt;/p&gt;

&lt;p&gt;A request looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"region_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"village"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"center"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;75000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;37000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"size_m"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;76101&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"recipe_asset"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/Game/MyRecipes/DA_Village.DA_Village"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The public command is &lt;code&gt;generate_scatter_region&lt;/code&gt;. Inputs are validated before the world is touched:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;region type must be &lt;code&gt;village&lt;/code&gt;, &lt;code&gt;farm&lt;/code&gt;, or &lt;code&gt;cemetery&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;size is clamped to 20–1000 meters&lt;/li&gt;
&lt;li&gt;a recipe asset path is required&lt;/li&gt;
&lt;li&gt;generation is rejected when PIE is active&lt;/li&gt;
&lt;li&gt;the editor world must be initialized and available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result reports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;success&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;generated actor name&lt;/li&gt;
&lt;li&gt;instance and component counts&lt;/li&gt;
&lt;li&gt;per-slot counts&lt;/li&gt;
&lt;li&gt;projection attempts, hits, and misses&lt;/li&gt;
&lt;li&gt;generated bounds&lt;/li&gt;
&lt;li&gt;warnings and structured errors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That observability is not just polish. It lets an automation client distinguish "the command returned" from "a useful region was actually generated."&lt;/p&gt;

&lt;p&gt;A practical success check is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;success == true
region_actor is not empty
instance_count &amp;gt; 0
projection_hits &amp;gt; 0 when Landscape projection is expected
errors is empty
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What we learned
&lt;/h2&gt;

&lt;p&gt;A few design lessons survived every iteration:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Randomness is an input, not the architecture.&lt;/strong&gt; The spatial constraints do most of the work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Determinism must include topology.&lt;/strong&gt; Reproducing only prop jitter is not enough when roads and clusters define the composition.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authored data and generation logic should evolve separately.&lt;/strong&gt; Recipe assets let artists replace meshes and tune density without turning the generator into project-specific code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Telemetry belongs in the public API.&lt;/strong&gt; Counts, bounds, warnings, and projection statistics make editor automation debuggable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scope should be explicit.&lt;/strong&gt; Version 0.1.0 generates in the editor, not at packaged-game runtime. The generated actor and instanced components can be saved with the edited level.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it or read the source
&lt;/h2&gt;

&lt;p&gt;Seele Scatter Regions is MIT-licensed and open source:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/SeeleAI/seele-scatter-regions" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SeeleAI/seele-scatter-regions/blob/main/Docs/quickstart.md" rel="noopener noreferrer"&gt;Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SeeleAI/seele-scatter-regions/blob/main/Docs/generation-api.md" rel="noopener noreferrer"&gt;Generation API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SeeleAI/seele-scatter-regions/blob/main/Docs/recipe-assets.md" rel="noopener noreferrer"&gt;Recipe assets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are building procedural tools in Unreal Engine, I would be interested to hear how you balance deterministic generation, designer control, and terrain constraints—especially if you have taken a PCG-based or runtime-first approach.&lt;/p&gt;

</description>
      <category>unrealengine</category>
      <category>cpp</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
    <item>
      <title>A website that counts open source model tokens online is recommended</title>
      <dc:creator>Lewis Liu</dc:creator>
      <pubDate>Sat, 17 Aug 2024 10:18:42 +0000</pubDate>
      <link>https://dev.to/lewisywliu/a-website-that-counts-open-source-model-tokens-online-is-recommended-334k</link>
      <guid>https://dev.to/lewisywliu/a-website-that-counts-open-source-model-tokens-online-is-recommended-334k</guid>
      <description>&lt;p&gt;Still wondering how to count tokens for the open source model? &lt;/p&gt;

&lt;p&gt;Today, I recommend a web tool whose main function is to count tokens for open source models that currently support both Mistral and Llama2 models.&lt;/p&gt;

&lt;p&gt;web links：&lt;a href="//toolai.fun"&gt;toolai.fun&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using this web tool is very simple. Just select the corresponding model, enter the characters, the system will automatically calculate the number of tokens, and provide intuitive results display. This not only saves the user's manual calculation time, but also improves the work efficiency.&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.amazonaws.com%2Fuploads%2Farticles%2Fp2tad3c0rs471g512aye.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.amazonaws.com%2Fuploads%2Farticles%2Fp2tad3c0rs471g512aye.png" alt="preview" width="800" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you need it, save it and use it &lt;a href="//toolai.fun"&gt;toolai.fun&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mistral</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
