【Games101】Lecture09 Shading 03笔记

视频&图片来源:【B站】GAMES101-现代计算机图形学入门-闫令琪

1. 着色

1.1 重心坐标

1.1.1 在三角形内部进行插值

  • 特指三角形在顶点进行操作
  • 在整个三角形中获得平滑的变化数值
  • 定义的内容:纹理映射,颜色,法向量…
  • 怎么做:重心坐标.

1.1.2 重心坐标

给定一个三角形,在这个三角形所在平面内的任意一点 ( x , y ) (x,y) (x,y)都能表示成三角形三个顶点坐标的线性组合。
前提:三个系数 α , β , γ \alpha,\beta,\gamma α,β,γ满足 α + β + γ = 1 \alpha+\beta+\gamma=1 α+β+γ=1
特殊情况:当这个点在三角形内,三个系数 α , β , γ \alpha,\beta,\gamma α,β,γ都是非负的

面积比可以求出三个系数:

简化公式(不用记):

1.1.3 重心坐标的使用

先算出重心坐标在哪,然后插值填色。

一个问题:在投影变换下,重心坐标可能发生改变。(投影变换时三角形发生形变,重心坐标可能改变)


1.2 纹理查询

1.2.1 双线性插值

纹理放大通常会导致纹理分辨率不足(纹理太小,很多pixel会映射到同一个texel上)

解决方法:双线性插值

  • Step 1. 线性插值: l e r p ( x , v 0 , v 1 ) = v 0 + x ( v 1 − v 0 ) lerp(x,v_0,v_1)=v_0+x(v_1-v_0) lerp(x,v0,v1)=v0+x(v1v0) x x x [ 0 , 1 ] [0,1] [0,1]上的指
  • Step 2. 两个辅助插值(水平):
    u 0 = l e r p ( s , u 00 , u 10 ) u_0=lerp(s,u_{00},u_{10}) u0=lerp(s,u00,u10)
    u 1 = l e r p ( s , u 01 , u 11 ) u_1=lerp(s,u_{01},u_{11}) u1=lerp(s,u01,u11)
  • Step 3. 竖直方向插值,得到结果: f ( x , y ) = l e r p ( t , u 0 , u 1 ) f(x,y)=lerp(t,u_0,u_1) f(x,y)=lerp(t,u0,u1)

如果在正中间,能得到四个点的平均值。

1.2.2 Mipmap


形成原因:像素覆盖区域各不相同,一个像素覆盖纹理区域过大,会产生走样


解决方法:

  • 超采样:OK,但花销高!
  • Mipmap:只能做高速、近似、正方形的范围查询,存储量比原来增加了三分之一
    理论:


    具体操作:


    L − L- L长度微分,大概就是说像素覆盖纹理的一小片区域(近似成正方形)

1.2.3 三线性插值

在双线性插值的基础上,加一个层与层之间的插值。
两次查询,一次插值,结果完全连续,默认方法。

1.2.4 局限性

Mipmap局限性:远处模糊

解决部分三线性插值的方法:各向异性过滤Anisotropic Filter(考虑的方向性????)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值