如上图,上篇文章我们查到场景黑色bug是此处引起的,然后近期又存在一些问题,那就是shader打成assettbundle就会非常的大,约7M多左右,(勾选了 1,2,5,6)
目前我改成上列状态shader大小大幅度的减少,只有1.7M左右,据我测试, 2号选项是占用比例最大的,也就是导出后影响体积最为严重(仅针对 1,2,5,6. (3,4)没测试)
具体作用就不细说了,可以官网查对应API的解释。
当然如果后期个人其他项目shader体积过大可以考虑从这方面做个小优化
参考资料2,在Asset Store里面搜索 Mosaix,免费的那个。个人遇到一个问题,对摄像头 配置了 mosaix.cs 和 MayaCamera.cs组件后,game视图的场景会变暗。
2.1在线演示
导入后 DEMO的演示
参考资料6 是该插件 的工作室主页,在AssetStore里面搜索censor effect,免费的,也可以达到同样的效果
马赛克方块
把censor effect 材质给予 3D 方块,也有同样马赛克的效果。
参考资料:
1.
UnityShader实例12:屏幕特效之马赛克(Mosaic)材质
2.
Mosaix, a better Unity mosaic
2.1http://noisefloordev.s3-website-us-east-1.amazonaws.com/mosaix/unity-chan-demo/index.html
2.2noisefloordev/mosaix
3.Shader2D: 一些2D效果的Shader实现
4.unity shader – 马赛克效果
5.Unity3D Shader 马赛克后期效果
6.http://staggart.xyz/
7.
8.
最近在玩游戏《高达破坏者》,里面的高达出现的效果我觉得挺酷的,所以自己写了个shader: 简单思路: 1、模型分好UV 2、shader使用2张贴图通道,第一张是漫反射,第二张是发光网格 3、使用顶点片段程序,在顶点程序记录顶点pos的时候多记录一个y轴坐标 4、设置一个高度显示范围,并根据时间累加。 5、进入片段程序的时候,判断y轴坐标范围与高度显示范围的关系,分别做出3种处理: 1.完全透明,2.显示网格,3.显示漫反射贴图 6、完工
系统:Windows8
引擎:Unity 2017.2.1f1
选中帧率低的那一帧,然后在CPU Usage Profiler以Time ms排序。
本文把Profiler分为上中下三部分,如图:
(其实,中部是下部的标头,只是为了下面分析,而分出来。)
中部对比法:CPU与GPU的总ms作对比,谁值高谁受限,此方式只用于GPU Usage Profiler能打开的情况下(在《日落20180715001 – Unity3D的Profiler》有说明);
下部对比法:Gfx.WairForPresent第一,CPU受限;
上部对比法:CPU Usage Profiler上方的Rendering高的话,CPU受限;
以上简单回顾。
参考资料:
http://www.cnblogs.com/alan777/p/6135703.html
using UnityEngine; using System.Collections; using UnityEngine.UI; public class SliderColor : MonoBehaviour { public Color[] colors = new Color[] { Color.red, Color.yellow, Color.green }; Slider slider; void Start() { slider = GetComponent(); slider.fillRect.transform.GetComponent().color = Color.green; } void Update() { float val = slider.value; val *= (colors.Length - 1); int startIndex = Mathf.FloorToInt(val); Color color = colors[0]; if (startIndex >= 0) { if (startIndex + 1 < colors.Length) { float factor = (val - startIndex); color = Color.
最近需要处理场景地形,一开始是将原地形模型转换成Terrain系统,结果在移动端测试的时候发现性能爆掉了,不能忍。于是转到使用T4M插件上。虽然教程比较全面,但使用的时候还是遇到了一些坑。
使用T4M转换后的模型出现异常面,无法在异常面上绘制纹理。尝试了合并顶点、检查破面、检查法线/切线方向、检查UV、重新导出OBJ再导入皆不行。按照群里的说法,将子层级全选 detach也不行。最终通过删除有问题的面片再重新补上才解决,怀疑可能和顶点ID有关。
绘制纹理时总提示文件格式不对,一开始以为是用的贴图有问题,最后发现是T4M生成的地形mask格式被Unity自动压缩了,解决办法就是将地形mask处理成非压缩格式。
使用后感觉T4M还不错,不足的是它处理融合时用的是简单的融合,如果能结合Advanced Terrain Texture Splatting效果会更好。后续试试在T4M基础上实现这样效果,或者重新做个地形系统。
官网教程地址:https://docs.unity3d.com/Manual/SL-Material.html
Material Block This contains settings for how the material reacts to the light. Any of these properties can be left out, in which case they default to black (i.e. have no effect).
Diffuse color漫反射: The diffuse color component. This is an object’s base color.
Ambient color环境光: The ambient color component. This is the color the object has when it’s hit by the ambient light set in the Lighting Window.
版本:unity 5.6 语言:C#
总起:
Android平台,虽然与IOS开发类似,但因为其硬件没有完全的标准化,所以会出现各式各样的问题。这一点在官方文档的第一段就提到了。
Unity Android基本环境的搭建还是比较容易的:
1.Unity本身没有下载Android插件的,首先 File -> Build Settings -> [切换到Android] Open Download Page 下载插件;
2.安装JDK,我使用的是Java8,不知道新出的Java9能不能用:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html;
3.安装SDK,这边我推荐安装Android Studio,再在其中中安装SDK:https://developer.android.com/index.html(进入该网页可能需要科学上网,然后下载SDK具体的包现在直连下载都很快了,不需要去网上找网友提供的包了);
4.安装Android模拟,我这边选择的是Nox英文版;
5.如果需要使用IL2CPP,安装一下NDK,5.6.3需要的版本是r10e,不要下错了。
Unity Remote:
Unity远程调试插件,适用于Android、IOS和tvOS,一开始我以为这个可以直接在Unity中调试Android,实则不能,所以这个功能很鸡肋,不过也有他的使用场景,所以还是介绍一下吧。
调试步骤:
1.首先在Google Play中找到Unity Remote 5应用,把它下载安装到Android手机中,如果没有科学上网的同学,可以在百度上找一下;
2.将手机插上USB接口,允许USB调试,手机端就准备完成了,模拟器方面,我测试了3种:Genymotion可以直接运行,而Nox和Bluestacks没有效果;
3.接下来就是Unity中的设置,通过Edit -> Project Settings -> Editor,找到Unity Remote选项,将Device更改成Any Android Device:
4.然后直接运行Unity工程就会看到效果。
所以这个是做什么用的呢?首先大家可以理解为Android手机为一个扩展屏,然后Android手机的触屏输入、加速度、陀螺仪、相机、指南针、GPS和摇杆可以作为Unity工程的输入。
再然后……就没了,就多了个测试输入的功能,如果想要测试真机运行情况还是要打成APK在手机上运行。
这边再说一下两种特殊的情况:
1.如果是多台Android设备连接电脑的情况下,Unity会自动寻找第一台它找到的设备,而不能手动配置;
2.在手机端的显示图像质量很差,可以在Unity Remote的菜单中设置Compression为PNG,Resolution为Normal,图像效果就不会有损失了,但会占用更多的带宽。
出包界面:
在我们打包工程时,就会用到以下的一个界面:
♦ Texture Compression
图片纹理压缩格式,默认为ETC。
♦ Build System
在构建Android项目时最需要了解的就是这边两种Build System的区别:
1.Internal(Default)
这是一种比较传统的构建方式。可以这么说,开发纯Android项目时,过去主流使用的Eclipse就是使用该种构建,是一种ADT的构建方式。
打包一个APK经由以下几个步骤:
a.准备并打包Unity的Assets;
b.编译脚本;
c.处理Plugins插件;
d.如果Split Application Binary被勾选,会拆分资源到APK和OBB中;
e.使用AAPT打包Android资源;
我们项目美术是在linear下制作资源的,做一些比较真实一点的效果会比较容易些,在editer模式下看是比较精美的,但是打包完放在手机上,明显有一些色差问题,如图:
在手机上的效果:
在editer下的效果
后来找了很久,最终发现是lightmap计算方式不一致导致的,直接修改unity的UnityCG.cginc文件可完美解决问题:修改代码如下:
// Decodes doubleLDR encoded lightmaps. inline half3 DecodeLightmapDoubleLDR( fixed4 color, half4 decodeInstructions) { #if defined(UNITY_COLORSPACE_GAMMA) return 2.0 * color.rgb; #else return decodeInstructions.x * color.rgb; #endif } inline half3 DecodeLightmap( fixed4 color, half4 decodeInstructions) { #if defined(UNITY_NO_RGBM) return DecodeLightmapDoubleLDR( color, decodeInstructions); #else return DecodeLightmapRGBM( color, decodeInstructions ); #endif } cg文件在unity安装目录下:Unity\Editor\Data\CGIncludes\UnityCG.cginc 找到对应的位置修改即可
这次是做个测试,看看材质通用性
为了方便使用的是untiy 5.6 + shaderforge 1.38
下面是最后的效果(当然比起ue4里面还添加了一些,用的线性空间和deferred模式)
下面是ue4原本的
因为主要是法线上的效果,unity在法线和光照效果上还是差挺多的
连节点中还发现深度信息和ue4略有不同这个要注意
而且在测试中还发现了shaderforge的bug
当然depth相关节点最终连接到normal节点的话会报下面的错
Shader error in ‘Shader Forge/test’: undeclared identifier ‘partZ’ at line 106 (on d3d11)
但是只需要改源码,把partZ声明放在使用之前就可以了
下面是第一个版本的shaderforge节点
基本和ue4那个很像,需要注意的是某些节点虽然和ue4很像,但是略有不同
预览是错误,因为需要改源码,但每次改过后,shaderforge打开又会开回来
这个bug其实挺多见的,节点连多了,各种bug就出现了
效果如下
但是这个缺少放入物体虚化的效果,于是又改了下
效果就是第一幅图的了,注意这个需要开启透明,使用的时候只能是不透明的物体放入水中,否则会有深度问题
节点如下
预览也是这个问题,shader文件里直接改
放上改好的shader下载地址(注意只有shader文件)
http://download.csdn.net/download/shenmifangke/9991699