各向异性着色

        各向异性着色是一种逐像素颜色计算方案。在各向异性着色方案中,镜面光在表面各个方向上并非以均等方式反射。其原因在于:材质在各个方向上包含不同的属性,且毛皮、头发以及拉丝金属均具有此类特征。

  传统的镜面反射数学公式,我们一般是采用:

            S = Ls * Ms *(R * E)SH

      而各向异性着色方案,我们采用以下数学模型:

            dl = T * L

            de = T * E

            S = Ls * Ms * (dl * de + (√(1-dl * dl) * √(1 - de * de))SH)

      其中,T表示切向量(如果不明白切向量是什么,自己去补充该部分的数学知识,在这里不做赘述),L表示光线向量,E表示眼睛向量,SH表示光泽度。

  下面我将展示一段片元着色器,并假设切向值、光源、眼睛向量以及vColor值均在对应的顶点着色器中计算完毕。另外,各向异性着色参数uKa、uKd、以及uKs假设已传递至当前着色器中,且颜色值vColor用与ADS光照模型中的全部3个变量之上。

  vec3 ambient = Vcolor.rgb;

  float dl = dot(That, Lhat);

  vec3 diffuse = sqrt(1. - dl * dl) * vColor.rgb;

  float de = (That , Ehat);

  vec3 spec = uLightColor * pow(dl * de + sqrt(1. - dl * dl) * sqrt(1. - de * de), uShininess);

  fFragColor = vec4(uka * ambient + ukd * diffuse + uks * spec , 1.);

上一篇:国内外手机号码正则表达式


下一篇:8.20