TA入门笔记(十四)
参考
may佬《技术美术百人计划》
Flowmap的实现
Flowmap的定义
flowmap实质上是一张记录了2D向量信息的纹理,使用颜色(通常为RG通道)记录该处向量场的方向,让模型上某一点表现出定量流动的特征,通过在shader中偏移UV再对纹理进行采样来模拟流动效果
前置了解:UV映射
UV坐标用于查找纹理的颜色值,使用(R,G)颜色通道表示坐标,黑色(0,0),绿色(0,1),红色(1,0),黄色(1,1)
UV贴图上颜色相同的地方意味着纹理采样的时候使用了同一位置
Flowmap通过上边携带的向量场信息对UV进行了偏移,进而干扰纹理采样的过程,形成扭曲的效果
需要注意,不同的软件uv坐标可能不同,如ue中反转了绿通道(OpenGL和DirectX原点坐标差异)
flowmap的作用
flowmap更接近uv动画而非顶点动画,没有对顶点进行操作,是一种廉价而高效的实现流动效果的方法
不只是水面,flowmap可以用在任何流动的效果上,包括流动的天空球
- 图为战神中flowmap在天空球中的应用,通过交替出现的云朵可以看出flowmap的典型特征:周期性变化
Flowmap shader
实现思路
- 采样Flow map获取向量场信息
- 用向量场信息,使采样贴图的UV随时间变化
- 对同一贴图以半个周期的相位差采集两次并线性插值,使贴图流动连续
flowmap流动
最简单的随时间偏移的方法:uv - time
- 为什么不是加?
- 在uv+(time,0)的情况下,随着时间增加会采样到更远的像素,在视觉上表现为更远距离的像素偏移向该点,与直观感受到的运算法则相反
UV值遵循向量的运算法则,UV偏移时,改变的不是顶点的位置
从Flowmap获取需要的流动方向,再乘上time,就可以让某个点根据flowmap进行流动
- 使用flow map之前需要将色值0 ~ 1的范围映射到方向向量的范围 -1 ~ 1
//从flowmap获取流向
float3 flowDir = tex2D(_FlowMap,i.uv) * 2.0 - 1.0;
随着时间进行,采样的变形会越来越夸张,因此需要通过frac函数把偏移范围控制在[0,1]之内
float phase = frac(_Time);
这个时候时间到达最大值之后会跳变至0,为了解决这个问题需要构造两层相差半个周期的采样
float phase0 = frac(_Time * 0.1 * _TimeSpeed);
float phase1 = frac(_Time * 0.1 * _TimeSpeed + 0.5);
用相位差半个周期的两层采样进行加权混合,使纹理流动一个周期重新开始时的不自然情况被另一层采样覆盖
//平铺贴图用的uv
float2 tiling_uv = i.uv * _MainTex_ST.xy + _MainTex_ST.zw;//用波形函数周期化向量场方向,用偏移后的uv对材质进行偏移采样
half3 tex0 = tex2D(_MainTex,tiling_uv - flowDir.xy * phase0);
half3 tex1 = tex2D(_MainTex,tiling_uv - flowDir.xy * phase1);//构造函数计算随波形函数变化的权值,使得MainTex采样值在接近最大偏移时权值为0,并因此消隐,构造较平滑的循环
float flowLerp = abs((0.5 - phase0)/0.5);
half3 finalColor = lerp(tex0,tex1,flowLerp);
flowmap修改法线贴图
Flowmap的制作
Flowmap painter
一个可以直接通过笔刷来制作flowmap的简单工具
- 可以导入纹理预览使用flowmap之后的效果,也可以直接预览flowmap和向量场方向
- 使用flowmap painter导出的图片本身就在线性空间,导入unity时需要取消勾选sRGB
- 导入flowmap贴图时需要选择无压缩或高质量,否则贴图变形之后会出现方块
Houdini Labs
安装
Houdini Labs是内置在houdini中的一组游戏开发相关的节点,可以在github中搜索sidefx Labs或着直接在houdini中安装得到
- 在较早版本的houdini中无法在shelf内找到该工具,只能通过github下载;在这些未被内置到houdini的版本中,这组工具的名称为gamedev
在顶部工具栏中找到sideFX Labs
选择与Hondini对应的版本进行安装
安装完成后重启Hondini即可
节点介绍
首先创建grid节点
- flowmap需要绘制顶点色,所以grid需要多一些细分
和flowmap相关的节点一共有6个
节点名称 | 功能 |
---|---|
Labs Flowmap | 为模型初始化一个向量场v |
Labs Flowmap Brush | 笔刷绘制修改向量场 |
Labs Flowmap Obstacle | 根据障碍物修改向量场 |
Labs Guide Flowmap | 根据样条线修改向量场 |
Labs Flowmap to Color | 将向量转化为模型顶点色 |
Labs Flowmap Visualize | 可视化,内置flowmap shader |
1. Labs Flowmap
Labs Flowmap的作用是初始化向量场,共三种模式
- Normal 根据顶点法线生成初始v向量
- Slope 计算梯度生成初始v向量
- Direction 将所有v向量设为固定方向
2. Labs Flowmap Brush
像梳毛发一样使用笔刷来改变法线的方向
- Comb Lift 用于调整笔刷模式:0为正常绘制,1为擦除,-1为反向
- 可进行的操作会显示在视窗最下方
3. Labs Guide Flowmap
两个输入端,一端输入向量场,一端输入设置流向的曲线(可通过draw curve节点绘制曲线)
可用于设定初始流向,再使用笔刷进行细节处理
strength:用于控制混合,0时使用原有的向量场,1使用曲线的切线方向
effect width : 控制影响范围
falloff : 全局影响(在effect width较小时)
guide sample count : 修改输入曲线的分段数
4. Labs Flowmap Obstacle
两个输入端,一端输入向量场,一端输入用于碰撞检测的模型
- Strength决定flowmap受影响的程度
- Division Size和Dilate Volume用于控制VDB(体素),分别用于体素的细分程度和整体体积
- Division size不宜过小,一是因为该VDB是空心的,可能会形成壳体,二是细分过多会导致占用大量资源
- Blur strength用于平滑,避免局部不自然
5. Labs Flowmap to Color
将向量场信息转化为顶点色
- 这个节点会检测模型是否有UV,如果没有将赋予模型UV
6.Labs Flowmap Visualize
flowmap可视化,用于观察生成的flowmap效果
导出flowmap:Labs Map Baker
输出顶点色,注意调整Gamma值
- 免费版的Hondini导出后会有巨大的水印…
作业
使用flowmap制作的简单的层云流动的效果
TA入门笔记(十四)相关推荐
- 深度学习入门笔记(四):向量化
欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...
- Oracle入门(十四)之PL/SQL
一.PL/SQL 基本语法 PL/SQL语言是模块式的过程化SQL,是oracle公司对SQL的扩展. (1) (2) (3) (5) (6) (7)数据类型 Number 数字型 Varchar2 ...
- 吴恩达《机器学习》学习笔记十四——应用机器学习的建议实现一个机器学习模型的改进
吴恩达<机器学习>学习笔记十四--应用机器学习的建议实现一个机器学习模型的改进 一.任务介绍 二.代码实现 1.准备数据 2.代价函数 3.梯度计算 4.带有正则化的代价函数和梯度计算 5 ...
- ROS入门笔记(四):ROS实践(小海龟仿真)— ROS Topics
ROS入门笔记(四):ROS实践(小海龟仿真)- ROS Topics 文章目录 1 基础知识 1.1 运行ROS Master所在主机的资源地址 1.2 ROS常用命令 1.2.1 查看所有以ros ...
- 深度学习入门笔记(四):神经网络
专栏--深度学习入门笔记 推荐文章 深度学习入门笔记(一):机器学习基础 深度学习入门笔记(二):神经网络基础 深度学习入门笔记(三):感知机 深度学习入门笔记(四):神经网络 深度学习入门笔记(五) ...
- 机器学习入门笔记(四):朴素贝叶斯分类
文章目录 一.朴素贝叶斯法 1.1 实现原理 1.2 后验概率最大化 二.朴素贝叶斯法的参数估计 2.1 极大似然估计 2.2 学习与分类算法 2.3 朴素贝叶斯分类器例题 2.4 贝叶斯估计 推荐文 ...
- 《C++游戏开发》笔记十四 平滑过渡的战争迷雾(二) 实现:真正的迷雾来了
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9712321 作者:七十一雾央 新浪微博:http:// ...
- 【Git入门之十四】Git GUI
[Git入门之十四]Git GUI - JackyStudio - 博客频道 - CSDN.NET 文章都快写完了,Git GUI才浮出水面,很多人要骂我,这么方便的东西怎么不早拿出来. 当然命令行和 ...
- Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理
Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理 Polyworks的工作任务存储分为工作区和项目两级,通过WORKSPACE命令获取工作任务信息,实现更好的任务管理. 下 ...
- 强化学习经典算法笔记(十四):双延迟深度确定性策略梯度算法TD3的PyTorch实现
强化学习经典算法笔记(十四):双延迟深度确定性策略梯度算法TD3的PyTorch实现 TD3算法简介 TD3是Twin Delayed Deep Deterministic policy gradie ...
最新文章
- 4,fail-fast错误机制
- (转载)BPM流程管理的将才是你吗
- Sublime Text 3包管理及插件主题安装方式
- python信号处理教程_python 之信号Signal|python3教程|python入门|python教程
- CodeForces - 1405E Fixed Point Removal(线段树+思维)
- Taro+react开发(99):问答模块06实现加减
- pip安装gluonts
- codevs——1044 拦截导弹(序列DP)
- 车联网就是车-路-云-图-网
- oracle阿拉伯数字转换成汉字,一个阿拉伯数字转中文数字的函数
- 音视频-Video标签整理(属性、方法、事件)
- 生如夏花之绚烂,Lisp风格的Lialang诞生了!
- mvc html禁用文本框,如何在MVC htmlAttribute中設置禁用
- 数学规划模型(二):线性规划模型
- 分享我成为GDE(Google开发者专家)的经历
- linux系统下键盘按键的重新映射——xmodmap工具和xev工具
- android Criteria
- 负重前行,一步一脚印
- Pandas+Seaborn+Plotly:联手探索苹果AppStore
- 体积光,体积雾——链接
热门文章
- 燕山大学生产实习SSM项目(人事管理系统)
- Ubuntu 19.04用wine完美运行微信
- Siki_Unity_3-3_背包系统
- Android之beginTransaction
- java动物类问题_java笔记--动物:具体猫和狗以多态方式写出
- Windows11任务栏时钟的秒钟显示
- iPhone 12-iPhone屏幕路线图曝光 最近两年新机发布规划流出
- 天涯直播筹资300万,七天仅赚14.99万,重启计划岌岌可危
- CentOS7多网卡配置(最小化安装)
- android checkbox是否选中,Android 中如何处理checkbox的选中、未选中