【计算机图形学入门】笔记9:Shading3着色(插值、高级纹理映射)

本文介绍了图形渲染中纹理映射的技术,包括重心坐标在三角形内部的差值应用,双线性差值用于纹理放大的解决方案,以及面对纹理过大或过小问题的处理方法。讨论了Mipmap和三线性差值在纹理过滤中的作用,以及各向异性过滤以改善视觉效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Barycentric Coordinates 重心坐标

为了做三角形内部的差值而引入,希望通过三角形的顶点对三角形内部某一个值都能有一个平滑的过渡。

What do we want to interpolate?差值能做什么?
• Texture coordinates, colors, normal vector 可以差值纹理坐标,颜色,法向量

重心坐标是定义在三角形上的,一个三角形有一个重心坐标。

请添加图片描述

A coordinate system for triangles(α ,β ,γ):重心坐标

三角形所在平面上任意一点xy,都可以用三个顶点他们坐标的线性组合来表示,只要满足一个条件(α +β +γ=1)。等于1是为了现在这个点在三角形所在的平面内

如果这个点在三角形内还需要满足(α ,β ,γ)这三个系数必须是非负的。Inside the triangle if all three coordinates are non-negative

1.A点自己的重心坐标

请添加图片描述

2.如何求出任意点的重心坐标?

——利用小三角形的面积求

请添加图片描述

三角形自己的重心坐标:(1/3,1/3,1/3),把三角形分为了3个等面积的三角形

请添加图片描述

投影后重心坐标会发生变化,那么如何把已经投影到屏幕上的坐标再投影回去呢?使用逆变换

也就是说在三维空间中的属性建议在三维空间中做差值然后再把这个值对应到二维结果上去

请添加图片描述

任何一个点只要有重心坐标就可以差值任何的属性。

2.如何把纹理应用在实际的渲染中?Applying Textures

屏幕上任何一个采样点都有一个位置,都对应一个纹理坐标uv,之前纹理坐标都定义在三角形的顶点上,现在都可以算出来了。

请添加图片描述

那么如果这样做会出现什么问题呢?

3.Texture Magnification纹理放大。(解决纹理小的问题)

如果纹理太小怎么办(如果纹理只有256*256但要求分辨率为4k的墙进行渲染),也就是说我们看一个很高分辨率的墙,任意一个点去查这个纹理的时候,会查到一些非整数的值,也就是说纹理太小了,纹理就会被拉大。

解决办法:

对于任何墙上的一个点(一个像素),都可以找到它对应的纹理上的一个位置,这个位置可能不是整数,那我们就把它四舍五入为整数。

但是这样也会产生不好的视觉效果,因为一小块点的像素都被划分为了同样的颜色纹理,没有平滑的过渡。

请添加图片描述

双线性差值Bilinear Interpolation:做了两趟差值,水平一趟竖直一趟。

请添加图片描述

这样的话小红点就综合考虑了它周边4个点的颜色,目的是达到平滑过渡。

请添加图片描述

Bicubic:取临近16个做水平和竖直的差值,每次用4个做三次的差值,运算量大效果好。

4.Texture Magnification (hard case) 如果纹理太大怎么办?

近处会产生锯齿,远处会产生摩尔纹

请添加图片描述

当像素覆盖的纹理区域比较大的时候,不能简单的用中心点的特征来评判整个像素的特征这样简单的采样。

请添加图片描述

如果使用超采样(一个像素用更多的样本来采样,比如右图512个点取平均)来解决,可以得到很好的结果但运算量会很大。

请添加图片描述

复习:走样是怎么来的?

答:采样的速度跟不上信号的频率,也就是信号变化过快。

当纹理特别大时,一个像素的像素内部就会包含很大一块纹理,这块纹理一直在变化,也就是说在一个像素内它的频率很高,可我们只用了一个采样点去采样。

一个像素内它有着非常高频的信息,我们希望把这个像素内的值给重构出来,那我们就应该需要一个更高频的采样方法,这就是为什么我们需要非常多采样点的原因。、

我们不想用这么多的采样点怎么办?既然采样会引起走样那我们不采样不就行了!

避免采样:像素会在纹理上覆盖很大一块区域,如果我立刻可以知道这块区域它的值平均是多少。

补充知识:点查询和范围查询。点查询:例如双线性差值,范围查询:例如找范围内的平均值

Mipmap范围查询

Allowing (fast, approx., square) range queries 允许快,近视,方形

逐步把一个图的分辨率缩小一半

请添加图片描述

每次存储量是原本的1/4,因为每次边长都砍去了一半,有四条边。也就是所有的图加起来最终比原来多出1/3的存储量。

Trilinear Interpolation三线性差值

请添加图片描述

将两个相邻层的双线性差值结果再差值一次就可得到三线性差值,例如求1.8层的话最初就是1层和2层的双线性差值结果

请添加图片描述

从三线性差值的结果可以看出,不同层次之间都有颜色渐变的过渡。

但是mipmap也会产生一些问题,比如会把远处的图像Overblur模糊过分了。

请添加图片描述

这是因为mipmap只能查询正方形区域内范围查询它的平均值,其差值也是近似出来的。

各向异性(在不同的方向上表现各不相同)过滤

允许对长方形的区域做快速范围查询。总共开销是原本的3倍

请添加图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立志冲海大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值