{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "SOLUS Dev Notes",
  "home_page_url": "https://blog.solus.games/",
  "feed_url": "https://blog.solus.games/feed.json",
  "description": "游戏开发、图形渲染和工程实践的长期技术档案。",
  "language": "zh-CN",
  "favicon": "https://blog.solus.games/favicon.svg",
  "icon": "https://blog.solus.games/assets/og/solus-og.png",
  "authors": [
    {
      "name": "SOLUS"
    }
  ],
  "items": [
    {
      "id": "https://blog.solus.games/posts/game-team-toolchain/",
      "url": "https://blog.solus.games/posts/game-team-toolchain/",
      "title": "小团队游戏项目的工具链原则",
      "content_html": "<p>小团队工具链不应该追求“大而全”。最重要的是让高频流程稳定、清晰、可复现。</p>\n<h2 id=\"优先自动化高频动作\">优先自动化高频动作</h2>\n<p>例如：</p>\n<ul>\n<li>配置表导出</li>\n<li>资源检查</li>\n<li>构建打包</li>\n<li>版本号生成</li>\n<li>基础冒烟测试</li>\n</ul>\n<h2 id=\"输出要可追踪\">输出要可追踪</h2>\n<p>自动化脚本要留下日志、产物路径和失败原因。没有可追踪输出的工具，很难在团队里长期使用。</p>\n<h2 id=\"不要隐藏复杂度\">不要隐藏复杂度</h2>\n<p>工具可以减少重复劳动，但不应该让关键流程变成黑盒。必要的文档和失败提示同样重要。</p>",
      "summary": "工具链的价值不在复杂，而在减少重复劳动、降低人为错误，并让关键流程可以被复现。",
      "date_published": "2026-06-04T00:00:00.000Z",
      "date_modified": "2026-06-04T00:00:00.000Z",
      "authors": [
        {
          "name": "SOLUS"
        }
      ],
      "tags": [
        "工具链",
        "自动化",
        "工程效率"
      ],
      "image": "https://blog.solus.games/assets/posts/game-team-toolchain.svg"
    },
    {
      "id": "https://blog.solus.games/posts/render-optimization-checklist/",
      "url": "https://blog.solus.games/posts/render-optimization-checklist/",
      "title": "渲染优化排查清单",
      "content_html": "<p>渲染优化不应该从猜测开始。更稳妥的方式是先把问题拆成可观察的指标，再逐项排除。</p>\n<h2 id=\"先看帧\">先看帧</h2>\n<p>使用 Frame Debugger、RenderDoc 或平台 Profiler 观察一帧里发生了什么：</p>\n<div class=\"table-scroll\" tabindex=\"0\" aria-label=\"可横向滚动的数据表\"><table><thead><tr><th data-align=\"left\">工具</th><th data-align=\"left\">适合观察</th><th data-align=\"left\">输出结果</th></tr></thead><tbody><tr><td data-align=\"left\">Frame Debugger</td><td data-align=\"left\">引擎内渲染步骤</td><td data-align=\"left\">调用顺序和渲染状态</td></tr><tr><td data-align=\"left\">RenderDoc</td><td data-align=\"left\">单帧 GPU 细节</td><td data-align=\"left\">Draw Call、资源绑定和管线状态</td></tr><tr><td data-align=\"left\">平台 Profiler</td><td data-align=\"left\">真实设备表现</td><td data-align=\"left\">CPU、GPU 和内存时间线</td></tr></tbody></table></div>\n<ul>\n<li>Draw Call 是否异常增长</li>\n<li>透明物体是否造成明显 Overdraw</li>\n<li>后处理是否占据主要耗时</li>\n<li>阴影、反射、实时光源是否过重</li>\n</ul>\n<h2 id=\"再看资源\">再看资源</h2>\n<p>纹理、网格和材质经常是隐性成本来源。排查时要确认压缩格式、贴图尺寸、Mipmap、材质实例数量和批处理状态。</p>\n<h2 id=\"最后改-shader\">最后改 Shader</h2>\n<p>Shader 优化要谨慎。优先删除无效分支、减少纹理采样、降低变体数量，并用真实设备验证收益。</p>",
      "summary": "一份用于定位渲染性能问题的实践清单，覆盖帧调试、Draw Call、Overdraw、纹理和 Shader 分支。",
      "date_published": "2026-06-04T00:00:00.000Z",
      "date_modified": "2026-06-04T00:00:00.000Z",
      "authors": [
        {
          "name": "SOLUS"
        }
      ],
      "tags": [
        "图形渲染",
        "性能与渲染排查",
        "渲染",
        "Shader",
        "性能"
      ],
      "image": "https://blog.solus.games/assets/posts/render-optimization-checklist.svg"
    },
    {
      "id": "https://blog.solus.games/posts/start-here/",
      "url": "https://blog.solus.games/posts/start-here/",
      "title": "SOLUS 技术档案的起点",
      "content_html": "<p>这篇文章是 SOLUS 技术档案的起点。后续内容会按主题进入不同分类，并通过标签形成可检索的知识链路。</p>\n<h2 id=\"写什么\">写什么</h2>\n<p>我会优先记录这些内容：</p>\n<ul>\n<li>游戏项目中的真实问题和解决过程</li>\n<li>渲染、Shader、性能优化相关实验</li>\n<li>Unity、Godot、Cocos 等引擎实践</li>\n<li>工具链、自动化和团队协作经验</li>\n<li>项目上线后的复盘与改进清单</li>\n</ul>\n<h2 id=\"怎么维护\">怎么维护</h2>\n<p>每篇文章都是一个 Markdown 文件。构建脚本会读取 <code>content/posts</code>，自动生成文章页、归档页、分类页、标签页、搜索索引、RSS 和 sitemap。</p>\n<p>以后写新文章时，可以运行：</p>\n<pre data-language=\"bash\"><button class=\"code-copy-button\" type=\"button\" data-copy-code>复制</button><code>npm run new:post -- &quot;文章标题&quot;</code></pre>\n<p>然后编辑生成的 Markdown 文件，再运行：</p>\n<pre data-language=\"bash\"><button class=\"code-copy-button\" type=\"button\" data-copy-code>复制</button><code>npm run build</code></pre>\n<p>这样技术档案就会更新。</p>",
      "summary": "SOLUS 用于沉淀游戏开发、图形渲染、工程实践和项目复盘中的长期技术笔记。",
      "date_published": "2026-06-04T00:00:00.000Z",
      "date_modified": "2026-06-04T00:00:00.000Z",
      "authors": [
        {
          "name": "SOLUS"
        }
      ],
      "tags": [
        "随笔",
        "博客",
        "游戏开发",
        "知识库"
      ],
      "image": "https://blog.solus.games/assets/posts/start-here.svg"
    },
    {
      "id": "https://blog.solus.games/posts/unity-performance-start/",
      "url": "https://blog.solus.games/posts/unity-performance-start/",
      "title": "Unity 性能分析从哪里下手",
      "content_html": "<p>Unity 项目的性能问题经常混在一起。解决前先判断瓶颈属于 CPU、GPU、内存还是 IO。</p>\n<h2 id=\"建立预算\">建立预算</h2>\n<p>以 60 FPS 为例，一帧预算约为 16.67ms。移动端还要额外关注发热、降频和电量消耗。</p>\n<h2 id=\"分层定位\">分层定位</h2>\n<p>常见入口：</p>\n<ul>\n<li>CPU：脚本、物理、动画、UI 重建</li>\n<li>GPU：渲染管线、后处理、阴影、Overdraw</li>\n<li>内存：实例化、纹理、GC 分配</li>\n<li>IO：资源加载、解压、网络等待</li>\n</ul>\n<h2 id=\"固化检查\">固化检查</h2>\n<p>把常见性能检查写进发布流程，比临上线再集中排查更可靠。</p>",
      "summary": "面对卡顿问题时，先建立性能预算，再用 Profiler 区分 CPU、GPU、内存和 IO 的瓶颈。",
      "date_published": "2026-06-04T00:00:00.000Z",
      "date_modified": "2026-06-04T00:00:00.000Z",
      "authors": [
        {
          "name": "SOLUS"
        }
      ],
      "tags": [
        "Unity",
        "性能与渲染排查",
        "性能",
        "Profiler"
      ],
      "image": "https://blog.solus.games/assets/posts/unity-performance-start.svg"
    }
  ]
}