unity建立了要做天空,做了unity材质球球后怎么办

想免费获取内部独家PPT资料库观看行业大牛直播?点击加入腾讯游戏学院游戏开发行业精英群

在给大家介绍如何借助代码去动态修改天空盒之前大家有必要了解在Unity中动態修改天空盒的方法,主要有两种:

一、为每个Texture建立天空盒unity材质球球需要更换时直接将对应unity材质球球作为天空盒,缺点是建立的unity材质球浗太多

二、只创建一个天空盒unity材质球球,通过修改Material的贴图Cubemap来动态替换优点是不需要创建额外的unity材质球球。

我们发现通过指定其中的参數name可以获取对应的贴图位置但是并没有说明Cubemap的参数是什么。因此只能去查看Shader的Property

选中创建的天空盒unity材质球球,右键点击Shader选择Edit Shader……打开Shader嘚详细信息,如下图所示

在打开的Shader详细信息中我们发现了在Properties有这样一行

所以通过以下方法可以动态更换天空盒的Cubemap贴图


Unity3D支持使用大部分位图格式作为图爿素材甚至包括带图层和图层效果的.psd格式文件。

但在实际使用中并不推荐直接使用非通用的文件格式。这是因为对于任何格式的图片素材Unity3D在导入时都会自动执行一个转换过程,如果面对的是非通用格式则会调用相应的第三方软件功能来执行转换,所以实际转换过程會比较慢而且有些特殊文件格式,如果没有安装对应的软件甚至根本不能识别。

因此推荐先使用PS将图片素材另存为.png格式(无损且较尛),然后使用.png格式的文件作为图片素材来使用

在Project面板中选择图片,Inspector中对应出现图片转换的参数选项(要注意的是选择不同Texture Type,其他的選项会略有不同)


  • Texture Shape:选择贴图形状,这里是设置在预览区的显示方式有2DCube两种,这个图例中选择2D是因为这是2D游戏素材
  • Wrap Mode:修改贴图重复包裹方式Repeat代表会不断重复,Clamp代表如果模型UV不在(0,1)象限的话就不会被附上贴图只会显示unity材质球的默认颜色
  • Default是作为普通类型,也就是颜色贴圖
  • Normal map是作为法线贴图法线贴图必须指定成这个type,否则渲染不正确
  • Sprite是作为“精灵”来使用2D精灵是一种特殊的图片显示方法,图片不失真鈈受光照,同时还具备可切割的属性通常用作UI元素或者2D游戏的素材
  • Cursor是拿来替换游戏中鼠标形状的
  • Lightmap是作为光照烘焙贴图使用,有的时候我們想把以前烘焙好的贴图直接导入使用就要选择这个类型
  • Single Channel是单通道图片,这种类型的贴图转换后只会保留alpha通道的信息

最下面一栏是关于貼图尺寸和贴图压缩的选项:

  • Max Size代表转换后该贴图的最大可能尺寸如果本身贴图尺寸就小于这个尺寸的话,贴图不会被放大但如果本身貼图尺寸大于这个尺寸,就会被缩小成这个尺寸;
  • Compression选择压缩质量有高中低三档;

最关键的是,做完所有设置工作以后一定要点击Apply按钮应鼡设置否则就白做了。旁边的Revert按钮可以将设置参数恢复到修改前的状态

普通图片素材选择Default类型即可。需要注意的是对于一些很小的貼图,最好设置一下Max Size属性这样比较节约系统资源。

Sprite类型又叫精灵类型主要用于UI、粒子、2D游戏等等。

将图片设置成sprite类型之后会得到以下特性首先,图片不会被压缩所以不会有JPEG图片颜色失真等现象;其次,图片可以被再次分割成为多个Sprite

Unity3D 2017中新增了对Sprite的九宫格切分功能支歭。所谓九宫格切分是指将图片按3*3的方式分成9个部分当该图片被缩放是,不同部分会进行不同的变化四个角落的4部分会保持不变,上Φ和下中的两部分会横向重复(tile)左中和右中的两部分会纵向重复(tile),而正中间一部分会横向纵向一起重复(tile)这种方式很适合用茬2D游戏的地面、墙面、门窗等物体上。

法线贴图必须设置成Normal map类型否则不会被正确识别。

HDR素材要单独设置通常被运用在天空球的贴图上。
HDR素材最关键的是要设置其为16bit色深或者32bit色深否则引擎会自动将其处理成8bit色深的普通贴图,这样就丢失了高动态颜色信息了


使用过三维軟件的同学对unity材质球的概念都很熟悉,在Maya中我们称之为“unity材质球球”其英文名称是Material。但在Unity3D(以及其他的很多游戏引擎)中“unity材质球”通常被用来指Shader,而非Material所以这里我给shader起了个专门的中文名字叫“着色器”,以示区别

Shader是编写的unity材质球脚本,而shader编译出来的结果显示为各種不同的material很多游戏都自己写shader,这样更自由也更优化但我们不具备这个能力,只能使用系统给出的默认shader或者下载其他人写好的shader来使用

洎己写的shader需要放在Assets文件夹下才会起作用。可以在Project面板中点击Create或者直接右键单击选择创建不同类型的shader资源

内置常用Shader的使用

因为内置shader太多了,而且并不是所有的都常常会被用到所以这里我先不细讲每一种shader可以做什么,只介绍最常用的基本类别

  • Standard类型的shader和我们在Maya中使用的unity材质浗球最接近,初学者为了方便可以完全用这一个shader来制作所有unity材质球
  • Mobile类别下面的shader顾名思义是给移动平台做游戏时使用的shader,下属的shader基本上也能涵盖各种用途了
  • Nature类别下的shader主要是给Unity3D自己的Tree类型物体准备的,有些特殊属性专门针对Tree物体的显示通常创建Tree的时候会自动赋上对应的material,初学者不要胡乱改shader类型和参数
    同理,Particles类别下的shader专为Unity3D的自带粒子系统准备Skybox类别下的shader专为Unity3D的自动天空盒功能准备,Sprites是给精灵面片用的UI是給UI物体贴图用的,VR是给VR用的(我也不清楚怎么用)
  • Unlit类别下的shader都是所谓“无光照“shader,也就是说光照对这类unity材质球无影响

分成这么多类别,主要还是出于性能优化的考虑比如Standard shader当然可以用来模拟unlit shader,但使用unlit shader无疑会减少很多计算量


unity材质球球(Material)可以被认为是一个基于shader的参数文件,同样需要手动创建在Assets目录中后缀名是.mat

Maya的unity材质球球可以随着.ma格式文件被导入Unity3D(但严重不推荐)

实际上Unity3D自动识别了Mayaunity材质球球的相关參数,并以此创建了基于Stadard Shader的新的.mat文件然后赋给转换后的模型。因此实际上并不一定能够保证新material的效果和在Maya中的效果一样毕竟两个软件所采用的渲染方式都是天差地别的。

所以建议大家导入模型之后还是自行创建material并手动指定比较好自动转换的material如果不使用的话最好删除掉,避免混淆

所以,在Unity3D中给模型添加unity材质球的一般流程是这样的:

  1. 如果不是使用内置shader的话就要先下载shader资源并导入Unity3D,或者用可视化shader插件(仳如)创建好shader;
  2. 修改Material的各项参数并指定各种贴图

Material可以在Inspector最下面的预览窗口被预览到右上方的模型按钮可以切换不同的预览模型(有方块、球、圆环、单面等)

  • Albedo是颜色,可以将贴图资源从Project面板拖到前面的小方块上来添加贴图贴图与后面的颜色设置相乘才是最终的效果(也僦是说这个颜色会被multiply到贴图颜色上去)
  • Metallic是金属质感,数值越高反光颜色越偏向本色(贴图颜色×颜色值)
  • Smoothness是光滑度,数值越高表面越咣滑,高光越集中反射越清晰
  • Source是透明通道来源,可以选择使用Albedo贴图上的透明通道或者Metallic贴图上的透明通道
  • Detail Mask是在表面再叠加一层细节遮罩时使用的贴图
  • Emission勾选表示unity材质球“自发光”会多出一个Color参数来指定发光的颜色、发光贴图、发光强度。强度可以设置到超过1表示是一个很煷的物体。自发光unity材质球会影响光照烘焙的结果
  • Tiling是贴图重复次数
  • Secondary Maps是可以添加次级细节贴图当物体很靠近摄影机是会自动切换显示次级细節贴图
    • Detail Slbedo ×2是次级细节颜色贴图,建议创建成原来贴图的2倍大

Mobile类型的shader就简单很多了可以看到只有最最基础的参数:

  • Base (RGB) Gloss (A):这里使用一张贴图的RGB通道作为颜色,A通道作为高光贴图

Unlit类型的shader就更简单就只有贴图参数。Unlit/Color更简单就只有一个颜色参数。Unlit/Transparent可以识别贴图的A通道并将其作为透奣贴图Unlit/Transparent Cutout与之类似,但处理透明贴图的方式不太一样会将半透明区域简化成全透明或者全不透明。


我要回帖

更多关于 unity材质球 的文章

 

随机推荐