Unity3D美术方面贴图蓄力帖
untiy3d的美工方面需要知道的知识
untiy3d的美工方面需要知道的知识1. 引擎没有说具体的面数限制,也许是跟VIRTOOLS一样的标准,按机器性能而定。
2. 导入图形或者MESH的方法无非两种,一种是直接拷贝到文件目录下的Assets文件夹下面,Unity3d引擎会自动找到添加的文件,并且能在PROJECT面板中找到它。
另一种是我们在PROJECT面板中用右键菜单,导入素材。
当然,我是用MAYA导入的,U3D引擎对于MAYA的支持还是不错的,但是也需要注意,不要用中文的目录结构,最好直接从MAYA的工程文件夹中导入,最好在导入MESH前先把贴图文件放到相应的文件夹,或者相关文件夹的子文件夹。
在我们导入场景文件的时候,需要在导入设置中勾选创建碰撞,这样导入的场景我们就可以踩在上面了。
(这跟我们添加碰撞组件是有些不同的)3. Unity3d引擎支持大多数常用的贴图,比如漫反射贴图,高光贴图,法线贴图。
如此一来,它就成了一个名副其实的次时代引擎了。
当然与UNREAL引擎的强大材质编辑器不同,U3D引擎主要是编辑材质的方式是使用一种专门的语言,类似于CgFX和Direct3D的语法。
当然如果不是专门的图形程序员,我们只要掌握相关的SHADER的使用方法就可以了。
在我们安装完U3D引擎后,系统自带的SHADER足够我们日常大多数情况下使用了。
如果我们还有特殊的要求,可以去官网上下载相关的程序,然后把代码保存为 .shader 的文件,放到相应的目录底下,然后我们就有了这种Shade R。
掌握并且理解了上面我说的乱七八糟的三点,你就可以作为一个U3D引擎的美工开始工作了。
其中有几个需要我们进行深入探讨的几个方面:一是导入的MESH 的要求,如何减面,UV的情况怎样,是否可以重叠UV。
二是导入的贴图规范,我们的各种贴图要达到怎样的程度才能导入,并不是直接拍了照片贴上就很有效果的,我们需要在三维软件中烘焙,之后才能导入。
还有光照贴图怎么制作。
unity3d游戏开发之UV贴图教程
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)。
这个过程包括创建、编辑。
其结果是明确地决定图像如何在三维模型上显示,这项技术的熟练程度直接影响模型的最后表现。
四、创建UVsMaya中有很多UVs创建工具:如,自动UV工具、平面UV工具、圆柱UV工具、球形UV工具、用户自定义UV工具等。
每种创建工具都是使用一种预定的规则将UV纹理坐标投射到模型表面,自动创建纹理图像与表面的关联。
通常,对自动产生的UV还必须使用UV编辑器进一步编辑才能达到所需要的效果。
因为每次对模型的修改(如挤压,缩放,增加、删除等等)都会造成UVs错位,所以最好的工作流程是等模型完全设计好了之后,再开始创建UVs。
unity3d rendertexture 原理
unity3d rendertexture 原理
Unity3D中的RenderTexture是一种特殊的Texture类型,它本质上是将一个FrameBufferObject(帧缓存对象)连接到一个server-side的Texture对象。
在渲染过程中,贴图最开始是存在cpu这边的内存中的,这个贴图通常称为client-side的texture,它最终要被送到gpu的存储里,gpu才能使用它进行渲染,送到gpu里的那一份被称为server-side的texture。
这个texture在cpu和gpu之间拷贝要考虑到一定的带宽瓶颈。
然而,现代gpu通常可以创建很多其他的FBO,这些FBO不连接窗口区域,这种创建的FBO的存在目的就是允许将渲染结果保存在gpu的一块存储区域,待之后使用。
这是一个非常有用的东西。
RenderTexture在U3D中的实现原理大致如下:
在服务器端创建一个FBO(FrameBufferObject),并将其与一个server-side的Texture 对象连接。
在客户端,创建一个与服务器端相对应的RenderTexture对象,并将这个RenderTexture 作为贴图纹理进行绘制。
在渲染过程中,客户端会将绘制结果(包括颜色、深度、模板等)写入到RenderTexture 中。
当需要获取RenderTexture中的内容时,客户端可以通过读取RenderTexture中的数据来获取绘制结果。
需要注意的是,RenderTexture的使用需要考虑到带宽瓶颈和性能优化等问题。
因此,在使用RenderTexture时需要谨慎选择使用场景和优化策略。
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;Truecolor 真彩。
Unity3D光照效果优化教程
Unity3D光照效果优化教程引言Unity3D是一款在游戏开发领域广受欢迎的引擎,它提供了丰富的特效和光照效果,能够创建更加逼真的游戏世界。
然而,光照效果是游戏中耗费计算资源的重要组成部分之一。
在本篇文章中,我们将探讨如何优化Unity3D的光照效果,以提高游戏的性能和质量。
第一章:光照贴图的使用光照贴图是一种预计算的光照信息,可以用于实时渲染中。
通过使用光照贴图,我们能够节省大量计算资源。
在Unity3D中,我们可以使用Lightmap来生成光照贴图。
在导入场景中的模型时,勾选“Generate Lightmap UVs”选项,Unity会自动生成Lightmap UVs,并将光照信息保存在Lightmap中。
通过合理利用光照贴图,我们能够大幅度提高游戏的渲染效率。
第二章:光照贴图分辨率的调整在Unity3D中,我们可以通过调整光照贴图的分辨率来优化光照效果。
在场景中,我们可以选择将重要的物体与不重要的物体分开,为不同的物体设置不同的光照贴图分辨率。
对于较为重要的物体,我们可以使用较高的分辨率,以获得更加细腻的光照效果。
而对于一些不太重要的物体,可以使用较低的分辨率。
通过合理分配光照贴图的分辨率,我们能够在保证游戏质量的情况下提高游戏的性能。
第三章:灯光设置的优化在Unity3D中,灯光是影响光照效果的关键因素之一。
对于场景中的灯光,我们可以进行一些优化设置以提高游戏性能。
首先,我们可以限制灯光的数量,特别是对于无效或不可见的灯光。
其次,我们可以使用Shadow Distance选项来控制阴影的渲染距离,避免无效渲染。
此外,对于不需要阴影的灯光,可以关闭阴影渲染以提高性能。
通过灯光设置的优化,我们能够有效减少光照效果对游戏性能的影响。
第四章:动态光照的使用和优化在一些特殊的情况下,游戏中需要使用动态光照,以提供更加真实的光照效果。
然而,动态光照会对游戏性能产生较大的影响。
为了提高性能,我们可以采取一些优化措施。
Unity3D NormalMap法线贴图简介
学IT技能上我学院网Unity3DNormalMap法线贴图简介什么是法线贴图?在游戏中,如果角色或物体模型做的越精细(面数越多),那么渲染后效果也就越好,但很多时候处于对时间成本而通过其它的一些技术手段来达到相似的效果.而应用的最广泛的可能就要数法线贴图了,在有光照的环境下,如果物体表面是凹凸不平的,那么它在接受光照的时候在不同的区域就会呈现出不同的明暗效果来展现这种凹凸感。
我们介绍过漫反射和镜面反射的计算中我们都用到了物体表面的法线,正因为物体表面法线的不同才导致了最终光照结果的不同,如果我们能够把整个模型表面各个位置的法线映射到一张二维贴图上,然后在这张贴图上存储上法线的信息,不就可以达到通过底模+二维贴图达到高模效果了么?而这里的二维贴图就是我们所说的法线贴图.为什么叫它法线贴图呢?它和我们之前一直使用的纹理贴图有何区别呢?纹理贴图中我们存储的是颜色值RGBA,而法线贴图里存储的是物体表面的法线,两类贴图的读取映射方式都是一致的,都是通过顶点自带信息里的texcoord里的uv坐标来读取,不过法线读取之后并不能直接使用,还要经过一些处理,我们会在后面说.下面在正式进入代码之前,我们先来了解几个知识点,很重要。
1.切线空间这个概念并不是十分好理解,但只要仔细想想也是可以弄清楚的。
我想大家对本地空间一定不陌生,一般美术做完的模型里面每个顶点的坐标都是本地坐标,也就是说对于模型上的各个部位共用一个一个统一的坐标原点,但有时候这样并不是很方便,比如建了一个人体模型,如果我们只是想以相对手为基准而进行一些动作,而不是坐标原点,这时候原本的本地坐标系便不再适应。
我们可以以手臂为基准再建立一个坐标系。
综上不难理解,之所以存在不同的坐标系,根本上是为了方便我们只考虑相关的因素,而排除不相关的因素。
就像如果我想以手为基准进行一个弯手指的操作是不需要考虑我这个手指在模型空间的位置坐标的,这样有效的降低了问题的复杂度。
Untiy3D美工知识
Untiy3D美工知识Unity3D教程:FBX如何内嵌纹理FBX打开后如何会自动生成贴图呢?FBX格式是可以内嵌纹理的,在导出FBX的对话框中勾选Embed Media即可。
Untiy3D美工知识。
现在的图形显卡可以很好的支持很多的多边形,但是他们他们还是有一些瓶颈的。
所以如果你有一个有100个三角形的MESH,它渲染起来所需要花费的运算跟1500个面数的物体是没有多大差别的。
因此最佳的渲染设置时每个模型大约1500-4000个三角面。
只有在游戏组件中的属性栏中勾选Mesh Renderer选项显卡才会渲染相应的模型,并且在场景中的空的GameObject组件是不会被渲染的。
所以,最好的导入渲染设置时合并Objects直到他们每个模型在1500个三角面面甚至更高一些,并且为整个模型使用一个材质。
如果只是把两个模型合并在一起但是不共同使用同一个材质并不会给你的图形带来一点优化。
如果你想有效的合并物体,你需要保证你合并后的模型使用一个材质。
(其实就是尽量减少材质球的数量)在你合并物体的时候需要知道一件事:如果你在你的场景中用到了很多小的灯光,你可以把场景中离得很近的物体合并为一个Object。
按照上面的思路,如果一个MESH具有多个材质球,那就说明在计算机渲染的时候是要进行多重运算的。
最普遍的你之所以一个MESH用多个材质的原因是因为两个材质不能使用相同的贴图。
所以如果你想要优化渲染设置,你最好确定你合并的那些MESH的材质是相同的。
Unity对于向显卡导出各种多边形是很擅长的,它可以很详尽的把所有的图形导入到显卡,并且优化数据。
你需要做的只是确定你的图形显示卡正常工作。
而不是要调整很多手动调节的设置。
相当数量的实时灯光对于游戏速度也是有限制的。
如果你想要有一个不错的展示,并且不关心凹凸贴图和实施灯光(Bumpmapping or Pixel Lighting),可以去Edit->Render Settings...然后设置Pixel Light Coun为0.这将会给所有的Object使用顶点灯光。
Unity3D教程:法线贴图
Unity3D教程:法线贴图Posted on 2013年01月11日 by U3d / Unity3D脚本/插件/被围观 351 次一:法线贴图的原理光照效果很大程度上是由垂直于物体表面的法线决定的,因为法线影响反射光的方向。
均匀垂直的法线是镜面贴图。
但是有时候我们会给一个平面使用砖墙贴图,砖墙应该是凹凸不平的,而如果让砖墙使用该平面的法线的话,画面就会很假,神马?一面墙像镜子一样反光=。
=而如果按真实砖墙去做模型的话,即做高精度模型,一方面制作麻烦,另一方面运行时对性能损耗大。
法线贴图就是来解决这个问题的。
法线贴图就是把法线信息储存在一张图里。
使用法线贴图时,通常顶点数和三角形面数只有高精度模型的十分之一不到。
二:法线贴图的实现将材质贴图对应的法线绘制在一张贴图上。
将贴图对应点的单位法线向量信息float3(x,y,z) 储存在图对应的颜色里color(r,g,b)里,其中x,y,z分别对应r,g,b。
单位法线向量float3(x,y,z),x,y,z的取值范围是[-1,1]。
在法线贴图中被压缩在颜色的范围[0,1]中,所以需要转换:颜色 = 0.5 * 法线 + 0.5;线 = 2 * (颜色 - 0.5);三:法线贴图的使用主要步骤(1)对法线贴图进行采样,取得压缩在颜色空间[0,1]里的法线float4 packedNormal = tex2D(_NormalMap, IN.uv_MainTex);(2)将压缩在[0,1]里的法线转换至3D空间[-1,1] (因为是单位向量)float3 expand(float3 v) { return (v - 0.5) * 2; }之后使用该法线即可,方法与16讲里一样。
具体实现详见本文末的脚本。
四:法线贴图的格式法线贴图主要分为2个类别:(1)RGB法线贴图,即上面使用的。
通常呈蓝色。
(后缀可以是常见的.png .jpg等)(2)压缩格式的法线贴图。
关于Unity3D图集打包、深度、DrawCalll分析
关于Unity3D图集打包、深度、DrawCalll分析转载自:/blog/s1*******/38436033 在最近,使用U3D开发的游戏核心部分功能即将完成,中间由于各种历史原因,导致项目存在比较大的问题,这些问题在最后,恐怕只能通过一次彻底的重构来解决现在的游戏跑起来会有接近130-170个左右的DrawCall,游戏运行起来明显感觉到卡,而经过一天的优化,DrawCall成功缩减到30-70个,这个效果是非常显著的,并且这个优化并没有通过将现有的资源打包图集来实现,图集都是原有的图集,如果从全局的角度对图集再进行一次优化,那么DrawCall还可以再减少十几个本次优化的重点包括:层级关系和特效对于U3D,我是一个菜鸟,对于U3D的一些东西是一知半解,例如DrawCall,我得到的是一些并不完全正确的信息,例如将N个纹理打包成一个图集,这个图集就只会产生一个DrawCall,如果不打成图集,那么就会有N个DrawCall,这个观点在很多人的认识里都是正确的,因为可以通过简单的操作来验证,但严格来说,这个观点是错误的,因为它还受层级关系影响!渲染顺序U3D的渲染是有顺序的,U3D的渲染顺序是由我们控制的,控制好U3D的渲染顺序,你才能控制好DrawCall一个DrawCall,表示U3D使用这个材质/纹理,来进行一次渲染,那么这次渲染假设有3个对象,那么当3个对象都使用这一个材质/纹理的时候,就会产生一次DrawCall,可以理解为一次将纹理输送到屏幕上的过程,(实际上引擎大多会使用如双缓冲,缓存这类的手段来优化这个过程,但在这里我们只需要这样子认识就可以了),假设3个对象使用不同的材质/纹理,那么无疑会产生3个DrawCall 接下来我们的3个对象使用2个材质,A和B使用材质1,C使用材质2,这时候来看,应该是有2个DrawCall,或者3个DrawCall。
应该是2个DrawCall啊,为什么会有3个DrawCall而且是有时候2个,有时候3个。
Unity3D基本操作教程文档
Unity3D基本操作教程(15分钟)由unity3dcn 于星期四, 12/24/2009 - 00:20 发表用Unity3D创建简单漫游1. 建模中使用的图片、文件、文件夹等以及模型中物体、材质等的名称都不能使用中文或者特殊符号,可以使用英文字母、数字、下划线等2. 调整Max的单位为米3. 烘培光影的设置4. 模型的中的植物效果,第一种是单面片植物,需要设置其轴心为其物体的对称中心;第二种是十字交叉的植物效果;第三种则是到Uni ty3D编辑器中通过地形编辑器系统添加基本设置5. Fbx导出插件下载地址:/adsk/servlet/item?siteID=123112&id=107758556. 将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文件或者单击其他区域将弹出如下的对话框点击Apply即可,类似的方式设置其他Fbx文件注意,其中植物/植被类的Fbx文件不需要设置Generate Colliders项11. 将Fbx文件直接拖放到Hierarchy区域,如12. 点击Hierarchy区域中的对象,同时将鼠标移动三维显示区域,同时点击键f,则该对象自动适配显示到三维区域中心,如13. 将全部fbx添加完成后,提高场景亮度如下单击Am bient Light,如下调整为即可设置完成14. 设置第一人称浏览删除场景中Main Cam era将Project区域的Standard Assets下的Prefabs下的First Person Controller拖到Hierarchy 区域中点选First Person Controller,调整First Person Controller的位置到场景中合适的位置,并设置其高度为1.37到2.1左右设置First Person Controller的高度在场景中地面之上15. 点击运行,即可测试修改视角控制键为右键16. 打开Project区域中的StandardAssets下的Cam eraScripts下的MouseLook脚本,在在Quaternion originalRotation;void Update (){if (axes == RotationAxes.MouseXAndY){// Read the m ouse input axis中添加一行代码修改为Quaternion originalRotation;void Update (){if(Input.GetAxis ("Fire2")==0) return;if (axes == RotationAxes.MouseXAndY){// Read the m ouse input axis如何取消浏览窗口上的右键菜单只要设置Unity对象的参数即可禁止右键菜单的显示,如下:<object id="UnityObject" classid="clsid: 444785F1-DE89-4295 -863A-D 46C3A781394"width="600" height="450"codebase="/download_webplayer/UnityWebPlayer.cab# version=2,0,0,0"><param nam e="src" value="MyDataFile.uni ty3d" /><param nam e="disableContex tMenu" value="true" /><em bed id="UnityEm bed" src="MyDataFile.uni ty3d" width="600" height="450"type="application/vnd.unity"pluginspage="/unity-web-player-2.x"disableContextMenu="true" /></object>植物效果设置17. 对于单面片的植物效果,需要设定其材质为Transparent/VertexLit类型,并为其添加公告板脚本设定前设置材质类型为Transparent/VertexLit类型,如下给单面片植物添加公告板脚本的方法是先选择该植物,然后点击菜单com ponent下的scripts下的cam era Facing Billboard即可,如下设置材质类型和添加公告板脚本后,如下如果没有该脚本组件,可以打开脚本编辑器,拷贝如下代码到脚本中,保存到Assets\Scripts下,命名为Cam eraFacingBillboard.cs即可using UnityEngine;using System.Collections;public class Cam eraFacingBillboard : MonoBehaviour{public Cam era cam eraToLookAt;void Start(){cam eraToLookAt = Cam era.m ain;}void Update(){Vector3 v = cam eraToLookAt.transform.position - transform.position;v.x = v.z = 0.0f;transform.LookAt(cam eraToLookAt.transform.position - v);}}18. 对于十字交叉的植物,需要将其材质设定为Nature/Vegetation Two Pass unlit类型设置前的效果设置后的效果水面效果的设置19. 创建一个网格面片20. 给该水面面片设置水材质和水脚本,如即可烘培光影贴图的处理21. Unity3D光影烘培的要求U3D的光影贴图使用的是3Dm ax中的标准材质的自发光贴图通道来存储光影贴图相关参数,如22. 给每个物体都附上贴图,如果是纯色物体,也付给纯色贴图23. 打光后,选择要烘培的物体设置输出路径添加烘培输出的贴图类型添加“LightingMap”类型设置烘培贴图大小和目标贴图位置为“自发光”设置烘培材质,选择“输出到源”点击“渲染”即可24. 标准材质贴图的烘培光影处理a) 物体据有标准材质b) 烘培渲染后,物体具有两个贴图c) 导出Fbx即可25. 多重子材质贴图的烘培光影处理a) 物体据有多重子材质贴图b) 渲染烘培后每个子材质都据有两个贴图c) 选择该物体,执行“多维材质2标准材质.m s”脚本,将该多维材质物体按其材质数量分解为标准材质的多个物体,新物体的名字以“原多维材质物体名字~其材质名称”命名,如点击“开始转换”,则将该物体从多维材质物体按期子材质分解为多个具有标准材质的物体d) 将全部的具有多维材质类型的物体分解完成后,即可导出26. 多个物体使用同一贴图的烘培光影处理因为我们在导入fbx文件到Unity3D编辑器中的时候,使用的都是按贴图来生成材质文件,所以多个物体使用同一贴图时会发生错误,修改其中任何一个的材质设置时,其他的使用该贴图的物体都会受到影响,解决的方法便是在Unity3D编辑器中生成一个具有该贴图的新材质,然后重新付给当前物体。
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。
unity3D学习之光照贴图
光照贴图完全集成到Unity 中,可在编辑器(Editor) 中创建整个关卡,然后对其进行光照映射,让所有材质自动获取光照贴图,无需手动进行。
对Unity 中的光照贴图来说,所有灯光属性会直接映射到Beast 光照烘培贴图工具中并烘培到纹理,提高性能。
Unity 专业版扩展了全局照明(Global Illumination) 功能,可烘培出真实、美观的光照,实时的相反操作则不可行。
此外,Unity 专业版提供天光和发光材质,使场景照明更加有趣。
在本页中,您将看到光照贴图(Lightmapping) 窗口中出现的所有属性的深入描述。
要打开光照贴图(Lightmapping) 窗口,请选择窗口(Window) –光照贴图(Lightmapping) 选项。
检视器顶部有三个场景筛选器(Scene Filter) 按钮,供用户将操作应用到所有对象或限制在灯光或渲染器内。
对象(Object)每个对象的灯光、网格渲染器和地形烘培设置根据当前的选择而定。
单击场景筛选器(Scene Filter) 按钮可在层级视图(Hierarchy) 中轻松看到灯光、渲染器或地形。
文章来自【狗刨学习网】网格渲染器和地形(Mesh Renderers and Terrains):静态光照贴图(Lightmap Static) 网格渲染器和地形(Mesh Renderers and Terrains) 须标为静态才能进行烘培。
光照贴图比率(仅用于网格渲染器(Mesh Renderers))值越大,网格渲染器的分(Scale In Lightmap) 辨率越高。
最终分辨率将成比例(光照贴图缩放(Scale))*(对象的世界坐标空间所占面积)*(全局烘培设置分辨率(Resolution) 值)。
值设置为0 将不烘培对象(但仍会影响其他烘培对象)。
光照贴图大小(Lightmap Size) (仅用于地形)地形实例的光照贴图大小。
地形不与其他对象共用图集,而是有自己的光照贴图。
Unity3D性能优化之美术资源制件规范
Unity3D性能优化之美术资源制件规范⼀、场景模型制作规范:1. 同屏地表⾯数限制在3万⾯以内,要充分考虑锁定视⾓的因素,看不到的模型背⾯可以尽量简单化,离可⾏⾛区域远的建筑模型,都可以做成低模,因为是不会⾛近看的。
2. 同屏地表drawcall限制50-70个(包含动态建筑),动态建筑可在地表制作测试完摆放效果正确后再单独输出,提交时不能出现在场景地表⾥⾯。
3. 资源合并规则:区域贴图合并、区域⽹格合并、相同材质合并4. 尽量勿⽤unity⾃带的草对象,应该⽤刷地表的草纹理5. 场景⼤建筑和特效资源独⽴,不⽤放地表,由技术动态控制6. 过⼤的地表,例如超过150⽶(15000像素),可以通过切割地表⽅式输出,程序动态加载7. 刷怪的区域以及玩家战⽃的区域尽量是平缓的,否则打怪放技能时效果不好控制,并且不宜放⼩建筑和动态建筑,影响性能。
8. 场景模型和地表尽量少⽤透明贴图,同个场景的透明贴图尽量在⼀张纹理9. 不开启实时灯光,全部效果⽤后期烘焙的⽅式实现10. 每个场景需制作⾏⾛区域⾯⽚,除地表范围外,⾼度也必须和地⾯⼀致,最后加mesh碰撞体11. 纹理尺⼨优先⽤256或512,最⼤1024,以1024的计算,⼀个场景纹理个数正常控制在两张以内⼆、⾓⾊模型制作规范注意问题:1. ⾻骼数量过量导致的影响:每根⾻骼都是⼀个独⽴的整体,当⽗⾻骼运动时,会带动⼦⾻骼运动,这个运动过程都是需要实时去计算的,⽽游戏内场景⽣物基本都处于运动状态下,导致⾻骼的计算⼀直在持续进⾏,⾻骼越多导致由计算引起的性能消耗更⼤。
2. 模型⾯数过量导致的影响:每个模型的⾯都是独⽴的⼀个三⾓形,⽽每个三⾓形及其贴图区域都是需要渲染的,⾯数越多导致渲染的消耗越⼤。
设置和明确数值:1. 主⾓1500⾯以下,⼩怪500-800⾯。
2. 主⾓⾻骼控制在40根以下,⼩怪尽量20根左右。
3. 贴图控制在1024以下,也可以是512和256,看具体情况选择。
unity3d贴图说明
Unity3D美术方面贴图我们都知道,一个三维场景的画面的好坏,百分之四十取决于模型,百分之六十取决于贴图,可见贴图在画面中所占的重要性。
在这里我将列举一些贴图,并且初步阐述其概念,理解原理的基础上制作贴图,也就顺手多了。
我在这里主要列举几种UNITY3D中常用的贴图,与大家分享,希望对大家有帮助。
01首先不得不说的是漫反射贴图:漫反射贴图diffuse map漫反射贴图在游戏中表现出物体表面的反射和表面颜色。
换句话说,它可以表现出物体被光照射到而显出的颜色和强度。
我们通过颜色和明暗来绘制一幅漫反射贴图,在这张贴图中,墙的砖缝中因为吸收了比较多的光线,所以比较暗,而墙砖的表面因为反射比较强,所以吸收的光线比较少。
上面的这张图可以看出砖块本身是灰色的,而砖块之间的裂缝几乎是黑色的。
刨去那些杂糅的东西,我们只谈明显的,漫反射贴图表现了什么?列举一下,物体的固有色以及纹理,贴图上的光影。
前面的固有色和纹理我们很容易理解,至于后面的光影,我们再绘制漫反射贴图的时候需要区别对待,比如我们做一堵墙,每一块砖都是用模型做出来的,那么我们就没有必要绘制砖缝,因为这个可以通过打灯光来实现。
可是我们如果用模型只做了一面墙,上面的砖块是用贴图来实现,那么就得绘制出砖缝了。
从美术的角度,砖缝出了事一条单独的材质带外,还有就是砖缝也是承接投影的,所以在漫反射图上,绘制出投影也是很有必要的,如下图:没有什么物体能够反射出跟照到它身上相同强度的光。
因此,让你的漫反射贴图暗一些是一个不错的想法。
通常,光滑的面只有很少的光会散射,所以你的漫反射贴图可以亮一些。
漫反射贴图应用到材质中去是直接通过DiffuseMap的。
再命名规范上它通常是再文件的末尾加上“_d”来标记它是漫反射贴图。
凹凸贴图Bump maps凸凹贴图可以给贴图增加立体感。
它其实并不能改变模型的形状,而是通过影响模型表面的影子来达到凸凹效果的。
再游戏中有两种不同类型的凸凹贴图,法线贴图(normalmap)和高度贴图(highmap)。
Unity3d和3dMax美工知识总结
Unity3d和3dMax美工知识总结3dsmax2010及以上版本安装插件,输出FBX的类型导入Unity3D 中。
默认情况下,3dsmax8可以和U3D软件直接融合,自动转换为FBX物体。
1.面数控制在MAX软件中制作单一Game Object物体的面数不能超过65000个三角形,即32500个多边形Poly,如果超过这个数量的物体不会显示出来,这就需要我们合理分布多边形和模型数量。
打开MAX场景,选择File/Properties/Summary Info可以打开文件属性记录。
其中Faces可以看到每个物体的实际数量,模型面数要少,个体数量不能超过65000个Faces面。
有特殊效果的模型需要单独制作,物体命名要统一(SanLou_YanHuiTing_JingZi或者SanlouYanhuitingJingzi),但不能出现重复,否则整合模型会被覆盖,给后期工作造成不必要的麻烦。
2.建模控制Unity3D软件支持Line渲染和编辑之后所产生的模型。
大部分模型都依靠Polygon进行制作。
在模型表面可以承认多出四边形的面,但不渲染交错的面。
默认情况下,U3D引擎是不承认双面材质的,除非使用植物材质球Nature类型。
所以在制作窗户、护栏等物体,如果想在两面都能看到模型,那需要制作出厚度,或者复制两个面翻转其中一个的Normal法线。
3.文件的放置模型可以继承MAX的材质,但是文件的设置要按照以下形式进行放在项目的Assets文件夹内,新创建一个Object文件夹。
并在其中创建Materials和Texture文件夹(分别自动存放材质球和贴图)。
模型物体并列保存在Object文件夹内。
这个规律模式不要打乱,否则会破坏整个系统逻辑。
4.材质数量控制物体材质要赋予默认的标准材质standard,特殊材质需要特殊调节(玻璃,镜面等),透明材质需要给双面。
如果一个物体给与一个材质球,那么Unity3D对于材质数量和贴图数量没有任何的限制。
Unity3D光照贴图的Lightmapping技术教程
学IT技能上我学院网Unity3D光照贴图的Lightmapping技术教程今天我们来讲解Unity3d中光照贴图Lightmapping技术,Lightmapping光照贴图技术是一种增强静态场景光照效果的技术,其优点是可以通过较少的性能消耗使静态场景看上去更加真实,丰富,更加具有立体感;缺点是不能用来实时地处理动态光照。
当游戏场景包含了大量的多边形时,实时光源和阴影对游戏的性能的影响会很大。
这时使用Lightmapping技术,将光线效果预渲染成贴图使用到多边形上模拟光影效果。
烘焙参数Object选项卡“All”组中的参数Lightmap Static:选中则表示该物体将参与烘焙。
Scale In Lightmap:分辨率缩放,可以使不同的物体具有不同的光照精度。
这样可以根据实际场景,令远景中的物体采用较低的分辨率,节省光照贴图的存储空间。
而较近的物体采用较高的分辨率,使贴图更加逼真。
学IT技能上我学院网Lightmap Index:渲染时所使用的光照贴图索引。
值为0,表示渲染时使用烘焙出来的第一张光照图;值为255,表示渲染时不使用光照图。
Tiling X/Y和Offset X/Y共同决定了一个游戏对象的光照信息在整张光照图中的位置,区域。
“Lights”中的参数Lightmapping:有3种类型可选1)RelatimeOnly:光源不参与烘焙,只作用于实时光照。
2)Auto:表示光源在不同的情况下作不同的响应。
在烘焙时,该光源会作用于所有参与烘焙的物体;在实际游戏运行中,该光源会作为实时光源作用于那些动态的或者没有参与过烘焙的物体,而不作用于烘焙过的静态物体。
在使用Dual Lightmaps的情况下,对于小于阴影距离(shadow Distance,Unity中用于实时生成阴影的范围,范围之外将不进行实时生成阴影)的物体,该光源将作为实时光源作用于这些物体,不管是静态还是动态。
3)表示光源只在烘焙时使用,其他时间将不作用于任何物体。
Unity
Unity 实现贴花效果的制作教程⽬录⼀、前⾔⼆、实现⽅式介绍三、实现过程检测UV位置并替换像素颜⾊:修改替换信息为图⽚信息:运⾏时使⽤复制贴图:修改帧检测断触问题:总结⼀、前⾔在云艾尔登法环时,看到地⾯上的⾎迹时,发现某些地⽅脱离的地⾯,似乎是通过⾯⽚的⽅式实现的效果。
但是同时某些,不过这种类型的⾎迹有道具的效果,估计是为了实现碰撞检测的功能才选择了⾯⽚的⽅式⽽其他的战⽃痕迹的效果似乎是通过贴花来实现的,贴花的⽅式多种多样。
⽽在Unity中,有⼀种给官⽅⽂档提供代码的解决⽅案。
这⾥就在这些代码的基础上做⼀个绘图的贴花效果,最终效果如图所⽰:⼆、实现⽅式介绍简单的来说就是通过发射⼀条射线与物体发⽣碰撞来获取物体的基本的信息,然后提取出碰撞处该物体的UV坐标点,然后进⾏⼀个计算得到物体对应Texture2D的像素信息,然后对这些像素进⾏⼀个颜⾊的替换,最后就可以得到⼀张贴花效果的Texture2D这种⽅式的第⼀步就是需要通过发射⼀条射线,然后得到碰撞检测点的信息,这⾥⽤到的API为:使⽤该API的返回结果是物体⽹格对应的UV坐标点,没有办法直接的去使⽤,需要先通过坐标转换,即通过UV坐标来获取到其Texture2D对应的像素点。
在Unity中,我们知道UV坐标对应的范围为0到1,这样来说,只要将其与对应Texture2D的像素数量与UV坐标进⾏⼀个乘法计算就可以得到最后对应像素的下标位置在得到检测位置的像素下表后,就可以根据被贴图的Texture2D的像素的宽⾼做⼀个计算,得到物体贴图的替换范围与下标,然后执⾏⼀遍遍历,对于所有替换的像素颜⾊⼀⼀对应,然后执⾏⼀个像素颜⾊的计算,做⼀个混合即可三、实现过程检测UV位置并替换像素颜⾊:⾸先查阅Unity官⽅⽂档,得到射线检测UV坐标的代码,核⼼围绕RaycastHit对应的API来得到检测的UV坐标并进⾏处理,代码如下:public class ExampleClass : MonoBehaviour{public Camera cam;void Start(){cam = GetComponent<Camera>();}void Update(){if (!Input.GetMouseButton(0))return;RaycastHit hit;if (!Physics.Raycast(cam.ScreenPointToRay(Input.mousePosition), out hit))return;Renderer rend = hit.transform.GetComponent<Renderer>();MeshCollider meshCollider = hit.collider as MeshCollider;if (rend == null || rend.sharedMaterial == null || rend.sharedMaterial.mainTexture == null || meshCollider == null)return;Texture2D tex = rend.material.mainTexture as Texture2D;Vector2 pixelUV = hit.textureCoord;pixelUV.x *= tex.width;pixelUV.y *= tex.height;tex.SetPixel((int)pixelUV.x, (int)pixelUV.y, Color.black);tex.Apply();}}然后在场景中创建⼀个Quad作为射线被检测的物体,但是同时需要注意,对于物体执⾏操作时,需要理解⼀个细节,就是物体只有在挂载⽹格碰撞体时候,才能够获取到对应物体的UV信息,具体的细节在官⽅⽂档中也有提到,如图:创建完成物体后,需要通过⼀个材质来赋予该物体⼀张贴图,⽤来作为像素替换的贴图,我这⾥⽤了⼀张⽩⾊的图⽚,但是注意,在使⽤该图⽚时候,注意修改该图⽚的导⼊设置中的Read/Write Enabled为开启状态,这样才可以进⾏后续的修改:如果你测试这段代码,可能发现在点击后并没有发⽣什么变化,因为这⼀段代码只会对⼀个像素点执⾏替换操作,运⾏效果看起来并不明显。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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效果,有兴趣的朋友可以自己尝试一下。