代码规范 一些个人习惯而已。 头文件 分四部分依次排列 cpp 文件对应的头文件 解决方案内源码可见的头文件 第三方库的头文件 标准库头文件 第三方库用 <> 自己的头文件用 “” 按字典序排序 清理不必要的头文件 C++ 标准库头文件不带扩展名,C 头文件带 .h,C++ 程序中尽量用 C++ 头文件 命名 函数大写驼峰 变量小写驼峰 指针和引用右对齐 成员变量 - m_ 指针 - 2025-03-01 #CPP #Engineering
VS2022 使用窍门 快捷键 常见 ctrl + Q,功能搜索 ctrl + W,选择光标所在的单词 ctrl + R + R,重命名光标所在的单词 ctrl + T,代码搜索 ctrl + A,全选 ctrl + shift + A,添加新文件 ctrl + S,保存当前文件 ctrl + shift + S,保存所有文件 ctrl + D,复制光标所在的行 ctrl + F,查找与替换 ctrl + shift 2024-11-23 #Engineering #VS2022
博客传送门 博客 CatDogEngine RiotGames Sébastien Hillaire’s website Eric Bruneton Scratchapixel WalkingFat Wyman 的原创技术博客 Inigo Quilez Kevin Beason Candycat Blog Wicked Engine Net Milo 的游戏开发 白玉楼之梦 - szszss’ blog Se 2024-10-06
现代 C++ 随记 序言 现代 C++ 相关的笔记。 inline 和 static 唯一定义原则 https://en.cppreference.com/w/cpp/language/definition extern int a; 是声明。 int a;, int a = 1;, extern int a = 1; 都是定义。 void foo(); 是声明。 void foo() {} 是定 2024-05-02 #CPP
GGX+Smith 微表面 PBR 漫反射光照 原标题 PBR Diffuse Lighting for GGX+Smith Microsurfaces 通用的微表面 BRDF 通用形式 宏观表面的 BRDF 只是许多微表面的平均。 通用形式 ∫Ωρm(L,V,m)D(m)G2(L,V,m)m⋅L∣N⋅L∣m⋅V∣N⋅V∣dm\int_\Omega\rho_m(L,V,m)D(m)G_2(L,V,m)\frac{m\cdot L}{|N\c 2024-03-26 GDC #PBR
守望先锋中的 ECS 系统 原标题 Overwatch Gameplay Architecture and Netcode Component:只保存状态,不含逻辑 System:只有逻辑,没有数据 系统按顺序更新(Tick),每个系统访问多个不同的组件,称之为元组(Tuple) 元组之后被 Sibling 取代了。 系统不关心实体,只关心具体的组件。 World array<System *> hash_ 2024-01-18 GDC #Engineering #ECS
低复杂,高保真:INSIDE 中的渲染 原标题 Low Complexity, High Fidelity: The Rendering of INSIDE 项目中的各种 Trick 与性能优化,其中颜色抖动在渲染中的应用比较有意思。 Dithering 这个问题源于:8 bit 的颜色无法完美还原高精度的渲染结果。 橙线:理想中的原始信号 蓝线:默认的采样方式(floor),可以看到丢失了精度 噪点:人为在原始信号上叠加的 [0, 2023-12-23 GDC #Dithering
荒野大镖客 2 中的天气系统 原标题 Creating the Atmospheric World of Red Dead Redemption 2: A Complete and Integrated Solution 整套天气系统渲染的实现,包括大气、云雾、二十四小时、不同天气。 物理基础 这里只考虑单条光路上的单次散射。 以单个粒子为视角,当光线与其交互时,大致会发生吸收(转化为热能)、散射和反弹。 散射向相机的部分 2023-12-19 Siggraph #AtmosphericScattering #VolumeRendering #Cloud
漫威蜘蛛侠中的程序化光照 原标题 Marvel’s Spider-Man: Procedural Lighting Tools 程序化布光以及 Probe / Light Grid 分布。 Open World Tiles 将整个世界分成数个 128 x 128 米的 Tile,对于每个 Tile,由数个 JSON 文件描述该 Tile 所引用的资源。 只有玩家当前所在的和周围的 Tile 会流入内存,其余的 Tile 2023-11-21 GDC #GlobalIllumination #Procedural
何为一个 C++ 项目 TODO 待整理,但是最近发现了一些有趣的东西,先记一下 CMAKE_MSVC_RUNTIME_LIBRARY 用于在 CMakeLists 里指定 MSVC 使用的运行时库。 MultiThreaded 对应 MT MultiThreadedDebug 对应 MTd MultiThreadedDLL 对应 MD MultiThreadedDebugDLL 对应 MDd 注意这项功能仅在 CM 2023-11-09 #CPP #Engineering