Flow map
百人计划学习地址:图形 2.8 Flowmap的实现
一、基础概念
首先复习一下UV映射
UV坐标用于查找纹理贴图上的颜色值
什么是FlowMap?
Flowmap的实质就是一张记录了2D向量信息的纹理
Flow map上的颜色(通常为RG通道)记录该处向量场的方向,让模型上某一点表现出定量流动的特征。通过在shader中偏移uv再对纹理进行采样,来模拟流动效果。
我们使用(R,G)向量来表示色值,如下图三所示,表现了向量的方向与色值的对应
Flow Map实现原理
通过所带有的向量场的信息对UV进行偏移,并干扰采样的过程,使原本的采样效果变得扭曲
为什么要使用FlowMap?
用于表现各种流动的效果,好处如下
- 效果类似于UV动画,而非顶点动画。
- 无需对模型顶点进行操作
- 易实现,运算开销小
二、Flowmap shader
shader的实现流程
- 采样Flow map获取向量场信息
- 用向量场信息,使采样贴图时的UV随时间变化
- 对同一贴图以半个周期的相位差采集两次,并线性插值,使贴图流动连续
如何实现最简单的随时间偏移?
使用UV - time
为什么是相减?
先来看看 uv+time 的情况(u,v) + (time,0) :模型上某个点: 随着time增加,采样到的像素越远
视觉上可以形容为:更远距离的像素偏移向该点,视觉效果和我们直观认识到的运算法则是相反的,所以需要相减
我们需要更好的运动方向,正确的方法是从flowMap获取流动方向
但是,flow map不能直接使用,需要将flow map上的色值从[0,1]的范围映射到方向向量的范围[-1.1]