基本的光照模型 D04
程序员文章站
2024-03-15 08:43:11
...
4.1 光源对物体照明的分类(直接/间接)
- 间接照明
光在物体间传播后,最终又对物体形成照明(光2次反弹?)。VRay通过光线跟踪较真实的计算了光源的直接照明和间接照明。 - 直接照明 -----(实时渲染的计算重点)
不考虑光线在物体间的传播,也不考虑光线在物体内部的传播,则光线对物体对物体直接照明
照明的结果是分为漫反射(和视角无关?)和镜面反射(强烈高光和视角有关?)
4.2 光照模型(照明的计算方式)
-
漫反射和Lambert
----粗糙物体表面的一个点,其亮度取决于(LightDir)入射光线 和 (Normal)该点的法线方向
L :入射光线, (Normalized)
N: 点的法线(Normalized)
C :光线强度/颜色
Lum : 物体此点表面的亮度
Lum =C * max(0,cos<N ,L >)
Cg标准函数库用 dot(N,L) cos为为负值,背光 ,max(0,value)函数的作用是对结果进行调整。
Unity的Surface Shader ,有两个内置的Light Model 函数 Lighting.cginc
- LightLambert()对应于 ForWard渲染路径简单照明方式
inline fixed4 LightingLambert( SurfaceOutPut s , fixed3 lightDir,fixed atten)
{
fixed diff = max(0.0,dot(s.Normal,lightDir));// 漫反射
fixe4 c
// 计算了物体表面的纹理颜色,光源颜色以及光源强度
c.rgb = S.Albedo * _LightColor0.rgb * (diff * atten * 2);
c,a = s.Alpha ;
return c ;
}
- LightLambert_PrePass()**对应于Deferred渲染路径下的简单照明方式
-
镜面高光和Phong(视角有关)
I 入射光线 (Normalized)
N 法线 (Normalized)
R 光反射方向
V 视角方向
R = Reflect( I , N) // 此函数仅对三元向量有效
Spec = pow(max(0.0,dot<R,V>),gloss) // pow(x,y)作用迅速衰减
Lambert + Phong 就可以渲染出一个高光的物体。
- 半角向量和BlinnPhong
----- 半角向量 H:入射光线 I 和视角方向 V 的平均值
half3 H = normalized(lightDir + ViewDir) //相加( 除以2 ?) 归一化 !
Unity的Surface Shader, Unity在Lighting.cginc 中提供了两个Blinnphong的实现, 分别对应于ForWard和Deferred渲染路径。 对应于ForWard渲染路径的是
inline fixed4 LightingBlinPhong(SurfaceOutput s, fixed3 lightDir, half3 ViewDir, fixed atten)
{
half3 h = normalize(lightDir + ViewDir); // 半角向量 归一化
fixed diff = max(0.0,dot(s.Normal,lightDir)); // Lambert
fixed ndoth = max(0.0,dot(s.Normal,h));// BilnnPhong
float spec = pow(ndoth,s.Specular * 128.0) * s.Gloss ;
fixed4 c ;
c.rgb = (s.Alebdo * _LightColor0.rgb * diff +_LightColor.rbg * _SpecColor.rgb * spec) * (atten * 2);
c.a = s.Alpha + _LightColor.a * _SpecColor.a * spec * atten;
return c;
}
上一篇: C# string 判断字符串是否是中文
下一篇: [LeetCode] 365、水壶问题
推荐阅读
-
Shader基本光照模型——菲涅尔模型
-
基本的光照模型 D04
-
EntityFramework数据持久化之EF的基本使用(创建数据模型)
-
OpenLDAP、什么是目录服务、OpenLDAP简介、LDAP的基本模型、目录树概念、(DC、UID、OU、CN、SN、DN、RDN、c、o)、LDAP的使用
-
EntityFramework数据持久化之EF的基本使用(创建数据模型)
-
怎样用 TensorFlow.js 创建基本的 AI 模型?
-
怎样用 TensorFlow.js 创建基本的 AI 模型?
-
基本光照模型
-
1. 写一个自定义异常类来处理上传过程以及各种错误 2. (选做) 写一个与指定数据表绑定的类, 实现基本的模型功能,例如查询, 新增, 更新,删除等操作