DX11渲染引擎进展

这几天感觉很有必要把我的渲染引擎作下记录了。

到目前为止,引擎的开发已经算是完成了初期阶段,界面看起来比较荒凉,没什么东西。但是好在大难关通过的了:fbx文件的导入和shaderReflection。

解决了这两项,我就可以把精力放在shader上来,我现在感兴趣就是把原来Randerman中的图形学技术一点一点移植到实时渲染中。

完成的几个主要部分:

1.shader载入与参数自动更新。因为要体验很多不同的HLSL文件,所以,无论如何也不能和DXSDK中的demo一样,根据shader内容,手工设计结构体,创建Constant buffer给渲染管线传参数。那没法干活。所以,我就利用DX11提供的ShaderReflection提取参数信息,如constant buffer占用内存大小,每个参数的偏移量。然后申请一块内存,把指针绑定到UI元素上,由UI元素去控制参数更新。

原来曾经为dx11抛弃了Effect而苦恼了一段时间,但是后来发现SM5引进的东西还是很吸引人的,管理起来更顺手,可以按资源更新频率来组织constant buffer,比effect里用setValue之类的东西更新参数要好的多。不过遗憾的是,我没有办法在shader中添加原来buffer中的对参数的注释部分,比如最大值和最小值以及界面类型等,或者为某些参数添加semantic。不过也只好把参数写成固定的名称,凑合着用吧。

2 fbx的导入:3D模型的导入也被我视作一个很大的障碍,不能导入从max或maya houdini等三维软件中的3D模型,那什么工作也没法进行。

众多的3d模型格式中,首选的当然是通用性最好的。3ds就不考虑了,fbx可以在各大三维软件中都有支持,我认为fbx是最好的选择。因为着急看到东西,现在导入的是物体的material,texture,vertex,normal,uv等信息。动画和角色骨骼部分以后慢慢再说吧

3.多维材质的支持。也就是一个Mesh使用几种不同的材质。

以前使用其他虚拟现实平台做项目时,都是一个物体只能指定一个材质,所以,模型导入之前,必须在max中做一些额外的工作。即便是导入平台以后,原本一个物体也要四分五裂……总之都很不方便。何况还要考虑动画啊。

但是好在明白了drawIndexed()函数的意义,最后想通了:一个mesh的submesh,无非就是把indexbuffer,划分成几个subIndexbuffer,然后调用drawIndexed()渲染就可以了。

max的多维子材质是非常讨厌的,管理起来不方便,所以我就做成了maya和houdini那样的处理方式。没有max那种multi-Material材质

还有 tessllation ,shaderLinkage都已经测试完成,就等待添加了

进展的比较艰难,几度想放弃,但是还是坚持了下来

我把要完成的工作内容列举了一下,还是有很多急需解决的。

1.物体的拾取和选择,这需要加入物体坐标轴心的现实。就象maya那样的红绿蓝三个箭头那样的东西。

2.物体的wireframe现实方式

3.折射和反射

4.阴影

5.雾效

6添加用于处理后期特效(如模糊,光晕)的模块

7.粒子系统

……

猜你喜欢

转载自blog.csdn.net/udumbara007/article/details/7944881
今日推荐