虚幻引擎3 —— 渲染特性

本文介绍了虚幻引擎3的强大渲染特性,包括多线程渲染系统Gemini、64位色高精度动态渲染流程、支持各种后期特效以及高级动态投影等。引擎支持多种阴影技术,可在视觉效果上相互兼容并自由混合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

渲染特性

  • 多线程渲染系统——Gemini
  • 64位色高精度动态渲染流程。Gamma校正和线性颜色空间渲染器提供了完美的颜色精度,同时支持了各种后期特效例如强光溢出效应,镜头上的光晕和景深等效果。
  • 支持当前所有的基于像素的光照和渲染技术,包括使用法线贴图技术的参数化Phong光照;定制美工控制的材质光照模型包括各向异性效果;虚拟位移贴图;光强稀释函数;预计算的阴影蒙板技术,方向光亮度贴图和预计算的使用spherical harmonic贴图技术的带凸凹细节的自投影。
  • 高级动态投影。虚幻引擎3为四种阴影技术提供全面支持:
    • 采用动态模板缓冲阴影体积技术,能够全面支持动态移动光源,这样就能在场景中所有对象上精确地投射阴影。
    • 动态角色利用阴影缓冲器,在场景上投射动态软阴影。阴影缓冲器过滤将采样置于一个锯齿状边界的圆盘上,在每个象素上都旋转该圆盘并采样一次,以检测半阴影。然后,使用动态分支,使半阴影区的阴影覆盖范围更精确。
    • 采用了具有极高质量和极高性能的预计算阴影遮罩,从而可以将静态光源交互现象进行离线处理,同时保留了完整的动态高光和反射效果。
    • 方向光亮度贴图技术使静态投影和和漫反射法线贴图光照中无限制数量光源可以进行预计算并存储于一套贴图中,令在高精度效果场景中实现大数量光源成为可能。
  • 所有支持的阴影技术在视觉效果上是相互兼容的,并且可以按照美工的意愿自由混合。另外,同时可以与有颜色稀释函数结合,从而实现具有合适阴影的平行光、聚光灯,以及投射光效果
  • 体积环境效果,包括根据高度变化深浅的雾。
  • 使用动态像素光照,完全支持无缝连接的室内外场景环境,并在所有场景当中提供阴影技术
  • 分屏渲染。
  • 高分辨率截图支持。
  • 后期特效:动作模糊、景深以及光晕。
  • 美工可以利用一个动态可变形的基础高度贴图来创建地形。这种高度贴图是由多层材质平滑混合而成,这些材质包括位移贴图、法线贴图、任意复杂度的材质、动态基于LOD的多边形化网格、以及带有程序放置的网格模型的植被层。此外,地形系统支持由美工控制的程序生成的气候层,如平坦地形上的草和植被,高斜坡上的岩石以及山峰上的积雪。
  • 强大的材质系统,允许美工在可视化界面中实时创建任意复杂的着色器,其功能足以与Maya所提供的非实时功能性相媲美。
  • 材质采用模块化架构,因此程序员不仅能够添加新的着色器程序,还能够添加着色器元件。美工可将其与其它元件随时连接,实现着色器代码的动态合成和编译。
  • 可扩展的粒子系统,配有视觉编辑器——UnrealCascade——支持粒子物理和环境效果。
虚幻引擎3中的角色利用自投影,生成动态的软阴影。
模糊衰减的阴影将随着火炬的移动,在场景中扫动。
美工设计的平移虹彩材质将与像素照明和阴影完全无缝组合。
法线贴图的透明对象使帧缓冲器变形衰减,模拟射线追踪的反射。
云彩的模糊阴影光滑地滚过山脉,而风车的转叶将阴影投射在地面上。
软阴影角色站在一片容积型薄雾中。
使用64位色高动态范围色彩的光晕。
法线贴图漫射和带模糊阴影的特殊照明之间的细微互作用。
“UnrealCascade”中的实时粒子。“UnrealCascade”是一种模块化的可视化粒子系统编辑器。
 
作者对游戏的说明: 首先,您应当以一种批判的眼光来看待本程序。这个游戏是我制作 的第一部RPG游戏,无任何经验可谈,完全按照自己对游戏的理解进 行设计的。当我参照了《圣剑英雄2》的源码之后,才体会到专业游 戏引擎的博大精深。 该程序的内核大约有2000余行,能够处理人物的行走、对话、战斗, 等等。由于该程序的结构并不适于这种规模的程序,故不推荐您详 细研究该程序。所附地图编辑器的源程序我已经添加了详细的注释, 其程序结构也比较合理,可以作为初学VC的例子。 该程序在VC的程序向导所生成的SDI框架的基础上修改而成。它没有 使用任何关于VC底层的东西。程序的绝大部分都是在CgameView类中 制作的,只有修改窗口特征的一段代码在CMainFrm类中。其他的类 统统没有用到。另外添加的一个类是CEnemy类。 整个游戏的故事情节分成8段,分别由Para1.h ~ Para8.h八个文件 实现。由于程序仅仅能够被动的处理各种各样的消息,所以情节的 实现也只能根据系统的一些参数来判断当前应当做什么。在程序中 使用了冗长的if……else if……结构来实现这种判断。 当然,在我的记录本上,详细的记录了每个事件的判断条件。这种 笨拙的设计当然是不可取的。成都金点所作《圣剑英雄II》采用了 剧本解读的方式,这才是正统的做法。但这也需要更多的编程经验 和熟练的code功夫。 下面列举的是程序编制过程中总结出来的经验和教训。 第一,对话方式应该采用《圣剑英雄II》的剧本方式。 现在的方式把一个段落中所有的对话都混在一个文件中,然后给每 句话一个号码相对应。这样做虽然降低了引擎的难度,却导致剧情的 编写极其繁琐。 第二,运动和显示应当完全分开。 现在的程序中,运动和显示是完全同步的。即:在定时器中调用所有 敌人的运动函数,然后将主角的动画向前推一帧,接着绘制地图,调 用所有敌人的显示函数、重绘主角。这样的好处是不会掉帧,但带来 的问题是,如果要提高敌人的运动速度,那么帧数也跟着上去了。所 以当DEMO版反馈说速度太慢的时候,我修改起来非常困难。而这个问 题到最后也仅仅是将4步一格该成了2步一格。 第三,VC中数组存在上限。如果用“int aaa[1000000000]”定义一个 数组,编译器肯定不会给分配那么大的内存空间。而在这个程序中, 地图矩阵、NPC矩阵都超过了VC中数组的上限。但这一点知道的太晚了。 在1.0版本中已经发现地图最右端缺少了几行,但不知道是什么原因 造成的。(地图编辑器中未出现此问题,因为地图编辑器是用“序列 化”的方式存盘读盘的。)解决这个问题的方法是用“new”来分配 内存空间。 第四,由于不知道应该如何使用“new”和“delete”,几乎所有的DC 都使用了全局变量。这是完全没有必要的。程序运行期大约会耗用20 多M的内存空间,相当于一个大型游戏所使用的内存空间了。 另外,在游戏的剧情、美工方面也有许多问题,总之一个词“业余”。 我就不总结了。下一部作品,我将争取在程序上有一个质的飞跃。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值