GAMES101笔记 Lecture07 Shading1(Illumination, Shading and Graphics Pipeline)

目录

      • Visibility / Occlusion(可见性 or 遮挡)
        • Painter's Algorithm(画家算法)
        • Z-Buffer(深度缓冲算法)
      • Shading(着色)
        • A Simple Shading Model(Blinn-Phong Reflectance Model)一个简单的着色模型:Blinn-Phong反射模型
          • Diffuse Reflection(漫反射)
      • 参考资源

Visibility / Occlusion(可见性 or 遮挡)

延续上节课的内容,补充一下关于深度缓冲算法的知识。

Painter’s Algorithm(画家算法)

画画的时候,从后向前画;先画远的物体,近的物体会覆盖远的物体。

需要按照深度进行排序,假如有 n n n个三角形,时间复杂度就是 O ( n l o g n ) O(n log^{n}) O(nlogn)

但是可能会出现无法按照深度顺序解决的情况:

在这里插入图片描述

Z-Buffer(深度缓冲算法)

对于每个三角形按照深度排序可能会出现不太好处理的情况,但是对于每个像素可以记录一个深度最近的颜色。
思路:

  • 对于每个像素,存储当前最小的深度值。
  • 需要一个额外的缓冲来存储深度值:
    • frame buffer stores color values 帧缓冲器存储颜色值
    • depth buffer (z-buffer) stores depth 深度缓冲器来存储深度值

为了简化考虑,假设 z z z值永远是正值,越小的值表示越近,越大的值表示越近。

如下图所示,深度越近颜色越深;反之,颜色越浅。

在这里插入图片描述
初始的时候,深度缓存中记录的深度都是正无穷大。
算法流程:
在这里插入图片描述
在这里插入图片描述
假设每个三角形都覆盖常数个像素,那么对于 n n n个三角形,时间复杂度就是 O ( n ) O(n) O(n)

Shading(着色)

着色就是对不同物体应用不同材质的过程。

A Simple Shading Model(Blinn-Phong Reflectance Model)一个简单的着色模型:Blinn-Phong反射模型

Blinn-Phong反射模型主要由三个部分组成:Specular highlights(高光部分), Diffuse reflection(漫反射), Ambient lighting(环境光)。
在这里插入图片描述
在开始之前,做如下定义:
考虑光照在任何一点上(shading point)的着色结果是什么,这个点可以在一个平面上,也可以在一个曲面上,
但是,我们认为在一个局部的极小的范围内,它一定在一个平面上。
在这里插入图片描述
平面的法线: n ⃗ \vec{n} n
观测方向: v ⃗ \vec{v} v
光照方向: l ⃗ \vec{l} l
这些向量我们都只想表示方向,所以都是单位向量

我们考虑任何一个点的着色,只考虑它自己,不考虑其它物体的存在。
没有阴影会产生!着色具有局部性!

Diffuse Reflection(漫反射)

当有一根光线打到物体表面时,这根光线会被均匀地反射到各个方向去。

在这里插入图片描述
Lambert’s cosine law:

在单位面积上接收到的能量取决于光照强度和夹角(光照方向和法线方向的夹角)。

单位面积的能量和夹角的余弦值成正比。

在这里插入图片描述
我们认为一个点光源所传播的能量,在某一个时间一定是集中在一个球壳上。
并且,根据能量守恒定律,在任何一个球壳上的能量都相等。
因此,随着传播过程中,球壳越来越大,在单位面积上的能量越来越少。
单位面积的能量为: I / r 2 I / r^2 I/r2
在这里插入图片描述
因此,我们可以得出漫反射应该看到的亮度的计算公式:

在这里插入图片描述
漫反射与观测角度完全没有关系,因为漫反射均匀地向四面八方反射。

参考资源

GAMES101 Lecture07

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

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

相关文章

性能测试该怎么做,终于找到方法了

目录 开头 分类 服务器与场景设计 计算TPS 设计场景 场景运用 单交易最大压力: 单交易稳定性: 混合场景稳定性: 业务指标: 数据库 中间件 负载均衡: 最后: 开头 性能测试的工具有很多&#xf…

FreeRTOS学习笔记—基础知识

文章目录 一、什么是RTOS二、前后台系统三、实时内核(可剥夺型内核)四、RTOS系统五、FreeRTOS系统简介六、FreeRTOS源码下载 一、什么是RTOS RTOS全称为:Real Time OS,就是实时操作系统,核心在于实时性。实时操作系统又分为硬实时…

Servlet

1.Servlet是什么 Servlet是一种实现动态页面的技术。是一组Tomcat提供给程序员的API,帮助程序员简单高效的开发一个web app 回顾 动态页面 VS 静态页面 静态页面也就是内容固定的页面,即使 用户不同/时间不同/输入参数不同,页面的内容也不…

LVS负载均衡群集

目录 企业集群的应用 1、什么是集群 2、集群使用在哪个场景 3、集群分类(三种 )集群类型 负载均衡 高可用 高性能运算 4、负载均衡集群的架构 5、负载均衡集群工作模式 6、LVS虚拟服务器 LVS ipvsadm LVS和nginx比较 7、LVS负载调度算法 8、案例LVS-NAT部署实战 企…

数学建模——曲线拟合

一、曲线拟合简介 1、曲线拟合问题的提法 已知一组数据(二维),即平面上n个点 (xi,yi)(i1,2,…,n), xi互不相同。寻求一个函数yf(x),使得f(x)在某种准则下与所有的数据点最为接近,即拟合得最好。 2、…

【雕爷学编程】Arduino动手做(149)---MAX9814咪头传感器模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

docker框架02docker的安装

01.这次的docker是在centos版本下的Linux系统中安装的。 02.输入命令 01.先去卸载就得版本 02.安装工具包,和设置镜像仓库 03.由于网络的问题,访问国内的阿里云镜像 修改: 04.更新索引和安装社区版的docker 05.启动docker 06.用命令d…

postman不能进行并发测试

1.按照网上文档的配置 2.在登录接口里睡眠5s,如果是并发的话,所有的请求都会一起睡眠5s 3.测试结果:请求是每隔5s串行执行的

Microsoft遭遇DDoS攻击,3000万客户数据遭窃

6月初,微软部分服务遭遇严重中断,包括Outlook电子邮件、OneDrive文件共享应用程序和云计算基础设施Azure。 一个名为”匿名苏丹”的(又名“风暴-1359”)的组织声称对此次DDoS攻击负责。 匿名苏丹组织自2023年1月以来一直活动频繁,声称其目标…

反向代理缓存服务器 Squid 、Nginx、CDN部署讲解

目录 一、Squid 反向代理1.1 概念1.2 工作机制1.3 搭建 二、 Nginx 反向代理缓存 一、Squid 反向代理 1.1 概念 如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的 Web 服务器请求资源&a…

pytorch 的matmult()函数详解

torch.matmul()也是一种类似于矩阵相乘操作的tensor连乘操作。但是它可以利用python中的广播机制,处理一些维度不同的tensor结构进行相乘操作。 matmul 就是矩阵求 叉乘 如果是二维矩阵,两个矩阵的大小应该为m*n ,n*m。 一维向量的乘积&…

数据结构之队列

1.队列的定义 队列(Queue):也是一种运算受限的特殊线性表。其插入和删除操作分别在线性表的两端进行(只允许在表的一端进行插入,而在另一端进行删除)。允许删除的一端称为队头(front),允许插入的一端称为队尾(rear) …