-
Recent Posts
Archives
- September 2010
- November 2009
- July 2009
- January 2009
- December 2008
- August 2008
- May 2008
- April 2008
- February 2008
- December 2007
- November 2007
- October 2007
- September 2007
- August 2007
- May 2007
- March 2007
- February 2007
- December 2006
- November 2006
- October 2006
- July 2006
- June 2006
- April 2006
- March 2006
- February 2006
- January 2006
- December 2005
- November 2005
Categories
Meta
Category Archives: 计算机与 Internet
Navier-Stokes Equation Solver
终于把NS方程的求解器写好了,目前边界条件为密闭容器,实现流体和场景物体交互。 求解采用半拉格朗日方法,能够模拟空间中的速度场和密度场随时间的变化,以及粒子在场中的运动,解的稳定性不依赖于dt。之后打算利用GPU的CTT或是RTT实现求解运算,做一些模拟测试(烟雾、云、水、火焰、蘑菇云…),加上图形渲染过程。
Posted in 计算机与 Internet
3 Comments
Real-time fluid simulation samples in NovodeX SDK
前段时间偶然更新了一下NovodeX SDK,虽然版本还是2.2,但是发现已经有实时流体模拟的演示了,性能非常好,仰慕中。。。 三个图分别演示了水池灌水、流体对刚体的作用力、不同粘度的流体滑落:
Posted in 计算机与 Internet
Leave a comment
= =!
本来想写个游戏引擎,后来感觉这个东西是苦力活,也没那么多时间浪费在这里,一个人还是放弃了,目前还有更重要的事情做,以后毕业设计打算写一些专业的东西。 原本打算写的引擎基本功能: 系统相关部分: 内存管理模块(内存泄漏捕捉,虚拟页映像调度。。。) 文件I/O模块(在独立于绘制的线程中进行海量的磁盘数据存取) 渲染设备(窗口管理,DX/GL的基本功能实现) 输入设备(例如DI) 音频/视频设备(例如DM/DS/FMOD) 网络通信模块(Socket) … 系统无关部分: 用户界面(xml+lua实现) 场景管理(场景图管理运动物体,BSP/Portal、Octree、PVS管理静态物体) 渲染队列(进行渲染状态排序,使得设备的渲染状态切换尽量少) 网格模型(支持LOD、PRT、Irradiance Volumes、近似光线跟踪,能应用各种材质Shader,还要支持简单几何体和特殊的Billboard、Decal等,以及常用的室外景物如地形、草地、天空、水面的过程式建模与绘制) 动画系统(场景图节点、网格模型节点动画,包括骨骼动画、逆向动力学,基于关键帧,支持样条轨迹等常用插值方法) 动力学系统(赋予场景中每个物体物理属性,打算用PhysX模拟,支持简单的物理模型建模,包括形体、关节、弹簧等,外加流体模拟:求解NS方程) 材质系统(管理各种材质Shader,考虑用CgFX) 粒子系统(基于动力学系统和Billboard) 立体音效(声音能附加到场景对象中,实现空间定位、障碍物遮挡模拟) AI脚本系统(作用于场景对象,实现常规的寻路、导航、决策、状态机…脚本可以用lua实现) 实例化模块(实现对象的重用,比如一个网格赋予不同的空间位置、动画序列、物理属性、AI…形成实例化的网格) … 还有好多好多编辑工具…
Posted in 计算机与 Internet
3 Comments
Photon Map心得
前几个星期的讨论班,基本上是围绕绘制的主题,从基本的渲染公式,到光线跟踪(Ray-tracing)、辐射度(Radiosity),以及近几年来比较热的光子图(Photon Map)。感觉又学到不少,以前只是听说过光子图的方法,现在总算理解原理了。 用光子图来做光线跟踪的前期处理,效率要比直接进行高维蒙特卡罗积分来得高。它通过从各个光源发射大量的光子,和场景几何求交,碰撞后或被折射、或被吸收、或被反射,并在碰撞点记录下光子的状态。所有的碰撞点的光子状态,组织起来就是光子图,通过光子图,我们可以得到几何体上各个位置的光通量,通过对某一位置周围的N个光子状态进行滤波采样,就能计算出该位置的颜色值。 为了加速采样,可以把光子图组织成平衡Kd树(一种特殊的二叉树空间分割),能够在O(logN)时间内定位。此外,在一些透明物体处,应该发射更多的光子以防止走样,因为这些地方可能会有光线焦散现象,属于高频信号区域。 光子图的优势在于处理复杂图形时效率高于传统的光线跟踪,而且传统的光线跟踪方法是无法模拟出光线焦散现象的。 下面这个图我在3ds max 8里渲染的,貌似用到了该技术。
Posted in 计算机与 Internet
Leave a comment
Precomputed Radiance Transfer心得
PRT(Precomputed Radiance Transfer)是近几年出现的渲染技术,能够在实时绘制物体时实现光线多次反射、软阴影、子表面散射等效果,可以真实地表现具有一定透明度的物体,例如皮肤。 其实现原理主要是通过预计算,渲染公式(p点在d方向的辐射度): L(p->d)=Le(p->d)+∫Fr(p,s->d)L(p<-s)Hnp(-s)ds p表示当前位置,s和d分别为入射光方向和出射光方向(球坐标方向)。 其中Fr为BRDF函数,Hnp(-s)是在p点入射光方向s与法线n夹角的余弦(lamberts定律)。 PRT的主要过程就是预先将Fr(p,s->d)和L(p<-s)用SH基函数展开,并将实时可变的光照系数和求和符号拿到积分号外面,而积分内部是可以预计算的常量(假定几何不会变形)。PRT的优点是在实现高质量的图形绘制时不影响绘制效率,而且环境光源可以实时变化,而缺点也是显而易见的,就是有光线相互作用的各个物体之间的相对位置必须保持不变。 下面的两个图都是来自DirectX SDK。宫殿那个不仅对场景物体进行了PRT计算,还计算了场景空间各个位置在各个方向的Irradiance(当然是计算有限个位置,采用自适应八叉树进行选择,然后可以通过立方插值获得各个位置的Irradiance),用于实现PRT物体在场景中运动时的局部光照采样。蝙蝠那个是Local Deformable PRT(只解决了旋转后的Radiance Transfer变化,并没有解决平移运动后的Radiance Transfer变化,所以还不能算相对位置可以自由变化),演示了光线的子表面散射效果。
Posted in 计算机与 Internet
3 Comments