头发的生成以及渲染方案

来源:互联网 发布:网络架构师 真题 编辑:程序博客网 时间:2024/06/02 14:16

搁笔良久,今起复耕

本文主要涉及头发的生长方案,光照模型,阴影效果,透明效果以及多次采样抗锯齿。

一. 头发的生长:

       定义根节点以及头发长度参数

       头发从头皮生长,根据mesh的UV展开图,编辑头部头发生长区域以及利用颜色控制头发的长度。 鉴于头发后期仿真模拟的需要,此处使用tessellation shader,可以生长更加细密的头发。

       对头部头发生长区域mesh着色(头发颜色),消除头发和头皮颜色误差

       vec3 color = mix(texture2D(texcolor), hairColor, texture2D(glowmap).r); 其中 glowmap 即上面编辑得到头皮的颜色部分, texcolor 为头部mesh 本来的颜色。

       控制后续头发走向,形成发型

       得到头发的生长根节点之后,需要控制后面节点的生长。利用向量,控制每根头发的点的走向。 

     

          Image result for hair rendering picture

二、 头发的光照模型

        Kajiaya 光照模型: 主要特点即 tangent 方向为沿头发方向; 使用该模型,得到的头发渲染效果,会有较逼真的光圈效果

            Image result for hair rendering picture

       Kajiya & Kay. “Rendering furwith Three Dimensional Textures.” Computer Graphics (Proceedings of ACMSIGGRAPH 89), 1989.


             diffuse = sqrt(1. - abs(dot(tangent_N.xyz, light_N.xyz)));       specular = pow(sqrt(1. - abs(dot(tangent_N, h_N))), shinness); 其中h_N = normalize(eye + light)

三、自阴影效果

       DOP shadow

          

   

       Yuskel & Keyser. “DeepOpacity Maps.” Proceedings of EUROGRAPHICS, 2008.  

   简述下“Deep Opacity Maps” 的方法。根据光源距离深度划分为几个深度层(即Deep opacity map), 计算occlusion并求和,然后 transmittance=  exp(-occlusion * shadowIntensity);头发的系数 hairColor * Transmittance 得到不同头发的阴影效果。

四、Transparency 效果

    

Everitt, Cass. “InteractiveOrder-Independent Transparency.” Technical Report, NVIDIA Corporation. 2001.


    可以查阅 深度剥离 的透明方法;

五、superSampling- 4XSSAA

        关于SSAA, 定义2*width 以及 2* heighth 的render texture, 然后 renderFullScreen


Reference:  

        文中已经配有;




原创粉丝点击