softcore -- CPU rasterization

来源:互联网 发布:sql server id自增 编辑:程序博客网 时间:2024/05/22 05:02

    回到20世纪90年代,PC上进入3D图形硬件光栅化时代。VOODOO取代了CPU 光栅化渲染。随后出现NVIDIA TNT。直到GEFORCE将3DFX吞并。现在GPU的演变已经8年,基于屏幕上每个象素的复杂计算已经可以让老shader程序员忽略C和HLSL的区别。

    在下一代mmo 3d引擎工具平台开发之前,有必要重新回到GPU内部,关注几何与光栅管道。越来越复杂的shader效果一切均基于光栅器的运作机理。把工作从GPU搬回CPU目的为使图形开发人员打捞图形学基础,在次世代开发中更好的运用GPU功能。

    softcore 是一个软件光栅器。用于从场景物体的geometry transform, clipping,lighting, texture mapping, gouraud shading,到最后光栅化显示的整个图形处理管道技术演示。此项目为了保持代码清晰,省略了所有优化。只在可以使用SIMD和MULTITHREAD的步骤做出了标记。为了便于学习,project整合了id software doom3 sdk中SIMD和数学库代码。

    由于是两个星期业余时间制作,时间有限,主要目的在于演示3D加速核心算法,光栅化部分的tc,color数值计算和sampler部分仍然需要进一步tunning。需要去除溢出和浮点转整数规则调整。这些可由感兴趣人员自行修改。

 

 

softcore project

done:

* CPU soft rasterization

* Z-buffer

* Gouraud Shading

* Perspective Correct Texturemapping

* Near plane Clipping

* Back face culling(geometry)

* Directional lighting

not do:

x Phong shading/bump mapping

x Bilinear filter

x Mipmap

x Dynamic lightmap

x Vertex color export/import

x Optimization

 

 

以下是3DSMAX中场景原图。有了硬件BILINEAR效果还是不一样.....

 

 

多数初学者往往陷入3D API细节。认为绘制带有各种效果的三角形就是在做引擎。或者疲于把各种NV SDK或者D3D SDK的sample code加入自己的工程。当然,用orge3d这样的开源渲染器也可以做出《天龙八部》,《巨人》等商业产品,不过,想快速开发符合要求的次世代渲染器,需要大量实际工程方面的工作。针对范围很狭窄的渲染器而言,对渲染效果质量的调整,以及自行开发美术需要的效果,不是照抄fx composer或者render monkey那么简单。由于对GPU工作原理认识不深,对某些效果优化实现背后的理论基础认识不深,都会直接带来在实际工程中开发的障碍。或者导致质量下降。

按说做为图形程序员应该对3D光栅渲染的整条流水线做到倒背如流。不过3D硬件厂商加速了应用的进程。使得在屏幕上绘制三角形这件工作变得容易。也许会忽略人们对实时三维渲染的系统知识体系建立。在高级图形渲染逐渐进入更复杂光照,全局光,基于物理或模拟基于物理的技术层面之后,不对GPU工作机理做到透彻了解,在工作中会举步为艰。因为所有渲染工作逐渐移到GPU寄存器中用可编程代码进行。整条管道,从Geometry transform,clipping,vertex lighting,到pixel的shading都由程序员控制。但GPU仍然自动进行了screen space的一些工作。包括clipping,扫描线线性插值,texture sampler等。这是光栅器能够数百倍快于raytracing渲染的本质。但如果图形程序员不了解被GPU自动进行的工作,也会象C++程序员不了解缺省构造函数一样盲目。

举例,众所周知普通的shadowmap 完全不具备工程实用性。最重要的是因为出于内存限制,shadowmap texture尺寸不可能满足实际渲染精度需要。并且收到三角形在camera space中斜率影响巨大。Depth Bias问题的本质是什么。与何参数相关。目前采用的各种调节depthmap渲染精度的方法背后理论依据是什么。Perspective shadowmap,light space shadowmap等各自优化方法会遇到什么问题,各自优缺点,以及工程中如何tunning,尤其用于self-shadow的问题。基于PCF(percentage closer filter)的各种软阴影算法的应用。

在对bumpmap技术改进过程中,在tangent space使用ray-tracing的reliefmap以及relaxed cone stepping relief map,以及带有凹凸轮廓的releif map技术。以及parallax map,和其变种dynamic parallax occlusion map。如何在pixel级别用bilinear gouraud 和这些象素级别lighting进行LOD,如何改进parallax map随视角变化而产生纹理浮动的问题,如何调整线性迭代和2分查找对效率和效果的影响。甚至从本质上了解tangent space,phong shading,都要从软件光栅机理开始。

 

原创粉丝点击