随笔分类 -  Direct3D

最近不知道什么时候开始D3D11CreateDevice返回E_FAIL
摘要:查了一下MSDN,说这个函数返回E_FAIL表示:Attempted to create a device with the debug layer enabled and the layer is not installed.一个临时解决方法就是不要带debug layer创建设备。 最后上网查了一下,发现是安装KB2670838引起的,KB2670838详细说明里也有提到debug layer的问题及解决方法,http://support.microsoft.com/kb/2670838/en-us?fr=1,其中一个方法就是安装Windows 8 SDK。 阅读全文

posted @ 2013-05-19 18:39 rickerliang 阅读(768) 评论(0) 推荐(0)

Adaptive Transparency
摘要:最近看到一篇OIT的文章,文章里介绍了一种新方法实现OIT,文章可以在这里找到http://software.intel.com/en-us/articles/adaptive-transparency/,http://software.intel.com/en-us/articles/adaptive-transparency-hpg-2011。文章内介绍的方法把经典alphablending的递归混合公式拆开,避开backtofront的渲染限制,从而实现OIT。 首先回顾一下经典alphablending公式:C0=α0c0Cn=αncn+(1-αn)Cn-1其中,α代表该颜色的覆... 阅读全文

posted @ 2013-05-14 16:28 rickerliang 阅读(831) 评论(0) 推荐(0)

纹理映射
摘要:实时渲染领域内,纹理拾取、映射及过滤涉及大量理论知识,本文是对这些知识的总结和梳理,方便日后查阅。本文本应该在2011年末的时候出现,由于从那时起我就被无尽的加班缠绕,直到最近才得以解脱,所以到现在才有时间完成这个总结。纹理拾取、映射及过滤在实际应用主要集中在pixelshader阶段。ShaderModel3.0引入vertextexturefetch(VTF,可实现HeightMapping和DisplacementMapping),开启了在非pixelshader阶段进行纹理拾取的大门,而最新的ShaderModel5.0,纹理拾取可以在任意shader阶段进行(例如tessellat. 阅读全文

posted @ 2013-03-30 01:49 rickerliang 阅读(7898) 评论(2) 推荐(3)

Quaternion简记
摘要:q=(x,y,z,w)=(u,w)u是虚部向量,w是实部,当然,也可以标记为(a+bi+cj+dk),这时a是实部,b,c,d是虚部向量以下是在quaternion上的相等加减乘除的定义(u,a)=(v,b) 紧当u=v a=b时成立(u,a)±(v,b)=(u±v,a±b)(u,a)(v,b)=(av+bu+u×v,ab-u·v)乘法略显怪异,但之后你会发现这样定义的乘法是很有用的令p=(u,p4)=(p1,p2,p3,p4) q=(v,q4)=(q1,q2,q3,q4),乘法展开,其中u×v = (p2q3-p3q2,p3q1-p 阅读全文

posted @ 2012-12-05 20:33 rickerliang 阅读(616) 评论(0) 推荐(0)

XNA::ComputeFrustumFromProjection的一些注释
摘要:ComputeFrustumFromProjection是通过投影矩阵计算出view space下frustum的函数,Frustum在XNA内用这个结构描述struct Frustum{XMFLOAT3 Origin;XMFLOAT4 Orientation;FLOAT RightSlope;FLOAT LeftSlope;FLOAT TopSlope;FLOAT BottomSlope;FLOAT Near, Far;} 其中,view space下frustum的origin是原点,orientation是identity transform,所以,函数主要工作是通过projec... 阅读全文

posted @ 2012-11-28 14:31 rickerliang 阅读(578) 评论(0) 推荐(0)

Depth Of Field
摘要: 有这样一个物理现象,镜头对准被摄物体对焦,在底片上有清晰的成像,然而,在焦点前后一段短距离内的物体,在底片上仍然能得到较清晰的成像,离焦点更远的地方,光线开始扩散,影象变成模糊的,形成一个扩大的圆。这个圆叫做弥散圆。在焦点前后短距离内仍能得到较清晰的成像,是因为在这段距离内,弥散圆的直径比较小,在底片上人眼识别不出来。人眼不能识别的最大弥散圆直径称为允许弥散圆直径。在焦点前后,允许弥散圆直径之间的距离叫做焦深,前焦深和后焦深对应的物距之差就是景深,即Depth of Field(DOF)。如下图:图1 景深(Depth of field),弥散圆(Circle of confusio 阅读全文

posted @ 2011-06-02 16:55 rickerliang 阅读(3311) 评论(3) 推荐(5)

High Dynamic Range
摘要:本文描述的是实时渲染领域内的HDR高动态范围渲染技术,此技术可粗略理解为在LDR表面呈现HDR场景。 首先,DR动态范围是指某环境下某物理量最高值与最低值之比值。HDR全称High Dynamic Range,即高动态范围,通常指DR值达10的10次方以上。例如,室外太阳光的亮度与室内阴暗角落的地砖的亮度之比值可以达到10的10次方以上,这样的场景就可以称为具有高动态范围。 既然有高动态范围,相应也有低动态范围LDR,最明显的例子就是我们的电脑显示器。显示器的DR(即对比度)一般不会超过10的4次方。 如果不作任何处理,直接在LDR表面呈现HDR场景,可以预计,会出现过曝光或欠曝光情况,丢失. 阅读全文

posted @ 2011-05-25 11:45 rickerliang 阅读(2274) 评论(0) 推荐(0)

Screen Space Ambient Occlusion
摘要:Screen Space Ambient Occlusion 简称SSAO,是实现AO的一种方法,其运算量低且效果还可以接受,所以用作实时渲染AO算法。SSAO又细分有多种算法,其中有Crytek的SSAO,有nVidia的HBAO等,而最简便的是GameDev上一篇SSAO文章里的方法。无论什么方法,都是通过采样像素附近区域的几何信息,计算遮蔽因数。HBAO方法比较复杂,但有理论依据,而GameDev的方法比较简单,通过调整相关参数就能得到满意效果,如下图(是的,又是茶煲一个):本文也就是GameDev方法的中文注释。 既然SSAO称为SSAO,那么这个方法肯定是在Screen Space内 阅读全文

posted @ 2011-05-13 22:33 rickerliang 阅读(1551) 评论(6) 推荐(0)

Deferred Shading
摘要:Deferred Shading Deferred Shading是现在比较流行实时渲染方式,这种渲染方式能把Geometry和Lighting之间的耦合解开,把Forward Shading的Geometry Pass*Lighting Pass复杂度下降为Geometry Pass+Lighting Pass,特别适合于渲染较多动态光源的场景,本文将快速浏览实现Deferred Shading的各个阶段,并提供一个带源代码的简单的例子程序,这个程序可以在SM2.0及以上的硬件上运行,通过dx9接口实现。 Deferred Shading介绍可参阅《RealTime Rendering》3r 阅读全文

posted @ 2011-05-07 22:13 rickerliang 阅读(4060) 评论(3) 推荐(3)

实时渲染下的多线程协作:实践
摘要:在《实时渲染下的多线程协作》一文中提出的无等待多线程协作机制可应用于实时渲染,这是由于实时渲染下,每一帧与下一帧存在相关性。设想一下存在一个无限快速的渲染设备,导致帧速无限大,dt无限小,那么,场景内物体的运动变化在frame n时与frame n+1时无限接近,我们可以近似地把frame n与frame n+1的变化累积起来,一次过地在frame n+1时呈现出来,而frame n我们什么也不错。 以下DEMO就是基于上述观点:首先,DEMO显示两个自旋的六面体,左下角六面体自旋角度由主线程计算,右下角六面体由自旋角度由辅助线程计算;其次,辅助线程为了模拟复杂运算,在每计算一个自旋转换矩阵. 阅读全文

posted @ 2011-04-24 21:12 rickerliang 阅读(784) 评论(2) 推荐(0)

导航