![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
渲染
文章平均质量分 94
肖远行
这个作者很懒,什么都没留下…
展开
-
Matcap的原理和应用
什么是Matcap?Matcap实际上是Material Capture的缩写,即材质捕捉。实际上,这是一种离线渲染方案。类似光照烘焙,将光照或者其它更复杂环境下的渲染数据存储到一张2D贴图上, 再从这张2D贴图进行采样进行实时渲染。原创 2023-12-17 00:02:03 · 2333 阅读 · 1 评论 -
角色妆容的实现
前段时间做了下角色妆容的实现,想写个文章记录一下这个事情。妆容看起来很复杂,实际上整理实现思路很简单,主要是两个方面的内容,改变基础色和改变高光(金粉效果)。没有开启妆容的情况下,基础色就是从颜色贴图和基础颜色中获得;开启妆容后,要根据各个状态模块的模板和比例来插值妆容颜色和基本颜色;金粉则是改变特定区域的高光,金粉的浓淡可以用滑块控制,最好同时结合妆容色的浓淡;额外可能需要改变特定妆容区域的光滑度,比如唇彩。...........................原创 2022-07-30 21:54:56 · 850 阅读 · 1 评论 -
Unity手游性能优化的经验总结
一、定位游戏性能瓶颈1.1 游戏循环基本循环:游戏逻辑-渲染提交-等待渲染完成(注意:游戏逻辑指的是除去渲染之外所有的CPU运算)。基本的游戏循环可以理解为先执行游戏逻辑,比如获得输入,然后更新玩家位置,播放动画,物理碰撞等,然后渲染引擎会将要渲染的游戏画面信息提交到GPU,CPU则等待GPU完成该一帧的渲染结果。1.1.1 单线程渲染上图可以看到主线程直接提交渲染命令GCMD给渲染设备。主线程需要等待图形设备渲染完成。1.1.2 多线程渲染[外链图片转存失败,源站可能有防盗链机制,建议将图原创 2022-05-18 11:08:11 · 3936 阅读 · 0 评论 -
Urp渲染管线下的卡通冰效果实现
一、卡通冰的效果先看最终实现的卡通冰材质效果吧,如下所示:也可以调出类似玻璃的效果:如果对一个球应用卡通冰材质,然后打开各种选项,可以得到如下效果:凹凸不平的地方是因为应用了法线贴图。二、脚本和最终的材质界面最终的材质界面,如下图所示:通过材质界面可以清晰看出卡通冰效果的各个模块。另外为了获得屏幕颜色需要挂上一个脚本(PostProcessEffect)表示当前管线需要执行CopyColorPass。三、折射冰效果最关键的部分是折射,注意是折射而不是半透明。折射是透光冰看过去,后原创 2022-05-04 17:36:47 · 1372 阅读 · 0 评论 -
Unity下的日式卡通渲染实现-描边篇(三)
这边文章讲述的是项目中用到的一些卡通渲染描边相关技术。一、Back Face外扩描边背面外扩描边和后处理描边是卡通渲染中主要应用到的描边方式。1.1 实现原理第一个Pass正常渲染物体。第二个Pass只渲染背面,同时顶点沿着法线方向偏移,开启深度测试。第二个Pass开启深度测试的用处一个是重叠部分不会显示出来,另外可以利用Early-Z减少需要处理的片元数量。1.2 描边的法线优化由于我们是沿着法线偏移顶点,那么最终的描边结果对法线的依赖很大。如果法线分布有问题,可能造成描边断裂的情况。如下图原创 2022-03-16 15:50:18 · 2685 阅读 · 0 评论 -
Unity下的日式卡通渲染实现-阴影篇(二)
这边文章讲述的是项目中用到的一些卡通渲染阴影相关技术。一、SDF面部阴影SDF这个概念具体是什么意思了?可以去观看闫令琪在B站上的101课程,有一节专门讲述了SDF的定义和混合SDF能够产生什么效果。其实SDF面部阴影基本的思想就是混合面部的SDF得到一张阴影阈值图,然后利用这张阴影阈值图实现二维的阴影渲染。比较详细的解释可以参考这篇文章,卡通渲染之基于SDF生成面部阴影贴图的效果实现(URP)。1.1 如何计算SDF根据SDF的定义(到边界的最短有符号距离,形状内部为负,外部为正),计算二维的S原创 2022-03-16 14:27:48 · 7515 阅读 · 0 评论 -
Unity下的日式卡通渲染实现-着色篇(一)
这篇文章讲述的是项目中二次元日式卡通着色渲染用到的一些跟着色相关的技术点。一、卡通着色何谓卡通着色?大概是让角色看起来卡通的角色吧。这里说的卡通着色,实际上指的是色阶着色。即根据光照和法线计算出当前像素处于哪个色阶,色阶直接有平缓过渡。1.1 三色阶如下图所示,这是一个三阶色的着色结果。可以看到着色结果是明显的三阶,从正对光照到背对光照是过渡分明的白色、灰色、黑色的三色阶。卡通渲染着色最基础的部分就是这种明显过渡的色阶。根据需要,项目中可能采用的是二色阶或者三色阶。我们观察过战双的角色效果,猜测原创 2022-03-16 10:23:39 · 7663 阅读 · 0 评论 -
Urp相机堆栈关于后处理抗锯齿设置的问题
一、问题起源和影响1.1 Base相机切换导致切换场景时候闪烁问题是这样的,项目之前一直用场景相机作为Base相机,UI相机作为Overlay相机。渲染顺序是先渲染场景Base相机,然后渲染UI相机。不过,最近打包发现,在部分机器上,一切换场景时候,比如loading界面打开时候,屏幕会出现明显的闪烁,甚至还会花屏。尝试解决:并没有上FrameDebug或者RenderDoc去抓帧分析,比较麻烦。首先,尝试在切换场景之前就隐藏场景相机,发现花屏现象消失了,闪烁问题也大幅度减弱。猜测,是场景切换时候场景原创 2022-03-10 10:50:59 · 7465 阅读 · 0 评论 -
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 · 4779 阅读 · 0 评论 -
Unity下平面反射实现
平面反射通常指的是在镜子或者光滑地面的反射效果上,如下图所示,上图是一个光滑的平面,平面上的物体在平面上有对称的投影。一、平面反射的原理对于光照射到物体表面然后发生完美镜面反射的示意图,如下所示,对于平面反射,假设平面上任意一点都会发生完美的镜面反射。因此,眼睛看到物体的一点的反射信息是从反射向量处得到的,这个可以用下图来表示,这个实际上相当于,眼睛从平面的下面看向反射向量,如下图所示,因此,如上图所示,我们可以把摄像机根据平面对称变换到A点所示的位置,然后再渲染一遍场景到RenderT原创 2022-02-15 10:07:49 · 6578 阅读 · 0 评论 -
伽马校正和颜色空间
一、伽马校正所谓gamma校正,实际上是一个颜色的非线性曲线变换。下面来解释这个曲线存在的原因。1.1 人眼的非线性视觉效应为什么要有gamma校正了。一言以蔽之,人眼的生理效应。如下图所示,第一行是人眼感受到的线性亮度变化,第二行是真实的非线性亮度变化。可以得出结论,首尾两端是一致的,但是中间值变化不一致;真实的中间亮度值必须更大,才能得到人眼感知的线性亮度变化。我们的目的是让人眼感受到线性的亮度变化曲线,因此输入亮度必须是第二行这种非线性的亮度变化曲线。第二行的亮度变化曲线,就是伽马校正曲线原创 2022-01-21 11:45:45 · 4247 阅读 · 0 评论 -
渲染管线中的坐标空间和相关变换
一、思维导图二、模型空间这里的模型空间指的是建模出来的空间,也就是用建模软件输出的数据所在的坐标空间。比如,3D Max用的是右手系,输出的模型数据所在的空间就叫模型空间;由于Unity的模型空间是左手系,所以通常需要旋转90度才能对应上。三、切线空间切线空间又可以叫做纹理空间。假如纹理坐标uv构成一个二维空间,加上垂直于这个二维空间的法线,那么就是一个三维的切线空间。3.1 法线贴图的切线空间切线空间有什么应用了?我们在计算光照模型的时候,通常会有更精细表示法线的数据,比如法线贴图,法线贴图原创 2022-01-14 19:01:33 · 3967 阅读 · 1 评论 -
左右手坐标系和相关定则的总结
左手坐标系和右手坐标系是三维空间下两种不同的坐标系,而且无法通过旋转将左手坐标系转换到右手坐标系。与其相对应的,有左手定则和右手定则,主要是用来确定叉积的朝向或者说旋向。首先,规定二维坐标,X轴朝右、Y轴朝上,推广到三维空间,需要确定的是Z轴是朝前还是朝后。一、左手坐标系所谓左手坐标系,指的是通过左手来确定的一个三维空间坐标系。1.1 确定左手坐标系的方式下面总结了三种可以确定左手坐标系的方法。1.1.1 拇指、食指、中指相互垂直确定法如图,伸出左手,拇指朝上代表Y轴、食指朝前代表Z轴、中指原创 2022-01-07 17:51:09 · 16552 阅读 · 1 评论 -
游戏引擎渲染管线的总结
渲染管线的思维导图需要注意的是,本文涉及的内容过多过杂,基本涉及到游戏渲染和图形管线的方方面面。内容是根据多方面的资料整理而成,比如本人的Unity和Unreal引擎相关的理解和认知,以及引擎相关官方文档等,以及DirectX和OpenGL相关官方文档等,以及网络上各种相关文章和资料等。可能有一些纰漏或者不足之处,或者有些阶段的资料来源较为单一,本人主要目的是从概念理解上对应整个游戏引擎的渲染管线,不一定和真实的游戏完全一一对应,比如应用程序阶段的知识对应到游戏引擎应该会有一些区别和取舍,几何阶段和光栅化原创 2021-12-28 16:28:47 · 4128 阅读 · 1 评论 -
反射效果的实现总结
反射的实现原理分类首先要说明下反射向量,指的是视线的镜面反射向量,如下图所示,实际上,人眼看向一个物体表面的时候,在该位置(上图O点)的反射信息,来自于视线的反射方向,因为光线会从该反射方向打到物体表面,最终进入人眼。一般情况下,我们假定反射角和入射角相等。以下所有涉及到的反射向量, 都是指的视线反射向量,不是光线反射向量。CubeMap天空盒就是一个CubeMap,我们可以假定天空盒是一个环境反射来源,也可以指定另外的CubeMap,用反射向量采样这个CubeMap就能得到反射颜色。CubeMa原创 2021-12-02 10:33:42 · 4470 阅读 · 0 评论 -
Urp下自定义特效管线和后处理特效实现
如何获得颜色缓冲网上搜索Unity的后处理或者获得屏幕缓冲,大部分会提到用grabpass到一张指定纹理上或者写一个后处理脚本挂在摄像机上。但是这种方式在Urp管线下已经不生效了。urp取消了默认管线抓取颜色缓冲的grabpass,同时也取消了MonoBehaviour.OnRenderImage,需要使用ScriptableRenderPass 来完成类似的功能。ScriptableRenderPass是urp中的pass基类,urp预定义的pass都继承自该类,我们自定义的pass也需要继承自该类。原创 2021-11-27 11:35:53 · 5160 阅读 · 3 评论