ATI在《Practical Real-Time Hair Rendering and Shading》中讲述了一种实时绘制头发的技术,曾经ATIX800时代的一个实时渲染的Demo:DoubleCross就是用了该技术渲染女主角Ruby的头发。
论文主要包括三个方面:头发建模、局部光照模型、头发半透明渲染。
头发建模
尽量避免面片交叉建模,如下图:
关于排序问题
头发绘制的排序是一个很讨厌的问题,三角形级别的排序很多时候是无能为力的。如果使用镂空又不得不忍受锯齿的边缘。
文中的思路很清晰:利用深度缓冲来做一个Trick,它的方法基于一个假设,即假设头发中透明的部分远小于不透明部分。先用AlphaTest绘制,将深度写进去,然后再用两个Pass的透明绘制。
文中的绘制顺序是:Pass 1:(Pre-Z)绘制头发的非透明部分。使用简单的shader,打开AlphaTest绘制头发,关闭背面剔除,关闭颜色写入,ps中仅仅返回alpha值。