• 3D场景的制作步骤


    2.4   3D场景的制作步骤

    1. 场景建模的使用目的

    使用地形生成编辑器在模拟自然地形效果上有很大的优势,但是也有局限性。在表现比较规整的地形,比如一现代化城市,初具规模的小镇,地下宫殿等等就存在这样的局限。因为使用地形编辑器建立地形时,地表贴图的数量不能太多,选择的地表贴图的数量越多游戏的运行效率就越低,适合选择2~3张贴图。而城市中的地面上所需要的贴图会非常多,车行道、人行道、草坪等远不止三张,而且城镇的街道是非常规整的,这是地形生成编辑器不能做到的。还有很重要的一点,就是用这种方法制作的地面非常省面。

    2. 必备的能力

    需要熟练掌握3ds max工具的操作。还需掌握一些灯光、渲染器的使用以及光照图烘培的操作。

    3. 场景建模的知识点

    视角范围:视角范围是玩家在游戏中所能看到的游戏场景的范围,视角是随着玩家的移动不停变换的,基于这点才有了场景分块的必要性。

    场景分块:在游戏中不管你的视角在哪个位置,可能你的视角方向上只能看到几百个面的模型。如果将整个场景一起导出,游戏中会把整个场景的模型一起渲染。场景中模型的数量不宜很多,过多的模型会严重影响游戏的效率及运行速度。在这种情况下,可以采用分块导出来提高效率。如果将场景分块导出,就会只渲染视角范围内的模型,不会渲染完全看不见的模型。

    整体建模场景优化是以分割成一块块的近似正方型的区域来导出的。

    光照图:给场景中的建筑及路面覆盖一层光照图。光照图的大小对场景中阴影部分的清晰程度以及整体场景的氛围的烘托有很大的影响,从这句话还可以看出,光照图不单单生成阴影而且可以给模型上覆盖新的颜色,这由环境光及灯光的颜色来决定。需要根据每个模型来设置光照图的大小,光照图最大不能超过1024×1024。

    渲染器:用于渲染光照图。原则上在max里能打出什么样的效果,就能在游戏场景里得到什么效果。不同的渲染器渲染的时间和质量是不同的,渲染效果越好所花的时间越久。

    灯光:用于照亮场景赋予场景氛围。灯光的设置对场景的氛围至关重要,没有灯光就没有光照图,就没有阴影,没有氛围,整个场景就会缺乏立体感。

    高度图:用于控制玩家的角色所能行走的高度及范围。

    碰撞:用于控制摄像机和模型是否碰撞。

    四方连续:每张贴图有4个方向的边缘,四方连续的贴图就是无论这张贴图的任意一边都可以和另外3个边非常完美的结合,看不出接缝。

    4. 制作流程

    建模场景和灰度图生成场景的前期准备相差无几,即分析地形布局,了解策划需求等。所不同的是,灰度图生成的场景是先有地表,然后再到编辑器中去添加建筑,摆设等物件。由于物件摆的位置不正确(如建筑没有挨着地面等)造成的问题可以很方便在场景里进行调整。而建模场景就有很大的不同,所有的工作都在max里完成,制作上需要更加严谨,如果出现以上问题,需要修改的时间就会比较长。

    (1)地表模型制作

    对于制作流程和工作安排来说,场景中的建筑可以先于地形或同时开始制作。制作建模场景是个比较长的过程,制作中地形会根据不同的视角和视觉效果而不断调整,整个建模场景中,地形的规划和制作尤为重要。地形决定了建筑和摆设放置的位置及玩家可以行走的路线。

    1)根据设计要求规划场景的可走区域范围的大小。但是整个场景不能只有可走区域,也要考虑不可行走的区域,用于遮住不想让玩家发现的地图角落。这个过程只需要用片大致把范围表现出来(图2-44)。

     

    内框为可走区域,设置大概的范围(Length 173.355m Width为188.996m)。外框为不可走区域(Length为232.009m,Width为252.212m)这里的范围大小不用非常精确,在后期的制作中还会适当调整。

    2)制作地面,根据可走区域范围制作路面分割模型。如图2-45所示。

     

    从上图可以看到场景地形的功能分布。材质表示车行道,材质表示人行路面及建筑地基,材质表示草地。

    3)处理地面模型上的接缝,在做路面的时候,会用到多种地表材质。如图2-46所示,将两种材质硬接在一起,没有任何过渡。此时在两种材质的地面之间需要增加细节,一种比较简单的处理方式在两种地面之间添加适当材质的模型,通过这个压边模型可以从视觉上将不同材质分开,以避免突兀的效果,如图2-47所示。

     

    另一种方式是通过两种地面材质之间的融合,结合模型UV的调整来处理过渡。如图2-48所示。

     

    这块地面是由三个模型拼接而成,分别对应三种材质,草地,沙滩及这两张材质相融合后形成的第三种材质。如图2-49所示。

     

    4)在地表模型上放置建筑,摆设物件。完成地表模型后,接下来的工作就是把做好的建筑、摆设、植物等模型,根据地表规划一个个的放置上去。如图2-50、图2-51是放置完整的场景。

     

     

    这里需要注意,如何避免视觉上的穿帮,出入口的遮掩物为的是避免游戏边缘地带的穿帮现象。如在场景四周摆上茂密的树林或其他物件,因为只是为了做遮挡,并没有什么实质的功能,遮挡型的物件要注意简单,面不能多,一般用几个画满树的面片来代替就可以了,如图2-52所示。

      

    有时将场景设计成盆地,周围都是山,也同样可以起到遮挡视线的作用,如图2-53所示。

     

    如果是平原地形,边缘不能使用山或者其他大型物件遮挡,使用建模建出地图边缘远处的地表(简单模型,面要少),或者水面连接地图边缘,大小要参考在游戏中玩家的视野。如图2-54所示,在场景的外围加上看似是路径延伸的地表,以此来引导玩家很自然地联想到外面是连续的场景。

     

    如果有路或者河流通向地图边缘,将路和河流做成S形,如下所示。用S拐角处的山或物件遮挡玩家视线。

     

    将来在关卡编辑器中合成的时候,会在场景四周刷上障碍格,即玩家不可以穿越一定的地界,所以不用担心玩家在游戏中会穿越这些遮挡物而看出破绽。

    在第2)步地面的制作时,还有很多其他的技巧,甚至可以制作出仅通过灰度图而生成的地表,地表贴图之间融合得非常好,并且不受地表贴图数量的限制。如图2-55所示。

    整块地面有几种不同的材质,如草地、泥地、石头地等,这些材质全部平铺在一个模型上,也没有接缝。

    截取上图地面的一小部分,来详细说明制作的过程。

     

    先观察图2-56。

      

    可以看到地面上用到的材质有7张,我们一一列出来。如图2-57所示。

    第一排贴图以砂石地材质为主,第一张材质是基础,必须是四方连续的,后两张图只是在前一张材质的基础上加了细节,并没有破坏边缘的结构,所以第一排材质任意两张任意角度拼接在一起都不会出现接缝,这样就可以丰富地面的细节。

     

    第二排主要以草地材质为主,同样也是以第一张四方连续的草地材质为基础。

    第三排的材质尤为重要,是连接草地和砂石地的过度材质。如果没有这张材质,草地和砂石地是无论如何都无法连接在一起的,就只有通过第二步所说的押边来处理两张贴图的接缝。

    如何才能将上面所列的材质拼接在一起?这里我们使用新方法来处理两张材质的接缝:使用UV工具重新排列模型原始UV分布。

    在上面的第二步中并没有描述地面模型是如何制作的,但整个地面只有一个四边面模型,通过调整UV的范围大小来重复材质在地面模型上的排列显示。如图2-58~图2-61所示。

     

     

    在新的方法中对于地面模型的制作也需要一定的技巧和要求,应在建模初期就考虑材质大小和地面模型分割面大小的关系,也就是说材质在地面上显示的重复度与视觉上材质的比例,清晰程度都比较适合。如图2-62、图2-63所示。

     

    模型上所有的面都是完全重合的,在右图中就可以看到地面上草地的材质已被重复地显示。

    以这个为基础,选面指定由草地变化的四方连续的贴图,就可以使草地的细节更加丰富。如图2-64、图2-65所示。

    草地与沙地的接缝处理又比较特别,如图2-66所示。

    想把左边的材质通过UV调整为右图显示的分布排列,只需要通过调整地面模型上相邻三角面UV的角度就可以了。

     

    (2)场景模型的优化分块

    图2-67所示的为场景平面图。处于不同的位置,会看到不同区域的场景。例如,处在位置1时,可以看到医疗室、实验楼及两个建筑之间的范围;在位置2处,虽然落脚点相同,但是视点朝向不同,只能看到医疗室;在位置3处,可以看到体育用品店、银行、服装店及周围的植物。在游戏中,在你的视角方向上能看到几百个面的模型,也可能看到几万个面。

    在知识点中提到过场景分块的基本概念,这里需要详细了解分块的具体步骤和注意事项。

     

    1)合并物件

    场景中的物件,有些会重复摆放多次,比如植物,路灯等,有些可能就只摆放一次,比如场景的标志性建筑等。这里需要把所有用于同一张贴图的物件合并成一个物体,便于在后面的步骤中统一调整UV。如图2-68,图2-69所示。

     

    )合并贴图

    在优化整体建模场景时,贴图合并需要有整体优化的概念。整体建模场景优化是以分割成一块块的近似正方型的区域来导出的,所以贴图的合并也要优先考虑同一区域内的贴图的合并,最大限度减少贴图数量。通常将类型相似的贴图合并在一起,如透明贴图与透明贴图合并,不透明贴图与不透明贴图合并,建筑与建筑贴图合并,植物与植物贴图合并等。利用率高的贴图和利用率低的贴图不要合并在一起,比如树干的贴图利用率就很高,而且分布的区域很广,导出的时候会分成好几块。建筑的贴图利用率很低,可能就一块区域需要它,这两张贴图合并会生成更大的贴图,每次绘制树干的时候调用这张大贴图,会降低效率。

    我们以巴士和双层商店模型为例,将两张贴图合并,如图2-70,图2-71所示,左边是贴图,右边是模型。

     

    打开Photoshop,打开巴士和双层商店这两张贴图。新建一个512×512的图片,运用“编辑”菜单下的选项“自由变换”,或者快捷键Ctrl+T,将前面两张图片拖放到这张新图片里,并调整大小,使之合并成一张图片,如图2-72所示。此时,巴士和双层商店就合并为使用同一张贴图的两个物件了。

     
     

    但是如果这时将模型合并,并把该贴图指定给模型,肯定会出错,因为贴图的UV分布被打乱。如图2-73所示。

     

    重新调整UV。进入“元素”层级,选择整个“巴士”模型,然后在“修改器列表”下选择“UVW展开”,或者直接点击下面“UVW展开”按钮,如图2-74所示。点击“参数”卷展栏下的“编辑”按钮,打开“编辑UVW”对话框如图2-75所示。在右边的工具栏内选择“拾取纹理”,然后通过“位图”把刚才那张贴图加载进来,以方便观察,如图2-76所示。利用该面板中的缩放工具将UV缩放到合适的位置如图2-77、图2-78所示。

    此时,巴士的贴图已经正常显示,执行同样的步骤改变双层商店的UV,如图2-79。

    上面的例子中只是把两个物件的贴图合并,在实际制作中,可以将4个甚至更多的贴图合并在一起,主要是根据场景的布局,贴图大小等。

    第三步,再次合并相同贴图的模型。

    第二步操作后,会产生更多的使用同一张贴图的模型,同样需要把场景中所有使用同一张贴图的模型合并。

    具体步骤:选择巴士,进入“可编辑多边形”的“元素”层级,点击“编辑几何体”卷展栏下的“附加”按钮,然后点选双层商店,就将两个模型合并在一起,如图2-80。

     

    3)根据场景布局分块。这是最关键的一步,需要记住5个原则。

    第一,每个分块中所包含的模型三角形面数不超过10000个。如图2-81所示。

     

    第二,因为无论怎么分块,在max中的选择框都是矩形方式,所以要尽可能的用游戏中的视角考虑分块,在同一视角下分块的数量越少越好,这是个经验积累的过程。如图2-82、图2-83所示。

     

     

    第三,地面的模型单独成一块,不要切割。可能这里有人会问,整个地面如果不切割那不是在任何时候都会把地面渲染出来,包括不在视角中的模型。主要原因是,如果地面使用了切割必然模型上需要分离,然而在使用光照图打包后的模型,如果一个面上有点没有合并就会出现明显的黑边,地面上是不允许出现黑边的,必须是完整的。另外一个原因就是,本身地面的模型面数比较少,就算放在一起对整个场景的效率影响不大。如图2-84所示。

     

    第四,与摄像机产生碰撞的物体和不产生碰撞的物体不能分在一个区块中。在关卡编辑器中,每个拖到场景中的模型都会有个碰撞的属性,0为不碰撞,1为碰撞。,一些不规则的物体,如花圃、树叶、灌木,由于他们面之间互现穿插导致摄像机一旦出现在这里就会做无规则的运动。一般来说我们会取消它的碰撞。

    第五,动态物件应单独分组。如果场景中有一些动态的物件,譬如随风摇摆的大树、晃动的旗子等,它们不需要导出pologonsoup,但是仍然要在建模场景中摆放它们的静态模型,目的是在其位置上产生阴影,将来在关卡编辑器中整合的时候添加它的动态模型。如图2-85所示,在场景中摆放静止的大树,在图2-86中,虽然没有将这些大树导出polygonsoup,但是地面上会留有阴影。

     

    (3)设置灯光

    基于3D游戏的现状,“接近真实”是一种常见选择。要达到这种真实效果通过模型的精确、细腻是远远不够的。如,动作冒险影片的照片和人站在街上的普通照片之间的视觉差异,两张照片看起来都具有真实性,但动作片已经经过小心剪辑,形成了一种强化、聚焦的现实。缩短的焦距、小心高速的光线和摄相机角度产生了比现实更真实的效果,这种真实对于能否产生心跳、手心出汗的效果至关重要。对于一帧静态的图片或是连续的动画来说,要体现出它的真实感与艺术性就必须精心地处理灯光效果。

    在三维游戏场景中,灯光的作用不仅仅是将物体照亮,还要通过灯光效果向玩家传达更多的信息。也就是通过灯光来决定这一场景的基调或是感觉,烘托场景气氛。在灯光中表达出一种基调,对于整个图像的外观是至关重要的,灯光有助于表达一种情感,或引导观众的眼睛到特定的位置,可以为场景提供更大的深度,展现丰富的层次。

    要达到场景最终的真实效果,我们需要建立许多不同的灯光,因为在现实世界中光源是多方面的,如阳光、烛光、莹光灯等,在不同的光源下所观察到的事物效果也会不同。

    3ds max中主要有6种灯光,包括:目标聚光灯、目标平行光、自由聚光灯、自由平行光、泛光灯、天光。这6种灯光可通过Create命令面板中Lights项目栏中创建,如图2-87所示。

    我们可通过以上5种灯光对虚拟三维场景进行光线处理,使场景达到真实的效果。

     

    1)聚光灯。目标聚光灯和自由聚光灯,这种灯光可通过照射方向和照射范围对物体进行选择性的照射,如图2-88所示。

     

    2)泛光灯。泛光灯是一个点光源,可以照亮周围物体,没有特定的照射方向,只要不是被灯光排除的物体都会被照亮。在三维场景中泛光灯多作为补光使用,用来增加场景中的整体亮度。
    如图2-89所示。

     

    3)平行光。目标平行光、自由平行光可以用来模拟阳光效果,也可以对物体进行选择性的照射,是在三维场景中常用的一种灯光。如图2-90所示。

     

    4)天光。“天光”灯光建立日光的模型,意味着与光跟踪器一起使用,可以设置天空的颜色或将其指定为贴图。对天空建模并作为场景上方的圆屋顶。使用默认扫描线渲染器渲染时,将天光设为高级照明效果最佳。如图2-91所示。

     

    除了通常类型的灯光外,很多三维动画软件以白炽灯、立体光源和特殊材料属性的形式提供许多特殊效果。严格说来,某些并不属于灯的类型,在场景中,它们通常是在可见光效果的外观上添加进来的。一个简单的例子是可见光源的闪耀或发光。由于这些效果在3D中不能自动产生,你需要在渲染中专门把它们包括进来,并且考虑其外观和长处。

    渲染功能将颜色、阴影、照明效果等加入到几何体中,从而可以使用所设置的灯光、所应用的材质及环境设置(如背景和大气)为场景的几何体着色。使用“渲染场景”对话框可以创建渲染并将其保存为文件。渲染也可显示在屏幕上或渲染帧窗口中。

    3ds max附带三种渲染器,其他渲染器可能作为第三方插件提供。3ds max附带的渲染器有默认扫描线渲染器、mental ray渲染器和VUE文件渲染器。

    用于渲染的主命令位于主工具栏上,调用这些命令的另一种方法是使用默认的“渲染”菜单,该菜单包含与渲染相关的其他命令,如图2-92所示。

     

    场景中灯光设置可以使用max提供的所有灯光种类以及渲染器,不同种类的灯光和渲染器渲染的速度会很大不同,这里就不再详细说明,可以参考max中关于灯光渲染的专门书籍。

    (4)渲染光照图与导出模型

    在设置完灯光后,我们对每个需要导出的模型渲染光照图,把灯光信息和阴影信息单独保存成一整张图片,然后通过引擎的图片叠加方式,把模型本身的贴图和光照图叠加,最终完成整个场景。如何渲染导出请参考max导出工具章节。

    (5)在关卡编辑器中摆放分块场景模型

    在关卡编辑器中,摆放物件和分块场景的操作是一样的,只是选择的type类型不同,如图2-93、图2-94、图2-95所示。

     
     

    在type中选择transdyna(动态类型节点),这个节点能保证所拖到编辑器的分块模型都以原点中心为坐标轴,不会出现不同分块的模型位置对不上的现象。

    至此场景模型的制作和导出就全部完成了,接下来生成网格高度,这部分操作和其他地形的制作没有两样。

    5. 常见问题及解决方案

    (1)分块技巧

    将一块区域的模型以父子关系连接在一起,比如树和树下的灌木、草,可以以树为父结点,将灌木和草以子节点连接上去。此法效率比较高,在引擎读入的时候就以一个模型载入。

    (2)动画文件效率

    关键帧动画模型作为摆设放在场景里,数量尽量少,过多的数量会极大地影响游戏的效率。

    如果一个动画模型仅仅只是小部分有动画,那么把这小部分单独分离成一个动画模型,另外的部分导成静止的普通模型,再在编辑器里组合成一个cluster节点再放到场景中,会比前一种的效率明显高。动画文件的效率优先级别为:矩阵动画>keyframe动画文件。动画帧物件的数量
    也会影响到场景的运行效率。

    (3)pologonsoup与keyframe文件的缩放与移动

    从MAX中导出的pologonsoup和keyframe格式的文件,整合到关卡编辑器中时,不要同时进行移动和缩放操作,否则摄像机不会与其发生碰撞,在放置分块场景的时候更需要注意,甚至不要进行移动和缩放。

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://www.cnblogs.com/captainbed

  • 相关阅读:
    关于前端复用的构思
    react-redux单元测试(基于react-addons-test-utils,mocha)
    关于windows下NODE_ENV=test无效的情况解决办法
    javascript柯里化及组合函数~
    如何使用函数式编程?
    redux源码解析-函数式编程
    react案例->新闻移动客户端--(react+redux+es6+webpack+es6的spa应用)
    jQuery高级技巧——性能优化篇
    jQuery高级技巧——DOM操作篇
    使用checkbox实现纯CSS下拉框
  • 原文地址:https://www.cnblogs.com/skiwnchiwns/p/10163774.html
Copyright © 2020-2023  润新知