首页 > 其他分享 >ShaderType与Queue区别

ShaderType与Queue区别

时间:2024-10-23 14:33:37浏览次数:1  
标签:... 渲染 队列 ShaderType 区别 Shader Queue RenderType 着色器

RenderType与Queue的区别

指定RenderType的名称,主要是为了替换渲染方式; 而Queue是设定渲染顺序。

RenderType

RenderType通常使用的值包括:

  • Opaque: 用于大多数着色器(法线着色器、自发光着色器、反射着色器以及地形的着色器)。
  • Transparent:用于半透明着色器(透明着色器、粒子着色器、字体着色器、地形额外通道的着色器)。
  • TransparentCutout: 蒙皮透明着色器(Transparent Cutout,两个通道的植被着色器)。
  • Background: Skybox shaders. 天空盒着色器。
  • Overlay: GUITexture, Halo, Flare shaders. 光晕着色器、闪光着色器。
  • TreeOpaque: terrain engine tree bark. 地形引擎中的树皮。
  • TreeTransparentCutout: terrain engine tree leaves. 地形引擎中的树叶。
  • TreeBillboard: terrain engine billboarded trees. 地形引擎中的广告牌树。
  • Grass: terrain engine grass. 地形引擎中的草。
  • GrassBillboard: terrain engine billboarded grass. 地形引擎何中的广告牌草。

这些RenderType的类型名称实际上是一种约定,用来区别这个Shader要渲染的对象,当然你也可以改成自定义的名称,只不过需要自己区别场景中不同渲染对象使用的Shader的RenderType的类型名称不同,也就是说RenderType类型名称使用自定义的名称并不会对该Shader的使用和着色效果产生影响。

指定RenderType的名称,替代渲染的方法:

//调用替代渲染的方法:
Camera.SetReplacementShader("shader1","RenderTypeName")
//如果shader1为:
Shader "shader1"{
    Properties{...}
    SubShader{
    Tags{"RenderType"="Opaque" "A"="On"}
    Pass{...}   
    }
    SubShader{
    Tags{"RenderType"="Transparent"  "A"="Off"}
    Pass{...}   
    }
}
//shader2为:
Shader "shader2"{
    Properties{...}
    SubShader{
    Tags{"RenderType"="Opaque" "A"="On"}
    Pass{...}   
    }
}
//shader3为:
Shader "shader3"{
    Properties{...}
    SubShader{
    Tags{"RenderType"="Transparent" "A"="On"}
    Pass{...}   
    }
}

替代渲染的调用方式为:

Camera.SetReplacementShader("shader1","A")

最后的结果是,shader1的第一个SubShader将会替换shader2和shader3

Queue

Queue渲染队列,用来指定当前shader作用的对象的渲染顺序:
Unity中的几种内置的渲染队列,按照渲染顺序,从先到后进行排序,队列数越小的,越先渲染,队列数越大的,越后渲染。

  • Background(1000) 最早被渲染的物体的队列。先渲染被后渲染遮挡,如天空盒背景最先渲染。
  • Geometry (2000) 不透明物体的渲染队列。大多数物体都应该使用该队列进行渲染,也是Unity Shader中默认的渲染队列。
  • AlphaTest (2450) 有透明通道,需要进行Alpha Test的物体的队列,比在Geomerty中更有效。
  • Transparent(3000) 半透物体的渲染队列。一般是不写深度的物体,Alpha Blend等的在该队列渲染。
  • Overlay (4000) 最后被渲染的物体的队列,一般是覆盖效果,比如镜头光晕,屏幕贴片之类的

标签:...,渲染,队列,ShaderType,区别,Shader,Queue,RenderType,着色器
From: https://www.cnblogs.com/comradexiao/p/18496314

相关文章

  • IDE和IDEA的定义和区别
    IDE(集成开发环境)定义:IDE是集成开发环境的缩写,是一种用于提供程序开发环境的应用程序。它集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。特点:IDE旨在提高开发人员的生产力,简化开发过程,并......
  • Cmake中“目标层级“的概念(target_include_directories和include_directories的区别)
    CMake中,“目标层级”(Target-Level)是一个核心概念,涉及到项目中构建的具体实体,如可执行文件、库等。理解目标层级对于有效地使用现代CMake功能、管理依赖关系以及配置构建过程至关重要。以下将详细解释什么是目标层级、其重要性以及如何在CMake中应用相关命令。什么是“......
  • Vue 2 和 Vue 3 区别(解析组合式与选项式)
    Vue2和Vue3在组件的组织方式上有一些重要的区别,主要体现在选项式API(OptionsAPI)和组合式API(CompositionAPI)上。下面我将详细介绍这两种API的区别,并提供相应的代码示例。选项式API(OptionsAPI)选项式API是Vue2中最常用的API风格,它通过选项来组织组件的逻......
  • Lambda 架构 vs Kappa 架构区别
    酒店lambda架构、kappa架构  Lambda架构面临的挑战是,您需要为实时层和批处理层复制预处理和其他常见工作,因此建议对这两种提取使用相同的服务,例如Spark,它有助于完成这两种操作。Kappa架构的引入是为了采用统一的方法来应对这一挑战,并且只有一个流层,使用ApacheKa......
  • 说说进程间通信和线程间通信的几种方式及区别
    进程和线程的区别:进程:是资源分配的基本单位;线程:是程序执行的最小单位进程间的通信方式:管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。有名管道(namedpipe):有名管道也是半双工的通......
  • USB 包的分类(令牌包这些)与USB 域的区别及关系
    USB包与USB域的区别与关系USB域与USB包:基础概念USB域:USB数据流中的最小单位,类似于计算机中的比特。它包含了特定的信息,如同步信号、包标识、地址等。USB包:由多个USB域组成的更大单位,是USB数据传输的基本单元。一个USB包包含了完整的传输信息,包括起始、数据、校......
  • Python 数据分析与可视化有什么区别
    在当今的数据驱动时代,Python已成为数据分析和数据可视化的重要工具。尽管这两个领域经常在数据科学项目中相互交织,但它们在功能和目的上存在本质区别。本文旨在详细探讨Python在数据分析和数据可视化方面的差异,包括它们的定义、使用的主要库、应用场景以及在实际项目中的作用。通......
  • location中root和alias的区别
    nginx指定文件路径有两种方式root和alias,这两者的用法区别,使用方法总结了下,方便大家在应用过程中,快速响应。root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。[root]语法:rootpath默认值:roothtml配置段:http、serv......
  • 【架构与设计】常见微服务分层架构的区别和落地实践
    作者:京东科技康志兴前言从强调内外隔离的六边形架构,逐渐发展衍生出的层层递进、注重领域模型的洋葱架构,再到和DDD完美契合的整洁架构。架构风格的不断演进,其实就是为了适应软件需求越来越复杂的特点。可以看到,越现代的架构风格越倾向于清晰的职责定位,且让领域模型成为架构的......
  • 全息投影是什么,与AR的区别是什么
    全息投影和增强现实(AR)都是现代技术领域的热门话题。两者的主要区别包括:1.技术原理和应用;2.展示内容的方式;3.用户互动性;4.设备需求;5.使用场景;6.成本和实现难度。全息投影是通过干涉和衍射原理将物体的三维形态投射到空中,而AR则是通过相机捕捉现实世界并在其上叠加虚拟信息。1.技......