US3S1L5-2——Phong光照模型的逐片元光照
US3S1L5-2——Phong光照模型的逐片元光照
知识回顾
Phong光照模型公式:
物体表面光照颜色=环境光颜色+兰伯特光照模型所得颜色+Phong式高光反射光照模型所得颜色物体表面光照颜色 = 环境光颜色 + 兰伯特光照模型所得颜色 + Phong式高光反射光照模型所得颜色
物体表面光照颜色=环境光颜色+兰伯特光照模型所得颜色+Phong式高光反射光照模型所得颜色
其中:
环境光颜色 = UNITY_LIGHTMODEL_AMBIENT(或者:unity_AmbientSky、unity_AmbientEquator、unity_AmbientGround)
漫反射光颜色 = 兰伯特光照模型 计算得到的颜色
高光反射光颜色 = Phong式高光反射光照模型 计算得到的颜色
利用Phong式光照模型实现光照效果(逐片元光照)
关键步骤:
计算兰伯特光照模型
123456789101112fixed4 _MainColor; //属性设置的漫反射颜色//计算兰伯特光照模型 颜色相关函数(逐片元)//参数:// wNormal: 世界空间下顶点的法线 ...
US3S1L5-1——Phong光照模型的逐顶点光照
US3S1L5-1——Phong光照模型的逐顶点光照
知识回顾
Phong光照模型公式:
物体表面光照颜色=环境光颜色+兰伯特光照模型所得颜色+Phong式高光反射光照模型所得颜色物体表面光照颜色 = 环境光颜色 + 兰伯特光照模型所得颜色 + Phong式高光反射光照模型所得颜色
物体表面光照颜色=环境光颜色+兰伯特光照模型所得颜色+Phong式高光反射光照模型所得颜色
其中:
环境光颜色 = UNITY_LIGHTMODEL_AMBIENT(或者:unity_AmbientSky、unity_AmbientEquator、unity_AmbientGround)
漫反射光颜色 = 兰伯特光照模型 计算得到的颜色
高光反射光颜色 = Phong式高光反射光照模型 计算得到的颜色
利用Phong式光照模型实现光照效果(逐顶点光照)
关键步骤:
计算兰伯特光照模型
12345678910111213fixed4 _MainColor; //属性设置的漫反射颜色//计算兰伯特光照模型 颜色相关函数(逐顶点)//参数:// objNormal: 顶点的法线信 ...
MIL1——模拟面试题
MIL1——模拟面试题
问题
C#
装箱和拆箱是什么?
值和引用类型在变量赋值时的区别是什么?
委托和事件在使用上的区别是什么?
有两个接口IA和IB,他们中有一个同名方法Test(),一个类同时继承这两个接口,应该如何处理他们的同名方法?
请说明C#中的List是如何扩容的
Unity
Unity中点乘和叉乘对于我们来说的作用是什么?
Unity中多线程执行下面哪些代码会报错?
A. Application.persistentDataPath
B. File.Exists(“文件名”)
C. transform.Translate
D. Object.Destroy(对象)
Application.streamingAssetsPath 和 Application.persistentDataPath 两个路径有何区别?对于我们的意义是什么?
请简述Unity中协程的原理
Unity底层如何处理C#代码?
答案
No.1模拟面试答案
C#
装箱和拆箱是指什么?
答案:
装箱——把栈中内容迁移到堆中去(值转引用)
拆箱——把堆中内容迁移到 ...
MI——模拟面试题整理
MI——模拟面试题整理
笔记代号MI——即Mock Interview的缩写
模拟面试题归纳(按照时间排序)
MIL1——模拟面试题
MIL2——模拟面试题
MIL3——模拟面试题
MIL4——模拟面试题
MIL5——模拟面试题
MIL6——模拟面试题
MIL7——模拟面试题
MIL8——模拟面试题
MIL9——模拟面试题
MIL10——模拟面试题
US3S1L5——Phong光照模型
US3S1L5——Phong光照模型
本章代码关键字
1234UNITY_LIGHTMODEL_AMBIENT //当光面板的环境光光源选择天空盒或者固定颜色时,通过该变量获取环境光unity_AmbientSky //当光面板的环境光光源选择渐变时,通过该变量获取天空环境光unity_AmbientEquator //当光面板的环境光光源选择渐变时,通过该变量获取赤道环境光unity_AmbientGround //当光面板的环境光光源选择渐变时,通过该变量获取地面环境光
Phong光照模型
Phong光照模型公式:
物体表面光照颜色=环境光颜色+兰伯特光照模型所得颜色+Phong式高光反射光照模型所得颜色物体表面光照颜色 = 环境光颜色 + 兰伯特光照模型所得颜色 + Phong式高光反射光照模型所得颜色
物体表面光照颜色=环境光颜色+兰伯特光照模型所得颜色+Phong式高光反射光照模型所得颜色
其中:
环境光颜色 = UNITY_LIGHTMODEL_AMBIENT(或者:unity_AmbientSky、un ...
US3S1L4-2——Phong式高光反射光照模型的逐片元光照
US3S1L4-2——Phong式高光反射光照模型的逐片元光照
知识回顾
公式:
高光反射光照颜色=光源的颜色×材质高光反射颜色×max(0, 标准化后观察方向向量→⋅标准化后的反射方向→)光泽度高光反射光照颜色 = 光源的颜色 \times 材质高光反射颜色 \times \max(0,\ \overrightarrow{标准化后观察方向向量} \cdot \overrightarrow{标准化后的反射方向})^{光泽度}
高光反射光照颜色=光源的颜色×材质高光反射颜色×max(0, 标准化后观察方向向量⋅标准化后的反射方向)光泽度
标准化后观察方向向量→⋅标准化后的反射方向→\overrightarrow{标准化后观察方向向量} \cdot \overrightarrow{标准化后的反射方向}标准化后观察方向向量⋅标准化后的反射方向 得到的结果就是 cosθ\cos\thetacosθ
光泽度是幂运算,相当于:(max(0,cosθ))n(max(0,\cos\theta))^n(max(0,cosθ))n
信息获取:
观察者的位置(摄像机的位置):_WorldSpa ...
US3S1L4-1——Phong式高光反射光照模型的逐顶点光照
US3S1L4-1——Phong式高光反射光照模型的逐顶点光照
知识回顾
公式:
高光反射光照颜色=光源的颜色×材质高光反射颜色×max(0, 标准化后观察方向向量→⋅标准化后的反射方向→)光泽度高光反射光照颜色 = 光源的颜色 \times 材质高光反射颜色 \times \max(0,\ \overrightarrow{标准化后观察方向向量} \cdot \overrightarrow{标准化后的反射方向})^{光泽度}
高光反射光照颜色=光源的颜色×材质高光反射颜色×max(0, 标准化后观察方向向量⋅标准化后的反射方向)光泽度
标准化后观察方向向量→⋅标准化后的反射方向→\overrightarrow{标准化后观察方向向量} \cdot \overrightarrow{标准化后的反射方向}标准化后观察方向向量⋅标准化后的反射方向 得到的结果就是 cosθ\cos\thetacosθ
光泽度是幂运算,相当于:(max(0,cosθ))n(max(0,\cos\theta))^n(max(0,cosθ))n
信息获取:
观察者的位置(摄像机的位置):_WorldSpa ...
US3S1L4——Phong式高光反射光照模型
US3S1L4——Phong式高光反射光照模型
本章代码关键字
123_WorldSpaceCameraPos //观察者的位置(摄像机的位置)UNITY_MATRIX_M //从模型空间转换到世界空间的矩阵,在这里用于将模型顶点从模型空间转换到世界空间参与计算unity_ObjectToWorld //同样是从模型空间转换到世界空间的矩阵,与上面的等价的,在这里用于将模型顶点从模型空间转换到世界空间参与计算
Phong式高光反射光照模型
来历:高光反射光照模型没有单一的发明者,因为有多种计算的方式
和半兰伯特光照模型一样,是经过很多从业者的研究和发展而演化出来的
其中比较关键的几位贡献者为
Phong光照模型的提出者:裴祥风(Bui-Tuong Phong,越南裔美国计算机学家)
Blinn-Phone光照模型的提出者:吉姆·布林(Jim Blinn,美国计算机科学家)
原理:Phong式高光反射光照模型的理论是:
基于光的反射行为和观察者的位置决定高光反射的表现效果
认为高光反射的颜色和光源的反射光线以及观察者位置方向向量夹角的 c ...
US3S1L3-2——半兰伯特光照模型的逐片元光照
US3S1L3-2——半兰伯特光照模型的逐片元光照
利用半兰伯特光照模型实现光照效果(逐片元光照)
半兰伯特光照模型的逐片元实现,和兰伯特一模一样,唯一的区别就是公式:
Color漫反射光照=Color光源×Color材质的漫反射×((标准化后物体表面法线向量→⋅标准化后光源方向向量→)×0.5+0.5)Color_{漫反射光照} = Color_{光源} \times Color_{材质的漫反射} \times ((\overrightarrow{标准化后物体表面法线向量} \cdot \overrightarrow{标准化后光源方向向量}) \times 0.5 + 0.5)
Color漫反射光照=Color光源×Color材质的漫反射×((标准化后物体表面法线向量⋅标准化后光源方向向量)×0.5+0.5)
具体Shader实现:
要注意,尽管半兰伯特光照模型改进了背光面的显示效果,我们为了光照效果更加自然还是会使用 UNITY_LIGHTMODEL_AMBIENT
12345678910111213141516171819202122232425262728293 ...
US3S1L3-1——半兰伯特光照模型的逐顶点光照
US3S1L3-1——半兰伯特光照模型的逐顶点光照
利用半兰伯特光照模型实现光照效果(逐顶点光照)
半兰伯特光照模型的逐顶点实现,和兰伯特一模一样,唯一的区别就是公式:
Color漫反射光照=Color光源×Color材质的漫反射×((标准化后物体表面法线向量→⋅标准化后光源方向向量→)×0.5+0.5)Color_{漫反射光照} = Color_{光源} \times Color_{材质的漫反射} \times ((\overrightarrow{标准化后物体表面法线向量} \cdot \overrightarrow{标准化后光源方向向量}) \times 0.5 + 0.5)
Color漫反射光照=Color光源×Color材质的漫反射×((标准化后物体表面法线向量⋅标准化后光源方向向量)×0.5+0.5)
具体Shader实现:
要注意,尽管半兰伯特光照模型改进了背光面的显示效果,我们为了光照效果更加自然还是会使用 UNITY_LIGHTMODEL_AMBIENT
不使用 UNITY_LIGHTMODEL_AMBIENT (左)和使用 UNITY_LIGHTMOD ...