
Unity
文章平均质量分 93
肖远行
这个作者很懒,什么都没留下…
展开
-
角色妆容的实现
前段时间做了下角色妆容的实现,想写个文章记录一下这个事情。妆容看起来很复杂,实际上整理实现思路很简单,主要是两个方面的内容,改变基础色和改变高光(金粉效果)。没有开启妆容的情况下,基础色就是从颜色贴图和基础颜色中获得;开启妆容后,要根据各个状态模块的模板和比例来插值妆容颜色和基本颜色;金粉则是改变特定区域的高光,金粉的浓淡可以用滑块控制,最好同时结合妆容色的浓淡;额外可能需要改变特定妆容区域的光滑度,比如唇彩。...........................原创 2022-07-30 21:54:56 · 1049 阅读 · 1 评论 -
Unity手游性能优化的经验总结
一、定位游戏性能瓶颈1.1 游戏循环基本循环:游戏逻辑-渲染提交-等待渲染完成(注意:游戏逻辑指的是除去渲染之外所有的CPU运算)。基本的游戏循环可以理解为先执行游戏逻辑,比如获得输入,然后更新玩家位置,播放动画,物理碰撞等,然后渲染引擎会将要渲染的游戏画面信息提交到GPU,CPU则等待GPU完成该一帧的渲染结果。1.1.1 单线程渲染上图可以看到主线程直接提交渲染命令GCMD给渲染设备。主线程需要等待图形设备渲染完成。1.1.2 多线程渲染[外链图片转存失败,源站可能有防盗链机制,建议将图原创 2022-05-18 11:08:11 · 4338 阅读 · 0 评论 -
Urp渲染管线下的卡通冰效果实现
一、卡通冰的效果先看最终实现的卡通冰材质效果吧,如下所示:也可以调出类似玻璃的效果:如果对一个球应用卡通冰材质,然后打开各种选项,可以得到如下效果:凹凸不平的地方是因为应用了法线贴图。二、脚本和最终的材质界面最终的材质界面,如下图所示:通过材质界面可以清晰看出卡通冰效果的各个模块。另外为了获得屏幕颜色需要挂上一个脚本(PostProcessEffect)表示当前管线需要执行CopyColorPass。三、折射冰效果最关键的部分是折射,注意是折射而不是半透明。折射是透光冰看过去,后原创 2022-05-04 17:36:47 · 1464 阅读 · 0 评论 -
反射效果的实现总结
反射的实现原理分类首先要说明下反射向量,指的是视线的镜面反射向量,如下图所示,实际上,人眼看向一个物体表面的时候,在该位置(上图O点)的反射信息,来自于视线的反射方向,因为光线会从该反射方向打到物体表面,最终进入人眼。一般情况下,我们假定反射角和入射角相等。以下所有涉及到的反射向量, 都是指的视线反射向量,不是光线反射向量。CubeMap天空盒就是一个CubeMap,我们可以假定天空盒是一个环境反射来源,也可以指定另外的CubeMap,用反射向量采样这个CubeMap就能得到反射颜色。CubeMa原创 2021-12-02 10:33:42 · 4760 阅读 · 0 评论 -
Unity下平面反射实现
平面反射通常指的是在镜子或者光滑地面的反射效果上,如下图所示,上图是一个光滑的平面,平面上的物体在平面上有对称的投影。一、平面反射的原理对于光照射到物体表面然后发生完美镜面反射的示意图,如下所示,对于平面反射,假设平面上任意一点都会发生完美的镜面反射。因此,眼睛看到物体的一点的反射信息是从反射向量处得到的,这个可以用下图来表示,这个实际上相当于,眼睛从平面的下面看向反射向量,如下图所示,因此,如上图所示,我们可以把摄像机根据平面对称变换到A点所示的位置,然后再渲染一遍场景到RenderT原创 2022-02-15 10:07:49 · 7006 阅读 · 0 评论 -
Unity下的日式卡通渲染实现-描边篇(三)
这边文章讲述的是项目中用到的一些卡通渲染描边相关技术。一、Back Face外扩描边背面外扩描边和后处理描边是卡通渲染中主要应用到的描边方式。1.1 实现原理第一个Pass正常渲染物体。第二个Pass只渲染背面,同时顶点沿着法线方向偏移,开启深度测试。第二个Pass开启深度测试的用处一个是重叠部分不会显示出来,另外可以利用Early-Z减少需要处理的片元数量。1.2 描边的法线优化由于我们是沿着法线偏移顶点,那么最终的描边结果对法线的依赖很大。如果法线分布有问题,可能造成描边断裂的情况。如下图原创 2022-03-16 15:50:18 · 3016 阅读 · 0 评论 -
Unity下的日式卡通渲染实现-阴影篇(二)
这边文章讲述的是项目中用到的一些卡通渲染阴影相关技术。一、SDF面部阴影SDF这个概念具体是什么意思了?可以去观看闫令琪在B站上的101课程,有一节专门讲述了SDF的定义和混合SDF能够产生什么效果。其实SDF面部阴影基本的思想就是混合面部的SDF得到一张阴影阈值图,然后利用这张阴影阈值图实现二维的阴影渲染。比较详细的解释可以参考这篇文章,卡通渲染之基于SDF生成面部阴影贴图的效果实现(URP)。1.1 如何计算SDF根据SDF的定义(到边界的最短有符号距离,形状内部为负,外部为正),计算二维的S原创 2022-03-16 14:27:48 · 7962 阅读 · 0 评论 -
Unity下的日式卡通渲染实现-着色篇(一)
这篇文章讲述的是项目中二次元日式卡通着色渲染用到的一些跟着色相关的技术点。一、卡通着色何谓卡通着色?大概是让角色看起来卡通的角色吧。这里说的卡通着色,实际上指的是色阶着色。即根据光照和法线计算出当前像素处于哪个色阶,色阶直接有平缓过渡。1.1 三色阶如下图所示,这是一个三阶色的着色结果。可以看到着色结果是明显的三阶,从正对光照到背对光照是过渡分明的白色、灰色、黑色的三色阶。卡通渲染着色最基础的部分就是这种明显过渡的色阶。根据需要,项目中可能采用的是二色阶或者三色阶。我们观察过战双的角色效果,猜测原创 2022-03-16 10:23:39 · 8308 阅读 · 0 评论 -
Urp相机堆栈关于后处理抗锯齿设置的问题
一、问题起源和影响1.1 Base相机切换导致切换场景时候闪烁问题是这样的,项目之前一直用场景相机作为Base相机,UI相机作为Overlay相机。渲染顺序是先渲染场景Base相机,然后渲染UI相机。不过,最近打包发现,在部分机器上,一切换场景时候,比如loading界面打开时候,屏幕会出现明显的闪烁,甚至还会花屏。尝试解决:并没有上FrameDebug或者RenderDoc去抓帧分析,比较麻烦。首先,尝试在切换场景之前就隐藏场景相机,发现花屏现象消失了,闪烁问题也大幅度减弱。猜测,是场景切换时候场景原创 2022-03-10 10:50:59 · 7927 阅读 · 0 评论 -
Urp下自定义特效管线和后处理特效实现
如何获得颜色缓冲网上搜索Unity的后处理或者获得屏幕缓冲,大部分会提到用grabpass到一张指定纹理上或者写一个后处理脚本挂在摄像机上。但是这种方式在Urp管线下已经不生效了。urp取消了默认管线抓取颜色缓冲的grabpass,同时也取消了MonoBehaviour.OnRenderImage,需要使用ScriptableRenderPass 来完成类似的功能。ScriptableRenderPass是urp中的pass基类,urp预定义的pass都继承自该类,我们自定义的pass也需要继承自该类。原创 2021-11-27 11:35:53 · 5633 阅读 · 3 评论 -
DrawCall、Batches、SetPassCalls的区别和联系
一、DrawCall、Batches、SetPassCalls的基本理解我们先从图形渲染的角度对这些概念做一个基本的理解。1.1 DrawCallDrawCall实际上指的是一次图形渲染接口的调用,比如OpenGL的glDrawArrays或者glDrawElements的一次调用,以及DirectX的DrawPrimitive或者DrawIndexedPrimitive。因此,DrawCall可以简单理解为一次渲染指令调用。1.2 Batches我们知道,在调用DrawCall之前,需要设置渲染原创 2022-02-18 16:04:33 · 5644 阅读 · 0 评论 -
Unity3D代码规范
命名法Pascal命名法:每个单词首字母大写。Camel命名法:第一个单词首字母小写,其余单词首字母大写。C++标准库命名法:全小写,单词用下划线分割。C#函数和类采用Pascal命名法,变量采用Camel命名法。代码目录和文件采用Pascal命名法。Lua类采用Pascal命名法,其余采用C++标准库命名法。代码目录和文件采用C++标准库命名法。其它其它目录和文件采用Pascal命名法。C#代码规范命名的基本约定函数用动词命名,其它的用名词或者形容词命名。避免使用拼音原则上原创 2021-12-28 17:41:47 · 2643 阅读 · 0 评论