文章目录

  • 前言
  • 四、高光项(Specular Term)
    • 高光是什么
    • Blinn-Phong高光项
  • 五、环境光照项(Ambient Term)
    • 环境光照是什么
  • 六、Blinn-Phong反射模型的总结
    • Blinn-Phong反射模型
  • 七、着色频率(Shading Frequencies)
    • 一个小问题
    • 平面着色(Flat Shading)
    • 高洛德着色(Gouraud Shading)
    • Phong Shading
    • 不同着色频率的比较
    • 每个顶点的法线如何定义
  • 八、图形管线(Graphics Pipeline)
    • 图形管线是什么
    • Shader Programs
  • 九、现代图形学的发展科普
    • 高复杂的实时三维场景渲染
    • 图形渲染管线的硬件实现:GPUs
  • 十、纹理映射(Texture Mapping)
    • 任何一个三维物体的表面都是二维的
    • 纹理(Texture)
    • 纹理映射(Texture Mapping)是什么
    • 纹理坐标
  • 课程的最后

前言

继续讲完Blinn-Phong着色模型,再开始讲着色频率(Shading frequencies)和图形管线(Graphics pipeline)。


四、高光项(Specular Term)

高光是什么


在比较光滑(或者绝对光滑)的物体表面上,反射接近镜面反射,当观察方向接近镜面反射方向时,我们可以观察到高光。

Blinn-Phong高光项


在Blinn-Phong中做了一个有关高光项的假设。简单来说,观察方向v接近镜面反射方向r就等同于半程向量h(half vector)接近于法向n。也就是说,是否看到高光我们只要判断半程向量和法向量是否接近就可以了。
上图的公式中,ks表示镜面反射系数(Specular coefficient)。
之所以要使用半程向量来计算,是因为半程向量相对于反射方向而言太好算了。

上图为公式中的指数p与反射波瓣(reflection lobe)的关系。这反映了高光的“大小”。

从上图可以看出,镜面反射系数越大,高光越强,p越大,高光越“小”。

五、环境光照项(Ambient Term)

环境光照是什么

环境光照,也就是从其他物体反射的光再反射到着色点上,也就是来自环境的光。这样的光照就是环境光照。
环境光照能让没有被光线直接照射的部分也能被看到(字面意思)。
可以想象环境光照要是按照实际情况来计算会非常复杂,所以在Blinn-Phong模型中我们假设任何一个点接收到的来自环境的光永远都是相同的。

根据公式,环境反射光等于环境光照系数乘以环境光强(也就是接收到的环境光)。
环境光不关心从哪里来,也不关心在哪个方向看,不管在哪个方向看,得到的结果应该是一样的。可以认为,环境光就是一个常数,就像给物体蒙一层颜色。
事实证明,以上假设非常不精确,如果要得到一个更精确的环境光,我们需要用到全局光照(Global illumination)技术。

六、Blinn-Phong反射模型的总结

Blinn-Phong反射模型


Blinn-Phong光照反射等于环境光加漫反射加高光

七、着色频率(Shading Frequencies)

一个小问题


这几个球的形状很明显是一样的,是什么导致了着色的不同。

平面着色(Flat Shading)


只给每一个三角形着色,每一个三角面只有一个法向量,效果看起来不咋地。

高洛德着色(Gouraud Shading)


为每一个顶点求法线(不知道怎么求),之后再为每一个顶点着色,然后根据每一个顶点的颜色通过插值计算三角形内部的颜色。

Phong Shading


通过插值得到每个三角形覆盖的每个像素的法向量,再在每个像素计算完整的着色模型。并不是Blinn-Phong反射模型。Phong Shading是一种着色频率。

不同着色频率的比较


可以看到,当顶点数量越来越大时,三种着色频率差别就不大了。也就是说,当面比较多的时候,我们就不再需要通过比较复杂的逐像素的频率来进行着色也能得到很好的效果。
但是话说回来,如果面实在是太多了,以至于超过了像素数,那逐面的shading对比逐像素的shading不仅区别不大,还需要更多的计算。

每个顶点的法线如何定义


最好的方法是能够通过基本几何体(underlying geometry)来得到顶点法线。比如说一个圆。

否则就只能通过三角面法线来推断出法向量。具体方法是,通过顶点相邻的三角面法线求(面积加权)平均(也就是某个相邻三角面面积越大对平均的贡献越大)来得到。当然,加权平均的结果更准确。

知道顶点法线之后,对顶点法线进行重心插值(Barycentric interpolation)可以得到三角形内部的平滑过渡的法线。求完以后别忘了将插值归一化(normalize)。

八、图形管线(Graphics Pipeline)

图形管线是什么


简单来说,从模型场景到最后显示在显示器上的一张图,中间经历的一系列过程叫做图形管线。

MVP(Model, View, Projection)变换发生在顶点处理阶段

采样发生在光栅化阶段。

深度缓存可见性测试发生在片段(Fragment)处理阶段,片段可以理解为光栅化之后的一个个像素。

考虑到不同着色频率,shading发生在顶点和片段处理阶段。比如Phong Shading就只能等到片段产生后才能进行,而Gouraud Shading有顶点就能进行。

纹理映射发生在顶点和片段阶段,纹理映射的具体内容之后会讲。

Shader Programs


Shader是处理顶点和像素着色的代码。Shader是通用的,每一个顶点或者像素都会执行Shader代码(也就是说不需要你写for循环)。如果写的是顶点的操作,这个Shader就叫做Vertex Shader(顶点着色器),如果是像素的操作,这个Shader就叫做Fragment/Pixel Shader(像素/片段着色器)。

上图为GLSL(OpenGL)的Fragment Shader代码示例。演示了一个最简单的Phong模型漫反射。
推荐网站ShaderToy,能够快速上手练习Shader代码。

九、现代图形学的发展科普

高复杂的实时三维场景渲染


比如游戏引擎。

图形渲染管线的硬件实现:GPUs


执行Shader代码的硬件。可以将GPU理解成一个高度并行的处理器。虽然GPU的每一个计算单元的计算能力不强,但是有很强的同时计算能力,特别适合用于图形计算。

十、纹理映射(Texture Mapping)

任何一个三维物体的表面都是二维的


想象一个地球仪,我们将他表面的地图“撕下来”,得到的就是一张图。也就是说,物体的表面可以和一张二维图片有对应关系。

纹理(Texture)

纹理就是一张二维图。

纹理映射(Texture Mapping)是什么


简单来说,把一张图“贴”到三维物体表面的过程就叫纹理映射。对于图形工程师来说,每个三角形映射到纹理的哪个部分是已经确定的。至于这张纹理该怎么画,那是艺术家的事情。

纹理坐标


每个三角形顶点都被赋予了纹理坐标(u, v)。为了方便处理,无论纹理的图片长宽比和分辨率如何,都认为u和v的范围是0到1。

纹理可以想贴瓷砖一样贴在各种物体上。并且能够被重复使用很多次。

对于设计良好的纹理,在重复使用时也能显得很正常,这种纹理被称为tiled。

课程的最后

需要注意一点,到目前为止,观察点和着色点的距离并不影响光衰减。而光源和着色点的距离有光衰减。这个以后会提到。


下节课预告,三角形内插:重心坐标(Interpolation Across Triangles : Barycentric Coordinates)。讲一讲三角形的内部与纹理该怎么对应。

着色Shading(2)(着色的继续、管线和纹理映射)(笔记)相关推荐

  1. 【计算机图形学入门】笔记8:Shading 2着色(着色频率、图形管线、纹理映射)

    08Shading 2着色(着色频率.图形管线.纹理映射) 前置知识 1.Specular Term 高光 2.Ambient Term 环境光照项 3.最终的成像公式 2.着色频率 1.Flat s ...

  2. 着色 Shading,漫反射,高光,环境光,Blinn-Phong 反射模型,Flat Shading,Gouraud Shading,图形管线 Graphics Pipeline渲染总结

    着色 Shading shading:The darkening or coloring of an illustration or diagram with parrel lines or a bl ...

  3. 着色Shading(1)(光照、着色)(笔记)

    文章目录 前言 一.可见性/遮挡(Visibility/Occlusion) 画家算法(Painter's Algorithm) 深度缓存(Z-Buffer) 深度缓存算法的实际操作 深度缓存算法的复 ...

  4. OpenGL toon shading卡通着色的实例

    OpenGL toon shading卡通着色 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <vmath.h> #include ...

  5. 04_05_06:设置线型风格(设置线型风格)、区域着色 (Shading Regions)、设置Spines

    4.设置线型风格 4.1.设置线型风格 5.区域着色 (Shading Regions) 6.设置Spines 4.设置线型风格 4.1.设置线型风格 可以使用绘图函数的linestyle或ls参数来 ...

  6. 计算机图形学四:着色-Shading

    文章目录 什么是shading? Blinn-phong 反射模型(reflection model) 漫反射(Diffuse reflection) 镜面/高光反射(Specular highlig ...

  7. Gouraud Shading(高洛德着色/高氏着色)

    这种着色的效果要好得多,也是在游戏中使用最广泛的一种着色方式.它可对3D模型各顶点的颜色进行平滑.融合处理,将每个多边形上的每个点赋以一组色调值,同时将多边形着上较为顺滑的渐变色,使其外观具有更强烈的 ...

  8. 计算机图形学(七)-深度缓存、着色shadding、着色模型、着色频率、渲染管线

    shadding-着色 1 深度缓存 1.1 从画家算法到深度缓存 1.2 深度缓存 1.2.1 深度缓存深度缓存的实现方法 1.2.2 深度缓存注意事项 2 着色shadding 2.1 着色模型 ...

  9. webgl 着色器_“着色器”是什么意思? 如何使用HTML5和WebGL创建它们

    webgl 着色器 本文是Microsoft的Web开发技术系列的一部分. 感谢您支持使SitePoint成为可能的合作伙伴. 您可能已经注意到,去年我们第一次谈论了babylon.js ,最近我们发 ...

最新文章

  1. 加州理工《数据学习:机器学习课程》视频及ppt分享(附下载)
  2. 自然语言对话:未来发展的机遇在哪里?
  3. ServletConfig接口
  4. 用js添加网页标题时,在QQ里无效,标题栏空白
  5. 快速入门ECS快照功能,助力大数据容灾保护
  6. MIT深度学习课堂开课啦,自动驾驶圈大牛排队来讲课丨资源
  7. 数据预处理第4讲:缺失值填补
  8. ThickBox在ASP.NET中的应用
  9. arccatalog点要素显示不完_初中生到底要不要住校?班主任:不建议,看完这3点你就明白了...
  10. 图邻接表拓扑排序算法c语言完整,在用邻接表表示图时,拓扑排序算法时间复杂度为()...
  11. Android 时间选择器 PickerView,的详细使用
  12. java string替换最后一个字符_sed替换每行最后一个字符
  13. 第二届中国(泰州)国际装备高层次人才创新创业大赛
  14. Elasticsearch 最佳运维实践总结
  15. 20175208 实验二 《Java面向对象程序设计》实验报告
  16. mui 本地化后调试_MUI和LIP-如何用您的语言用中文编写和本地化Windows
  17. python的常用数组工具
  18. 最简单的商家管理系统(小白)
  19. 南京python周末培训
  20. 爬虫概念与编程学习之如何爬取网页源代码(一)

热门文章

  1. IDEA中enter键无法换行
  2. 工业大数据分析建模和算法
  3. 工业机器人的应用有哪些
  4. Oracle - CentOS7.4 静默安装Oracle11g
  5. Java中对象的六种可触及状态
  6. java强引用不会被回收_强引用(Strong Reference)-不回收
  7. iphone已停用连接itunes怎么解锁教程
  8. win10如何修改dns服务器地址,win10如何修改dns服务器地址
  9. win10 dos命令行修改DNS
  10. 如何把pacs系统移到新服务器,PACS系统数据管理迁移解决方案(8页)-原创力文档...