2.8Flowmap的实现

news2024/11/19 19:42:42

一、Flowmap 是什么

半条命2中水的流动

求生之路2中的水的流动

这种方式原理简单,容易实现,运算量少,如今也还在使用

1.flowmap的实质

Flow map(流向图) ,一张记录了2D向量信息的纹理,Flow map上的颜色(通常为RG通道)记录该处向量场的方向,让模型上某一点表现出定量流动的特征。

通过在shader中偏移uv再对纹理进行采样,来模拟流动效果。

右边向量场的方向于中间Flowmap和它的方向是不一致的,这是为什么呢?

2.前置了解:UV映射

UV坐标用于查找纹理的颜色值:

UV贴图(用于理解):使用(R,G)颜色通道表示坐标:

黑色(0,0),绿色处(0,1),红色处(1,0),黄色处(1,1)

如果我们要对一个矩形进行纹理查找的话,我们首先会用到它的UV坐标

左边为unity中的UV坐标 与我们熟知的xy坐标轴相似

用该UV坐标去查找右边这张贴图的颜色值,我们将会得到和原贴图一摸一样的结果

如果让更改UV坐标,让每一列都拥有相同的UV值再去采样,则会得到右图这样的条纹图结果

若使整个采样的时候用的UV值是同一个的话,如图我们将该UV坐标的UV值全都变为黑色,那么结果就会对左下角进行采样

UV贴图上颜色相同的地方就意味着它在采样纹理的时候使用了同一个位置

Flowmap则是通过它上面所带有的向量场的信息对UV进行一个偏移之后,去干扰我们采样纹理时候的过程,如上图

注意在UE4中,UV坐标是不同的,与unity相比是将绿通道反转了。所以使用的Flowmap也会发生变化,要根据引擎进行调整

偏转后的UV坐标去采样右图后得到下面扭曲贴图

2.为什么要使用flowmap?

原因:

类似UV动画,而非顶点动画。换言之,无需对模型顶点进行操作,易实现,运算开销小。

不仅仅是水面,任何和流动相关的效果都可以采用flowmap。

flowmap不仅仅被用于制作一些侵蚀效果或表面的流动效果,还被用于制作流动的天空球中

二、Flowmap shader

1. 借助Shader Graph与desmos理解flowmap

  1. 采样Flow map获取向量场信息
  2. 用向量场信息,使采样贴图时的UV随时间变化
  3. 对同一贴图以半个周期的相位差采集两次,并线性插值,使贴图流动连续

2. 在shader中实现flowmap

  • 目标:移。根据flowmap上的值,使纹理随时间偏
  • 最简单的随时间偏移:UV - time
  • 为什么是相减:
  1. 先来看看 uv+time 的情况
  2. (u,v) + (time,0) :模型上某个点: 随着time增加,采样到的像素越远,
  3. 视觉上可以形容为:更远距离的像素偏移向该点,视觉效果和我们直观认识到的运算法则是相反的。
  4. UV值作为向量(u,v),自然也遵循向量的运算法则。但UV偏移时,改变的不是顶点的位置。  

  5. 单方向运动X

    由flow map获取流动方向√

  6. flow map不能直接使用

    将flow map上的色值从[0,1]的范围映射到方向向量的范围[-1,1]即乘2减1

从flowmap获取需要的流动方向,再乘Time就可以让某个点去根据flowmap进行流动

调整采样时的UV为: adjust_uv = uv - flowDir * time

在这里我们用FlowSpeed来控制向量场的强度

但随着时间的增加,扭曲程度会越来越大,所以需要一个Fraction函数把时间变成[0,1]的循环 把它变成一个三角波函数

为了解决这一问题,我们需要构造两层采样相差半个周期的采样,再对他们进行插值混合

随着时间进行,变形越来越夸张,为了把偏移控制在一定范围内:

解决frac产生的跳变,把上面改成:

我们希望的流动:无缝循环

用相位差半个周期的两层采样进行加权混合,使纹理流动一个周期重新开始时的不自然情况被另一层采样覆盖

用flowmap修改法线贴图

三、Flowmap的制作

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

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

相关文章

Ubuntu部署kafka集群

Apache Kafka (KRaft 集群) Apache Kafka 是一个基于 TCP 的分布式流处理平台,提供高吞吐量、低延迟的消息传递和处理能力,用于构建实时数据管道和流应用程序。其底层通信依赖于 TCP Socket,但 Kafka 封装了许多高级特性,使其更加…

Python使用动态代理的多元应用

Python作为一种功能强大且易于学习的编程语言,在网络编程领域具有广泛的应用。当Python与动态代理技术结合时,便开启了一扇通往更多可能性的大门。以下将深入探讨Python使用动态代理可以实现的多种应用。 首先,Python结合动态代理在网络爬虫…

ETLCloud中如何使用Kettle组件

ETLCloud中如何使用Kettle组件在当今数据驱动的时代,数据处理和分析已成为企业决策的关键。为了更高效地处理海量数据,ETL(Extract, Transform, Load)工具变得至关重要。而在众多ETL工具中,Kettle作为一款开源、灵活且…

学习笔记——网络参考模型——TCP/IP模型

二、TCP/IP模型 TCP/IP模型(TCP/IP协议栈):很多个互联网协议的集合,其中以TCP和IP为主,将这些协议的集合称为TCP/IP协议栈。目前使用最多的协议模型。 因为OSI协议栈比较复杂,且TCP和IP两大协议在业界被广泛使用,所以…

C++候捷stl-视频笔记2

深度搜索list list是双向链表:底部实现是环状双向链表 list内部除了存data之外,还要存一个前向指针prev和一个后向指针next list的iterator,当迭代器的时候,是从一个节点走到下一个节点,是通过访问next指针实现的 主要…

arcgis api for javascript点击获取要素错乱的问题

今天帮同事看了一个前端地图点击的问题:点击时总会获取到周边的图元,即使我点击线的周围,也是能获取到的,除非离得特别远。 地图组件用的是arcgis api, 图层类是grahicslayer,要素类型是线。这是添加图元的代码: grap…

AIGC商业案例实操课,发觉其创造和商业的无限可能,Ai技术在行业应用新的商机

课程下载:https://download.csdn.net/download/m0_66047725/89307523 更多资源下载:关注我。 课程内容 1 AI为什么火 。写在课程前面的寄语 。AIGC标志性事件:太空歌剧院 。AI人工智能为什么这么火 ,AI人工智能发展历程 。聊天AI会取…

Vxe UI vxe-upload 上传组件,显示进度条的方法

vxe-upload 上传组件 查看官网 https://vxeui.com 显示进度条很简单,需要后台支持进度就可以了,后台实现逻辑具体可以百度,这里只介绍前端逻辑。 上传附件 相关参数说明,具体可以看文档: multiple 是否允许多选 li…

短剧系统源码:构建互动娱乐的新平台

随着数字媒体的兴起,短剧成为了一种新兴的娱乐形式,它以紧凑的叙事和快速的节奏迎合了现代观众的观看习惯。短剧系统源码的开发,为短剧内容的创作、传播和消费提供了一个全面的技术解决方案。本文将探讨短剧系统源码的关键组成部分及其功能。…

基于python flask+pyecharts实现的中药数据可视化大屏,实现基于Apriori算法的药品功效关系的关联规则

背景 在中医药学中,物品与功效之间的关联关系研究是一个非常重要的课题。传统中医药学中,很多药物都具有多种功效,而且不同药物对同一种疾病可能具有不同的疗效。因此,挖掘物品与功效之间的关联关系,可以帮助我们更加…

【第十二节】C++控制台版本贪吃蛇小游戏

目录 一、游戏简介 1.1 游戏概述 1.2 实现功能 1.3 开发环境 二、实现设计 2.1 C类的设计 2.2 项目结构 2.3 代码设计 三、程序运行截图 3.1 游戏界面 3.2 自定义地图 3.3 常规游戏界面 一、游戏简介 1.1 游戏概述 本游戏是一款基于C语言开发的控制台版本贪吃蛇游…

centos7 openssh9.7p 制作rpm包

centos7 openssh9.7p 制作rpm包 下载源码包:通过git开源打包源码准备编译打包环境编译打包上传rpm包到需要更新的服务器,并更新 下载源码包: 一般只用ssh源码就可以了 cd /root wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.7p…

一文了解企业版电子书:从认识到制作

现如今,电子书已经成为企业传播知识、展示品牌、吸引客户的重要工具了。那么,企业版电子书到底是什么?又该如何才能制作出有效的企业版电子书呢?接下来,跟着LookLook同学一起来看看如何从认识到制作一本企业版电子书。…

【计算机网络】——物理层(图文并茂)

物理层 一.物理层概述1.物理层要实现的功能2.物理层接口特征1.机械特性2.电气特性3.功能特性4.过程特性 二.物理层下面的传输媒体1.传输媒体的分类2.导向型传输媒体1.同轴电缆2.双绞线3.光纤 3.非导向型传输媒体1.无线电波2.微波3.红外线4.激光5.可见光 三.传输方式1.串行传输与…

select多个客户端连接,传输数据时只能顺序传输产生原因

1. 场景描述 即A先连接,B后连接&#xff0c;只能先A后B依次输入数据&#xff0c;服务端依次读取数据 这是因为进行循环遍历lfd之后的描述符时&#xff0c;没有判断文件描述符i是否在newset集合中 //cfd发生变化 for(int ilfd1;i<maxfd;i){printf("i num %d\t"…

推理和行动协同(Reason and Act,ReAct)和代码生成

文心一言 当我们将“推理和行动协同&#xff08;Reason and Act&#xff0c;ReAct&#xff09;”的概念应用于代码生成时&#xff0c;我们可以理解为一种指导原则或方法论&#xff0c;它强调了在代码生成过程中进行深思熟虑的决策&#xff08;Reason&#xff09;和有效执行&am…

单实例11.2.0.3迁移到RAC11.2.0.4_使用RMAN 异机恢复

保命法则&#xff1a;先备份再操作&#xff0c;磁盘空间紧张无法备份就让满足&#xff0c;给自己留退路。 场景说明&#xff1a; 1.本文档的环境为同平台、不同版本&#xff08;操作系统版本可以不同&#xff0c;数据库小版本不同&#xff09;&#xff0c;源机器和目标机器部…

黑马微服务实用篇知识梳理

1、微服务治理 1.1服务注册与发现Eureka和Nacos a、nacos和eureka&#xff0c;二者都支持服务注册与发现&#xff0c;但nacos还包括了动态配置管理、服务健康监测、动态路由等功能&#xff0c;是更全面的服务管理平台 b、eureka需要独立部署为服务并运行&#xff0c;需要自行搭…

python根据版本下载外部库的.whl文件、python下载离线whl文件、python查找whl历史版本

文章目录 一、python下载外部库的.whl文件 当遇到pip源中没有对应的包&#xff0c;或者网络波动时&#xff0c;可能出现需要离线安装的方法。这里记录一下下载安装whl文件的操作。 一、python下载外部库的.whl文件 1、在浏览器输入https://pypi.org/进入PYPI官网 2、在弹出的…

CentOS7配置国内清华源并安装docker-ce以及配置docker加速

说明 由于国内访问国外的网站包括docker网站&#xff0c;由于种种的原因经常打不开&#xff0c;或无法访问&#xff0c;所以替换成国内的软件源和国内镜像就是非常必要的了&#xff0c;这里整理了我安装配置的基本的步骤。 国内的软件源有很多&#xff0c;这里选择清华源作为…