个人学习笔记 ——【技术美术百人计划】图形 3.1 深度与模板测试 传送门效果示例

本文主要是介绍个人学习笔记 ——【技术美术百人计划】图形 3.1 深度与模板测试 传送门效果示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

个人学习笔记 ——【技术美术百人计划】图形 3.1 深度与模板测试 传送门效果示例


图形 3.1 深度与模板测试

  • 个人学习笔记 ——【技术美术百人计划】图形 3.1 深度与模板测试 传送门效果示例
  • 模板测试
    • 一、什么是模板测试?
      • 1.案例欣赏
    • 二、模板测试是什么?
      • 1. 从渲染管线出发
      • 2. 从逻辑上理解
      • 3. 从书面概念上理解
    • 三、 基本原理和使用方法
      • 1. 语法表示
      • 2. ComparisonFunction
      • 3. StencilOperation 更新值
    • 四、 案列讲解
      • 1. 案例一:3D卡牌效果
        • 1.1 蒙版的shader(StencilMask)
        • 1.2 物体的shader
        • 1.3 总结
      • 2. 案例二:盒子不同面显示不同场景
        • 2.1 蒙版的shader(StencilMask)
        • 2.2 物体的shader
        • 2.3 总结
    • 五、 模板测试总结
  • 深度测试
    • 一、 深度测试是什么
      • 1. 从渲染管线出发
      • 2.从逻辑上理解
      • 3.从书面概念上理解
      • 4.从发展上理解
    • 二、 基本原理和使用方法
      • 1. Z-Buffer(深度缓冲区)
      • 2. Z Write
      • 3. Z Test 的比较
      • 4.渲染队列
      • 5.简述 Early - Z 技术
      • 6.深度值
    • 三、Unity项目展示与讲解
      • 1.案例一:三个正方体的遮挡关系
      • 2.案例二 :透视X-Ray效果
      • 3.案例三:粒子特效
    • 四、 深度测试总结
    • 五、深度测试扩展
  • 作业
    • 尝试Unity实现地图扫描效果
  • 引用


B站:

【技术美术百人计划】图形 3.1 深度与模板测试 传送门效果示例

PPT:

图形 3.1 深度与模板测试


模板测试

一、什么是模板测试?

在这里插入图片描述

左图为颜色缓冲区中的一张图,在模板缓冲区中我们会给这张图的每一个片元分配一个0-255的数字(8位,默认为0)
中、右图可以看到,我们修改了一些0为1,通过自定义的一些准则;
如果1则输出
------不是则不输出
最后通过模板测试的结果就如右图所示

1.案例欣赏

传送门效果:可以看到左边传送门内的景象正是右侧的场景

在这里插入图片描述
Minions讲解的一些效果,例如3D卡牌效果、侦探镜效果等
MinionsArt

在这里插入图片描述

二、模板测试是什么?

1. 从渲染管线出发

在这里插入图片描述
**

注意:是在逐片元阶段操作

**

在这里插入图片描述
Pixel Ownership Test(像素权限测试) :控制当前屏幕像素的使用权限;
Scissor Test(裁剪测试),根据自定义,在Game/Scence确定要渲染的部分,默认是都渲染;
Alpha Test(透明度测试),提前设置一个透明度预值,只能实现不透明效果和全透明效果;
Stencil Test (模板测试),在输入片段的模板上进行,以确定片段是否该被拒绝;
Depth Tset (深度测试),在输入片段的深度值上进行,以确定片段是否该被拒绝;
Blending(透明度混合),用于实现半透明效果;
Dithering(抖动)

2. 从逻辑上理解

在这里插入图片描述

通过一定条件来判断是对该片元或片元属性执行抛弃操作还是保留操作

//掩码类比于PS,AE中的蒙版遮罩
if(当前模板缓冲参考值&读掩码 比较 模板缓冲区中值&读掩码){通过像素
}else{舍弃像素
}

3. 从书面概念上理解

模板缓冲区
模板缓冲区与颜色缓冲区和深度缓冲区类似;
模板缓冲区可以为屏幕上的每个像素点保存一个无符号整数值(通常的话是个8位整数);
这个值的具体意义视程序的具体应用而定;

在渲染的过程中,可以用这个值与一个预先设定的参考值相比较,根据比较的结果来决定是否更新相应的像素点的颜色值;
这个比较的过程被称为模板测试
模板测试发生在透明度测试(alpha test)之后深度测试(depth test)之前
如果模板测试通过,则相应的像素点更新,否则不更新;

三、 基本原理和使用方法

1. 语法表示

Stencil{Ref referenceValue  //给片元设置参考值取值范围为0——255ReadMask readMask   //读取掩码WriteMask writeMask  //写入掩码Comp comparisonFunction  //比较操作函数Pass stencilOperation   //通过模板测试Fail stencilOperation   //未通过模板测试Zfail stencilOperation  //模板测试通过,深度测试未通过
}

2. ComparisonFunction

在这里插入图片描述

3. StencilOperation 更新值

在这里插入图片描述

四、 案列讲解

1. 案例一:3D卡牌效果

在这里插入图片描述

实现效果

在这里插入图片描述

在材质中将ReferenceValue改为0时的效果(模型直接摆放时的显示效果)
Unity中模板缓冲区默认都是0

1.1 蒙版的shader(StencilMask)

在这里插入图片描述

    Properties{_ID("Mask ID", Int) = 1 //一个开放参数可控Mask ID的值}SubShader{Tags { "RenderType"="Opaque" //渲染类型为不透明物体 所以是Opaque"Queue" = "Geometry+1" //渲染队列+1 即默认的一个不透明物体的渲染队列的后面进行这个操作}ColorMask 0 //颜色遮罩,0就是什么都不输出为透明 可选RGBA0ZWrite Off //关闭深度写入,防止显示的东西被深度剔除Stencil

这篇关于个人学习笔记 ——【技术美术百人计划】图形 3.1 深度与模板测试 传送门效果示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/157300

相关文章

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va