- 博客(90)
- 资源 (1)
- 收藏
- 关注
原创 ILRuntime 热更新
ILRuntime是什么经验汇总主工程的代码,如果只是在ILRuntime热更工程中使用的话,在IL2CPP时,会被优化掉(认为没有被调用过),可以在相关代码上加上[Preverse]修饰来解决打正式包时,在工程的宏定义里加入ILRUNTIME_DEBUG_DISABLE,禁止ILRuntime收集调试信息,会提升运行效率调试时,提示“Cannot connect to ILRuntim...
2019-12-14 15:38:03
732
原创 Unity Entity Component System 翻译文档目录
Core ECS 核心概念Entities 实体Components 组件System 系统Accessing entity dataUsing IJobForEachUsing IJobChunkUsing ComponentSystem and ForEachManual iterationEntiy QueryComponent WriteGroupsVersi...
2019-12-14 10:57:47
558
原创 Custom SRP - 14 Multiple Cameras
多摄像机混合与渲染层级用不同的 post FX settings 渲染多个摄像机。
2025-11-12 22:50:33
797
原创 Unity 高效 ListView GridView
在以 List / Grid 显示UI元素时,如果有上百,甚至上千个元素,如果全部创建出来,对内存和渲染还是有一定的压力的,因此我们希望仅创建那些在 view content 中可见的元素。对于 GridView 基本思想与 ListView 是一样的,只不过将一个元素,换成一行/列元素。
2025-11-02 18:15:03
298
原创 Custom SRP 13 Color Grading
本篇教程将覆盖实现 color grading 流程实现 URP/HDRP 中的几个 color grading 工具使用 LUT 优化 color grading 和 tone mapping。
2025-10-17 22:43:11
675
原创 Custom SRP 12 - HDR
tone mapping 的目标是降低图像的亮度,使全白区域能够显示不同的颜色,显示那些丢失的细节.就像人的眼睛,突然从暗处进入一个很亮的环境,从“晃眼”状态重新看清楚.但是我们不能整体上让图像变暗,因为这会让暗的颜色失去区分度.因此我们需要一种非线性的转换,对与暗的像素颜色值降低的少,而对于亮的像素颜色值降低的多.极端情况下,0依然是0,而极大值趋向于1.最简单的方式是让颜色等于。实际上我们希望对亮的地方调整的幅度大一些,暗的地方调整幅度要小,因此我们需要一个不均匀的颜色调整。
2025-10-12 08:20:26
922
原创 Unity excel 表格文件导入
游戏项目中大量用到 excel 文件,作为游戏配置数据,在代码中引用,查找配置的数据,驱动游戏的运行。这就需要定义一个数据导入和使用的工作流一个最简单有效的工作流如下:策划跟程序讨论确定表格的结构策划配表,转换成 csv 格式程序根据表格结构书定义数据表,加载,查找相关逻辑定义数据结构实现加载 csv 的逻辑根据需要构建索引表程序在需要时引用,查找数据表这个过程有些繁琐,同时 csv 是文本格式,文件体积大,解析效率低。
2025-10-03 12:38:02
2125
原创 设计模式-3D引擎中的设计模式
提供一组接口,让这些接口创建一系列相关,或者相互依赖的对象,即按照产品族生产产品。引擎当中,对平台差异的封装,通常采用这种模式。比如文件系统,渲染设备,抽象一组逻辑相关的接口类,同一个抽象工厂创建的这些接口类的实现,可以协同工作,实现复杂的功能。
2025-09-25 23:06:35
715
原创 Custom SRP 11 - Post Processing
因为将 _BloomPyramid0 的 ID 记录下来后,后续其它 ID 都是顺序的,并且ID 的分配是递增的,且不会被再次分配,在第一个ID的基础上加上偏移,就可以获得其它的 ID。t 是配置的阈值,当 t 是 0 时,w 的结果是 1 ,使待叠加的颜色不变,导致叠加后产生 bloom,随着 t 的增加,w 值会逐步趋向0,当b <=t 时等于0,使待叠加颜色变成0,得到一个无叠加的效果,没有 bloom。这些贴图(RT)需要被跟踪,具体有多少,取决于金字塔中有多少级,也即原始图的尺寸。
2025-09-25 22:25:52
861
原创 Custom SRP 10 - Point And Spot Shadows
可以通过扩大 fov 来降低这种影响。所以可能有的光源参与光照,开启阴影,但是最终没有阴影,这依赖于光源在 visibleLights 列表中的顺序,因为我们只是简单的遍历这个列表来收集需要绘制阴影的光源,并在超出最大数量(16)时终止.但是这不影响烘焙阴影.因此需要重构 ReserveOtherShadows 函数。我们需要用渲染实时阴影的方向光的数量,同时需要阴影的淡出参数.这些参数之前是在渲染方向光阴影时提交到GPU的,这里需要提出来.因为即使不渲染方向光阴影,渲染其它光源阴影时也是需要的。
2025-09-18 22:39:45
828
原创 Custom SRP 9 - Point and Spot Lights
现在,场景中的所有光源,每帧都会被渲染.对于方向光来说没问题.但是对于点光和聚光灯来说,那些距离很远,对当前画面没有贡献的光,也被收集,参与计算,但是没有效果,完全是浪费算力.为了支持更多的光源,并保证性能,需要降低每帧处理的光源的数量.有多种方法可以实现,这里使用 unity 的 per-object indices (逐对象索引).然后,我们需要将光源的 shadow mask 参数: 阴影强度, 所在通道 上传到 GPU.在 shader 侧,获取参数,并计算衰减.
2025-09-13 23:51:00
1036
原创 Custom SRP 8 - Complex Maps
切线方向处处不同,因此需要定义成顶点数据的一部分,存储为 xyzw .其中 w 是 1 或 -1,定义了副法线的方向,用来反转法线.通常动物都是对称的,可以通过反转法线,使对称的两侧使用相同的法线贴图(这种情况需要处理接缝处法线的连续性,所以很多时候为了避免该问题,会使用完整的法线图).光照是基于法线计算的.现在我们的法线是基于顶点法线插值的,因此显得比较平.通过加入法线贴图,为表面提供更多的法线细节和变化,让表面更具立体感.下面是我们的电路板的法线贴图。
2025-09-06 23:11:08
1075
原创 Custom SRP 7 - LOD and Reflections
场景中对象越多,场景就越丰富,但是过多的对象,也会增加 CPU 和 GPU 的负担.同时如果对象最终渲染在屏幕上后覆盖的像素太少,就会产生模糊不清的像素点/噪点.如果能够不渲染这些过小的对象,就能解决噪点问题,同时释放 CPU GPU,去处理更重要的对象.裁剪掉这些对象,可能会导致对象突然消失/出现的问题,因此,可以基于对象在屏幕上的大小,定义一系列子对象,根据对象到摄像机的距离,选择一个子对象进行渲染这些逻辑,都可以有 LOD Group 组件来实现.
2025-08-29 22:42:55
860
原创 Custom SRP 5 - Baked Light
本篇教程介绍将静态光照烘焙到 light map 和 light prob 中.首先贴上我遇到的问题,希望遇到的同学帮忙解答:实践本教程过程中,定义的 MetaPass 没有效果, Unity 始终在使用默认的 meta pass,我使用的是 unity2022.3.14。
2025-08-16 11:08:56
1004
原创 Custom SRP 4 - Directional Shadows
渲染阴影常用 ShadowMap 技术,即阴影贴图,该图中存储了光在照射到一个表面前经过的距离。在该方向上超过该距离的,都不会被该光源照亮。
2025-08-08 21:43:35
873
原创 Custom SRP 3 - Directional Lights
这是一篇学习笔记,原文地址:https://catlikecoding.com/unity/tutorials/custom-srp/directional-lights/本节开始书写支持光照的 shader。利用法线计算光照支持最多4个方向光源应用BRDF支持半透明材质定制shader GUI。
2025-07-27 06:57:18
705
原创 引擎动画系统设计
SkeletonJoint 用来定义骨架中的一块骨骼Skeleton 由若干 SkeletonJoint 定义的骨架PoseJoint 定义“姿态”的骨骼AnimPose 由多个 PoseJoint 定义骨骼姿态AnimKeyFrame 动画片段中的一个关键帧,也是一个“姿态”,只是增加了关键帧时间AnimClip 动画片段,由若干动画关键帧组成。
2025-07-22 23:30:45
838
原创 Custom SRP 2 - Draw Calls
Batching 是用来合并 draw call(按照这里的上下文,draw call 不是指 api 级别的 draw call,而是指的 unity 定义的 draw call:准备 material/object constant buffer,提交到GPU,绑定,draw),降低CPU/GPU同步的时间消耗的。每次绘制,都需要 CPU 和 GPU 之间的异步操作。上面代码块都是空的,Unity 会给一个默认实现,将其渲染成实心白色,并且默认渲染队列为 2000,是默认不透明集合体的渲染队列。
2025-07-22 23:25:40
1293
原创 Custom SRP 1 - Custom Render Pipeline
用这种方法,如果未来希望每个摄像机用不同的方式渲染,扩展起来会很方便,例如一个摄像机是 first-person 视口,而另一个用来渲染3D地图,或者使用 forward / deferred 渲染。每个 Camera 都需要独立渲染,我们可以直接在 CustomRenderPipeline.Render 中实现渲染逻辑,但是渲染逻辑代码量会很大,为了代码结构更易维护,更清晰,我们专门建立一个类,来渲染每个摄像机。灯光,阴影,透明,图像效果,体积效果等,必须以特定的顺序渲染到最终的图像。
2025-07-19 17:51:53
1239
原创 Unity 图形 - 摄像机
文章目录1. Camera1.1 透视和正交1.2 视口区域形状1.3 背景2. 使用多个摄像机2.1 多个摄像机切换2.2 全屏渲染+部分屏幕区域渲染3. 使用物理摄像机 Using Physical cameraLens ShiftsGate FitGate Fit ModesVerticalHorizontalNoneFill and Overscan4. 使用技巧 Camera Trick...
2020-02-12 22:10:00
2656
1
原创 Unity 可编程渲染管线
文章目录可编程渲染管线 Scriptable Render Pipeline什么是可编程渲染管线SRP什么是SRP CoreSRP入门 Getting Started概述SRP AssetSRP InstanceSRP要解决的问题问题解决方案SRP AssetSRP Asset 例子SRP Instance基础管线 A basic pipelineSRP Context用SRP渲染 Renderi...
2020-02-12 10:18:51
840
原创 Unity 渲染管线
文章目录1. 渲染管线1.1 选择一种渲染管线2. 默认管线 Built-in Render Pipeline2.1 渲染通路 Rendering paths2.1.0.1 前向渲染 Forward Rendering2.1.0.2 延迟着色 Deferred Shading2.1.0.3 老版本的延迟着色 Legacy Deferred2.1.0.4 老版本的顶点着色 Legacy Vertex...
2020-02-12 10:17:43
5057
原创 Unity中的物理系统
文章目录1.概述 Rigidbody 和 Collider1.1刚体 Rigidbody1.2碰撞体 Colliders1.2.1Collider1.2.2碰撞体分类1.2.3碰撞体与触发器1.3关节 Joints1.4 角色控制器 CharacterController2. 刚体2.1 组件属性2.2 父子关系2.3 脚本2.4 动画2.5 刚体和碰撞体2.6 连续碰撞见2.7 比例和单位2.8...
2020-02-04 22:35:54
11006
6
原创 Unity 中操作数据文件
文章目录路径路径定义ResourceApplication.dataPathApplication.streamingAssetPathApplication.persistentDataPath(推荐使用)Application.temporaryCatchPath/sdcard/../storage/emulated/0/..路径访问路径目录Android平台IOS平台实践应用Streamin...
2020-01-27 20:02:06
1566
1
转载 Markdown数学公式语法
行内与独行行内公式:将公式插入到本行内,符号:$公式内容$,如:$xyz$ 独行公式:将公式插入到新的一行内,并且居中,符号:$$公式内容$$,如:$$xyz$$上标、下标与组合上标符号,符号:^,如:$x^4$ 下标符号,符号:_,如:$x_1$ 组合符号,符号:{},如:${16}_{8}O{2+}_{2}$汉字、字体与格式汉字形式,符号:\mbox{},如:$V_{\m...
2020-01-26 22:20:21
284
原创 Unity 中的旋转和朝向
文章目录Rotation and Orientation in Unity欧拉角和四元数欧拉角四元数编程中直接创建和操作四元数创建操作欧拉角使用注意动画中Unity 的 Animation Window导入的动画数据Rotation and Orientation in Unity官方文档地址:Rotation and Orientation in UnityUnity中的旋转,通常用四元数...
2020-01-26 22:15:56
3487
原创 Unity Math Quaternion
文章目录简介Quaternion类属性静态属性属性构造函数方法静态方法运算符欧拉角简介Quaternion又称四元数,由x,y,z和w这四个分量组成,是由爱尔兰数学家威廉·卢云·哈密顿在1843年发现的数学概念。四元数的乘法不符合交换律。从明确地角度而言,四元数是复数的不可交换延伸。如把四元数的集合考虑成多维实数空间的话,四元数就代表着一个四维空间,相对于复数为二维空间。四元数不存在欧拉角的...
2020-01-26 18:50:41
659
原创 Unity Math Matrix
文章目录简介静态属性属性方法静态方法简介Matrix4x4是标准变换矩阵,可以执行线性变换,平移,旋转,缩放,切边等,以及使用齐次坐标进行透视变换。U3D编程中,一般很少直接使用矩阵,因为多数变换都被封装到了Vector3和Quaternion中了。静态属性identity 标准矩阵00,11,22,33的值为1,其它为0zero 0矩阵,所有元素都是0属性FrustumPl...
2020-01-26 18:50:20
747
原创 Unity Math Vector3
表示3D向量和点,3个分量分别为 x,y,z定义了常用的向量:静态常量值back0,0,-1forward0,0,1left-1,0,0right1,0,0up0,1,0down0,-1,0one1,1,1zero0,0,0negativeInfinityfloat.NegativeInfinity,floa...
2020-01-24 17:11:01
463
原创 Unity 视频播放 VideoPlayer Component
文章目录文档经验:在视频上显示UI控制视频进度文档使用 video player component 可以播放视频文件。比如过场动画,或者在3D对象上播放视频,比如场景中的电视机模型上。支持的格式:MP4,mov,webm,wmv例如下面的截图,在一个球形3D对象的材质贴图上播放视频的效果:Material Property的值自动设置成了GameObject的Renderer的材质的...
2020-01-22 18:19:45
1422
原创 Unity LOD Group
文章目录概述LOD Group 选择条预览 LOD 切换Renderers for LOD MeshesLOD切换Fade Transition WidthWorking with Speed Tree modeAPI概述当绘制对象时,单位像素绘制的三角形数量越多,效率就越低。因此我们希望在保证精度的前提下渲染尽量少的三角形数量,LOD可以解决这个问题。LOD(Level of Detail...
2020-01-22 18:18:23
5896
原创 Culling 渲染剔除
文章目录剔除视锥体frustum裁剪遮挡剔除摄像机距离剔除遮挡剔除 Occlusion Culling建立遮挡剔除遮挡剔除窗口遮挡剔除烘焙 - bakeOcclusion Area 裁剪区域测试效果剔除提升代码效率的最佳办法,就是不执行它。提升渲染效率最佳的办法,就是不渲染它。所以Unity提供了多种将对象从渲染列表中剔除的方法。视锥体frustum裁剪利用场景管理算法(2D用4叉树,3...
2020-01-22 18:17:39
1017
原创 Unity Transform
文章目录Transform属性接口TranslateInverseTransformDirection / [TransformDirection](https://docs.unity3d.com/ScriptReference/Transform.TransformDirection.html)InverseTransformPoint / [TransformPoint](https://d...
2020-01-22 18:15:25
615
原创 动画状态机 Blend Trees
文章目录Blend Tree1D BlendingParameter RangeThreshold 阈值Automate Thresholds 自动分配阈值Compute Thresholds 计算阈值(根据Root Motion数据)2D Blending2D 混合图PositionsDirect BendingBlend Tree游戏中,可能需要混合多个动画来实现一些效果。比如,通过角色的...
2020-01-19 20:57:10
1375
原创 动画状态机AnimatorController
文章目录Animator Controller状态系统状态状态切换程序参数切换属性[Transition Interruption](https://blog.youkuaiyun.com/lrh3025/article/details/104012508)Interruption Source 属性Ordered Interruption 属性Transition graphAnimator Contro...
2020-01-16 23:43:31
3115
翻译 Animator 状态机切换打断机制
State Machine Transition interruptions查看原文状态机切换打断机制在默认的动画系统中,切换不能被打断:一旦开始从一个状态切换到另一个状态,就不能中途退出。就像飞越大西洋的航班,一旦开始,只能到目的地,中途不能改变。大多数情况下,动画状态机的这个机制能工作的很好。但是如果想要更进一步地控制切换,Mecanim 可以通过多种配置方式来达到需求。这可以更加灵活...
2020-01-16 23:20:55
5253
1
原创 UGUI Canvas
文章目录Canvas参数3种绘制方式Canvas Scalar 屏幕自适应UI Scale ModeConstant Pixel SizeScale With Screen Size优化CanvasCanvas 是 UGUI 的画布,UI元素都要放在它下面参数Render Mode: 渲染模式,有三种:Screen Space - Overlay,Screen Space - Camer...
2020-01-12 20:53:20
292
原创 脚本 4 脚本编译及日志
文章目录脚本编译编辑器编译死锁自定义程序集日志脚本编译脚本修改完后,Unity会自动进行编译,生成DLL,并存储在 Library/ScriptAssemblies/ 目录下,最终会生成4个DLL:Assembly-CSharp-firstpass.dll Assets/Plugins/ 目录下的非 Editor 子目录的代码,将编译在该 DLL 中Assembly-CSharp-Edit...
2020-01-05 11:32:31
446
原创 脚本 3 序列化
今天我们聊聊序列化。文章目录可序列化对象MonoBehaviourScriptableObject文件存储方式序列化属性定义SerializedObject 以及 SerializedProperty监听数据更新监听序列化事件编辑属性序列化声明,及Inspector自定义例子序列化事件监听例子ScriptableObject 例子可序列化对象序列化对象包括2种:MonoBehaviour...
2020-01-04 20:07:25
735
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅