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

Unity 内置枚举(Option Stencil)

最近工作强度有点高,实在没有精力再写文章,每天下班回到家小宝宝都睡着了。今天周末,为大家整理最近再工作中需要暴露给美术自己修改的参数(不过大部分美术还是不会懂,我一般傻瓜式的给美术写好备注,blend用什么,A dditive 什么,毕竟美术也没有逻辑性思维),这个文章主要也是写给程序看的 ,之前写了一般的量子力学的波函数文章还没写完,大家担当点,实在是没精力。

截图留真相,确实有在写,请各位大佬多等等。

话不多说,上才艺 :

如图:

 

直接上代码,看简单注释,可以对应名称查找具体说明 。

Shader "XiongMaoWuDao/XiongMaoWuDao_Enum"
{
    Properties
    {
        [MainColor] _BaseColor("BaseColor", Color) = (1,1,1,1)
        [MainTexture] _BaseMap("BaseMap", 2D) = "white" {}


        [Header(Option)]
        [Enum(UnityEngine.Rendering.BlendOp)]  _BlendOp  ("BlendOp", Float) = 0  对源和目标颜色进行其他操作,而不是默认的相加
		//Blend SrcFactor DstFactor//用同样的因子对rgba进行混合(默认都开启混合)第一个参数对源颜色(当前片元颜色,ps输出的颜色)*SrcFactor混合,
        //第二个参数对目标颜色(当前读到的缓冲区颜色)*DstFactor混合,混合后默认相加后会重新写入缓冲区(相加后超过1的自动截断到1)。混合包括RABG值。
		//结果都是源颜色和目标颜色与各自因子相乘后再加起来作为输出颜色。
		//Blend SrcFactor DstFactor,SrcFactorA DstFactorA//把rgb和a的混合因子分开。
        [Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend ("SrcBlend", Float) = 1
        [Enum(UnityEngine.Rendering.BlendMode)] _DstBlend ("DstBlend", Float) = 0
		
		[Enum(Off, 0, On, 1)]_ZWriteMode ("ZWrite", float) = 1  //深度写入
		// Greater/GEqual/Less/LEqual/Equal/NotEqual/Always/Never/Off,默认值为LEqual 即当物体深度小于或等于缓存深度值时(越远深度越大),该物体渲染,就是默认的先后顺序渲染。
        [Enum(UnityEngine.Rendering.CompareFunction)]_ZTestMode ("ZTest", Float) = 4 //深度测试
        [Enum(UnityEngine.Rendering.ColorWriteMask)]_ColorMask ("ColorMask", Float) = 15
	    [Enum(UnityEngine.Rendering.CullMode)]_CullMode ("Cull", float) = 2  //裁剪 


		//模板测试
		//Stencil如果开启了模板测试,GPU会首先会读取模板缓冲区的值,然后把该值和读取的参考值ref进行比较,比较方式由Comp指定,比如大于Greater就表示通过模板测试,
       //  然后由Pass Fail ZFail去指定通过和不通过模板和深度测试后对缓冲区的值进行的Operation处理。
        [Header(Stencil)]
        [Enum(UnityEngine.Rendering.CompareFunction)]_StencilComp ("Stencil Comparison", Float) = 8
        [IntRange]_StencilWriteMask ("Stencil Write Mask", Range(0,255)) = 255
        [IntRange]_StencilReadMask ("Stencil Read Mask", Range(0,255)) = 255
        [IntRange]_Stencil ("Stencil ID", Range(0,255)) = 0
        [Enum(UnityEngine.Rendering.StencilOp)]_StencilPass ("Stencil Pass", Float) = 0
        [Enum(UnityEngine.Rendering.StencilOp)]_StencilFail ("Stencil Fail", Float) = 0
        [Enum(UnityEngine.Rendering.StencilOp)]_StencilZFail ("Stencil ZFail", Float) = 0

    }
    SubShader
    {
        Tags { "RenderType"="Opaque" "RenderPipeline"="UniversalRenderPipeline" "Queue"="Geometry"}

		  BlendOp [_BlendOp]
            Blend [_SrcBlend] [_DstBlend]
            ZWrite [_ZWriteMode]
            ZTest [_ZTestMode]
            Cull [_CullMode]
            ColorMask [_ColorMask]

            Stencil
            {
                Ref [_Stencil]   //设置模板参考值
                Comp [_StencilComp] //比较方式,有8种比较方式。参数包括Greater/GEqual/Less/LEqual/Equal/NotEqual/Always/Never
                ReadMask [_StencilReadMask]  //readMask默认是255,一般不用该功能,设置隐码后 读取ref和buff值都需要与该码进行与操作。(0-255)
                WriteMask [_StencilWriteMask] //写操作进行与操作
                Pass [_StencilPass]   //这个是当stencil测试和深度测试都通过的时候,进行的stencilOperation操作方法
                Fail [_StencilFail]   //这个是在stencil测试通过的时候执行的stencilOperation方法
                ZFail [_StencilZFail] //这个是在stencil测试通过,但是深度测试没有通过的时候执行的stencilOperation方法。
			}


        Pass
        {
            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

            struct Attributes
            {
                float4 positionOS   : POSITION;
                float2 uv           : TEXCOORD0;
            };

            struct Varyings
            {
                float2 uv           : TEXCOORD0;
                float4 positionHCS  : SV_POSITION;
            };

            TEXTURE2D(_BaseMap);
            SAMPLER(sampler_BaseMap);

            CBUFFER_START(UnityPerMaterial)
            float4 _BaseMap_ST;
            half4 _BaseColor;
            CBUFFER_END

            Varyings vert(Attributes IN)
            {
                Varyings OUT;
                OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
                OUT.uv = TRANSFORM_TEX(IN.uv, _BaseMap);
                return OUT;
            }

            half4 frag(Varyings IN) : SV_Target
            {
                return SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, IN.uv) * _BaseColor;
            }
            ENDHLSL
        }
    }
}


http://www.kler.cn/a/408938.html

相关文章:

  • 《第十部分》1.STM32之通信接口《精讲》之IIC通信---介绍
  • 机器学习周志华学习笔记-第5章<神经网络>
  • 【FPGA开发】Vivado自定义封装IP核,绑定总线
  • vulhub靶场与pikachu靶场
  • Vue 动态给 data 添加新属性深度解析:问题、原理与解决方案
  • 聚水潭与MySQL数据集成案例分享
  • 【AI技术赋能有限元分析应用实践】Abaqus、 Ansys、FEniCSx 有限元结合深度学习
  • Java爬虫与淘宝API接口:深度解析销量和商品详情数据获取
  • FMCJ456-14bit 2通道3/2.6/2GS/s ADC +16bit 2通道12.6GS/s DAC FMC AD/DA子卡
  • 网站渗透测试工具zap2docker-stable
  • H.264/H.265播放器EasyPlayer.js网页全终端安防视频流媒体播放器关于iOS不能系统全屏
  • 第425场周赛题解:最小正和子数组
  • Fakelocation Server服务器/专业版 Centos7
  • 图形渲染性能优化
  • python中lxml 库之 etree 使用详解
  • Sparrow系列拓展篇:消息队列和互斥锁等IPC机制的设计
  • Go 语言中的海勒姆定律
  • Jenkins-Git Parameter 插件实现指定版本的发布和回滚
  • 解释 Python 中的可变与不可变数据类型?
  • 框架学习07 - SpringMVC 地址映射
  • Sqlite: Java使用、sqlite-devel
  • 深度学习图像视觉 RKNN Toolkit2 部署 RK3588S边缘端 过程全记录
  • 初识算法 · 分治(3)
  • Excel求和如何过滤错误值
  • 设计模式——数据访问对象模式
  • Spring Boot与MyBatis-Plus的高效集成