4.5 光照模型(Lighting/Illumination Model)

4.5.1 Flat Shading(平面着色)

根据表面法向量计算光照,并应用到整个面片上。速度最快,效果最差,容易暴露物体的多边形本质(下图)。

4.5.2 Gouraud Shading(高洛德着色)

根据顶点法向量计算光照,再用插值计算出整个面的光照。效果比Flat shading稍好,但高光部分有瑕疵,过渡不够自然(下图)。

可结合Phong Shading做优化,高光弱时用Gouraud Shading,高光强时用Phong Shading,可平衡效果和效率。

4.5.3 Lambert Shading(兰伯特着色)

物体表面向各个方向等强度的反射光,这种等同地向各个方向散射的现象称为光的漫反射。Lambert定律:反射光线的强度与表面法线和光源方向之间的夹角成正比(下图)。它是一种理想的漫反射模型,但着色效果比高洛德要平滑。

计算公式:

cdiffuse=(clight⋅mdiffuse)max(0,n⃗ ⋅l⃗ )cdiffuse=(clight⋅mdiffuse)max(0,n→⋅l→)

4.5.4 Half Lambert Shading(半兰伯特着色)

Lambert着色有个缺陷,就是背面受光少,经常处理死黑状态,与受光面反差太大(下图左)。于是其中的一种改进方案诞生了,它就是Half Lambert Shading,它渲染的画面明暗关系没那么强烈,过渡更加自然(下图右)。

计算公式:

cdiffuse=(clight⋅mdiffuse)(a(n⃗ ⋅l⃗ +b)cdiffuse=(clight⋅mdiffuse)(a(n→⋅l→+b)

其中aa和bb是常数,通常都取0.50.5,而且a+b=1.0a+b=1.0。

4.5.5 Phong Shading(冯氏着色)

Phong着色将光照分成自发光(Emissive)/环境光(Ambient)/漫反射(Diffuse)/高光(Specular)四个部分,每个部分独自计算光照贡献量。是当前广泛应用的一种光照模型。

其中高光计算公式:

cspecular=(clight⋅mspecular)max(0,n⃗ ⋅r⃗ )mglosscspecular=(clight⋅mspecular)max(0,n→⋅r→)mgloss

Phong着色效果如下:

4.5.6 Blinn-Phong Shading

由于Phong模型要用到反射矢量rr,而rr计算比较耗时(下),故有了Blinn Phong。

r⃗ =2(n⃗ ⋅l⃗ )n⃗ −l⃗ r→=2(n→⋅l→)n→−l→

Blinn Phong是Phong的一个改进,做法是摒弃反射矢量rr,引入l和vv的中间矢量hh,然后利用nn和hh的夹角进行计算。

  

高光计算公式:

cspecular =(clight ⋅mspecular )max(0,n⃗ ⋅h⃗ )mgloss cspecular =(clight ⋅mspecular )max(0,n→⋅h→)mgloss

它渲染出的高光范围更大(下图),真实感不如Phong着色,但胜在效率更高。

4.5.7 光照模型的选择

从性能上做比较:Flat > Gouraud > Lambert > Half Lambert > Blinn-Phong > Phong。但画质效果刚好相反,所以每个游戏需根据具体需求做选择。也可以采用分级策略,高中低画质分别采用不同的光照模型。

游戏开发51课 性能优化9相关推荐

  1. 游戏开发48课 性能优化6

    3.7.2 算法优化 思路是找出最耗CPU的算法或逻辑,优化之. 空间换时间.利用预排序/预处理/缓存/动态规划等等思路换取CPU的性能. 选取更快的算法.属于数据结构和算法的范畴,思路是将O(n2) ...

  2. 游戏开发57课 性能优化14

    5. 内存优化 内存优化目的是加快IO,防止卡主线程,防止频繁操作(创建/删除)内存,避免内存碎片化和占用过高. 5.1 缓存法 与CPU的缓存计算类似,思路是将需要重复创建的对象缓存起来,销毁时将它 ...

  3. 游戏开发43课 移动游戏性能优化1

    1. 前言 很多年前就想将这些年工作中积累的优化经验撰写成文章,但懒癌缠身,迟迟未动手,近期总算潜下心写成文章. 涉及到具体优化技巧时,博主会尽量阐述原理和依据,让读者知其然也知其所以然.要完全读懂这 ...

  4. 游戏开发43课 移动游戏性能优化2

    2. 资源优化 病从口入,资源好比是入口,它们若出现问题,会引发一连串性能问题.相反,资源若是优化得好,后面所有章节的性能都可受益.这也是把资源优化的章节提到最前的原因. 2.1 纹理优化 纹理优化的 ...

  5. 游戏开发31课 cocoscreator 性能优化

    因为 iOS小游戏和微信共用同一个进程,而微信在连续两次收到系统内存警告的时候会关闭小游戏并释放小游戏占用的内存.如果你的小游戏有外网用户反馈"闪退",或者你自己测试的时候频繁出现 ...

  6. 从GPU到3D渲染:游戏图形渲染技巧与性能优化

    :5月18日,Qualcomm在北京举行Qualcomm骁龙游戏与图形开发者研讨会.嘉宾们分享了GPU框架特性.移动游戏性能与功耗优化技巧,以及3D效果渲染技巧等话题. 5月18日,Qualcomm在 ...

  7. Android开发中的性能优化(摘录:陈彧堃演讲实录)

    大家好!我是陈彧堃,其实HTML5我之前也做过一些相关的研究,包括现在我们也在做一些调研.我个人一年前在G3上利用HTML5开发一些东西的时候,我发现原生的对HTML不支持,开始踏踏实实做Androi ...

  8. 游戏服务器架构与性能优化相关的一些问题

    问题一:游戏在线人数过多出现卡顿,是怎么造成的?服务器硬件还是网络或是其他原因? 答:原因有很多种,要根据不同情况进行分析: 1.手机或者电脑的性能不好,客户端自己卡顿,表现在fps很低: 2.网络本 ...

  9. JavaFX战旗类游戏开发 第二课 游戏地图绘制

    在上一节课中,我们对即将要完成的战旗Demo有了一个大概的了解,本节课当中,我们将会学习绘制游戏地图. 自从在JavaFX 2.2中增加了Canvas相关的功能,我们就可以使用Canvas来实现游戏绘 ...

最新文章

  1. 自然划分的3-4-5规则
  2. ArcSDE直连提示Server library could not be loaded解决方法
  3. UA MATH564 概率论 样本均值的偏度与峰度
  4. C#性能优化:延迟初始化LazyT
  5. BitMEX将于3月份分批推出DOT、YFI、UNI等六个币种的双币种永续合约
  6. 关于c:if没有c:else解决方案
  7. TypeScript完全解读(26课时)_9.TypeScript完全解读-TS中的类
  8. 全网首发:There is an incompatible JNA native library installed on this system/6.1.2/4.0.1
  9. UNITY游戏制作流程
  10. 超高频RFID通道门禁 仓储物流收发货系统应用
  11. 鞠今日截语2014.05.11火星合月
  12. Git Branching
  13. U盘文件数据恢复工具如何使用
  14. #树形dp#洛谷 2014 codevs 1378 jzoj 1486 选课
  15. Parallels Desktop启动后黑屏无法进入Windows系统
  16. NodeJS 开发多人实时对战游戏服务器 (一)
  17. 云中网络的隔离:GRE、VXLAN
  18. 制作一套适用于Oracle数据库的县及县以上行政区划数据
  19. 网站变灰,6行代码,通通变灰
  20. oracle数据库问题吗,Oracle数据库常见问题答疑一

热门文章

  1. python笔记(进程池,爬虫示类)
  2. guns技术文档 v5.1
  3. Python100个爬虫教程
  4. 如何快速计算出星期几
  5. 实习闲余——对Vue整理和总结
  6. lisp二次开发 微盘_基于AutoLISP的AutoCAD二次开发研究_郭秀娟.pdf
  7. WSL2使用Python访问Windows 10上的MongoDB报错:pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Er
  8. 服务端为什么需要心跳(保活)机制
  9. hibetnate 的inverse属性的作用
  10. 数据挖掘中的支持度 置信度 期望置信度 提升度