时间:2025-09-03 23:59
人气:
作者:admin
【从UnityURP开始探索游戏渲染】专栏-直达
Shader.SetGlobal系列方法或MaterialPropertyBlock间接管理,底层由UnityEngine.Rendering.CommandBuffer控制ScriptableRenderPass或MonoBehaviour脚本中完成(如Camera.main.SetGlobalMatrix)hlsl
CBUFFER_START(UnityPerMaterial)
float4 _Color; // 材质属性
float4x4 _WorldToCamera; // 视图矩阵
CBUFFER_END
csharp
// CPU注入数据(如每帧更新VP矩阵)
Shader.SetGlobalMatrix("_CameraViewProjection", camera.projectionMatrix * camera.worldToCameraMatrix);
CBUFFER_START(UnityPerCamera)读取UnityEngine.Rendering.Universal.RenderTargetHandle,通过CreateDepthTexture和ConfigureTarget配置ForwardRendererAsset配置文件中定义,运行时由ScriptableRenderer管理Stencil{ Ref 1 Comp Equal } 仅渲染标记为 1 的区域)hlsl
Stencil {
Ref 2
Comp Equal
Pass Keep
} // 仅渲染模板值为2的像素
RenderObjects特性在Execute阶段触发写入csharp
// URP Renderer Feature中配置深度纹理
renderingData.cameraData.requiresDepthTexture = true;
_CameraDepthTexture采样深度值RenderTexture和Camera.targetTexture组合实现UniversalRenderPipeline.cscsharp
// URP Renderer Feature 中配置
ConfigureCameraTarget(BufferA, BufferB);// 双缓冲区实现运动模糊
RenderObjects 特性为特定层级(如“Outline”)启用模板测试。_CameraDepthTexture 实现屏幕空间阴影。GraphicsBuffer 一次性上传,动态数据增量更新。Camera.cullingMask 剔除无关层级,结合距离裁剪降低负载。_CameraColorTexture 避免重复创建CBUFFERCamera.main.depthTextureMode控制生成策略RenderTexture.GetTemporary动态分配避免内存泄漏【从UnityURP开始探索游戏渲染】专栏-直达
(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,????)