Unity3D行结束符相关问题

本文以Windows系统上来说明。
相信很多Unity3D开发者都遇到过这个警告:
There are inconsistent line endings in the ‘XXXXXX’ script. Some are Mac OS X (UNIX) and some are Windows.
This might lead to incorrect line numbers in stacktraces and compiler errors. Many text editors can fix this using Convert Line Endings menu commands
这个警告告诉你,有某脚本上的行结束符不一致,即既有有CR LF标识的,又有LF标识的。这样的话会导致堆栈路径中的错误行数,甚至是编译错误。
需要注意的是,CR LF是windows系统上的行结束符,LF是Unix系统上的行结束符。

使用Notepad++可以查看文件的行尾符。视图->显示符号->显示行尾符。

使用Visual Studio可以统一某个脚本的行结束符:FILE->Advanced Save Options
在弹出的面板中选择需要的Line endings即可。如下图:
AdvancedSaveOption.jpg
也可以使用Notepad++来更改行结束符:
使用Notepad++更改行结束符

个人机器可以将:C:\Program Files\Unity\Editor\Data\Resources\ScriptTemplates\下4个unity新建文件的模板改为需要的行结束符。

像素深度和图像深度

一般意义上图像的像素深度和图像深度是一个概念。都是指存储每个像素所用的位数(bits per pixel,BPP),用来度量图像的分辨率,可以用来决定彩色图像的每个像素可能有的颜色数或者确定灰度图像的每个像素可能有的灰度级别。
例如,一副彩色图像的每个像素用r、g、b三个分量表示,若每个分量用8位,那么一个像素公用24位表示,就说像素的深度为24,每个像素可以是2的24次方种颜色中的一种。

根据图像的深度可以计算出图像的数据量。
如,一副图像的尺寸是1024 768,深度为16。则其数据量为:
字节(byte)数:1024
768 16/8(单位B)
KB数:1024
768 16/8/1024(单位KB)
MB数:1024
768 * 16/8/1024/1024(单位MB)
最终计算所得MB为1.5MB。

各种移动GPU压缩纹理的使用方法

本文转载自:http://www.cnblogs.com/luming1979/archive/2013/02/04/2891421.html

1. 移动GPU大全

目前移动市场的GPU主要有四大厂商系列:

1)Imagination Technologies的PowerVR SGX系列

ImaginationLogo.jpg
代表型号:PowerVR SGX 535、PowerVR SGX 540、PowerVR SGX 543MP、PowerVR SGX 554MP等
代表作 :Apple iPhone全系、iPad全系,三星I9000、P3100等

2)Qualcomm(高通)的Adreno系列

QualcommLogo.jpg
代表型号:Adreno 200、Adreno 205、Adreno 220、Adreno 320等
代表作 :HTC G10、G14,小米1、2等

3)ARM的Mali系列

maliLogo.jpg
代表型号:Mali-400、Mali-T604等
代表作 :三星Galaxy SII、Galaxy SIII、Galaxy Note1、Galaxy Note2(亚版)等

4)nVIDIA(英伟达)的Tegra系列

nVidiaLogo.jpg
代表型号:nVIDIA Tegra2、nVIDIA Tegra3等
代表作 :Google Nexus 7,HTC One X等

2. 压缩纹理的必要性

常用的图像文件格式有BMP,TGA,JPG,GIF,PNG等;
常用的纹理格式有R5G6B5,A4R4G4B4,A1R5G5B5,R8G8B8, A8R8G8B8等。
文件格式是图像为了存储信息而使用的对信息的特殊编码方式,它存储在磁盘中,或者内存中,但是并不能被GPU所识别,因为以向量计算见长的GPU对于这些复杂的计算无能为力。这些文件格式当被游戏读入后,还是需要经过CPU解压成R5G6B5,A4R4G4B4,A1R5G5B5,R8G8B8, A8R8G8B8等像素格式,再传送到GPU端进行使用。
纹理格式是能被GPU所识别的像素格式,能被快速寻址并采样。
举个例子,DDS文件是游戏开发中常用的文件格式,它内部可以包含A4R4G4B4的纹理格式,也可以包含A8R8G8B8的纹理格式,甚至可以包含DXT1的纹理格式。在这里DDS文件有点容器的意味。
OpenGL ES 2.0支持以上提到的R5G6B5,A4R4G4B4,A1R5G5B5,R8G8B8,A8R8G8B8等纹理格式,其中 R5G6B5,A4R4G4B4,A1R5G5B5每个像素占用2个字节(BYTE),R8G8B8每个像素占用3个字节,A8R8G8B8每个像素占用 4个字节。
TextureFormate.jpg
对于一张512512的纹理的话,R5G6B5格式的文件需要占用512KB的容量,A8R8G8B8格式的文件需要占用1MB的容量;如果是10241024的纹理,则各需要2M和4M的容量,这对于动辄需要几十、几百张甚至更多纹理的游戏,上G容量的游戏在移动平台上是不容易被接受的(当然,还是有1、2G的大作的,里面包含了几千张的纹理)。
聪明的设计师们在想,有没有其他办法,既能表现丰富的色彩和细节,又能是最小失真的情况下,达到更小的纹理容量呢。压缩纹理格式应运而生(当然,并不是在移动平台后才有的产物)。

3. 常见的压缩纹理格式

基于OpenGL ES的压缩纹理有常见的如下几种实现:
1)ETC1(Ericsson texture compression)
2)PVRTC (PowerVR texture compression)
3)ATITC (ATI texture compression)
4)S3TC (S3 texture compression)

ETC1

ETC1格式是OpenGL ES图形标准的一部分,并且被所有的Android设备所支持。
扩展名为: GL_OES_compressed_ETC1_RGB8_texture,不支持透明通道,所以仅能用于不透明纹理。
当加载压缩纹理时,参数支持如下格式:
GL_ETC1_RGB8_OES(RGB,每个像素0.5个字节)

PVRTC

支持的GPU为Imagination Technologies的PowerVR SGX系列。
OpenGL ES的扩展名为: GL_IMG_texture_compression_pvrtc。
当加载压缩纹理时,参数支持如下几种格式:
GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG (RGB,每个像素0.5个字节)
GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG (RGB,每个像素0.25个字节)
GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG (RGBA,每个像素0.5个字节)
GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG (RGBA,每个像素0.25个字节)

ATITC

支持的GPU为Qualcomm的Adreno系列。
支持的OpenGL ES扩展名为: GL_ATI_texture_compression_atitc。
当加载压缩纹理时,参数支持如下类型的纹理:
GL_ATC_RGB_AMD (RGB,每个像素0.5个字节)
GL_ATC_RGBA_EXPLICIT_ALPHA_AMD (RGBA,每个像素1个字节)
GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD (RGBA,每个像素1个字节)

S3TC

也被称为DXTC,在PC上广泛被使用,但是在移动设备上还是属于新鲜事物。支持的GPU为NVIDIA Tegra系列。
OpenGL ES扩展名为:GL_EXT_texture_compression_dxt1和GL_EXT_texture_compression_s3tc。
当加载压缩纹理时,的参数有如下几种格式:
GL_COMPRESSED_RGB_S3TC_DXT1 (RGB,每个像素0.5个字节)
GL_COMPRESSED_RGBA_S3TC_DXT1 (RGBA,每个像素0.5个字节)
GL_COMPRESSED_RGBA_S3TC_DXT3 (RGBA,每个像素1个字节)
GL_COMPRESSED_RGBA_S3TC_DXT5 (RGBA,每个像素1个字节)

由此可见,Mali系列GPU只支持ETC1格式的压缩纹理,而且该纹理不支持透明通道,有一定局限性。
以上压缩纹理格式每个像素大小相对A8R8G8B8格式的比例,最高压缩比是16:1,最低压缩比是4:1,对于减小纹理的数据容量有明显作用,相应在显存带宽上也有明显优势,从而提高游戏的运行效率(此特性没有绝对数值,根据每个游戏的用法和瓶颈点不同而有差别)。

各向异性过滤

各向异性过滤(英语:Anisotropic filtering,简称AF)是一种3D显示技术,如其名称所示,它是对周围各个方向上的像素进行取样计算后映射到目标像素上的技术。与双线性过滤和三线性过滤相比,它在大角度显示方面具有更高的精度,令画面更逼真,但计算量也更大,对显卡的要求更高。

OpenGL ES

OpenGL ES (OpenGL for Embedded Systems) 是OpenGL三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准。
OpenGL ES是从OpenGL裁剪定制而来的,去除了glBegin/glEnd,四边形(GL_QUADS)、多边形(GL_POLYGONS)等复杂图元等许多非绝对必要的特性。经过多年发展,现在主要有两个版本:OpenGL ES 1.x 针对固定管线硬件的,OpenGL ES 2.x 针对可编程管线硬件。
OpenGLES 1.0 是以 OpenGL 1.3 规范为基础的,OpenGL ES 1.1 是以 OpenGL 1.5 规范为基础的,它们分别又支持 common 和 common lite 两种profile。lite profile只支持定点实数,而common profile既支持定点数又支持浮点数。 OpenGL ES 2.0 则是参照 OpenGL 2.0 规范定义的,common profile发布于2005-8,引入了对可编程管线的支持。OpenGL ES 3.0于2012年公布,加入了大量新特性。

使用NShader插件高亮Unity3D Shader文件

本文以Visual Studio 2012版本为例,解决插件安装过程中遇到的问题。

官网下载好插件,安装后,打开Unity3D创建的.Shader文件,发现并没有高亮。
按照提示:
Remove the registry entry:
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\FontAndColors\Cache
and HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0_Config
Remove all lines using “fx” or “hlsl” in file C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\VC\VC_Pkg_Core_Registration.pkgdef .
发现依旧不行。

经过搜索,解决方法为:
在C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\34wgsmdv.olw目录下(PS:34wgsmdv.olw 这个目录可能各个机器不一样)的NShader.pkgdef文件的”CodeBase”=”$PackageFolder$\NShader.dll”这一句下面加入
[$RootKey$\Languages\File Extensions.shader]
@=”{4c554917-0eb7-3742-9f6b-f2f529fc6729}”
即,添加了对.shader后缀文件的支持。
上述步骤完成后,还要重新删除上述提到的两个注册表,否则依旧无法生效。

另外,若机器安装了UnityVS,且设置了默认编辑器为UnityVS.OpenFile。这样双击.shader文件,VS界面是没有任何内容的。看来是UnityVS插件不支持.shader文件。因此打开.shader文件的时候需要手动更改Unity的编辑器为Visual Studio 2012。如下图所示:
SetVisualStudio2012.jpg

小众软件汇总

本文为bbbbbbion(可以叫我六饼)原创总结,如有疏漏请各位拍砖留言。转载请尊重原作者成果,保留出处。

Win PC

文档阅读

Sumatrapdf

Sumatra PDF is a free PDF, eBook (ePub, Mobi), XPS, DjVu, CHM, Comic Book (CBZ and CBR) reader for Windows.
Sumatra PDF is powerful, small, portable and starts up very fast.
Simplicity of the user interface has a high priority.

文本工具

Notepad++

文本比较工具

Araxis merge

Araxis merge是一款很优秀的文本比较工具,可以替代svn自带的比较工具。

文本内容查找工具

grepWin

cmd命令行工具

PowerCmd

图片查看工具

XnView

sagethumb

这是一款很有用的图片查看工具,它是开源的,且作者是XnView的作者。
安装它后最大的作用是可以预览TGA、PSD文件,再也不用找专用的图片浏览器来一睹庐山。另外右键图片还可以查看图片的分辨率、大小、深度等常用信息。
下载地址:https://code.google.com/p/sagethumbs/
(20150920更新:下载地址更新为http://www.cherubicsoft.com/en/projects/sagethumbs/)

录屏工具

fraps

目前个人遇到的最完美的游戏录屏工具,可以完美录全屏。
使用方法:启动软件,当进入游戏或者全屏软件后,左上角会有绿色数字,这个是帧率。按下录屏快捷键,绿色数字变成红色数字,再按一下录屏快捷键则停止录制,文件保存在默认路径下。
优点:可以设置帧率,而且基本不会丢帧。
缺点:默认存储格式为avi,而且文件很大。需要用格式转换软件处理一下,以降低容量。

FlashBack

优点:可以录制区域,可以转换为多种格式,包括gif。
缺点:丢帧很严重,全屏的游戏或者全屏软件无法录制,会出现黑屏、花屏现象。

Camtasia Studio

默认全屏录,帧率没有测试。缺点是全屏模式下的游戏以及软件无法录制。

Snagit

优点:可以设置帧率,支持区域录制。
缺点:丢帧严重,不支持游戏和软件的全屏录制。
同Camtasia Studio,Snagit也是由TechSmith开发。

视频格式转换

格式工厂

缺点:不支持ogg格式

在线转换网站 http://www.online-convert.com

提供音频、视频、图片等等各种转换。
可提供ogg格式转换。
缺点:在线转换的缘故,因此速度比较慢。

BlueStacks安装apk

一般情况下,安装了BlueStacks后,右键apk会找到用BlueStacks进行安装的快捷方式,但是有时候会遇到没有关联上的情况。
这样的话,可以在安装目录(C:\Program Files\BlueStacks)找到HD-ApkHandler.exe,然后拖拽apk到HD-ApkHandler.exe的图标上即可安装。
也可以右键apk->打开方式->找到HD-ApkHandler.exe。