<?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>Forem: Charles Zhang</title>
    <description>The latest articles on Forem by Charles Zhang (@nfc-charles).</description>
    <link>https://forem.com/nfc-charles</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3351397%2Fff83d852-017f-482f-9bac-9d7aaed1246e.png</url>
      <title>Forem: Charles Zhang</title>
      <link>https://forem.com/nfc-charles</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/nfc-charles"/>
    <language>en</language>
    <item>
      <title>Observation 20251110: Cities: Skylines II</title>
      <dc:creator>Charles Zhang</dc:creator>
      <pubDate>Mon, 10 Nov 2025 13:26:10 +0000</pubDate>
      <link>https://forem.com/nfc-charles/observation-20251110-cities-skylines-ii-37e0</link>
      <guid>https://forem.com/nfc-charles/observation-20251110-cities-skylines-ii-37e0</guid>
      <description>&lt;p&gt;Commercial game: costs lots of money, no doc, hard to mod, no data transparency, no user guide, learning is hard, takes lots of effort to make things, end result is not mine.&lt;/p&gt;

&lt;p&gt;Open source (if available): well documented, source available, data transparent and easily edited externally, do whatever you want.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Observation 20251109: Genie 3</title>
      <dc:creator>Charles Zhang</dc:creator>
      <pubDate>Sun, 09 Nov 2025 18:37:40 +0000</pubDate>
      <link>https://forem.com/nfc-charles/observation-20251109-1ci8</link>
      <guid>https://forem.com/nfc-charles/observation-20251109-1ci8</guid>
      <description>&lt;p&gt;Here is a simple way to understand Google's Genie 3 - it's Image-to-Video at real time with automatic directional prompts.&lt;/p&gt;

&lt;p&gt;It will become useful when retention span is 1 hour - at which time human operators will be able to extract meaningful information from the generated result.&lt;/p&gt;

&lt;p&gt;A simpler approach though, would be to &lt;strong&gt;allow existing image generators to perform such spatial manipulations on images directly&lt;/strong&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>DevLog 20250921 HD World Base Map</title>
      <dc:creator>Charles Zhang</dc:creator>
      <pubDate>Sun, 21 Sep 2025 14:25:55 +0000</pubDate>
      <link>https://forem.com/nfc-charles/devlog-20250921-hd-world-base-map-2f80</link>
      <guid>https://forem.com/nfc-charles/devlog-20250921-hd-world-base-map-2f80</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;High resolution base map workflow with &lt;a href="https://methodox.itch.io/fantasy-planet-painter" rel="noopener noreferrer"&gt;Fantasy Planet Painter&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Base (edit) map&lt;/li&gt;
&lt;li&gt;High-res export&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&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%2Ffr6j3kpdyv7eq3kv69l9.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%2Ffr6j3kpdyv7eq3kv69l9.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&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%2F95gm34tvm33qcnvudw1q.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%2F95gm34tvm33qcnvudw1q.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&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%2F1nxw6zdb9mefhac4eg6f.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%2F1nxw6zdb9mefhac4eg6f.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&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%2Fh2da5l045h11unyjapy5.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%2Fh2da5l045h11unyjapy5.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A significant improvement is the sense of scale - previously at low resolution it seemed &lt;strong&gt;a pixel represents a single mountain&lt;/strong&gt;, while now it's clear &lt;strong&gt;&lt;em&gt;a single pixel represents a mountain range&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remarks
&lt;/h2&gt;

&lt;p&gt;From here we can speculate that for the purpose of having accurate sense of scale, we should generate maps at such resolution that it's clear from the variation of the height the final pixel represent corresponding geographical features at corresponding scale.&lt;/p&gt;

</description>
      <category>fantasyplantpainter</category>
      <category>projectnine</category>
      <category>worldmap</category>
      <category>gis</category>
    </item>
    <item>
      <title>DevLog 20250917: Godot Limitations and Rendering Challenges</title>
      <dc:creator>Charles Zhang</dc:creator>
      <pubDate>Thu, 18 Sep 2025 18:48:25 +0000</pubDate>
      <link>https://forem.com/nfc-charles/devlog-20250917-godot-limitations-and-rendering-challenges-4j3o</link>
      <guid>https://forem.com/nfc-charles/devlog-20250917-godot-limitations-and-rendering-challenges-4j3o</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;Today I had a simple idea: to recreate a CryEngine-era starter template island (it's strange that all those CryEngine goodies have vanished - otherwise I'd just link a YouTube video) in Godot, as a kind of inspirational playground.&lt;/p&gt;

&lt;p&gt;A modern equivalent would be something like this &lt;a href="https://80.lv/articles/craft-cinematic-open-world-landscapes-with-this-ue5-pack" rel="noopener noreferrer"&gt;open-world landscape environment&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The idea itself is straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A 2 km x 2 km island&lt;/li&gt;
&lt;li&gt;Millions of trees (tall, short, and shrubs)&lt;/li&gt;
&lt;li&gt;An ocean&lt;/li&gt;
&lt;li&gt;A sky&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Challenge
&lt;/h2&gt;

&lt;p&gt;Creating the island itself was easy. The problem came when I tried instancing around 10,000 trees. Each tree mesh had about 240K faces, and even in Blender, instancing them with linked copies slowed the editor to a crawl (not surprising, though I had forgotten how slow Blender can get - that's why I once experimented with Clarisse).&lt;/p&gt;

&lt;p&gt;Importing that into Godot proved impossible: the .blend file was only 6 Mb, and the editor just hung.&lt;/p&gt;

&lt;p&gt;When comparing 5,000 &lt;code&gt;MeshInstance3D&lt;/code&gt; objects with 5,000 instances in a &lt;code&gt;MultiMeshInstance3D&lt;/code&gt;, the performance gain was minimal. This reminded me of a fundamental problem I'd almost forgotten: even if you reduce draw calls, fragment shading still happens, and rendering all those meshes at once causes severe overdraw.&lt;/p&gt;

&lt;p&gt;So, does this mean densely populated environments are not trivial in Godot? I do miss Unreal's shadow quality, but when it comes to large worlds, its automatic HLOD optimizations start to look tempting again.&lt;/p&gt;

&lt;p&gt;Then I remembered all the headaches with Nanite, Lumen, and other Unreal frustrations.&lt;/p&gt;

&lt;p&gt;Am I doomed?&lt;/p&gt;

&lt;h2&gt;
  
  
  Future Work
&lt;/h2&gt;

&lt;p&gt;As it turns out, Godot does support &lt;a href="https://docs.godotengine.org/en/stable/tutorials/3d/visibility_ranges.html" rel="noopener noreferrer"&gt;HLOD&lt;/a&gt;, along with plenty of &lt;a href="https://docs.godotengine.org/en/stable/tutorials/3d/index.html#optimization" rel="noopener noreferrer"&gt;optimization options&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ultimately, everything depends on the purpose and final effect. There's no free lunch. This also highlights how little raw GPU processing power has advanced for single workloads - despite the massive petaflops of modern DGX systems, most of that is geared toward distributed or server-scale computing.&lt;/p&gt;

&lt;p&gt;If the goal is a stylized, large-scale world with detailed models but limited materials, Godot can probably handle it just fine.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>DevLog 20250916: [Issue] Binary Design Project Version Control</title>
      <dc:creator>Charles Zhang</dc:creator>
      <pubDate>Tue, 16 Sep 2025 23:30:36 +0000</pubDate>
      <link>https://forem.com/nfc-charles/devlog-20250916-issue-binary-design-project-version-control-2cn1</link>
      <guid>https://forem.com/nfc-charles/devlog-20250916-issue-binary-design-project-version-control-2cn1</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;Not having a way to back up and "go back to any time" has the issue of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Not having a sense of security of "completely restore" something&lt;/li&gt;
&lt;li&gt;Not having point-in-time reference, and thus needing to make manual "progress records"&lt;/li&gt;
&lt;li&gt;Generally hurdle iteration since we need to worry about "keeping old stuff" for latter use&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Existing "Strategy" (Not Working)
&lt;/h2&gt;

&lt;p&gt;We could pack everything in VHDX and archive the whole thing on cloud store (like our backup strategy) or HHD, but it's not efficient, especially since design projects can easily become very big - that creates the issue of having to carefully plan "revision points".&lt;/p&gt;

&lt;h2&gt;
  
  
  The Verdict
&lt;/h2&gt;

&lt;p&gt;We don't want to waste time expanding &lt;code&gt;cv&lt;/code&gt; and develop our own - it seemed Perforce is a must have. On the other hand, it's time to try &lt;code&gt;git + LFS&lt;/code&gt; again, if we use it carefully, it's certainly better than having no version control at all for design projects.&lt;/p&gt;

&lt;p&gt;On the other hand, Fossil is a great single-user alternative that neatly stores everything in a single SQLite file. Fossil doesn’t attempt to diff or merge binaries; it just versions them, with history, commit notes and tags. Its main limitations in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQLite BLOB Size Limit: SQLite, and therefore Fossil, has a practical limit on the size of individual BLOBs, which is around 2GB. This means individual binary files larger than this limit cannot be directly stored within Fossil.&lt;/li&gt;
&lt;li&gt;Performance with Numerous Large Binaries: While Fossil can handle binary files, a large number of very large binary files can impact performance, especially during operations like cloning, syncing, and committing, due to the single-file repository structure and the need to manage large BLOBs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Compromised Strategy
&lt;/h2&gt;

&lt;p&gt;Strategies for Managing Large Binary Files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unversioned Files: If historical versions of certain large binary assets are not critical, they can be managed outside of Fossil as unversioned files.&lt;/li&gt;
&lt;li&gt;Repository Segmentation: For projects with a substantial amount of large binary data alongside source code, consider separating the project into multiple Fossil repositories. One repository could manage the source code and smaller assets, while another could handle the large binaries, potentially with scripting to maintain alignment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Repository segmentation is slightly easier to do with Fossil, but still doable with Git (just ignore and don't commit things as submodules).&lt;/p&gt;

&lt;h2&gt;
  
  
  The Experimental Proposal
&lt;/h2&gt;

&lt;p&gt;Since most of my game projects already use Git, and it's a bit confusing to add LFS, I decide to give fossil another try, specifically for overall (non-code) binary version control.&lt;/p&gt;

&lt;p&gt;So the final toolset looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git: text sources, as usual&lt;/li&gt;
&lt;li&gt;cv: Quick version changelog of everything&lt;/li&gt;
&lt;li&gt;Fossil: Single-file binary versioning&lt;/li&gt;
&lt;li&gt;Manual whole-disk cloud background: last-resort contingency plan&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>design</category>
      <category>devjournal</category>
      <category>tooling</category>
    </item>
    <item>
      <title>DevLog 20250912: Issues with Azure DevOp</title>
      <dc:creator>Charles Zhang</dc:creator>
      <pubDate>Fri, 12 Sep 2025 20:58:56 +0000</pubDate>
      <link>https://forem.com/nfc-charles/devlog-20250912-issues-with-azure-devop-1eam</link>
      <guid>https://forem.com/nfc-charles/devlog-20250912-issues-with-azure-devop-1eam</guid>
      <description>&lt;h2&gt;
  
  
  Even Before Everything Else
&lt;/h2&gt;

&lt;p&gt;In the very early days, our load taking system is highly scattered in scattered file system files It works well on Linux but doesn't work on Windows Later we used YNote,  which had serious migration problems.&lt;/p&gt;

&lt;p&gt;After that we had &lt;a href="https://www.totalimagine.com/Articles/KnowledgeMarkdown" rel="noopener noreferrer"&gt;KMD&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Two modern variations are &lt;strong&gt;&lt;em&gt;dated notes&lt;/em&gt;&lt;/strong&gt; and also &lt;strong&gt;&lt;em&gt;simple flat lists of to-do items&lt;/em&gt;&lt;/strong&gt; (both of which are in Markdown) which we will not provide examples here.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Old System
&lt;/h2&gt;

&lt;p&gt;Based on previous experience at BBI, I devised a costume ticket-based task management system. It works very well but requires a bit more manual bookkeeping.&lt;/p&gt;

&lt;p&gt;After using it for a while, I decided to merge everything into a single markdown file and eventually decided to try ADO for small scale personal projects, as long as other larger scale collaborative production projects, for easier and more contextual linking between tasks/tickets.&lt;/p&gt;

&lt;h2&gt;
  
  
  The New System (Now Depreciated)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Azure DevOp&lt;/strong&gt; is a very useful sophisticated task management system suited for agile project management and for team work I honestly think there is no better alternative, despite poor integration with git (and I doubt many would use its own repo management system).&lt;/p&gt;

&lt;p&gt;For personal projects, there are may serious issues:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Complicated project setup, impossible to change project type after creation, unclear conventions (e.g. priority number), impossible to configure enums.&lt;/li&gt;
&lt;li&gt; The GUI is too complicated and even for production use, the search functionality is not very predictive. On the other hand, when it comes to have an overview of all the task items, it's not very clear what are the key information.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ADO supports sophisticated APIs, but it's not worth it for custom projects to develop for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Travelling Back
&lt;/h2&gt;

&lt;p&gt;Now, we are trying to migrate back to the ticket based custom system for easier version control and oversight, and local file system searchability.&lt;/p&gt;

</description>
      <category>ado</category>
      <category>azure</category>
      <category>devops</category>
      <category>projectmanagement</category>
    </item>
    <item>
      <title>DevLog 20250912: Rapid Creative Priming</title>
      <dc:creator>Charles Zhang</dc:creator>
      <pubDate>Fri, 12 Sep 2025 11:13:11 +0000</pubDate>
      <link>https://forem.com/nfc-charles/devlog-20250912-rapid-creative-priming-1jm2</link>
      <guid>https://forem.com/nfc-charles/devlog-20250912-rapid-creative-priming-1jm2</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;As a creative worker and novelist, "getting into the mood" often takes time and effort. In the past, without concrete workflows, inspiration arrived randomly — for example, I used to watch entire movies just hoping to spark ideas. Nowadays, however, I have methods that can quickly "tune my brain," as illustrated in the note below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Think along those keywords) "坦克轰隆隆", "old-fashioned physical activities"
(Think along 2015 "Era 1" original dream series)
(Think along those keywords) Medieval villages, gothic towns, historic sites
(Think along artistic styles defined in "20221208 Technology Style Genres") 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It feels almost magical — a unique phenomenon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Concept – Rapid Creative Priming
&lt;/h2&gt;

&lt;p&gt;I’m fairly sure others have identified similar techniques. Since I lack formal systematic training in creative work, I don’t know the technical term for these "short statements" that can instantly shift one into a creative mindset. For now, I’ll call this practice &lt;strong&gt;rapid creative priming&lt;/strong&gt;: small cues that help you slip into the right imaginative state.&lt;/p&gt;

&lt;p&gt;Drawing on concepts from psychology, creativity studies, and writing practice, I’ll illustrate how this works:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Creative Prompts
&lt;/h3&gt;

&lt;p&gt;In writing communities, these short statements resemble &lt;em&gt;writing prompts&lt;/em&gt; — brief cues, images, or scenarios meant to spark imagination.&lt;/p&gt;

&lt;p&gt;Traditionally, prompts are designed to kickstart a scene or story, but my examples seem more focused on evoking a &lt;em&gt;mood&lt;/em&gt; rather than a plot, which is a subtler use.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Priming Cues (Psychology)
&lt;/h3&gt;

&lt;p&gt;In cognitive psychology, this falls under &lt;em&gt;priming&lt;/em&gt;: exposing the brain to specific words, images, or ideas that bias it toward certain associations.&lt;/p&gt;

&lt;p&gt;In my case, these statements act as &lt;strong&gt;creative priming cues&lt;/strong&gt; — they activate mental schemas (e.g., childhood nostalgia, gothic towns, peaceful rural activities) that "tune" my mind into that aesthetic space.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Mood Boards (Textual Form)
&lt;/h3&gt;

&lt;p&gt;Designers and visual artists often use &lt;em&gt;mood boards&lt;/em&gt; — curated collections of images or textures that capture a tone. What I have is essentially a &lt;strong&gt;verbal/textual mood board&lt;/strong&gt;: compact textual triggers instead of images, but serving the same role of setting a consistent emotional/creative atmosphere.&lt;/p&gt;

&lt;p&gt;Personally, I find this form more inspirational than visual cues for novel work, since images can feel "too much" and become distracting.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Incantatory Triggers
&lt;/h3&gt;

&lt;p&gt;Some novelists and poets describe repeated creative cues as &lt;em&gt;charms&lt;/em&gt; or &lt;em&gt;incantations&lt;/em&gt;. It’s not a technical term, but it captures the ritualistic aspect: by revisiting a phrase ("坦克轰隆隆," "old-fashioned physical activities"), you summon an entire sensory-emotional world — almost like casting a spell.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Heuristics or Creative Constraints
&lt;/h3&gt;

&lt;p&gt;Another way to frame these is as &lt;em&gt;heuristics&lt;/em&gt; — rules of thumb that guide thinking — or as &lt;em&gt;creative constraints&lt;/em&gt;. By narrowing attention ("think rural, tactile, peaceful"), we reduce the paralysis of a blank page and channel ourselves into a fertile imaginative corridor.&lt;/p&gt;

&lt;p&gt;This may be why I intuitively wanted to call them "directives."&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Creative Priming Statements&lt;/strong&gt; or &lt;strong&gt;Mood Cues&lt;/strong&gt; are short, textual triggers designed to align the brain with a productive imaginative mode.&lt;/p&gt;

&lt;p&gt;As for visual cues, a commonly used tool in the concept design community is &lt;code&gt;PureRef&lt;/code&gt;. It’s excellent, but I’ll give one warning: it requires carefully tuned workflows; otherwise, it can become a severe distraction.&lt;/p&gt;

</description>
      <category>tool</category>
      <category>creativity</category>
    </item>
    <item>
      <title>DevLog 20250720: Solar System Simulation</title>
      <dc:creator>Charles Zhang</dc:creator>
      <pubDate>Sun, 20 Jul 2025 22:09:40 +0000</pubDate>
      <link>https://forem.com/nfc-charles/devlog-20250720-4g3i</link>
      <guid>https://forem.com/nfc-charles/devlog-20250720-4g3i</guid>
      <description>&lt;h2&gt;
  
  
  Simulation 20250720172759
&lt;/h2&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%2Ffpwx8t8ljoco3th5se6a.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%2Ffpwx8t8ljoco3th5se6a.png" alt="Initial Configuration" width="800" height="600"&gt;&lt;/a&gt;&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%2Fjjtq4ybnfccl0mcuvc56.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%2Fjjtq4ybnfccl0mcuvc56.png" alt=" " width="800" height="600"&gt;&lt;/a&gt;&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%2F9h3c02vrb6l700s2pxds.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%2F9h3c02vrb6l700s2pxds.png" alt=" " width="800" height="600"&gt;&lt;/a&gt;&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%2Ftbm2xhmr16x8ic45u7qd.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%2Ftbm2xhmr16x8ic45u7qd.png" alt=" " width="800" height="600"&gt;&lt;/a&gt;&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%2Fnfc5totmf3xfi7x4eup1.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%2Fnfc5totmf3xfi7x4eup1.png" alt=" " width="800" height="600"&gt;&lt;/a&gt;&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%2Fsm9cdkij9uravv8k9a1f.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%2Fsm9cdkij9uravv8k9a1f.png" alt="End State" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Video: &lt;a href="https://youtu.be/99WhKqgHlfk" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/p&gt;

</description>
      <category>simulationgames</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>DevLog 20250719: GIS, Geographic &amp; WGS84</title>
      <dc:creator>Charles Zhang</dc:creator>
      <pubDate>Sat, 19 Jul 2025 13:51:12 +0000</pubDate>
      <link>https://forem.com/nfc-charles/20250719-gis-geographic-wgs84-1i4e</link>
      <guid>https://forem.com/nfc-charles/20250719-gis-geographic-wgs84-1i4e</guid>
      <description>&lt;h2&gt;
  
  
  Geographical Patch Workflow
&lt;/h2&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%2F272qfp8hmmrpor4q12gc.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%2F272qfp8hmmrpor4q12gc.png" alt="Setup in Blender" width="800" height="450"&gt;&lt;/a&gt;&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%2Ff0p4vs8043w3rd1f0cy0.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%2Ff0p4vs8043w3rd1f0cy0.png" alt="Result in QGIS" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Local Area WGS84 Workflow
&lt;/h2&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%2Ffufupkxhlhixcj4hc8nw.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%2Ffufupkxhlhixcj4hc8nw.png" alt="Blender Setup" width="800" height="450"&gt;&lt;/a&gt;&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%2Fskewzuaxtvckmgjk4f1l.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%2Fskewzuaxtvckmgjk4f1l.png" alt="Google Earth" width="800" height="450"&gt;&lt;/a&gt;&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%2Fzo3ondddl3vm0814udun.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%2Fzo3ondddl3vm0814udun.png" alt="QGIS Result" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gis</category>
      <category>systemdesign</category>
      <category>workflow</category>
      <category>productivity</category>
    </item>
    <item>
      <title>DevLog 20250716: Note Taking and Precision Requirements</title>
      <dc:creator>Charles Zhang</dc:creator>
      <pubDate>Wed, 16 Jul 2025 11:39:10 +0000</pubDate>
      <link>https://forem.com/nfc-charles/devlog-20250716-note-taking-and-precision-requirements-20ac</link>
      <guid>https://forem.com/nfc-charles/devlog-20250716-note-taking-and-precision-requirements-20ac</guid>
      <description>&lt;p&gt;Earlier (2023) my notes are mostly fragmented conversations, settings, dialogues, plots - they were content related.&lt;/p&gt;

&lt;p&gt;Nowadays my notes are mostly world background, timeline, events, entity definitions - "fact"-based.&lt;/p&gt;

&lt;p&gt;The problem with fragmented ideas were hard to consolidate; The problem with designs are, there is no story. It would be ideal to just focus on writing coherent single-flowing stories.&lt;/p&gt;

&lt;p&gt;On the other hand, world building is putting demands on scale, and scale requires precision - like making a proper world map, or clearly understand the relationship between people.&lt;/p&gt;

</description>
      <category>notetaking</category>
      <category>observation</category>
    </item>
    <item>
      <title>DevLog 20250713: Development Speeds</title>
      <dc:creator>Charles Zhang</dc:creator>
      <pubDate>Mon, 14 Jul 2025 01:14:31 +0000</pubDate>
      <link>https://forem.com/nfc-charles/devlog-20250713-development-speeds-2o1a</link>
      <guid>https://forem.com/nfc-charles/devlog-20250713-development-speeds-2o1a</guid>
      <description>&lt;p&gt;Incrementals (per iteration):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1-3 hr&lt;/strong&gt;: rough layout, 1/3 of paper sketches, some collision and navigable environment, maybe plants and nature setup as well. An entire afternoon/day will give better sense. Original content: ~4-5Mb.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I suppose one week (half time) can emit usable scale environment, without functional scripting.&lt;/p&gt;

</description>
      <category>record</category>
    </item>
    <item>
      <title>DevLog 20250713: Perspectives of MWS</title>
      <dc:creator>Charles Zhang</dc:creator>
      <pubDate>Mon, 14 Jul 2025 00:34:01 +0000</pubDate>
      <link>https://forem.com/nfc-charles/devlog-20250713-perspectives-of-mws-h8c</link>
      <guid>https://forem.com/nfc-charles/devlog-20250713-perspectives-of-mws-h8c</guid>
      <description>&lt;p&gt;There is a perspective shock and big difference seeing things in MWS than in Blender - even though precise measures already result in predictable sizes.&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%2Fcbdh4jclxqnnx6o1dpxp.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%2Fcbdh4jclxqnnx6o1dpxp.png" alt="Blender Perspective" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's more straightforward to appreciate how much empty space we have, what placements could have been arranged - how tall things really are.&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%2F1p4zfhiuiy0i2jjp2az5.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%2F1p4zfhiuiy0i2jjp2az5.png" alt="Screenshot" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It seems when we start to add more color and textures, the perspectives will only get better.&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>design</category>
      <category>softwaredevelopment</category>
    </item>
  </channel>
</rss>
