首页 > 其他分享 >UnityShader光照基础

UnityShader光照基础

时间:2023-01-12 20:55:49浏览次数:53  
标签:环境光 light 基础 UnityShader 光源 specular diffuse 光照

光照基础

环境光和自发光

环境光:

只需通过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

TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
  TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back

标签:环境光,light,基础,UnityShader,光源,specular,diffuse,光照
From: https://www.cnblogs.com/ApolloniaLKX/p/17047893.html

相关文章