当前位置: 首页 > news >正文

Games101 第六章 Shading(着色)

Blinn-Phong Reflectance Model(布林-冯反射模型)

布林-冯反射模型将着色区域分为三个部分
在这里插入图片描述
分别为:高光,漫反射,环境光。
反射模型有三部分组成
在这里插入图片描述

  • 反射参数:用来显示颜色
  • 光照能量:到达这一点的光的能量
  • 反射夹角:用来衡量光的发射量

在这里插入图片描述
我们可以从这个图中看到着色亮度和光照角度有关联。
在这里插入图片描述
该模型中假设在以光源为中心的球壳上能量相等。

高光反射

在这里插入图片描述
可以看到模型规定在对称方向的某个范围内都是高光。

在这里插入图片描述
我们在计算高光时用到了一个技巧,我们求的是平面法线(n)与出射入射方向的中线(h)的偏差,原因是计算更加方便。

说明一下p:这是用来控制高光区域大小的参数,原理如下:
在这里插入图片描述

由此看出,p的参数越大,高光允许的范围就越小。
在这里插入图片描述

漫反射区域

在这里插入图片描述
基本不用解释了,值得注意的是着色只与光照方向,光照距离与平面的法线有关,与观察方向与观察距离无关。

环境光照

在这里插入图片描述
添加恒定颜色并补充阴影。

效果

在这里插入图片描述

着色频率

Flat shading(三角形着色)

这种着色的方式是逐三角形着色
在这里插入图片描述

Gouraud shading(顶点着色)

分为两步:

  • 第一步只对顶点着色(意味着要求顶点法线)
  • 根据每个顶点组成三角形,用三个顶点的颜色对三角形内部进行插值。
  • 在这里插入图片描述

Phong shading(逐像素着色)

Phong和Blinn-Phong Reflectance Model中的Phong是一个人,但这是两个不同的成果。
依然分为两步:

  • 求出三角形顶点法线(和上面一样)
  • 用插值的方法求出三角形内每个像素的法线,然后依次着色。

在这里插入图片描述

效果

在这里插入图片描述

定义顶点的法向量

在这里插入图片描述

  • 通过几何体本身的几何性质定义
  • 通过周围面的法向量的定义

图形学渲染管线

在这里插入图片描述

Shader Programs(着色器)

着色器定义了对每一个像素是如何着色的,修改这个程序,所有点的着色都会改变。
在这里插入图片描述
如上图所示,程序定义了法线,纹理,光照方向等信息,并且给出了如何计算这些信息得到颜色。

纹理映射

在这里插入图片描述
纹理一般会定义在一张正方形的矩阵上,而三维空间中表面多是曲面,因此,纹理无法无损的从二维空间映射到三维空间,其中必定有压缩,拉伸等问题。
一般的纹理映射方法是只建立三维空间中的点与二维平面上的点的映射关系(显示映射),而其他地方则用插值解决。
而我们是实现显示映射的方法是使用重心坐标。

重心坐标

重心坐标是用三角形的顶点来表示内部任意一点的方法。
在这里插入图片描述
如何计算坐标:
在这里插入图片描述

使用纹理

  • 找出三维空间中投影到像素中心的点的重心坐标
  • 将该重心坐标作用到三角形的三个顶点的纹理坐标上
  • 去其对应纹理坐标位置纹理的颜色

问题太小时怎么办

在这里插入图片描述

双线性插值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在两个方向上分别做了线性插值,因此时双线性插值

当纹理太大了怎么办

在这里插入图片描述
在远处明显出现了摩尔纹(对高频信号进行了低采样)
在这里插入图片描述
提高采样率当然能解决问题,但这样的话消耗就太大了。

Mipmap

在这里插入图片描述
我们为纹理设计分辨率不同的层,用在距离不同的地方进行查询。
可以计算出,多消耗的存储空间为原来的1/3
在这里插入图片描述
每一层称为D
如何查询在那一层
在这里插入图片描述
每个像素查询它上方和右边的像素在纹理中的位置,比较这两个位置距离自己在纹理坐标中的距离,最大的哪个就是L。然后用L计算D(比如L = 4,像素的边扩大了4倍,即扩张了两次,所以在第2层)
在这里插入图片描述
为了使过度更加平滑,我们要使用三线性插值。
在这里插入图片描述
即对相邻两层的结果再进行插值(按距离)
在这里插入图片描述
在这里插入图片描述
结果出现了连续的贴图变化,但再远处又出现了问题

各向异性

在这里插入图片描述
我们发现不同位置像素的纹理映射成了不同的形状。但我们之前的方法总是只能采样一个正方形内的纹理。
在这里插入图片描述
由此我们引入各项异性的mipmap,能将正方形的像素区域映射为不同的形状。

http://www.dtcms.com/a/418192.html

相关文章:

  • 电子电气架构 --- 智能座舱域环境感知和人机交互系统
  • 数字营销网站主页优化制作网页动画的软件
  • CSS详篇
  • Memblock-3
  • 大数据毕业设计选题推荐-基于大数据的全国饮品门店数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
  • 【后端开发】golang部分中间件介绍(任务调度/服务治理/数据库/缓存/服务通信/流量治理)
  • 建设一个自己的网站需要多少钱站长统计官方网站
  • 烟台装修公司网站建设注册公司流程和费用时间
  • java设计模式:工厂方法 + 建造者模式
  • 3、Lombok进阶功能实战:Builder模式、异常处理与资源管理高级用法
  • Linux 内核开发 的核心知识点
  • 【Linux系列】并发世界的基石:透彻理解 Linux 进程 — 理解操作系统
  • 小米17对比iPhone 17:2025年深度对比
  • 借助Aspose.Email,使用 Python 将 EML 转换为 MHTML
  • 免费做名片的网站专业网站开发设计
  • 微服务项目->在线oj系统(Java-Spring)-后台管理(1)
  • 怎么防止网站攻击做网站价格表
  • 1、Product-Service 服务设计规范文档
  • 网深科技NetInside网络流量异常分析报告
  • 基于TCP的简易端口扫描器
  • 大腾智能助力深圳市联合创造科技,实现精密触控屏行业数字化升级
  • MR+无人机-增强态势感知、更高效的现场检查和增强
  • 无人机遥控器使用与信号连接问题处理
  • 德克西尔抗振倾角仪,守护无人机云台稳定清晰
  • Mosquitto:MQTT Broker入门与分布式部署最佳实践
  • 无人机姿态控制技术详解
  • 做网站所需要的公司细责及条款微信小程序推广
  • keepalived部署
  • 前端实现抽烟识别:从算法到可视化
  • j2ee网站开发免费教程甘肃金顶建设公司网站