Unity

Unity 毛玻璃效果(UGUI)

最近想在UI中加入类似Win7的毛玻璃效果,将弹窗UI的背景虚化。实现的原理很简单,就是对UI的背景做一下Blur。在实现过程中,我尝试了两种方法:

1、直接Blur UI后面的图像。

这是网上很多文章提供的方法,也比较容易想到。可以直接用Shader控制UI 背景Panel上Image组件的渲染。

因为Unity 提供了GrabPass,可以在Shader中很方便的拿到Panel下面的图像,即_GrabTexture。

问题在于如何对_GrabTexture做Blur处理。如果使用普通的高斯模糊,效果并不理想,原因在于模糊半径太小了,导致模糊后的图像太清晰,玻璃“不够毛”。 read more

Continue Reading
Unity

Unity泛光(Bloom)的实现方式

泛光是由于人眼晶状体散射产生的视觉效果,用于产生如梦似幻,朦朦胧胧的感觉。Unity中自带的图像效果中,有两种实现方式,Bloom 和 BloomOptimized,单就泛光来说,两者差不多。不过前者兼顾了HDR和Flare比较复杂,而后者只是单纯的Bloom,下面就BloomOptimized简单分析一下。

同颜色校正一样,Bloom也通过重写OnRenderImage方法,来进行图像处理。首先,对原图像进行DownSample

这里传入Shader的几个参数分别是:
blurSize:模糊尺寸,用于后面模糊算法的直径。
threshold:泛光阈值,颜色亮度超过这个阈值的像素才进行泛光处理。
intensity:泛光强度。 read more

Continue Reading
Unity

Unity颜色矫正实现方法

最近美术提出项目中的画面饱和度不够,于是在摄像机上添加了ColorCorrectionCurves效果,该效果是Unity标准资源中自带的,这里只是简要说明一下它的实现方式。本次使用只是单纯提升画面饱和度,因此并没有用到其中的高级选项。在高级选项中,我们可以调整不同深度的色彩饱和度,以打到模拟大气散射导致的远处物体饱和度下降的效果。下面只分析简化版部分,其他部分大同小异: read more

Continue Reading
Unity

Unity自动添加XCode依赖库

Unity项目接入一些Ios版本的SDK后,会需要添加一些SDK的依赖库。如果每次导出XCode工程后,都手动添加这些依赖库就会很麻烦,在以前的Unity版本中,需要用其他的辅助手段去通过用脚本修改Xcode工程文件的方式,把这些依赖项添加进去。Unity5之后内置支持了为Plugin添加依赖库。而且可以单个Plugin控制,非常方便。

我老犯的一个错误是下意识的去Player Setting下找关于Ios的依赖库选项。其实不是。 read more

Continue Reading
Unity

摄像机边界控制

由于美术场景有限制,所以需要将摄像机限制在一个如下图所示的凸六面体内:

camera_block

那八个顶点的位置根据场景不同而不同,限制摄像机位置的关键在于判定摄像机位置是否在六面体内。而剩下的就是几何知识了。

首先要求出6个平面的方程,取一个平面的三个顶点 V1, V2, V3,分别代入平面方程:

aX+ bY + cZ +d = 0 中然后求出:

 

取一个六面体内的点V0,代入方程中,得出: read more

Continue Reading
Unity

Unity编程规范

概述

良好的编程风格是代码可靠性的基础。首先,编程规范的意义在于将程序语言限定在一个可靠的范围内,能帮助开发者,从习惯上避免很多容易产生的低级错误。其次,对于团队来讲,统一的编程风格可以增强程序的易读性,减小成员之间的沟通成本。增强程序的可维护性。因此,我们需要制定一套编码规范。

Unity开发中,我们统一使用C#语言,本规范仅限于C#语言。

规范指定原则

1、方便代码的交流和维护 read more

Continue Reading
Unity

用Shader绘制攻击范围的圆环

游戏中经常会有如下图所示的表示攻击范围的圆环,圆环是由渐变色绘制而成。无论圆环的直径多大,圆环的宽度都是不变的。这一特点决定了无法用图片实现,只能通过程序绘制。

yuanhuan

在Unity中,我们可以用Shader来绘制这个圆环。代码如下:

 

 

我们用这段Shader来渲染一个1×1的正方形面片,可以通过_Object2World[0][0]来获取矩阵中的Scale,也就是面片的实际边长。然后在Fragment Shader中通过计算每个像素到面片中心的距离,来计算是否绘制以及像素的透明度。就可以实现图上的效果。 read more

Continue Reading
Unity

[Unity]LightMap在PC上曝光问题

场景中使用了lightmap,但是怎么调整光线,都跟打包到手机上的亮度有差别。在Editor里面,明显曝光过度。

后来才发现,是因为我的Editor已经转换到了Android平台,所以所有的光照贴图都被转换成Android使用的格式,所以在PC上渲染结果就出现了差错。

所以在调整场景光照时,要转换到PC平台看效果。

File->Building Setting->PC->Switch Platform

Continue Reading