【知识学习】阐述Unity3D中Stencil的概念及使用方法示例

news2024/11/17 7:52:39

在Unity3D中,Stencil(模板)是一种高级的图形渲染技术,它允许开发者对渲染过程进行精细控制。Stencil Buffer是附加在颜色缓冲区和深度缓冲区之外的另一个缓冲区,它可以用来存储每个像素是否应该被渲染的信息。

Stencil Buffer 的基本概念

  • Stencil Test: 模板测试,它在像素片段通过深度测试之后进行,根据模板缓冲区中的值来决定是否渲染该像素。
  • Reference Value: 参考值,模板测试将使用这个值与模板缓冲区中的值进行比较。
  • Compare Function: 比较函数,定义了模板测试的条件,比如等于、不等于、小于等。
  • Stencil Actions: 模板动作,定义了测试通过或失败时对模板缓冲区的值进行的操作,如替换、增加、减少等。

使用 Stencil 的场景

  1. 轮廓线渲染:在物体周围绘制轮廓线。
  2. 遮挡剔除:防止某些对象被其他对象遮挡。
  3. 特殊效果:如阴影、反射、折射等。

使用方法示例

在Unity中,Stencil的使用通常涉及到自定义Shader。以下是一个简单的Stencil Shader示例,它展示了如何使用Stencil来实现一个简单的轮廓线效果:

Shader "Custom/StencilOutline" {
    Properties {
        _MainTex ("Texture", 2D) = "white" {}
        _OutlineColor ("Outline Color", Color) = (0,0,0,1)
        _OutlineWidth ("Outline Width", Float) = 1.0
    }
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            struct appdata {
                float4 vertex : POSITION;
            };

            struct v2f {
                float4 pos : SV_POSITION;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
            fixed4 _OutlineColor;
            float _OutlineWidth;

            v2f vert (appdata v) {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target {
                // 根据模板测试的结果来决定是否渲染轮廓线
                return _OutlineColor;
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
}

在这个Shader中,我们没有实现完整的轮廓线渲染逻辑,但是它展示了如何设置一个Shader来使用Stencil。在实际使用中,你需要在Pass中设置Stencil的状态,例如:

Stencil
{
    Ref 1
    Comp Always
    Pass Replace
}

行代码设置了Stencil的参考值为1,总是通过测试,并且当测试通过时,使用替换操作来更新Stencil Buffer的值。

在Unity的渲染管线中,你可能还需要在渲染设置中配置Stencil状态,或者使用命令如GL.Stencil()来动态设置Stencil状态。

请注意,Stencil的使用需要对Unity的渲染流程和Shader编写有一定的了解。Stencil技术可以创建一些非常酷的效果,但是也需要仔细考虑性能影响和渲染顺序。

扫描下方二维码

获取更多游戏开发知识和学习资料~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录samba账号操作日志,增删改查等(安全审计)

说明:windows用户映射samba文件共享服务,记录samba账号的操作日志 只要三步! 安装必要软件包 audit配置samba共享配置Syslog 具体步骤 1. 安装必要的软件包 audit 是linux系统的高级审计框架 主要功能:系统调用监控、文件和目…

安科瑞智能物联网远传电表的优势

物联网远传智能电表是一种新型的电表,它通过物联网技术实现了电能的远程监测和管理。下面是物联网远传智能电表的优缺点:王盼盼;18721098782/Acrel 优点: 1. 实现了电能的远程监测和管理,可以随时随地了解电能的使用…

【EtherCAT】TwinCAT3通过PLC修改SDO数据

目录 1、打开twincat3, 左边PLC右键->添加新项,建立PLC工程 2、->References右键添加库 3、找到Tc2_EtherCAT库,点确定。 4、PLC程序ST语言就可以调用下面的功能块函数 5、PLC编程界面右键->输入助手 1、打开twincat3, 左边PLC右键->添…

7月开始,考研数学0️⃣基础线代30天满分规划

线代零基础? 那千万不要去跟李永乐老师的线代课程,因为李永乐老师的线代课程比较进阶,适合有一定基础的同学去听,下面这两位才是零基础线代的神! 一个是喻老,另外一个是汤家凤! 这两个老师的…

目标检测系列(四)利用pyqt5实现yolov8目标检测GUI界面

目录 1、pyqt5安装 2、PyCharm添加Qt Designer、PyUIC 3、Qt Designer设计界面 4、根据ui文件自动生成py文件 5、修改py文件来调用检测程序 6、执行py文件启动 1、pyqt5安装 Qt Designer:一个用于创建图形用户界面的工具,可轻松构建复杂的用户界面…

JOSEF约瑟 JOXL-J拉绳开关 整定范围宽

用途 双向拉绳开关的壳体采用金属材料铸造,具有足够的机械强度,抵抗并下工作时脱落的岩石,爆块等物体的撞击不被破坏,当胶带输送机发生紧急事故时,启动拉绳开关,可立即停机报警,防止事故的扩大,保证工作现场的人身安全…

js获取字符串中超链接,并加样式跳转页面

效果图 主要代码:js this.$nextTick(() > {// 给循环出来的div标签加个id为let container document.getElementById("linkTo");container.innerHTML container.textContent.replace(/(https?:\/\/[^\s])/g, function (match) {var link documen…

代码随想录算法训练营:14/60

非科班学习算法day14 | LeetCode266:翻转二叉树 ,Leetcode101: 对称二叉树,Leetcode100:相同的的树 ,LeetCode572:另一颗树的子树,LeetCode104:二叉树的最大深度,LeetCode559:N叉树的最大深度 目…

将产品制作成3D模型在网站上展示需要多少费用?

将产品制作成3D模型并在网站上展示的费用会因多种因素而异,包括模型的复杂度、所需的细节程度、制作3D模型的软件和工具、以及是否需要专业设计师的服务等。此外,不同的3D模型制作服务提供商可能会有不同的定价标准。 如果能自己制作3D模型,…

精益生产推进时如何营造持续变革的氛围?

在快速变化的市场环境中,企业如何保持竞争力?精益生产无疑为众多企业提供了一个强大的战略工具。但是,单纯的引入精益生产理念和方法并不能保证企业的持续成功。关键在于如何营造一种持续变革的氛围,让精益生产成为推动企业不断前…

职升网:咨询工程师可以的工作都有啥?

(1)经济社会发展规划、计划咨询; (2)行业发展规划和产业政策咨询; (3)经济建设专题咨询; (4)投资机会研究; (5)工程项目建议书的编制; (6)工程项目可行性研究报告的编制; (7)工程项目评估; (8)工程项目融资咨询,绩效追综评价,后评价及培训咨询服务…

零信任价值获全面认可 新场景下展现无穷潜力

2023年,零信任在全球范围内持续快速发展,已经从新的安全理念发展成为云时代的主流安全架构,进入了全面普及期。 2023年,中国零信任市场同样涨势迅猛,产业生态越来越成熟,应用范围越来越广,应用…

【数据库】oracle安装步骤(详细)

目录 1.下载oracle安装包 2.解压文件后,找到可执行安装文件【 setup.exe 】双击安装。如图: 3.安装第一步:配置安全更新,这步可将自己的电子邮件地址填写进去(也可以不填写,只是收到一些没什么用的邮件而…

高中数学:不等式-常用不等式知识点汇总

一、基本性质 比较大小的常用两种方法:作差法,作商法 等式性质 不等式性质 二、基本(均值)不等式 扩展 三、二次函数与一元二次方程不等式 定义 解的对应关系 一元二次不等式的求解过程 四、二元一次不等式(组)与线性规划 关键在于求多个不等…

第2章.现场设备的物联网模式--设备网关

第2章.现场设备的物联网模式 本章列出了与现场设备或事物相关的关键模式。阅读本章后,您将能够识别物联网架构中这些模式的存在。它提供了有关模式适合或适用的场景的详细信息,以及需要考虑的约束。这将帮助您相对轻松地理解现有的物联网架构。 本章涵盖…

Linux系统查询磁盘空间大小(df、du)

df命令是linux系统以磁盘分区为单位查看文件系统,可以加上参数查看磁盘剩余空间信息, 命令格式:df -hl 显示格式为: Filesystem(文件系统) Size(容量) Used(已用) Avail(可用) Use%(已用%) Mounted on(挂载点) 命令使用详细介绍 …

探索未来驾驶新纪元:加油App开发,您的智能出行助手

一、前言 随着科技的快速发展和人们生活节奏的加快,传统加油方式已逐渐无法满足现代驾驶者的需求。为了满足广大驾驶者的便捷、高效、智能的加油体验,我们倾力打造了一款全新的加油App,让您的出行更加轻松、愉快。 二、产品特色 智能导航&…

基于FreeRTOS+STM32CubeMX+LCD1602+MCP3308(SPI接口)的8通道ADC转换器Proteus仿真

一、仿真原理图: 二、仿真效果: 三、STM32CubeMX配置: 1)、时钟配置: 2)、USART配置: 四、软件部分: 1)、主功能函数: 2)、初始化部分: /* USER CODE BEGIN Header */ /** ******************************************************************************

ZYNQ学习教程?ZYNQ-FPGA实战教程!

学习 ZYNQ 比FPGA、MCU、ARM 等传统工具开发要求更高,想学好 ZYNQ 也不是一蹴而就的事情。 学习 ZYNQ 要具备的技能: 1、 软件开发人员  计算机组成原理、 C、C语言、 计算机操作系统、tcl 脚本、良好的英语基础 2、 逻辑开发人员 计算机组成原理…

台球厅助教软件开发台球陪练系统源码助教陪练行业市场分析

市场分析 随着台球运动的普及和竞技水平的不断提升,台球助教市场也逐渐成为了一个备受关注的领域。然而,如何高效、规范地管理这一市场,确保助教质量,提升用户体验,成为了摆在我们面前的一大挑战。幸运的是&#xff0…