Raytrace world

Chaos 的光线跟踪世界

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  4 随笔 :: 0 文章 :: 58 评论 :: 0 Trackbacks
 
一个支持 RIB 和 RSL 的高速 raytracer,高速得可以近实时进行光线跟踪。
 

大图
 
 
经过了一年多的断断续续的开发,BloomingQuad 终于已经成型了,并能向一些实际应用性工作迈进,比如 Ambient Occlusion ,或者 RSL Shader。

其实我已经写疯了,所以现在我似乎都不知道应该写什么来介绍它好。

然而,我刚刚毕业了,离开了舒服的学校,接下来必须面对吃饭问题。

所以、开门见山,我现在发布的 BloomingQuad 其实并不完善(应该说相当不完善),我 90% 是为了找工作才发布的,又或者说,希望能找到懂得它的作用和意义的合作伙伴。

很多人说我不切实际、又说我开发些没有 P 用的东西,也有很多人不屑,我不在乎,因为只要这个世界上依然有一个人懂得下面这些东西是什么,那就已经足够了。当然,还希望那个人能支持我继续做下去。
 

 
大图
 
Ambient Occlusion 演示。
 

 
把它作为商业用渲染器,在国内唯一有用武之地的就是为专业工作室定制特殊的渲染效果,又或是一些需要用到更开放的渲染技术的高端项目。简而言之、就是作为 In house Renderer.

但也必须先讲明白,开发和维护这么一个东西,是极其不容易的,在目前来说投入与产出可能不成正比,它的价值,必须在一段时间的积累后才能看到。 Pixar 开发的 PRMan 也不是一年半载就能为它渲染电影的,80 年的项目,到了 95 年才渲染出第一部动画电影。

尽管这是一场持久战,但若我们真想达到 Pixar 的高度,一味地研究别人开发出来的软件和技术是徒劳的,鼻子将永远被别人牵着走。

那么除了开发一个 PRMan 的替代品外,我也自认通过这个渲染器的开发,我已经对整个 RenderMan 体系有非常深入的了解,甚至对各种渲染器的工作体系和结构有了很深刻的认识。不仅仅是 RenderMan ,MentalRay 的 MI 架构也是我的重点研究部分,BloomingQuad 的前几版所使用的 Scene Description 就是类 MI 的节点式结构。

不过后来我觉得 RenderMan 比 MentalRay 要流行得多,而直接使用 RIB 会更划算,于是我开始把整个结构体系进行重写,以 RI Spec 3.3 为标准,力求可以完全符合 RI Spec 3.3 ,希望能渲染出和 PRMan (在轮廓和基本要素上)一致的图像。

当然这是非常艰难而痛苦的,特别是一个人、只能利用课余时间编写。
 
为了达到能在实际渲染中使用,我把整个渲染器都使用了 SSE/SSE2 指令优化,尤其是 Raytrace 核心部分,全部用汇编写成,速度“可以说”非常快,能达到(某一测试场景)1800 万次/秒,约是 Pixie 的 2 倍。

而最后,为了找到商业使用的机会,我修改了一下内核,使它能实现简单的 Realtime Raytrace,以直观的方法表现它到底有多快。
 

 
大图
 
 Realtime ~ 这个场景比较少面,所以也能达到 7 fps 左右,320 X 240
 

 
大图
 
400 X 300 的 realtime 演示,我绝对不会使用 Sphere、Box 这些直接简化了 Intersection 的东西来自欺欺人,所有演示的物体都是 General 多边形。

 
大图

 

支持 RSL 的编译与执行、上面的三个物体都分别使用了编写的 Shader ,盒子用了 Slim 生成的 Worley ,平面用了 step( x , mod() ) 形式的 Grid ,球体利用 s 坐标混合了 Thead 和 Spline ( Noise( P ) )。

 

另外我也终于完成了持久的“抗战”,写出了一个 RenderMan Shading Language 编译器与执行虚拟机。这个编译器符合 RI Spec 3.3 标准,能成功编译出 Slim 生成的各种 Shader ,而且支持 Constant Folding、Instruction Replacement、Dead Code Elimination 等优化。但目前它的光照部分(包括 Illumination 和 Illuminate 、Solar、Ambience)都在测试中,Gather 正在编写,而 Occlusion 和 Indirect Diffuse 只能靠命令行激活。


大图


 

相信有更多人(可能一共才只有几个吧)会关心它到底怎么在 Max、Maya 、XSI 中使用,其实很简单,RIB 非常流行,几乎所有的大型软件上都有导出 RIB 文件的软件,MAX 有 maxman,Maya 有 RAT、mayaman、liquid,XSI 有 rib 插件,LW 有 Lightman,Houdini 本身直接支持,所以根本不需要担心、所有的大型软件都能和 BloomingQuad 进行沟通。

而且我能保证 MTOR 从 Maya 里导出的东西能大部分正确渲染。

大部分是指哪些部分呢?其实目前仅仅是指多边形而已,而且最好是三角片面的多边形,又或者保证“合法”的多边形,若有重边或者法线有问题,都不能渲染。

上面测试用的两个人头模型,都是我自己在 Maya 里做的,然后用 MTOR 导出来渲染的,可以看看它到底渲染出来的结果准确不准确。

如果你想直接在 Maya 里渲染 —— No problem ,在 RAT 里设置一下就 OK 了。

 


大图

 

也可以在 Maya 里启动实时 raytrace ~  

 


 

说实在,这个 Realtime Raytrace 不太 Realtime,当然,我只是修改了一下 Render Loop 就拿出来了,里面的模型结构、Shading 体系,都是按照软渲染设计的,和普通软渲染共用同一个结构,没有作任何的实时渲染优化,所以能跑出这个 fps ,我自己就觉得已经 OK 了。

为了要说明它是 Realtime 的,我还设计了几个按键,i k l j , . 这六个,可以移动镜头,很简陋的功能而已,当然可以做得更复杂一些,但我目前只是演示一下我能做到什么地步,而怎么再精益求精则是在我解决了工作问题之后再想的事情了。

那么基本上都讲得 7788 了,开发过程还有很多有趣的东西,不过这只是很少数比较关心开发的人想要知道的。

 
其实这个所谓“渲染器”所能做到的还很有限,毕竟我只有一双手、一个脑袋,但我所希望的是能通过它让更多人看到,到底我们的开发能够做到些什么出来。
 
并不是说,别人的软件、所实现的功能,我们就一定绝对无法赶得上,这个说法是完全错误的。
 
问题在于,一直以来我们从来没有怎么在这上面投入过,大部分人都在观望,还有的在冷嘲热讽。
 
对,可能还没有这个市场、可能技术还不成熟,但必须有人去尝试,必须有人出来承担这个责任。
 
上面那些效果,在大部分人用商业渲染器看来,很幼稚。不过这仅仅是一个开始,我用一年时间做到了一个开始。
 
或许我最后还是要被迫放弃 CG 的工作,放弃我喜欢的开发,放弃我要超越 PRMan 的梦,但发这个帖子,除了为我自己找一个机会以外,更多的是希望大家在建模的时候、在 Rig 的时候、在 Surfacing 的时候、在 Key 动作的时候、在等待渲染的时候,能多想一想、什么时候我们能用我们自己的 CG 软件去做这些事情。

  


 

下载:

rar 包 1 2 

 


两个文件解压到任何一个文件夹都可以,如果想要在 Maya 里调用,就必须放到 RAT 能找到的目录里,比如任何一个在 PATH 里的目录。
 
注意!必须是支持 SSE2 指令集的机器(即 P4、PM、A64)才可以运行。
 
在命令行里输入:
 
bqrd -rt occlusion.rib                             
 
即可进入 Realtime 测试。
 
bqrd -oc 32 king-triangle.rib                  
 
测试渲染 Ambient Occlusion,其中 -oc X 是指定采样的数目。
 
而 rscl 是 RSL 的编译器,懂 RenderMan  的朋友可以试一下自己写 Shader 给 rscl 编译,.shader 的文件是已经编译好了的 Shader。
 
注意!illuminance、illuminate、gather 等 statement 目前仍不支持,所有的 Derivative 都有限度支持(不支持 Du() 与 Dv() ,dPdu 与 dPdv 的结果只能作为切线方向)。
 
其它都合符 RenderMan Interface Specification 3.3 。

 


p.s.

 
渲染完成后可以按 's' 快捷键把渲染结果储存成 TIFF 格式的图片。
 
渲染窗口中按 F1 可以看到其它快捷键表,可以显示独立通道、或者混合显示 alpha 等等。
 
posted on 2005-10-21 21:29 Chaos Chiao 阅读(1783) 评论(19)  编辑 收藏 引用 所属分类: Blooming Quad

评论

# re: About Blooming Quad,我的准实时光线跟踪渲染引擎 2005-10-21 23:11 Javen-Studio 咖啡小屋软件工作室
强烈支持你!其实我也想考虑做类似的事,比如写个游戏引擎
  回复  更多评论
  

# re: About Blooming Quad,我的准实时光线跟踪渲染引擎 2005-10-22 21:29 地狱门神
我也想做一个这样的东西,以后我肯定会考相关专业的,在这里支持你一下。  回复  更多评论
  

# re: About Blooming Quad,我的准实时光线跟踪渲染引擎 2005-11-01 09:00 IMC
很佩服你的执着!  回复  更多评论
  

# re: About Blooming Quad,我的准实时光线跟踪渲染引擎 2005-11-10 18:32 JOHN
很佩服你的精神!
在下有些慚愧呢, 但我会努力开发的。
  回复  更多评论
  

# re: About Blooming Quad,我的准实时光线跟踪渲染引擎 2006-02-23 05:00 maxman
不得不支持,路过,华人需要你!  回复  更多评论
  

# re: About Blooming Quad,我的准实时光线跟踪渲染引擎 2006-04-01 14:40 啊啊阿
我是菜鸟,这是用什么语言开发的?需要什么条件呀?  回复  更多评论
  

# re: About Blooming Quad,我的准实时光线跟踪渲染引擎 2006-04-01 14:43 啊啊阿
下载的文件不能解压?为什么?  回复  更多评论
  

# re: About Blooming Quad,我的准实时光线跟踪渲染引擎 2006-04-01 22:51 dkink
佩服你~~~

虽然 我看计算机 图形学 头晕~  回复  更多评论
  

# re: About Blooming Quad,我的准实时光线跟踪渲染引擎 2006-04-14 09:57 penny1
作为美术不得不强烈的支持你们!!  回复  更多评论
  

# re: About Blooming Quad,我的准实时光线跟踪渲染引擎 2006-04-14 13:04 NDD
我有一个问题 你如何使用sse的? 你是把基本的数据结构都弄成了m128
还是在不断进行转换?

每次发射sse的时候
是一次发射4个光线
还是同时计算一个光线的3(或者4)个分量

或者二个都用到了?


  回复  更多评论
  

# re: About Blooming Quad,我的准实时光线跟踪渲染引擎 2006-04-14 13:12 NDD
对了 如果需要在北京找工作的话,可以联系MS RA
他们需要游戏图形方面的人,我有一个同学才在那里做实习的

另外上海ubisoft不要去的好,最近那里管理层有点据说有点动乱...
  回复  更多评论
  

# re: About Blooming Quad,我的准实时光线跟踪渲染引擎 2006-04-26 11:49 margee
还少一个97004178.rar文件啊  回复  更多评论
  

# re: About Blooming Quad,我的准实时光线跟踪渲染引擎 2006-05-10 23:48 hpj
做得不错,我最近也在研究光线跟踪方面的工作。不知你有发文章了没,可以拜读一下吗  回复  更多评论
  

# 很吸引人,作为美术的我也支持你 2006-06-10 17:30 catman
很吸引人,作为美术的我也支持你,  回复  更多评论
  

# re: About Blooming Quad,我的准实时光线跟踪渲染引擎 2006-06-10 17:42 catman
对了如果需要游戏角色模型我可以提供,  回复  更多评论
  

# re: About Blooming Quad,我的准实时光线跟踪渲染引擎 2006-06-24 23:44 啊嵩
你是我的榜样。。
我会继续努力学习。!!
  回复  更多评论
  

# re: About Blooming Quad,我的准实时光线跟踪渲染引擎 2006-09-15 14:42 有名
为什么不把这个东西移植到Cell 芯片上,实现真正的实时光线追踪呢,现在这方面挺火爆的,你可以现在模拟器上做,反正现在PS3已经发售。

这种东西在医学成像,交互式3D游戏,工业造型上都有不错的前途。  回复  更多评论
  

# re: About Blooming Quad,我的准实时光线跟踪渲染引擎 2006-09-15 17:23 子弹
强  回复  更多评论
  

# re: About Blooming Quad,我的准实时光线跟踪渲染引擎 2007-09-12 23:01 路过
定  回复  更多评论
  


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
相关链接:
网站导航: