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

相关推荐
血小板要健康1 小时前
链表 阶段算法总结
java·数据结构·笔记·算法·leetcode·链表
浔溺1 小时前
al+大数据每日学习笔记31
大数据·笔记·学习
摇滚侠1 小时前
《SpringBoot 3:入门与应用实战》第 9 章 跨域问题 阅读笔记 27
spring boot·笔记·okhttp
山岚的运维笔记1 小时前
mysql 专业笔记 -- 第 8 章:使用变量
运维·数据库·笔记·后端·学习·mysql·dba
噜~噜~噜~2 小时前
操作系统笔记-2.3.6 管程
笔记·操作系统
aprilaaaaa5 小时前
(TC397 学习笔记)二、ICU和TIM的时钟计算
笔记·学习·fpga开发
hongmai6668885 小时前
ESP32-WROVER-IE-N4R8:外接天线+8MB内存,专治信号焦虑
笔记·单片机·嵌入式硬件·microsoft·risc-v
Persistent的粽子!5 小时前
C++:类与对象(一)
开发语言·c++·经验分享·笔记
xian_wwq6 小时前
【学习笔记】-深度认知系列-第8讲主流AI模型横向评测——GPT、Claude、Gemini、盘古、文心、通义
人工智能·笔记·学习
晨欣7 小时前
NVIDIA GPU 架构演进学习笔记(GPT-5.6 Terra 生成)
笔记·学习·gpu·显卡·nvidia·英伟达