2020
10-18
10-18
Unity3D研究院之URP下PrePassZ(一百一十九)
URP以后并不是所有Pass都会执行,因为它预制了两个Pass所以,优先执行"UniversalForward"在执行"SrpDefaultUnlit"的Pass 以上代码就可以在URP中实现PrePass的功能,如果场景中只绘制一个物体那么这样做没啥问题,可是如果场景绘制多个相同材质或不同参数的物.... Read More >
专注移动互联网,专注Unity3D游戏开发
URP以后并不是所有Pass都会执行,因为它预制了两个Pass所以,优先执行"UniversalForward"在执行"SrpDefaultUnlit"的Pass 以上代码就可以在URP中实现PrePass的功能,如果场景中只绘制一个物体那么这样做没啥问题,可是如果场景绘制多个相同材质或不同参数的物.... Read More >
灵感来自Android的BatteryManager,可以实时获取到手机的电流。因为电压是恒定的,这样就能算出功率来,十分有助于统计手机发热问题。 BatteryManager并没有提供获取手机毫安的方法, 只提供了手机剩余毫安的方法,以及手机当前电量百分比。 这样虽然可以近似还原手机总毫安,但是还.... Read More >
最近一直在思考如何能更好的做优化渲染,本篇文章只是另一种实现的思路,其实我也没完全想好怎么应用到实际游戏中来统计,希望各位看官多多提宝贵意见。 1.本例Unity的版本是Unity2019.3.1.4 2.采用URP渲染管线,老的渲染管线没有试过,大家可以试试看。 3.FrameDebugger会将.... Read More >
最近研究了一下Texture2D.PackTextures方法。它可以在运行时或者编辑时对贴图进行合并。运行时它不支持任意贴图格式的合并,比如现在主流的ASTC,它会合并成RGBA32格式。而且无法指定贴图合并到大图具体某个位置上。 动态合并贴图的方法可以参考我之前的文章,这篇主要考虑静态合并,也就.... Read More >
项目升级URP了一段时间了,Shader找起来太麻烦各种嵌套。以前的shader基本都在一个文件里搞定,普通的记事本都能写。 第一步安装VSCode以及Shader Languages support for vs Code 插件。 如果是内网办公的同学,可以先把插件下载下来,然后点击下图右上角的".... Read More >
最近在使用C#7的语法时遇到一个挺有意思的问题,深究其原理后发现值得写一篇文章。在C#中任何一个class类即使不写class XXX :System.Object 也会被默认继承System.Object,在C#中还有一个object关键字它和System.Object是一回事。所以UnityEn.... Read More >
疫情牵动着每个中国人的心,本着不走亲不窜巷的原则不得不在家过了个比较长的假期。这段时间我也没闲着,于是写了这篇《DOTS深度研究之从原理到实践》的文章。 全文一共142页,并且拆成两篇文章 《DOTS深度研究之应用实践篇》https://edu.uwa4d.com/course-int.... Read More >
GPU发热的元凶之一“带宽” 所以通常我们都会打开mipmap,如下图所示,在unity中可以拖动右上角的条来查看贴图每个等级的mipmap贴图。那么它的等级一共分成0级-9级, 0级表示最清楚,9级表示最模糊。 贴图分辨率是依次减半,如512 256 128 64 32 16 8 4 2 0 所以.... Read More >
之前项目降低分辨率我们都普遍使用Screen.SetResolution,但是它有两个问题。 1.每次设置的时候屏幕会闪烁。 2.降低分辨率与摄像机无关,无法做到只降低3D摄像机的分辨率,保留UI摄像机不降低分辨率。 其实我们可以使用摄像机动态分辨率,如下图所示,给需要降低分辨率的摄像机打开allo.... Read More >
首先我们先借助Unity的SpriteAtlas构建一个图集,同一个图集只会占用一个DrawCall。 接着写一个脚本,把需要参与ECS渲染的Sprite拖上去。 渲染的原理就是 m_BatchRendererGroup.AddBatch ECS负责坐标的修改 1.参与渲染的sprite数量发生变化.... Read More >
如果项目中使用GPU Instancing的话,很多人都会用底层API Graphics.DrawMeshInstanced在Update中绘制。 我们先来做个极端的测试,如下代码所示。 如下图所示,能看出来在Update每帧都有一个比较高的耗时。 如果每帧的调用Graphics.DrawMeshI.... Read More >
书接上文,在LWRP上Camera.SetReplacementShader是用不了的,而且就算能用算出来的不透明物体overdraw也是不对的。如果你的项目已经使用了LWRP,那么我们可以借助Custom Renderer Data来拓展渲染overdraw。如下图所示,需要自己创建一个自定义Re.... Read More >