随笔分类 - DirectX
摘要:OBJ文件是一种标准的3D模型文件格式,很适合用于3D软件模型之间的互导。比如在3dsMax或LightWave中建了一个模型,想把它调到Maya里面渲染或动画,导出OBJ文件就是一种很好的选择。目前几乎所有知名的3D软件都支持OBJ文件的读写,不过很多软件需要通过插件才能做到这一点。 OBJ文件特点 (1)OBJ是一种3D模型文件,因此不包含动画、材质特性、贴图路径、动力学、粒子等信息。 ...
阅读全文
摘要:DirectX Frequently Asked Questions Microsoft Corporation August 2005 Introduction This is a collection of Frequently Asked Questions (FAQ) about Microsoft DirectX. Contents: General DirectX Develop...
阅读全文
摘要:D3DVBF_1WEIGHTS 这几天一直在做MS3D的骨骼动画,以前没写过骨骼动画,因为对微软的X格式不太喜欢,而且看到它写的N多的代码感觉非常难看。MS3D格式比较简单,目前的状况是已经可以读取关键帧并且插值了,问题就是如何放进去渲染,当然不可能像OpenGL那样glBeign()和glEnd()把所有顶点乘一次,只能用顶点混合,今天又弄了一下午,使用的是索引缓冲技术,其实原理很简单,顶点...
阅读全文
摘要:一直想做软阴影,很早就看中了Variance Shadow Map,但是一直实现不了,概率论我学得很烂,不太能理解这个,不过切比雪夫不等式还是比较简单,基本思想就是我们可以使用期望和方差求得某分布区间的概率上限,用于ShadowMap就是我们可以得到当前深度值的区间在阴影图中的最大概率,这其实和PCF有类似,对于期望和方差的求法,大家可以看看 http://www.cnblogs.com/look...
阅读全文
摘要:这也应该是大气散射的一部分,但是一直没有加入,因为效率的问题无法解决,地形的顶点太多了,就算做过裁剪,因为涉及到顶点纹理,所以仍然很慢。不过,还好,Naty Hoffman提供了一篇简化计算的论文,名字叫《Rendering Outdoor Light Scattering in Real Time》,我试了一下,效率还可以,效果也不错。具体的公式大家可以看看论文,要我说清楚我也不行,涉及到多重积...
阅读全文
摘要:采用GPU GEMS3 上面的方法,在 Post-Process计算了容积光效果,不过这极为依赖于采样频率,我设置的是75次采样,帧率从60多下降了20多帧,不过仍然有明显的痕迹,目前没有找到什么好的优化方式,些许可以根据光源到屏幕像素点的具体动态调整采样频率,不过效率也应该提高不了太多。我再到网上找找。改动了一下,缩小到原场景图的 1/4 ,100次采样 PS:其实如果是Shader Model...
阅读全文
摘要:最近写的,把以前的代码改动了一下,现在这个地形算是基本完成了,基本技术采用的是GeoMipmap + 分块地形, 目前加载的是1024X1024 的高度图,帧率还可以,有60多帧,我的显卡是9300GS,这显卡也不太行。 今天本来打算将以前的大气渲染结合进来的,没想到半路碰到个问题一直没解决,在一个群里面问居然直接被踢了出来,难道这个问题太弱智了,我的顶点缓冲是固定的,然后是动态更新索引缓冲和三角...
阅读全文
摘要:【ZT】 3D中的OBJ文件格式详解 OBJ文件是Alias|Wavefront公司为它的一套基于工作站的3D建模和动画软 件"Advanced Visualizer"开发的一种标准3D模型文件格式,很适合用于3D软件模型之间的互导,也可以通过Maya读写。比如你在3dsMax或 LightWave中建了一个模型,想把它调到Maya里面渲染或动画,导出OBJ文件就是一种很好的选择。目前几...
阅读全文
摘要:最近出现的一种比较新的实时阴影渲染技术,专门用于渲染大型场景,感觉效果很好,但是有一个缺点就是场景需要多次渲染,它的中心思想是将屏幕像素分散到多个ShadowMap中,因为近处的东西细节较高,远处的东西细节较低,因此将视椎体分割,并将光源摄像机聚焦到对应的小视锥上,当然,视锥的分割有数学方法推导,具体可以查看PSSM或Light Space Perspective Shadow Maps 的论文,...
阅读全文
摘要:最近在写一个大型一点的Demo,就相当于毕业设计了吧,目前正在把以前学的东西逐个集成,昨天终于完成了大气渲染的这一部分,虽然以前也做个一个的,但是那只是一个实验性质的,不过还是相当有效,这次很快就完成了,我想做个比较完善的天空,加入云,云也应该加入光照计算,夜晚星空这些我也正在考虑,我把目前大气渲染的一些细节写出来,方便大家以后如果要使用的话可以用作参考。 先贴张效果图。 从视觉的角度来说应...
阅读全文
摘要:以前买的GPU精粹复印版到了,看了里面的大气渲染,很有兴趣,试着做了一个,实现了一下算法,算法主要是GPU Gems2里面的方程(还有NishiTa的论文,光看这Gpu Gems2压根就看不明白方程的含义),完全就没有考虑效率了,是在顶点上做的计算,因此精确度就难以保障了,而且球体的判断也出现了一些问题,地球背面居然也是亮的,不过从外面观察星球比较难以计算,主要是要计算两个球体的相交,包括地球和大...
阅读全文
摘要:我晕,FireFox刚才死了,白打了这么多字。 使用四叉树写了一个Lod地形, 应该叫Clod吧,连续的,不过连续性并不是太好,可能会出现很明显的抖动。画的是豆腐干(三角形扇),绘制过程中仅仅修改索引缓冲,所有的图元都是集中在一个索引缓冲的,不过因为三角形扇的特性,每帧率还是要调用很多个DIP, 现在的Lod只是根据视点的距离判断的,并没有判断地形的变化率。感觉写起来好困难,写到后面,错误越来越...
阅读全文
摘要:概念我不介绍了,其实实现起来也不是太难,大家可以去网上搜搜,我就不介绍了。 这个程序没有使用点精灵,而是使用了公告牌技术,而这个公告牌是基于视点的,计算方式我简要的说说。 设OXYZ坐标系中的一点P(x,y,z),我们要求对应于PUVN坐标系中位于同一坐标的点(x,y,z)在OXYZ坐标系中的位置,那么 这点在OXYZ中的位置为 x X U + y X V + z X N + P(视点位置)...
阅读全文
摘要:还是通过我们的Perlin Noise1. 创建4个纹理,大小分别为256,256,256,2562. 创建一个临时纹理,大小为32.3. 向临时纹理中添加随机数,并将其压缩到0-255范围内(相对于D3DFMT_A8R8G8B8格式)4. 分别使用1步中创建的纹理作为RenderTarget,将3中的纹理渲染到一个大小和RenderTarget相等的矩形上,注意纹理坐标每次在上一次的基础上乘以2...
阅读全文
摘要:工具->外部工具->添加(随便输入名字)。命令为C:\Program Files\Microsoft DirectX SDK (August 2009)\Utilities\bin\x86\fxc.exe。就是你的fxc.exe的地址。在参数里输入$(ItemPath) /Od /Zi /T fx_2_0 /LD /Fo 后面的一串其实就是fxc.exe里命令。同样方法适用CG编译器。...
阅读全文
摘要:DXUT编程指南. 收藏 DXUT设计指南 DXUT是一个建立在Direct3D API之上的,被大部分Direct3D指南和例子所使用的层。 它的目标是创建Direct3D例子、原型、工具,更容易的建立坚固、专业的游戏。 · DXUT概观 · 初始化DXUT · ...
阅读全文
摘要:意思我就不解释了,主要是最亮值和最暗值的比,屏幕有个极限,那就是0~255.这个范围太小了,不足以模拟一下环境,对于大于1的像素来说,会被直接夹到1.这意味着细节的丢失,12和20的值都变成了1,那么这不叫丢失么,因此,最主要的问题为将高动态范围HDR映射至低动态范围LDR.我们使用的是Tone Mapping。要使用ToneMapping,又要得到屏幕的平均亮度。因此问题变成了计算平均亮度。 ...
阅读全文
摘要:纹理坐标采样,看似简单,其实则不然,特别是DX9中的像素纹素对应,这对纹理的精确操作带来非常大的困难,至少对我来说,今天记录下刚才分析出的一些结论。 首先我们引入1个一维图片1x8它的维度是1x8的,我们首先绘制一个1x8的矩形。我们要把它精确对应到像素怎么办呢,答案是将矩形的位置左移-0.5个单位,这样做导致了什么样的结果呢?因为我们的纹理坐标是采用的像素点的坐标。原先的像素点也是矩形的顶点是...
阅读全文
摘要:多视口渲染主要是改变了视口矩阵,一般我们的Shader程序没有直接处理这个视口矩阵,注意多视口渲染的顺序void Render(){ Clear() GetViewport()保存原视口 BeginScene(); SetViewport(1); DrawObject(); EndScene(); BeginScene(); SetViewport(2); DrawObje...
阅读全文
摘要:按照那篇英文文档的方法,实现了一边软阴影,做出来的还是有点问题,可能主要是集中在那个PCF上,使用的取周围像素阴影平均值的方法,但是很明显,周围的点的深度和当前点的深度并不一样,而我们比较的阴影值仍然是使用的当前点的深度,因此会出现误差,这个误差我是自己调的,但是这样不好。然后我们再把阴影图片用Gussian Filter 进行使用两个一维卷积模糊一下,这样可以消除些锯齿,但是仍然不能完全消除,至...
阅读全文
浙公网安备 33010602011771号