随笔-341  评论-2670  文章-0  trackbacks-0

    每年总有那么几个星期不想写编译器,这个时候做做ray tracing就变成一件很美妙的事情了。因此这个星期重写了当年那个超烂的光线追踪,然后加上了贴图的功能。当然图是可以直接贴在物体上的,还支持了法线贴图,譬如说下面做的地球在不同方向的光线的照射下显得有立体效果:


    之所以FPS有16是因为我已经不再当年那个破thinkpad上渲染,而在一个i7四核超线程三通道的CPU上做了。渲染的时候为了简单,把屏幕等分成了八行,然后创建八个线程分别绑定到八个CPU上面去(SetThreadAffinityMask),最后渲染完出来。当然比起那些专业的还是显得相当慢,现在很多光线追踪软件都用了GPU来做,不过我GPU也没用,SSE指令也没用,就纯粹C++写。如今也懒得用C++做GUI了,所以把核心用C++做成了之后,export几个函数出来,用C#的P/Invoke直接调用。C++渲染完以后给一个HBITMAP,C#拿过来就往窗口上画,还是十分方便的哈。多语言开发万岁。

    重写了光线追踪之后仍然把折射和反射给做了,因此可以做出个类似凸透镜一样的东西:


    需要提一下的是,做贴图的时候实现了nearest、linear和bicubic三种插值方法。nearest基本上就是不插值,所以放大了之后会有马赛克效果。linear是线性插值,如果放得太大还是能看出一点模糊的马赛克。bicubic效果就好很多了,如果大家有兴趣的话可以到这里去看。为了达到更好的效果,后面还有计划做ray differential和各向异性过滤。ray differential之后就可以做photon mapping(一种比较高效的全局光照模型)了。做完photon mapping之后,无聊的心情大概就结束了,可以继续写编译器了吧。

    嗯嗯,虽然ray differential和photon mapping还没做,我就先把代码丢上啦,不仅可以做备份,大家也能搞下来看一看。当然需要有Visual Studio 2010才能编译的。选择release编译之后到release文件夹下去启动,debug的话慢的不能忍。而且我的多线程模型是一个核(超线程的话算两个)一个线程,那些古老的双核CPU大概性能会很惨不忍赌吧……

 

posted on 2011-01-08 23:54 陈梓瀚(vczh) 阅读(6800) 评论(15)  编辑 收藏 引用 所属分类: 3D

评论:
# re: 图形学真是一个打发时间的好东西 2011-01-09 00:21 | 陈昱(CY)
沙发,没有折射反射的快接近实时了  回复  更多评论
  
# re: 图形学真是一个打发时间的好东西 2011-01-09 01:10 | flyliying
F1 很流畅
F2 就剩8fps了
F3 F4 都是7.几  回复  更多评论
  
# re: 图形学真是一个打发时间的好东西 2011-01-09 01:18 | 陈梓瀚(vczh)
@flyliying
嗯,这个性能跟CPU的性能是严格挂钩的。话说F4应该比F2F3都慢很多才是,怎么你都差不多……  回复  更多评论
  
# re: 图形学真是一个打发时间的好东西 2011-01-09 02:04 | mm
背景。。。  回复  更多评论
  
# re: 图形学真是一个打发时间的好东西 2011-01-09 03:01 | flyliying
场景2是F3 F4差不多,场景1就差很远  回复  更多评论
  
# re: 图形学真是一个打发时间的好东西 2011-01-09 04:07 | ooseven
非常理解博主的心情,我以前就说了,做智能提示,如果该语言支持的语法稍微复杂一点,连自杀的心情都有。以后你的语言如果支持模板就更能体会这种心情。不要放弃,加油。
  回复  更多评论
  
# re: 图形学真是一个打发时间的好东西 2011-01-09 05:22 | 陈梓瀚(vczh)
@ooseven
其实语法复杂一点关系都没有哈,我做了这么多年已经对处理各种复杂语法得心应手了,真正的原因是做那个东西的视觉刺激太少……IDE里面的语法分析器是我写的一个读文法生成代码的代码生成器生成的,所以其实什么语法都是一样的……  回复  更多评论
  
# re: 图形学真是一个打发时间的好东西 2011-01-09 09:23 | ooseven
@陈梓瀚(vczh)
嗯,到了继承,动多态,静多态,模板,泛型这一级的智能提示,语法树已经帮不上多少忙了。而需要推导。
按说,推导过程只要编译器写出来了,算法照抄就是,但是,实际可没这么乐观,因为智能提示需要在用户不断动态变化的代码,以及语法尚不完整的情况下进行有限的推导,甚至是联想似推导,所以非常的难。你没看到微软做了这么多年还是做不过vcassist。而其实,vcassist也做得不怎么样,你随便用一个比较复杂的模板库在vcassist下试试,比如boost,很容易的就能使他哑火!
  回复  更多评论
  
# re: 图形学真是一个打发时间的好东西 2011-01-09 09:47 | 陈梓瀚(vczh)
@ooseven
代码残缺不全和用户动态输入的问题我已经解决了你可以看我之前的文章哈。唯一的问题其实是性能问题,这个还得再改一改。功能问题不是问题。当然C++是唯一一个intellisense很难做的语言,不过我显然也不会试图去做C++的intellisensen。至于其他语言,还是不太难的。  回复  更多评论
  
# re: 图形学真是一个打发时间的好东西 2011-01-09 18:27 | 空明流转
@ooseven
C++的IS难做其实是C++特有的问题。别的语言都没这么夸张。  回复  更多评论
  
# re: 图形学真是一个打发时间的好东西[未登录] 2011-01-24 00:12 | zq
提示SimulatorCore.dll没有  回复  更多评论
  
# re: 图形学真是一个打发时间的好东西 2011-01-24 08:30 | 陈梓瀚(vczh)
@zq
两个工程一起build,dll就是那个C++的  回复  更多评论
  
# re: 图形学真是一个打发时间的好东西 2011-02-13 23:48 | 刘柳
偶尔看到这个网页,我是大四学生,参加了今年的研究生考试计算机方向,将来也想走图形学,请问我想在为将来学图形学,做哪些补充准备,还有请问博主的背景是什么,  回复  更多评论
  
# re: 图形学真是一个打发时间的好东西 2011-02-14 00:44 | 陈梓瀚(vczh)
@刘柳
本科毕业,在某著名公司开发一个高性能程序的GUI部分。  回复  更多评论
  
# re: 图形学真是一个打发时间的好东西 2011-02-14 00:44 | 陈梓瀚(vczh)
@刘柳
我认为研究生会给你系统培训的,反正都是一些数学知识和技巧,也是很容易买到书的。没事多看看siggraph。  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理