
笔记22 Command Buffer 及 URP 概述
(由于陌生概念太多,而且也没个铺垫,所以需要以后再来学)
什么是 Command Buffer?
用来存储渲染命令的缓冲区。
Command Buffer 保存着渲染命令列表,如(set render target,draw mesh等等),可以设置在摄像机渲染期间的不同点执行。
由来与用途
从Opengl指令分析CommandBuffer原理
(我看不懂啊😨,OpenGL得学啊)
对BRDF的镜面高光IBL项进行一个预积分渲染去得到一个512的 LUT(Look up texture),存储每个粗糙度和入射角的组合结果。去计算出菲涅尔的系数项也是R通道,和偏移项G通道,用于计算这些光的镜面高光项。然后在正式渲染的时候就需要去绑定刚刚预积分渲染的texture了。
整个生产流程:
- 给每个小球设置好MVP矩阵
- 然后渲染Skybox,如此循环
在OpenGL中,渲染过程中,出于渲染流程的需要,会频繁绑定VAO,VBO,FBO等。这样重复性的操作,很是让人感觉比较麻烦,也不利于程序的扩展。
因此,在写OpenGL的时候,也会根据实际需要,将一些重复性的操作”提取”出来:
- 使用 Shader 类负责编译,在 Model 类添加一些读取模型,绑定 VAO,VBO 操作函数等等。把渲染流程分为一个一个 Pass 进行编写,更加容易辨识在每个渲染流程中应该做什么,计算出什么结果。
出于跨平台的需要,Unity对这些底层的API也做了一层封装处理,然后就产生了 Command Buffer。
在Unity的FrameDebugger中,可以看到场景的渲染流程。
- 对应ForwardRenderer.css脚本中的
MainLightShadowCasterPass
m_MainLightShadowCasterPass
DepthOnlyPass m_DepthPrepass
ColorGradingLutPass m_ColorGradingLutPass
DrawObjectsPass
m_RenderOpaqueForwardPass
DrawSkyboxPass m_DrawSkyboxPass
CopyColorPass m_CopyColorPass
PostProcessPass m_PostProcessPass
PostProcessPass m_FinalPostProcessPass
(这啥?) - 为了更好扩展unity的渲染管线,Unity提供了CommandBuffer,让你根据自己的需求,在不同的渲染阶段插入绘制指令,例如插入DrawRenderer,DrawMesh,DrawProcedure,绘制的时候也可以根据需要设置绘制时材质(Material)的MaterialPropertyBlock更改当前绘制的材质的属性。
- 这里我用了RenderFeature在BeforeRenderingOpaques的时候用DrawMesh指令渲染了一个Box。
- MaterialPropertyBlock比直接修改Material的优势是:不会创建出新的材质实例。
从自定义RenderPipeline分析
相信接触过SRP的编写的同学都看过 CatlikeCoding (我没接触过啊…贴个文章:Custom SRP)
本节就先从最简单的自定义RenderPipeline开始分析如何构造一个ScriptableRenderPipeline。然后再分析Pass的概念以及CommandBuffer和ScriptableRenderContext之间的关系。
(略,以后补)
常用函数
综合分析其使用方法
URP
RenderFeature与CommandBuffer原理分析
Volume组件
注意事项
Scene窗口CameraColorTexture丢失[MSAA导致的bugResolveAA]
DepthBuffer和StencilBuffer[16bit和24/32bit]
RT精度格式问题
加速优化
-作业-
【综合】 完成洛基中的传送门效果
1.展开动画
2.背景模糊
3.进入后渐变消失
4.边缘模糊轮廓
- 标题: 笔记22 Command Buffer 及 URP 概述
- 作者: 铁名_IronName
- 创建于 : 2026-04-05 14:28:13
- 更新于 : 2026-04-05 18:36:13
- 链接: https://blog.ironname.top/2026/笔记22-技术美术百人计划/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。