About texture atlas

lightmap的情结源自q3和cs;2002年,dx9刚刚出炉,显卡还是NV30,R300时代,那个时候像DOOM3那样的全动态实时光影,还是很奢侈的东西,q3,cs的lightmap处于热火阶段。

更有n多的q3,half-life的各种viewer;

如今,bake,或者叫Render To Texture,已经是3dsmax/maya/blender等软件的标配功能,可以很容易的渲染出lightmap,配合它们本身强大的模型,灯光的编辑功能和完美的渲染能力,制作精美的lightmap已经是很容易的事情;

然而我作为一个开发者,不管是源于创作的渴望,还是源于不甘心拿来主义,总是想探知这里面隐藏的奥秘。。。

为了深入研究这项技术,我看了q3map的一些东西,以及参考了别人写的一些代码和文章,以及flipcode上那篇著名的文章:

http://www.flipcode.com/archives/Light_Mapping_Theory_and_Implementation.shtml

在所有的文章中,对于如何计算光照以及阴影都介绍的很好;然而令我失望的是,对于如何创建lightmap却介绍的甚少;

后来自己研究了辐射度算法,开始尝试性的实现慕名已久的辐射度lightmap;3个月下来,实现了一个非常原始的版本,T型交接每有打断,阴影没有细分,最后不得不采用shadowmap来解决这个问题了;辐射度照明阴影没有问题,但是在创建lightmap以及lightmap uv unwrap上的问题非常大,而且占据了整个过程的大半以上;中间出现的问题,以及采取的各种弥补措施更是不计其数;相对而言计算辐射度的这个过程倒是所占比重很小很小;

后来在论坛上看到有人介绍texture atlas,一个从未见过的新概念进入了我的视野;随后了解到了d3dx 的uv altas函数;之后又找到了LSCM算法:

http://www.loria.fr/~petitjea/papers/siggraph02.pdf

接下来,一连串的发现都陆续进入了我的视野,3dsmax 的uvw unwrap插件(maxsdk有源码)实现的就是这项功能;

后来猜想那个开源的blender也有可能用到这个,一看blender,果不其然,搜到了lscm的文件;

opennl...这个线索从哪里来的忘掉了,可能是来自于blender中的一些文件,不过这条线索打开了一扇大门,让我发现了大名鼎鼎的alice project team 和 icg:

http://alice.loria.fr/

这个web站点好东西very多,opennl,Graphite

忘了主题了,,,这个站点就是研究texture atlas的真正发源地;Bruno Levy是个超级大牛;texture atlas,或者 uvw unwrap,就是把3d表面映射到2d 纹理空间的一种方法。

无论是运用何种方法计算lightmap,首先要把表面映射到纹理空间,要保持连续性,,否则strip无法使用,还要注意每个chart的边界问题。。。

好吧,就介绍到这里,如果你要做纹理展开相关的,希望这些线索对你有用。

 

 

 

 

你可能感兴趣的:(text)