我应该使用什么样的着色器来渲染头发

时间:2012-12-03 02:05:57

标签: opengl graphics 3d xna shader

我在3Dmax中有一个3D模型:

enter image description here

我开发了一个程序(C#XNA / OpenGL)来读取3D模型并应用材质,所以它看起来像这样:

enter image description here

然而,模型是由facegen创建的,facegen中的头发看起来像这样:

enter image description here

所以我的问题是我应该使用什么样的着色器渲染头发,使它看起来像Facegen中的那个。

欢迎评论,关键字,点击,示例,教程或代码。

我的平台

Windows 7 64位 C#OR C ++ XNA或Directx OR OPENGL

3 个答案:

答案 0 :(得分:3)

你可以在这里的nVidia样本中找到一个名为Nalu的nVidia头发演示:https://developer.nvidia.com/nvidia-graphics-sdk-11-direct3d。使用的着色器称为Marschner着色器,您可以更多地了解它。当然,还有许多其他技术可用于头发渲染和许多其他着色器。

此外,还有一个专门针对头发渲染资源http://hairrendering.wordpress.com/的博客,其中包含良好的信息。

答案 1 :(得分:1)

一种非常好的技术是将粒子用于头发,但不是渲染点而是渲染线条。

实现此目的的一种方法是一次性渲染整个粒子的生命周期,而不是在特定时间渲染特定点。与bezier曲线一起使用,你可以得到一些非常逼真的头发。您甚至可以进一步模拟风吹头发等,只需使用顶点字段或类似的东西操纵粒子的路径

答案 2 :(得分:1)

乍一看,facegen看起来只是根据纹理使用alpha混合来铺设头发多边形,而UNLIT则难以发现透明的分类问题。头发方法的选择取决于许多因素,包括渲染器的类型(前进/延迟),所需的性能,是否愿意对头发多边形(或块)进行排序......

Marschner方法非常好但很复杂。如果你想要快速简单的话,请尝试使用alphablending。