{
  "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?v=72a1a09cc723",
  "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=\"优先自动化高频动作\">优先自动化高频动作 <a class=\"heading-anchor\" href=\"https://blog.solus.games/posts/game-team-toolchain/#%E4%BC%98%E5%85%88%E8%87%AA%E5%8A%A8%E5%8C%96%E9%AB%98%E9%A2%91%E5%8A%A8%E4%BD%9C\" aria-label=\"章节链接：优先自动化高频动作\">#</a></h2>\n<p>例如：</p>\n<ul>\n<li>配置表导出</li>\n<li>资源检查</li>\n<li>构建打包</li>\n<li>版本号生成</li>\n<li>基础冒烟测试</li>\n</ul>\n<pre data-language=\"powershell\" tabindex=\"0\" aria-label=\"powershell 代码块，可横向滚动\"><button class=\"code-copy-button\" type=\"button\" data-copy-code data-code-language=\"powershell\" aria-label=\"复制 powershell 代码\">复制</button><span class=\"sr-only\" aria-live=\"polite\" data-copy-code-status></span><code>npm run export:config\nnpm run check:assets\nnpm run build:client</code></pre>\n<h2 id=\"输出要可追踪\">输出要可追踪 <a class=\"heading-anchor\" href=\"https://blog.solus.games/posts/game-team-toolchain/#%E8%BE%93%E5%87%BA%E8%A6%81%E5%8F%AF%E8%BF%BD%E8%B8%AA\" aria-label=\"章节链接：输出要可追踪\">#</a></h2>\n<p>自动化脚本要留下日志、产物路径和失败原因。没有可追踪输出的工具，很难在团队里长期使用。</p>\n<h2 id=\"不要隐藏复杂度\">不要隐藏复杂度 <a class=\"heading-anchor\" href=\"https://blog.solus.games/posts/game-team-toolchain/#%E4%B8%8D%E8%A6%81%E9%9A%90%E8%97%8F%E5%A4%8D%E6%9D%82%E5%BA%A6\" aria-label=\"章节链接：不要隐藏复杂度\">#</a></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.webp?v=72a1a09cc723"
    },
    {
      "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=\"先看帧\">先看帧 <a class=\"heading-anchor\" href=\"https://blog.solus.games/posts/render-optimization-checklist/#%E5%85%88%E7%9C%8B%E5%B8%A7\" aria-label=\"章节链接：先看帧\">#</a></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=\"再看资源\">再看资源 <a class=\"heading-anchor\" href=\"https://blog.solus.games/posts/render-optimization-checklist/#%E5%86%8D%E7%9C%8B%E8%B5%84%E6%BA%90\" aria-label=\"章节链接：再看资源\">#</a></h2>\n<p>纹理、网格和材质经常是隐性成本来源。排查时要确认压缩格式、贴图尺寸、Mipmap、材质实例数量和批处理状态。</p>\n<h2 id=\"最后改-shader\">最后改 Shader <a class=\"heading-anchor\" href=\"https://blog.solus.games/posts/render-optimization-checklist/#%E6%9C%80%E5%90%8E%E6%94%B9-shader\" aria-label=\"章节链接：最后改 Shader\">#</a></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.webp?v=72a1a09cc723"
    },
    {
      "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=\"写什么\">写什么 <a class=\"heading-anchor\" href=\"https://blog.solus.games/posts/start-here/#%E5%86%99%E4%BB%80%E4%B9%88\" aria-label=\"章节链接：写什么\">#</a></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=\"记录标准\">记录标准 <a class=\"heading-anchor\" href=\"https://blog.solus.games/posts/start-here/#%E8%AE%B0%E5%BD%95%E6%A0%87%E5%87%86\" aria-label=\"章节链接：记录标准\">#</a></h2>\n<p>这里的文章会尽量遵循几个原则：</p>\n<ul>\n<li>先描述真实场景，再写结论</li>\n<li>保留关键假设和失败路径</li>\n<li>给出可复现的检查清单</li>\n<li>记录最终取舍，而不只记录“正确答案”</li>\n<li>后续有新证据时更新原文</li>\n</ul>\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.webp?v=72a1a09cc723"
    },
    {
      "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=\"建立预算\">建立预算 <a class=\"heading-anchor\" href=\"https://blog.solus.games/posts/unity-performance-start/#%E5%BB%BA%E7%AB%8B%E9%A2%84%E7%AE%97\" aria-label=\"章节链接：建立预算\">#</a></h2>\n<p>以 60 FPS 为例，一帧预算约为 16.67ms。移动端还要额外关注发热、降频和电量消耗。</p>\n<h2 id=\"分层定位\">分层定位 <a class=\"heading-anchor\" href=\"https://blog.solus.games/posts/unity-performance-start/#%E5%88%86%E5%B1%82%E5%AE%9A%E4%BD%8D\" aria-label=\"章节链接：分层定位\">#</a></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=\"固化检查\">固化检查 <a class=\"heading-anchor\" href=\"https://blog.solus.games/posts/unity-performance-start/#%E5%9B%BA%E5%8C%96%E6%A3%80%E6%9F%A5\" aria-label=\"章节链接：固化检查\">#</a></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.webp?v=72a1a09cc723"
    }
  ]
}