202001-04 Unity3D研究院之动态分辨率降低渲染开销(一百一十三) 之前项目降低分辨率我们都普遍使用Screen.SetResolution,但是它有两个问题。 1.每次设置的时候屏幕会闪烁。 2.降低分辨率与摄像机无关,无法做到只降低3D摄像机的分辨率,保留UI摄像机不降低分辨率。 其实我们可以使用摄像机动态分辨率,如下图所示,给需要降低分辨率的.... Read More >
201912-28 Unity3D研究院之ECS渲染Sprite(一百一十二) 首先我们先借助Unity的SpriteAtlas构建一个图集,同一个图集只会占用一个DrawCall。 接着写一个脚本,把需要参与ECS渲染的Sprite拖上去。 渲染的原理就是 m_BatchRendererGroup.AddBatch ECS负责坐标的修改 .... Read More >
201912-01 Unity3D研究院之优化Graphics.DrawMeshInstanced(一百一十一) 如果项目中使用GPU Instancing的话,很多人都会用底层API Graphics.DrawMeshInstanced在Update中绘制。 我们先来做个极端的测试,如下代码所示。 [crayon-6605aa2ea95f3729475716/] 如下图所示,能看出来在Update每.... Read More >
201911-24 Unity3D研究院之LWRP中计算准确overdraw(一百一十) 书接上文,在LWRP上Camera.SetReplacementShader是用不了的,而且就算能用算出来的不透明物体overdraw也是不对的。如果你的项目已经使用了LWRP,那么我们可以借助Custom Renderer Data来拓展渲染overdraw。如下图所示,需要自己创建一个自定义Re.... Read More >
201911-16 Unity3D研究院之使用SRP计算准确overdraw(一百零九) 最近在研究如何把overdraw统计成准确的数据值,让美术同学能直观的知道自己做的特效、场景、角色到底有多费,再加上好久没有写文章了,自己也有点心得今天就分享给大家并且希望可以后面一起讨论。 首先Unity的overdraw是不准确的,如下图所示,我们放两个不透明的物体,在SceneView切.... Read More >
201911-09 Unity3D研究院编辑器之修改贴图片默认导入规则(三十五) 贴图导入unity后会自动设置成压缩格式,它会先判断贴图是否有透明通道。 Android:不带透明通道压缩成ETC1,带透明通道压缩成ETC2,不被4整除fall back到RGBA32 IOS: 不带透明通道压缩成RGB PVRTC,带透明通道压缩成RGBA PVRTC ,不是2的整数.... Read More >
201908-31 Unity3D研究院之UGUI软裁切(一百零八) 前段时间用Stencil实现了一套裁切,但是Stencil原理只能是裁或者不裁,这样是无法实现像NGUI这样的软裁切功能。之前的笔记在这里 https://www.xuanyusong.com/archives/4562 如下图所示,我们用Rect2DMask组件同时软裁切3D模型和Image.... Read More >
201908-23 Unity3D研究院之Lightmap支持GPU Instancing(一百零七) Unity2017是明确不支持GPU Instancing的,如果在材质上勾选了enable GPU Instancing后,如下图所示,在Frame Debugger中,我们能清楚的看到所有的游戏对象没有合批,提示Objects are lightmapped。 所以为了让Unity.... Read More >
201908-21 Unity3D研究院之LightmapIndex、LightmapScaleOffset、UV2的关系(一百零六) 烘焙Lightmap以后unity会自动给参与烘焙的所有mesh添加uv2的属性,例如,三角形每个顶点都会有UV2它记录着这个每个顶点对应Lightmap图中的UV值,这样拥有3个顶点的三角形面就可以通过UV2在Lightmap中线性采样烘焙颜色了。 LightmapIndex: 所以每.... Read More >
201908-17 Unity3D研究院编辑器之合并mesh引发的矩阵推导运算(三十四) 合并mesh的功能比较常见,可以运行时合也可以编辑模式下提前合并,但是至少需要注意两点。 1.考虑lightmap,合并mesh以后会将lightmap的信息写入uv2,如果有多张lightmap需要传入正确的index,所以参与合批的mesh需要保证处于同一index的lightmap中。 .... Read More >
201908-11 UGUI深度优化技巧以及源码分析 最近我在UWA的学堂写了两篇收费文章,都是介绍UGUI的。 从2014年UGUI刚出来的时候我就毫不犹豫的放弃的NGUI,原因是UGUI有两方面是彻底碾压NGUI的 1.开发的时候不用考虑图集规划,(NGUI在后期调整图集,每个界面都要改一遍真是痛苦) 2.UGUI在C++里合并的.... Read More >
201907-02 Unity3D研究院之加密Assetbundle不占内存(一百零五) AssetBundle.LoadFromMemory基本上是无法在手机上用的,因为要多占一份内存,所以大多Unity项目都不进行资源加密。 Unity2017.2提供了一个新的API AssetBundle.LoadFromStream,通过名字就可以知道它是流加载,那么就不会像AssetBund.... Read More >
201906-10 Unity3D研究院之字符串拼接0GC(一百零四) 最近在优化项目,发现字符串拼接的堆内存非常大,而且非常频繁。 大概原因如下 1.字符串就是char[] 长短发生变化必然要重新分配长度,以及拷贝之前的部分,产生GC 2.字符串+=进行拼接会产生装箱,生成GC 3.Append传入值类型数据,它会调用ToString方法,需要new stri.... Read More >