分享

URP | 粒子系统Custom自定义数据控制溶解

 勤奋不止 2023-06-07 发布于北京

  • Custom Data 控制材质属性

    所谓的粒子系统的自定义数据,就是如下图的粒子系统选项:

  • 我们可以在脚本中通过 SetCustomParticleData和 GetCustomParticleData来操作这两个数据。 自定义数据分为两种类型:Color和Vector

    注意: 一般来讲我们将自定义数据和粒子系统的Renderer选项中的Custom Vector 属性联合起来进行使用。

    这个属性可以关联到Shader中,控制Shader的属性

  • 设置类型Vector 类型

  • Custom1.xyzw控制对应Shader里的变量texcoord1的xyzw变量

使用Custom

  • 开启 Custom Vertex 才能起作用,这一步的意义是绑定属性。

  • 绑定属性是根据Shader创建的变量来控制的。

简单示例

这里使用上面使用到的特效基础材质

  • 在顶点结构体里输入第二套UV变量控制

struct appdata
            {
                float4 positionOS : POSITION;
                float2 texcoord : TEXCOORD0;
                float4 texcoord1: TEXCOORD1;             //第二套数据
            };

这里注意,不是真的有第二套变量,这里只是创建一个变量和 Custom1.xyzw 关联起来。

v2f vert (appdata v)
            {
                v2f o;
                o.vertex = TransformObjectToHClip(v.positionOS.xyz);
                o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex) ;
                o.uv.zw = TRANSFORM_TEX(v.texcoord, _AlphaTex);
                o.uv2 = v.texcoord1;           //数据信息传入片元着色器
                return o;
            }
  • 输出结构体

  • 在片元着色器阶段控制贴图的UV信息

half4 frag (v2f i) : SV_Target
            {
                float2 uv = i.uv.xy * i.uv2.xy + i.uv2.zw;        //控制UV属性
                half4 col = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex,uv) * _BaseColor;
                float alpha = SAMPLE_TEXTURE2D(_AlphaTex,sampler_AlphaTex,i.uv.zw).x;

                return real4(col.xyz,alpha);
            }

这里UV2.xy 控制UV的平铺次数,所以乘。  UV2.zw 控制UV的平移,所以是加法。

全代码

Shader "Unlit/8_CustomData"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _AlphaTex("_AlphaTex",2D) = "white" {}
        _BaseColor("_BaseColor",Color) = (1,1,1,1)

    }
    SubShader
    {
        Tags { "RenderPipeline"="UniversalPipeline" "RenderType"="Transparent"  "Queue" = "Transparent" "IgnoreProjector" = " True"}    //我们不希望任何投影类型材质或者贴图,影响我们的物体或者着色器
        LOD 100

        Pass
        {
            Tags{ "LightMode"="UniversalForward" }
            Blend SrcAlpha OneMinusSrcAlpha
            ZWrite Off

            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag


            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

            CBUFFER_START(UnityPerMaterial)
                float4 _MainTex_ST,_AlphaTex_ST;
                float4 _BaseColor;
            CBUFFER_END


            struct appdata
            {
                float4 positionOS : POSITION;
                float2 texcoord : TEXCOORD0;
                float4 texcoord1: TEXCOORD1;
            };

            struct v2f
            {
                float4 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
                float4 uv2 : TEXCOORD1;
            };

            TEXTURE2D (_MainTex);
            SAMPLER(sampler_MainTex);
            TEXTURE2D (_AlphaTex);
            SAMPLER(sampler_AlphaTex);

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = TransformObjectToHClip(v.positionOS.xyz);
                o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex) ;
                o.uv.zw = TRANSFORM_TEX(v.texcoord, _AlphaTex);
                o.uv2 = v.texcoord1;
                return o;
            }

            half4 frag (v2f i) : SV_Target
            {
                float2 uv = i.uv.xy * i.uv2.xy + i.uv2.zw;
                half4 col = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex,uv) * _BaseColor;
                float alpha = SAMPLE_TEXTURE2D(_AlphaTex,sampler_AlphaTex,i.uv.zw).x;

                return real4(col.xyz,alpha);
            }
            ENDHLSL
        }
    }
}

效果

  • 点开Custom Vertex  Steams 属性

  • 增加俩个,一个是Custom.xy   ,一个是Custom.xyzw

  • 设置数值 1 1

    X Y 是贴图的平移   Z W 是UV方向移动

GIF

总结

  • 了解Custom Vertex 自定义属性,是怎么使用的,Shader怎么调用。

  • 使用的时候需要在Renderer里开启,如果不开启,是不起作用的。

  • 这样控制属性有在Shader里增加一个变量有什么区别吗?

    在Shader里增加一个变量,如果动态控制就需要增加动作文件控制变量的使用。    

    如果使用粒子的属性,就可以使用曲线控制变量,上面的UV流动就是使用曲线控制。    

  • 那些情况还可以使用,比如在控制溶解方面等,一个数值的 动态控制,这里的这个属性,是和UE4的Dynamic 节点是一样的道理。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多