Unity Shader Cache 的翻译
Unity 的着色器缓存可以删除。
求助 Unity Shader Cache 的含义及 16 进制编辑
有些材质确实没有颜色属性。
选取材质球 Shader 时,一定要看是否可以在监视面板中修改颜色属性。
如果可以修改,基本上都可以用 renderer.material.color = 颜色;
来修改。
这等同于 renderer.material.SetColor("_Color", 颜色);
。有些不能直接通过面。
Unity 技术开放日 | 绝对干货 – 揭秘 Unity 引擎的黑盒世界之 “ShaderLab” 底层原理
在 Unity 技术开放日的上海站活动中,Unity 专家深入探讨了 Unity 引擎的神秘面纱,特别是 “ShaderLab” 的核心构造。以下是关于这个主题的详细剖析:
在技术开放日上,专家分享了关于 ShaderLab 的深入剖析。ShaderLab 并非单纯的编程语言,而是 Unity 发明的一种特殊体系,专为跨平台的 Shading 开发设计。它的核心由三部分构成:
- ShaderLab 文本:根据 Unity 规则书写的 shader 代码,包括 Shader 名称、Subshader 属性和 Pass 中的各种指令。
- ShaderLab Compiler:负责将 ShaderLab 文本转化为机器可执行的代码,类似于一个幕后翻译者。
- ShaderLab Asset:涉及 Shader 的预处理和二次加工,通常以 Assetbundle 或 Resources 内的资源形式出现。包括场景引用的 Always include Shader 等。
ShaderLab 的工作流程从编写 ShaderLab 文本开始,Unity 引擎在用户编辑时会对 Shader 进行编译,生成 Shader Cache 以存储中间结果。Unity 引擎并非一次性为所有平台编译 Shader,而是根据预处理信息生成不同变体。Shader 编译包括语法分析、切割不同语言部分和预处理编译等步骤,错误检查在这一过程中进行。遇到问题时,删除 Shader Cache 并重新导入可以解决问题。
ShaderLab 的 Runtime 部分非常重要,它在 Shader 运行时提供支持,例如在内存样本中可以看到。ShaderLab 的大小往往受 Runtime 影响,尤其是在 2017 版本之后。ShaderLab 的完整工作流包括从编写、编译到最终用于渲染或打包的整个过程,涉及 Unity Editor 的预热、Binary Compile 以及跨平台的复杂编译策略,利用 HLSLCC 优化编译过程以适应不同平台的 API 规范。
完整的内容已可在 Unity 社区的技术专栏中获取,深入理解 “ShaderLab” 的底层机制。通过这个详细解析,开发者可以更深入地掌握 Unity 引擎的 Shader 开发技巧。
手游逆向分析之 Snapdragon Profiler
逆向分析游戏中的效果已经成为测试人员必备技能之一。本文将简要介绍如何使用 Snapdragon Profiler 进行逆向反编译,并在 Unity 中进行复现。
Snapdragon Profiler 不仅可以进行截帧分析,还能捕获 CPU、GPU、DSP、内存、功率、网络连接和设备运行时的发热数据。它主要分为四种捕获模式:实时视图、跟踪捕获、快照捕获和采样捕获。
实时视图可分析 CPU、GPU、DSP、内存、电源、散热和网络数据指标。跟踪捕获可视化内核和系统事件,分析 CPU、GPU 和 DSP 上的低级系统事件。快照捕获可从 OpenGL ES 捕获和调试渲染帧或从 Vulkan 应用程序中捕获。采样捕获可记录一系列调用图以供应用程序分析消耗的 CPU 时间。
本文以《新剑侠情缘》中的水效果为例,介绍 Snapdragon Profiler 的使用。硬件设备包括一台高通骁龙芯片的安卓手机(Android 5.0 或更高版本)和运行 Windows、OS X 或 Ubuntu 的 PC。软件设备包括 Snapdragon Profiler v2020.2.0 及 ADB、Android NDK。
连接手机时,确保手机设置为开发者模式并打开 USB 调试。在 Snapdragon Profiler 中点击 “Connect to a Device” 进行连接。连接成功后,点击 “Capture” -> “New SnapShot”,打开游戏,选择要调试的游戏窗口,然后点击 “Take Snapshot”。
在快照中,可以查看当前快照的所有绘制调用。通过双击截屏快照中的某一点,可以追溯当前点的像素历史,从而快速定位所需扒取的模型的 shader。定位到 Drawcall 后,可以双击该函数,观察红色线框标识的模型,以确定该函数是否作用于该模型。
如果扒取的 shader 是二进制的情况,可以尝试重开 profiler,然后删除 UnityShaderCache 文件夹,重新进行截帧。
如何定位其他资源,如贴图、模型?在资源查看器中点击 “Used” 可以查看到该帧使用到的贴图数据、程序。通过 glBindTexture()
的 texture id 值可以定位具体某个 id 的贴图。通过资源查看窗口,还可以看到贴图的格式和尺寸。
在 Program Inspector 中可以查看 shader 里采用到的全局变量的值,这对于复现也十分重要。
保存资源时,程序、贴图和模型将以 obj 格式进行输出。obj 文件只输出位置、发现、纹理坐标,没有顶点色选项。
在复现过程中,可能需要涉及 shader 技术分析、编写、模型导入等问题。obj 导入 Unity 的操作可参考网上相关博客。整理好并搬入 Unity 的代码后,可以进行效果复现和分析。
总结:本文介绍了 Snapdragon Profiler 的使用方法,通过它可以在 Unity 中复现游戏中的效果。与 Adreno Profiler 相比,Snapdragon Profiler 在稳定性、速度和功能方面都有优势。希望本文能对读者有所帮助。