唐莫盈

一个开发出身的DevOps工程师

游戏构建:Unreal 构建(四):Shader 编译噩梦——玩家为什么每次更新都要等二十分钟?

1、你是不是也见过这个场景? 玩某些 Unreal 游戏的时候,你一定经历过: 更新完游戏,兴奋地双击图标。然后屏幕上弹出一个窗口——「Compiling Shaders: 1 / 23847」。进度条缓慢蠕动,预计剩余时间:20 分钟。 你的表情:😐 为什么每次更新都要编译 Shader?为什么编译 Shader 这么慢?有没有办法不让玩家等...

2024-05-11 build

游戏构建:Unreal 构建(二):Cook 是什么?为什么每次构建都要"做菜"?

1、”Cook”这个名字怎么来的? 在 Unreal 的构建流程中,「Cook」是一个绕不过去的概念。 我一开始很疑惑——为什么要叫「Cook」?难道 Unreal 把资源处理比喻成做菜? 后来发现确实就是这样。Unreal 的工程师觉得,编辑器里的资源是「生食材」,需要经过「烹饪」才能变成各个目标平台可用的「成品」。 这个比喻其实很贴切。 ...

2024-04-20 build

游戏构建:Unity 构建(四):Addressables——一个改动大得多的"正确答案"

1、从 SBP 到 Addressables:两种不同的升级路径 前两篇文章,我们聊了 AssetBundle 的底层接口演进:第 0 代(手工收集+不处理依赖)→ 第 1 代(标记包名 或 AssetBundleBuild[] 代码定义分包,自动依赖)→ SBP(精确增量构建,源码开放)。 SBP 是一条改动最小的升级路径——你只要换了底层打包接...

2024-03-30 build

游戏构建:Unity 构建(三):Scriptable Build Pipeline——用最小改动,换最大缓存提升

1、那个让构建时间砍半的东西 上一篇我们讲了 AssetBundle 的两代接口演进——从第 0 代「手写代码收集资源、不自动处理依赖」,到第 1 代的两条路线(标记包名 / AssetBundleBuild[] 代码定义分包)。 虽然第 1 代的 BuildAssetBundles 解决了依赖处理的可靠性问题,但它有两个硬伤。第一,增量构建的效率...

2024-03-23 build

游戏构建:Unity 构建(二):AssetBundle 两代接口——从手写打包到自动依赖,经历了什么?

1、没有 AssetBundle 的日子 在讲 AssetBundle 的接口演进之前,先想象一下:如果 Unity 没有资源动态加载机制,游戏怎么做? 答案很简单——把所有资源都放在工程里,构建时全部打进安装包。 这听起来好像也没啥?但你想一个真实手游,场景几十个,角色几十个,每个角色几张贴图、一个模型、好几套动画……光是贴图可能就几百上千张。...

2024-03-16 build

游戏构建漫谈(零):从 Java 到 Unity/Unreal,我重新理解了「构建」这个词

1、换了个行业,换了对「构建」的理解 去年我换工作了。 从互联网行业跳到了游戏行业。开发语言从 Java 换成了 C# 和 C++。IDE 从 IntelliJ IDEA 换成了 Rider 和 Visual Studio。 坦白说,技术栈的切换比想象中顺利——毕竟编程语言说到底都是相通的。但有一个东西,让我结结实实地震惊了一下。 构建系统。 ...

2024-01-13 build