从C++到C#——穿行于Native与.Net 托管代码之间
0微软在.Net平台中提供了大量丰富的语言,库,并为之提供了非常强大的开发工具。借用.Net平台,我们可以非常容易的开发基于Windows的应用,与采用C++相比,使用C#语言开发相同功能的软件可以极大的提升开发效率,缩短开发周期,减少Bug。
然而,往往现存有大量的积累代码是基于原生语言开发的,当我们决定采用C#时,必须考虑到与现存的软件组件交互的能力,具体而言——如何在一个以C++语言为主的项目中引入.NET组件?如何在.NET组件中使用C++代码库提供的功能?
在游戏项目中,比较理想的情况是底层的3D引擎采用C++编写,而上层编辑器则采用C#编写,这样可以兼顾引擎的运行效率和编辑器的开发效率。一个值得一提的案例是UDK(Unreal引擎的开发包),其中就采用了C++语言与.NET组件相结合的模式,其界面上相当一部分新功能是采用.NET开发的。
在3D游戏中采用场景管理的意义
0我们常说3D引擎应当包含若干功能:材质,模型,动画等等,这些功能我们很好理解,模型是我们需要渲染的几何体,材质表现的是几何体如何对光照如何做出回应,动画(特别的,骨骼动画)往往是3D世界中可运动模型的基础。除了这些与渲染直接关联的概念之外,往往还有个与渲染看似无关的概念:场景管理。
游戏渲染当中常用的场景管理往往被称为Scene Graph:它的实现通常采用树状结构,构成它的基本单位是节点,一个节点可以有若干个子节点,并且(除了根节点之外)往往有且只有一个父节点。
在实际游戏当中,对于需要渲染的几何体,比如静态的Mesh或者有Skeleton的Mesh,其本身不包含世界变换信息,而是由其所处的节点决定其位置与朝向。很久以前读Ogre的源码看到它就是这么做的,然而问题是,为什么必须要这么做?我一直心存疑惑,如果不采用Scene Graph的方案,我们给每一个需要渲染的模型赋予世界变换信息,那么这个模型不是一样可以渲染么?为什么非要把变换信息与模型本身分离开?分开有什么好处?而不这样做又有什么缺点呢?
D3D基础 – 光照,材质与着色#1
0初接触d3d时,相信许多初学者和我一样,虽然对3D实时渲染的原理有所了解,但是却对整体的管线结构有所困惑,包括可能许多做3d游戏的程序员,由于常常采用封装好的引擎做上层逻辑开发,因此对底层的架构也未必了解得十分透彻。
长久以来,对3d图形学的底层技术,我一直也是只了解个只鳞半爪而已,最近一段时间,在工作中不断的接触到这方面的知识,才有了比较系统的思考与总结,本文记叙了我学习dx管线的一些思考,由于水平所限以及尚未对最新的DX11架构有所关注,所以本文不涵盖DX11的最新架构,只涉及DX9及以前的知识结构,虽然如此,但是相信如果系统的掌握了这块知识,对了解后续的新技术也是有所帮助的。
本文主要是针对对3D渲染知识有一定了解,然而对D3D的结构却不是很清楚的同学,把DX8/9的管线结构做了一番说明,将固定管线的光照、纹理混合与可编程管线加以对比,期望对这一块知识有一个比较完整的总结。
目录
1. 硬件加速的3D渲染
2. 材质与光照
3. 变换,光照与顶点着色器
4. 纹理与像素着色器
5. Alpha测试,深度测试与Alpha混合
6. 更多话题
溶解效果的原理与实现#1
0在游戏中实现溶解效果,往往有两种选择:其一是采用多重纹理;其二是采用模板缓冲。
本文说明采用多重纹理方案时如何实现溶解效果,采用模板缓冲的方案容后再补。
上图是一个利用PixelShader达成的效果,其原理是,当我们把一个面片绘制到渲染表面上时,将特定像素的Alpha值设为0,从而在绘制到表面与背景混合时,达到镂空的效果。镂空的图案由美术指定一张Mask纹理确定。譬如在上图的效果中,我利用了下面这样的两张纹理图(左图是前景贴图,右图作为Mask),美术可以通过指定不同的Mask图,实现不同类型的逐渐消解/生成的效果:
实现此效果需要两张贴图,一张是物体表面的纹理,另一张作为溶解的Mask图。
有趣的进化心理学
0最近在读《进化心理学》,进化心理学是心理学中非常有意思的一个领域,近些年来发展非常快,成果也非常多。通过进化的观点来为人类及其他物种的许多行为和心理偏好寻找解释,是一个非常有趣的解读方式。
通俗的说,所有的物种包括人类的很大一部分行为和心理机制都是在自然选择的过程中被逐步筛选出来的——筛选的原则是这种行为或心理机制是否曾经为该物种的生存或者繁殖提供了某种好处,从而使得持有该基因的个体更容易获得选择优势,并且在繁殖的过程中将这种行为/心理机制的基因传递给了后代。这样,最终延续下来的个体大都保留了该行为方式/心理机制。
简而言之,进化心理学的核心观点可以简述为:自然选择的压力持续作用,种群中的部分个体有某种可由基因操控的行为或者心理机制使其在自然选择的压力下拥有生存或繁殖上的优势,繁殖行为将该基因及其决定的行为、心理机制和可能存在的副产品传递给后代。
人类对蛇有天生的恐惧感,这源于我们祖先在进化过程中生命不断受到蛇的威胁,获得了对蛇的恐惧感的人更好的适应了有蛇存在的环境,从而有更高的几率活下来。但是由于进化机制只能在非常大的时间尺度上起作用——因此现代社会的汽车出现才刚刚100多年的时间,虽然每年丧生于车轮下的人数远远多于丧生于蛇的攻击的人数,但是在短短的几代人的时间里,人类还未能对汽车还未能建立起相应的心理机制。(事实上,如果人类社会的秩序和法律持续发展,遵守秩序和法规可以带来安全性和生存优势的话,也许未来社会的中人类会进化出遵守秩序和法规的心理机制)