码迷,mamicode.com
首页 > 编程语言 > 详细

UnityShader镜面反射计算与反射光向量推导

时间:2020-03-20 12:31:33      阅读:353      评论:0      收藏:0      [点我收藏+]

标签:src   步骤   oss   size   模拟   了解   pac   方式   unity   

面试考察频率:??

注:本文章主要讲解计算方法及推导,原理暂不讲解

什么是镜面反射?

? 镜面反射(Specular)又叫高光反射,主要可以来模拟非常光滑的平面受到光线照射所产生的反射效果,使得物体看起来更光滑有光泽。

如何实现镜面反射?

? 镜面反射主要有两种实现方式:
? Phong模型:
技术图片
? 该模型中关键步骤就是计算反射光线。需要提前知道的信息有:
? Ks(物体材质的高光反射颜色即材质rgb分量),lightColor(光的颜色即光的rgb分量),shininess(为反光度系数,越大亮点越小)。
? 需要计算:R反射光向量V观察点向量)这两个为计算重点。
? 反射光直接使用shader中的reflect函数就可以计算,在这里我们手动进行推导一下:
技术图片
? ? 在计算之前,我们只知道入射光向量(AO)和法向量(OP‘),我们需要求的OB。推导如下:
技术图片
? 现在我们知道了想要求出OB,还必须要求出来OP,但我们现在只知道OP’,OP怎么求呢?推导如下:
技术图片
? 现在我们求出了OB=AO+2OP。OP=-(AO·N)N。最后联立两式可得:OP=AO-(AO·N)*N。这里的OP就是反射光向量R。切记在计算中对法向量单位化是很重要的一步。
? 计算观察点向量就简单多了,只需要知道相机的位置就可以,Shader中内置变量_WorldSpaceCameraPos 便捷的提供了相机位置。_WorldSpaceCameraPos-目标点就求出了观察点向量V。最后所有的值都求了出来,就可以计算了。

? Blinn-Phong模型:
技术图片
该模型是对Phong的改进,为了解决反射光计算的耗时问题。
? Ks(物体材质的高光反射颜色即材质rgb分量),lightColor(光的颜色即光的rgb分量),shininess(为反光度系数,越大亮点越小)。
? 需要计算:H入射光向量与观察点向量的中间向量)。计算很简单:normalize(入射光向量+观察点向量),入射光向量已知,观察点向量还和上面的计算方法一样。

两模型的对比

技术图片
可见Blinn-Phong模型的计算要简单快速很多。

UnityShader镜面反射计算与反射光向量推导

标签:src   步骤   oss   size   模拟   了解   pac   方式   unity   

原文地址:https://www.cnblogs.com/w199753/p/12530859.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!