avatar
Articles
22
Tags
5
Categories
2
Home
Tag
Link
Ayy3の博客
Home
Tag
Link

Ayy3の博客

CSAPP笔记-虚拟内存
Created2026-05-13|CSAPP
引言 虚拟内存(VM)是现代操作系统提供的一种对主存的抽象概念,它为每个进程提供了一个大的、一致的和私有的地址空间,旨在更加有效地管理内存并减少出错。 虚拟内存提供了三个重要的能力: - 它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存。(细细品味,可以说是面试必问八股) - 它为每个进程提供了一致的地址空间,从而简化内存管理。 - 它保护了每个进程的地址空间不被其它进程破坏。 本章将从两个角度来看待虚拟内存。前一部分来描述虚拟内存如何工作,后一部分描述应用程序如何使用和管理虚拟内存。 物理和虚拟寻址 计算机系统的主存被组织成一个由M个连续字节大小的单元组成的数组,因此每个字节都有一个唯一的物理地址(Physical Address)。CPU访问内存最自然的方式就是直接使用这个物理地址,下图展示一条加载指令直接读取地址4开始的4字节字: 然而现代处理器则使用一种虚拟寻址(virtual addressing)的方式: 其实就是多了一个MMU地址翻译的中转步骤。...
Games104笔记-5-渲染系统(二):渲染中光和材质的数学魔法
Created2026-05-12|Games104
本文为课程Games104第五节课:Lighting, Materials and Shaders的个人笔记。 该节课正式进入游戏引擎渲染中绘制的研究。主要包括以下三个关键要素: - 光照:光的本质是光子,它从光源发出,经过一系列反射、吸收、折射后进入我们的眼睛。这是场景可见的根本原因。 - 材质:描述了物体表面如何与光发生作用。是吸收、反射还是透射?是光滑如镜还是粗糙如石?材质决定了物体的外观。 - 着色器:实现上述光照与材质交互的具体计算程序。它是连接理论与最终像素颜色的桥梁。 渲染方程 Radiance 和 Irradiance 事实上这东西是有严格的定义的,但是课程说的比较含糊,更偏向理解层面。这东西我在面经那有写: - Radiance:单位时间内,单位面积,朝着某一个特定的角度发出的能量 - Irradiance:单位时间内,单位面积发出的能量 所以Irradiance事实上相比Radiance就没有方向这个概念了。在半球空间可以理解为对Incoming Radiance进行积分的结果。 方程解析 渲染方程如下: Lo(p, ωo) = Le(...
Games104笔记-4-渲染系统(一):游戏引擎中的渲染实践
Created2026-05-04|Games104
本文为课程Games104第四节课:Basics of Game Rendering的个人笔记。 导论 理论和实践 理论计算机图形学通常专注于单一的物体类型,例如实现一个高质量的半透明材质、水面焦散等。同时更关注其算法在理论上的正确性和物理上的精确性,例如我们所熟知的基于辐射度量学的渲染方程就是一个物理正确的图形学模型。 理论图形学也不是没有在乎效率,只不过没那么严格。像30FPS就可以认为是实时的,10FPS认为是可交互的。Out-of-Core-Rendering则是当数据量过大时使用外部分布式存储协同渲染的技术。 理论图形学为游戏引擎的渲染提供了重要的理论基础。但是游戏引擎的渲染系统并非简单地应用理论算法,而是在严苛的约束下进行系统性的工程实践。 游戏渲染的挑战 第一个挑战是可渲染物体的多样性: 场景中可能存在成千上万种对象,例如角色、植被、水体、云雾等。针对不同的材质和对象,需要应用不同的渲染算法。 另外整个场景还需要应用统一的光照、阴影计算,以及大量后处理算法等。 第二个挑战是对于底层硬件的高效利用: 游戏渲染追求极致性能,因此...
Games104笔记-3-如何构建游戏世界
Created2026-05-01|Games104
本文为课程Games104第三节课:How to Build a Game World的个人笔记。 游戏世界有什么? 课程里举了战地2042为例子,并且说这游戏很拉跨,嘻嘻嘻。 但如果以2042为例子,我们首先能想到的是很多动态交互物,例如玩家可以开坦克、开飞机,以及操控自己的小兵角色。当然像飞行中的导弹也一样。(下面图字打错了) 第二类物体就是静态物,这里包括瞭望塔、飞机的机棚、仓库、房屋、街道等。这些物体不可交互,但同样为游戏Gameplay玩法提供了重要的环境支持。 有一类不容易注意到的就是地形系统(UE里有专门的地形编辑工具),以及天空系统,植被等。 有了以上元素,我们可以得到看的见的游戏世界。但是我们的游戏还存在其它的物体,例如Trigger、空气墙等,它们虽然看不见,但是同样是玩法规则的一部分。 以上所有动静态物体统称为游戏对象Game Object(GO)。(注意:大地和天空系统是独立的)有了GO这个概念,我们该如何对某个GO进行操控呢? Game Object 假设我们要实现一个能够自动巡逻的无人机,它需要具备什么? 第...
UE-MotionMatchingInteraction架构分析
Created2026-04-30
模块:PoseSearch。目前对于MotionMatchingInteraction,无任何官方文档,无任何官方示例(即便是写这篇文章时Epic发布的UE5.7的GASP项目),故仅作参考。 关键类分析 Availabilities Availability可以理解为我当前角色在本帧声明的交互意图和约束。 类声明在 PoseSearchInteractionAvailability.h 中: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051// input for MotionMatchInteraction_Pure: it declares that the associated character ("AnimContext" that could be an AnimInstance or an AnimNextCharacterComponent)// is willing to parteci...
Games104笔记-2-引擎架构分层
Created2026-04-30|Games104
本文为课程Games104第二节课:Layered Architecture of Game Engine的个人笔记。 A Glance of Game Engine Layers 工具层 当我们第一次接触UE或者Unity时,映入眼帘的不是晦涩的代码,而是一个由许多工具组成的UI操作界面(在UE里叫做UE-Editor): 这一层是面对我们引擎用户的,叫做工具层,我们将其放在最顶层。 功能层 引擎的产品是游戏。为了能让游戏能够看的见、场景能够动态变化并且游戏能够和我们用户输入交互,我们肯定需要对这些需求提供相应的功能实现。在面试中经常被问到游戏中碰撞检测的原理,这涉及到的就是物理系统;另外即便是游戏客户端岗位也不可避免地被拷打图形学相关知识,而实时渲染领域则被应用于游戏引擎的渲染系统;另外游戏中玩法相关以及NPC人物也都离不开脚本、AI系统等。 这一层叫做功能层,它为上面的工具层提供支持。 资源层 游戏中有许多不同类型的资源,例如三维模型、骨骼、动画、声音、贴图等。它们需要在同一个引擎内进行统一管理,这就是资源层的职能。它为功能层提供操作对象。...
游戏客户端面经(自整理版)
Created2026-04-23
岗位:游戏客户端开发 C++ 1. 深拷贝和浅拷贝 深拷贝和浅拷贝的核心区别在于:拷贝时到底是只复制一层引用,还是把引用指向的内容也一起复制出一份新的。 浅拷贝是什么 定义 浅拷贝是指按字节或按成员逐个复制对象的值。对于指针类型的成员,只复制指针本身(即地址),而不复制指针所指向的内容。 在 C++ 中,如果用户没有显式定义拷贝构造函数和拷贝赋值运算符,编译器会自动生成默认版本,这些默认版本执行的就是浅拷贝。 特点 执行速度快,实现简单 多个对象共享同一份动态资源 容易引发重复释放(double free)或悬垂指针(dangling pointer)问题 深拷贝是什么 定义 深拷贝是指不仅复制对象的成员变量本身,对于指针类型的成员,还会重新分配内存,并将原指针所指向的内容复制到新分配的内存中。这样每个对象都拥有自己独立的资源副本,互不影响。 特点 避免了资源重复释放和意外共享 实现相对复杂,需要显式定义拷贝构造函数和拷贝赋值运算符 性能开销较大(涉及内存分配和数据复制) 2. 编译器默认生成的拷贝构造(拷贝赋值)的语义是什...
TArray
Created2026-04-18
UE源码解析-TArray 这篇文章我们来分析UE里的变长数组的实现,对应模块为 Core 。 在 ContainersFwd.h 中罗列了很多容器模板的声明,里面包含 TArray : 1template<typename T, typename Allocator = FDefaultAllocator> class TArray; Allocator 默认的分配器是 TSizedHeapAllocator ,在 ContainerAllocationPolicies.h 中声明: 12template <int IndexSize> class TSizedDefaultAllocator : public TSizedHeapAllocator<IndexSize> { public: typedef TSizedHeapAllocator<IndexSize> Typedef; };using FDefaultAllocator = TSizedDefaultAllocator<32>...
cpp3
Created2026-04-16
cpp八股3 这里我们主要手撕一些面试里可能让你手撕的轮子(? 队列 首先看看环形队列,就是固定大小的缓冲区上维护两个指针: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051template<typename T>class CircleQueue{public: CircleQueue(int capacity=5) : cap(capacity), nxt(0), head(0) { buf.resize(cap); } T& Front() { if(Empty()) throw std::runtime_error("Queue is empty"); return buf[head]; } T& Back() ...
cpp2
Created2026-02-23
cpp八股2 实现三个智能指针 首先是 UniquePtr,它是独占式的智能指针,不能被复制,只能被移动。 12345678910111213141516171819202122232425262728293031323334353637383940template<typename T>class UniquePtr{public: UniquePtr(T* p = nullptr) : ptr(p) {} UniquePtr(const UniquePtr&) = delete; UniquePtr& operator=(const UniquePtr&) = delete; UniquePtr(UniquePtr&& other) noexcept : ptr(other.ptr) { other.ptr = nullptr; } UniquePtr& operator=(UniquePtr...
123
avatar
Ayy3
亚托莉四年单推人
Articles
22
Tags
5
Categories
2
Follow Me
Announcement
欢迎交流
Recent Posts
CSAPP笔记-虚拟内存2026-05-13
Games104笔记-5-渲染系统(二):渲染中光和材质的数学魔法2026-05-12
Games104笔记-4-渲染系统(一):游戏引擎中的渲染实践2026-05-04
Games104笔记-3-如何构建游戏世界2026-05-01
UE-MotionMatchingInteraction架构分析2026-04-30
Categories
  • CSAPP1
  • Games1044
Tags
computer graphics Unreal Engine 计算机系统 游戏引擎 algorithm
Archives
  • May 2026 4
  • April 2026 5
  • February 2026 2
  • January 2026 3
  • December 2025 1
  • November 2025 1
  • October 2025 3
  • September 2025 3
Website Info
Article Count :
22
Unique Visitors :
Page Views :
Last Update :
© 2025 - 2026 By Ayy3Framework Hexo 7.3.0|Theme Butterfly 5.5.0