GPU PRO 5 - 2.5 TressFX: Advanced Real-Time Hair Rendering 笔记
本笔记仅为个人的理解如果有误欢迎指出。TressFX: Advanced Real-Time Hair RenderingTressFX 实现的高级头发实时渲染TressFX AMD 开发的实时毛发模拟渲染技术开源框架文本主要是从整个渲染管线讲述实现头发的一整套渲染方案主要分为以下几个部分几何拓展光照阴影抗锯齿透明度处理几何拓展头发渲染的初始数据是线段在几何阶段时会将线段拓展成一个与视平面齐平的平面也就是常见的公告板投影后的毛发半径还会增加一些半径保证不会因为投影过小导致在光栅化阶段消失。光照计算文章中头发的光照分为两部分漫反射和镜面反射漫反射分量项t为切线方向l为光照方向镜面反射项但头发这种东西在现实上特别的地方在于他存在两层高光因此文章上面的光照模型上做出了改进将高光分为了主高光和次高光主高光向着发梢偏移多受到光源颜色影响。次高光向着发根偏移多受到毛发颜色的影响。毛发阴影毛发材质的自阴影渲染一直都是问题文章这边提出了一种近似算法。主要参数是depth range这个表示当先着色的毛发片元深度与对应位置的阴影贴图深度插值。可以说相当廉价的计算方法了基本上只要采样一次阴影贴图就可以估算阴影了。抗锯齿这里的抗锯齿用的是基于覆盖率的毛发抗锯齿计算当前像素被毛发覆盖的比例来决定当前像素毛发的Alpha 值以此减少边缘的锯齿现象。计算覆盖率有两种第一种是Ray-Cone相交测试通过计算射线圆锥与毛发纤维的相交区域确定覆盖比例。第二种是在图像空间抗锯齿方法是GPAAGeometric 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