当前位置: 首页 > 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.hskmm.com/?act=detail&tid=18543

相关文章:

  • AI智慧的三重跃升:从「数理魔兽」到「悬荡悟空」的文明协作者
  • 新学期每日总结(第 5天)
  • codeforces round 1054(e.f)
  • 【SimpleFOC-小项目】驱动电机正转3周
  • 联合体union的基本用法
  • 弱结构光三维扫描重建
  • 9.27 git与pycharm
  • PCA降维
  • docker复制文件到宿主机
  • 【SimpleFOC】SimpleFOC的运动规划器(Motion Planner)和梯形速度规划
  • Day22多态详解
  • rad/s RPM之间的换算
  • 再见Playwright!谷歌官方Chrome DevTools MCP正式发布,AI编程效率再翻倍
  • Markdown 之——清单の语法
  • “计算理论之美”课程笔记一:概率
  • “计算理论之美”课程笔记四:高维空间组合优化
  • git分支从dev迁移到maser
  • Centos7安装ffmpeg
  • 2025.9.26总结
  • C++ 与现代并发编程:性能与复杂度的平衡艺术
  • 第五天
  • 926
  • 20250736
  • sql优化个人总结
  • Powershell 入门
  • 漏洞赏金猎手的新年目标实战指南
  • 数学作业
  • lc1037-有效的回旋镖
  • 日常刷题:cf每日一题+abc+反思复盘