- 博客(48)
- 收藏
- 关注
原创 C# Stack源码分析
本文介绍了.NET中的Stack<T>类,这是一个基于数组实现的后进先出(LIFO)集合类型。文章详细分析了其内部结构,包括存储元素的数组_array、栈顶指针_size和版本号_version字段。重点讲解了核心操作方法:Push入栈(均摊O(1))、Pop出栈(O(1))和Peek查看栈顶(O(1)),以及安全版本的TryPop和TryPeek。此外还介绍了查询方法Contains(O(n))、清空操作Clear、数据转换方法ToArray和内存优化方法TrimExcess。Stack<
2025-12-08 14:53:40
974
原创 投影矩阵公式推导
本文详细阐述了3D图形学中透视投影和正交投影的数学原理与实现方法。 透视投影部分重点介绍了如何将视锥体映射到齐次裁剪空间(NDC): 通过三角形相似原理推导x/y坐标的投影公式 构建非线性z坐标映射函数以保持深度精度 推导出完整的4×4透视投影矩阵,分析各矩阵项的作用 解释深度值的非线性映射特性及特殊处理 正交投影部分则说明平行投影的线性特性: 直接线性映射x/y坐标到NDC空间 反向线性映射z坐标 构建更简单的正交投影矩阵 两种投影方法都通过4×4变换矩阵实现,但透视投影需要额外的透视除法步骤(除以w分量
2025-11-10 20:10:35
899
原创 透视校正插值原理
本文阐述了3D图形处理中三角形光栅化的插值方法。在投影平面上,三角形面的正确插值需要非线性方法以避免纹理扭曲。深度插值通过线性计算1/z实现(式5.33),而顶点属性(如颜色和纹理坐标)的插值需结合深度信息进行透视校正(式5.37)。具体实现时,图形处理器先线性插值1/z和b/z,再通过计算获得最终属性值。较老硬件对某些属性仍使用线性插值,因为其对视觉效果影响较小。
2025-10-15 15:37:42
847
原创 Unity UI坐标说明
本文通过Unity UI系统的RectTransform组件,详细分析了不同对齐方式下各参数的计算逻辑。在X轴拉伸情况下,分别测试了向上、居中、向下对齐方式,解析了anchoredPosition、offsetMin/Max、sizeDelta等参数的含义和计算方法。在Y轴拉伸情况下,测试了左、中、右对齐方式,同样解释了各参数的计算原理。文章采用图文结合的方式,通过示意图和参数面板截图,直观展示了UI元素在不同对齐方式下的属性变化,帮助开发者深入理解RectTransform的工作原理。
2025-09-15 19:54:12
849
原创 Unity Standard Shader 解析(五)之ShadowCaster
以下是UnityStandardCoreForward.cginc的源码,
2025-09-04 20:52:28
431
1
原创 C# Queue源码分析
Queue<T> 是 .NET 中的泛型队列类,采用循环数组实现先进先出(FIFO)操作。核心字段包括_array(存储元素)、_head(队头)、_tail(队尾)和_size(元素数量)。主要方法包括: Enqueue:入队时自动扩容(默认翻倍); Dequeue/TryDequeue:出队操作; Peek/TryPeek:查看队首; Clear:清空队列时处理引用类型。通过环形数组设计减少数据移动,支持动态扩容,但不保证线程安全。
2025-08-18 20:05:28
995
原创 Unity Standard Shader 解析(四)之ForwardAdd(简化版)
特性/功能输出结构体雾效处理法线和切线空间处理根据_NORMALMAP处理根据处理视线方向处理仅在时计算始终计算并存储光照方向处理直接存储或传递给分别存储在的.w分量中支持视差贴图否是 (通过宏)反射向量计算在时计算不计算。
2025-07-30 20:02:43
666
原创 C# StringBuilder源码分析
`StringBuilder` 是 .NET 中对字符串拼接进行优化的经典案例。它通过巧妙地结合字符数组和链表结构,在保证灵活性的同时,也兼顾了性能。
2025-07-16 20:56:56
1185
原创 C# Dictionary源码分析
功能实现方式插入键值对通过_entries和_buckets组织成哈希表结构处理重复键使用控制行为(抛异常 / 覆盖 / 忽略)值类型优化使用默认比较器并允许 JIT 去虚化和内联优化空间复用使用_freeList和_freeCount重用删除后的槽位扩容机制当空间不足时调用Resize(),自动扩展容量安全防护检测循环引用、哈希碰撞攻击等安全问题特性实现方式高性能使用哈希表 + 值类型优化灵活支持自定义比较器安全检查空键、循环引用、DoS 攻击防护空间管理。
2025-07-07 20:47:32
896
1
原创 C# List源码分析
摘要: 本文分析了C# List<T>类中Add、EnsureCapacity和Insert方法的实现机制。Add方法通过检查内部数组容量,必要时调用EnsureCapacity扩容,再添加元素并更新版本号。EnsureCapacity采用默认容量4或双倍扩容策略,同时处理整数溢出和最大数组长度限制。Insert方法在指定位置插入元素,涉及边界检查、容量管理和数据移动。这些方法共同支持List<T>的动态扩容特性,均摊时间复杂度为O(1)。通过源码解析揭示了底层数组管理、版本控制和安
2025-06-25 20:52:21
851
原创 Unity UI 核心类解析之Graphic
在 Unity 的 UI 系统中,Graphic是一个抽象基类,继承自并实现了接口。它是所有可以被绘制到屏幕上的 UI 元素的基础类。如按钮、文字、图片等,都直接或间接继承自Graphic。
2025-06-19 20:46:12
585
原创 Unity UGUI GraphicRaycaster.Raycast详解
Unity UI射线检测摘要:该方法用于执行Canvas上UI元素的点击/触碰检测,主要处理以下逻辑:(1)获取可交互UI元素;(2)处理多显示器坐标转换;(3)根据Canvas渲染模式计算视口坐标;(4)检测3D/2D阻挡物;(5)执行实际UI射线检测。关键特性包括:支持ScreenSpaceOverlay和Camera渲染模式、多显示器兼容、阻挡物检测(3D/2D对象遮挡UI)、以及编辑器特殊处理。最终将有效命中结果存入返回列表,用于后续UI事件处理。(150字)
2025-06-11 16:55:07
1238
原创 Unity UGUI Button事件流程
本文解析了Unity UI系统中Button点击事件的完整触发流程:从EventSystem每帧调用Update()开始,通过StandaloneInputModule检测鼠标状态,最终调用Button的OnPointerClick()方法。关键点包括:1)EventSystem作为事件调度中心;2)StandaloneInputModule处理输入逻辑;3)Button组件实现IPointerClickHandler接口。当满足点击条件时,系统会通过ExecuteEvents.Execute()调用注册的
2025-06-09 19:55:12
1561
1
原创 Unity UI系统中RectTransform详解
表示Child中心点相对于锚点原点的偏移。: 表示Child与锚点之间的偏移量。sizeDelta: 表示Child相对于Parent的尺寸变化。rect: 表示Child自身的矩形区域。: 定义Child的锚点位置。
2025-05-30 16:22:18
1874
原创 Unity 内置Standard Shader UNITY_BRDF_PBS函数分析 (二)
BRDF1_Unity_PBS 的实现基于 Disney 工作,并以 Torrance-Sparrow 微面模型为基础,使用了多种不同的组件来计算最终的 BRDF(双向反射分布函数)。
2025-04-24 19:33:29
946
1
原创 Unity Standard Shader 解析(三)之ForwardBase(简化版)
通过这些对比,可以看出是一个较为简化版本的顶点着色器,主要用于基本的渲染需求;而则是一个功能更全面的顶点着色器,支持更多的高级特性如视差映射、切线空间转换等。更加复杂,适用于更全面的物理基础渲染(PBR),并且支持更多高级特性如实例ID和立体视觉等。则更加简化,适用于基本的光照和材质计算,性能更高但功能相对较少。这两个函数的选择取决于具体的渲染需求和性能考量。
2025-04-10 20:32:29
883
1
原创 Unity Internal-ScreenSpaceShadows 分析
同HardShadow_FORCE_INV_PROJECTION_IN_PS。同HardShadow。同HardShadow。同HardShadow。同HardShadow。同HardShadow。
2025-04-07 20:13:11
483
原创 Unity Standard Shader 解析(二)之ForwardAdd(标准版)
适用于基本的前向渲染路径,处理所有类型的光源(包括主光源)和全局光照,提供更全面的光照计算。:适用于附加光源的前向渲染路径,主要用于叠加额外的点光源或聚光灯,简化了光照计算,不涉及全局光照和自发光。这两种函数的设计目的是为了优化不同场景下的渲染效率,同时保证渲染质量和效果的一致性。
2025-04-02 20:15:22
1090
原创 Unity Standard Shader 解析(一)之ForwardBase(标准版)
【代码】Unity Standard Shader 解析(一)之ForwardBase(标准版)
2025-03-27 19:57:01
477
原创 Unity 内置Standard Shader UNITY_BRDF_PBS函数分析 (一)
改定义在UnityPBSLighting.cginc文件里。都在UnityStandardBRDF.cginc里。
2025-03-20 15:32:34
555
原创 UnityShader Linear01Depth和LinearEyeDepth函数
UnityShader Linear01Depth和LinearEyeDepth函数
2025-02-26 10:38:28
1284
原创 Unity 中 多种资源加载方式的优缺点
方式用途优点缺点编辑器环境方便调试,路径明确仅限编辑器,性能问题Resources运行时加载简单易用,自动打包性能问题,内存占用高,组织困难高效加载,按需加载高性能,按需加载,动态下载,灵活性复杂性高,学习曲线陡峭自定义打包,按需加载按需加载,动态下载,版本控制复杂性高,维护成本高,性能开销存储数据对象数据驱动,编辑器友好,灵活性性能开销,组织复杂性Prefabs实例化对象预设对象,实例化快,编辑器友好内存占用,版本控制存储原始文件原始文件,只读访问,异步加载只读,限制性。
2024-11-26 21:45:28
1901
原创 Unity 中 Application 四种常用目录总结
这些路径在不同平台上的具体路径可能会有所不同,但它们的用途和行为是相似的。通过正确使用这些路径,可以确保应用程序在不同平台上都能正确地管理和访问文件。
2024-11-25 19:37:51
1725
原创 TMP参数说明
本文介绍了TextMesh Pro(TMP)文本组件的主要设置和额外设置。主要设置包括字体资源选择、材质预设、样式调整、大小控制、自动适应、颜色渐变、间距调整、对齐方式、换行和溢出处理等。额外设置涉及边距、几何排序、静态缩放、富文本、点击事件、遮罩支持、转义字符解析、下降字符处理、表情符号支持、样式表应用、字距调整和额外填充等功能。这些设置共同提供了对TMP文本的全面控制,适用于各种UI场景下的文本显示需求,确保文字在不同条件下都能呈现最佳效果。
2024-10-22 16:22:35
1770
1
原创 解释器模式与栈式机器
解释器模式优雅、简单,特别适用于构建简单的领域特定语言(DSL)或表达式求值系统。然而,在涉及大量计算或需要高性能的场景中,它的内存和性能问题使它不太适用。主流编程语言通常会选择更高效的编译或字节码执行方式来代替解释器模式。栈式机器通过栈来管理表达式的执行,避免了树形结构带来的复杂性和性能开销。它类似于CPU的执行模型,通过指令顺序和栈操作来完成复杂计算和状态管理。然而,它在灵活性上也有一定的限制,需要通过指令的组合才能实现复杂行为。
2024-10-16 20:14:26
783
原创 Rider编辑器:让你的工作效率翻倍的秘密武器
在繁忙的开发工作中,选择一款合适的编程工具可以大幅提高工作效率。JetBrains Rider 作为一款强大、智能的 IDE,为 C# 和 Unity 开发者提供了高效、流畅的开发体验。无论你是初学者还是经验丰富的开发者,Rider 都能通过其全面的功能、强大的性能和灵活的可定制性,助你在工作中事半功倍。如果你还在寻找那个能让你的效率飞升的秘密武器,Rider 绝对值得一试。
2024-09-19 17:06:23
2594
原创 Unity 粒子系统参数说明
这些参数属于 Unity 粒子系统中 “Renderer” 模块的设置,用于控制粒子的外观和渲染方式,包括粒子的对齐、大小、材质、排序等。通过调整这些参数,你可以自定义粒子的渲染方式,实现不同的视觉效果,例如烟雾、火焰、爆炸、闪电等。
2024-09-14 17:45:05
4627
2
原创 Unity Foreach循环GC测试
关于网上讨论Foreach循环会不会产生GC的问题,不如自己实验一番,我用的Unity版本是2021.3.23f1c1版本。
2024-08-29 15:30:18
535
原创 Unity Obfuscator 使用说明
如果例如一个名为“GameAnalytics”的程序集未被找到,并且它的位置是“Assets/GameAnalytics/Plugins/GameAnalytics.dll”,那么你可以将相对目录路径“Assets/GameAnalytics/Plugins”添加到下面的列表中。在此处输入你想要混淆的外部预编译程序集的名称,例如“MvAssembly.dll”,或输入完整路径,例如“C:/[MyGame]/MyAssembly.dll”。使用的技术同样是“子类型随机化”,需要激活命名空间混淆设置。
2024-08-16 14:58:50
3896
3
原创 Unity资源加密方案
AES用于对称加密,适合大数据量加密,速度快。RSA用于非对称加密,适合小数据量加密和密钥交换,安全性高。在实际应用中,常常结合使用两者:通过 RSA 加密对称密钥,再使用 AES 进行数据加密,以兼顾安全性和性能。
2024-06-25 11:30:26
2626
原创 Unity 笔试题
a会产生堆内存分配(创建新字符串)。b不会产生堆内存分配(仅设置属性)。c不会产生堆内存分配(遍历列表和累加操作)。d会产生堆内存分配(值类型int被装箱成object存储)。ADBC对象引用比较:默认情况下,==运算符比较的是引用类型的引用地址,因此为false。值比较:使用Equals方法可以比较装箱对象的实际值,此时为true。
2024-06-10 18:41:56
1470
2
原创 物理渲染(PBR)详解:从理论到实现
PBR(Physically Based Rendering,物理渲染)是一种基于物理原理的渲染技术,旨在模拟真实世界中光照和材质的行为。PBR渲染方程是PBR渲染技术的核心,描述了光线在与物体表面相互作用时的行为。PBR渲染方程通常分为表面反射(Specular)和表面漫反射(Diffuse)两部分。Lopωo∫ΩfrpωiωoLipωiωi⋅ndωiLopωo表示观察点p上沿观察方向ω。
2024-04-13 11:03:45
3157
原创 unity常见面试题
接口是一种完全抽象的类型,它只定义了成员的签名,但没有提供成员的实现。接口定义了对象应该具有的方法、属性和事件。抽象类是一种包含了抽象成员(方法、属性、索引器、事件)的类,它可以包含抽象成员和非抽象成员的实现。抽象类可以包含方法的实现,也可以包含字段和构造函数等。
2024-04-03 23:06:31
13293
1
原创 毛发渲染之fin方法
实现毛发着色器的方法有多种,其中最常用的是shell方法和fin方法。Fin方法通过在多边形表面上添加垂直于表面的许多细长几何体,然后在这些几何体上贴上毛发纹理来表现毛发的外观。这个方法的概念就像在多边形上“种植”许多“鱼鳍”一样。通过将许多细长的几何体放置在多边形表面上,可以模拟出毛发的外观,并使用毛发纹理来增加细节和真实感。这种方法允许毛发与光线进行交互,并在每个几何体上进行光照和阴影计算,从而实现更加逼真的毛发效果。关于Fin方法中毛发表现的光照处理,有许多不同的方法被提出。
2023-07-09 20:07:57
992
Complete Game Template With 1200 levels v1.2.4
2024-04-09
Advanced Survival Kit for Playmaker FPS Game Template 1.2
2024-04-09
Cinema Director - Timeline Cutscene Editor v1.6.2.0
2024-04-09
Cinema Pro Cams - Film Lens 3D Toolkit v1.4.4.0
2024-04-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅