【Unity】管道流动模拟Shader

【Unity】管道流动模拟Shader

抽象模拟管道介质流动的效果,使用顶点片元着色器。可以调整管线光泽,颜色,流动方向,透明度,流动体粗细,流动速度和横断面。

实现效果

Demo效果

Demo下载地址

管线光泽调整

管线颜色调整

流动方向调整

透明度调整

流动体粗细调整

管线横断

流动速度调整

shader源码

Shader "Unlit/PipeShaderTwoPass"
{Properties{_MoveTex("MoveTexture", 2D) = "white" {}_PipeTex("PipeTexture", 2D) = "white" {}_Color("Color",Color) = (1,1,1,0)[HDR]_MoveColor("MoveColor",Color) = (1,1,1,0)_CutVector("CutVector",Vector) = (0, 1, 0, 0)_CutCenter("CutCenter",Vector) = (0, 1, 0, 0)[Enum(Off,0,On,1)]_isCut("isCut",int) = 1[Enum(Off,0,On,1)]_isFront("isFront",int) = 1[Enum(Off,0,On,1)]_isMove("isMove",int) = 1_Alpha("Alpha",Range(0.85, 1.0)) = 1_Speed("Speed",Range(1, 3)) = 0.1_Metallic("Metallic", Range(0.0, 1.0)) = 0.5_Smoothness("Smoothness", Range(1.0, 2.0)) = 0.5_R("R",Range(0,1)) = 1}SubShader{Pass{Tags { "RenderType" = "Opaque"  }LOD 100ZWrite OnCull Off  //关闭剔除  CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"sampler2D _MoveTex;float4 _MoveTex_ST;float4 _CutCenter;float4 _CutVector;float4  _MoveColor;int _isCut;int _isFront;int _isMove;float _Speed;float _R;struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;float3 normal : NORMAL;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;float3  worldPos  : TEXCOORD1;};v2f vert(appdata v){v2f o;o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;o.vertex = UnityObjectToClipPos(v.vertex - (v.normal * _R));o.uv = TRANSFORM_TEX(v.uv, _MoveTex);return o;}fixed4 frag(v2f i) : SV_Target{float2 uv = i.uv;if (_isFront){uv = float2(i.uv.x, -i.uv.y);}fixed4 col = tex2D(_MoveTex, uv - float2(0, _isMove * _Speed * _Time.y));if (_isCut == 1){float3 cutVector = normalize(_CutVector.xyz);//切割向量float3 targetVer = i.worldPos - _CutCenter;//切割原点到模型点上的向量float angel = -dot(cutVector, normalize(targetVer));//切割向量和targetVer点乘,正则同方向,父则反方向clip(angel);//反方向剔除}clip(col.x - 0.1);return col* _MoveColor;}ENDCG}Pass{Tags { "RenderType" = "Opaque" "IgnoreProjector" = "True" "Queue" = "Geometry" }LOD 100ZWrite OnCull Off  //关闭剔除  Blend SrcAlpha OneMinusSrcAlphaCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "UnityLightingCommon.cginc" // 对于 _LightColor0struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;float3 normal : NORMAL;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;float3  worldPos  : TEXCOORD1;half3 worldNormal : TEXCOORD2;fixed4 diff : COLOR0; // 漫射光照颜色};sampler2D _PipeTex;float4 _PipeTex_ST;float4 _CutCenter;float4 _CutVector;int _isCut;fixed _Verical;float _Alpha;float4 _Color;float _Metallic;float _Smoothness;v2f vert(appdata v){v2f o;o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.uv, _PipeTex);o.worldNormal = UnityObjectToWorldNormal(v.normal);half nl = max(0, dot(o.worldNormal, _WorldSpaceLightPos0.xyz) * 0.5 + 0.5);o.diff = nl * _LightColor0;o.diff.rgb += ShadeSH9(half4(o.worldNormal, 1));return o;}fixed4 frag(v2f i) : SV_Target{float2 uv = i.uv;fixed4 col = tex2D(_PipeTex, uv);if (_isCut == 1){float3 cutVector = normalize(_CutVector.xyz);//切割向量float3 targetVer = i.worldPos - _CutCenter;//切割原点到模型点上的向量float angel = -dot(cutVector, normalize(targetVer));//切割向量和targetVer点乘,正则同方向,父则反方向clip(angel);//反方向剔除}// 计算视图方向和反射矢量// 此处为每像素计算half3 worldViewDir = normalize(UnityWorldSpaceViewDir(i.worldPos));half3 worldRefl = reflect(-worldViewDir, i.worldNormal);// 与在先前的着色器中相同half4 skyData = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, worldRefl);half3 skyColor = DecodeHDR(skyData, unity_SpecCube0_HDR);fixed4 c = 0;c.rgb = skyColor * _Metallic;half4 endColor;endColor = fixed4(((_Color + c) * i.diff * _Smoothness).rgb, _Color.a);return fixed4(endColor.rgb, _Alpha);}ENDCG}}
}

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

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

相关文章

LabVIEW声速测定实验数据处理

LabVIEW声速测定实验数据处理 介绍了一个基于LabVIEW的声速测定实验数据处理系统的应用。该系统利用LabVIEW的强大数据处理和分析能力,通过设计友好的用户界面和高效的算法,有效提高了声速测定实验的数据处理效率和准确性。通过这个案例,可以…

Gradle8之下载安装与环境变量配置及国内下资源设置

Gradle8之下载安装与环境变量配置及国内下资源设置 文章目录 Gradle8之下载安装与环境变量配置及国内下资源设置1. Gradle1. 官网2. 关于Gradle1. 构建任何内容2. 自动化一切3. 更快地交付 2. 下载与安装1. 下载2. 环境变量3.本地存储路径4. 查看Gradle版本 3. 配置国内下资源1…

Linux CentOS stream 9 安装docker

在计算机技术中,虑拟化是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。 目前,大多数服务器的容量的利用率不足15%,这导致服务器数量激增以及增加了复杂性。服务…

计算机视觉基础【OpenCV轻松入门】:获取图像的ROI

OpenCV的基础是处理图像,而图像的基础是矩阵。 因此,如何使用好矩阵是非常关键的。 下面我们通过一个具体的实例来展示如何通过Python和OpenCV对矩阵进行操作,从而更好地实现对图像的处理。 ROI(Region of Interest)是…

centos 7.6安装 Apache HTTP Server 2.4.58

centos 7.6安装 Apache HTTP Server 1、下载Apache HTTP Server 2.4.582、安装Apache HTTP Server 2.4.583、配置Apache HTTP Server 2.4.58 1、下载Apache HTTP Server 2.4.58 Apache HTTP Server is the Number One HTTP Server On The Internet. The Apache HTTP Server Pr…

redis scan命令导致cpu飙升

一.背景 今天下午Redis的cpu占用突然异常升高,一度占用达到了90%,触发了钉钉告警,之后又回到正常水平,跟DBA沟通,他说主要是下面这个语句的问题 SCAN 0 MATCH fastUser:6136* COUNT 10000这个语句的执行时长很短&…

SpringBoot项目如何打包成docker镜像?

将Spring Boot项目打包成Docker镜像的过程可以分为以下几个步骤: 1. 创建Dockerfile 首先,你需要在Spring Boot项目的根目录下创建一个Dockerfile。这个文件包含了Docker镜像构建的所有指令。一个基本的Dockerfile可能看起来像这样: # 使用…

运维的利器--监控--zabbix--第二步:建设--汉化补丁

文章目录 一、环境及需求说明二、安装配置步骤1、安装语言包2、查看安装的中文语言包3、登录zabbix控制台设置语言为简体中文4、刷新系统页面 一、环境及需求说明 环境说明: 操作系统 centos 7.9 zabbix-server版本 5.0 一般情况下,zabbix-server和WE…

基于JavaWeb开发的小区车辆登记系统计算机毕设[附源码]

基于JavaWeb开发的小区车辆登记系统计算机毕设[附源码] 🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统…

【洛谷题解】P8627 [蓝桥杯 2015 省 A] 饮料换购

题目链接&#xff1a;[蓝桥杯 2015 省 A] 饮料换购 - 洛谷 题目难度&#xff1a;普及- 涉及知识点&#xff1a;换购 题意&#xff1a; 分析&#xff1a;一直换购直至瓶盖数<3为只 AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int main() {i…

【wu-lazy-cloud-network】Java自动化内网穿透架构整理

项目介绍 wu-lazy-cloud-network 是一款基于&#xff08;wu-framework-parent&#xff09;孵化出的项目&#xff0c;内部使用Lazy ORM操作数据库&#xff0c;主要功能是网络穿透&#xff0c;对于没有公网IP的服务进行公网IP映射 使用环境JDK17 Spring Boot 3.0.2 版本更新 1…

Kotlin基本语法 4 类

1.定义类 package classStudyclass Player {var name:String "jack"get() field.capitalize()set(value) {field value.trim()} }fun main() {val player Player()println(player.name)player.name " asdas "println(player.name)} 2.计算属性与防范…

2.20 day2 QT

自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//窗口相关设置this->setWindowTitle("登入页面"); //设置 窗口 标题this->setWindowIcon(QIcon("D:…

深度学习图像处理基础

这里写目录标题 分辨率是什么 视网膜屏视网膜屏人眼的视觉视力 像素密度设置合适的PPI&#xff0c;制造视网膜屏 色彩是什么色匹配实验色彩匹配的意义量化色彩匹配白色合为1色度图 总结 HDR光亮度&#xff08;尼特&#xff09;灰阶亮度范围HDR显示技术总结 一级目录二级目录二级…

Job 和 DaemonSet

一、Job 1、Job 背景问题 K8s 里&#xff0c;最小的调度单元是 Pod&#xff0c;如果直接通过 Pod 来运行任务进程&#xff0c;会产生以下几种问题&#xff1a; ① 如何保证 Pod 内进程正确的结束&#xff1f; ② 如何保证进程运行失败后重试&#xff1f; ③ 如何管理多个任…

曾经爆火的「流批一体」现在怎么样了?

2021年和2022年&#xff0c;曾经有一个概念在整个数据开发方向传播&#xff0c;不管是懂和不懂的人&#xff0c;都能扯上一两句。那就是大家耳熟能详的「流批一体」。 时至今日&#xff0c;已经很少有人再提起这个话题&#xff0c;这个概念在21、22年很多面试中也会被面试官问到…

[嵌入式AI从0开始到入土]15_orangepi_aipro欢迎界面、ATC bug修复、镜像导出备份

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…

单片机学习笔记---红外遥控(外部中断)

目录 红外遥控简介 硬件电路 基本发送与接收 NEC编码​​​​​​​ 遥控器键码 复习外部中断和定时器 红外遥控简介 红外遥控是利用红外光进行通信的设备&#xff0c;由红外LED将调制后的信号发出&#xff0c;由专用的红外接收头进行解调输出 通信方式&#xff1a;单工…

WebGL中开发科学数据可视化应用

WebGL在科学数据可视化领域有广泛的应用&#xff0c;可以用于呈现和解释复杂的科学数据。以下是在WebGL中开发科学数据可视化应用时的一些建议&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.选择合…

2、电源管理入门之开机详解

目录 1. 硬件上电 2. ATF运行 3. Linux启动 3.1 内核启动start_kernel 3.2 平台启动setup_arch 3.4 DTS初始化psci_dt_init 3.5 系统rest创建kernel_init线程 3.6 SMP初始化smp_init 3.7 PSCI接口psci_cpu_on 3.8 SMC返回secondary_entry 系统开机牵扯到:“我是…