Unity中Shader序列图动画(UV流动的通用起始点)

这篇具有很好参考价值的文章主要介绍了Unity中Shader序列图动画(UV流动的通用起始点)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

我们在Shader中实现序列帧动画。可以实现一些简单特效或动画节省性能用。

我们在这篇文章中,实现一下UV流动的通用起始点。


一、一般序列帧动画是按照序列图如下顺序读取的

  • 先左到右,再从上到下
    Unity中Shader序列图动画(UV流动的通用起始点),Unity,unity,uv,游戏引擎

二、在Shader找到UV流动的起始点

1、先实现纹理采样

  • Unity中 URP Shader 的纹理与采样器的分离定义

  • 属性面板

_MainTex(“MainTex”,2D) = “white”{}

  • 定义纹理

TEXTURE2D(_MainTex);

  • 定义采样器

SAMPLER(sampler_MainTex);

  • 在片元着色器进行纹理采样

float4 mainTex = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex,i.uv);

2、得到 uv 走格的单位格子大小

  • m ∗ n m * n mn 的序列帧图,就对UV除以多少,来得到一个格子的图像
    u m 和 v n \frac{u}{m} 和 \frac{v}{n} munv
  • 比如说,我们使用如下 4 x 4 的序列帧来测试
    Unity中Shader序列图动画(UV流动的通用起始点),Unity,unity,uv,游戏引擎
    就对 uv 分别除以4得到一个序列图的大小

o.uv = float2(v.uv.x/4,v.uv.y/4);

Unity中Shader序列图动画(UV流动的通用起始点),Unity,unity,uv,游戏引擎

3、定位到左上角为起始单位格

  • 可以看出,我们的 u 方向以及在起始位置了,但是 v 方向却在最后一列
  • 所以,我们需要加上 n - 1 个单位格大小,使 v 方向上达到第一行

o.uv = float2(v.uv.x/4,v.uv.y/4 + 0.75);

Unity中Shader序列图动画(UV流动的通用起始点),Unity,unity,uv,游戏引擎


三、使UV流动的起始点通用化

1、在属性面板接收 行 和 列的属性

_Sequence(“Row(X) Column(Y)”,Vector) = (1,1,1,1)

2、看图片可以总结出第一个单元格的公式

  • u v . x = u v . x C o l u m n uv.x = \frac{uv.x}{Column} uv.x=Columnuv.x
  • u v . y = u v . y R o w + R o w − 1 R o w uv.y = \frac{uv.y}{Row}+\frac{Row-1}{Row} uv.y=Rowuv.y+RowRow1

o.uv = float2(v.uv.x/_Sequence.y,v.uv.y/_Sequence.x + (_Sequence.x - 1)/_Sequence.x);

3、我们选几个不同的序列图看看效果

  • 4x3
    Unity中Shader序列图动画(UV流动的通用起始点),Unity,unity,uv,游戏引擎

  • 4x4
    Unity中Shader序列图动画(UV流动的通用起始点),Unity,unity,uv,游戏引擎文章来源地址https://www.toymoban.com/news/detail-797345.html


四、测试代码

Shader "MyShader/URP/P3_9"
{
    Properties
    {
        _Color("Color",Color) = (1,1,1,1)
        _MainTex("MainTex",2D) = "white"{}
        _Sequence("Row(X) Column(Y)",Vector) = (1,1,1,1)
    }
    SubShader
    {
        Tags
        {
            //告诉引擎,该Shader只用于 URP 渲染管线
            "RenderPipeline"="UniversalPipeline"
            //渲染类型
            "RenderType"="Transparent"
            //渲染队列
            "Queue"="Transparent"
        }
        Blend SrcAlpha OneMinusSrcAlpha Zwrite On
        Pass
        {
            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma multi_compile_fog
            #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"

            struct Attribute
            {
                float3 vertexOS : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct Varying
            {
                float4 vertexCS : SV_POSITION;
                float2 uv : TEXCOORD1;
                float fogCoord : TEXCOORD2;
            };

            CBUFFER_START(UnityPerMaterial)
                float4 _Color;
                float4 _MainTex_ST;
                half4 _Sequence;
            CBUFFER_END
            TEXTURE2D(_MainTex);
            SAMPLER(sampler_MainTex);

            Varying vert(Attribute v)
            {
                Varying o;
                o.vertexCS = TransformObjectToHClip(v.vertexOS);
                o.uv = float2(v.uv.x/_Sequence.y,v.uv.y/_Sequence.x + (_Sequence.x - 1)/_Sequence.x);
                //o.uv = float2(v.uv.x/4,v.uv.y/4);
                //o.uv = TRANSFORM_TEX(v.uv,_MainTex);
                o.fogCoord = ComputeFogFactor(o.vertexCS.z);
                return o;
            }

            half4 frag(Varying i) : SV_Target
            {
                float4 mainTex = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex,i.uv);
                float4 col = mainTex * _Color;
                col.rgb = MixFog(col,i.fogCoord);
                return col;
            }
            ENDHLSL
        }
    }
    
}

到了这里,关于Unity中Shader序列图动画(UV流动的通用起始点)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【unity shader】水体渲染基础-基于texture distortion的流体流动材质

    当液体静止时,它在视觉上与固体没有太大区别。 但大多数时候,我们的性能不一定支持去实现特别复杂的水物理模拟, 需要的只是在常规的静态材料的表面上让其运动起来。我们可以对网格的 UV 坐标实现动态变化,从而让表面的纹理效果实现变形的动态变化。 1.1. uv实时

    2024年02月03日
    浏览(58)
  • Unity Shader ASE基础效果思路与代码(一):遮罩、硬边溶解、光边溶解、UV扰动

    效果展示: 思路与代码 :主纹理和遮罩纹理相乘,其中,两个纹理给到UV流动 步骤与详解 :panner节点:平移 效果展示: 思路与代码 :原图和噪声贴图的透明通道混合,改变噪声贴图的透明度即可 步骤与详解 : 在SubShader中关掉深度写入,混合模式为Alpha Blend,Tags设为透明

    2024年02月22日
    浏览(55)
  • unity shader 实现通用描边shader -文字描边-字体描边

    在制作游戏时,可以遇到要对字体添加描边的需求,unity 的UGUI自带的OutLine组件,描边效果不好,宽度过大会出现穿帮,顶点数量也会增加,性能不好,如果对于有几百字,顶点数量会很多,而且无法扩展功能 可以看出Outline创建了4个方向的文字 Unity5.2以前的版本要求,每一个Canvas下至多

    2024年02月03日
    浏览(106)
  • Unity出模型动画的序列帧(特效序列帧)

    我这里是通过Recorder和Timeline的结合操作,输出带有透明通道是序列帧图片 流程图 在unity2018之后的版本中,通过引擎自带的Manager下载所需要的插件Recorder 点击Window下的Packeage Manager 直接搜索Recorder,进行下载安装 (1)在场景中找到渲染的摄像机,并将其添加标签Tag: art ; 这

    2024年02月16日
    浏览(38)
  • Unity | 动画组件篇-动画组件的认识和如何简单使用序列帧

    动画系统包含两个东西: 1.动画 2.控制动画啥时候播放的东西 1.创建Animation界面 首先,有一个面板,名字叫做Animation 我们的动画都是在这上面制作的。 再来一个静止的图片,你通过上面过程打开是这样子的 我们做动画,一般得有个物体,所以想做动画,也要先选择一个初始

    2024年02月15日
    浏览(58)
  • 【Unity】ShaderGraph应用(模型膨胀流动)

    实现效果 ShaderGraph是 unity的图形化 Shader 编程工具。本文介绍使用ShaderGraph实现模型的膨胀流动效果。该效果可以由于模拟流体在管线中的流动等相关功能。 1.使用节点介绍 关键节点 UV :获取模型的uv坐标 Normal Vector :获取模型的法线坐标 Position :获取模型的顶点坐标 计算用

    2024年02月13日
    浏览(46)
  • Unity基础篇-UV坐标和法线

    我们已经利用Mesh创建过简单的一个Cubel了,如果要让这个cube更精细化还需要更详细的处理,这样就就有几个绕不开的话题,涉及图形学UV坐标和法线。 UV坐标: UV坐标是用于映射2D纹理到3D模型的坐标。在3D模型上的每个顶点都有一个对应的UV坐标,它告诉引擎在纹理上的哪个

    2024年01月24日
    浏览(46)
  • Unity之ShaderGraph 节点介绍 UV节点

    Flipbook(翻页或纹理帧动画) Polar Coordinates(将输入 UV 的值转换为极坐标。) Radial Shear(径向剪切变形) Rotate(将UV 的值旋转) Spherize(鱼眼镜头的球形变形效果) Tiling And Offset(平铺和偏移) Triplanar(通过投影生成 UV) Twirl(黑洞的旋转变形) 1.使用向输入 In 提供的 U

    2024年02月14日
    浏览(44)
  • CC 3.4 角色Unity多项限UV

      参考之前搜集到的资料 Unity Shader Graph使用多象限[UDIM]纹理贴图_嫣兰飞雪的博客-CSDN博客_unity多象限uv    具体的代码优化没有,看哪位大佬能帮忙进行一下优化。

    2024年02月12日
    浏览(39)
  • unity 场景烘焙问题之模型UV有重叠

    问题现象:模型烘焙出来后,呈现黑色或布满脏斑,有可能是没有展UV,也有可能是UV重叠了 并且也会出现警告提示,如下图: 如果我们勾选了如下图,还在提示我们勾选,那可能就是 UV重叠了 UV 重叠没有唯一的解决方案,因为有很多问题可能导致这种情况。以下是最常见的

    2024年02月10日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包