texture的简单介绍
为了避免着色三角形时而远时而近,导致频繁切换Mipmap层级产生突兀的变化,实际上还需要使用了层级之间的插值(根据D值),这样就可实现两个层级之间切换的平滑过渡。
相当于着色物体的"皮肤",负责提供基础颜色,而为了方便表示纹理(可以想象下,一个3D物体的皮肤其实是可以展开成一张平面),往往使用一个二维颜色数组去表示纹理。
假设一个单位立方体包围了物体中心,当物体中心看向物体表面某个位置(x,y,z)时,从中心朝这个位置发出一条射线,此时射线会与单位立方体相交于某点。
之前介绍的光照计算中是不包含阴影的,而阴影映射(ShadowMapping)则是常见的实现阴影计算的手段,这里不在详细介绍了。
现实世界中,有些物体非常远(例如远处的山、树林、天空),无论观察者怎么移动,这个物体的大小是几乎没有什么变化的。这些物体往往是做成场景的背景图,一般被称为
简单介绍下自己
各向异性过滤的原理:在Mipmap的基础上提供横向伸缩和纵向伸缩的纹理层级(以适应横着和竖着的长条形状);但是这只能减少上述过度模糊现象的发生,因为实际渲染中还有斜向的长条形状或者其它难以近似的形状。
选择层级的方式则是计算屏幕像素点对应在纹理坐标中的最大微分(du、*中取变化最大的),从而得到近似正方形的边长L,最后通过log2函数可以得出层级D,这样就可以选择合适的Mipmap层级。
可压缩:由于Tangent-SpaceNormalMap中法线的Z方向总是正方向的,因此我们可以仅存储XY方向,而推导得到Z方向(通过向量标准化)。
纹理映射的一个问题是,当纹理颜色变化多且高分辨率(高频信息多),而渲染目标物体的像素量少(采样频率过低)时,很容易出现锯齿现象和摩尔纹现象。
现实世界的环境光是非常复杂的,存在大量经过多次反射后到达着色物体后再到达人眼的间接光(例如光照在窗户上,窗户再反射到杯子上,杯子再反射回人眼),这个过程中会把反射经过的物体颜色按一定权重混合在一起(因此看到的杯子混合了窗户的颜色),最后在着色物体形成近似“镜面反射”的效果(本质上就是接受了复杂环境光的结果)
如何做简单的自我介绍
假设一个单位球包围了物体中心,当物体中心看向物体表面某个位置(x,y,z)时,从中心朝这个位置发出一条射线,此时射线会与单位球相交于某点。
根据射线与单位球体的交点坐标(xo,yo,zo),推算出交点所在的偏航角和俯角(yaw,pitch),然后来映射成在球形贴图对应的(u,v)坐标点。
此外,还有一种少见的各向异性过滤方法:EWA过滤,大概原理就是任意一个不规则形状都可以拆解成不同的圆形,虽然通过多次查询的效果很好,但是性能代价非常高。
切线空间的法线贴图需要计算额外的空间变换:在计算光照时,需要统一各种方向向量所在的坐标空间,而法线贴图中存储的法线是切线空间下的方向,因此需要额外计算(模型空间下的法线贴图则不需要)。