GAME101-Lecture07学习
前言
今天主要讲shading(着色)。在讲着色前,要先讲图形中三角形出现遮挡问题的方法(深度缓存或缓冲)。
先采样再模糊错误:对信号的频谱进行翻译(在这期间会有频谱的混叠),采样就是对这个信号进行截断。此时会发现混叠的信号还是混叠的。
Lecture 07 Shading 1 (Illumination, Shading and Graphics Pipeline)哔哩哔哩bilibili
光栅化内容
画家算法

先给远处的东西画好(做光栅化),然后再给近处的做。这样就可以得到一个处理了遮挡的结果的“画”。
例如画一个正方体,按照后、左、下、右、上、前的顺序画,就可以得到一个正方体。
但是如果画的顺序改一改,可能会出现不同的效果。这是因为左、下、右、上这几个面到我们眼睛的距离在我们看来都是差不多的(视点到面的距离,又叫“深度”)

-
需要深度排序(对于n个三角形为0(n log n))可以具有无法解析的深度顺序
因此实际中,不能用画家算法。
深度缓存(缓冲)
由于不能使用画家算法,因此引入深度缓存的算法。
概念

-
这是最终胜出的算法。
-
idea:
存储当前最小值。
每个样本的Z值(像素)需要一个额外的缓冲区用于深度值
-帧缓冲存储器存储颜色值 -深度缓冲区(z缓冲区)存储深度
-
重要:为简单起见,我们假设Z总是正数 (较小的z->更近,较大的z->更远)
图形学中,在渲染成品的图像时,会额外生成一个深度图/深度缓存(只存任何一个像素他所看到的最浅的深度信息)
算法(做法)

一开始我们认为所有记录深度的点都是无限远的。

数字越小代表越近,近的会把远的遮挡。
复杂度

-
以不同的顺序画三角形?
-
最重要的可见性算法:在所有GPU的硬件中实现
我们认为每个三角形中有常数个像素,然后又n个三角形,那么复杂度就是0(n)(个人认为这里就有点离谱了,算法的复杂度要是这么算的话,那就所有都是On了。。。。。不过闫老师补充了下一般一个三角形会覆盖100个左右的像素,那就也行)
假设不会出现两个不同的三角形在一个像素上有同样的深度(在图形学中,这些数字大多都是用浮点型来表示,这意味着总会有些误差,这也因此浮点型的判断相同十分困难,尤其时两个经过运算得来的浮点型更加不可能相同),紫色和红色三角形画的顺序不一样,结果也是一样的。
知识回顾

到目前为止,我们的学习到的内容:模型变换->坐标系变换->投影变换->视口变换->光栅化

着色(Shading)
对不同的物体有不同的材质。
Blinn-Phong模型
Blinn-Phong反色模型是一款着色模型。

-
镜面高光
-
漫反射
-
环境照明
定义

-
在特定阴影点处反射到摄像机的计算机光
-
输入: 观察者方向,v 表面法向,n 光的方向,I(为许多光的每一个) 表面参数(颜色、光泽度等)

目前所说的着色不考虑物体的存在,先不考虑关系打在物体后环境的变化(即没有阴影),只看光找过来物体表面的情况。着色具有着色性。
漫反射(Diffuse Reflection)

-
光均匀地向各个方向散射
-
所有观看方向的表面颜色相同
当一个光线会到达某个点,然后这个光线会被均匀的反射出去,这就叫漫反射。
能量的接收

-
但是接收到多少光(能量)呢? 一朗伯余弦定律
-
立方体的顶面接受一定量的光
-
60°旋转立方体的顶面拦截了一半的光线
-
一般来说,单位面积的光与cos 0=l·n成正比(朗伯余弦定律)
其实就是光通量。
此时就可以算出,这个着色点接收到的光的能量。
能量的发射

假设一个点光源。任何时刻,点光源辐射到四面八方。
一个单位的距离上,光的强度为I。那么在距离为r时,强度为I/r2
光传播的能量和距离成反比。
此时就可以通过物体距点光源的距离,算出来点光源发送到该物体表面的光的能量。
漫反射的能量

-
Ld:漫反射光
-
kd:传播系数(颜色)
-
(I/r2):能量到达阴影点
-
max(0,n·l):阴影点接收的能量
向量点乘(n·l)<0时,表示这个光线从下面打向了物体的表面,此时是没有任何物理意义的(也可以认为我们一般是不会考虑物体内部有光源向外的),因此不考虑。所以这里要用max。
这个shadingPoint是会吸收一部分的光/颜色,它会有一定的吸收率,我们就定义一个系数kd。

总结
本节课讲的东西比起前面来说,难度直线下降!
今天主要讲着色,讲着色前补充了前面光栅化深度缓存的知识。
光栅化内容中,首先讲解了画家算法的思想。由于画家算法无法很好的满足计算机图形学的需求,因此引入深度缓存的概念。
-
每个导出的图像都有一张对应的深度图,这个深度图记录着所有像素的深度信息。
-
此外还讲了深度缓存算法的实现方法,其本质就是一个双重循环。
着色部分通过Blinn-Phong反色模型引入漫反射、高光等显示中光照的效果情况。
-
主要讲了物体漫反射中,光的能量问题。
-
着色点平面与光发现的角度可以得到着色点对光能量接收的情况。
-
光源与物体的距离可以得到着色点处光能量的发射状况。
-
通过光能量的接收和发射状况,我们就可以量化漫反射的能量。
相关文章:
GAME101-Lecture07学习
前言 今天主要讲shading(着色)。在讲着色前,要先讲图形中三角形出现遮挡问题的方法(深度缓存或缓冲)。 先采样再模糊错误:对信号的频谱进行翻译(在这期间会有频谱的混叠)ÿ…...
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
看到这句话的时候证明:此刻你我都在努力~ 加油陌生人~ 个人主页: Gu Gu Study 专栏:一步一步了解Java 喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努…...
ICSE docker related research
ICSE 2024 Empirical Study of the Docker Smells Impact on the Image Size Docker 气味对镜像大小影响的实证研究 Docker 是一种广泛采用的打包和部署应用程序的工具,它利用 Dockerfile 来构建镜像。然而,创建最佳的 Dockerfile 可能具有挑战性&…...
【C++】学习笔记——多态_1
文章目录 十二、继承8. 继承和组合 十三、多态1. 多态的概念2. 多态的定义和实现虚函数重写的两个特殊情况override 和 final 3. 多态的原理1. 虚函数表 未完待续 十二、继承 8. 继承和组合 我们已经知道了什么是继承,那组合又是什么?下面这种情况就是…...
C++map容器关联式容器
Cmap 1. 关联式容器 vector、list、deque、forward_list(C11)等STL容器,其底层为线性序列的数据结构,里面存储的是元素本身,这样的容器被统称为序列式容器。而map、set是一种关联式容器,关联式容器也是用来存储数据的࿰…...
TS-抽象类和静态成员
目录 1,抽象类1,为什么需要抽象类2,抽象成员3,设计模式-模板模式 2,静态成员1,什么是静态成员2,设计模式-单例模式 1,抽象类 1,为什么需要抽象类 有时,某个…...
SharePoint 使用renderListDataAsStream方法查询list超过5000时的数据
问题: 当SharePoint List里的数据超过5000时,如果使用常用的rest api去获取数据,例如 await this.sp.web.lists.getByTitle(Document Library).rootFolder.files.select(*, listItemAllFields).expand(listItemAllFields).filter(listItemA…...
2024042001-计算机网络 - 物理层
计算机网络 - 物理层 计算机网络 - 物理层 通信方式带通调制 通信方式 根据信息在传输线上的传送方向,分为以下三种通信方式: 单工通信:单向传输半双工通信:双向交替传输全双工通信:双向同时传输 带通调制 模拟信号…...
通过java将数据导出为PDF,包扣合并单元格操作
最近项目中需要将查询出来的表格数据以PDF形式导出,并且表格的形式包含横向行与纵向列的单元格合并操作,导出的最终效果如图所示: 首先引入操作依赖 <!--导出pdf所需包--><dependency><groupId>com.itextpdf</groupId&…...
Java内存模式以及volatile关键字的使用
1.Java内存模型 (1)Java 内存模型(Java Memory Model,简称 JMM),它是一个抽象的概念,JMM是和多线程相关的,它是一组规范,描述了一组规则,定义了多线程对共享…...
每日5题Day3 - LeetCode 11 - 15
每一步向前都是向自己的梦想更近一步,坚持不懈,勇往直前! 第一题:11. 盛最多水的容器 - 力扣(LeetCode) class Solution {public int maxArea(int[] height) {//这道题比较特殊,因为两边是任意…...
路由器、交换机和网卡
大家使用VMware安装镜像之后,是不是都会考虑虚拟机的镜像系统怎么连上网的,它的连接方式是什么,它ip是什么? 路由器、交换机和网卡 1.路由器 一般有几个功能,第一个是网关、第二个是扩展有线网络端口、第三个是WiFi功…...
腾讯开源混元DiT文生图模型,消费级单卡可推理
节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 总结链接…...
shell脚本基础(if/else结构)
命令是双向选择语句,当用户执行脚本时如果不满足if后的表达式也会执行else后的命令,所以有很好的交互性。其结构为: if expression1 then command … command else command … command fi vim ifelse_exam.sh #ifelse_exam.sh #!/bin/bashec…...
万字长文破解 AI 图片生成算法-Stable diffusion (第一篇)
想象一下:你闭上眼睛,脑海中构思一个场景,用简短的语言描述出来,然后“啪”的一声,一张栩栩如生的图片就出现在你眼前。这不再是科幻小说里才有的情节,而是Stable Diffusion——一种前沿的AI图片生成算法—…...
Linux---编辑器vim的认识与简单配置
前言 我们在自己的电脑上所用的编译软件,就拿vs2022来说,我们可以在上面写C/C语言、python、甚至java也可以在上面进行编译,这种既可以用来编辑、运行编译,又可以支持很多种语言的编译器是一种集成式开发环境,集众多于…...
lucene中Collector类、CollectorManager类区分和用法
我的lucene版本是9.10.0,请说明Collector类、CollectorManager类区分和用法,尽量详细点 在 Lucene 9.10.0 中,Collector 类和 CollectorManager 类都是用于搜索结果的收集和处理 Collector 类 Collector 类是一个接口,用于收集…...
Android之给Button上添加按压效果
一、配置stateListAnimator参数实现按压效果 1、按钮控件 <Buttonandroid:id"id/mBtnLogin"android:layout_width"match_parent"android:layout_height"48dp"android:background"drawable/shape_jfrb_login_button"android:state…...
python EEL + vue3.js 项目中如何把组件中的函数提升为全局函数
eel官方示例中暴露的js函数是全局函数,vue中的自定义函数作用域通常都是组件范围内。要让eel.js调用,需要将其升为全局可用。 一般方法有 app.config.globalProperties 或 mixin等。 main.js //main.jsimport { createApp } from vue import App from…...
sqli-labs靶场第十四关
目录 1:分析 找闭合符: 2:开始注入 报错注入: 注入数据库名: 注入表名: 注入列名: 注入具体值: 1:分析 经过我们的实验发现当我们输入的密码后面存在双引号时会报…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...
【Java】Ajax 技术详解
文章目录 1. Filter 过滤器1.1 Filter 概述1.2 Filter 快速入门开发步骤:1.3 Filter 执行流程1.4 Filter 拦截路径配置1.5 过滤器链2. Listener 监听器2.1 Listener 概述2.2 ServletContextListener3. Ajax 技术3.1 Ajax 概述3.2 Ajax 快速入门服务端实现:客户端实现:4. Axi…...
Oracle实用参考(13)——Oracle for Linux物理DG环境搭建(2)
13.2. Oracle for Linux物理DG环境搭建 Oracle 数据库的DataGuard技术方案,业界也称为DG,其在数据库高可用、容灾及负载分离等方面,都有着非常广泛的应用,对此,前面相关章节已做过较为详尽的讲解,此处不再赘述。 需要说明的是, DG方案又分为物理DG和逻辑DG,两者的搭建…...
