Unity 云雾shader

2023-11-08

先上效果图:

Shader "Demo/MainCloud"
{
    Properties
    {
        
        _LightIntensity ("光照强度", Range(0.75, 1)) = 1
        _MainColor ("MainCol", Color) = (0.6, 0.6, 0.6, 1)
        _MainTex ("MainTex", 2D) = "white" { }
        _AisleTex ("通道偏移纹理", 2D) = "white" { }
        [Space(10)]
        _AisleValueX ("Xspeed ", Range(0, -2.5)) = 0
        _AisleValueY ("Yspeed", Range(0, -0.5)) = 0
    }
    
    
    SubShader
    {
        Tags { "Queue" = "Transparent" }
        
        Pass
        {
            Tags { "RenderType" = "Transparent" }
            Blend SrcAlpha OneMinusSrcAlpha
            ZWrite off
            Cull back
            
            CGPROGRAM
            
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
            
            sampler2D _MainTex, _AisleTex;
            float4 _MainTex_ST, _AisleTex_ST;
            fixed4 _MainColor;
            half _LightIntensity;
            
            half4 _LightingColor;
            half _AisleValueX, _AisleValueY;
            
            struct appdata
            {
                float4 vertex: POSITION;
                float2 uv: TEXCOORD;
            };
            
            struct v2f
            {
                float4 pos: SV_POSITION;
                float2 uv: TEXCOORD0;
                float2 uv2: TEXCOORD4;
                float2 uv3: TEXCOORD5;
                float4 uv4: TEXCOORD6;
            };
            
            
            v2f vert(appdata v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                o.uv3 = v.uv;
                o.uv4.xy = TRANSFORM_TEX(v.uv, _AisleTex) + frac(float2(_AisleValueX, _AisleValueY) * _Time.x);
                return o;
            }
            
            fixed4 frag(v2f i): SV_Target
            {
                
                
                
                
                
                half4 AT = tex2D(_AisleTex, i.uv4.xy) ;
                
                // 采样纹理
                half4 c = tex2D(_MainTex, i.uv + AT.b * 0.08) * _MainColor;
                half4 d = tex2D(_MainTex, i.uv) * _MainColor;
                fixed4 cloud = c + d * 0.18;
                // return c + d;
                cloud *= _LightIntensity;
                return cloud;
            }
            ENDCG
            
        }
    }
    
    CustomEditor "ShaderCloudEditor"
}
Shader "Demo/CloudOffset"
{
    Properties
    {
        _CustomLightDir ("自定义灯光", vector) = (0.5, 0.75, 0, 0)
        _MainCol ("云彩颜色", color) = (0.75, 0.75, 0.75, 1)
        _LightIntensity ("光照亮度", float) = 1
        _MainTex ("主纹理贴图", 2D) = "white" { }
        _OffsetTex ("通道偏移", 2D) = "white" { }
        _Mainvalue ("主图偏移值 X:SpeedX Y:SpeedY", vector) = (1.0, 0.5, 0.0, 0.0)
        _Offsetvalue ("通道偏移值 Tex1:SpeedX Y:SpeedY Tex2:SpeedX Y:SpeedY", vector) = (0.2, 0.25, 0.6, 0.67)
        _Radius ("边缘遮罩范围", float) = 0.5
        _CircleFade ("边缘遮罩羽化值", float) = 0.5
        _Opacity ("透明度", Range(0, 1)) = 1
    }
    SubShader
    {
        Tags { "Queue" = "Transparent+20" "RenderType" = "Transparent" }
        LOD 100
        
        Pass
        {
            Name "FORWARD"
            Tags { "LightMode" = "ForwardBase" }
            Blend one OneMinusSrcAlpha
            ZWrite Off
            Cull back
            
            CGPROGRAM
            
            #pragma vertex vert
            #pragma fragment frag
            #include "AutoLight.cginc"
            #include "Lighting.cginc"
            
            #include "UnityCG.cginc"
            
            
            sampler2D _MainTex, _OffsetTex;
            float4 _MainTex_ST, _OffsetTex_ST;
            fixed4 _MainCol;
            half _CircleFade, _Radius, _LightIntensity, _Opacity;
            half4 _CustomLightDir, _Mainvalue, _Offsetvalue;
            
            
            struct appdata
            {
                float4 vertex: POSITION;
                float2 uv: TEXCOORD0;
                half3 normal: NORMAL;
                float4 color: COLOR;
            };
            
            struct v2f
            {
                float4 pos: SV_POSITION;
                float2 uv: TEXCOORD0;
                float2 uv1: TEXCOORD1;
                float2 uv2: TEXCOORD2;
                float2 uv3: TEXCOORD3;
                half3 worldNormal: TEXCOORD4;
                float4 color: TEXCOORD5;
            };
            
            v2f vert(appdata v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex) + frac(float2(_Mainvalue.xy) * _Time.x);
                o.uv1 = TRANSFORM_TEX(v.uv, _OffsetTex) + frac(float2(_Offsetvalue.xy) * _Time.x) ;
                o.uv2 = TRANSFORM_TEX(v.uv, _OffsetTex) + frac(float2(_Offsetvalue.zw) * _Time.x);
                o.uv3 = v.uv;
                o.color = v.color;
                o.worldNormal = UnityObjectToWorldNormal(v.normal);
                
                return o;
            }
            
            fixed4 frag(v2f i): SV_Target
            {
                // return col;
                fixed4 col = tex2D(_MainTex, i.uv);
                
                fixed4 ostex01 = tex2D(_OffsetTex, i.uv1);
                fixed4 ostex02 = tex2D(_OffsetTex, i.uv2);
                
                fixed4 cloud01 = fixed4(col.rgb, ostex01.r);
                // return cloud01;
                
                fixed4 cloud02 = fixed4(col.rgb, ostex02.g);
                // return cloud02;
                
                fixed4 cloudtex = cloud01 * cloud02 * _MainCol * _LightIntensity;
                
                //向量
                half3 N = normalize(i.worldNormal);
                half3 L = normalize(_CustomLightDir);
                
                half3 Ambient = max(dot(N, L), 0) * 0.5 + 0.5;
                
                cloudtex.rgb += Ambient;
                
                // 边缘遮罩
                float circle = 1 - (smoothstep(_Radius, (_Radius + _CircleFade), length(i.uv3 * 2 - 1)));
                
                fixed opacity = cloudtex.a * i.color.a * circle * _Opacity ;
                
                return fixed4(cloudtex.rgb * opacity, opacity);
            }
            ENDCG
            
        }
    }
}

最后再添加如下两张纹理效果图

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity 云雾shader 的相关文章

  • unity 渲染流水线

    渲染流水线 主要分为应用阶段 几何阶段 光栅化阶段 应用阶段 这一阶段最重要的输出是渲染所需的几何信息 即渲染图元 几何阶段 重要任务就是把顶点坐标变换到屏幕空间 通过对输入的渲染图元进行多次处理后 输出屏幕空间的二维顶点坐标 每个顶点对应
  • Unity Shader数学基础——矩阵

    矩阵的定义 由m n个数a 排成的m行n列的数表称为m行n列的矩阵 简称m n矩阵 记作 这m n个数称为矩阵A的元素 简称为元 数a位于矩阵A的第i行第j列 称为矩阵A的 i j 元 以数a为 i j 元的矩阵可记为 a 或 a m n
  • Unity UGUI 添加 Material(材质)

    在给 UGUI 添加 Material 时 如果 Material 中的 Shader 不做特殊处理的话 那么此组件将会变成纯黑色 如果需要添加 Material 则需要在 Shader 中做 UGUI 专门的处理 Properties U
  • Unity Shader 学习 004-Shader 调试 平台差异性 第三方调试工具

    文章目录 学习时间 学习产出 1 调试Shader 1 1 我们打开FrameDebug窗口 1 2 通过FrameDebug窗口查看我们shader渲染目标的状态 2 平台差异性 2 1 抗锯齿 2 2 DX平台定义变量更严格 3 第三方
  • 3.Unity Shader 基础

    目录 一对好兄弟 材质和Unity Shader Unity中shader ShaerLab Unity Shader 的结构 1 创建 2 Properties 3 SubShader 状态设置 RenderSetup SubShader
  • unity渲染队列render quaue

    本文转载自http blog csdn net candycat1992 article details 37345251 本系列主要参考 Unity Shaders and Effects Cookbook 一书 感谢原书作者 同时会加上
  • Unity Shader 实现描边OutLine效果

    Shader实现描边流程大致为 对模型进行2遍 2个pass 绘制 第一遍 描边pass 在vertex shader中对模型沿顶点法线方向放大 fragment shader设置输出颜色为描边颜色 第二遍正常绘制模型 除被放大的部分外 其
  • Unity Shader入门精要文章目录

    前言 从今天开始 我将每天开始学习一些有关于Shader的知识 并把所学到的知识简化 写成文章来供大家参考或者学习 一方面是为了巩固知识 另一方面是我也没有找到什么系统的文章来学习Shader的知识 我的Shader学习大部分是参考了Uni
  • Unity 云雾shader

    先上效果图 Shader Demo MainCloud Properties LightIntensity 光照强度 Range 0 75 1 1 MainColor MainCol Color 0 6 0 6 0 6 1 MainTex
  • Unity中Cg的基本语法和使用

    Cg是类似于C语言的发展起来的图形编程语言 Cgraphics 它的很多表达式if else 和C语言非常相像 也和C 非常相像 由于Shader是写给显卡执行的 所以没有输出语句来调试 很多地方调试不了 只能靠Unity编辑器来帮我们报错
  • Unity Shader初学——《Unity Shader入门摘要》

    由于项目需要加上本人兴趣 所以开始学习shader相关知识 主要参考冯乐乐的 Unity Shader入门摘要 作者的博客在此 https blog csdn net candycat1992 作者的个人网站 http candycat19
  • Shader中的一些专业用语的解释

    Shader中的一些专业用语的解释 此文章收录于我主页顶置的 Unity Shader入门精要文章目录 点击即可跳转 一 什么是OPenGL DirectX 简单的来说 就是图像应用编程的接口 这些接口用语渲染二维和三维的图形 架起了上层应
  • Unity shader 笔记之迷雾效果

    先看效果图 Shader Unlit FogOfWar Properties MainTex Texture 2D white CGINCLUDE include UnityCG cginc struct appdata float4 ve
  • unityShader之固定渲染管线

    固定渲染管线功能较单一 能实现的效果不多 基本快要被淘汰了 老式的机器上还能用一用 附上几个脚本示例简单说明一下 shader likang king01 properties Color MainColor color 0 0 0 1 固
  • unityShader物体表面流光效果

    本文转载自http blog csdn net lyh916 article details 51831720 参考链接 http liweizhaolili blog 163 com blog static 162307442012726
  • Unity_Shader高级篇_16_Unity Shader入门精要_减少计算复杂度

    16 8 减少计算复杂度 16 8 1 Shader的LOD技术 和16 5 2提到的模型的LOD技术类似 Shader的LOD技术可以控制使用的Shader等级 它的原理是 只有Shader的LOD值小于某个设定的值 这个Shader才会
  • (五)unity shader基础之——————学习shader所需的数学基础:下篇(坐标空间:模型空间、世界空间、观察空间、裁剪空间、屏幕空间、法线变换等)

    一 坐标空间 上篇文章讲述了如何使用矩阵来表示基本的变换 如平移 旋转和缩放 在本节我们将关注如何使用这些变换来对坐标空间进行变换 渲染游戏的过程可以理解成是把一个个顶点经过层层处理最终转换为屏幕上的过程 本节我们就将学习这个转换过程是如何
  • Unity3D关于ComputeShader

    由于最近在实验中需要大量循环计算产生网格 所以可能需要GPU的加速 对于compute shader学习下 可能对于做GPU加速有帮助 以下补充修改了转载文章的内容 原文链接 https blog csdn net csharpupdown
  • unity透明shader

    Shader Custom AlphaSelfIllum Properties Color Main Color Color 1 1 1 0 SpecColor Spec Color Color 1 1 1 1 Emission Emmis
  • Unity Shader之——UV旋转动画

    Unity中通过Shader实现UV旋转动画 实现一个旋转效果 并且可以控制速度 方法是 以纹理中心为旋转中心 直接上代码如下 Shader Custom Simple Properties Color Color Color 1 1 1

随机推荐

  • QT 正则表达式

    取出html中 img src src 图片地址 QRegExp rx
  • 云服务器陷入黑洞了该怎么办,有什么方法可以防御DDOS,游戏服务器被DDOS玩家都进不去游戏了要怎么办

    简述 随着网络技术和网络应用的发展 网络安全问题显得越来越重要 已经被提到一个很高高的高度 DDOS攻击随着互联网的快速发展 也日益猖獗 从原来的的几兆 几十兆 到现在的几十G 几百G的流量攻击 形成了一个很大的利益链 DDOS攻击由于容易
  • 开发模型与测试模型

    开发模型 一 瀑布模型 瀑布模型是最早的软件开发模型 它是所有其他模型的基础框架 瀑布模型的每一个阶段都只执行一次 因此它是一种线性顺序进行的软件开发模式 优点 开发过程中阶段分明 某一阶段完成之后 就只需要关注后面阶段 开发过程中强调早期
  • 【安装指南】Ubuntu18 安装FFmpeg

    安装FFmpeg 下载FFmpeg 终端输入 git clone https github com FFmpeg FFmpeg git 避免git下载太慢 git clone https github com FFmpeg FFmpeg g
  • Apache服务一简介与安装

    一 Apache介绍 1 什么是Apache 2 Apache的特性 二 安装Apache服务 1 编译安装http服务 2 启动服务 3 关闭防火墙 se 4 通过网页查看 4 1修改首页内容 4 2网页查看 一 Apache介绍 1 什
  • matlab 保存不了文件,关于matlab文件无法保存的原因(转)

    mdl文件在6 5里面做的 但是到了7 0里面却打不开 下面就是相关信息 Warning Unable to load model file d MATLAB7 work mdl Run bdclose all set param 0 Ch
  • MCU端 Boot+App设计方案

    概述 本文结合当前主流主机厂的升级规范来介绍不用MCU升级方案及其优缺点 除了本文提及的方案外还有很多其他的升级方案 升级方案的设定要考虑到客户需求以及硬件资源等因素 目前主流的客户需求 要求存储区划分要有Boot段 Config段 App
  • 刷个宇宙题:剑指offerⅡ:02整数系列——二进制加法、03前 n 个数字二进制中 1 的个数

    题目 解题 还算简单的思路 只要注意a i 有可能会溢出 用a at i 避免溢出的情况 还有一些string的api需要多用记忆一下 前 n 个数字二进制中 1 的个数 class Solution public vector
  • Python基础内容四 :适合刚入门的朋友看的教程

    13 Python标准库 Python标准库是随Pthon附带安装的 包含了大量极其有用的模块 我们主要了解下sys和os就够了 13 1 sys模块 sys模块主要是针对与Python解释器相关的变量和方法 不是主机操作系统 sys ar
  • TCP参数参数调优

    前言 TCP 性能的提升不仅考察 TCP 的理论知识 还考察了对于操心系统提供的内核参数的理解与应用 TCP 协议是由操作系统实现 所以操作系统提供了不少调节 TCP 的参数 如何正确有效的使用这些参数 来提高 TCP 性能是一个不那么简单
  • SpringBoot整合微信支付(Native最详细)

    一 微信支付产品介绍 1 付款码支付 用户展示微信钱包内的 付款码 给商家 商家扫描后直接完成支付 适用于线下面对面收银的场景 2 JSAPI支付 线下场所 商户展示一个支付二维码 用户使用微信扫描二维码后 输入需要支付的金额 完成支 付
  • Java容器常见面试题汇总

    目录 1 java 容器都有哪些 2 Collection 和 Collections 有什么区别 3 List Set Map 之间的区别是什么 4 ArrayList 和 LinkedList 的区别是什么 5 说一说ArrayList
  • 基于Linux操作系统下的Shell排序算法

    一 Shell排序算法原理 希尔排序 Shell Sort 是 DLShell 于1959 年提出来的一种排序算法 在这之前排序算法的时间复杂度基本都是 O n2 的 希尔排序算法是突破这个时间复杂度的第一批算法之一 直接插入排序 应该说
  • 牛客网在线编程输入输出

    多行输入 输入第一个数据为接下来要输入的行数 接下来的几行每一行仅有一个数字 const readline require readline const rl readline createInterface input process s
  • Visual Assist X 10.6.1837.0 Cracked

    http download csdn net download dengai 2918948 http download csdn net detail u013127159 6721815
  • 设计模式--访问者模式

    访问者模式 属于行为型模式基本原理 元素类的执行算法随着访问者改变而改变 主要流程 1 创建元素类 内有不同的执行算法 根据不同的访问者选择不同的执行算法 2 创建访问类 实现不同的访问派生类 将自身传入元素类的执行算法 include
  • Linux中opengl库叫什么名字,Linux下的OpenGL——Mesa和GLX简介

    一 什么是Mesa和GLX 众所周知 OpenGL作为图形界的工业标准 其仅仅定义了一组2D和3D图形接口API 而对于窗口管理 IO消息响应等并没有规定 也就是说 OpenGL依赖各平台提供用于渲染的context以及具体实现方式 而各平
  • 时间序列数据的正态性检验

    目录 正态分布 柯尔莫可洛夫 斯米洛夫检验 Kolmogorov Smirnov检验原理 工具箱介绍 Lilliefors检验 雅各 贝拉检验 安得森 达令检验 正态分布 y1中100是 5是 而不是平方 Matlab中legend的用法总
  • 管理数据库用户

    紫色代表一级目录 粉红代表二级目录 蓝色代表三级目录 红色代表关键字 橙色代表说明 管理过程 创建用户 Oracle中 创建用户的语法 授予用户权限的语法 Microsoft SQL Server中 创建用户 账户的语法 把用户添加到数据库
  • Unity 云雾shader

    先上效果图 Shader Demo MainCloud Properties LightIntensity 光照强度 Range 0 75 1 1 MainColor MainCol Color 0 6 0 6 0 6 1 MainTex