games101【lecture7-9】Shading

本文深入探讨了图形学中的关键概念,包括Z-Buffer深度缓冲技术解决可见性问题,画家算法的局限性,以及Blinn-Phong着色模型的漫反射、高光反射和环境光照。同时,介绍了实时渲染管线中的MVP变换、纹理映射和Mipmap技术,展示了如何提升图形质量与性能。
摘要由CSDN通过智能技术生成

主要内容:

  1. 深度缓冲
  2. 光照
  3. 着色
  4. 渲染管线

Z-buffering——可见性/遮挡问题

如何将重叠的三角形的远近位置绘制——近处遮挡远处

画家(油画家)算法

先绘制远处物体,然后绘制近处物体遮挡远处—>图形学中过程就是先将远处进行光栅化绘制后,再绘制近处

  1. O(n log n) 时间对深度进行排序

存在问题

如下图右所示,两两之间存在互相遮挡关系,则绘制会存在问题——也就是无法定义互相的深度关系
在这里插入图片描述

Z-Buffer 引用

无法对对象或者三角形进行深度排序时,考虑使用针对像素点的深度,也就是对每个像素点记录最浅的深度

图形学中做法:

  1. 会渲染最后的结果图像(frame buffer stores color values)
  2. 同时也会生成另外一张图—只存它所看到的物体最浅的信息(也就是深度图/深度缓存)(就是depth buffer (z-buffer) stores depth )

概念定义:

针对深度测试有如下约定:

  1. 首先在深度中的话z是永远为正的,也就是像素点的深度距离人眼位置(打个比喻)
  2. z越小越近,反之则也成立

Z-Buffer例子

右图中z越近则颜色更趋近于黑色,越远则越白
在这里插入图片描述

算法实现

核心思想就是求最小值

//初始化depth buffer to ∞
for (each triangle T)
	for (each sample (x,y,z) in T)
		// closest sample so far
		if (z < zbuffer[x,y]){
			framebuffer[x,y] = rgb; // update color
			zbuffer[x,y] = z; // update depth
		}		
		else
			; // do nothing, this sample is occluded

流程如下所示:针对像素

  1. 逐像素初始化为无限大
  2. 新的三角形绘制,比较深度后绘制
  3. 绘制后,又有新的三角形的进入,依次比较深度后,若新的小于则进行覆盖更新在这里插入图片描述

算法的复杂度

  1. 时间为O(n)——挨个记录了当前最小值,并没有进行排序
  2. 上图中绘制顺序不一样会如何?——跟顺序无关,只跟像素的深度有关,不考虑相等情况
  3. 深度完全一样——浮点值比较

透明物体如何处理?(待补充)

Shading

定义

  1. 引入明暗不同
  2. 对物体应用不同的材质

Blinn-Phong Reflectance Model

经验模型,并不是完全符合物理模型

如下图中茶杯会存在高光、漫反射和间接光照(环境光照)

间接光照:这里假设接收到的来自四面八方的光是一个常量
在这里插入图片描述

很小的局部shading

有如下假设:

  1. 局部点很小可以看作为一个平面,如果需要针对整个物体则需要通过着色频率进行不停的绘制
  2. 局部性:不考虑阴影,只考虑着色,也就输不考虑其它物体存在
    在这里插入图片描述

漫反射(Diffuse Reflection )

一束光打到一个点,会朝向四面八方进行漫反射

  1. 一个平面在接收光照时,如果与光照方向为垂直则是可以接收全部光照,若存在角度呢?
    • 存在角度情况下使用Lambert’s cosine law ,也就是余弦夹角计算,设从接收位置取中心点往光照方向为l,该点的法向量为n,通过点乘(前者均为单位向量)就可得夹角余弦,那么也就是接收平面与光照方向的夹角
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值