入口

当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相关推荐

  1. Unity HDRP中的光照烘焙测试(Mixed Lighing )和间接光

    部分内容摘抄自:https://www.cnblogs.com/murongxiaopifu/p/8553367.html 直接光和间接光 大家都知道在Unity中,我们可以在场景中布置方向光.点光. ...

  2. Substance Designer+Unity HDRP

    Unity HDRP 八猴 参考资料 https://www.artstation.com/learning/courses/2p0/creating-a-sci-fi-floor-in-substa ...

  3. Unity HDRP烘焙技术原理及应用

    您要找的是不是UWA学堂的<Unity HDRP烘焙技术原理及应用>? 文章简介 Unity的HDRP是高清渲染管线(High Definition Render Pipeline)的简称 ...

  4. Unity HDRP 塞尔达-卑鄙的海利亚人 场景练习

    Unity HDRP 塞尔达-卑鄙的海利亚人 场景练习 哎呀,没有塞尔达2玩我要死了

  5. VAT (Vertex Animation Texture) on Unity HDRP examples

    VAT (Vertex Animation Texture) on Unity HDRP examples VAT 使用Houdini 和SideFX Labs. 实现. https://github ...

  6. Unity HDRP渲染管线基础指南

    HDRP和LWRP简介 Unity2018中引入了可编程渲染管线(Scriptable Render Pipeline,简称SRP),是一种在Unity中通过C#脚本配置和执行渲染的方式.至2018. ...

  7. Unity | HDRP高清渲染管线学习笔记:HDRP配置文件(HDRP Asset)

    目录 一.Frame Settings(帧设置) 二.Volume 三.HDRP配置文件.帧设置和Volume之间的关系 四.HDRP配置文件 1.Rendering (1)Color Buffer ...

  8. Unity HDRP示例场景解析

    HDRP示例场景解析 一.Main Camera(相机组件) 1.General 2.Physical 二.Directional Light(平行光) 三.Sky and Fog Volume(天空 ...

  9. Unity HDRP中解决抗锯齿问题

    使用Camera相机组件属性(Anti-aliasing)为界面添加抗锯齿效果. 在默认状态下,将Anti-aliasing设置为 No Anti-aliasing,这里有三个选项: (按性能消耗的大 ...

最新文章

  1. linux用户和组帐户管理
  2. Android 四大组件之——Acitivity(一)
  3. python列表类型用什么表示_python内置类型:列表,包括 list 和 tuple
  4. 早期计算机音乐创作的歌曲,14.计算机音乐创作(专业组)
  5. Python3学习笔记(六):字符串
  6. LayaBox IDE 安装后执行项目报错解决方案的一些记录
  7. OpenCV-图像处理(26、直方图反向投影(Back Projection))
  8. 2021-09-1311. 盛最多水的容器 数组 双指针
  9. 第三届蓝桥杯省赛---马虎的算式
  10. 单元测试框架TestableMock快速入门(七):常用注解参数
  11. python二维数据读取对齐_[Python ] Python 多维数组转换的维度对齐问题
  12. 最新尚硅谷Git和GitHub视频教程完整版
  13. Android数据库框架LitePal详解
  14. IMX6Q开发板使用USB直接连接HP LaserJet 1020 plus打印机打印。
  15. java nlpir_NLPIR分词工具的使用(java环境下)
  16. 值得收藏的UmiJS 教程
  17. Kubernetes 学习总结(27)—— Kubernetes 安装 Redis 集群的两个方案
  18. 四百元左右有什么降噪耳机推荐?高性价比降噪耳机推荐
  19. php约束性别默认为男,在表单中包含性别选项,且默认状态为“男”被选中,下列正确的是( )...
  20. java中使用Jedis操作Redis实例

热门文章

  1. 我们跟8个程序员聊了一晚上,攒齐了来自BAT的吐槽
  2. 编程菜鸟到大鸟--代码积累
  3. 黑洞同样释放能量--霍金修正黑洞理论
  4. 2021-07-18大学 复习网课 视频 (倍速详细篇)
  5. 【嵌入式学习-STM32F103-TIM-编码器接口】
  6. 【解决】mac移动硬盘只读错误,不丢失资料
  7. Linux系统 ·虚拟机安装· SecureCRT远程连接器
  8. PHP微信公众号开发接口封装
  9. 【githubshare】开源的文件文档在线预览项目,支持主流办公文档的在线预览,如 doc、docx、Excel、pdf、txt、zip、rar、 图片等
  10. Excel Functions