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

news2024/11/19 7:24:14

目录

      • 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.coloradmin.cn/o/706611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Learn Mongodb了解DB数据库 ①

作者 : SYFStrive 博客首页 : HomePage 📜: PHP MYSQL 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &#x1f44…

flash attention论文及源码学习

​ 论文 attention计算公式如下 传统实现需要将S和P都存到HBM,需要占用 O ( N 2 ) O(N^{2}) O(N2)内存,计算流程为 因此前向HBM访存为 O ( N d N 2 ) O(Nd N^2) O(NdN2),通常N远大于d,GPT2中N1024,d64。HBM带宽…

#10043. 「一本通 2.2 例 1」剪花布条(内附封面)

题目描述 原题来自:HDU 2087 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? 输入格式 输入数据为多…

23年6月1日软著又面临改革,个人加分评职称和企业申报项目加分的软件著作权登记证书该如何申请?

23年6月1号,国家版权局对软件著作权的申请又做出了改革,本次改革的主要内容是全面普及线上办公。申请人无需向中心递交或邮寄登记申请纸介质材料,“足不出户”即可完成版权登记。 软件著作权登记实现无纸化后,申请人在线登记办理…

1.2g可视化大屏项目分享【包含数字孪生、视频监控、智慧城市、智慧交通等】

1.2g可视化大屏项目分享【包含数字孪生、视频监控、智慧城市、智慧交通等】 链接:https://pan.baidu.com/s/1KSNll7b6bVoVPPqcQmNKeQ 提取码:w13x

Android 图形系统-图解和初步探究

Android 图形系统-图解和初步探究_猎羽的博客-CSDN博客https://blog.csdn.net/feather_wch/article/details/131486729 Android图形系统 2023-7-1 问题:如何将一帧画面显示到屏幕上? 绘制流程 Activity代码 Window的结构 绘制流程 Activity启动后&a…

JDK 动态代理为什么只能代理有接口的类?

嗯,这个问题的核心本质,是 JDK 动态代理本身的机制来决定的。 首先,在 Java 里面,动态代理是通过 Proxy.newProxyInstance()方法来实现的,它需 要传入被动态代理的接口类。 之所以要传入接口,不能传入类&a…

MYSQL增删改语句

INSERT 语法: 单行插入 INSERT INTO table_name (column_1, column_2, ...) VALUES (value_1, value_2, ...); 多行插入 INSERT INTO table_name (column_1, column_2, ...) VALUES (value_11, value_12, ...),(value_21, value_22, ...)...; INSERT INTO 和 VALUES都是关键词 …

libGL.so.1: cannot open shared object file: No such file or directory

不适用docker环境,在conda虚拟环境中出现如下错误: 解决办法: 参考资料 【解决方法】libGL.so.1: cannot open shared object file: No such file or directory

高性能分布式缓存Redis(三) 扩展应用

一、分布式锁 在并发编程中&#xff0c;通过锁&#xff0c;来避免由于竞争而造成的数据不一致问题 1.1、高并发下单超卖问题 Autowired RedisTemplate<String, String> redisTemplate;String key "maotai20210319001";//茅台商品编号ScheduledExecutorServ…

【线程池】史上最全的ScheduledThreadPoolExecutor源码分析

目录 一、简介 1.1 继承关系 1.2 使用 1.3 例子 二、源码分析 2.1 构造方法 2.2 主要的四种提交执行任务的方法 2.3 内部类 ScheduledFutureTask 2.3 scheduleAtFixedRate()方法 2.4 delayedExecute()方法 2.5 ScheduledFutureTask类的run()方法 2.6 内部类 Delaye…

Java设计模式(九)—— 工厂模式1

系列文章目录 披萨订购—传统方式 文章目录 系列文章目录前言一、传统方式案例1.具体需求案例2.传统方式实现3.传统方式优缺点 总结 前言 Hello&#xff0c;小伙伴们&#xff0c;欢迎来到柚子的博客~让我们一起成长吧o(&#xffe3;▽&#xffe3;)ブ 提示&#xff1a;以下是…

Java框架学习(一)JavaWeb基础:Maven、Spring、Tomcat、Mybatis、Springboot

文章目录 MavenMaven仓库Maven坐标为什么Maven进行了依赖管理&#xff0c;依然会出现依赖冲突&#xff1f;处理依赖冲突的手段是什么&#xff1f;详细讲讲scope依赖范围Maven的生命周期Maven高级分模块设计继承版本锁定聚合Maven的继承与聚合的异同私服 Tomcatservlet 分层解耦…

RISCV Reader笔记_4 乘除,浮点扩展

乘法和除法指令 前面了解过 RV32I不带乘除。扩展的RV32M里面有。 mul 较简单。div 是商&#xff0c;rem 是余数。 指令格式都差不多&#xff0c;基本就是靠 func 码确定变体。 因为两个32位数乘积是64位数&#xff0c;一条指令处理会比较复杂&#xff0c;因此分为两个指令计算…

二维地图中立体阴影效果实现

概述 前两天有个学员在群里发出来一张截图&#xff0c;效果是一个区域掩膜边框立体阴影效果&#xff0c;咨询我怎么实现&#xff0c;我看了下心里大概有了一个想法&#xff0c;只是前两天比较忙就没实现&#xff0c;趁着周末就想着验证实现一下。鉴于学员的要求&#xff0c;本…

116.实战网页实现平滑滚动

● 在导航中&#xff0c;我们使用#简单的实现了&#xff0c;现在我们要实现&#xff0c;点击导航自动跳转指定的节去&#xff0c;通过id去选择 <ul class"main-nav-list"><li><a class"main-nav-link" href"#how">工作流程&l…

Web APls-day01

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 变量声明 Web API 基本认知 1 作用和分类 2 什么是DOM 3 DOM树 4 DOM对象&#xff08;重要…

Powerbuilder项目文件太多,对象继承太多导致编译需要几个小时的解决方案

Powerbuilder项目文件太多&#xff0c;对象继承太多导致编译需要几个小时的解决方案&#xff1a; 项目文件太多&#xff0c;很多pbl是一个相对独立的库算法&#xff0c;而且还夹杂着pfc的一些老库。这些库的特点就是继承和封装比较好&#xff0c;但是导致编译速度特慢。我遇到…

全局异常处理

使用 ControllerAdvice 声明全局异常处理类使用ExceptionHandler(异常类.class) 指定哪一个异常处理 先会抛出指定异常&#xff0c;没有指定异常的情况下抛出全局异常。 3. 自定义异常 3-1. 自定义异常类&#xff0c;需要继承 extends RuntimeException 3-2. 在代码异常处声…

《JavaScript设计模式与开发实践》一篇文章带你读懂

《JavaScript设计模式与开发实践》是由曾探所著的一本经典技术书籍。该书详细介绍了JavaScript中常用的设计模式&#xff0c;并结合实际项目开发经验给出了实践示例和最佳实践建议。这本书首先介绍了设计模式的基本概念和作用&#xff0c;以及为什么要在JavaScript中使用设计模…