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

目录

      • 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.hqwc.cn/news/4882.html

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

相关文章

ES基本操作(JavaAPI篇)

引入jar包依赖 <dependencies><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.8.0</version></dependency><!-- es客户端 --><dependency><groupI…

Loadrunner怎么实现MD5加密

目录 前言&#xff1a; 1、写一个md5.h文件&#xff0c;将其放入脚本路径下 2、在globals.h中加入#include “md5.h” 3、在Action中写脚本&#xff0c;脚本示例如下&#xff1a; 前言&#xff1a; 在 LoadRunner 中实现 MD5 加密可以通过使用 LoadRunner 提供的函数来完成…

【FPGA零基础学习之旅#9】状态机基础知识

&#x1f389;欢迎来到FPGA专栏~状态机基础知识 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家能指正…

macOS Ventura 13.5beta4(22G5059d)发布

系统介绍 黑果魏叔 6 月 28 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5 开发者预览版 Beta 4 更新&#xff08;内部版本号&#xff1a;22G5059d&#xff09;&#xff0c;本次更新距离上次发布隔了 12 天。 macOS Ventura 带来了台前调度、连续互通相机、F…

TypeScript ~ 掌握基本类型 ②

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; TypeScript ~ TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &…

SQL-每日一题【182.查找重复的电子邮箱】

题目 表: Person 编写一个 SQL 查询来报告所有重复的电子邮件。 请注意&#xff0c;可以保证电子邮件字段不为 NULL。 以 任意顺序 返回结果表。 查询结果格式如下例。 示例 1: 解题思路 前置知识 count&#xff08;&#xff09; 1.count(*) &#xff1a;统计所有的行数&a…

软考01进制转换

文章目录 前言一、二进制1.二进制转十进制2.二进制转十六进制 二、十进制1.十进制转二进制2.十进制转十六进制 二、十六进制1.十六进制转二进制2.十六进制转十进制 总结 前言 比较常用的进制有二进制、十进制、十六进制这是我们的主要学习目标。 一、二进制 二进制由0和1组成&…

单表-DQL

注意&#xff1a;这张图还包含了对于的顺序&#xff0c;先分组再排序&#xff0c;再分页&#xff0c;顺序不能乱 基本查询 # 1.基本查询 # 查询全部行 select * from tb_emp; select id, user_name, password, name, gender, image, job, entry_date, create_time, update_ti…

ZLMediaKit 的安装及使用介绍

ZLMediaKit 介绍 ZLMediaKit是一个基于C开发的开源流媒体服务器。它提供了高性能的音视频处理能力&#xff0c;支持常见的流媒体协议&#xff0c;如RTSP、RTMP、HLS和HTTP-FLV&#xff0c;并且具有低延迟和高并发处理能力。 开源地址&#xff1a;https://github.com/xia-chu/…

【JAVA】十分钟带你了解java的前世今生

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【初始JAVA】 文章目录 前言JAVA介绍诞生&#x1f52c;名字与图标&#x1f916;发展&#x1f6e9;️未来&#x1fa84; 前言 玩过我的世界的朋友想必对JAVA以及它的图标都很熟悉&#xff0c;在游戏开始画面…

Spring进阶学习(附面试快速答法)

文章目录 1、Bean线程安全问题小总结面试快速答法 2、AOP小总结面试快速答法 3、bean的生命周期小总结面试快速答法 4、循环引用小总结面试快速答法 &#xff15;、SpringMVC的执行流程小总结面试快速答法 6、Springboot自动配置原理小总结面试快速答法 7、Spring框架常见注解面…

【数据库原理】MyShop 商城数据库设计(SQL server)

MyShop 商城数据库设计 项目背景定义课程设计要求概念结构设计逻辑结构设计数据结构的描述用户信息数据结构的描述地址信息数据结构的描述商品类别数据结构的描述商品数据结构的描述购物车数据结构的描述订单数据结构的描述订单项数据结构的描述 物理结构设计用户表结构地址表结…