unity hdrp的TAA
入口
当hdrp开启了后处理后会执行PostProcessSystem.cs的Render,然后如果开启了taa则执行taaEnabled中的内容
获取历史和申请当前颜色rt,获取历史移动速度和当前移动速度rt
GrabTemporalAntialiasingHistoryTextures主要收集历史颜色rt和申请当前颜色rt的。
GrabVelocityMagnitudeHistoryTextures主要是收集历史速度变化rt和当前速度变化rt的。
TAA核心
DoTemporalAntialiasing这里是核心的taa的处理,taaParams主要是收集一些taa需要的参数,比如前面说的rt。
通过DrawProcedural渲染两个pass,都是属于Hidden/HDRP/TemporalAA中的pass。
颜色处理
第一个pass是主要处理taa的地方。
首先顶点着色器中对进来的图片进行全屏的uv和位置信息获取
核心是片元着色:
首先要获取最接近当前深度信息的附近的深度GetClosestFragment,原理是通过周围的四个像素获取深度值得到最接近当前深度的,加上这个深度值。
用这个值来对速度rt“_CameraMotionVectorsTexture”采样,这样得到的是一个基于摄像机移动后的速度变量。
有了这个速度变量motionVector,用当前的uv减他就是前一帧的uv了。
然后如果需要过滤可以通过GetFilteredHistory来过滤,他可以用HistoryBilinear来线性过滤前后值或者用HistoryBicubic5Tap来通过五张历史图片来得到过滤,这个方法来源于smaa。
亮度为关键因素
然后会让历史颜色乘PerceptualWeight,PerceptualWeight主要是获取亮度信息,通过YCOCG图片的x通道或者通过Luminance提取亮度都可以。
然后通过Fetch4获取当前颜色以及周边四到八个颜色信息。然后通过FilterCentralColor来获取均值,相当于模糊了一次。
然后执行GetNeighbourhoodCorners获取周围最大亮度和最小亮度以及他们的平均亮度,有两种方式获取,一种是直接看最大最小的MinMaxNeighbourhood
另一种是通过求方差来获取VarianceNeighbourhood。
闪烁问题
获取的最大最小亮度来裁剪历史颜色信息GetClippedHistory。这里的目的是减少前后帧混合时的闪烁,鬼影等问题。
然后通过SharpenColor来获取线性颜色信息。filteredColor = SharpenColor(samples, filteredColor, sharpenStrength);
再通过GetBlendFactor来计算混合的系数,通过历史亮度以及周边最大最小的亮度得到混合系数。
半透明计算
如果要计算半透明,会用混合系数GetBlendFactor来获取历史颜色和当前颜色的alpha混合。然后颜色上也要跟alpha关联的变化
然后考虑是否需要tonemap,因为历史颜色混合会导致之前的颜色信息有所丢失,所以最后做一次tonemap会让颜色信息恢复。
最后再把当前颜色以及速度rt当作历史颜色和速度rt,让下次执行时可以获取历史颜色。
抖动颜色处理
第二个pass就是做一些抖动颜色处理
缓存
最后的PoolSource这里主要就是通过hash做值来保存渲染后的rt。
另外这里有一篇说ue的TAA,跟unity的做法相似,有部分不同。TAA原理及OpenGL实现 - 知乎
unity hdrp的TAA相关推荐
- Unity HDRP中的光照烘焙测试(Mixed Lighing )和间接光
部分内容摘抄自:https://www.cnblogs.com/murongxiaopifu/p/8553367.html 直接光和间接光 大家都知道在Unity中,我们可以在场景中布置方向光.点光. ...
- Substance Designer+Unity HDRP
Unity HDRP 八猴 参考资料 https://www.artstation.com/learning/courses/2p0/creating-a-sci-fi-floor-in-substa ...
- Unity HDRP烘焙技术原理及应用
您要找的是不是UWA学堂的<Unity HDRP烘焙技术原理及应用>? 文章简介 Unity的HDRP是高清渲染管线(High Definition Render Pipeline)的简称 ...
- Unity HDRP 塞尔达-卑鄙的海利亚人 场景练习
Unity HDRP 塞尔达-卑鄙的海利亚人 场景练习 哎呀,没有塞尔达2玩我要死了
- VAT (Vertex Animation Texture) on Unity HDRP examples
VAT (Vertex Animation Texture) on Unity HDRP examples VAT 使用Houdini 和SideFX Labs. 实现. https://github ...
- Unity HDRP渲染管线基础指南
HDRP和LWRP简介 Unity2018中引入了可编程渲染管线(Scriptable Render Pipeline,简称SRP),是一种在Unity中通过C#脚本配置和执行渲染的方式.至2018. ...
- Unity | HDRP高清渲染管线学习笔记:HDRP配置文件(HDRP Asset)
目录 一.Frame Settings(帧设置) 二.Volume 三.HDRP配置文件.帧设置和Volume之间的关系 四.HDRP配置文件 1.Rendering (1)Color Buffer ...
- Unity HDRP示例场景解析
HDRP示例场景解析 一.Main Camera(相机组件) 1.General 2.Physical 二.Directional Light(平行光) 三.Sky and Fog Volume(天空 ...
- Unity HDRP中解决抗锯齿问题
使用Camera相机组件属性(Anti-aliasing)为界面添加抗锯齿效果. 在默认状态下,将Anti-aliasing设置为 No Anti-aliasing,这里有三个选项: (按性能消耗的大 ...
最新文章
- linux用户和组帐户管理
- Android 四大组件之——Acitivity(一)
- python列表类型用什么表示_python内置类型:列表,包括 list 和 tuple
- 早期计算机音乐创作的歌曲,14.计算机音乐创作(专业组)
- Python3学习笔记(六):字符串
- LayaBox IDE 安装后执行项目报错解决方案的一些记录
- OpenCV-图像处理(26、直方图反向投影(Back Projection))
- 2021-09-1311. 盛最多水的容器 数组 双指针
- 第三届蓝桥杯省赛---马虎的算式
- 单元测试框架TestableMock快速入门(七):常用注解参数
- python二维数据读取对齐_[Python ] Python 多维数组转换的维度对齐问题
- 最新尚硅谷Git和GitHub视频教程完整版
- Android数据库框架LitePal详解
- IMX6Q开发板使用USB直接连接HP LaserJet 1020 plus打印机打印。
- java nlpir_NLPIR分词工具的使用(java环境下)
- 值得收藏的UmiJS 教程
- Kubernetes 学习总结(27)—— Kubernetes 安装 Redis 集群的两个方案
- 四百元左右有什么降噪耳机推荐?高性价比降噪耳机推荐
- php约束性别默认为男,在表单中包含性别选项,且默认状态为“男”被选中,下列正确的是( )...
- java中使用Jedis操作Redis实例