
unity
文章平均质量分 71
暮志未晚NAN
这个作者很懒,什么都没留下…
展开
-
Unity URP 实现场景和UI添加后处理
在更新到URP之后,之前内置的渲染管线的那一套后处理已经无法使用,接下来,我们使用URP的内置后处理实现对场景和UI的后处理。原创 2025-03-17 17:56:32 · 495 阅读 · 0 评论 -
制作场景资源的Prefab
现在游戏内的使用骨骼模型是通过老版的Animator去实现控制的,所以需要将模型切换为Animator第一步,动画类型设置为Generic,创建Avatar模型里面会有对应的Avatar文件我们还需要一个Controller文件,用于控制动画将所需的动画都拖入到控制器内,编辑好Layer,就可以生成多个动画到一个文件动画的名称必须符合要求,动画源文件修改名称位置修改名称位置Animator里的修改位置在带有Animator的对象上面添加一个Fish Animator脚本。原创 2024-04-30 15:56:29 · 485 阅读 · 0 评论 -
Unity制作随风摇摆的植物
今天记录一下如何实现随风摇摆的植物,之前项目里面的植物摇摆实现是使用骨骼动画实现的,这种方式太消耗性能,植物这种东西没必要,直接使用顶点动画即可。原创 2024-02-02 11:15:17 · 2304 阅读 · 0 评论 -
unity 使用模拟器进行Profiler性能调试
这篇文章主要记录如何实现通过模拟器对打包的app游戏进行Profiler调试。主要记录一些比较重要的点。原创 2023-10-10 17:48:58 · 3314 阅读 · 0 评论 -
在 Substance Painter中实现Unity Standard Shader
要同步shader,需要将一些常量设置SP是线性空间的,所以Standard里面一些Gamma相关的代码自动摒弃。贴图直接使用内置的方法去获取还有一些和Standard对应的参数间接光漫反射的球谐光照参数,是直接写死在shader里面的还有像在unity里面常用的一些函数,比如saturate和lerp,都直接定义出来。原创 2023-09-22 10:44:23 · 2370 阅读 · 0 评论 -
Unity shader内置standard代码解析
最近有相关需求制作,所以这里编写一个文档,方便后续的流程查看。原创 2023-09-15 17:57:05 · 1776 阅读 · 0 评论 -
在 Substance Painter中自定义Shader
首先在着色器设置这里,我们可以查看当前渲染使用的着色器如果没有着色器设置窗口,可以在窗口这里打开点击着色器名称,可以切换当前拥有的shader相应的内置的shader可以在安装目录找到对应的Shader的api文档可以在帮助下拉中打开会打开相应的网页,网页地址在/resources/shader-doc/index.html,你也可以直接在目录中查找官方网站也有相应的文档,地址为接下来,按照官方的教程,先在shaders文件夹下创建一个color.glsl文件。原创 2023-09-14 17:07:47 · 2220 阅读 · 1 评论 -
使用GPA和夜神模拟器实现K帧
us的单位是微秒,1毫秒等于1000微秒,30004us就相当于30毫秒渲染完成此帧,右侧上面是33FPS,代表当前每秒可以渲染33帧,用1秒,也就是1000毫秒除以每帧时间30毫秒,结果是33.333,证明结果正确性。这里分为了三大块,分别是输入,处理,输出,输入有顶点数据geometry,相关贴图。这里说明一下,你K帧结束以后,也可以直接通过Graphics Frame Analyzer查看之前K到的帧,帧数据里面包含了你需要查看的内容,所以你K的一帧的数据都是有几百M。原创 2023-09-08 11:37:42 · 951 阅读 · 0 评论 -
unity 实现水的波纹效果
之前的实现过这个效果,可惜没有记笔记,所以现在有点遗忘,连多个波纹一起在水面上实现的效果都忘记了,所以,查看了下之前实现的代码,现在再记一下笔记。原创 2023-05-10 00:39:42 · 3300 阅读 · 0 评论 -
unity 性能优化之GPU和资源优化
众所周知,我们在unity里编写Shader使用的HLSL/CG都是高级语言,这是为了可以书写一套Shader兼容多个平台,在unity打包的时候,它会编译成对应平台可以运行的指令,而变体则是,根据宏生成的,而打包运行时,GPU会根据你设置的宏切换这些打包出来的代码,而不是我们书写那种只生成的一个Shader,这也是为了提高运行速度。如果你要查看实际运行的代码,可以使用RenderDoc等工具截帧查看实际运行的代码。可以在Shader上面查看当前生成的变体数量。原创 2023-05-02 15:50:01 · 3790 阅读 · 1 评论 -
unity 渲染性能分析工具
既然要优化,肯定要有个目标:pc上一般要求:一秒渲染60帧移动端:一秒渲染30帧这应该是最低的要求,如果游戏运行时,游戏帧率有变化,人眼能够明显的感觉到帧率下降。优化的首要规则是找到性能问题的所在。一般出现问题不是在cpu就是gpu。原创 2023-04-30 14:49:18 · 3667 阅读 · 0 评论 -
unity GI Shader 实现
之前分享了一篇对unity全局光照的解析,里面提到了一些东西,需要在Shader内实现,在这一篇补上。要实现对全局GI的shader实现,我们可以通过对unity内置的Lit进行解析查看。烘焙的方式有很多种,选择合适的方式烘焙和使用合适类型的光源尤为重要。首先,我们先实现一下最基础的烘焙光照显示,就是将Light Map贴图显示出来。需要设置的是,将需要烘焙的模型全设置成静态,光照设置为Baked,并且模型开启了第二套LightMap UV。准备工作结束。原创 2023-04-28 18:20:57 · 1465 阅读 · 0 评论 -
unity GI 系统
间接光没有办法实现实时计算,所以需要一套GI系统去处理间接光。unity的GI系统,本质上就是在后台开启一个离线渲染程序执行GI计算。最早的unity的离线渲染器也是调用的第三方的,所以,如果实力允许,我们也可以独立实现相应的功能。unity的离线渲染器更新:Beast->Enlighten->Enlighten + Progressive Lightmapper。原创 2023-04-26 18:26:46 · 1601 阅读 · 0 评论 -
unity 全局光照
直接光照由直接光照射到物体上以后直接弹射到人眼接收到的光照。间接光照为直接光照照射到物体上又弹射到其它物体上面以后多次弹射才被人眼接收的光照(两次及以上的光照统称为间接光照)原创 2023-03-29 22:07:39 · 3279 阅读 · 3 评论 -
unity 骨骼物理 头发 布料模拟
在给模型添加碰撞体时,可以在需要添加的骨骼节点下面创建一个空节点,可以在空节点上面调节它的大小和位置,然后挂载碰撞体脚本,可以挂载的脚本有 MagicaCapsuleCollider 胶囊体碰撞体 MagicaPlaneCollider 平面碰撞体 MagicaSphereCollider 球型碰撞体。设置数据,后,上面不会再显示No Data,而是显示生成的虚拟网格的数据,我们发现三角面数从之前的1.5w变成了当前的2000等等。在模型当中,布料被当做网格上的质点来进行模拟,这些质点会被弹簧进行连接。原创 2022-11-15 02:19:57 · 3497 阅读 · 0 评论 -
unity urp 实现车漆效果
还有一层就是清漆的效果,也就是ClearCoat,也叫透明图层,这个原理就是为了模拟车上面喷的那层漆的效果。上面是在直接光中使用。上面就是内置的实现镭射的函数,大家可以在unity的内置文件BSDF中找到,我们使用这个求出镭射效果的F项,将默认的F进行一个插值即可。车漆的效果除了基础的pbr效果,上面还可以添加两层额外的效果。一层是清漆的效果,另一层就是薄膜干涉的效果。具体实现,涂层清漆的效果的之前在皮肤的那一章使用过,我这里不在介绍。接下来,我们要使用unity内置的方式取实现镭射的效果。原创 2022-11-03 22:17:17 · 3973 阅读 · 0 评论 -
unity urp 实现衣服绒毛效果
接下来,到了重点了,就是为什么要用dcc生成的模型,那是我们是为了要用模型生成深度信息,如果你是在renderFeature里面去做,是没有多pass的深度和法向的,效果肯定不如这个。接下来处理最下面的那层基础的衣服不显示的问题,我们使用step以0.01进行区分,最下面一层是0,比0.01的值小的alpha直接使用1,比0.01大的我们还是使用之前的结果。在模型编辑器里面的制作是为了实现模型的多次复制,然后将其顶点颜色修改进行分层,比如,最低层的使用颜色为0,最外层的颜色为1,中间就线性过渡就好。原创 2022-11-02 20:43:02 · 3799 阅读 · 0 评论 -
unity urp 实现衣服上面片的效果
我们可以使用其进行noise扰动,实现面片分离的效果,然后再使用其的id的值转换成为法向,相同片的法向相同,但由于id不同,每个片生成的法向的朝向也不相同,然后用这个法向去做高光效果,你就会得到一个亮片一个亮片的效果。我们还需要一个亮片的颜色,在这里,我们刚好可以使用voronoi生成的uv去随便拾取一张多颜色亮片,然后和一个颜色相乘,还可以控制强度,相乘的颜色如果为0,那么亮片将不显示。这里用了两个粗糙度,然后进行混合出来的,给亮片增加了过渡的效果。就比如这种效果,心动了吗,那么,接下来进入实战。原创 2022-10-18 21:53:41 · 7857 阅读 · 4 评论 -
unity urp 实现泰森多边形Voronoi扰动
可以看到,它支持5个参数,第一个是uv,直接和你设置的scale的值相乘了,第二个值传入了扰动值,第3个是id,这个是inout的,代表着函数运行以后,你声明的id也将会被修改掉,uv也是同理,它们的声明也是为了获取运算后的结果。比如你不想使用noise贴图,想自己生成,这种是没有mipmap的,我们可以用这个实现一种mipmap的效果。它还可以修改计算方法,以及生成的结果的过渡的效果修改,如果你需要的密度点的话,这些就无所谓了。我们可以实时的看到生成 的效果,方便又好用,果然可视化才是未来。原创 2022-10-18 14:16:07 · 1634 阅读 · 2 评论 -
unity urp 实现丝绸渲染
这是Anisotropy的值为0.9的效果,当前的双向反射率分布函数,如果把Anisotropy设置为1或者-1,效果上表现会很差。其它代码,我们可以直接魔改unity的urp内置的lit函数,用于获取相关的参数,这里就不再聊了。我们用法向的x轴的量去影响切线空间下的切线的向量值,然后再将其转换到世界空间即可。丝绸渲染使用了各向异性的GGX去实现,有点仿头发的感觉,接下来看一下怎么实现的。首先,准备实现双向反射率分布函数(BRDF)的DVF项。这是-0.9的Anisotropy的效果。原创 2022-10-17 23:23:33 · 2838 阅读 · 2 评论 -
使用InstantOC实现动态遮挡剔除 + LOD效果
设置需要使用InstantOC 管理的游戏对象/预制体所在的层,如果你给物体添加了IOClod,但不在管理的层,那么,它将不会显示,所以,最简单的方法就是设置everting,或者把需要设置的物体都放到一个Layer里面。每次更新遮挡物的显示隐藏时,检测射线的数量,数量越多,检测的结果就越精确,但同时会需要更多的性能消耗。它比内置的基于距离的LOD更有效,因为它是基于光线的,不但可以渲染远处物体的低细节版本,还可以实现近处的但被遮挡的物体的隐藏功能(从当前相机看不到),从而避免浪费渲染时间。原创 2022-09-30 17:19:35 · 1509 阅读 · 0 评论 -
unity urp 实现头发渲染
计算反射的角度不再使用法向N而是改为沿着头发朝向的Bitangent(不是图片中的tangent,tangent在unity中生成,是基于模型uv的u方向,而一般头发图片的制作是垂直排布,也就是v方向)头发在视觉上很重要,大部分人头上拥有10w-15w的发丝,许多不同的发型,最终幻想 - 灵魂深处》总渲染时间的约 25% 花费在主角的头发上。这个可以在制作模型的时候,内部的顶点坐标往前放,外部的顶点坐标向后放,主要是索引的顺序要正确。基础纹理贴图,头发的基础色,纵向拉伸的noise贴图。原创 2022-09-27 16:35:21 · 5137 阅读 · 0 评论 -
unity urp 获取屏幕深度法向颜色纹理以及从深度纹理重构世界空间坐标
之前写过如何从屏幕空间获取uv,但是讲的不完善,https://blog.csdn.net/qq_30100043/article/details/125883016而且还没有说如何使用深度重新构建世界坐标。所以,这一篇,讲解一下,获取深度 纹理 以及屏幕空间法向。接下来,说一下,引擎内置的文件,让我们简单的去获取,再也不用想着去哪抄代码了。这两个对应的是深度贴图和颜色贴图。在urp里面必须开启才行。引擎内置的纹理获取文件在里面的代码也很简单。原创 2022-09-22 15:09:03 · 2721 阅读 · 0 评论 -
unity 遮挡剔除的实现
unity在渲染时,默认只是对模型进行视椎体剔除,也就是在相机显示范围内的物体进行剔除,而遮挡剔除则是,渲染物体被整个遮挡住后,将不参与此帧的渲染,unity虽然内置,但是不默认启用,需要我们进行一些操作,才能够实现当前的操作。原创 2022-09-21 17:38:06 · 2709 阅读 · 1 评论 -
在unity 2020 urp版本中实现 LensFlare功能
所以之前是有一个光晕空间,我继续保留了这个空间,在此空间处理完成以后,再转换回主相机视角空间,然后将顶点从视角空间重新转换回世界空间。麻烦的地方就是在这,所以,我实现是直接将两个脚本都挂载到了一个对象上面,然后把正交相机去掉,多余的对象也删除掉,将这个做成一个预制体,使用的时候,只需要将其放到场景中即可。FlareSource中的修改,里面的实现是使用了挂载对象位置实现的,比较难操作,我直接将其修改成了,根据光的照射方向,然后加上相机的位置偏移,来计算光晕的出现方向。所以,我对此进行了一些修改。原创 2022-09-20 22:01:27 · 1734 阅读 · 4 评论 -
unity urp 棉麻织物渲染
棉麻类的布料是由线组成的,也就是一根根的线织出来的,所以它是相对来说比较平整的结构。但是呢,它还有一层在表面绒毛的存在,这是一层的绒纤维,属于一层树立在表面的短绒毛,但是这层绒毛的方向和长短都是不确定的,在渲染时,我们需要考虑一下这层绒毛的效果。那么,在直接光渲染时,漫反射我们还是使用默认的漫反射,但是在实现直接光的镜面高光时,我们需要使用两层高光去实现。之前也说过,正常的表面使用反向的GGX高光,然后再使用一层高光来表现表层上面的绒毛的镜面高光效果。最终,就有了带有绒毛效果的棉麻织物的效果了。原创 2022-08-22 01:38:25 · 2027 阅读 · 1 评论 -
unity urp 衣服渲染
普通的绒类的衣服,比较松,会呈现出绒毛的Fuzz(绒毛,毛状物)效果,这类衣服会有强烈的边缘照明的效果。皮革类的一般由动物的皮制作而成,不需要做次表面散射效果,但是皮革类的物品一般会表面刷油,所以我们渲染皮革类的物品时,需要靠刷油后的油光的效果。对于棉类的物品,我们需要从物理特性镜面反射部分考虑,D项可以使用D_GGX_Inv,为GGX高光的倒置函数,或者D_Charlie。丝绸尼龙类的衣服,表面比较光滑,由光滑的细丝缝制,和头发的质地有相同之处,是一种会产生各向异性镜面高光的布料。...原创 2022-08-15 19:53:25 · 2182 阅读 · 0 评论 -
unity urp 实现遮挡显示角色轮廓
你需要在角色shader上面增加此段代码,含义为,写入模板,数值为2,Comp Always 意思 GPU 为所有像素的模板测试执行的操作。反正只要深度没通过的,其它的模板值全设置成2。第二次渲染时,深度测试是全通过的,如果不全通过,被遮挡的部分还是无法渲染出来相关内容。模板测试则判断是否与第一次写入的值是否相等,因为第一次渲染写入模板测试值时,被遮挡部分是没有写入的。第一次一次是在正常渲染模型时,写入模板测试数据,深度测试不通过则不会写入模板测试数据,以此来判断当前哪些部分被遮挡住。...原创 2022-08-08 20:02:08 · 3122 阅读 · 0 评论 -
unity 头发的渲染
Alpha处理 处理头发最麻烦的问题在于对头发的半透明排序的问题处理,所以一般渲染头发不选择使用半透明进行头发渲染。浅色的头发,scatter数值偏高,深色的头发,scatter数值偏低。生成的发线的数据,注意头发一般都是从上到下的顺序表现在贴图上面,如果不是,那么需要使用一张FlowMap或者DirectionMap生成。理论模型:头发不是完美的圆柱体,头发是堆叠的圆锥体。用于处理头发的细微变化。TT 透射后然后透射路径你,TT出来的光线也是有色的,但是颜色比TRT的饱和度要抵,只经过一次折射。...原创 2022-08-04 22:50:28 · 2194 阅读 · 0 评论 -
unity urp 渲染管线顶点偏移的实现
如果面与面之间的点不是公用的,会出现屏幕中立方体的效果,球则没有这个问题。所以使用顶点偏移的时候需要注意一下。我实现的是在模型空间进行顶点偏移,大家按自己的需求实现。这里我是通过法线对顶点进行偏移。.........原创 2022-08-04 18:22:41 · 1334 阅读 · 0 评论 -
unity中实现ue眼球的渲染
这里我们使用一张高度图,这是一张HDR贴图,意味着里面的值是可以超过1的。使用这张贴图,配合虹膜的mask,我们可以通过角膜位置高度-角膜缘位置高度,来获取到角膜距离虹膜的距离。所以不需要相应的贴图,只需要使用虹膜的mask来确定角膜的范围即可。角膜是一个凸起的结构,我们可以想象一下放大镜,那么,虹膜的显示结果将会被角膜的厚度所影响,实现那种放大的效果。关于AO方面,采用在眼球前面额外的添加一层面片的处理方式,这层面片不会跟随这眼球的渲染而移动,用于模拟烘焙出来的眼球的环境光遮蔽效果。...原创 2022-08-04 16:05:15 · 1240 阅读 · 0 评论 -
unity URP前向渲染流程以及获取屏幕空间UV和深度
在顶点着色器到片元着色器中间还有一个过程,这个过程中,将进行裁剪剔除,将不在屏幕中的片元裁剪到只在裁剪显示空间内的,显示范围为[-w,w],在这里得到的四维变量xy是裁剪空间下的xy坐标,z是深度,w就是w,注意这里,因为获取屏幕uv也需要在这一步操作,而且不同平台的兼容的问题也需要从这一步开始出现,因为深度也就是z从这一步根据平台也不同。回归正题,既然我们得到NDC空间的xy,它们现在的区间范围是[0,w],那么就好办了,只要我们除以w,那么就得到了屏幕空间下的UV坐标了。...原创 2022-07-20 02:31:08 · 3979 阅读 · 0 评论 -
unity的静态设置以及烘培属性
之前设置unity的静态设置的时候,都是无脑全部static,没有注意过每个属性的设置,在此,记录一下每个值对应的用处。Nothing设置物体为非静态,下面的选项将全部不会被勾选。Everything设置物体为静态,下面的选项将全部被勾选。上面这两个为全部开启关闭的操作,我们也可以不勾选,而是对下面的按需打钩。...原创 2022-07-19 08:27:32 · 3042 阅读 · 0 评论 -
unity 自定义天空球模型防止被裁剪
在unity中,有时候不想使用内置的天空球去渲染,那么,我们就会使用一个球体去渲染天空球。为了保证游戏场景模型都放置在天空球内。球体就会放大的很大,那么问题就来了,这样会导致球体超出了相机的可视范围,导致天空球无法渲染,调整相机的裁减远面,会影响性能,还影响渲染效果。这里有个解决方案,就是我们可以在材质里面去修改球体的顶点着色器输出的裁减坐标,将它的值限制在-1到1的范围内,来解决无法被渲染的问题。这是一个基于unlit修改的防止被裁剪的天空球shader。.........原创 2022-07-16 12:34:39 · 1349 阅读 · 0 评论 -
浅析《地下城与勇士:决斗》的卡通渲染
《地下城与勇士:决斗》罪恶装备和碧蓝幻想都是一家叫Arc System Works公司出品的,它们的渲染也是用的同一套思路。我们使用碧蓝幻想的游戏内的资源做一个解析。模型使用了四张贴图:首先说颜色贴图模型一般包含两张颜色贴图,格式是这样的人物角色简写_base 人物角色简写_SssA通道对皮肤和非皮肤进行了区分SSS的A通道对模型的材质进行了一个区分。我们可以看到,这两张贴图的颜色基本上一样,只不过sss的贴图会比base的贴图暗一些。这两张贴图base的是在亮面使用的,sss的贴图是在暗面原创 2022-07-14 02:41:23 · 803 阅读 · 1 评论 -
unity urp内置lit材质源码解析(下)
接上一篇,这已经是第三篇了,这一篇的难度应该是最高的,因为涉及到pbr的渲染。我作为一个小ta,也不能说能够把物理材质吃透,这里我将能把我理解的都列出来,并结合源码给大家讲解一下。UniversalFragmentPBR函数是写到Lighting.hlsl文件内,这是主要处理光照相关的函数,里面也封装了很多其它应用函数,并且还有很多重载。合并代码,我们发现,这个文件里面封装了pbr(物理材质) BlinnPhong(冯氏渲染模型)Unlit(无光照模型)三种,每一种都有一个重载。重载的意思就是,我们可原创 2022-07-12 19:53:58 · 2011 阅读 · 0 评论 -
unity urp内置lit材质源码解析(中)
上一篇(https://blog.csdn.net/qq_30100043/article/details/125725934)解析了内置shader lit的主文件和input文件,接下来,我们将视线关注到LitForwardPass.hlsl。这个文件内主要是shader的渲染逻辑,里面包含了顶点着色器和片元着色器。在pass里面,我们可以看到顶点着色器和片元着色器的函数名称,所以,我们在LitForwardPass.hlsl里面直接先去寻找这两个函数。我们查看整个文件,可以发现,这个文件结构原创 2022-07-12 16:33:43 · 1513 阅读 · 0 评论 -
unity urp内置lit材质源码解析(上)
之前我发布过一篇对urp的内置shader lit的结构解析,发现自己说的也不完善,这次直接对源码进行一个解析,并提升一下自己的记忆。如果你找不到这个shader,那么就有可能你不是urp渲染管线。自己搜索。在前向渲染pass里面,我们可以看到,urp里面已经不再使用cg语言,而是改用了HLSL渲染语言,其实没大差别,只是里面的一些函数,和一些实现方法出现了变动。#pragma exclude_renderers gles gles3 glcore 上来你会看到这么一句话,就是后面那几个渲染器不会生成对应原创 2022-07-11 19:13:32 · 3139 阅读 · 0 评论 -
Daz导出模型的部件中英文对照
Torso :身体躯干Face:脸Lips:嘴唇Teeth:牙齿Ears:耳朵Legs:腿EyeSocket:眼袋Mouth:嘴Arms:胳膊Pupils:瞳孔EyeMoisture:眼睛水分?Fingernails:指甲Cornea:角膜Irises:虹膜Sclera:巩膜Toenails:脚趾甲......原创 2022-07-06 15:24:48 · 689 阅读 · 0 评论 -
人物角色展示打光
基本采用三点打光法,就是使用三盏灯,来烘托出角色的整体效果。第一盏是主光源,主要展现角色立体感,一般从角色左前方打入,偏向于水平方向,照射方向不易太高也不易太低,主要使用平衡光,颜色一般偏向于暖色。一般保证角色脸部有3/4在亮部即可。第二盏为右前方,为暗部的辅光,颜色偏向暖色,一般使用聚光灯,用于提亮暗部。第三盏为边缘光,一般是在角色后背打光,为了展示出角色的边缘轮廓。颜色一般采用冷色系,不宜太亮。...原创 2022-07-05 17:56:17 · 859 阅读 · 0 评论