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.1GPU PRO 4 - 4.1 中都有相关涉及。

记录毛发的深度:

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

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

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

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

3,选择性写入精确深度

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

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

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

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

3,选择性写入精确深度

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

参考资料:

GPU Pro5 光照篇

Real-Time Hybrid Hair Rendering

相关推荐
蒸蒸yyyyzwd44 分钟前
cpp选手秋招准备 学习笔记day7 webserver
笔记·学习
Chen—LSN3 小时前
C语言——数据在内存中的存储
c语言·开发语言·经验分享·笔记
bitbrowser13 小时前
giffgaff突然停用?先分清闲置停用和长期境外断开
笔记
九硕智慧建筑一体化厂家14 小时前
数字化管控落地,直流照明构筑安全照明体系
运维·人工智能·笔记·安全·智慧城市
AI云海14 小时前
天幕红尘笔记
笔记
青山是哪个青山16 小时前
LangChain 学习笔记(三):LangSmith 调试与监控
笔记·学习·langchain
蒸蒸yyyyzwd18 小时前
cpp选手备战后端学习笔记day6 秋招笔试题
笔记·学习
DeviceHub20 小时前
硬件工程师选型笔记:ALPS SKPMAPE010 与 Tonevee TS-3025 贴片轻触开关 PIN TO PIN 评估指南
笔记
nnerddboy21 小时前
LoRa自学笔记01:原理与学习路线
笔记·学习
疯狂打码的少年1 天前
【数据结构】二叉树的性质(五大性质+计算)
数据结构·笔记·算法