我有一个 3D 模型在 3Dmax 中看起来像这样:
我开发了一个程序(C# XNA/OpenGL)来读取 3D 模型并应用材质,所以它看起来像这样:
然而,模型是由 facegen 创建的,头发在 facegen 中看起来像这样:
所以我的问题是我应该使用哪种着色器来渲染头发,使它看起来像 Facegen 中的那个。
欢迎评论、关键字、点击、示例、教程或代码。
我的平台
Windows 7 64 位 C# 或 C++ XNA 或 Directx 或 OPENGL
您可以在此处的 nVidia 示例中找到一个名为 Nalu 的 nVidia 头发演示:https ://developer.nvidia.com/nvidia-graphics-sdk-11-direct3d 。使用的着色器称为 Marschner 着色器,您可以在 Google 上搜索有关它的更多信息。当然,还有许多其他的头发渲染技术和许多其他着色器。
还有一个专门介绍头发渲染资源的博客http://hairrendering.wordpress.com/提供了很好的信息。
一种非常好的技术是使用粒子作为头发,但不是渲染点而是渲染线条。
一种方法是一次性渲染整个粒子的生命周期,而不是在特定时间渲染特定点。与贝塞尔曲线一起使用,您可以获得一些非常逼真的头发。你甚至可以走得更远,模拟吹头发的风等,只需使用顶点场或类似的东西来操纵粒子的路径
乍一看,facegen 看起来只是根据纹理使用 alpha 混合放置头发多边形,而 UNLIT 则很难发现透明的排序问题。头发方法的选择取决于许多考虑因素,包括渲染器的类型(前向/延迟)、所需的性能、是否愿意对头发多边形(或块)进行排序......
Marschner 方法非常好,但也很复杂。如果您只想快速简单,请尝试我所描述的 alphablending。