GPU PRO 5 - 2.5 TressFX: Advanced Real-Time Hair Rendering 笔记

TressFX: Advanced Real-Time Hair Rendering

TressFX 实现的高级头发实时渲染

TressFX : AMD 开发的实时毛发模拟渲染技术开源框架

文本主要是从整个渲染管线讲述实现头发的一整套渲染方案

主要分为以下几个部分:几何拓展,光照,阴影,抗锯齿,透明度处理

几何拓展:

头发渲染的初始数据是线段,在几何阶段时会将线段拓展成一个与视平面齐平的平面,也就是常见的公告板,投影后的毛发半径还会增加一些半径保证不会因为投影过小导致在光栅化阶段消失。

光照计算:

文章中头发的光照分为两部分,漫反射和镜面反射

漫反射分量项:t为切线方向,l为光照方向

镜面反射项:

但头发这种东西在现实上特别的地方在于他存在两层高光:

因此文章上面的光照模型上做出了改进,将高光分为了主高光和次高光:

主高光向着发梢偏移,多受到光源颜色影响。

次高光向着发根偏移,多受到毛发颜色的影响。

毛发阴影:

毛发材质的自阴影渲染一直都是问题,文章这边提出了一种近似算法。

主要参数是depth range,这个表示当先着色的毛发片元深度与对应位置的阴影贴图深度插值。

可以说相当廉价的计算方法了,基本上只要采样一次阴影贴图就可以估算阴影了。

抗锯齿:

这里的抗锯齿用的是基于覆盖率的毛发抗锯齿,计算当前像素被毛发覆盖的比例来决定当前像素毛发的Alpha 值,以此减少边缘的锯齿现象。

计算覆盖率有两种:

第一种是Ray-Cone相交测试,通过计算射线圆锥与毛发纤维的相交区域确定覆盖比例。

第二种是在图像空间抗锯齿方法是GPAA(Geometric Pixel Area Processing),也是计算覆盖比例

透明度:

头发渲染的时候一般走的是半透明渲染,而且采用了顺序无关透明技术,文章中使用的是像素链表。

文章讲述的技术其实在同书GPU PRO 5 - 1.1 和 GPU PRO 4 - 4.1 中都有相关涉及。

记录毛发的深度:

在毛发渲染中,计算毛发的光照的时候需要考虑毛发的深度,文章中拓展了这部分内容。

这里介绍了三种毛发深度的写入方法:

1,为所有毛发像素写入统一深度

2,为每个毛发像素写入精确深度

3,选择性写入精确深度

1,为所有毛发像素写入统一深度

最简单的方法,所有毛发的都同同一个深度,优点是简单,不用额外的Pass,不用额外的存储,缺点是效果差,会产生视觉伪影。

2,为每个毛发像素写入精确深度

用一个读写纹理保存距离观察者最近的毛发片元深度,然后用一个额外的Pass在渲染的时候读写该纹理。优点是能获得真实的像素深度,效果好

3,选择性写入精确深度

在 Sort and Draw 完成最终混合之后,根据最终结果判断当前像素是否足够"不透明,满足条件的像素才会写入深度

参考资料:

GPU Pro5 光照篇

Real-Time Hybrid Hair Rendering

相关推荐
成都蜀味缘餐饮技术培训学校19 分钟前
油炸串串技术培训实战指南,核心食材选购与预处理标准
数据仓库·经验分享·笔记·课程设计·微信公众平台
摇滚侠33 分钟前
《大模型应用开发实践:基于 Spring AI+DeepSeek 实现》第 11 章 大模型技术概览 阅读笔记 1
人工智能·笔记·spring
xxwl5852 小时前
区域赛算法模版第八章---贪心(Greedy)
c++·笔记·学习·算法
知产xiao_xin3 小时前
专利立法及修改
经验分享·笔记·知识产权
qq_284274053 小时前
S7-1200 PLC硬件与启保停实训:CPU选型与DC/DC/DC、循环扫描五阶段、博途组态及电动机启停自锁梯形图(含考点)
笔记·学习·自动化·制造
问心无愧05134 小时前
[GXYCTF2019]Ping Ping Ping
android·笔记
ACP广源盛139246256734 小时前
项目评估记录:4K 远距离视频 Serdes 传输方案调研,GSV5800@ACP参数与工程问题记录
笔记·硬件架构·音视频·视频·国产芯片
深圳老胡5 小时前
C语言实现C++面向对象程序设计示例
笔记·stm32·单片机·代码规范
yuehuaxin015 小时前
LS8011C 快充协议芯片|SOT‑23‑6L 内置 431,PD3.2 SPR/PPS 适配器物料备选评估调试笔记
笔记·智能家居·适配器模式·智能硬件
巴巴媛6666 小时前
【Debug1】程序死机,while(1)循环,怎么办?
c语言·笔记·stm32·嵌入式硬件·bug