avatar
文章
24
标签
15
分类
31
Home
Archives
Tags
Categories
About
雪之湖畔 - SnowyLakeSide为美好的URP献上解析[0x00]: 管线架构 返回首页
搜索
Home
Archives
Tags
Categories
About

为美好的URP献上解析[0x00]: 管线架构

发表于2023-06-12|更新于2026-06-24|Game EngineUnityURP
|浏览量:
文章作者: SnowyLake
文章链接: https://snowylake.net/post/230612-urp-analysis-0x00-pipeline-framework.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 雪之湖畔 - SnowyLakeSide!
RenderingCSharp
cover of previous post
上一篇
SnowyArkEngine开发笔记[0x00]: 写在最前
cover of next post
下一篇
建站记录
建这个网站的初衷是因为自己知乎被连续封了几次, 以至于让我对这类非可控的平台产生了大量不信任感, 再加之我个人的知乎账号掺杂了大量的非技术相关内容, 所以尽管我在知乎也写了一些技术文章, 但仍并不方便将来贴在简历上. 总总原因驱使下, 在综合考量了云服务器+Wordpress和GitHubPages+Hexo两种方案后, 我还是选择了更为轻便的后者, 毕竟对我而言只是需要一个发布文章与随想的、完全可控的平台罢了, 没必要去折腾什么服务器. 技术选型到此为止, 剩下的便是具体实现了. 这篇文章便是用来记录我的建站流程以及踩到的一些小坑. 顺便一提, 这个网站就叫作SnowyLakeSide好了, 中文名雪之湖畔, 一个独属于我(SnowyLake/雪湖)、面向互联网的小小浅滩. Github Pages创建 这一步非常简单, 其实本质就是创建一个名为 snowylake.github.io 的repo, 只是要求前缀与github用户名相同. 创建之后实际上我们就已经可以通过repo名访问网站了, 但应该是空空如也的. 然后就可以暂时放在这里不管了, 甚至都不需要clone到本...
相关推荐
cover
2024-09-15
聊聊UI分辨率分离与线性空间下的GammaUI
整理了下近期以及过去做过的这方面的一些功能, 挑出点有意思的东西或思路谈谈. 这篇没有什么代码之类的东西, 就纯是碎碎念. UI 分辨率分离 这年头在移动端做 3D 游戏, 分辨率基本是没可能拉满的, 最高基本也就八九百这样子, 低配下甚至六百多都有可能. 虽然场景怎么低分辨率怎么糊都好说, 但 UI 是万万不能糊的, 一糊这游戏也别玩了. 所以场景&UI 分辨率分离就成了一个项目必需的 feature. 最简单也是最直接的方案就是给 UI 单独来一张 RT, 我们叫他 UITarget. 场景在低分辨率的 CameraAttachment 上渲完后 Blit 到高分辨率的 UITarget 上, 再交给 UI 相机绘制 UI. 听着很美好, 但实际并不能用. 因为这个方案对于带宽本就不富裕的移动端打击是致命的, 多一张 1080p 的 RT 简直是要了手机的老命. 于是就有了优化方案, 借用系统提供的 Backbuffer 作为 UITarget. Backbuffer 默认为手机硬件的原生分辨率, 无论任何情况下渲染管线的最终目标都会是它, 在 URP 正常的流程...
cover
2023-09-11
URP延迟渲染+Native Renderpass踩坑记录
过去两周多折腾URP Deferred + Native Renderpass, 踩了无数的坑, 翻遍国内国外的社区也找不到太多可供参考的资料. 于是在这里简述一下一些不可回避的问题以及其解决方案, 也算是为社区做点贡献. 在开始之前, 我想延迟渲染这种烂大街的玩意就没什么讲的必要了, 而Native Renderpass可能不少人没听过, 这东西底层调用的其实就是vulkan的renderpass/subpass API(metal也有类似的一套), 简单来说就是利用移动端TB(D)R的硬件架构, 相比于传统延迟管线在basepass结束后将gbuffer store回system memory, 之后再在lightpass中load回来这种带宽压力极大的方案, Native Renderpass可以在每个tile的basepass结束后将gbuffer保存在On-Chip Memory上, 以供接下来的lightpass直接使用, 直接优化掉了两个pass之间的store/load操作, 极大减缓了带宽压力, 这种形式的rt也被称之为memoryless. 简单科普到此为止...
cover
2023-09-11
从零开始的UE5卡通渲染0x00:理论基础
最近在研究基于UE5的卡通渲染,颇有收获。正巧前段时间与同事吃饭,聊到知乎,深感自己知乎各种不正经的东西实在太多了,而我又是个懒得腾出时间写正经东西的懒狗,遂决定趁编译Shader的空闲,写点学习笔记、心得与分享。 虽然卡渲本身的知识不算很多,但放到UE5上就是不得不改动源码的大工程了,不由得让人怀念起自由的Unity,令人感叹……扯远了,总之UE5卡渲这块我准备分成多篇文章,多水一水。 目前的大(feng)致(kuang)计(hua)划(bing)如下: 卡通渲染理论基础 修改源码的卡渲光照模型实现 基于卷积矩阵的卡渲描边实现、添加子Mesh的Backface卡渲描边实现 修改源码自定义Pass的Backface卡渲描边实现 …… 次世代卡渲/独立的Hair、Skin卡渲光照模型/UE5复刻原神ShadingModel……(或许会有?) 废话不多说了,进入正题。 提到卡通渲染,很多了解不多的朋友可能就会将其与NPR(Non-Photorealistic Rendering)混为一谈,可实际上这两者并不能划等号。事实上NPR是个非常广泛的概念,不止是卡渲,油画、水墨风等等...
cover
2023-09-11
从零开始的UE5卡通渲染0x01:自定义着色模型
简单写完了第一篇没啥营养的概述后,这一章我们来做一点真东西,通过修改源码添加一个Custom Shading Model,并使其可以集成我们上一篇文章提到的BaseColor、ILM、SSS贴图进行卡通渲染。 这里我使用的引擎版本是UE5.0.2。 拉取源码版UE5并编译 想要对源码做修改,绝对逃不开的第一步自然就是拉源码和编译。关于这一步,知乎上有大量的资料,官方文档写得也非常详细,我这种懒狗肯定不会再写一遍,不过还是有几点需要注意,值得说一下: 源码工程目录一定要放在固态硬盘里 预留大约250G的硬盘空间 建议整块好的CPU,框框越多越好,再多插几根内存条……不然的话等编译的空闲你还可以抽时间去学学Unity 😃 C++部分 C++部分大多都在进行Shading Model注册、开放和修改数据接口的工作,这里直接上截图。 EngineTypes.h \Engine\Source\Runtime\Engine\Classes\Engine\EngineTypes.h 在枚举EMaterialShadingModel 中注册我们的Shading Model: M...
cover
2023-09-11
UE5.1移动端延迟渲染管线测试与剖析
UE5.1对移动端延迟渲染做了一波大更新,在只使用3张gbuffer(不算SceneColor和Depth)的情况下支持了桌面端全部的shadingmodel,并且对Vulkan、Metal甚至是GLES都做了On Chip Memory的带宽优化。正好前面我刚折腾完Unity 2021.3的延迟管线,就顺便看看UE5.1这边有什么新花样。 官方talk: 虚幻5的移动端延迟渲染技术到底有多好用? - 腾讯游戏学堂的文章 - 知乎 https://zhuanlan.zhihu.com/p/562673914 经测试&查阅源码后确认支持的feature directional light可以有多盏(必须位于不同light channel), 只有一盏可以投射阴影 point light数量不再有限制, 不支持阴影 spot light可以投射阴影 每个light均只能有一个light channel 物体可以有多个light channel(即可以同时受多个light channel光源影响) 半透明效果正常 gles/vulkan均支持On Chip Memor...
cover
2024-07-12
从插件开始的UE渲染开发0x00: Shader路径重定向
UE 渲染开发一直以来都是个很蛋疼的话题, 拜屎山一般的渲染系统所赐, 想要加点什么东西基本就只有改源码一条路可走, 以至于网上搜十个改源码的文章可能九个都是教你怎么加 ShadingModel 或 MeshPass. 我自己也曾在这类重复且枯燥的工作上花费大量的时间, 深切感受到这玩意到底有多恶心. 而且源码修改一时爽, 后续维护火葬场, 将来如果要升级引擎版本, 面对茫茫多的 diff 那才叫一个痛不欲生. 所以这个系列从 UE 的插件系统(Plugin)入手, 尝试探索在不改动源码的情况下, 如何最大限度的自定义渲染. 虽说不改 C++ 源码, 但 Shader 该改还是要改. 不过直接去引擎路径下改 Shader 就很恶心, 可能我只想为当前项目改动某部分 Shader, 但引擎路径下 Shader 的改动却会影响到本地的所有项目. 如果能像 Unity 那样每个项目自己有一份 Shader 就好了——正确的, 我们就先来把这个功能做了. 在动工之前, 需要先理解 UE Shader 的路径引用原理. UE shader 代码中 include 的文件路径并非真实的路径...
avatar
SnowyLake
Don't worry, be happy.
文章
24
标签
15
分类
31
公告
不想工作, 苦呀西~
最新文章
爱丽丝的工作日记0x05: 搬运知乎旧文章
爱丽丝的工作日记0x05: 搬运知乎旧文章2026-06-24
爱丽丝的工作日记0x04: 调整首页文章标签位置
爱丽丝的工作日记0x04: 调整首页文章标签位置2026-06-22
爱丽丝的工作日记0x03: 给 Codex 准备后台预览
爱丽丝的工作日记0x03: 给 Codex 准备后台预览2026-06-22
爱丽丝的工作日记0x02: 整理 Butterfly 标签云
爱丽丝的工作日记0x02: 整理 Butterfly 标签云2026-06-22
爱丽丝的工作日记0x01: 从 NeXT 迁移到 Butterfly
爱丽丝的工作日记0x01: 从 NeXT 迁移到 Butterfly2026-06-19
© 2025 - 2026 By SnowyLake框架 Hexo 6.3.0|主题 Butterfly 5.5.5
搜索
数据加载中