Archive

Posts Tagged ‘法线映射’

webp格式试用小结

April 22nd, 2012 7 comments

webp格式是google推出的一个意欲取代jpeg的图像压缩格式;支持无损或有损压缩,另外还支持alpha通道,甚至支持动画,看起来野心不小。官方给出的数据是:无损压缩时比png文件小28%,有损压缩时在同等画质(是的,这是有客观标准的,请搜 SSIM )情况下,比jpg文件小25%~34%。当然,也可以说在同等文件尺寸的条件下,画质比jpeg要好。

之前参与的一个项目要求动态下载资源,当时为了最小化下载带宽占用,采用jpeg作为纹理存储格式,下载完成后解码并压缩成dxt格式后使用。于是想研究一下webp能不能在这种应用场景下取代jpeg,我较为关心两点:一方面是否真的如google所说相同画质下文件尺寸能够大幅减小;另一方面更担心的是encode/decode,尤其是decode的效率,这个在google官方的webp主页上几乎只字未提。

Read more…

Categories: 程序/算法 Tags: ,

法线图可以镜像映射吗?

February 21st, 2008 No comments

早先美术问过我法线图是否可以象diffuse纹理一样应用镜像映射,所谓镜像映射是指对称的模型只画一半的纹理,一半模型正常映射另一半翻转映射。

当时我想了五秒钟回答说不可以,因为很容易想到虽然图像被翻转了,但是像素颜色所代表的法线方向并没有相应翻转,所以凹凸会变反。

但是昨天美术做了个实验却发现采用了镜像映射以后光照的结果看起来却是对的……

回家自己画了图才发现原来想错了。原理很简单,镜像映射的部分UV轴(之一,取决于哪个轴的镜像)也被翻转了。如下图,法线图上偏红的表示法线向U方向偏移(对应纹理空间就是向“右”偏移);做了U轴镜像后,实际上红色就变成表示向左偏移了(仍然是向U轴偏移)。

21_010440_mirror

Read more…

Categories: 程序/算法 Tags: ,

法线映射基本原理和相关的顶点数据压缩

May 22nd, 2006 No comments

输入到固定渲染管线的顶点结构虽然可以定制,但也不是完全自由的,比如顶点位置必须是float3,纹理坐标float2,法线float3等等。如果使用可编程管线,由于VS的输入可以自由解析,所以相对来说就增加了很多灵活性。

在使用切线空间的法线映射(normalmap)时,一般来说顶点数据中除了法线向量外还需要加入tangent向量和binormal向量信息,以便在VS中计算切线空间变换矩阵。其中tangent是切平面上纹理坐标u的正方向,binormal是切平面上纹理坐标v的正方向。normal,tangent和binormal三者互相垂直,构成了切线空间坐标系,于是切线空间到世界空间的变换矩阵就是 float3x3( tangent, binormal, normal )

法线映射的实现一般来说有两种:

1。在vertex shader中计算出切线空间变换矩阵(如上文所述),并将该矩阵输出。在pixel shader中用得到的矩阵将法线图中采样得到的切线空间的法向量变换到世界空间,然后再进行后续的光照计算。

2。同样在vertex shader中计算出切线变换矩阵,但不输出,而是在VS中将光线方向逆向变换到切线空间,将切线空间的光线方向输出。在PS中所有的计算都在切线空间进行。

Read more…

Categories: 程序/算法 Tags: ,

世界空间的法线映射

May 22nd, 2006 No comments

最近一直在研究地形相关的东西,其中一个问题就是地形在经过了LOD处理之后,顶点光照变得不再适用。因为patch的LOD级别变化时,一些顶点会突然出现或消失,如果采用顶点光照,pop顶点附近的亮度就会发生突然的改变,看起来很不自然;另一个缺点是视野中远处的地形会缺乏光照细节,因为顶点很少。

于是就考虑使用一个法线图来计算光照,分辨率只需要每地形格一个象素,可以根据顶点坐标事先处理好。这样在近处就能有和顶点光照同样的细节度,而远处不论mesh的精度有多低,光照细节始终保持不变。地形本身不会运动,所以这种法线映射可以是世界空间的,也就是说省去了切线变换等计算(关于切线空间法线映射的原理可以看前一篇文章),在PS中采样到的法线已经是世界空间的向量,可以直接拿来计算光照,这样也不用写VS了。另外由于使用了法线映射并且不需要计算切线变换矩阵,顶点数据中就不需要附带法线信息了。

Read more…

Categories: 程序/算法 Tags: , ,