Unity Shader 语义总结笔记

文章目录

    • 1. Queue(渲染队列)
      • **常见渲染队列**
      • **示例**
    • 2. `Blend`(混合模式)
      • **常见混合模式**
      • **混合因子(SrcFactor 和 DstFactor)**
        • **源因子(SrcFactor)**
        • **目标因子(DstFactor)**
      • **混合模式示例**
    • 3. `Cull`(剔除模式)
      • **常见剔除模式**
      • **剔除模式示例**
    • 4. `ColorMask`(颜色通道控制)
      • **常见的 `ColorMask` 设置**
      • **`ColorMask` 示例**
    • 5. `Offset`(深度偏移)
      • **总结**
      • **`Offset` 示例**
    • 6. `ZWrite`(深度写入)
      • **常见设置**
      • **`ZWrite` 示例**
    • 7.`ZTest`(深度测试)
      • **常见设置**
      • **`ZTest` 示例**
    • 8.`Stencil`(模板测试)
    • 常见的 `Stencil` 设置
    • 常见的模板比较函数(`CompFunc`)
    • 常见的模板操作(`PassOp`, `FailOp`, `ZFailOp`)
    • `Stencil` 示例
    • 9.`Fog`(雾效支持)
      • **常见的雾效类型**
      • **启用雾效的设置**

1. Queue(渲染队列)

Queue 决定了物体的渲染顺序,数值越小,越先渲染。

常见渲染队列

渲染队列说明
Background1000最早渲染,通常用于天空盒。
Geometry2000默认的,不透明物体。
AlphaTest2450透明测试(clip() 剪裁)物体。
Transparent3000透明物体(需要 ZWrite Off)。
Overlay4000UI、特效,最晚渲染。

示例

Tags { "Queue"="Transparent" }

2. Blend(混合模式)

Blend 控制源颜色和目标颜色的混合方式,常用于透明、特效等材质。源颜色是当前片元颜色,目标颜色是帧缓冲中的颜色。

常见混合模式

源因子(SrcFactor)目标因子(DstFactor)说明
OneZero直接覆盖(不透明)。
SrcAlphaOneMinusSrcAlpha标准透明混合,适用于透明物体。
OneOne叠加效果(加法混合,适用于光效)。
SrcAlphaOne半透明混合,常用于粒子系统。
DstColorZero乘法混合(适用于阴影、暗角)。

混合因子(SrcFactor 和 DstFactor)

源因子(SrcFactor)
  • One:源颜色的全部(1)。
  • Zero:源颜色的零(0)。
  • SrcAlpha:源颜色的透明度值。
  • OneMinusSrcAlpha:1减去源颜色的透明度值。
  • DstAlpha:目标颜色的透明度值。
  • OneMinusDstAlpha:1减去目标颜色的透明度值。
目标因子(DstFactor)
  • One:目标颜色的全部(1)。
  • Zero:目标颜色的零(0)。
  • SrcAlpha:源颜色的透明度值。
  • OneMinusSrcAlpha:1减去源颜色的透明度值。
  • DstAlpha:目标颜色的透明度值。
  • OneMinusDstAlpha:1减去目标颜色的透明度值。

混合模式示例

Blend SrcAlpha OneMinusSrcAlpha // 标准透明混合

总结

混合模式是透明和特效渲染的核心,选择合适的混合模式能够优化性能并实现所需效果。

3. Cull(剔除模式)

Cull 控制是否剔除物体的背面或正面,以提高渲染效率。剔除决定了哪些面会被渲染,哪些面会被忽略。

常见剔除模式

说明
Cull Back默认,仅渲染 正面,剔除背面。
Cull Front仅渲染 背面,剔除正面。
Cull Off不剔除任何面,渲染 双面

剔除模式示例

Cull Off // 双面渲染

总结

Cull 是提升渲染效率的一个重要参数,通常情况下,渲染 正面 面可以减少渲染负担,但有时需要根据效果需求渲染 双面反面

4. ColorMask(颜色通道控制)

ColorMask 控制片元输出到颜色缓冲区的颜色通道。可以用来禁用某些颜色通道的写入,常用于一些特殊效果,如只修改某个颜色通道或进行调色等操作。

常见的 ColorMask 设置

描述
ColorMask RGB仅写入 RGB 颜色通道,不写入 Alpha
ColorMask A仅写入 Alpha 颜色通道,不写入 RGB
ColorMask 0不写入任何颜色通道(通常只进行深度或模板测试)。
ColorMask RGBA默认,写入所有颜色通道(包括 RGBAlpha)。

ColorMask 示例

ColorMask RGB // 只写入颜色,不修改 Alpha 通道

总结

ColorMask 允许细粒度地控制哪些颜色信息可以被写入,从而对颜色输出进行灵活的管理,通常用于特效和调色。

5. Offset(深度偏移)

Offset 用于在渲染时调整片元的深度值,防止深度冲突或“Z-fighting”现象。通过在片元的深度值上添加一个偏移量,可以确保物体的深度顺序正确,尤其是在多个物体在相同的深度值上渲染时。

总结

设置描述
Offset 0, 0无深度偏移,适用于普通渲染。
Offset 1, 1轻微的深度偏移,减少闪烁。
Offset -1, -1轻微向前偏移,适用于描边和避免自遮挡。

Offset 主要用于处理 Z-fighting 问题,常见于需要确保物体层次分明的场景,如描边、特效等。

Offset 示例

Offset -1, -1  // 适用于描边,确保描边不被自身遮挡

6. ZWrite(深度写入)

ZWrite 控制是否将片元的深度值写入深度缓冲区。开启深度写入时,片元的深度值会被更新到深度缓冲区,这对于正确处理物体的前后关系至关重要。关闭深度写入时,片元的深度不会被更新,但依然可以进行深度测试,用于一些特殊效果,如透明物体的渲染。

常见设置

描述
ZWrite On启用深度写入,通常用于不透明物体。
ZWrite Off禁用深度写入,通常用于透明物体或特效。

ZWrite 示例

ZWrite On  // 启用深度写入,物体深度会更新

7.ZTest(深度测试)

ZTest 控制深度测试的方式,决定当前片元是否会被渲染。深度测试比较片元的深度值和深度缓冲中的已有值,以确定该片元是否在当前视图的前面。常见的深度测试有:LessGreaterEqual 等。

常见设置

描述
ZTest Less仅当片元的深度值小于当前深度缓冲中的值时,才通过深度测试并渲染。
ZTest LEqual仅当片元的深度值小于或等于当前深度缓冲中的值时,才通过深度测试并渲染。
ZTest Greater仅当片元的深度值大于当前深度缓冲中的值时,才通过深度测试并渲染。
ZTest GEqual仅当片元的深度值大于或等于当前深度缓冲中的值时,才通过深度测试并渲染。
ZTest Equal仅当片元的深度值与当前深度缓冲中的值相等时,才通过深度测试并渲染。
ZTest Never从不通过深度测试,所有片元都会被丢弃。
ZTest Always总是通过深度测试,所有片元都会被渲染。

ZTest 示例

ZTest LEqual // 允许深度值小于或等于当前深度缓冲的值时通过深度测试

综合示例

ZWrite Off:禁用深度写入,防止遮挡其他物体。
ZTest Always:让此物体无视深度缓冲,始终通过深度测试。
Queue = Overlay:让该对象的渲染顺序在 Transparent 之后,确保最前渲染。

这样就可以让物体一直显示在最上方

8.Stencil(模板测试)

Stencil 用于控制模板缓冲区的测试和操作,它允许基于某些条件对像素进行选择性渲染。通过模板测试,可以在渲染过程中对不同区域进行掩蔽,或者仅在满足特定条件时渲染物体。这对于复杂的渲染效果,如镜像、轮廓、特殊区域遮罩等非常有用。

常见的 Stencil 设置

操作描述
Stencil CompFunc控制模板测试的条件,决定何时进行模板测试。
Stencil PassOp控制模板测试通过后的操作。
Stencil FailOp控制模板测试失败时的操作。
Stencil ZFailOp控制深度测试失败时的模板操作。

常见的模板比较函数(CompFunc

描述
Always总是通过测试。
Equal仅当当前模板值与给定值相等时通过测试。
NotEqual仅当当前模板值与给定值不相等时通过测试。
Less仅当当前模板值小于给定值时通过测试。
LessEqual仅当当前模板值小于或等于给定值时通过测试。
Greater仅当当前模板值大于给定值时通过测试。
GreaterEqual仅当当前模板值大于或等于给定值时通过测试。
Never永远不通过模板测试。

常见的模板操作(PassOp, FailOp, ZFailOp

描述
Keep保持模板值不变。
Zero将模板值设置为 0。
Replace用新值替换模板值。
Increment增加模板值。
Decrement减少模板值。
Invert反转模板值。

Stencil 示例

Stencil {
    CompFunc Always       // 始终通过模板测试
    PassOp Replace       // 测试通过时替换模板值
    FailOp Keep          // 测试失败时保持当前模板值
    ZFailOp Keep         // 深度测试失败时保持模板值
}

Stencil 逻辑可以配合 UI 做高级遮罩。

9.Fog(雾效支持)

Fog 是一种视觉效果,用于模拟远处物体被雾气遮挡的效果,使得场景看起来更有深度。雾效通常用于大规模场景中,帮助模拟环境中的大气散射效应,增加真实感,或者创造某种氛围。Unity 支持在材质中启用雾效,通过着色器中的 Fog 设置来控制雾的外观。

常见的雾效类型

  1. 线性雾(Linear Fog)
    FOG_LINEAR根据物体与相机的距离,逐渐增加雾的强度,近处较清晰,远处逐渐被雾气遮挡。

  2. 指数雾(Exponential Fog)
    FOG_EXP雾气随着距离的增加而指数增长,距离越远,雾气越浓,通常用于模拟更加浓烈的雾霾效果。

  3. 指数平方雾(Exponential Squared Fog)
    FOG_EXP2与指数雾相似,但雾气的增长更为快速,适用于极端的雾霾环境。

启用雾效的设置

在 Shader 中启用雾效,通常使用 Fog 关键字和雾类型相关的设置。

#pragma multi_compile_fog // 启用雾效相关的编译

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/982411.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微服务架构下的 Node.js

Node.js 在微服务架构中的特点 轻量级和高效性 Node.js 以其轻量级和高效的特点,非常适合构建微服务架构。它具有事件驱动和非阻塞 I/O 模型,能够在处理高并发请求时表现出色。这意味着 Node.js 可以同时处理大量的并发连接,而不会因为阻塞…

用DeepSeek-R1-Distill-data-110k蒸馏中文数据集 微调Qwen2.5-7B-Instruct!

下载模型与数据 模型下载: huggingface: Qwen/Qwen2.5-7B-Instruct HF MirrorWe’re on a journey to advance and democratize artificial intelligence through open source and open science.https://hf-mirror.com/Qwen/Qwen2.5-7B-Instruct 魔搭&a…

flask-定时任务

文章目录 前言一、APScheduler是什么二、APScheduler 主要功能:三、主要组成部分:四、典型使用场景:五、具体使用1.安装 APScheduler2.假设我们有一个需要五分钟请求一次http接口的任务1.定义一个scheduler.py去专门处理定时2.启动文件处理3.…

Python的Pandas和matplotlib库:让数据可视化贼简单

在数据爆炸的时代,数据可视化已成为数据分析的关键环节。Python 作为强大的编程语言,拥有众多用于数据可视化的库,而 pandas 库在其中扮演着重要角色。它不仅能高效处理和分析数据,还具备强大的数据可视化功能,让我们轻…

rabbitmq版本升级并部署高可用

RabbitMQ版本升级 先检查是否已经安装rabbitmq rpm -qa|grep rabbitmq|wc -l //如果结果是0,表示没有安装 rpm -e --nodeps $(rpm -qa|grep rabbitmq) //如安装了,则进行卸载 先检查是否已经安装erlang rpm -qa|grep erlang|wc -l //如果结果…

Electron-Forge + Vue3 项目初始化

本人对Electron的浅薄理解如下图所示 由上图可以,如果你需要开发一个electron应用,你得具备基本的前端开发经验。对于electron相关的知识,建议先了解下基本的窗口操作,比如新建窗口、关闭窗口等简单的操作,这些内容在…

pinginfoview网络诊断工具中文版

介绍 pinginfoview中文版本是一款实用的网络诊断工具,它专为中文用户设计,提供了方便易用的界面,使得在Windows环境下进行ping测试变得更加简单。该工具是由NirSoft开发的一款免费的桌面应用程序,尽管官方可能并未正式发布中文版…

DeepSeek R1 + 飞书机器人实现AI智能助手

效果 TFChat项目地址 https://github.com/fish2018/TFChat 腾讯大模型知识引擎用的是DeepSeek R1,项目为sanic和redis实现,利用httpx异步处理流式响应,同时使用buffer来避免频繁调用飞书接口更新卡片的网络耗时。为了进一步减少网络IO消耗&…

Go学习笔记:基础语法3

1. 常量 Go语言中的常量使用关键字const定义,用于存储不会改变的数据,常量是在编译时被创建的,即使定义在函数内部也是如此,并且只能是布尔型、数字型(整数型、浮点型和复数)和字符串型。 由于编译时的限…

010---基于Verilog HDL的分频器设计

文章目录 摘要一、时序图二、程序设计2.1 rtl2.2 tb 三、仿真分析四、实用性 摘要 文章为学习记录。绘制时序图,编码。通过修改分频值参数,实现一定范围分频值内的任意分频器设计。 一、时序图 二、程序设计 2.1 rtl module divider #(parameter D…

EX_25/3/6

1&#xff1a;是进度条通过线程自己动起来 myThread.h #ifndef MYTHREAD_H #define MYTHREAD_H#include <QThread>class myThread : public QThread {Q_OBJECT public:myThread(QObject* partennullptr);signals:void sig(int value);protected:void run();private:int…

客户端及时通讯系统(1)

编写核心数据结构 一、核心数据结构介绍二、将本地新项目推送到gitee已有仓库上三、代码实现3.1 核心数据结构成员变量设计和工具类设计 一、核心数据结构介绍 1&#xff09;用户信息&#xff08;UserTnfo&#xff09; 用户的属性 2&#xff09;会话信息&#xff08;ChatSess…

针对半导体行业招聘系统有哪些?

近年来&#xff0c;全球半导体产业迎来爆发式增长&#xff0c;芯片设计、制造、封装等环节对高技能人才的需求急剧攀升。然而&#xff0c;行业面临多重挑战&#xff1a;技术迭代快导致岗位要求动态变化、优质人才争夺激烈、传统招聘模式效率低下。以某头部半导体企业为例&#…

汽车智能钥匙中PKE低频天线的作用

PKE&#xff08;Passive Keyless Entry&#xff09;即被动式无钥匙进入系统&#xff0c;汽车智能钥匙中PKE低频天线在现代汽车的智能功能和安全保障方面发挥着关键作用&#xff0c;以下是其具体作用&#xff1a; 信号交互与身份认证 低频信号接收&#xff1a;当车主靠近车辆时…

清华大学DeepSeek赋能家庭教育【附下载链接】

核心要点&#xff1a; DeepSeek通过基础模型&#xff08;V3&#xff09;、深度思考模型&#xff08;R1&#xff09;及联网模型&#xff0c;为家庭教育提供分层支持&#xff1a;V3用于作业辅导&#xff0c;R1培养批判性思维&#xff0c;联网模型助力探究性学习。家长需遵循目标导…

是德科技十周年:以创新丈量未来,用科技赋能世界

是德科技成立十周年&#xff0c;以全球测试测量领域领军者的姿态&#xff0c;书写了一部突破与创新的发展史诗。作为从惠普、安捷伦深厚技术积淀中孕育而生的行业标杆&#xff0c;十年来是德科技始终站在科技浪潮之巅&#xff0c;构建起覆盖5G通信、人工智能、汽车电子、量子计…

Springboot 梳理

一、Springboot 特性 方便创建可独立运行的spring应用程序直接内嵌Tomcat等服务简化了项目的构建配置为spring及第三方库提供自动配置提供生产级特性无需生成代码或者进行xml配置 二、四大核心 自动配置起步依赖命令行界面Actuator - 生成级的特性 三、自动配置的实现原理 …

unity console日志双击响应事件扩展

1 对于项目中一些比较长的日志&#xff0c;比如前后端交互协议具体数据等&#xff0c;这些日志内容可能会比较长&#xff0c;在unity控制面板上查看不是十分方便&#xff0c;我们可以对双击事件进行扩展&#xff0c;将日志保存到一个文本中&#xff0c;然后用系统默认的文本查看…

GPIO相关寄存器

共七种寄存器用于控制GPIO GPIOx_CRL&#xff08;常用&#xff09; GPIOx_CRH&#xff08;常用&#xff09; GPIOx_IDR&#xff08;常用&#xff09; GPIOx_ODR&#xff08;常用&#xff09; GPIOx_BSRR&#xff08;常用&#xff09; GPIOx_BRR&#xff08;不常用&#x…

简单多状态 dp 问题(典型算法思想)—— OJ例题算法解析思路

目录 一、面试题 17.16. 按摩师 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a; 代码思路解析&#xff1a; 问题分析&#xff1a; 动态规划定义&#xff1a; 状态转移方程&#xff1a; 初始化&#xff1a; 填表&#xff1a; 返回值&#xff1a; 优化空…