当前位置: 首页 > news >正文

Unity渲染时的排序规则

按照我们的常规理解,渲染顺序应该是:

1.不透明物体按照相机空间进行Z轴排序,从前往后排,先渲染前面再渲染后面,避免造成过多的OverDraw

2.绘制天空盒,天空盒在要不透明物体之后渲染,避免造成OverDraw

3.绘制透明物体,透明物体按照相机空间进行Z轴排序,从后往前排,先渲染最后面的,这样才能正确的Blend颜色

 

实际上,Unity的不透明物体排序可能会稍微复杂些,可能要考虑材质合批,模板测试影响,所以不一定是按Z轴从前往后渲染。

SRP支持我们自定义渲染管线的物体排序。

 

控制 Unity 的渲染顺序 - 为什么以及如何 |Toca Boca Tech 博客 --- Controlling Unity's rendering order - why and how | Toca Boca Tech Blog

Unity :排序标准 SortingCriteria --- Unity - Scripting API: SortingCriteria

Unity :内置渲染管线中的渲染顺序 --- Unity - Manual: Rendering order in the Built-in Render Pipeline

Unity :不透明排序模式 OpaqueSortMode --- Unity - Scripting API: OpaqueSortMode  可以手动指定相机渲染不透明物体时的排序方式,默认情况下,不透明对象被分组在粗略的从前到后的存储桶中,在 GPU 上这样做是有益的。在某些 GPU 中,执行这种基于距离的排序并没有真正的帮助(最值得注意的是 PowerVR/Apple GPU),因此在这些 GPU 上,默认情况下不会完成基于距离的排序。

 

 

TODO:待研究

因我发现Unity有些地方很奇怪

A.4.3.1f1旧版本,模板测试的开启似乎会影响物体的排序?按道理来说,模板测试应该受先后渲染顺序影响,比如物体A先绘制,写入模板缓冲区,物体B后绘制,读取模板缓冲区,逻辑正常。

但如果反过来,物体B先绘制,此时读取的模板缓冲区就是空的,可能会导致渲染跟我们预期不一样,所以需要手动去Shader里设置渲染顺序,让A先渲染。

但奇怪的是,我并不用手动设置,在4.3.1f1中,不管我怎么摆放它们,模板缓冲区总是能正确被读取。难道旧版在渲染时,会自动优先渲染有写入模板缓冲区的对象?

B.这个问题在Unity6里似乎就正常了点,物体的不同摆放,会影响渲染顺序,从而影响模板缓冲区的读取是否正确。但Unity6里也有个问题,比如有3个物体ABC,按照从前到后摆放,其中B写缓冲区,AC读取。

按照理解,应该是先渲染A再B再C,所以A应该读取不到缓冲区的内容,C能读到。但实际上,一旦我给B加上写模板缓冲的Shader后,它们的渲染顺序就不再是从前往后了,B可能会变到最后。难道是跟材质批次有关?

 

http://www.rkmt.cn/news/12621.html

相关文章:

  • US$79 Latest Version SBB Key Programmer V46.02 Multi-language
  • codeforces round 1054(e.f)
  • US$228 VVDI2 BMW CAS4+ Function Authorization Service
  • US$30.4 BMW-CAS4 Interface Board for Yanhua Mini ACDP Module1
  • 弱结构光三维扫描重建
  • PCA降维
  • docker复制文件到宿主机
  • Day22多态详解
  • rad/s RPM之间的换算
  • “计算理论之美”课程笔记一:概率
  • 漏洞赏金猎手的新年目标实战指南
  • python 0入门基础第一课 - Jun
  • 数学作业
  • 日常刷题:cf每日一题+abc+反思复盘
  • 2025年9月26日 - 20243867孙堃2405
  • HarmonyOS 5 网络编程与材料存储实战:从RESTful API到本地持久化
  • C语言中的for循环
  • 理解 Elasticsearch 中的分块策略 - 详解
  • US$44 YH BMW CAS3 CAS4 Test Adapter Can Work With Yanhua Mini ACDP
  • 5.WPF控件---ComboBox - 实践
  • AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
  • javaEE初阶————多线程进阶(1) - 教程
  • 重链抗体(IgG2、IgG3)与传统抗体的核心区别:从结构到功能的全方位解析
  • 重点行业数字化转型一图参透 - 智慧园区
  • RustDesk:免费开源的跨平台远程桌面解决方案
  • ECMAScript6-学习指南-全-
  • JSP征婚信息实用的系统3kx16代码+源码+数据库+调试部署+开发环境
  • QT:如何初始化窗体尺寸大小
  • 9月23日(日记里有)