UnityShader光照基础

光照基础

环境光和自发光

环境光:

只需通过Unity的内置变量UNITY_LIGHTMODEL_AMBIENT就可以得到环境光的颜色和强度。

自发光:

把材质的自发光颜色添加到输出颜色上即可。

漫反射光照模型

计算公式:

C(diffuse) = ( C(light) * M(diffuse) ) max(0,n * I)

 

半兰伯特模型

C(diffuse) = ( C(light) * M(diffuse) ) * (n * I)*0.5 + 0.5

高光反射光照模型

计算公式:

C(specular)=( C(light)*M(specular) ) max(0,v * r)^m(gloss)

反射方向r可以由表面法线n和光源方向i计算而得

r=i - 2(n * i)n

可使用函数 reflect(i,n)计算


Blinn-Phong模型

使用新矢量h

h=normalize(v + I)

计算公式

C(specular) = ( C(light) * M(specular) )max(0,n * h)^m(gloss)

 

Unity内置的函数

在计算光照模型的时候,往往需要计算光源方向、视角方向

normalize(_WorldSpaceLightPos.xyz)得到得光源方向只适用于平行光。

normalize(_WorldSpaceCameraPos.xyz-i.worldPos.xyz)得到视角方向。

如果需要处理更复杂的光照类型,计算的光源方向的方法就是错误的。

需要在代码中先判断光源类型。

 

UnityCG.cginc中的常见函数

WorldSpaceViewDir

UnityWorldSpaceViewDir

ObjSpaceViewDir

WorldSpaceLightDir

UnityWorldSpaceLightDir

ObjSpaceLightDir

UnityObjectToWorldNormal

UnityObjectToWorldDir

UnityWorldToObjectDir

posted @   Apollonia  阅读(111)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示