【GAMES101】 07 shading着色

着色 shading

实现近大远小的效果。

画家算法

远处的画完(光栅化),再画近处的,覆盖掉远处的一部分。
时间复杂度:排序每个三角形,nlogn

但下面这种情况就无法用画家算法:
在这里插入图片描述
因此用深度缓冲 z-buffer

z-buffer深度缓存

(目前一般采用的方法)
时间复杂度 O(N),与排序无关!!每次存最小的,没有判断其他三角形的关系

生成两个,frame buffer(最后渲染结果) + depth buffer(z-buffer) 深度信息
之前:相机往-z看,小代表离得远,大代表离得近;
这里为简化计算,越小表示越近,越大表示越远。

在这里插入图片描述
右图,深度图,离得近,深度浅,对应值小,要黑一点;离得远,深度大,更白。

算法步骤

按像素计算。比较每个像素的深度,同时更新深度图。(中心思想:让深度图存每个像素比较后最浅也就是最近的那个值)

在这里插入图片描述
framebuffer[x,y] = rgb(把该像素赋值成新的三角形的颜色)

例子:
在这里插入图片描述

目前学的内容:
在这里插入图片描述
模型通过变换变成某种姿势、定义一个相机——视图变化、相机放在000,往 -z 看——三维投影到二维屏幕——根据屏幕和投影变换的关系,知道三角形会在屏幕上覆盖哪些坐标。

着色定义

引入颜色和光照的不同。

最基础着色模型 (binn-phong反射模型)

在这里插入图片描述
在这里插入图片描述

再这一点上只考虑它自己和光线,不考虑其他任何物体的存在,不考虑阴影。
在这里插入图片描述

漫反射 diffuse reflection

均匀的反射到四面八方。
在这里插入图片描述

shading point 接收到的光:和 cos theta成正比。
在这里插入图片描述

点光源有多少光会传到shading point:
在这里插入图片描述

推导出漫反射:
在这里插入图片描述
kd:代表shading point的颜色,rgb,比如000代表是黑色,吸收掉所有光,111是白色,shading point 不吸收光。

max(0,向量n点乘向量l即cos theta):指如果有光从下面到上面,是负的 点乘结果是负的情况,(这里只考虑漫反射,不考虑折射的存在)。

可以看出漫反射和观测方向 v 无关,即漫反射在任何方向观测都一样。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值