有自己生成LIGHTMAP的吗?

littlepig_2002 2004-08-16 09:28:09
多边形上的光照值是在3D空间中生成的吗? 如何将3D空间中生成的光照值映射到LIGHTMAP中? 多少个多边形共用一个LIGHTMAP? 有没有相关的文章?
...全文
447 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
铜戈 2004-08-19
  • 打赏
  • 举报
回复
littlepig_2002(小朱) :
是得,我实现了一个lightmap生成器,如果说纯粹的研究技术前后共花了1个多月得时间吧。但是如果包括其他部分,比如引擎的和lightmap相关的基础设施,编辑器等等。最终可以实用的版本共花了4个月左右的时间。这还不包括后来的测试和维护。不过这是我第一次做lightmapper。如果以前有过相关经验,可能花的时间会少些。
bopengbopeng 2004-08-19
  • 打赏
  • 举报
回复
lightmap一般都是用radiosity生成的。
ajn_sailing 2004-08-17
  • 打赏
  • 举报
回复
up
寻开心 2004-08-16
  • 打赏
  • 举报
回复
常用的lightmap都是预先计算好的。
要自己计算lightmap就比较麻烦,需要使用类似光线跟踪或者是辐射度的算法按照光照计算的模式来生成的。
寻开心 2004-08-16
  • 打赏
  • 举报
回复
以前测试的时候,做过一个简单的
光线跟踪算法本身并不复杂
它是可以设计成为并行模式的算法的
光线跟踪的速度受场景复杂程度影响很大,因为要不段进行相交计算,反射,折射,光照等计算,这些都很耗时间。
速度的快慢还要受代码优化程度的影响,直线和各种曲线,曲面,包围盒等等相交的快速计算公式的优化很重要,直接影响到速度

光线跟踪理论上再写论文的机会不大,因为已经发展了几十年,是非常成熟的技术了。

lightmap技术本来就是预先计算的光照效果图替代实时渲染的效果的手段,lightmap图生成的精度和速度是多方面因素决定,也不一定很慢,看复杂程度了。
大多数是不会实时计算的,但是不是说就不能进行实时计算,看具体的需求了。
littlepig_2002 2004-08-16
  • 打赏
  • 举报
回复
楼上的老兄实现了自己的光照图生成器了吗? 大概用了多长时间?
有没有写过光线跟踪论文的老兄, 用了多长时间.
铜戈 2004-08-16
  • 打赏
  • 举报
回复
happy__888([顾问团]寻开心):
lightmap没有实时算的,都是预计算然后使用的。所以效率对最终游戏来说效率主要是由lightmap大小,lightmap量来决定的,还有就是使用了lightmap会增加传输率,因为原来模型很多共享顶点的三角形需要复制共享顶点。

另外max的Render To texture是生成lightmap的一个很不错的办法,不过也有它的限制,他生成的贴图对于最终渲染来说不一定是最优的,很可能浪费很多的贴图空间,所以国外有很多引擎都是自己计算lightmap的。不过这个要看具体需要,能使用是最好的办法。

littlepig_2002(小朱):
没错

一般使用了lightmap就不太会使用phone 等局部光照的算法了,因为反正是预计算,一般都是用效果更好的全局光照算法,如辐射度。raytracer的化据我所知至少max里面的算法是视角相关的,不能用来渲染lightmap,不知道有没有其他的视角无关的光线跟踪算法。辐射度是使用的最多的生成lightmap的算法了。

如果你是第一次接触lightmap不妨试试用max来生成lightmap。不然就准备投入大量的精力和时间来做一个自己的lightmapper吧。
littlepig_2002 2004-08-16
  • 打赏
  • 举报
回复
不错.
是不是3D中生成表面上一个点的颜色值使用图形学中介绍的算法. 比如像PHONG, 光线跟踪之类的? 只不过生成LIGHTMAP是将这些计算出来的光照值存放TEXTURE中?
寻开心 2004-08-16
  • 打赏
  • 举报
回复
还有一个办法,是可以利用max6建模,同时在其中指定光照,利用max的特性,可以把渲染效果作为贴图输出成为lightmap贴图,实质上就是关闭d3d的光照计算,直接用max渲染出来的效果来使用了。

无论是光线跟踪还是辐射度算法,生成光照贴图的计算量都是非常庞大的,不是实时游戏或者是程序的有效手段。
铜戈 2004-08-16
  • 打赏
  • 举报
回复
是的,是在3D空间中计算出来的。一般是将贴图的一个象素映射到3D空间中计算它的光照,而不是反过来。

自己计算lightmap最困难的步骤其实就在从uv空间转换到世界空间,还有就是生成的每个多边形的lightmap的pack问题。

第一个问题的相关文章还是不少的
这里有一篇介绍的比较详细
http://www.flipcode.com/articles/article_lightmapping.shtml
delphi3d上还有一篇介绍辐射度渲染lightmap的文章,这片文章同时也介绍了如何uv-》world的转换算法和原理,讲的比较简洁。
http://www.flipcode.com/articles/article_lightmapping.shtml

关于第二个问题,目前我只看到一篇文章,他使用类似2维空间bsp的方法来将生成的lightmap紧凑的拼在一张贴图上(或者几张)
http://www.blackpawn.com/texts/lightmaps/default.html

8,304

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧