Unity3d
文章平均质量分 81
真像大白阿
Java的傀儡。。
展开
-
GPU渲染架构-IMR & TBR & TBDR
等到非得刷新整个FrameBuffer的时候,比如说在代码里显示的执行GLFlush,GLFinish,Bind和Unbind FrameBuffer这类操作的时候,总之就是我告诉GPU现在我就需要用到FrameBuffer上数据的时候,GPU才知道拖不了了,就会将这批绘制做光栅化,做tile-based-rendering。arm的移动设备没有显存,需要考虑带宽性能。读取只发生在需要几何以及纹理信息的时候,写回也只发生在整批绘制画完的时候,具体的绘制都是在On_Chip Memory上完成的,转载 2023-05-22 10:51:06 · 1029 阅读 · 0 评论 -
Unity游戏性能分析最终指南 04
Unity Profiler 可以在运行时分析性能瓶颈,并更好地了解特定帧或时间点所发生的情况。Unity Profiler可以提供大量的分析标记数据。请注意,在Editor中直接进行分析会增加额外开销并影响结果。转载 2023-05-18 18:06:04 · 1557 阅读 · 0 评论 -
Unity游戏性能分析最终指南 03
Total Used Memory是Unity跟踪的总内存,不包括Unity保留的内存(Total Reserved Memory)。Memory Profiler package的一个巨大优势是,除了捕获本机对象,它还允许查看托管内存,保存和比较快照,并以更详细的方式浏览内存,以可视化内存使用情况。内存分析器的许多功能已被Memory Profiler package取代,但仍然可以使用它辅助内存分析。另外,也可以使用内存分析器模块中的详细视图来深入了解内存树,找出使用最多内存的内容。转载 2023-05-18 18:03:44 · 2001 阅读 · 0 评论 -
Unity游戏性能分析最终指南 02
VSync将应用程序的帧率与显示器的刷新速率同步。这意味着,如果您有一个60Hz的显示器,并且游戏的帧预算在16.66ms内,则它会强制以60fps运行,而不允许更快。将帧率与显示器的刷新速率同步,可以减轻GPU的负担并解决屏幕撕裂等视觉图像瑕疵。在Unity中,通过Quality settings 可以设置VSync Count (Edit > Project Settings > Quality)。Unity Profiler提供了足够的信息来定位性能瓶颈。转载 2023-05-18 18:03:54 · 1647 阅读 · 0 评论 -
Unity游戏性能分析最终指南 01
分析工具是开发者的实用工具之一,可以帮助开发者定位代码中的内存问题和性能瓶颈,也能帮助了解Unity引擎底层的运行。Unity提供了多种分析工具,用于在Editor和目标设备上分析代码。建议使用各目标平台(例如Arm,Apple,PlayStation和Xbox等)自己的原生分析工具。转载 2023-05-18 18:02:16 · 342 阅读 · 0 评论 -
Metal、Vulkan、DirectX 图形引擎架构演进
Metal 概览 - Apple Developer提升运行速度,远不止图形而已渲染高级3D图形,并使用图形处理器进行数据并行计算。Metal提供了针对平台优化的低开销API,让您可以利用丰富的着色语言,以及图形与计算程序之间更加紧密的集成,开发最新的3D专业app和令人惊叹的游戏。为了帮助您管理更加复杂的着色器代码并同时完成更多工作,Metal新增了一套出色的高级GPU调试工具,助您充分发挥图形代码的潜力。转载 2023-01-28 09:48:47 · 2872 阅读 · 0 评论 -
CPU缓存命中
CPU架构我们现在经常听到的关于CPU的描述里会有高通骁龙,华为麒麟,英特尔奔腾,酷睿I3、I5、I7或者X86,ARM,PowerPC,又或者32位64位等等。那么它们之间的关系是什么?转载 2023-01-13 09:56:36 · 761 阅读 · 0 评论 -
ASTC纹理压缩格式介绍
ASTC是在OpenGL ES 3.0出现后,在2012年中产生的一种业界领先的纹理压缩格式,它的压缩分块从4x4到12x12最终可以压缩到每个像素占用1bit以下,压缩比例有多种可选。ASTC格式支持RGBA,且适用于2的幂次方长宽等比尺寸和无尺寸要求的NPOT(非2的幂次方)纹理。转载 2022-12-27 16:37:42 · 2002 阅读 · 0 评论 -
优化图形性能
游戏的图形部分主要影响计算机的两个系统:CPU 和 GPU。找到性能问题所在是一切优化的首要法则,因为 GPU 与 CPU 的优化策略大不相同转载 2022-12-27 16:31:46 · 852 阅读 · 0 评论 -
关于静态批处理/动态批处理/GPU Instancing /SRP Batcher的详细剖析
关于静态批处理/动态批处理/GPU Instancing /SRP Batcher的详细剖析转载 2022-11-30 11:00:36 · 1390 阅读 · 0 评论 -
关于Unity加载优化,你可能会遇到这些问题
如果只是通过Resources.Load加载,就不会有纹理的多份,但是如果通过AssetBundle加载,每个Prefab都是一个AssetBundle,并且纹理没有打包依赖,那么纹理资源确实会在记忆。如果反转,则可以释放。对于Unity 5.3版本之前的项目,建议通过LoadFromCacheOrDownload或LoadFromFile加载AssetBundle,既可以减少Assetbundle对象的内存占用,又可以保持AssetBundle之间的链接关系和资源,方便后续加载有依赖的Prefabs。转载 2022-11-29 18:28:14 · 4165 阅读 · 0 评论 -
图形渲染及优化—Unity合批技术实践
我们可以在美术资源生产的过程中做很多渲染批次方面的优化。通常我们可以将一些使用相同材质的物体模型合并成一个模型,在游戏渲染的时候一次提交给渲染API进行绘制,降低了Draw call的数量转载 2022-10-31 22:03:16 · 1468 阅读 · 0 评论 -
Unity内存与资源管理
内存管理是程序开发的核心问题,而资源的使用又与内存息息相关,因此本章想要梳理整个开发流程中Unity对于内存与资源的管理方式。转载 2022-10-31 22:00:22 · 961 阅读 · 0 评论 -
Unity中关于 Mipmap
在三维计算机图形的贴图渲染中有一个常用的技术被称为Mipmapping。为了加快渲染速度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为 MIP map 或者 mipmap。这个技术在三维游戏中被非常广泛的使用。 Mipmap 需要占用一定的内存空间,同时也遵循小波压缩规则(wavelet compression)转载 2022-09-29 15:27:32 · 6056 阅读 · 0 评论 -
HLSL 偏导数 ddx / ddy
在光栅化的时刻,GPUs会在同一时刻并行运行很多Fragment Shader,但是并不是一个pixel一个pixel去执行的,而是将其组织在2x2的一组pixels分块中,去并行执行。转载 2022-09-29 12:01:23 · 890 阅读 · 0 评论 -
URP源码学习(一)整体框架理解
unity新出的SRP功能,可能是渲染的未来(希望是),但是资料比较少,做手游开发,又只能用到URP,资料更少,最近查了很多资料,加上看源码,对于URP有了一些了解,个人感觉还是很实用的,在手游上应该潜力很大。...转载 2022-08-19 09:59:00 · 1436 阅读 · 0 评论 -
URP源码学习(二)管线,pipeline
URP有个cameraStack的概念,大概理解就是一个相机带有一个stack,可包含多个相机,渲染的时候将stack里最后一个激活的相机渲染到屏幕上,渲染流程和上边差不多。面板上的显示,基本上和UniversalRenderPipelineAsset类是一一对应的,主要分几个部分,比较重要的是光照和阴影,细节先不说了,用到了看看就行。首先这里的管线,指的是图形学上的管线,渲染一帧需要的所有逻辑,要和后边说的前向渲染管线做个区分。...转载 2022-08-19 09:51:02 · 1036 阅读 · 0 评论 -
URP源码学习(三)UniversalRenderer渲染管线
首先延迟渲染的核心思想,是利用gbuffer,保存一部分数据,最后做一次对应屏幕分辨率的计算。URP自然也要基于gbuffer去实现。URP对于传统的延迟渲染,又做了一些扩展。gbuffer保存了比法线更多的数据,以及可以支持多种光照模型,代价是drawcall增加。目前的版本不支持OpenGL,但是支持Vulkan,手机上可以看情况开启,动态切换也比较容易。......转载 2022-08-19 09:50:04 · 1465 阅读 · 0 评论 -
URP源码学习(四)光照
UniversalAdditionalLightData,看名字是设置光源的属性,实际影响的参数只有shadowBias和shadowNormalBias,感觉这名字起的有点误导,不需要手动添加,如果在light里对Bias选择Custom,则会自动添加。光照相关的代码和shader大致看了一遍,核心内容就是光照计算的流程,URP实现的是一个简化版的计算,这部分项目中实际要改的应该不多,设置好各种宏就可以了,光照算法也不是我这个水平能改的了的,会用就行~下面分成几个部分,看看shader代码是怎么实现的。.转载 2022-08-19 09:54:13 · 1798 阅读 · 0 评论 -
URP源码学习(五)阴影
通过MainLightShadowCasterPass驱动RenderPassEvent是BeforeRenderingShadows,也就是clear之后就渲染shadowmap。有两个作用,一个是判断是否开启了阴影,一个是设置阴影的一些参数,分辨率,级联层级数量等。函数的结果是将设定好的阴影图按级联数量,分成几个小块,每个小块渲染一个精度的阴影。主要作用是获取shadowmap的rt,配置到pass的color缓冲区,标记为只渲染深度值。大体流程和主光源差不多,下面就对一些有区别的地方做下说明。...转载 2022-08-19 09:48:49 · 1938 阅读 · 0 评论 -
URP源码学习(六)后处理
URP把后处理分成了两个pass,finalPass只在相机抗锯齿模式为FastApproximateAntialiasing时调用。如果对应效果开启,设置shader关键字或贴图,shader用的是finalPass。Render函数里有个有趣的写法,int GetSource() => source;类似这种,在函数内定义函数。逻辑上来说判断抗锯齿模式是多余的,只有fxaa才会用这个分支渲染。这些常见的后处理效果,都有比较成熟的算法,具体逻辑就不细看了。这个函数按顺序渲染各个后处理效果,简单看下流程。.转载 2022-08-19 09:47:51 · 1171 阅读 · 0 评论 -
URP源码学习(七)一些细节和理解
URP提供了两种获取深度图的方法,一种是像内置管线那样,直接渲染指定pass,另一种是取深度buffer,渲染到一张rt上,优先用取深度buffer的方法,效率更高,但是需要系统和硬件支持。对rt的理解大概就这些,URP做了一些封装,看起来有点绕,反正核心就是改变渲染数据写入的位置,由屏幕变成我们定义的一张图,然后取这张图用来实现各种效果。这个在内置的管线,是通过shader的grab指令获取的,移动设备支持的不好,URP加了一个拷贝buffer的方式,性能会好一些。通过CopyColor pass实现。.转载 2022-08-19 09:44:51 · 2157 阅读 · 0 评论 -
一图流梳理URP Lit.Shader结构
一图流梳理URP Lit.Shader结构转载 2022-07-30 20:43:10 · 206 阅读 · 0 评论 -
URP学习--LitShader
LitShader也是基于物理渲染的,很多方法和属性看过默认管线PBR代码的应该都会很熟悉,我们现在再过一遍,加深一下印象,同时疏通一下以前可能没有掌握的地方。转载 2022-07-30 20:37:53 · 1376 阅读 · 0 评论 -
Unity BRDF公式解析
Unity BRDF公式解析转载 2022-06-30 16:28:54 · 943 阅读 · 0 评论 -
URP从原理到应用——进阶篇
URP原理和应用转载 2022-06-30 16:03:11 · 5849 阅读 · 0 评论 -
Shader基础:5、表面着色器Surface Shader
表面着色器是通过Unity给我们制定好的一套标准,计算出需要填充输入什么,输出什么等相关信息,并产生真实的顶点(vertex)&像素(pixel)着色器,以及把渲染路径传递到正向或延时渲染路径。输出结构struct SurfaceOutput { half3 Albedo; //反射率,也就是纹理颜色值(r,g,b) half3 Normal; //法线,法向量(x, y, z) half3 Em...转载 2022-05-30 14:52:42 · 544 阅读 · 0 评论 -
SHADER学习笔记(一):Surface Shader
Surface Shader是Unity为了方便shader编写提供的特殊功能,它对底层的vertex/fragment shader做了封装,省去了一些重复代码编写的工作量。我的理解是它同时具有vertex/fragment shader的功能,只是写法上更加简洁,更容易上手。Unity的官方manual上就提供了几个最好的学习例子,我在学习的过程中加上了注释。简单的漫反射(SIMPLE) Shader "Example/Diffuse Simple" { SubShad.转载 2022-05-30 14:49:33 · 1365 阅读 · 0 评论 -
URP自定义后处理(相机滤镜)
前言之前做游戏一直想弄个可以实时触发相机滤镜的效果,自处找了教程和资料,想要做到自定义效果的话最好办法是在unity 内部实现,这个办法比较硬核,其实不适合我这样的小白,所以我在实现的过程中非常痛苦,我用的unity URP 模式其实自带后处理隐藏菜单的,这功能可以通过添加Volume组件启用,但是要在底层代码中自己写个脚本,类似在底层接一根线出来。一、自定义render feature先从底层接线,自定义render feature,怎么定义呢,先找到你的渲染管线,打开菜单栏edit—proj转载 2022-04-29 19:03:09 · 1510 阅读 · 0 评论 -
URP——后期处理特效
通用渲染管道(URP)包括一个后处理效果的集成实现。如果使用URP,则不需要为后期处理效果安装额外的包。URP与PostProcessingStackv2包不兼容。URP使用体积框架进行后期处理效果。下面的图片显示了一个URP场景有没有后期处理的区别。没有后期处理特效:有后期处理特效:注意:URP在OpenGLES 2.0上不支持后期处理特效。How to configure post-processingeffects in URP本节描述如何在URP中配...转载 2022-04-29 18:57:20 · 5055 阅读 · 0 评论 -
Shader入门 各种坐标空间的定义和变换演示
文中内容主要参考书籍《unity shader入门精要》,作者为冯乐乐。该篇建议先浏览前面篇章的渲染流水线部分结合理解。一、模型空间(model space)模型空间(model space)在不同的游戏引擎或者是软件中又称作对象空间(object space)或者局部空间(local space)。在游戏中的每一个模型或者物体都有各自独立的坐标空间,模型有自己的前后左右,这是它的自身属性,旋转或者是移动和缩放模型并不能改变它的前后左右。在Unity中,模型空间使用的是左手坐标.转载 2022-03-31 17:53:50 · 1176 阅读 · 0 评论 -
unity shader中的矩阵变换知识
提要 在图形的计算中,比如旋转、缩放、平移、投影等操作,矩阵都扮演着极其重要的角色,它是操作图元的基本工具。虽然很多的图形API已经封装好了这些矩阵操作,但是理解这些矩阵操作的原理会非常非常有帮助,比如说我们可以通过一些矩阵的快捷计算来加速你的代码。 如果你有一些线性代数的基础,看下面的内容的时候也不会很轻松,因为有点难且比较没意思,如果没有修过这门课,最好把线性代数这本书拿来看看,因为这些东西真是基础中的基础,而且非常的重要。齐次记法(Homogeneous Nota...转载 2022-03-31 17:46:37 · 1765 阅读 · 1 评论 -
Unity Shader 变体处理与预加载流程
一、什么是Shader变体,它是怎么出现的当我们写完一个shader以后,unity需要加载和编译,这个过程由着色器的构建管线来完成,它的输入是着色器,而它的输出就是今天的主角---着色器变体;每一个着色器进入构建管线后会被解析,然后提取着色器片段(顶点着色器和片元着色器等),收集预处理指令,然后每一个着色器变体会有一个参数表;为什么会有变体这个概念呢,其实它和我们使用宏的概念是一致的,就是一个全局的控制,同一个shader的变体之间的着色器代码功能类似,只是有一些微小的差距,而如果我们为每一种情况都转载 2022-03-02 15:57:48 · 3422 阅读 · 0 评论 -
图元装配和光栅化
OpenGL ES 3.0学习汇总OpenGL ES 3.0 学习记录汇总目录本文主要介绍:OpenGL ES支持的 图元 和 几何形状对象 的类型,以及它们的绘制方法。 OpenGL ES 图形管线 顶点着色器 之后的 图元装配 阶段。 OpenGL ES 图形管线的 光栅化 阶段。图元图元可以用 glDrawArrays、glDrawElements、glDrawRangeElements、glDrawArraysInstanced、glDrawElementsInstanced转载 2022-02-28 17:11:34 · 796 阅读 · 0 评论 -
Unity Shader入门精要学习笔记 - 第16章 Unity中的渲染优化技术
转自冯乐乐的 《Unity Shader 入门精要》移动平台的特点为了尽可能一处那些隐藏的表面,减少overdraw(即一个像素被绘制多次),PowerVR芯片(通常用于ios设备和某些Android设备)使用了基于瓦片的延迟渲染(TBDR)架构,把所有的渲染图像装入一个个瓦片中,再由硬件找到可见的片元,而只有这些可见片元才会执行片元着色器。另一些基于瓦片的GPU架构,如Adreno(高通的芯片)和Mali(ARM的芯片)则会适应early-Z 或相似的技术进行一个低精度的深度检测,来剔除那些不需要转载 2022-02-28 17:00:53 · 423 阅读 · 0 评论 -
【Unity】Shader优化总结
分为三个部分:Unity官方文档,GDC,个人经验。Unity Manual1.计算量优化。着色器进行的计算和处理越多,对性能的影响越大。针对不影响最终效果但依然进行计算的无效代码,进行移除操作。计算的频率也会影响游戏的性能。通常,像素着色器比顶点着色器的执行次数要多。在可能的情况下,将计算从像素着色器移动到顶点着色器,或将它们完全在着色器移除,在脚本中计算并传递给着色器。2.表面着色器优化。Unity提供的表面着色器非常适合编写与光照交互的着色器。针对特定情况设置关键字以使着色器效率更高或减小转载 2022-01-29 15:24:15 · 4176 阅读 · 1 评论 -
Unity_Shader高级篇_16_Unity Shader入门精要_减少计算复杂度
16.8 减少计算复杂度16.8.1 Shader的LOD技术和16.5.2提到的模型的LOD技术类似,Shader的LOD技术可以控制使用的Shader等级。它的原理是,只有Shader的LOD值小于某个设定的值,这个Shader才会被使用,而使用了那些超过设定值的Shader的物体将不会被渲染。我们通常会在SubShader中使用类似下面的语句来指明该shader的LOD值:SubShader{ Tags{"RenderType" = "Opaque"} LOD 200...转载 2022-01-29 15:20:30 · 339 阅读 · 0 评论 -
Unity中的ComputeShader
一、简介 和CPU Random MemoryAccesses(随机内存获取)不同,GPU是用平行架构处理大量的并行数据,例如vertex和fragment就是分开计算的。使用GPU并利用这种特性来进行非图形计算被称为GPGPU编程(General Purpose GPU Programming)。大量并行无序数据的少分支逻辑(少if)适合GPGPU,例如粒子间互不影响的粒子系统。GPGPU平台或接口有DirectCompute,OpenCL,CUDA等。从此图可...转载 2021-12-31 17:05:40 · 1414 阅读 · 0 评论 -
UnityShader——Compute Shader
Compute Shader是基于DX11(SM4.5+)的在GPU上运行的程序,通过Compute Shader我们可以将大量可以并行的计算放到GPU中计算从而节省CPU资源,Unity 5.6版本提供的 Graphics.DrawMeshInstancedIndirect 接口可以非常方便的配合ComputeShader做大规模渲染。先将一些Compute Shader中不同于普通Shader的概念梳理下:numthreads(MSDN)个人理解:numthreads 定义了一个三维的线程结转载 2021-12-31 16:59:20 · 877 阅读 · 0 评论 -
Unity Assetbundle、Shader和Keyword
0x001:问题引出很早以前,我们遇到了这样的问题 : 打包成AssetBundle后,移动端现实的效果异常,具体怎么个异常法,比较随机:于是乎我们开始苦逼排查:1.Shader的平台性问题(此时的shader并没打成ab):经过我们验证,pc端切换到Android平台,加载Android的ab包,显示正常。此时就很纳闷,why?当时我们认为,shader没有带进包体。2.于是乎我们就提出第二个问题:Android上Shader怎么打进包体,并被正常引用的?无论怎么百度,你都会得到下转载 2021-11-30 21:40:27 · 896 阅读 · 0 评论