图形学常见数学知识点考察
发表于|更新于|游戏开发
1. 顶点变换中的裁剪矩阵的实现原理
2. 齐次坐标是什么,为什么要用
3. 射线追踪:射线数学表达和与面相交数学表达
4. PBR 中 BRDF 实现概括
5. 渲染方程讲一下
文章作者: Jatpeng
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Never Settle!
相关推荐
2026-04-10
学习图形学:光线追踪入门(从 0 到可用的最小实现)
0. 为什么要学光线追踪光线追踪(Ray Tracing)的价值不只是“更真实”,而是它把渲染问题拆成一套非常统一的数学与工程模块:发射射线 → 求交 → 计算散射/发光 → 继续追踪/结束。理解这套闭环后,再回头看光栅化管线、PBR、GI、采样与降噪,会更容易形成体系。 本文目标:做出一个能渲染球体/三角形、支持阴影、反射,并能逐步扩展到路径追踪的最小实现。 1. 你需要的最小数学与约定 向量:点乘(投影/夹角)、叉乘(法线/面积)、归一化 射线: r(t) = o + t d ,其中 t > 0 坐标系:右手/左手都行,但要一致(相机、法线方向、叉乘方向) EPS:为避免自相交,常用一个很小的偏移量 \epsilon (如 1e{-4}) 2. 关键模块总览(建议按这个顺序实现) 2.1 相机(Camera):把像素坐标映射到世界空间射线 2.2 几何(Hittable):射线-物体求交(球体最容易起步) 2.3 材质(Material /...
2026-04-23
CPU 与 GPU 性能瓶颈分析与定位完全指南(RenderDoc + Nsight 实战)
1. 宏观定位:找到流水线阻塞点现代游戏引擎渲染建立在**流水线并行(Pipelined Parallelism)**之上,主要由三大核心线程协作完成。排查的第一原则是:区分”真正在干活”与”在死等同步锁(Stall / Bubble)”的时间。 1.1 三大核心线程职责 线程 职责 Game Thread(逻辑线程) 跑物理、AI、动画,生成场景可见性数据 Render Thread(渲染线程) 接收逻辑数据,进行视锥体 / 遮挡剔除,生成渲染指令(Draw Calls) RHI / GPU Thread 将指令翻译为底层 API(Vulkan / DX12)Command Buffer,提交 GPU 硬件执行 1.2 宏观瓶颈判定核心思路是对比各阶段耗时(工具:Unreal Insights / stat unit / Nsight Systems)。 12345678瓶颈所在 ...
2026-04-29
DX 共享内存技术
技术概述通过创建一个“共享显存服务进程”(下文简称共享进程),把所有客户端的纹理创建/加载请求统一转发到共享进程执行,从而实现一个跨进程的纹理资源管理器(同一份纹理只创建一次,多客户端复用同一块显存)。 问题背景 某大型端游/客户端应用存在“多开”使用场景,且大量视觉效果由 2D 序列帧纹理驱动。多开时每个客户端重复加载同一批资源,会导致显存总占用快速升高;显存压力过大时,可能出现资源分配失败甚至进程崩溃。 多开往往具有较高内容相关性(例如多个客户端在同一场景/同一队伍内),意味着加载集合高度重叠。如果能把“相同资源只加载一次并跨进程共享”,则总显存占用可进一步下降。 技术思路 Direct3D 11 支持共享资源(shared resource / shared handle)。一个进程创建的纹理可以通过共享句柄让另一个进程打开并使用。 客户端启动时创建或连接共享进程;客户端侧所有纹理创建请求都转发给共享进程执行。 客户端与共享进程之间的控制面通信使用共享内存(元信息、状态、句柄等),数据面仍由...
2026-05-09
游戏中常见效果实现方案
(内容待补充)
2026-05-09
移动渲染管线
1. 流程图 Tile-Based Deferred Rendering (TBDR) 流程图讲解这是 PowerVR GPU 的 TBDR 渲染架构流程图,分为两大阶段:几何阶段和渲染阶段,核心特点是利用片上缓存(On-Chip Buffers)减少对系统内存的读写。 第一阶段:几何处理(Geometry Phase)① Vertex Processing(顶点处理) 执行顶点着色器,完成坐标变换、光照计算等 输入来自系统内存中的 Geometry Data(几何数据) ② Clip, Project & Cull(裁剪、投影与剔除) 将顶点从世界空间变换到裁剪空间 剔除视锥体外的图元,减少后续计算量 Cull:剔除,视锥体外 Clip:裁剪,一部分视锥体内,一部分视锥体外 ③ Tiling(分块) 将屏幕划分为若干小块(Tile),判断每个图元属于哪些 Tile 输出 Primitive List(图元列表)和 Vertex Data(顶点数据)存入系统内存 ⚠️ 这是 TBDR 的关键步骤,后续按 Tile 逐块处理 第二阶段:逐 Tile...
2026-05-13
游戏移动端与 PC 端的优化差异
1. 减少带宽和显存消耗2. 减少渲染中 Pass 切换的数目来降低带宽1. OpenGL ES 中使用 Framebuffer Fetch2. Vulkan 使用 Subpass 来减少带宽例如,延迟渲染中的 GBuffer 和 Lighting Pass 两个 Pass 如果执行了 EndPass,会将 On-Chip Memory Store 到系统内存中,下个 Pass 要 Load On-Chip Memory。通过 Subpass Load 将利用 Tile 中的数据计算。 3. 每一帧显式提交一个 Clear 减少 Tile Load3. 带宽压缩1. ASTC 贴图格式压缩,不同资源压缩比例不同 4×4 - 8×82. 降低 RT 精度2. Early-Z、HSR 硬件像素剔除比较关键 半透明材质不受 HSR,存在 Overdraw Alpha Test 材质会破坏 HSR,所以放到不透明物体最后渲染 3. 实际项目优化示例1....
评论
公告
欢迎来到我的博客!
这里会分享一些编程、游戏开发和生活感悟。
这里会分享一些编程、游戏开发和生活感悟。