庄懂的TA笔记(十四)<特效:流动 + 扰动>

news2024/9/21 17:19:37

庄懂的TA笔记(十四)<特效:流动 + 扰动>

效果展示:

正文:

大纲:

一、增广:

1、排序问题:

造成这个问题的原因是,他在取背景前,小人的胳膊不算是透明的,所以在编译过程中他就是被忽略的透明。

透贴问题 Detach Attach Zwrite Off 解决。(如何使用呢?这里暂时没讲)

判断 前方物体,是否遮挡了后方物体。并判断前方物体是否透明,Z深度像素点,是否更靠前,更近。

2、Alpha 通道预乘问题:

两种图片类型:

左图为,没预乘图。

右图为,预乘贴图。

什么是预乘呢?

就是吧颜色,RGB图片 和 透贴 乘一下,然后放在放到RGB里面。

需要注意什么呢?

在写,AB时(预乘时), 可以用 One OneMinusSrcAlpha的混合方式。

在写,AD时(不预乘时),可以用 SrcAlpha OneMinusSrcAlpha或 在shader里做乘法的混合方式。

3、AB AD 代码改进:

这里,实际上和上一篇的 笔记 记录的一致,AB,和AD 的区别 就在于:

Blend One OneBlend One OneMinusSrcAlpha .

二、UV流动效果实现:

1、演示· Ghost Flow

控制参数 设计:(定义材质面板)

1、添加噪波纹理 _NoiseTex

2、控制噪波强度 _NoiseInt

3、控制Flow速度 _FlowSpeed

知识点:

整体表现是 有亮,有暗(既对背景做提亮,也会对背景压暗),如果为这种直观感受,一般这种就算是AB。

如果是对所有背景做一个提亮,那一半就是AD。

2、代码 · GhostFlow

3、代码 · GhostFlow;

frac(取余,就是取小数点的意思,否则只取整数观感上是没有变化的).原因是部分低配机的情况下,不取余会花掉,在深入下,花掉的原因是 Time是从开了unity后,就一直无限增长的容易溢出,取余后,就不会了。

例图:

顶点shader:

让UV1(噪波UV)流动:

1、TRANSFORM_TEX支持贴图缩放

2、对V轴 加上 随时间变化的 偏移量,实现流动。_Time.(X,Y,Z)分3级,从慢到快,递增2倍速。

像素shader:

1、采样噪波图,只取单通道,R。

2、获得FinalRGB.

3、计算 opacity 透贴。

Remap噪波图(从0~1映射到0~2),以 1 为 中间值。lerp(1,var_NoiseTex * 2 , _NoiseInt*2);

截去噪波负值

计算opacity = 透贴 * 总不透明度 * 噪声图;

返回输出:float4 (FinalRGB,opacity);

代码示例:

Shader "Unlit/Sc014Flow01"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _NoiseTex ("_NoiseTex", 2D) = "gray" {}
        _NoiseInt ("噪波强度",Range(0,5))=1
        _FlowSpeed("流动速度",Range(-10,10))=5
        _Cutout("透贴",Range(0,1))=0.5
    }
    SubShader
    {
        Tags { 
                "Queue"="Transparent"
                "RenderType"="Transparent" 
                "ForceNoShadowCasting"="True"       // 关闭阴影投射
                "IgnoreProjector"="True"            // 不响应投射器
                
              }
        LOD 100
         Pass {
            Name "FORWARD"
            Tags {
                "LightMode"="ForwardBase"
            }

            Blend One OneMinusSrcAlpha

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma multi_compile_instancing
            #include "UnityCG.cginc"
            #pragma multi_compile_fwdbase_fullshadows
            #pragma target 3.0
            UNITY_INSTANCING_BUFFER_START( Props )
               // UNITY_DEFINE_INSTANCED_PROP( float4, _Color)
            UNITY_INSTANCING_BUFFER_END( Props )
            
            uniform sampler2D _MainTex;//uniform float4 _MainTex_ST;
            uniform sampler2D _NoiseTex;uniform float4 _NoiseTex_ST;
            uniform float _Cutout;
            uniform float _NoiseInt;
            uniform float _FlowSpeed;

            //输入结构
            struct VertexInput
            {
                float4 vertex : POSITION;
                float2 uv0 : TEXCOORD0;
                
            };
            //顶点输出结构
            struct VertexOutput 
            {
                float4 pos : SV_POSITION;
                float2 uv0 : TEXCOORD0;         //采样主贴图
                float2 uv1 : TEXCOORD1;         //采样噪波图
            };
            //输出结构>>>顶点shader>>>输出结构
            VertexOutput vert (VertexInput v) 
            {
                VertexOutput o = (VertexOutput)0;
                o.pos = UnityObjectToClipPos(v.vertex);
                o.uv0 = v.uv0;
                o.uv1 = TRANSFORM_TEX(v.uv0,_NoiseTex);
                o.uv1.y = o.uv1.y + frac(_Time.x) * _FlowSpeed;
                return o ;
            }
            //色彩输出结构
            float4 frag(VertexOutput i) : COLOR 
            {
                float4 var_mainTex = tex2D(_MainTex,i.uv0);
                float var_noiseTex = tex2D(_NoiseTex,i.uv1).r;
                float noise = lerp(1,var_noiseTex * 2,_NoiseInt);         // var_noiseTex * 2 == 将 noise 的值域 扩大到 0 - 2 .   并用lerp,加以控制。
                noise = max(0,noise); // 赋值截断,取消负值,就没有花花绿绿的东西了。
                float3 finalRGB = var_mainTex;
                float opacity = var_mainTex.a * _Cutout * noise;
                
                return float4(finalRGB*opacity,opacity);//这里注意,最后FinalRGB乘了一个 透贴,是因为开始没有预乘,这里做了预乘。(预乘:指 吧透贴和色彩都放在RGB中)
                //return noise;//输出噪波图
                //return opacity;//输出透明噪波图
            }
            ENDCG
        }
    }
}

三、UV扰动效果实现:

1、演示 · Ghost Warp :

1、扰动,在Flow代码段基础上增加了一个 扭曲图,噪波图是单通道的,而 扭曲图是三通道的

2、扭曲的是什么,是UV,UV有几个分量,有两个分量,对不同的分量,要有不同的方向。所以,扭曲图是有两个通道控制扭曲方向的.(这里为了减少贴图采样的计算量,将噪波图合并入 扭曲图

RG =扭曲图

B = 噪波图

3、追加 扭曲强度

2、准备Warp Tex : 如何做扭曲图

3、代码 · GhostWarp:

在这里,遇到了一个问题,就是在Gamma 和 Liner 两个色彩空间下,扰动效果不一样,如图。

解决方法有2

方法1:切换为Gamma色彩空间。

方法2:保持Liner 色彩空间,选中 用到的图片,取消勾选sRGB 。

这里问了群友为什么,为什么,gamma 和 liner 不同色彩空间下,会有不同UV偏移?

群友一位大佬提供了一个解释链接:

Gamma校正 - LearnOpenGL CN

大概意思为 引擎中,与 显示器 中,因硬件算法原因,会有Pow2.2的色彩亮度差别,这个pow2.2是弥补掉那个线性差,从而达到合理的观察效果。(没读完,理解可能相差甚远)

4、代码GhostWarp:

四、任务委托:

1、作业:

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

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

相关文章

常用的排序算法--JavaScript

1.冒泡排序 这个函数使用了双重循环,第一个循环用于遍历数组中的每个元素,第二个循环用于比较相邻的元素,如果它们的顺序不正确,则交换它们的位置。在每次内部循环之后,最大的元素都会被移到数组的末尾,因此…

MSR015/MSR025低温漂、低功耗电压基准可pin对pin兼容REF015/REF025

MSR015/MSR025 是低温漂、低功耗、高精度 CMOS 电压基准, 具有0.05% 初始精度、低功耗特点。可pin对pin兼容REF015/REF025。该器件的低输出电压迟滞和低长期输出电压漂移特性,进一步提高稳定性和系统可靠性。 此外,器件的小尺寸和低运行电流特…

《一种使用光电容积图和生物特征进行无需校准的非侵入式血压估计方法》阅读笔记

目录 一、论文摘要 二、论文十问 Q1:论文试图解决什么问题? Q2:这是否是一个新的问题? Q3:这篇文章要验证一个什么科学假设? Q4:有哪些相关研究?如何归类?谁是这一…

GB/T25915.1法规基本标准-附 录 B(资料性)等级划分计算

附 录 B(资料性)等级划分计算实例 B.1 示例1 B.1.1 某个洁净室占地面积18m2,规定洁净度级别为动态ISO5级。使用采样流量为28.3L/min的 离散粒子计数器进行分级测试。2个关注粒径分别为:D≥0.3μm 和D≥0.5μm。 查表 A.1,采样点数 NL 为6。 B.1.2 从表1查得ISO5级的粒子浓度…

设计模式梳理

快速回顾 类别名称应用场景例子创建型模式Factory模式共用统一接口AbstactFactory模式共用统一接口Singleton模式只构建一次,每次构建只返回自己Builder模式一步步的进行复杂对象的构建链式构造器,解决复杂对象多个属性可选择性地设置的问题&#xff0c…

【ChatGPT】你会是被AI抢饭碗的那类人吗?

文章目录 前言一、AI替代“基础性工作”,二、AI没有魔法:人类做不到,它也做不到三 人类的恐惧:被替代、被超越四 AI让语言返祖,小语种与文化“濒危灭绝”五 人类的未来,教育何去何从?总结 前言 …

2023/5/9总结

Java基础(3) 1、成员变量和局部变量的区别 2.private关键字 是一个权限修饰符可以修饰成员变量和成员方法作用是保护成员不被别的类使用,被private修饰的成员只能在本类中才能访问 针对private修饰的成员变量,如果需要被其它类使…

缓存穿透、缓存雪崩和缓存击穿

1 缓存穿透 缓存穿透是指查询一个一定不存在的数据,由于缓存中没有,每次查询都要去数据库中查询,导致频繁地访问数据库,从而影响系统的性能。攻击者可以利用这一点,对系统进行拒绝服务攻击。 1.1 缓存穿透举例 攻击者…

课程《JavaWeb基础框架程序设计》考试题上篇——基础应用题(计算应用、水仙花数)

文章目录 📋前言🎯第一题(30分)🎯第二题(30分)📝最后 📋前言 这篇文章是大学课程《JavaWeb基础框架程序设计》考试题目的内容,包括了原题和答案。题目只包括…

开关电源基础07:离线式开关电源变压器设计(2)

说在开头:关于那几年 1933年希特勒上台成为德国总理,纳粹党开始了针对犹太人的运动。英国的弗雷德里克.亚历山大.林德曼教授到访柏林,他制定了一份名单,开列的都是处境不妙的犹太科学家,趁机邀请他们离开德国&#xf…

Java EE--多线程(一)

目录 一、认识多线程 1.1 概念 (1) 线程是什么 (2)为啥要有线程? (3) 进程和线程的区别 (4)Java 的线程和操作系统线程的关系 1.2 创建线程 方法1 继承 Thread 类 方法2 实现Runnable接口…

数据结构学习记录——哈夫曼树(什么是哈夫曼树、哈夫曼树的定义、哈夫曼树的构造、哈夫曼树的特点、哈夫曼编码)

目录 什么是哈夫曼树 哈夫曼树的定义 哈夫曼树的构造 图解操作 代码实现 代码解析 哈夫曼树的特点 哈夫曼编码 不等长编码 二叉树用于编码 哈夫曼编码实例 什么是哈夫曼树 我们先举个例子&#xff1a; 要将百分制的考试成绩转化成五分制的成绩 if(score < …

ASEMI代理ADV7391BCPZ原装ADI车规级ADV7391BCPZ

编辑&#xff1a;ll ASEMI代理ADV7391BCPZ原装ADI车规级ADV7391BCPZ 型号&#xff1a;ADV7391BCPZ 品牌&#xff1a;ADI /亚德诺 封装&#xff1a;LFCSP-32 批号&#xff1a;2023 安装类型&#xff1a;表面贴装型 引脚数量&#xff1a;32 工作温度:-40C~85C 类型&…

ChatGPT实现markdown 格式与 emoji 表情

markdown 格式与 emoji 表情 书写文章时&#xff0c;巧妙的使用一些小图标&#xff0c;可以给文章增加不少的灵动感&#xff0c;读者也会感觉更加轻松。恰当的图标也能增进读者对内容的理解。ChatGPT 目前不能直接联网&#xff0c;但可以使用 emoji 表情文字来达到类似的效果。…

笔记本电脑开机黑屏没反应怎么办?

笔记本电脑开机黑屏没反应怎么办&#xff1f;有用户电脑开机之后&#xff0c;桌面会变成黑屏显示。而且是常常都会出现这样的问题&#xff0c;非常影响自己的电脑使用体验。那么遇到这个问题要怎么去进行问题的解决呢&#xff1f;来看看以下的解决方法吧。 准备工作&#xff1a…

超级详细的mysql数据库安装指南

MySql数据库 如果你的电脑是mac那么你看这位大佬的分享。 如果你的电脑是windows&#xff0c;参考下面的安装步骤。 一、下载mysql数据库&#xff1f; 进入MySQL官方网站&#xff08;MySQL Community Downloads&#xff09;&#xff0c;按下图顺序点击 1、进入下载页面 2、…

Dom树,什么是dom树?

相信很多初学前端的小伙伴&#xff0c;学了html, css, js之后&#xff0c;会遇到 一个名词 DOM树。 首先说一下DOM是什么&#xff1f; DOM 是 Document Object Model&#xff08;文档对象模型&#xff09;的缩写。 举个例子 我们日常生活中&#xff0c;经常会遇到一些写文档…

Spring Cloud第二季--消息驱动Spring Cloud Stream

文章目录 什么是Spring Cloud StreamStream 原理 牛刀小试消息重复消费问题 什么是Spring Cloud Stream Spring Cloud Stream is a framework for building highly scalable event-driven microservices connected with shared messaging systems. The framework provides a fl…

linux系统函数的运用

函数 函数详解函数的作用函数的定义函数的返回值函数的作用范围函数传参函数递归函数库 函数详解 函数的作用 在编写shell脚本的时候&#xff0c;经常会发现在多个地方使用了同一段代码&#xff0c;如果只是一小段代码&#xff0c;一般也无关紧要&#xff0c;但是要在脚本中多…

如何禁止电脑运行游戏?

在休息的时候&#xff0c;很多人都喜欢使用电脑玩游戏来消磨时间&#xff0c;但是对于未成年人来说&#xff0c;很容易沉迷游戏&#xff0c;从而影响正常的学业和成长。那么如何才能禁止电脑运行游戏呢&#xff1f;下面我们就来了解一下。 除了将电脑游戏卸载之外&#xff0c;还…