GAMES101-现代计算机图形学入门-闫令琪 - lecture8 着色2(Shading 2) - 课后笔记

着色2(Shading 2)

Blinn - Phong 光照模型包括 : 漫反射、镜面反射、环境光。上一节讲了漫反射,下面讲一下镜面反射和环境光。

镜面反射(Specular reflection)

镜面反射:当物体的表面很光滑的时候,在一定的角度范围内观察这个平滑的表面表面时,能够看到一个高光的效果。

如在用光源照射金属时,在一定的角度内可以看到一个有一定大小的光点,但你偏离一定的角度之后,就不能再看到这个高光效果。

在漫反射的部分已经讲过,漫反射的着色与观察方向无关,而镜面反射不同,镜面反射的效果是与观察方向有关的。

当观察方向和光的反射方向越近的时候,观察到的镜面反射效果越强。

在这里插入图片描述

如何衡量两个上图中反射光和观察方向是否足够近?可以用反射光的方向向量和观察方向的方向向量做点乘,得到其夹角的余弦值,点乘的结果越大,则反射光和观察方向就越近。

上面这是冯氏光照模型的做法,Blinn - Phong光照模型是对冯氏模型的一个改进,下面是Blinn - Phong的做法:

在这里插入图片描述

这里并不是计算反射光和观察方向的远近,而是计算半程向量h和该平面的法向量n的远近。因为反射光和观察方向越近,半程向量和法向量也就越近,且计算反射光的计算量比较大,而半程向量h只需要将v和l相加,再标准化即可得到,计算简单。

在这里插入图片描述

最终计算某一点的高光强度的计算方法如下:
在这里插入图片描述

ks:反光系数,不同的材质对光的反射程度不同,如金属和木头对光的反射效果就不同。

指数p:先看下图:
在这里插入图片描述

可以看到指数越大,cos不为0的范围就越小。应该这样理解,如果p为1,那么在0 - 90°的这样一个范围内都可以看到一个高光效果,但现实生活中观察的偏离角度较大的时候就不能看到高光了,而随着p的增大,能看到高光的角度就会缩小,比如p = 1时,在45°就能看到高光效果,而p = 64时,在45°就看不到高光效果了。也就是说p越小,对高光的容忍度越高,但是我们平时看到的高光都是集中在一点并且是在一个比较小的范围内,所以用较高的指数p将高光限制在一个很小的范围内。

在这里插入图片描述

下图是ks和p对高光效果的影响,同一行使用的材质相同,同一列使用的p相同。

在这里插入图片描述

可以看到材质反光系数越大,高光越大;p越大,高光范围越小。

环境光(Ambient Term)

在上一节中层说到,环境光就是许多光线经过多次漫反射最终打在某一点上,因为环境光的太复杂,所以直接将环境光设置为一个常数,假设任何一点接受到的都是一个相同的环境光。

环境光不用考虑光的方向,与观察的方向也无关。

在这里插入图片描述

Blinn - Phong 模型的最终效果

在这里插入图片描述
将三种光照效果加在一起,就能够得到最终的光照效果,这看起来像是一个塑料。

着色频率(Shading Frequencies)

看一下下面的图中着色效果的差异:

在这里插入图片描述

左图能够明显的看到一个个四边形 ,中间的球的效果就平滑一些,右边的图更平滑一些。

这是因为三个球的着色频率不同,下面一一介绍三种不同的着色方式:

Flat Shading(左球)

在这里插入图片描述

这种着色方式可以明显的看出球表面上的三角形,感觉到球上面有许多棱角,在球上的着色并不平滑。

这种着色方法,是在一个三角形上取一个点进行着色,将这个点作为该的着色(一个面上着色一次),在三角形的内部并不会发生颜色的变化,所以可以明显的看到球上的每个三角形。

Gouraud shading(中球)

在这里插入图片描述

这个球明显比上面的球要平滑许多,不能够清楚的看见球上的三角形了。

这种着色方法,是在每个三角形的顶点上进行一次着色,然后三角形内部的颜色为三个顶点的插值,这样三角形内部的颜色就会有一个渐变的效果,也能够更加平滑。

Phong shading(右球)

在这里插入图片描述
在每一个像素上都可以求得一个独特的法向量,然后就可以在每一个像素上都进行一次着色,这样就可以得到一个相对比较好的结果。

这种方法是在每一个像素上都进行一次着色

着色频率的比较:面着色、点着色和像素着色

在这里插入图片描述

从上面的图可以看出,并不能简单的说哪种着色效果更好,着色的频率取决于面、点或者像素出现的频率,如果面的频率出现很高的话,那么用flat shading也是可以达到一个平滑的效果,如上图中最后一行。如果使用flat shading就能达到一个不错的效果,那么如果使用Phong shading的话就会增加额外的计算量,效率上就会降低 。

定义逐顶点的法线(Defining Per-Vertex Normal Vectors)

在这里插入图片描述

比如要找一个球上的顶点的法线,根据几何知识我们知道圆心和球面上点的连线就是该点的法线。但是我们并不总是使用球,如果我们使用其他的物体该怎么球法线呢?

因为每一个物体都是由许多三角形相连无缝贴合组成的,所以每一个顶点就会和许多不同的三角形有所关联,即一个顶点就是多个三角形的顶点,所以我们就认为这个顶点的法线就是周围相邻的几个面的法线的平均。

在这里插入图片描述
但是简单的平均没有意义,比如说一个三角形的面积很小,而另一个三角形的面积很大,那么这个大的三角形的法向量平均的份就应该多一些,相反,小三角形的法向量占平均的份就应该少一些。所以在平均时,将每个三角形的面积作为权值,对每个法向量进行加权平均,并且在求平均时要对向量进行标准化。

定义逐像素的法线(Defining Per-Pixel Normal Vectors)

比如说在三角形的内部我已经知道每一个顶点的法线是什么了,如何得到内部一个平滑过渡的法线?

在这里插入图片描述

给出顶点的法线,如何插值出中间的法线?这里就需要用到重心坐标,重心坐标等到后面再说。

图形(实时)渲染管线(Graphics(Real-time) Rendering Pipeline)

从场景到最后屏幕上显示的图,在这中间经历了什么样的过程,这个过程就是管线。其实表示的是一系列不同的操作,过程如下:
在这里插入图片描述

  • 首先输入了1,2,3,4四个顶点的数据
  • Vertex Processing : 经过变换、投影等操作,将这些点投影到屏幕上。
  • Triangle Processing : 投影到屏幕上的一个个点都是离散的,将其连接起来,成为三角形
  • Rasterization : 形成三角形之后要将三角形画在屏幕上,屏幕是由一个个像素组成的,是离散的,所以要经过光栅化将三角形离散成一个个像素(这里fragment是opengl中的概念,片段的意思,在这里我们就把它理解成像素)
  • Fragment Processing : 对每个像素进行着色
  • Framebuffer Operations : 得到屏幕上最终显示出来的图像

具体一下,每一步做的操作如下:

在这里插入图片描述

对模型的每一个顶点的位置进行变换。

在这里插入图片描述

光栅化,进行采样
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/49844.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GAMES101-现代计算机图形学入门-闫令琪 - lecture11 几何3(Geometry 3) - 课后笔记

几何2 - 曲线和曲面(Geometry 2 - Curves and Surface) 上一节提到,要表现一些复杂的几何模型有两种方法: 隐式几何显式几何 本节课讲的为显式几何 显式几何(Explicit Representations) 显式几何有两种…

GAMES101-现代计算机图形学入门-闫令琪 - lecture4 观测变换(viewing transformation) - 课后笔记

观测变换(Viewing transformation) 视图 / 相机变换(View / Camera transformation)投影变换(Projection transformation) 正交投影(Orthographic projection)透视投影(…

GAMES101-现代计算机图形学入门-闫令琪 - lecture9 着色3(Shading 3) - 课后笔记

着色3(Shading 3) 重心坐标纹理查询纹理应用 插值 - 重心坐标 (Barycentric Coordinates) 为什么要插值? 能够获得三角形三个固定顶点的属性,但是不知道三角形内部的属性希望三角形内部属性能有一个平滑…

GAMES101-现代计算机图形学入门-闫令琪 - lecture6 光栅化2(抗锯齿) - 课后笔记

光栅化2(抗锯齿)(Rasterization 2 - Antialiasing) 抗锯齿的内容包括: 采样理论(Sampling theory)抗锯齿的实践应用(Antialiasing in practice) 接着上节 我们采样是…

GAMES101-现代计算机图形学入门-闫令琪 - lecture5 光栅化(三角形的离散化) - 课后笔记

光栅化(三角形的离散化)(Rasterization1 (Triangles)) 接着上面的透视投影开始: 如何确定一个近平面的 l(left) , r(right) , b(bottom) , t(top)四个面?通常使用竖直可视角度(vertical field…

GAMES101-现代计算机图形学入门-闫令琪 - lecture3 变换(transformation) - 课后笔记

变换 为什么要变换? 变换有两种,一种 model 和 view 变换,其中model变换中包括缩放, 而view则主要是讲3D投影到2D的画面上 二维变换 要找到一个变换,实际上就是寻找变换后得坐标(x‘,y’)和变换之前的坐标&#xf…

GAMES101-现代计算机图形学入门-闫令琪 - lecture7 着色(Shading) - 课后笔记

着色(Shading) 可视性 / 遮挡 Z - 缓冲 (Z - buffering,深度缓冲) 着色 光照 和 着色 (illunmination & Shading) 画家算法(Painter s Algorithm) 先注明一下&am…

全网最详细中英文ChatGPT-GPT-4示例文档-场景问题智能生成从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

从0到1快速入门场景问题智能生成应用场景 Introduce 简介setting 设置Prompt 提示Sample response 回复样本API request 接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例 其它资料下载 ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和…

记一次alertmanager发送邮件失败的处理过程

文章目录 0 说明环境说明阅读说明 1 先验证smtp信息是否正确2 配置alertmanager配置文件并触发告警3 解决 smtp.plainAuth failed: wrong host name4 解决 dial tcp 127.0.0.1:5001: connect: connection refused5 解决 配置文件不对应的问题6 解决configmap跟挂载文件名不对应…

使用telnet客户端发送假冒邮件出现由某某代发怎么解决

使用telnet客户端发送假冒邮件出现由某某代发怎么解决 步骤如下,打码的是邮箱地址 想知道为什么我的有"由某某代发",而别人的没有,都是通过同样的操作在自己的电脑上操作的

奇葩经历之一_Hotmail邮箱无法查看和发送任何邮件

起因——“似乎有其他人使用你的帐户!” 因为IP活动异常,微软通知你账号有风险: 自动处理——“别慌,我们停用你的账户,这样就安全了!” 没有任何通知和提示就直接关闭邮箱功能,从这以后&…

记录项目里面用到的几个给国外邮箱发邮件的代码

一些说明: 这几个都可以正常发邮件,但是免费的每天都会有限制,发多了就会黑名单。。。 最终选择了exchange付费的版本,每天可以发1万条邮件,也不是很贵,基础的32一个月的就可以了 import javax.mail.inte…

JavaMail邮件发送不成功的那些坑人情况及分析说明(巨坑跳出专用姿势)

https://blog.csdn.net/xyw591238/article/details/69530950 前言 JavaMail的使用本身并不难,网上有不少案例,简单易懂,而且有详细的中文注解。但是由于JavaMail的机制设置不够完善,特别是异常出错时的参考信息太少,给…

Python通过发邮件通知自己电脑被入侵

我对IT技术有着狂热的追求,虽然现在很渣,但是我有颗钻研的心,例外我还比较喜欢看小说,相信看过最强黑客的人对里面的黑客的技术佩服得无以复加,黑客一般对自己的电脑数据都比较在意,一般都会设置些密码等并…

如何在线伪造邮箱发件人,用任意邮箱发送邮件

今天邮箱收到一封自己域名发过来的邮件,但是询问当事人说并没有发送相关邮件,于是去百度了下,看是否可以伪造发件人,于是找到一个网站 http://tool.chacuo.net/mailanonymous,这个网站可以用任意的邮箱地址发邮件&…

单播通信、主播通信和广播通信

单播 简介 单播(unicast)是指封包在计算机网络的传输中,目的地址为单一目标的一种传输方式。每次只有两个实体相互通信,发送端和接收端都是唯一确定的。它是现今网络应用最为广泛,通常所使用的网络协议或服务大多采用…

Qt 之图形(转换)

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 QTransform 用于指定坐标系的 2D 转换 - 平移、缩放、扭曲(剪切)、旋转或投影坐标系。绘制图形时,通常会使用。 QTransform 与 QMatrix 不…

全网最全!!Qt实现图片旋转及图片旋转动画的几种方式

实现图片旋转的两种方式 第一种方案 使用 QPixmap 的 transformed 函数来实现旋转,这个函数默认是以图片中心为旋转点,不能设置旋转的中心点,使用如下: QMatrix matrix; matrix.rotate(45);QLabel *Label new QLabel(); Label-…

网页特效——女儿国国王

目录 💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝&…

不使用插件,小程序也能完整的渲染富文本(视频展现,图片自适应)

用过小程序rict-text的帅哥靓女们(说的就是正在看文章的你)都知道,rich-text是无法解析富文本中的video标签的,本文教你如何优雅的在不使用插件的情况下完整的渲染富文本 首先是富文本图片自适应的问题 当我们从后端拿到富文本数…