<?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>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>
