GAMES101 笔记 Lecture08 Shading 2(Shading, Pipeline and Texture Mapping)

news2024/12/23 13:30:38

目录

      • Specular Term(高光项)
      • Ambient Term(环境光照项)
      • Blinn-Phong Reflection Model
      • Shading Frequencies(着色频率)
        • Shade each triangle(flat shading)在每个三角形上进行着色
        • Shade each vertex (Gouraud shading)(顶点着色)
        • Shade each pixel (Phong shading)
        • Defining Per-Vertex Normal Vectors(定义每个顶点的法向量)
        • Defining Per-Pixel Normal Vectors(定义每个像素的法向量)
      • Graphics (Real-time Rendering) Pipeline 图形(实时渲染)管线
        • Vertex Processing(顶点处理)
        • Rasterization(光栅化)
        • Fragment Processing(片元处理)
      • Texture Mapping(纹理映射)
      • 参考资源

Specular Term(高光项)

继续上节课的内容,上节课讲完了漫反射部分,这节课从高光部分开始讲。

当观察方向和镜面反射的方向接近的时候可以看到高光,其它的时候都看不到。

也就是下图中 v ⃗ \vec{v} v R ⃗ \vec{R} R 足够接近的时候:
在这里插入图片描述
当观测方向 v ⃗ \vec{v} v 和反射方向 R ⃗ \vec{R} R 足够接近的时候,就等价于法线方向 n ⃗ \vec{n} n 和半程向量 h ⃗ \vec{h} h 足够接近。

如下图所示:
在这里插入图片描述

因此,高光部分的亮度就可以得到计算公式了:

其中, k s k_s ks是镜面反射系数,通常认为它是白的颜色。

之所以使用 n ⃗ \vec{n} n h ⃗ \vec{h} h 来计算夹角,是因为半程向量 h ⃗ \vec{h} h 非常好算。

在这里插入图片描述
上图中的指数 p p p是为了降低容忍,因为高光通常是一个非常小的部分,如果不加这个指数 p p p会导致当夹角较大的时候仍然可以看到一个比较亮的高光,这是错误的。

在Blinn-Phong模型中, p p p通常取值为 100 100 100 ~ 200 200 200

在这里插入图片描述

Ambient Term(环境光照项)

我们大胆假设环境中任何一点接收到的环境光强度都是一样的 I a I_a Ia,并且具有一个环境光系数 k a k_a ka

环境光强度为 L a = k a I a L_a = k_a I_a La=kaIa,这是一个常数。

这是错误的,如果要求出真实的环境光,需要应用到全局光照等知识,暂且不表。

Blinn-Phong Reflection Model

现在把漫反射、环境光、高光三个部分全都加起来,就得到了Blinn-Phong反射模型:

在这里插入图片描述

Shading Frequencies(着色频率)

着色频率是什么?
下图中的三个球完全相同,但是着色的结果各不相同。
第一个球是对每一个平面进行一次着色,计算这个平面的法线,然后计算着色。
第二个球是针对每个顶点计算一个法线,然后做一次着色,三个顶点内部三角形的颜色通过插值计算出颜色。
第三个球是针对每个像素做一次着色,针对每个三角形,利用其三个顶点的法向计算出三角形内部每个像素的法向,然后做一次着色。
在这里插入图片描述

Shade each triangle(flat shading)在每个三角形上进行着色

算出这个三角形平面的法线,然后进行着色,在三角形内部是完全一致的。

在这里插入图片描述

Shade each vertex (Gouraud shading)(顶点着色)

针对每个顶点计算一个法线,然后进行着色;在每个三角形内部,通过插值的方法计算出每个像素的着色。

在这里插入图片描述

Shade each pixel (Phong shading)

针对每个三角形,利用其三个顶点的法向计算出三角形内部每个像素的法向,然后做一次着色。
在这里插入图片描述

Defining Per-Vertex Normal Vectors(定义每个顶点的法向量)

通过许多三角形面来推断出这个点的法向量:

相邻的面的法线求平均:

在这里插入图片描述

Defining Per-Pixel Normal Vectors(定义每个像素的法向量)

利用各个顶点的重心坐标插值进行计算:
在这里插入图片描述

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

如何从场景到一张图,这中间到底经历了什么样的过程?

  1. 首先,输入三维空间中的许多点
  2. 经过一系列变换,将三维空间中的点投影到屏幕空间中。
  3. 将这些屏幕空间中的点按照原来的三角形关系继续连接成为三角形。
  4. 进行光栅化,将三角形离散成为屏幕中的fregments。
  5. 对每个fragments进行着色。
  6. 帧缓冲操作,得到每个像素的颜色,最终输出结果。(例如:如果利用了MSAA算法,需要将许多个fragments拼接成一个像素)。

在这里插入图片描述

Vertex Processing(顶点处理)

MVP变换,Model, View, Projection transforms

在这里插入图片描述

Rasterization(光栅化)

在这里插入图片描述

Fragment Processing(片元处理)

例如深度缓冲处理

在这里插入图片描述

着色处理:

在这里插入图片描述
纹理映射:
在这里插入图片描述

Texture Mapping(纹理映射)

任何一个三维物体的表面都是二维的:
在这里插入图片描述
物体表面任何一个点和纹理上的点是一一对应的,这就是纹理映射。

每一个三角形顶点都被指定了一个纹理坐标 ( u , v ) (u, v) (u,v)

在这里插入图片描述

参考资源

GAMES101 Lecture08

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

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

相关文章

【C++详解】——哈希

目录 unordered系列关联式容器 unordered_map unordered_map的接口说明 1.unordered_map的构造 2.unordered_map的容量 3.迭代器相关 4.unordered_map的元素访问 5. unordered_map的查询 6.unordered_map的修改操作 unordered_set 性能测试 底层结构——Hash 哈希…

copula简介

二元正态copula最为重要

MySQL - 自连接查询

1. 测试数据 创建 category 表 : CREATE TABLE category(categoryid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主题id,pid INT(10) NOT NULL COMMENT 父id,categoryName VARCHAR(50) NOT NULL COMMENT 主题名字,PRIMARY KEY(categoryid) ) ENGINEINNODB AUTO_INCREM…

cmd的学习

目录 常用的cmd命令 使用cmd的例子 常用的cmd命令 指令作用盘符名称:盘符切换dir查看当前路径下的内容tree以树形结构输出当前路径下的内容cd进入单级目录cd ..回退到上一级目录cd 目录1\目录2\...进入多级目录cd \回退到盘符目录cls清屏exit退出窗口 (值得注意的…

Android AlertDialog setView,kotlin

Android AlertDialog setView&#xff0c;kotlin <?xml version"1.0" encoding"utf-8"?> <com.google.android.material.textfield.TextInputLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width…

MySQL数据库——主从复制和读写分离

MySQL数据库——主从复制和读写分离 一、主从复制和读写分离的相关知识1.什么是读写分离&#xff1f;2.为什么要读写分离呢&#xff1f;3.什么时候要读写分离&#xff1f;4.主从复制与读写分离5.mysql支持的复制类型6.主从复制的工作过程7.MySQL 读写分离原理8.目前较为常见的 …

前端实现俄罗斯方块游戏(内含源码)

目录 一、前言 二、功能介绍 三、页面搭建 四、样式设置 五、逻辑部分 一、前言 今天带领大家完成俄罗斯方块游戏&#xff0c;功能也比较简单&#xff0c;也是想借助这样一个简单的功能&#xff0c;然后来帮助大家了解我们JavaScript在前端中的作用&#xff0c; 后续也会带…

【服务器】ASP.Net Core(C#)创建Web站点

简单几步实现本地ASP.Net.Core web 站点结合cpolar内网穿透工具实现远程访问 1. 创建站点 *环境搭建,这边测试,使用.NET 6.0 SDK,可以点击跳转到官网下载,下载后安装即可. 安装完成后,进入到某个文件夹,打开powershell执行下面命令,创建新的 Web 应用,名称叫:aspnetcoreapp …

机器学习 day22(ReLU激活函数)

ReLU激活函数 如果想让a取更大的非负数&#xff0c;激活函数g(z)可以选用ReLU激活函数&#xff0c;他在z&#xff1c;0时取0&#xff0c;在z ≥ 0时取z 常见的激活函数 左侧的为线性激活函数&#xff0c;因为f(x) wxb&#xff0c;使用激活函数后f(x) g(z)&#xff0c;此…

综合评价算法 | Matlab实现基于TOPSIS法的综合评价算法

文章目录 效果一览文章概述研究内容源码设计参考资料效果一览 文章概述 综合评价算法 | Matlab实现基于TOPSIS法的综合评价算法 研究内容 C.L.Hwang 和 K.Yoon 于1981年首次提出 TOPSIS (Technique for Order Preference by Similarity to an Ideal Solution)。TOPSIS 法是一种…

卷积神经网络--猫狗系列【CNN】

数据集&#xff0c;这次这个是分了类的【文末分享】 各12500张&#xff1a; 两点需要注意&#xff1a; ①猫狗分类是彩色图片&#xff0c;所以是3个channel&#xff1b; ②猫狗分类的图片大小不一&#xff0c;但是CNN的输入要求是固定大小&#xff0c;所以要resize。 划分训练…

【动态规划】子数组系列(下)

子数组问题 文章目录 【动态规划】子数组系列&#xff08;下&#xff09;1. 等差数组划分1.1 题目解析1.2 算法原理1.2.1 状态表示1.2.2 状态转移方程1.2.3 初始化1.2.4 填表顺序1.2.5 返回值 1.3 代码实现 2. 最长湍流子数组2.1 题目解析2.2 算法原理2.2.1 状态表示2.2.2 状态…

初学spring5(五)使用注解开发

学习回顾&#xff1a;初学spring5&#xff08;四&#xff09;自动装配 一、使用注解开发 二、说明 在spring4之后&#xff0c;想要使用注解形式&#xff0c;必须得要引入aop的包 在配置文件当中&#xff0c;还得要引入一个context约束 <beans xmlns"http://www.sprin…

Node.js模块化加载机制

优先从缓存中加载 模块在第一次加载后会被缓存。这也意味着多次调用 require() 不会导致模块的代码被执行多次 注意:不论是内置模块、用户自定义模块、还是第三方模块&#xff0c;它们都会优先从缓存中加载&#xff0c;从而提高模块的加载效率 $就像下方图中测试 内置模块…

【软件测试】MySQL操作数据表常用sql语句(汇总)

目录&#xff1a;导读 前言 一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 数据表有哪些操作…

【JavaEE初阶】HTML

摄影分享~ 文章目录 一.第一个HTML程序1.创建一个HTML文件并运行2.在vscode中创建HTML文件并运行HTML代码的特点 二.HTML中的标签1.注释标签2.标题标签3.段落标签4.换行标签5.格式化标签6.图片标签&#xff1a;img7.超链接标签8.表格标签9.列表标签10.from标签input标签selec…

Tomcat概念及部署

一.Tomcat的概述 1.Tomcat介绍 &#xff08;1&#xff09;免费的、开放源代码的web应用服务器。 &#xff08;2&#xff09;主要处理的是动态页面&#xff08;做一个运行后端的程序&#xff09;可以处理静态页面&#xff0c;处理效果不及apache和nginx。 &#xff08;3&…

类变量和类方法的基本使用

什么是类变量 类变量也叫静态变量/静态属性&#xff0c;是该类的所有对象共享的变量&#xff0c;任何一个该类的对象访问它时&#xff0c;取到的都是相同的值&#xff0c;同样任何一个该类的对象去修改它时&#xff0c;修改的也是同一个变量。 如何定义类变量 定义语法&…

实战线性回归模型

引言 线性回归是一种最简单、也是最常用的预测模型&#xff0c;主要用于处理自变量和因变量之间的线性关系。举个例子&#xff0c;假设你是一名大学生&#xff0c;正在为你的经济学课程做一个研究项目&#xff0c;你想要知道大学生的学习时间和GPA&#xff08;绩点平均分&…