美文网首页
渲染顺序

渲染顺序

作者: APP4x | 来源:发表于2020-09-28 20:28 被阅读0次

一个不透明或半透明物体的显示状态应该怎样确定?

一般在画画的时候:
首先将场景的多边形根据深度进行排序,然后按照顺序进行绘制
但是如果有半透明的东西呢?他们之间相互混合,也十分复杂

为了解决这些问题,计算机咋整呢?

深度缓冲区(Depth Buffer)
记录像素的深度信息,存储像素到摄像机的深度
每一帧开始前,深度缓冲区都会被清空。
当需要渲染新的像素时,像素的深度会预先被计算出来,比较这个像素的深度值与缓冲区中的值
通过算法判断是否要通过该像素,或需要在深度缓冲区中写入该像素的深度

在场景没有透明物体的情况下,我们可以按照缓冲区比较,无需对场景中的物体进行排序,也避免了重复绘制
既能解决重叠的问题,又可以带来性能的提升


但是有透明物体咋整呢?
如果透明物体A在不透明物体B前面,A离摄像机距离一定B更近
如果A写入了深度值,B就不会被绘制,自然也看不到半透明效果

引进了渲染队列的概念。
啥玩意是渲染队列?
也是按深度缓冲,但将不透明与半透明的物体分开
先渲染不透明的物体,对比起深度值,并将其深度值写入缓冲
然后再渲染半透明物体,只对比深度值,不写入缓冲(半透明物体之间使用深度值)


Unity中的预定义渲染队列(队列索引号越小,越早被渲染)

渲染队列-----------------渲染队列索引
Background------------------1000 (skybox已经不在这里了)
Geometry---------------------2000
AlphaTest---------------------2450
Transparent------------------3000
Overlay------------------------4000

Shader "my/test"
{
  SubShader
  {
    Tags { "Queue" = "Geometry"}
  }
}

使用渲染队列后也会有一些问题
如果相互穿插,就没有办法得到正确的排序,进而得到错误的颜色值

解决方法:
1.拆分或优化模型的形状,降低穿插
2.调整混合参数,看起来不那么明显
3.预先深度Pass(Pre Depth Pass)方法(有额外drawcall)

相关文章

  • 渲染顺序

    一个不透明或半透明物体的显示状态应该怎样确定? 一般在画画的时候:首先将场景的多边形根据深度进行排序,然后按照顺序...

  • iOS绘制与渲染--图层属性

    图层属性的渲染顺序 在渲染处理期间,Core Animaiton持有图层的不同属性,并按顺序渲染这些属性。该顺序决...

  • 关于U3D DrawCall优化手记

    【一】渲染顺序 U3D的渲染是有顺序的,U3D的渲染顺序是由我们控制的,控制好U3D的渲染顺序,你才能控制好Dra...

  • 数据渲染顺序

    请求接口===>接口返回数据(并不是直接就渲染了)==>dom渲染数据(需要时间)===>最后才能拿到需要的高度值...

  • HTML渲染顺序

    我们知道,同一个HTML文件,各浏览器所呈现的内容最终是一致的,但是浏览器对HTML文档的渲染顺序是否相同呢?如C...

  • Unity渲染顺序

    Unity中的渲染顺序有三层: 第一层:Camera的depth,值越大渲染越在前面 第二层:Sorting La...

  • 浏览器解析CSS原理

    阅读原文 1、浏览器解析加载资源与渲染顺序 浏览器下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进...

  • Single Depth peeling 顺序无关渲染(OIT)

    什么是顺序无关渲染 在3D渲染中,物体的渲染是按一定的顺序渲染的,这也就可能导致半透明的物体先于不透明的物体渲染,...

  • Unity渲染顺序总结

    Unity渲染顺序一句话总结Unity物体渲染先后顺序【ShaderLab学习】RenderQueue理解论Ren...

  • 浏览器加载和渲染html的顺序-结论篇

    我只转载觉得可以使用的. 1.浏览器加载和渲染html的顺序 1、IE下载的顺序是从上到下,渲染的顺序也是从上到下...

网友评论

      本文标题:渲染顺序

      本文链接:https://www.haomeiwen.com/subject/qybduktx.html