搜档网
当前位置:搜档网 › Unity3D美术方面贴图蓄力帖

Unity3D美术方面贴图蓄力帖

Unity3D美术方面贴图蓄力帖
Unity3D美术方面贴图蓄力帖

Unity3D美术方面贴图蓄力帖

本帖被TP 执行置顶操作(2011-04-11)

我们都知道,一个三维场景的画面的好坏,百分之四十取决于模型,百分之六十取决于贴图,可见贴图在画面中所占的重要性。在这里我将列举一些贴图,并且初步阐述其概念,理解原理的基础上制作贴图,也就顺手多了。

我在这里主要列举几种UNITY3D中常用的贴图,与大家分享,希望对大家有帮助。

01

首先不得不说的是漫反射贴图:

漫反射贴图diffuse map

漫反射贴图在游戏中表现出物体表面的反射和表面颜色。换句话说,它可以表现出物体被光照射到而显出的颜色和强度。我们通过颜色和明暗来绘制一幅漫反射贴图,在这张贴图中,墙的砖缝中因为吸收了比较多的光线,所以比较暗,而墙砖的表面因为反射比较强,所以吸收的光线比较少。上面的这张图可以看出砖块本身是灰色的,而砖块之间的裂缝几乎是黑色的。

刨去那些杂糅的东西,我们只谈明显的,漫反射贴图表现了什么?列举一下,物体的固有色以及纹理,贴图上的光影。前面的固有色和纹理我们很容易理解,至于后面的光影,我们再绘制漫反射贴图的时候需要区别对待,比如我们做一堵墙,每一块砖都是用模型做出来的,那么我们就没有必要绘制砖缝,因为这个可以通过打灯光来实现。可是我们如果用模型只做了一面墙,上面的砖块是用贴图来实现,那么就得绘制出砖缝了。从美术的角度,砖缝出了事一条单独的材质带外,还有就是砖缝也是承接投影的,所以在漫反射图上,绘制出投影也是很有必要的,如下图:

没有什么物体能够反射出跟照到它身上相同强度的光。因此,让你的漫反射贴图暗一些是一个不错的想法。通常,光滑的面只有很少的光会散射,所以你的漫反射贴图可以亮一些。

漫反射贴图应用到材质中去是直接通过DiffuseMap的。再命名规范上它通常是再文件的末尾加上“_d”来标记它是漫反射贴图。

凹凸贴图Bump maps

凸凹贴图可以给贴图增加立体感。它其实并不能改变模型的形状,而是通过影响模型表面的影子来达到凸凹效果的。再游戏中有两种不同类型的凸凹贴图,法线贴图(normalmap)和高度贴图(highmap)。

Normal maps法线贴图

法线贴图定义了一个表面的倾斜度或者法线。换一种说法,他们改变了我们所看到的表面的倾斜度。

法线贴图把空间坐标的参数(X,Y,Z)记录在像素中(R,G,B),上面的范例图就是这个意思。

有两种制作法线贴图的方法:

1.从三维的模型渲染出一张法线贴图(用高模跟低模重叠在一起,把高模上的细节烘焙到低模的UV上,这里需要低模有一个不能重叠的UV)

2.转换一张高度贴图成为一个法线贴图。(是用NVIDIA的PS插件来转换一张图成为法线贴图)Height maps高度贴图

什么是HeightMap呢?所谓高度图实际上就是一个2D数组。创建地形为什么需要高度图呢?可以这样考虑,地形实际上就是一系列高度不同的网格而已,这样数组中每个元素的索引值刚好可以用来定位不同的网格(x,y),而所储存的值就是网格的高度(z)。

我们在这里叙述高度图,其实也是为了更好的绘制法线贴图,很多情况下我们的法线贴图只能在已有的漫反射贴图作为素材进行绘制,这样就是需要由一个HeightMap转换成法线贴图的一个过程,明白了这个原理,做起来也就可以更好的驾驭其效果。

高度贴图是一种黑白的图像,它通过像素来定义模型表面的高度。越亮的地方它的高度就越高,画面越白的地方越高,越黑的地方越低,灰色的在中间,从而表现不同的地形。

当然在UNITY中也是有HightMap出现的,比如在Terrain菜单中,就有导入和导出HightMap

的命令。

高度贴图通常是在图形处理软件中绘制的。他们通常没有必要渲染这些,再DOOM3游戏中高度贴图是被转换成法线贴图来使用的。使用高度贴图仅仅是为了适应简单的工作流程。高度贴图通常通过“Heightmap”函数来调用到3D软件中去的,我们通常再文件名后面加一个"_h"来标示它。

Normal maps vs. height maps

法线贴图和高度贴图一般来说,Normal Map来自于Height Map。具体生成的方法如下:把Hei ght Map的每个像素和它上面的一个像素相减,得到一个高度差,作为该点法线的x值;把Hei ght Map的每个像素和它右边的一个像素相减,得到一个高度差,作为该点法线的y值;取1作

为该点法线的z值。推导过程如下:x方向,每个像素和它下面的一个像素相减,得到向量<1, 0, hb - ha>,其中ha是该像素的高度值,hb是下一行的高度值;y方向,每个像素和它左边的一个像素相减,得到向量<0, 1, hc - ha>,其中ha是该像素的高度值,hb是左一列的高度值;两个向量Cross,得到简单来说,就是取两个方向的切线向量,对它们做Cross得到该点的法线向量。

还有另外一种做法,是根据每个象素四边的点计算,而该点象素本身不参与计算。没有试过,不知道哪种好一些。而且我觉得这种计算只适合于单块的HeightMap、NormalMap,像是DOOM3中的NormalMap就无法由HeightMap计算出来了。所以最好还是在美工建模的时候同时生成N ormalMap和HeightMap而不是利用HeightMap生成NormalMap。

DOOM3游戏引擎可以把法线贴图和高度贴图合成在一张凸凹贴图上。

通常我们绘制一张具有足够细节的高度贴图要比建立一个足够细节的模型然后渲染成相应的法线贴图要实际的多。

法线和高度的凸凹贴图可以通过Addnormals函数来合并到一种材质中。

毫无疑问,高度贴图大多数游戏引擎中出现的不多。他们只是给电脑一种方法来计算曲面法线当使用动态灯光的时候。

这说明实际上,一张高度贴图被转换成一张法线贴图,以此可以计算出相邻两块不同高度的位置之间的倾斜面。高度贴图永远不能像法线贴图这样具有足够的细节,这是被肯定的。

很明显只有灰度的高度贴图并不能很好的表现应该有的细节,因为它是黑白的,RGB颜色就会遭到浪费,并且因此你只能只用256层级的强度。

相比较来言法线贴图的每一个图像通道都可以利用到,显而易见,法线贴图能够更好的来表现凸凹。

Specular maps高光贴图

什么是高光贴图?

高光贴图是用来表现当光线照射到模型表面时,其表面属性的.(如金属和皮肤、布、塑料反射不同量的光)从而区分不同材质.

高光贴图再引擎中表现镜面反射和物体表面的高光颜色。

材质的反光程度就越强。(强弱度度是指,如果将这张Specularmap去色成为黑白图,图上越偏向R GB0,0,0,的部分高光越弱,越偏向RGB255,255,255的部分高光越强.)

我们建立高光贴图的时候,我们使用solid value来表现普通表面的反射,而暗的地方则会给人一种侵蚀风化的反射效果。(你头脑中要有很清晰的物件不同材质之间高光强弱的关系:高光最强的是那个部分,最弱的是那个部分,处在中间级别的是哪些部分.一般来说:金属的高光>塑料>木头>皮肤>不料,但是这个只是一个大致的分类,不要把它作为高光的指导.有时,你处理的物件可能是如上图一样,绝大部分都是同一类型材质的,比如布料,这时你也要小心的去分辨不同材料之间的高光强度的区别.切记,在这个阶段一定要保持清晰的头脑,不要急着去添加那些细节.在大的强弱关系还没有决定之前,就去添加那些细节会影响你的判断,而最后得到一张层次不清晰很“花”的高光.很多时候,我们容易范这样的毛病,就是将物件的高光处理的太过单一.)

上面的贴图有个问题,砖的表面与砖缝相比将会有比较少的反光,但是砖缝的位置其实应该几乎是没有反光的。(确定好整体高光的强弱之后,就开始在高光上叠加细节:比如金属划痕,金属倒角高光,锈渍周围的裸金属亮点,油渍,灰尘等.这时,你会发现,如果你在Diffusemap的绘制过程中,保留了纹理,划痕或以上提到过的细节的图层,你只需要将Diffusemap中的相应图层拖曳到S pecularmap中,然后根据这些细节应该反映出来的高光强度调节就可以了.So,良好的图层管理习惯是非常必要的.)

颜色再高光贴图中将会用来定义高光的颜色,组成砖的材料应该是一些沙子,他们将会反射出一些微笑的具有质感的光,这些在上面的例子中已经展示了出来。(为了丰富高光贴图,我们有很多方法:做局部高光的细微变化,添加纹理(这个纹理要和材质本身的纹理区分开),叠加彩色图层(谨慎用))

高光贴图是通过Specularmap函数调用到引擎中的,通常我们再贴图的后面加一个"_s"来区别它。

凸凹贴图可以通过高光贴图来改进成相当漂亮的贴图。(要记住的是,单单凭借高光贴图是无法充分的表现材质特性的,只有Didffuse,Normal,和Specular三张配合才能充分的表现材质特性.)

在UNITY中,高光贴图通常放在漫反射贴图的透明通道里,我们是用相关的SHANDER就可以达到高光的效果。

AO贴图

Ambient Occlusiont简称AO贴图,中文一般叫做环境阻塞贴图。是一种目前次时代游戏中常

用的贴图技术,很多朋友将其与全局光烘焙贴图混淆,其实二者本质是完全不同的。

首先,我们从简单的AO贴图的算法来讲:

AO贴图的计算是不受任何光线影响的,仅仅计算物体间的距离,并根据距离产生一个8位的通道。如下图所示,计算球形物体的AO贴图的时候,程序使每个像素,根据物体的法线,发射出一条光,这个光碰触到物体的时候,就会产生反馈,比如球右下方的一些像素锁发射的光,碰触到了旁边的政法提,产生反馈,标记这里附近有物体,就呈现黑色。、

而球上方的像素所发射的光,没有碰触到任何物体,因此标记为白色。

简单了解算法后,大家就明白,全局光的烘焙师模拟GI(全局光)所呈现的阴影效果,而AO 贴图时模拟模型的各个面之间的距离。二者性质是完全不一样的。

我举例简单对比AO贴图和GI阴影贴图的区别。

根据这个低模,右边计算出的AO贴图的黑白关系,是根据物体模型距离产生的,不存在任何光源效果的影响,边缘部分等比较密集的结构,正确的产生了深色,强化了模型结构,在游戏引擎中,与其他通道贴图混合,可以提升游戏的效果。

右边的是全局光烘焙贴图的效果,是用MAX的天光计算结果进行烘焙,其阴影效果是模拟自然光线下的模型光影关系,在有结构接近的区域(比如裤袋、袖口)由于GI得光线跟踪计算会使其弱化,符合自然界光线效果,但是不是游戏所需要的效果。

在unity中,我们有两个地方可以调整AO,一个是在光照贴图渲染器中,有一个调整AO的参数,这个是确实渲染了一层AO。还有一个就是通过摄影机特效,有一个屏幕空间环境阻塞的特效screen speace ambient occlusion(SSAO).这两个都可以实现部分的AO效果,有兴趣的朋友可以自己尝试一下。

CUBEMAP

Cube map技术说到底就是用一个虚拟的立方体(cube)包围住物体,眼睛到物体某处的向量eyeve c经过反射(以该处的法线为对称轴),反射向量reflectvec射到立方体上,就在该立方体上获得一个纹素了(见下图)。明显,我们需要一个类似天空盒般的6张纹理贴在这个虚拟的立方体上。按CUBE MAPPING原意,就是一种enviroment map,因此把周围场景渲染到这6张纹理里是“正统”的。也就是每次渲染时,都作一次离线渲染,分别在每个矩形中心放置相机“拍下”场景,用FBO渲染到纹理,然后把这张纹理作为一个cube map对象的六纹理之一。这样即使是动态之物也能被映射到物体表面了(虽然缺点是不能映射物体自身的任何部分)。

CUBEMAP的制作方法:

https://www.sodocs.net/doc/791489274.html,/content.php?action=tutorial&name=cubemaps

unity3d的官网上有一段代码,叫做Camera.RenderToCubemap

讲的是怎样把我们的场景烘焙成cubemap,里面附有代码,有兴趣的可以在SCRIPT帮助文件中搜索我上一行提到的关键词。

LIGHTMAP

什么是烘焙? 简单地说, 就是把物体光照的明暗信息保存到纹理上, 实时绘制时不再进行光照计算, 而是采用预先生成的光照纹理(lightmap)来表示明暗效果. 那么, 这样有什么意义呢?

好处:

由于省去了光照计算, 可以提高绘制速度

对于一些过度复杂的光照(如光线追踪, 辐射度, AO等算法), 实时计算不太现实. 如果预先计算好保存到纹理上, 这样无疑可以大大提高模型的光影效果

保存下来的lightmap还可以进行二次处理, 如做一下模糊, 让阴影边缘更加柔和

当然, 缺点也是有的:

模型额外多了一层纹理, 这样相当于增加了资源的管理成本(异步装载, 版本控制, 文件体积等).当然, 也可以选择把明暗信息写回原纹理, 但这样限制比较多, 如纹理坐标范围, 物体实例个数...

模型需要隔外一层可以展开到一张纹理平面的UV(范围只能是[0,1], 不能重合). 如果原模型本身就是这样, 可以结省掉. 但对于大多数模型来说, 可能会采用WRAP/MIRROR寻址, 这只能再做一层, 再说不能强制每个模型只用一张纹理吧? 所以, lightmap的UV需要美术多做一层, 程序展开算法这里不提及....

静态的光影效果与对动态的光影没法很好的结合. 如果光照方向改变了的话, 静态光影效果是无法进行变换的. 而且对于静态的阴影, 没法直接影响到动态的模型. 这一点, 反而影响了真实度

肯定不只这几点,但我暂时只想到这几点

那么怎么生成lightmap呢?

最直接的办法: 光线追踪....(原理想想很简单, 按照物体定律来就可以了)

但是光线追踪这东西......就算用来离线生成我都嫌慢-_-

下面说的这个是利用GPU进行计算的, 跟实时光照没什么两样:

原理:

想想实时渲染的顶点变换流程: pos * WVP之后, 顶点坐标就变换到屏幕空间了[-1, 1]

如果VertexShader里直接把纹理坐标做为变换结果输出(注意从[0,1]变换到[-1,1]), 那么相当于直接变换到了纹理坐标系, 这时在PixelShader里还是像原来那样计算光照, 输出的结果就可以拿来做lightmap了

静态模型的Lightmap(光照贴图)与Vertex-Lighting(顶点光照)之比较

通常有个误解就是,Vertex-Lighting是一种不费的静态模型打光手段,因此应该被作为提升地图运行效率和减少文件尺寸的手段。这种观点,在这两方面其实都有问题Lightmap使用平展开的一套UV,如同普通皮肤贴图所需的。Lightmap的贴图大小可以灵活设置,比如64x64。这种方式提供了每像素的光照数据Vertex-Lighting使用的数据结构,包含每个顶点所受光照的亮度和色彩信息。

该数据结构消耗特定量的内存,这个量是由模型的顶点数量决定的,不能随意改变在多数情况下,静态模型应该设成使用Lightmap,因为这可以产生最好的视觉效果,最好的运行效率,而且比Vertex-Lighting消耗更少的内存Lightmap和Vertex-Lighting相比较,具有如下优点:- Lightm ap可以减少CPU和GPU的占用- Lightmap让CPU需要计算的光照和物体间的互动更少- Lig htmap不需要在GPU的多重pass中被渲染- Lightmap pass被整合进Emissive(自发光)pa ss中,因此可以缩短渲染时间- Lightmap可以表现交错覆盖于静态模型三角面上的复杂的每像素光照,然而Vertex-Lighting只能表现顶点到顶点之间线形的渐变- 使用Lightmap的静态模型,可以通过优化使用更少的三角形,获得额外的效率提升。

为使用Vertex-Lighting而制作的模型,通常需要较高的细分度,获得更多的顶点来改善顶点之间的光照过渡,然而这种做法的副作用是提升了模型的三角形数量并影响运行效率- 静态模型上的Lightmap可以设置为使用很小的分辨率,比如16x16或32x32,来减少内存开支。这对于远离游戏中心区域的静态模型来说,非常有用,这同样也适合受光很均匀的模型。

Vertex-Lighting就不具有这种优化的便利,它总是消耗同样数量的内存来存放模型全部顶点的数据结构- Lightmap可以通过调整UV的布局,来进行优化以提供尽可能好的光照质量。比如,有一个球形岩石,可以将它的底部的三角形的UV尺寸做得很小,从而让这部分在整个Lightma p的UV上面只占据很小一块,这样,对于顶部和侧面来说,就获得了更大的贴图面积于是有更精细的光照效果。Vertex-Lighting的精度总是对应于顶点数,而效果又受模型实际大小的影响(就是说缩小了看还可以的模型,放大比如一百倍,由于顶点不能改变,所以效果也变糙一百倍,而Lightmap因为可以灵活设置精度不存在这个问题),并且不能被优化如果静态模型的三角形和顶点数量很少的话,那使用Vertex-Lighting可能会比使用Lightmap占用更少的内存,然而,使用Lightmap绝对是看起来更好的,效率也更高的。

使用Lightmap让LD可以优化光照的质量和内存的占用所以Lightmap显然是比Vertex-Lightin g更好的选择举个例子:比如使用UT3这游戏的静态模型HU_Deco_Pipes.SM.Mesh.S_HU_D eco_Pipes_SM_Pipe01该模型有2555个三角形和2393个顶点如果在场景中放置此模型的42 0个实例,并且都使用Vertex-Lighting,那么总共消耗11MB内存如果在场景中放置此模型的4 20个实例,并且都使用32x32的Lightmap,那么总共消耗850kb内存如果在场景中放置此模型的420个实例,并且都使用64x64的Lightmap,那么总共消耗3.3MB内存占用内存的量,也会在地图文件的尺寸上有所表现这个例子中的一部分实例,其所用的Lightmap的精度,可以设到128x128或者更高以便获得最佳的光照效果,而仍然使用相比Vertex-Lighting来说更少的内存。并且使用Lightmap的版本,要比Vertex-Lighting版本在渲染上快8-10个百分点。

Mipmap和detailmap

首先从MIPMAP的原理说起,它是把一张贴图按照2的倍数进行缩小。直到1X1。把缩小的图都存储起来。在渲染时,根据一个像素离眼睛为之的距离,来判断从一个合适的图层中取出tex el颜色赋值给像素。在D3D和OGL都有相对应的API控制接口。

透过它的工作原理我们可以发现,硬件总是根据眼睛到目标的距离,来玄奇最适合当前屏幕像素分辨率的图层。假设一张32768x32768的mipmap贴图,当前屏幕分辨率为1024*1024。眼睛距离物体比较近时,mipmap最大也只可能从1024*1024的Mipmap图层选取texel。再次,当使用三线性过滤(trilinear)时,最大也只能访问2048*2048的图层选取texel,来和1024*1024图层中的像素进行线性插值。

detailMAP

顾名思义,就是细节的贴图,我这里有一个例子,

使用前:

使用后:

使用的着色器:

原理上不用赘述,其实就是图层的叠加与混合。在这里有几个关键词,一个是Detail的Tiling值,一个是这个Detailmap需要在导入的时候设置为Mipmap,里面的参数大家可以试着调一下,至于Mipmap的原理,已经在上面介绍了。

Unity3D模型软件使用说明书

Unity3D模型软件使用说明书 目录 第一部分设计说明 一、系统概况 二、使用环境 三、这几依据 第二部分系统功能介绍 一、进入及退出系统 (一)启动系统 (二)进入主界面 (三)退出系统 二、主菜单 第三部分系统故障及维护 一、系统故障处理 二、使用注意

第一部分设计说明 一、系统概况 Unity3D模型,采用C#语言编写,该模型实现了音频播放、自动漫游、画线、视频播放等功能,是一款多功能的、基于Unity3D的,以C#为开发语言的三维模型。 二、使用环境 基于C#的Unity3D模型。 操作系统: Windows XP 、 Windows 7、 Windows 8 硬件:CPU Intel 双核@ 2.50GHz或者以上(CPU性能越好,运行越流畅) 硬盘:100G及以上 内存:1G及以上 显示器:分辨率1024*768及以上 该系统在1024*768的浏览器下能够达到最佳的浏览效果,但是在其他分 辨率下亦不影响系统的正常功能 三、设计依据 (1)《计算机软件开发规范》GB 8566; (2)《软件开发规范》 (3)《计算机软件可靠性和维护性管理》 (4)《计算机软件质量保证计划规范》 (5)《中华人民共和国公共安全行业标准》

第二部分系统功能介绍 一、进入及退出系统 1 启动系统 启动计算机后,进入系统点击桌面上“Unity3D模型”图表,然后点击下图中标注的按钮后软件即可进入运行状态。 2 进入主界面 3退出系统 点击“退出系统”按钮,在弹出的画面选择“确定”按钮就可退出画面,选择“取消”返回先前画面。

二、主菜单 在主菜单画面里可以选择要运行的功能 音频播放自动漫游 画线音频播放

Unity3D游戏开发之添加背景图片

Unity3D游戏开发之添加背景图片 每个游戏在开始前都有登陆注册界面,但是登陆注册界面不只是几个Label,几个Button 组成的,还要有背景图片,可以怎么我们在只学习了GUI的前提下,怎么添加背景图片呢?我今天主要的任务就是做登陆注册界面,登陆注册界面要想好看点就要有背景图片,在unity中添加背景图片有两种方法,一种是通过代码来完成,还有一种是手动添加,我们都 来看看吧。 先来看看效果图: 通过代码完成: 1.//声明一张图片 2.public Texture2D img; 3. 4.//通过OnGUI方法执行下面操作 5.void OnGUI() 6.{ 7. string aa = ""; 8. 9. //构造一个空的GUIStyle 10. GUIStyle bb = new GUIStyle(); 11. 12. //设置bb正常显示时是背景图片

13. bb.normal.background = img; 14. https://www.sodocs.net/doc/791489274.html,bel(new Rect(0, 0, 1370, 780), aa, bb); 15.} 手动添加: 1、先创建一个新的摄像机,命名为Background Camera; 2、新建一个GUI Texture,命名为Background Image; 3、在Background Image的Inspector面板【狗刨学习网】中点击Layer下拉窗口, 选择“Add Layer”添加一个新的层名称为“Background Image”; 4、选中Background Image,做如下操作: 5、该GameObject的Layer值设置为之前你添加的Background Image; 6、选中Background Camera,进行如下操作:

3D max模型导入unity 3D中注意事项

3D max模型导入unity 3D中注意事项 一.单位,比例统一 在建模型前先设置好单位,在同一场景中会用到的模型的单位设置必须一样,模型与模型之间的比例要正确,和程序的导入单位一致,即便到程序需要缩放也可以统一调整缩放比例。统一单位为米。 二.模型规范 ⒈所有角色模型最好站立在原点。没有特定要求下,必须以物体对象中心为轴心。 ⒉面数的控制。移动设备每个网格模型控制在300-1500个多边形将会达到比较好的效 果。而对于桌面平台,理论范围1500-4000。如果游戏中任意时刻内屏幕上出现了大量的角色,那么就应该降低每个角色的面数。比如,半条命2对于每个角色使用2500-5000个三角面。 正常单个物体控制在1000个面以下,整个屏幕应控制在7500个面以下。所有物体不超过20000个三角面。 ⒊整理模型文件,仔细检查模型文件,尽量做到最大优化,看不到的地方不需要的面要删除,合并断开的顶点,移除孤立的顶点,注意模型的命名规范。模型给绑定之前必须做一次重置变换。 ⒋可以复制的物体尽量复制。如果一个1000面的物体,烘焙好之后复制出去100个,那么他所消耗的资源基本和一个物体消耗的资源一样多。 三.材质贴图规范 ⒈我们目前使用的unity3d软件作为仿真开发平台,该软件对模型的材质有一些特殊的要求,在我们使用的3dsMax中不是所有材质都被Unity3D软件所支持,只有standard(标准材质)和Multi/Sub-Objiect(多维/子物体材质)被Unity3D软件所支持。注:Multi/Sub-Objiect(多维/子物体材质)要注意里面的子材质必须为standard(标准材质)才能被支持。

Unity3D之调整画质(贴图)质量

Unity3D之调整画质(贴图)质量 当我们在Unity中,使用图片进行2D显示时,会发现显示出来的画面有明显的模糊或者锯齿,但是美术给的原图却十分清晰。 要改善这一状况实际上很简单。 造成这样的原因,是Unity在导入图片(或者纹理)时会自动进行压缩,以便减少运行时游戏的内存占用率,提供性能。 注意:下面实例使用的Unity版本为4.3.4。版本不同的话可能某些显示不完全相同,但关键点是一样的。 实现 我们以下列背景图为例(大小为2048*640): 当我们把它作为背景显示时,在Game界面会看到下面的效果: 可以发现,上面的画质不怎么尽如人意,例如左上角的帆船和右上角的皮球,有明显的模糊和锯齿。 观察该图片对应的Inspector面板(注意这里的纹理类型是Sprite),如下所示:

其中对画质有影响的部分,已经用红框圈出。根据官网文档的解释,其含义分别如下: Filter Mode 当该纹理由于3D变换进行拉伸时,它将如何被过滤插值。共有三种选择: Point 单点插值,纹理将变得块状化(blocky up close); Bilinear 双线性插值,纹理将变得模糊(blurry up close); Trilinear 三线性插值,类似Bilinear,但是纹理还会在不同的mip水平之间(between the different mip levels)进行模糊; Max Size 导入的纹理的最大尺寸。因为美术人员往往喜欢使用较大的纹理进行创作,所以可以使用这个选项来选择我们游戏中适合的尺寸。 Format 该纹理使用的内部表现格式。这是在大小和质量之间的权衡。共有三种格式: Compressed 压缩的RGB纹理。这是漫反射贴图最长江的格式。每个像素占4bits(一张256*256大小的纹理将占用32KB大小的内存); 16 bit 低质量的真彩(truecolor)显示。每个像素占16bits;

unity3d模型制作规范V10

Unity3d数字模型制作规范 本文提到的所有数字模型制作,全部是用3D MAX建立模型,即使是不同的驱动引擎,对模型的要求基本是相同的。当一个VR模型制作完成时,它所包含的基本内容包括场景尺寸、单位,模型归类塌陷、命名、节点编辑,纹理、坐标、纹理尺寸、纹理格式、材质球等必须是符合制作规范的。一个归类清晰、面数节省、制作规范的模型文件对于程序控制管理是十分必要的。 首先对制作流程作简单介绍: 素材采集-模型制作-贴图制作-场景塌陷、命名、展UV坐标-灯光渲染测试-场景烘培-场景调整导出第一章模型制作规范 1 在模型分工之前,必须确定模型定位标准。一般这个标准会是一个CAD底图。制作人员必须依照这个带有CAD底图的文件确定自己分工区域的模型位置,并且不得对这个标准文件进行任何修改。导入到MAX里的CAD底图最好在(0,0,0)位置,以便制作人员的初始模型在零点附近。 2 在没有特殊要求的情况下,单位为米(Meters),如图所示。 3 删除场景中多余的面,在建立模型时,看不见的地方不用建模,对于看不见的面也可以删除,主要是为了提高贴图的利用率,降低整个场景的面数,以提高交互场景的运行速度。如Box底面、贴着墙壁物体的背面等。 4 保持模型面与面之间的距离推荐最小间距为当前场景最大尺度的二千分之一。例如:在制作室内场景时,物体的面与面之间距离不要小于2mm;在制作场景长(或宽)为1km 的室外场景时,物体的面与面之间距离不要小于20cm。如果物体的面与面之间贴得太近,会出现两个面交替出现的闪烁现象。模型与模型之间不允许出现共面、漏面和反面,看不见的面要删掉。在建模初期一定要注意检查共面、漏面和反面的情况; 5 可以复制的物体尽量复制。如果一个1000个面的物体,烘焙好之后复制出去100个,那么他所消耗的资源,基本上和一个物体所消耗的资源一样多。

美术模型制作规范

美术模型项目工程的创建规范 如下图所示 文件夹内所有文件必须英文或字母命名(游戏引擎导入模型或贴图如果含有汉字会报错)2.文件提交规范 .一工程内文件,材质球,贴图命名规范 例如 1模型文件叫红色大门 Door-red-01 (这里模型加颜色加编号是为了区别大项目中出现重名的情况) 2材质球命名 Door-red-01-mat (mat是材质球的缩写、必须保证文件名,材质球名,贴图名的统一性) 3贴图名 Door-red-01-cm(颜色贴图)Door-red-01-sm(高光贴图) Door-red-01-nm(法线贴图)

(注意;如果模型是放在地面上那么以模型底部为坐标轴原点,如果模型是挂在墙上那么以靠墙侧中心点为坐标轴原点,) 二模型轴心,模型属性重置,正反面 首先使用reset XForm重置模型而后打开背面消隐检查模型是否有反面 之后检查模型是否有废点废线废面 再模型以及轴心归到世界坐标原点模型三个旋转轴向数值清零缩放三轴向数值100%

一.单位,比例统一 在建模型前先设置好单位,在同一场景中会用到的模型的单位设置必须一样,模型与模型之间的比例要正确,和程序的导入单位一致,即便到程序需要缩放也可以统一调整缩放比例。统一单位为米。 二.模型规范 ⒈所有角色模型最好站立在原点。没有特定要求下,必须以物体对象中心为轴心。 ⒉面数的控制。移动设备每个网格模型控制在300-1500个多边形将会达到比较好的效果。而对于桌面平台,理论范围1500-4000。如果游戏中任意时刻内屏幕上出现了大量的角色,那么就应该降低每个角色的面数。比如,半条命2对于每个角色使用2500-5000个三角面。 正常单个物体控制在1000个面以下,整个屏幕应控制在7500个面以下。所有物体不超过20000个三角面。 ⒊整理模型文件,仔细检查模型文件,尽量做到最大优化,看不到的地方不需要的面要删除,合并断开的顶点,移除孤立的顶点,注意模型的命名规范。模型给绑定之前必须做一次重置变换。 ⒋可以复制的物体尽量复制。如果一个1000面的物体,烘焙好之后复制出去100个,那么他所消耗的资源基本和一个物体消耗的资源一样多。 三.材质贴图规范 ⒈我们目前使用的unity3d软件作为仿真开发平台,该软件对模型的材质有一些特殊的要求,在我们使用的3dsMax中不是所有材质都被Unity3D软件所支持,只有standard(标准材质)和Multi/Sub-Objiect(多维/子物体材质)被Unity3D软件所支持。注:Multi/Sub-Objiect(多维/子物体材质)要注意里面的子材质必须为standard(标准材质)才能被支持。 ⒉Unity3D目前只支持Bitmap贴图类型,其它所有贴图类型均不支持。只支持DiffuseColor(漫反射)同self-Illumination(自发光,用来导出lightmap)贴图通道。Self-Illumination(不透明)贴图通道在烘焙lightmap后,需要将此贴图通道channel设置为烘焙后的新channel,同时将生成的lightmap指向到self-Illumination。 四.贴图文件格式和尺寸 原始贴图不带通道的jpg,带通道的为32位tga或者png,尺寸最大别超过2048,贴图文件尺寸须为2的N次方(8、16、32、64、128、256、512、1024)最大贴图尺寸不能超过1024x1024,特殊情况下尺寸可在这些范围内做调整。 五.贴图材质应用规则 ⒈贴图不能为中文命名,不能有重名; ⒉材质球命名与物体名称一致,材质球的父子层级的命名必须一致;

Unity3D入门中文教程

Unity3D基本操作 1.建模中使用的图片、文件、文件夹等以及模型中物体、材质等的名称都不能 使用中文或者特殊符号,可以使用英文字母、数字、下划线等 2.调整Max的单位为米 3.烘培光影的设置 4.模型的中的植物效果,第一种是单面片植物,需要设置其轴心为其物体的对 称中心;第二种是十字交叉的植物效果;第三种则是到Unity3D编辑器中通过地形编辑器系统添加 基本设置 5.Fbx导出插件下载地址: https://www.sodocs.net/doc/791489274.html,/adsk/servlet/item?siteID=123112&id=10775855 6.将Max文件中用到的图片都拷贝到Textures目录下,如 7.再打开Max文件,导出为FBX文件,使用默认设置,FBX文件也放置在和Max 文件相同的目录下,如 导出的时候,可以将模型简单的分类,如地面、植被、楼房等,也可以将模型分为几个区域,如小区1,小区2,学校等等分开导出 8.将包含Max文件、Fbx文件和Textures文件夹的文件夹拷贝到Unity3D项目的 Assets目录下,如下图中红圈

在下一次用Unity3D编辑器开启本项目的时候,编辑器将自动导入/更新该文件夹中的信息,并生成Materials文件夹,如 9.启动Unity3D编辑器 10.选择刚才拷贝进来的文件中的Fbx文件,如 修改其中的Meshes下的Scale Factor和Generate Colliders,如

点击其他Fbx文件或者单击其他区域将弹出如下的对话框 注意,其中植物/植被类的Fbx文件不需要设置Generate Colliders项 11.将Fbx文件直接拖放到Hierarchy区域,如

unity3d模型制作规范

unity3d模型制作规范 本文提到的所有数字模型制作,全部是用3D MAX建立模型,即使是不同的驱动引擎,对模型的要求基本是相同的。当一个VR模型制作完成时,它所包含的基本内容包括场景尺寸、单位,模型归类塌陷、命名、节点编辑,纹理、坐标、纹理尺寸、纹理格式、材质球等必须是符合制作规范的。一个归类清晰、面数节省、制作规范的模型文件对于程序控制管理是十分必要的。首先对制作流程作简单介绍:素材采集-模型制作-贴图制作-场景塌陷、命名、展UV坐标-灯光渲染测试-场景烘培-场景调整导出 第一章模型制作规范 1 在模型分工之前,必须确定模型定位标准。一般这个标准会是一个CAD底图。制作人员必须依照这个带有CAD底图的文件确定自己分工区域的模型位置,并且不得对这个标准文件进行任何修改。导入到MAX里的CAD底图最好在(0,0,0)位置,以便制作人员的初始模型在零点附近。 2 在没有特殊要求的情况下,单位为米(Meters),如图所示。 3 删除场景中多余的面,在建立模型时,看不见的地方不用建模,对于看不见的面也可以删除,主要是为了提高贴图的利用率,降低整个场景的面数,以提高交互场景的运行速度。如Box底面、贴着墙壁物体的背面等。 4 保持模型面与面之间的距离推荐最小间距为当前场景最大尺度的二千分之一。例如:在制作室内场景时,物体的面与面之间距离不要小于2mm;在制作场景长(或宽)为1km的室外场景时,物体的面与面之间距离不要小于20cm。如果物体的面与面之间贴得太近,会出现两个面交替出现的闪烁现象。模型与模型之间不允许出现共面、漏面和反面,看不见的面要删掉。在建模初期一定要注意检查共面、漏面和反面的情况; 5 可以复制的物体尽量复制。如果一个1000个面的物体,烘焙好之后复制出去100个,那么他所消耗的资源,基本上和一个物体所消耗的资源一样多。

Unity3d 实验指导书

6.实验6U n i t y3d基本操作1实验目的 通过本实验的学习,使学生掌握利用软件开发工具unity3d进行三维模型的创建,以及掌握Unity3d软件的基本操作方法。 2实验环境 Windows10操作系统、实验内容 Unity3D操作方法,地形、树、草的绘制,天空盒、雾及影子效果的添加方法,材质贴图的编辑,地形中贴图的编辑设置 4实验步骤 (1). 在菜单栏GameObject->3DObject->Terrain里创建地形,在右面的Inspector设 置面板里点击来修改地形的面积,选择一个合适的 大小(如图)。 图4-地形示意图 (2). 在菜单栏GameObject->Light->Directionallight里创建平行光(如下图)创建项目的时候默认会添加一个,如果没有就手动添加一个。 (3). 选中地形对象,在右边的Inspector面板里面设置Terrain参数,Terrain菜单栏有一行图标,其中该图标用于建立无极限高的山峰,该图标比第一个图标多了一个参数值Height,设置该参数可以限定山 的高度,因此可以创建高地平台,使用该图标可平滑山峰,通过改变BrushSize 和Opacity的参数建立不同的山峰(如图3); (4). Terrain菜单栏里面的图标可用于给地形贴图,点击 Assets->Importpackage->Environment->TerrainAssets导入软件自带的地形的贴 图4-平行光示意图

图数据库,点击选择AddTexture选择已导入的贴图材料进行贴图(如下图); (5). 该图标分别可用于给场景添加树木和草,方法为点击菜单Assets->Importpackage->SpeedTree和TerrainAssets分别导入树木和草的数据库,点击或,选择AddTree在弹窗中点击 来添加已导入的树木和草材料(如下图所示);草 材料通过EditDetail添加,属于细节部分,放大后方可看见。 图4-5添加草木 (6). 打开Project菜单下的Assets文件夹,找到前面导入的Environment包文件夹,找到Water文件夹,选择一个水模型(例如:WaterProDayTime)放在水池中,选中 该水对象用图标来调整水的大小和位置使其覆盖水池,如下 所示。 (7). 点击Assets->Importpackage->Sykboxes导入天空的材料数据库(没有Skyboxs 的话可以去AssetStore下载导 入)。 a)在Hierarchy中添加一个camera,创建项目的时候默认会添加一个,如果没有 就手动添加一个。 b)选中MainCamera。然后在右边的Inspector视图中会显示出MainCamera的各 个组件。 c)在上方菜单栏中选择”Component“,然后鼠标移动至下拉菜单中的”Rendering “,右边列出的菜单中就有一项是”Skybox“。点击”Skybox“,就可以将” Skybox“组件添加到MainCamera上面。要注意的是,点击前必须在Hierarchy 视图中选中MainCamera,否则无法添加。如果选中了别的对象,会添加到别的 对象上去。 图4-6添加水模型

《3D游戏场景设计实训》课程标准

《3D游戏场景设计实训》课程标准 1. 概述 1.1课程的性质 本课程是软件技术(游戏软件技术)专业学生的专业必修课。理实一体的形式,逐步掌握基本的游戏开发知识和技能,在学习的过程中让学生磨砺意志、发展思维、陶冶情操、拓展视野、丰富生活经历、发展个性、提高人文素养。本课程对Unity3D引擎进行了全面、系统的讲解,从结构上主要分为3大部分:概论、引擎知识讲解以及实例制作讲解。概论主要针对游戏图像技术的发展以及当今游戏制作领域的主流引擎技术进行介绍,引擎知识讲解是针对Unity3D引擎的理论与实际操作进行全面系统的讲解;野外游戏场景和室内游戏场景两大实例的制作讲解带领大家学习利用Untiy3D引擎编辑器制作游戏场景的整体流程、方法和技巧。 1.2课程设计理念 1.面向专业学生,注重素质教育。 2.倡导活动教学,鼓励实际应用。 3.精选教学内容,重视学习过程。 4.突出学生主体,尊重个体差异。 5.利用现代技术,开发课程资源。 1.3课程开发思路 结合大学生身心发展的特点,将本课程目标定为“培养学生的专业高级技能运用能力”。以任务教学法、案例教学法、交流教学法、启发引导式教学为主,积极开发真实项目模拟教学法。这些教学方法充分体现了“自我学习”、“信息处理”、“与人交流”、“与人合作”、“解决问题”等学习、交流能力对大学生的要求。以分组形式、竞赛、课堂小组讨论为主。

2.课程目标 总体目标是培养学生的3d游戏场景设计能力,为学生的终身学习和身心健康发展奠定基础。Unity3d场景设计能力的形成建立在学生的游戏基础知识、编程能力、文化素养以及情感态度和学习策略等方面综合发展的基础之上。 2.1知识目标 掌握Unity3d工具的使用,场景的设置、角色的设置、UI界面、背包系统、角色运动路径、激光特效的制作、视图控制及游戏的操控设置等。 2.2素质目标 能在学习中主动请教,积极探索适合自己的学习方法。对3d游戏开发表现出积极性和初步的自信心,能在学习中积极与他人合作,互相帮助。能初步运用认知策略掌握知识和技能;初步运用调控策略监控、调整自己的情绪和行。能初步运用资源策略,合理利用周围环境,制定简单的学习计划,实现自管理,提高学习效率;初步运用交际策略,提游戏开发的能力。 2.3能力目标 能够熟练掌握游戏开发工具,能够设计相对复杂的3d游戏场景,包括模型的创建,模型导出与导入,地形创建,水,光,天空,落叶等,并能够设计野外和室内游戏场景。 3.课程内容和要求 根据专业课程目标和涵盖的工作任务要求,确定课程内容和要求,说明学生应获得的知识、技

我学院:unity3d修改Cube每个面的贴图UV方法

unity3d修改Cube每个面的贴图UV方法 修改一个Cube中每个面的贴图UV,也就是贴图中有多个矩形贴图,需要程序从贴图中读取一部分赋值给Cube每个面。 看下最终效果图: 废话不多说,贴上代码using Unity Engine; using System.Collections; [ExecuteInEditMode] public class CustomUVS : MonoBehaviour { public Vector2 topPoint; public Vector2 bottomPoint; public Vector2 leftPoint; public Vector2 rightPoint; public Vector2 frontPoint; public Vector2 backPoint; private Mesh m_mesh; public enum CubeFaceType { Top, Bottom, Left, Right, Front, Back }; // Use this for initialization void Start () {

MeshFilter meshFilter = GetComponent(); if (meshFilter == null) { Debug.LogError("Script needs MeshFilter component"); return; } #if UNITY_EDITOR Mesh meshCopy = Mesh.Instantiate(meshFilter.sharedMesh) as Mesh; // Make a deep copy https://www.sodocs.net/doc/791489274.html, = "Cube"; m_mesh = meshFilter.mesh = meshCopy; // Assign the copy to the meshes #else m_mesh = meshFilter.mesh; #endif if (m_mesh == null || m_mesh.uv.Length != 24) { Debug.LogError("Script needs to be attached to built-in cube"); return; } UpdateMeshUVS(); } // Update is called once per frame void Update () { #if UNITY_EDITOR UpdateMeshUVS(); #endif } void UpdateMeshUVS() { Vector2[] uvs = m_mesh.uv; // Front SetFaceTexture(CubeFaceType.Front, uvs); // Top SetFaceTexture(CubeFaceType.Top, uvs); // Back SetFaceTexture(CubeFaceType.Back, uvs); // Bottom SetFaceTexture(CubeFaceType.Bottom, uvs); // Left SetFaceTexture(CubeFaceType.Left, uvs); // Right SetFaceTexture(CubeFaceType.Right, uvs); m_mesh.uv = uvs; } Vector2[] GetUVS(float originX, float originY)

Unity3D 美术资源规范

Unity3D 美术资源规范 一.单位,比例统一 在建模型前先设置好单位,在同一场景中会用到的模型的单位设置必须一样,模型与模型之间的比例要正确,和程序的导入单位一致,即便到程序需要缩放也可以统一调整缩放比例。统一单位为米。 二.模型规范 ⒈所有角色模型最好站立在原点。没有特定要求下,必须以物体对象中心为轴心。 ⒉面数的控制。移动设备每个网格模型控制在300-1500个多边形将会达到比较好的效果。而对于桌面平台,理论范围1500-4000。如果游戏中任意时刻内屏幕上出现了大量的角色,那么就应该降低每个角色的面数。比如,半条命2对于每个角色使用2500-5000个三角面。 正常单个物体控制在1000个面以下,整个屏幕应控制在7500个面以下。所有物体不超过20000个三角面。 ⒊整理模型文件,仔细检查模型文件,尽量做到最大优化,看不到的地方不需要的面要删除,合并断开的顶点,移除孤立的顶点,注意模型的命名规范。模型给绑定之前必须做一次重置变换。 ⒋可以复制的物体尽量复制。如果一个1000面的物体,烘焙好之后复制出去100个,那么他所消耗的资源基本和一个物体消耗的资源一样多。 三.材质贴图规范

⒈我们目前使用的Unity3D软件作为仿真开发平台,该软件对模型的材质有一些特殊的要求,在我们使用的3dsMax中不是所有材质都被Unity3D软件所支持,只有standard(标准材质)和Multi/Sub-Objiect(多维/子物体材质)被Unity3D软件所支持。注:Multi/Sub-Objiect(多维/子物体材质)要注意里面的子材质必须为standard(标准材质)才能被支持。 ⒉Unity3D目前只支持Bitmap贴图类型,其它所有贴图类型均不支持。只支持DiffuseColor (漫反射)同self-Illumination(自发光,用来导出lightmap)贴图通道。Self-Illumination(不透明)贴图通道在烘焙lightmap后,需要将此贴图通道channel设置为烘焙后的新channel,同时将生成的lightmap指向到self-Illumination。 四.贴图文件格式和尺寸 原始贴图不带通道的jpg,带通道的为32位tga或者png,尺寸最大别超过2048,贴图文件尺寸须为2的N次方(8、16、32、64、128、256、512、1024)最大贴图尺寸不能超过1024x1024,特殊情况下尺寸可在这些范围内做调整。 五.贴图材质应用规则 ⒈贴图不能为中文命名,不能有重名; ⒉材质球命名与物体名称一致,材质球的父子层级的命名必须一致;

unity3d游戏课程设计报告报告

游戏程序设计课程报告 课程: Unity3D课程设计【 题目:探索迷宫 班级: 学号: 《 姓名: 日期:

一、… 二、摘要 UNITY游戏是一种新型的 IT引擎。我们研究主要内容是UNITY 游戏设计方法。指以游戏客户端软件为窗口的旨在实现娱乐、休闲、交流和取得虚拟成就的具有可持续性的个体性单人游戏。 本报告主要讲述了这个小游戏的设计思路及初步使用Unity3D 软件的感受和总结。设计过程中,首先建立自己想要的模型,然后在此基础上进行需求迭代,详细设计时不断地修正和完善,经过测试阶段反复调试和验证,最终形成达到设计要求的小游戏。 基于UNITY基础,构建了一个益智游戏风格的游戏,并有主角与关卡、游戏逻辑、游戏环境界面等设计,使得玩家可以在场景中进行寻找神龛的冒险游戏。 本游戏的控制很简单,及用键盘的WASD及SPACE五个控制人物的上下左右跳跃五个方向,用户根据自己的战略方式选择寻找油桶点亮煤油灯然后寻找神龛。 三、】 四、概述 《UNITY游戏程序设计》这一课程以大作业形式进行考核,能更

好地锻炼学生综合运用本课程所授知识的能力。大作业主要内容为设计完成面向某一主题内容的游戏演示程序。 自选游戏主题,并根据所选定的主题内容设计一个典型的游戏场景及玩家逻辑,其中包含主角与关卡,游戏逻辑,游戏环境界面与交互过程等的设计;开发完成与设计相符的游戏Demo。 要求使用Unity3D游戏开发软件实现上述游戏Demo。 五、具体要求 1、每人单独完成,特殊可由多人合作完成。 2、游戏主题自拟。 3、根据所设游戏主题、场景及玩家逻辑,实现完成相应的游戏 Demo,并撰写设计开发报告。 六、. 七、设计主题 基于视频教程“平衡球”的基础,构建了一个益智游戏风格的游戏,并有主角与关卡(一关)、游戏逻辑(触碰油桶、神龛)、游戏环境界面(通道)等设计,使得玩家可以在场景轨道中进行吃油桶、神龛的冒险游戏。 八、设计思路 本游戏以几个环环相扣的通道作为人物运动的轨迹,在通道上分别设计一些油桶,通过电脑上的WASD SPACE分别控制人物的运动方向;如果人物运动位置没有偏离所设计通道平面而且碰触到油桶,即算初步成功,当人物吃掉所设计的油桶,油灯就会点亮。当人物找到

unity3d游戏课程设计报告

游戏程序设计课程报告 课程:Unity3D课程设计 题目:探索迷宫 班级: 学号: 姓名: 日期:2014.12 一、摘要

UNITY游戏是一种新型的IT引擎。我们研究主要内容是UNITY 游戏设计方法。指以游戏客户端软件为窗口的旨在实现娱乐、休闲、交流和取得虚拟成就的具有可持续性的个体性单人游戏。 本报告主要讲述了这个小游戏的设计思路及初步使用Unity3D 软件的感受和总结。设计过程中,首先建立自己想要的模型,然后在此基础上进行需求迭代,详细设计时不断地修正和完善,经过测试阶段反复调试和验证,最终形成达到设计要求的小游戏。 基于UNITY基础,构建了一个益智游戏风格的游戏,并有主角与关卡、游戏逻辑、游戏环境界面等设计,使得玩家可以在场景中进行寻找神龛的冒险游戏。 本游戏的控制很简单,及用键盘的W ASD及SPACE五个控制人物的上下左右跳跃五个方向,用户根据自己的战略方式选择寻找油桶点亮煤油灯然后寻找神龛。 二、概述 《UNITY游戏程序设计》这一课程以大作业形式进行考核,能更好地锻炼学生综合运用本课程所授知识的能力。大作业主要内容为设计完成面向某一主题内容的游戏演示程序。 自选游戏主题,并根据所选定的主题内容设计一个典型的游戏场景及玩家逻辑,其中包含主角与关卡,游戏逻辑,游戏环境界面与交

互过程等的设计;开发完成与设计相符的游戏Demo。 要求使用Unity3D游戏开发软件实现上述游戏Demo。 三、具体要求 1、每人单独完成,特殊可由多人合作完成。 2、游戏主题自拟。 3、根据所设游戏主题、场景及玩家逻辑,实现完成相应的游戏 Demo,并撰写设计开发报告。 四、设计主题 基于视频教程“平衡球”的基础,构建了一个益智游戏风格的游戏,并有主角与关卡(一关)、游戏逻辑(触碰油桶、神龛)、游戏环境界面(通道)等设计,使得玩家可以在场景轨道中进行吃油桶、神龛的冒险游戏。 五、设计思路 本游戏以几个环环相扣的通道作为人物运动的轨迹,在通道上分别设计一些油桶,通过电脑上的WASD SPACE分别控制人物的运动方向;如果人物运动位置没有偏离所设计通道平面而且碰触到油桶,即算初步成功,当人物吃掉所设计的油桶,油灯就会点亮。当人物找到并吃掉所设计的神龛,就会通过关卡。 本报告主要讲述了这个小游戏的设计思路及初步使用Unity3D 软件的感受和总结。设计过程中,首先建立自己想要的模型,然后在此基础上进行需求迭代,详细设计时不断地修正和完善,经过测试阶段反复调试和验证,最终形成达到设计要求的小游戏。

游戏美术制作要求规范

1.项目工程的创建规范 如下图所示 文件夹内所有文件必须英文或字母命名(游戏引擎导入模型或贴图如果含有汉字会报错)2.文件提交规范 .一工程内文件,材质球,贴图命名规范 例如 1模型文件叫红色大门 Door-red-01 (这里模型加颜色加编号是为了区别大项目中出现重名的情况) 2材质球命名 Door-red-01-mat (mat是材质球的缩写、必须保证文件名,材质球名,贴图名的统一性) 3贴图名 Door-red-01-cm(颜色贴图)Door-red-01-sm(高光贴图) Door-red-01-nm(法线贴图)

(注意;如果模型是放在地面上那么以模型底部为坐标轴原点,如果模型是挂在墙上那么以靠墙侧中心点为坐标轴原点,) 二模型轴心,模型属性重置,正反面 首先使用reset XForm重置模型而后打开背面消隐检查模型是否有反面 之后检查模型是否有废点废线废面 再模型以及轴心归到世界坐标原点模型三个旋转轴向数值清零缩放三轴向数值100%

一.单位,比例统一 在建模型前先设置好单位,在同一场景中会用到的模型的单位设置必须一样,模型与模型之间的比例要正确,和程序的导入单位一致,即便到程序需要缩放也可以统一调整缩放比例。统一单位为米。 二.模型规范 ⒈所有角色模型最好站立在原点。没有特定要求下,必须以物体对象中心为轴心。 ⒉面数的控制。移动设备每个网格模型控制在300-1500个多边形将会达到比较好的效果。而对于桌面平台,理论范围1500-4000。如果游戏中任意时刻内屏幕上出现了大量的角色,那么就应该降低每个角色的面数。比如,半条命2对于每个角色使用2500-5000个三角面。 正常单个物体控制在1000个面以下,整个屏幕应控制在7500个面以下。所有物体不超过20000个三角面。 ⒊整理模型文件,仔细检查模型文件,尽量做到最大优化,看不到的地方不需要的面要删除,合并断开的顶点,移除孤立的顶点,注意模型的命名规范。模型给绑定之前必须做一次重置变换。 ⒋可以复制的物体尽量复制。如果一个1000面的物体,烘焙好之后复制出去100个,那么他所消耗的资源基本和一个物体消耗的资源一样多。 三.材质贴图规范 ⒈我们目前使用的unity3d软件作为仿真开发平台,该软件对模型的材质有一些特殊的要求,在我们使用的3dsMax中不是所有材质都被Unity3D软件所支持,只有standard(标准材质)和Multi/Sub-Objiect(多维/子物体材质)被Unity3D 软件所支持。注:Multi/Sub-Objiect(多维/子物体材质)要注意里面的子材质必须为standard(标准材质)才能被支持。 ⒉Unity3D目前只支持Bitmap贴图类型,其它所有贴图类型均不支持。只支持DiffuseColor(漫反射)同self-Illumination(自发光,用来导出lightmap)贴图通道。Self-Illumination(不透明)贴图通道在烘焙lightmap后,需要将此贴图通道channel设置为烘焙后的新channel,同时将生成的lightmap指向到self-Illumination。 四.贴图文件格式和尺寸

Unity3D光照贴图的Lightmapping技术教程

学IT技能上我学院网https://www.sodocs.net/doc/791489274.html, Unity3D光照贴图的Lightmapping技术教程今天我们来讲解Unity3d中光照贴图Lightmapping技术,Lightmapping光照贴图技术是一种增强静态场景光照效果的技术,其优点是可以通过较少的性能消耗使静态场景看上去更加真实,丰富,更加具有立体感;缺点是不能用来实时地处理动态光照。当游戏场景包含了大量的多边形时,实时光源和阴影对游戏的性能的影响会很大。 这时使用Lightmapping技术,将光线效果预渲染成贴图使用到多边形上模拟光影效果。 烘焙参数 Object选项卡 “All”组中的参数 Lightmap Static:选中则表示该物体将参与烘焙。 Scale In Lightmap:分辨率缩放,可以使不同的物体具有不同的光照精度。这样可以根据实际场景,令远景中的物体采用较低的分辨率,节省光照贴图的存储空间。而较近的物体采用较高的分辨率,使贴图更加逼真。

学IT技能上我学院网https://www.sodocs.net/doc/791489274.html, Lightmap Index:渲染时所使用的光照贴图索引。值为0,表示渲染时使用烘焙出来的第一张光照图;值为255,表示渲染时不使用光照图。 Tiling X/Y和Offset X/Y共同决定了一个游戏对象的光照信息在整张光照图中的位置,区域。 “Lights”中的参数 Lightmapping:有3种类型可选 1)RelatimeOnly:光源不参与烘焙,只作用于实时光照。 2)Auto:表示光源在不同的情况下作不同的响应。在烘焙时,该光源会作用于所有参与烘焙的物体;在实际游戏运行中,该光源会作为实时光源作用于那些动态的或者没有参与过烘焙的物体,而不作用于烘焙过的静态物体。在使用Dual Lightmaps的情况下,对于小于阴影距离(shadow Distance,Unity中用于实时生成阴影的范围,范围之外将不进行实时生成阴影)的物体,该光源将作为实时光源作用于这些物体,不管是静态还是动态。 3)表示光源只在烘焙时使用,其他时间将不作用于任何物体。

unity3D代码规范及项目目录结构分解

项目目录及代码规范 一、目录部分(公共规范) 1.自定义目录以”_”开头(一级目录也是就在Assets目录下面的自定义目录)(之前有看过一篇文章说如此做法的好处是:文件夹下如果没有用到的资源,打包时不会被打入进去);建议场景以双下划线”__”开头,保证场景永远在所有文件夹的最前边。 2. --Editor 自写的灵活方便插件 --Editor_NGUI 较大型三方的插件(前面加上Editor是为了让所有编辑器都集中在一块) (--NGUI 较大型三方的插件,如果你们目录不多,看起来不乱不改名字也没问题。方便更新。如果用的插件比较多的话,还是将它放到Plugins下面。只是更新的时候需要注意一下就是了。) --Gizmos 使用GIZMOS所需要的标志等临时文件 --StreamingAssets (包括JsonData目录/Assetbundle目录/各种只读文件预储存目录,这个目录将自动打包到导出程序,用Application.streamingAssetsPath读取) --Models 模型文件,其中会包括自动生成的材质球文件 --Others 其他类型的文件(一般作为不常修改的文件类型,例如添加的Shader、物理材质、动画文件。)若认为是比较常用的话,可以提取成一个文件夹。 --Plugins 主要是DLL的外部插件文件,例如JsonFx、SmartFoxClient等

--Prefabs 预储存文件 --Resources 动态加载的资源文件,一般这里只用少量,多的话,需要自己打ASSETBUNDLE 包,有选择性的动态加载 --Scenes 场景文件 --Scripts 脚本代码文件 --Sounds 音效文件 --Textures 所有的贴图 增加一个大写字母Z打头的测试文件夹,比如Ztest,所有的测试内容都可以放到这个文件夹,好处是该文件夹永远处于所有文件夹的最下面,而且最后打包的时候可以完全删掉,保证测试的内容都剔除出去。 二、代码部分(程序规范) 基本命名规范: 命名原则 Pascal Case :所有单词第一个字母大写,其他字母小写。 Camel Case :除了第一个单词,所有单词第一个字母大写,其他字母小写。 原则:MicroSoft建议,对于简单的变量使用CamelCase,而对于比较高级的命名规则使用PascalCase。 3.1.2. Namespace「名空间」命名规范 1) 使用公司名.产品名这样的格式。(例:B abybus.xxx) 2) Namespace中类的依赖关系应该体现在命名上,比如System.Web.UI.Design中的类以来于System.Web.UI。 3) 使用Pascal大小写形式命名。(例:GameSceneScript) 4) 当商标(产品名)的命名风格和Pascal风格不符时,以商标(产品名)为准。(例:iOS) 5) 在语意合适的情况下使用复数,比如System.Collections。例外是缩写和商标的情况。 6) Namespace的名字不一定和Assembly一一对应。 3.1.3. Class[类] 命名规范 1) 使用名词或者名词性词组命名class。

unity3d游戏开发之UV贴图教程

一、理解UV贴图 UVs是驻留在多边形网格顶点上的两维纹理坐标点,它们定义了一个两维纹理坐标系统,称为UV纹理空间,这个空间用U和V两个字母定义坐标轴。用于确定如何将一个纹理图像放置在三维的模型表面。 本质上,UVs是提供了一种模型表面与纹理图像之间的连接关系,UVs负责确定纹理图像上的一个点(像素)应该放置在模型表面的哪一个顶点上,由此可将整个纹理都铺盖到模型上。如果没有UVs,多边形网格将不能被渲染出纹理。 通常在创建MAYA原始对象时,UVs一般都被自动创建(在创建参数面板上有一个Create UVs选项,默认是勾选的),但大部分情况下,我们还是需要重新安排UVs,因为,在编辑修改模型时,UVs不会自动更新改变位置。 重新安排UVs,一般是在模型完全做好之后,并且在指定纹理贴图之前进行。此外,任何对模型的修改都可能会造成模型顶点与UVs的错位,从而使纹理贴图出现错误。更多精彩请点击【狗刨学习网】 二、UVs和纹理映射 NURBS表面与多边形网格的贴图机制不同,NURBS表面的UV是内建的(已经自动定义出U、V),这些UV不能被编辑,移动CV将会影响纹理贴图。而多边形的UVs并非一开始就存在,还必须明确地创建并且可以随后进一步修改编辑。 三、UV贴图

为一个表面创建UVs的过程叫UV贴图(UV mapping)。这个过程包括创建、编辑。其结果是明确地决定图像如何在三维模型上显示,这项技术的熟练程度直接影响模型的最后表现。 四、创建UVs Maya中有很多UVs创建工具:如,自动UV工具、平面UV工具、圆柱UV工具、球形UV工具、用户自定义UV工具等。 每种创建工具都是使用一种预定的规则将UV纹理坐标投射到模型表面,自动创建纹理图像与表面的关联。 通常,对自动产生的UV还必须使用UV编辑器进一步编辑才能达到所需要的效果。因为每次对模型的修改(如挤压,缩放,增加、删除等等)都会造成UVs错位,所以最好的工作流程是等模型完全设计好了之后,再开始创建UVs。 五、观察和评估UVs 一旦已经为一个模型创建了UVs,即可使用UV编辑器编辑它。这个编辑器,可以在一个二维平面上观察UV坐标点和它与纹理图像的关系,并且能手动编辑UV及它的各种元素。 通常,使用创建工具默认产生的UVs可能不符合我们的需求,因此,可以在UV 编辑器里,用眼睛观察评估,并且手动调节UVs的位置(重新排列)。 调节UVs的参考原则是信赖最终需要贴图的纹理图像。也可以说,不同的图像需要不同的UVs位置。

相关主题