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

裁剪+渲染队列+透明与混合

裁剪命令

        在引擎中,模型一般不会渲染背面,因为往往用户看不到,渲染背面,还会消耗GPU性

        能,但是可以再Shader中控制裁剪类型。

        Cull值(Front|Back|Off),编写在Pass通道内

                Back:裁剪模型背面,不显示模型的背面(默认值)

                Front:裁剪模型正面,不显示模型的正面

                Off:不裁剪,全部都显示。

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "CreateTest/Cull"
{Properties{_Color("Color",Color) = (1,1,1,1)}SubShader{Pass{//裁剪命令//裁剪哪个面,哪个面消失//Back:不显示背面//Front:不显示正面//Off:正反都显示Cull OffCGPROGRAM#pragma vertex vert#pragma fragment fragfixed4 _Color;float4 vert(float4 vertex:POSITION) :SV_POSITION{return UnityObjectToClipPos(vertex);}fixed4 frag(float4 pos:SV_POSITION) : SV_Target{return _Color;}ENDCG}}Fallback "Diffuse"
}

下图绿色平面为实现以上Shader效果的平面,通过Cull Off指令,可使背面被裁剪的面显示(选中为挂载Standard Shader的平面):

渲染顺序

        默认的渲染顺序原则:距离相机越近,则渲染越靠前,非透明情况下,靠前的物体会盖住

        靠后的物体。

        深度:被渲染的物体,到摄像机的距离

        深度测试:比较当前渲染的物体的深度值。

        深度写入:当深度测试确定需要替换颜色时,将需要显示的颜色对应的深度信息写入深

        度缓冲区。

        深度缓冲区

Unity会为屏幕的每个点,设定一个存储有当前渲染的颜色的深度值(相机到颜色点物体的距离),物体如果在摄像机视角上发生重叠后,需要计算每个重叠点像素的深度值,如果被渲染物体的深度值小于已经存储在深度缓冲区内的值,则将被渲染物体的像素点颜色替换掉原有的颜色。默认的深度值是正无穷。

        颜色缓冲区:与深度缓冲区中像素点一一对应,存储有最终显示在屏幕上的颜色信息,就

        一个像素点而言,应该存储有一个颜色信息。

深度测试

        ZTest表示深度测试通过的条件

                Off:深度测试永远通过,同Always

                Less:比深度缓冲区中深度值小时,测试通过

                LEqual(默认值):比深度缓冲区中深度值小或相等时,测试通过

                Euqal:比深度缓冲区中深度值相等时,测试通过

                NotEqual:比深度缓冲区中深度值不相等时,测试通过

                Greater:比深度缓冲区中深度值大时,测试通过

                GEqual:比深度缓冲区中深度值大于等于时,测试通过

                Always:深度测试永远通过

        编写方法:

        测试成功,颜色会写入颜色缓冲区中,但是屏幕最终显示的颜色,不一定是当前物体上

        的颜色,前方还可能有物体。

渲染类型

        不透明物体,使用Opaque

        透明物体,使用Transparent

        ZWrite:控制深度测试成功后,是否进行深度写入

                On:开启写入

                Off:关闭写入

        当深度写入关闭时,即使深度测试完全通过,颜色缓冲区不会被写入,必须将深度的物

        体,放置在Transparent队列下,颜色缓冲区的更新才会正常,Unity内置的透明物体

        Shader,会关闭深度写入。

        当透明物体在前,非透明物体在后,深度测试都使用默认状态,深度写入保持开启,结果

        会出现透明物体正常显示,非透明物体被透明物体遮盖的部分,会显示为透明物体颜色。

渲染队列

        渲染顺序:是从小向大依次渲染

        Background(1000):最早被渲染的队列值,(天空盒,背景等)

        Geometry(2000):默认队列,不透明物体的队列值

        AlphaTest(2450):透明度测试队列

        Transparent(3000):渲染透明物体存放的队列

        Overlay(4000):需要覆盖显示的队列(镜头光晕)

        添加方法:

        查看渲染队列的方法:

        discard用法示例:

//前面的代码同纹理采样文章代码
fixed4 frag(v2f data):SV_Target
{//通过Tex2D,解出主纹理对应的颜色值fixed4 texColor=tex2D(_MainTex,data.uv);if(texColor.a<0.5)  //如果纹理颜色的透明度值小于0.5{discard;//丢弃小于0.5的像素}//混色采用向量乘法实现return texColor * _Color;
}
颜色混合

        光的混合方式

                Color(r,g,b,a)*倍数=Color(r*倍数,g*倍数,b*倍数,a*倍数)

                Color1(r,g,b,a)+Color2(r,g,b,a)=Color3(r1+r2,g1+g2,b1+b2,a1+a2)

                Color1(r,g,b,a)*Color2(r,g,b,a)=Color3(r1*r2,g1*g2,b1*b2,a1*a2)

        命令

                Blend SrcFactor DstFactor

        混合公式

                最终的颜色=新颜色*SrcFactor+旧颜色*DstFactor

                旧颜色:上一个Pass通道,颜色缓冲区

                新颜色:当前Pass通道的颜色

        常用系数

         常用混合方式     

                        //线性减淡(Linear Dodge)

                        Blend One One

        常用混合模式

                半透明物体使用的混合模式:Blend SrcAlpha OneMinusSrcAlpha

                颜色叠加:Blend One One(在第二个Pass通道使用可实现颜色叠加,例:红+绿=黄)

该系列专栏为网课课程笔记,仅用于学习参考。      

相关文章:

  • CPU:AMD的线程撕裂者(Threadripper)和霄龙(EPYC)的区别
  • 构建更快,部署更智能:立即优化您的 Docker 设置
  • 每天学一个 Linux 命令(34):wc
  • 组件通信-provide、inject
  • whl文件名后缀
  • 传奇各职业/战士/法师/道士/戒指爆率及出处产出地/圣战/法神/天尊/虹魔/魔血/麻痹/超负载/求婚/隐身/传送/复活/护身/祈祷/火焰
  • PyQt 或 PySide6 进行 GUI 开发文档与教程
  • 电商平台的订单状态设计流程
  • NHANES指标推荐:TyG指数
  • 计算机启动流程中,都干了啥事。比如文件挂在,操作系统加载,中断向量表加载,磁盘初始化在哪阶段。
  • K8S - 深入解析 Service 与 Ingress - 服务暴露与流量管理
  • 在多socket多核计算机上配置MPI和OpenMP
  • Protubuf入门 --- 01基本语法与编译使用
  • C语言数据类型与内存布局
  • 算法竞赛进阶指南.巡逻
  • 13分区排烟 无法远程启动 12-1-4,排烟管道出口未连接室外
  • Linux-07-Shell
  • python常用科学计算库及使用示例
  • 数字智慧方案6185丨智慧银行解决方案(51页PPT)(文末有下载方式)
  • 【免费】2010-2019年上市公司排污费数据
  • 澳大利亚大选今日投票:聚焦生活成本与“特朗普问题”
  • 多地景区发公告称售票达接待峰值,有景区暂停网络和线下售票
  • 山东一景区怕游客赶不到海撒三千斤蛤蜊:给游客提供情绪价值
  • 生命与大海相连:他在300多米的深海行走,在沉船一线打捞救援
  • 5月资金面前瞻:政府债净融资规模预计显著抬升,央行有望提供流动性支持
  • 向左繁华都市,向右和美乡村,嘉兴如何打造城乡融合发展样本