自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 性能优化——粒子优化笔记

合理设置粒子渲染排序,使用TextureSheetAnimation利用图集原理达到特效合批mesh尽量使用面数量少的mesh来达到动态合批的效果。在制作期间可以使用uwa的资源检测来检查纹理、网格、动画、粒子等美术资源,结合GOTOnline的GPU耗时来逐一对特效进行监控。ParticleSystem.Prewarm在激活时候会立即模拟一个生命周期,通常具有一定耗时,建议在不用的时候关闭。ParticleSystem.Draw粒子系统每帧提交DrawDall的平均CPU耗时。.........

2022-07-26 20:57:51 352 1

原创 性能优化——渲染优化笔记

Shader.CreateGPUProgramshader第一次渲染时候产生的消耗,与shader的复杂程度相关对此可以将Shader通过ShaderVariantCollection进行预加载,加载后通过ShaderVariantCollection.WarmUp来触发Shader.CreateGPUProgram,并缓存此csv,避免重复调用。建议降低粒子复杂程度。Render.Mesh对应的是无法合批的渲染耗时,它的调用次数对应相应的Batch数量。面数lod的方式来降低渲染面数。......

2022-07-26 20:53:55 473

原创 性能优化——动画优化笔记

控制Animator.Initialize触发频率会在含有animator组件的GameObject被Acitve或Instantiate时触发,耗时比较高缓存池隐藏角色的时候不直接隐藏GameObject而是DisableAnimator组件,并把GameObject移到屏幕外。造成原因屏幕外的animator是否激活缓存animator处于激活ui上的animator组件过多(ui简单的效果可以使用dotween)ApplyOnAnimatorMove代表激活的animator数量。......

2022-07-26 20:52:31 960

原创 性能优化——资源优化笔记

网格资源优化shader资源优化纹理资源优化动画资源优化

2022-07-26 20:44:11 143

原创 Shader学习之路——凹凸映射

方法一:使用一张高度纹理来模拟表面位移,然后得到一个修改后的法线值,这种方法也叫做高度映射方法二:使用一张法线纹理来直接存储表面法线,这种方法叫做法线映射高度纹理:高度图中存储的是强度值,用于表示模型表面局部的海拔高度,颜色越浅表示越向外凸起,而颜色越深表明该位置越向里凹优点:更加直观的知道一个模型表面的凹凸情况缺点:计算更复杂,不能直接得到表面法线,而是要由像素的灰度值计算而得法线纹理:法线纹理中存储的是法线方向。由于法线方向的分量范围是在[-1,1],而像素的分量为[0,1],因此我们需要做一个映射,通

2022-07-01 18:37:46 269 2

原创 Shader学习之路——sobel算子(边缘检测)

边缘检测:边缘检测算子(卷积核)Sobel:先Gx横向检测再Gy纵向检测 G=|Gx|+|Gy| 梯度值(G值)比较大就是边缘先做灰化处理转换为亮度值获得周围像素列表获取像素亮度值 进行卷积计算

2022-06-02 16:18:06 386

原创 Shader学习之路——开启URP

开启URP安装URP 打开PackageManager搜索下载 UniversalRP下载之后会存在packages文件夹里可以剪切到Assets同级目录Packages里生成本地插件,方便调试右键Create->Rendering->第一个启用URPEdit->ProjectSettings->Graphics->Scriptable Render Pipeline Settings里边有设置,根据项目需要是否开启..

2022-05-20 15:26:47 398

原创 shader学习之路——百叶窗效果

public class BaiYeChuang : MonoBehaviour { // Use this for initialization public Material mat; public RenderTexture tex; public Shader BY; void OnEnable() { if (mat == null) ..

2022-03-30 10:32:32 213 1

原创 shader学习之路——后处理

using System;using System.Collections.Generic;using System.Linq;using System.Text;using UnityEngine;namespace rkt.Assets.TestFob.Scripts{ [ExecuteInEditMode] [RequireComponent(typeof(Camera))] class PostEffectBase:MonoBehaviour { .

2022-02-24 17:57:35 169

原创 影响性能的因素

优化初解

2022-02-21 10:43:31 3635

原创 shader学习之路—GPUInstance

使用限制:1.不支持SkinnedMeshRenderer。2.编写着色器脚本时候,请务必使用UnityObjectToClipPos(v.vertex)而非mul(UNITY_MATRIX_MAX,v.vertex)。多个pass着色器有两个以上的pass,则只有第一个pass可以实例化。GPU实例化可以在一下平台和AIP上使用Windows:DX11和DX12Windows、macOS、Linux、IOS、Android、上的OpenGL Core4.1+/ES3.0+macOS和i

2022-02-19 17:07:11 4034

原创 Unity优化-脚本策略学习笔记

测试使用最快的方法获取组件GetComponent()方法有一些变体,他们的性能消耗不同,因此要谨慎的调用最高效的版本。最高效的方法取决于unity的版本以2017.4.35为例:测试代码DateTime beforDT = System.DateTime.Now; for (int i = 0; i < num; i++) { t = (TestScript)this.GetComponent("TestScript");..

2022-01-20 16:05:06 2250

原创 shader学习之路——Shadow Mapping

基本原理:要渲染的物体从灯光方向看过去,被别的物体遮挡了光线首先,从灯光方向拍一次场景,形成场景的深度图(开启深度写入和深度测试,否则无法形成有效深度信息)深度图:从0-1的单通道的图像,0表示贴在我的灯光位置,1表示这个点是距离摄像机最远点进行拍摄的然后,在渲染每个物体的片元时,判定该片元的深度值是否比上一步从灯光方向拍摄的相同屏幕位置的深度图的深度值更大,更大则说明片元被挡再物体背后,也就是处于阴影中,对于这样的片元,unity会自动为其渲染阴影...

2021-07-25 22:07:16 216 2

原创 shader学习之路——玻璃效果

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Unlit/Grass"{ Properties { _MainTex("Base(RGB) Trans(A)",2D) = "white"{} _Color("Color",Color) = (1,1,1,1) _BumpMap("Noise text",2D) = "Bump"{} _Magni.

2021-06-21 21:02:26 335

原创 shader学习之路——基础语法

属性输入语义:POSITION,SV_POSITIONNORMALCOLOR,COLOR0,DI输出语义:

2021-05-31 21:24:19 171

原创 性能优化——合批原理

合批类型:StaticBatch 静态合批 DynamicBatch 动态合批 InstancingBatch SRP BatchDrawCall就是对完整描画的上下文的state的设置及其对Draw指令的调用Unity渲染管线分为两个大的阶段:ShadowMapJob渲染阴影 RenderLoopJob正常描画静态合批工作流:1.勾选static选项,在BuildTarget时预先对Mesh进行Combine 对网格进行合并,合并成一个大的网格 M...

2021-05-18 21:11:29 614

原创 性能优化之——音频优化

勾选OverrideforiOS和OverrideforAndroid,并分别进行设置 ForceToMono UI音效:勾选 Normalize:勾选(默认值) 背景音乐、技能特效:不勾选 LoadInBackground:勾选 LoadType 背景音乐等播放时间较长的音效:选择Steaming 技能、受击、按钮点击等播放时间短、播放频繁的音效:选择DecompressOnLoad PreloadAudi...

2021-04-26 19:49:18 294

原创 shader学习之路——积雪效果

原理:1.检测模型的哪些三角形会覆盖积雪 三角形的方向(normal)向量和雪的方向向量的夹角小于90度以内,有积雪效果2.绘制积雪的效果 2.1顶点部分,要让会覆盖积雪的三角形的顶点向外挤出 可以利用cosθ的值来判断 2.2 着色器:要让会覆盖积雪的三角形的着色为白色...

2021-04-21 00:03:48 590

原创 性能优化——FBX设置优化Model面板部分

FBX文件配置a) Model面板Scale Factor : 1 (默认值)Use File Factor : 勾选 (默认值)Mesh Compression : 选用可以接受的最高压缩模式,如果效果不行,再逐渐调低,直到效果满意为止 设置压缩比级别以减小网格的文件大小。提高压缩比会降低网格的精度,方法是在每个组件中使用网格边界和更低的位深来压缩网格数据。Read/Write Enabled :当启用此选项时,Unity 会将网格数据上传到 GPU 可寻址内存,但也会...

2021-04-19 19:45:35 1537

原创 shader学习之路——平面阴影

模型变换流程:模型->世界->摄像机空间(xyz 1,1,1的立方体)->投影空间 ->屏幕空间1.压扁 把模型变换到世界空间,使Y轴为0 再把顶点变换到投影空间为什么不在角色的模型空间进行压扁操作,而是变换到世界空间里,因为角色可能因为各种原因发生旋转(动作等),角色旋转后,压扁的阴影也会跟着转小提示:如果影子抖动,可能是因为较低位置和地面高度相同所以看起来抖 留一点点距离2.投影偏移,灯光从侧面照入偏移方法:在x-z方向上对顶点偏移3....

2021-04-14 21:40:24 225

原创 shader学习之路——前向渲染

目的:为了处理多个光源渲染,效能与场景里灯光的数量有关系,比较适合手机平台。延迟渲染比较适合主机平台,与渲染的分辨率有关前向渲染(ForwardBase):把每一个物体用每盏灯渲染一遍,再将渲染的结果混合起来开销:灯光数量*场景中要被灯光渲染的物体数量 平行光<点光源<聚光灯Unity光照模式:1.逐像素 2.逐顶点 3.球谐函数角色和光源可能是动态的,如何保持平衡帧率unity在底层有优化,Pixel Light Count是最大逐像素灯光的数量,...

2021-04-06 21:14:52 176

原创 性能优化——骨骼动画原理

蒙皮:把模型顶点和骨骼做一个对应关系,这就是蒙皮权重。蒙皮要做的事情,是指定某个顶点受到了多少根骨骼的影响,在运动的时候,顶点根据权重的百分比来跟随骨骼运动。举个栗子:比如一个顶点收到两个跟骨骼的影响,第一根骨骼的权重是30%,第二根骨骼的权重是70%。在想跟骨骼同时移动的时候,第一根骨骼想左移动10米,第二根骨骼向右移动10米,假若右使是正方向,那么这个顶点实际移动的位置应该是-10*0.3+10*0.7=4,也就是最终向右移动了4米,实际计算中不会简单乘百分比,而是会用矩阵来计算骨骼的父子关系:

2021-04-06 19:26:55 459

原创 shader学习之路——场景烘焙

1.所有需要烘焙的静态物体需要勾选static(如果不勾选则不能烘焙)2.关闭lightsetting设置里的环境光采样 Realtime lighting3.把实时全局光照关掉(只烘焙,不叠加实时光照)4.如果美术制作的模型没有预留lightingmap uv通道则需要勾选fbx上的设置 Generate Lightmap uvs,如果美工留了则不需要勾选(否则不能为每个对象单独生成光照贴图的坐标信息)5.刚好两个灯光交界处有接缝的话,可以勾选模型的MeshRenderer里的lightm

2021-04-05 17:31:34 239

原创 shader学习之路——菲涅尔反射

Shader "Unity/FresneShader" { Properties { _Color ("Color Tint", Color) = (1,1,1,1) _FresnelScale ("Fresnel Scale",Range(0,1)) = 0.5 _Cubemap("Refraction Cubemap",Cube) = "_Skybox"{} } SubShader { ...

2021-03-12 09:52:36 351

原创 shader学习之路——折射

斯涅尔定律来计算反射角 介质1*sinA1 = 介质2*sinA2Shader "Custom/RefractionShader" { Properties { _Color ("Color", Color) = (1,1,1,1) _RefractColor("Refract Color",Color) = (1,1,1,1) _RefractAmount("Refract Amount",Range(0.1,1)) = 0.5 _RefractRatio("Refracti.

2021-03-11 17:51:01 328

原创 shader学习之路——反射

Shader "Custom/ReflectionShader" { Properties { _Cubemap("Cubemap", Cube) = "" {} _ReflectionAmount("Reflection Amount", Range(0, 1)) = 0.5 _ReflectColor("Reflection Color",Color) = (1,1,1,1) //控制反射颜色 } SubShader { .

2021-03-11 16:57:51 187

原创 shader学习之路——更复杂的光照之Base Pass 和 Additional Pass和光照的衰减

Shader "Custom/ForwardRenderingShader" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Gloss ("Gloss", Range(8,255)) = 20 _Diffuse("Diffuse Color",Color) = (1,1,1,1) _SpecularColor("Specular Color..

2021-03-10 21:16:18 882

原创 shader学习之路——untiy渲染路径之延迟渲染路径

延迟渲染原理:主要包含了两个pass。在第一个pass中,我们不进行任何光照计算,而是仅仅计算哪些片元是可见的,这主要是通过深度缓冲技术来实现,当发现一个片元是可见的,我们就把它的相关信息存储到G缓冲区中。然后再第二个pass中,我们利用G缓冲区的各个片元信息,例如表面法线、视角方向、漫反射系数等,进行真正的光照计算。欢聚话说,延迟渲染的效率不依赖于场景的复杂度,而是和我们使用的屏幕空间的大小有关。这是因为,我们需要的信息都储存再缓冲区中,而这些缓冲区可以理解成是一张张2D图像,我们的计算实际就是在这些图像

2021-03-10 14:32:17 127

原创 shader学习之路——Unity渲染路径之前向渲染路径

渲染路径(Rendering Path)决定了光照如何应用到Unity Shader中在Unity的Edit->Project Settings->Player -> Other Setting ->Rendering Path中选择项目渲染路径 但有时我们希望可以使用多个渲染路径 例如A相机前向渲染 B相机延迟渲染 可以修改设置摄像机渲染路径LightMode标签支持的渲染路径设置选项 标签名 描述 Always 不管使用哪中渲染路径,...

2021-03-10 10:02:12 188

原创 shader学习之路——开启深度写入半透明效果

步骤一:第一个pass开启深度写入,但不输出颜色,它的目的仅仅是为了把该模型的深度值写入深度缓冲中;步骤二:第二个pass进行正常的透明度融合,由于上一个pass已经得到了逐像素的正确的深度信息,该pass就可以按照像素界别的深度排序结果进行透明渲染; Shader "Custom/AlphaBJendZWriteShader" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D

2021-03-09 21:01:28 326

原创 shader学习之路——透明度混合

注意:透明度混合需要关闭深度写入ShaderLab的Blend命令 语义 描述 Blend Off 关闭混合 Blend SrcFactor DstFactor 开启混合,并设置混合因子。源颜色(该片元产生的颜色)会乘以SrcFactor,而目标颜色(已经存于颜色缓存的颜色)会乘以DstFactor,然后把两者相加后再存入颜色缓冲中 Blend SrcFactor DstFactor SrcFactorA DstFactorA 和上面几乎一样,只是使用不同的因子来混

2021-03-09 20:34:27 116

原创 shader学习之路——透明度测试

透明度测试:它采用一种“霸道极端”的机制,只要一个片元的透明度不满足条件(通常是小于某个阈值),那么它对应的片元就会被舍弃。被舍弃的片元将不会再进行任何处理,也不会对颜色缓冲产生任何影响;否则,就会按照普通的不透明物体的处理方式来处理它,即进行深度测试、深度写入等。也就是说,透明度测试是不需要关闭深度写入的,他和其他不透明物体最大的不同就是他会根据透明度来舍弃一些片元。虽然建安,但是它产生的效果也很极端,要么完全透明,即看不到,要么完全不透明,就像不透明物体那样。通常,我们会在片元着色器中使用cli.

2021-03-09 09:54:28 300

原创 shader学习之路——ShaderLab的混合命令

ShaderLab中设置混合因子的命令 命令 描述 Blend SrcFactor DstFactor 开启混合,并设置混合因子。源颜色(该片元产生的颜色)会乘以SrcFactor,而目标颜色(已经存在于颜色缓存的颜色)会乘以DstFactor,然后把两者相加入后再存入颜色缓冲中 Blend SrcFactor DstFactor SrcFactorA DstFactorA 和上面几乎一样,只是使用不同的因子来混合透明通道 混合公式: Orgb = SrcFa...

2021-03-08 22:00:33 333

原创 shader学习之路——UnityShader渲染顺序

Unity为了解决渲染顺序的问题提供了渲染队列(Render Queue)这一解决方案。.我们可以使用Queue标签来解决我们模型归于哪个渲染队列名称 队列索引号 描述 Background 1000 这个渲染队列会再任何其他队列之前被渲染,我们通常使用该队列来渲染那些需要绘制在背景上的物体 Geometry 2000 默认的渲染队列,大多数物体都使用这个队列。不透明物体使用这个队列 AlphaTest 2450 需要透明度测试的物体使用这

2021-03-05 17:14:26 280

原创 shader学习之路——透明效果简述

两种方法实现透明效果:1.透明度测试(Alpha test)2.透明度混合(Alpha Blending)透明度测试:它采用一种“霸道极端”的机制,只要一个片元的透明度不满足条件(通常是小于某个阈值),那么它对应的片元就会被舍弃。被舍弃的片元将不会再进行任何处理,也不会对颜色缓冲产生任何影响;否则,就会按照普通的不透明物体的处理方式来处理它,即进行深度测试、深度写入等。也就是说,透明度测试是不需要关闭深度写入的,他和其他不透明物体最大的不同就是他会根据透明度来舍弃一些片元。虽然建安,但是它产生的效果也

2021-03-05 16:48:41 233

原创 shader学习之路——纹理遮罩

遮罩可以保护某些区域,使他们免于某些修改。例如:模型表面某些区域反光强烈一些,而某些区域弱一些,或者用于混合多张纹理流程:通过采样得到这招纹理的纹理素值,然后使用其中某个(或某几个)通道的值来与某种表面属性进行相乘,这样,当该通道的值为0时,可以保护表面不受该属性的影响。总而言之,使用遮罩纹理可以让美术人员更加精准的控制模型表面的各种性质;Shader "Custom/MaskTextureShader" { Properties { _Color ("Color", Color) =.

2021-03-05 15:21:10 247 1

原创 shader学习之路——渐变纹理

渐变纹理新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入可以使用渐变纹理来控制漫反射光照的结果新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新

2021-03-05 10:02:47 121 1

原创 shader学习之路——纹理属性

UIV坐标:OpenGL纹理空间原点在左下角,DirectX纹理空间原点在左上角

2021-02-26 11:32:48 120

原创 FBXSDK踩坑之——搭建环境

1.创建一个C++控制台影用程序2.C++常规设置里设置附加包含目录3.设置连接器常规设置的附加库目录:4.连接器的输入设置里设置附加依赖项和忽略特定默认库5.根据前面选择的附加依赖项来选择运行库选择参考 注意:如果使用动态链接要设置预处理宏定义FBXSDK_SHARED...

2021-02-23 14:55:32 395

原创 shader学习之路——照模型计算公式

漫反射计算公式: 基本光照模型漫反射部分计算公式: (入射光线的颜色和强度 * 材质的漫反射系数)*[(表面法线 * 光源方向)最小值取0] saturate(x)函数:x:为用于操作的标量或矢量,可以是float、float2、float3等类型。把X截取在[0,1]范围之内,如果x是一个矢量,那么会对他每一个分量进行这样的操作。 半兰伯特模型:(此公式没有任何物理依据,仅是一个视觉加强技术) 入射光线的颜色和强度 * 材质的漫反射系数)*[(表面法线 * 光源方向)* 缩放倍...

2021-02-19 18:33:59 150

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除