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:分析 经过我们的实验发现当我们输入的密码后面存在双引号时会报…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
