标签为“图形学”的页面如下
2026-04-08
KisekiEngine 渲染 Bug 排查实录:从“立方体全亮、地面纹理消失”到 7/7 自动化测试全通过
开源项目地址:https://github.com/sznswjr/kiseki_engine
KisekiEngine 渲染 Bug 排查实录:从“立方体全亮、地面纹理消失”到 7/7 自动化测试全通过 背景 KisekiEngine 是一个基于 Metal 的 3D 图形引擎,实现了 Blinn-Phong 点光源光照、纹理贴图、OBJ 模型加载和多物体场景渲染。在完成所有功能后,用户报告了两个渲染问题:
立方体全亮:没有明暗面,整个立方体看起来亮度均匀 地面纹理消失:设置了 ground.png 纹理但地面显示为纯色 第一轮尝试:盲修(失败) 假设 1:uniform 布局不对齐 怀疑 C++ 端 simd_float3(16 字节)和 Metal shader 端 float3(12 字节)的对齐差异导致数据错位。
操作:将所有 simd_float3 + padding 改为 simd_float4 打包。
结果:编译通过但问题未解决。事后验证发现结构体偏移量实际上是一致的(offset 80 处 hasTexture),这个修改虽然没直接修到 bug,但让布局更安全了。
假设 2:无纹理物体残留纹理 怀疑光源球体(无纹理)渲染后残留了之前的纹理绑定。
操作:对无纹理物体显式调用 [encoder setFragmentTexture:nil atIndex:0]。
结果:问题仍未解决。
教训 盲修效率极低。每次修改都是猜测,无法验证是否真正触及根因。
转折点:先做验证工具,而不是继续猜 真正改变排查策略的一句要求是:
先不要解决问题,先设计一套测试工具验证修复到底正不正确。
这一步很关键。对于图形渲染问题,仅凭肉眼看窗口往往不够,必须建立一套可以重复执行的观测和验证机制。
第二轮:构建诊断系统 1)Debug Mode Shader 利用 Metal function constants 实现了多种 shader 可视化模式,用来分别观察不同信号:
继续阅读
2026-04-02
游戏画面设置常见的纹理过滤是什么?和信号与系统、傅立叶变换有什么联系?
前言 很多游戏玩家设置游戏画面时,常常看到纹理过滤、双线性过滤、各向异性过滤这样的选项。大多数人下意识地把它们调到最高,却不清楚这些选项到底在做什么,为什么关掉之后远处的地面会闪烁、栅栏会出现奇怪的花纹。
如果你深究下去,会发现这些选项背后藏着一套完整的数学体系——它和大学信号与系统课上学的傅立叶变换、卷积,其实讲的是同一件事。
这篇文章的目标,就是把这条线从头到尾梳理清楚。从"纹理过滤到底在干什么"开始,一步一步讲到:
为什么会有锯齿、闪烁、摩尔纹(Moiré Pattern) 为什么需要 MipMap 为什么锐利边缘代表高频 傅立叶变换到底在做什么 卷积为什么如此重要 这些概念之间到底怎么串起来 一、什么是纹理过滤 1.1 纹理映射时到底发生了什么 在图形学里,我们常常会把一张图片贴到三维模型表面,这张图片就叫纹理(Texture)。
比如:
地板表面的砖块图案 墙面的石头纹理 角色衣服上的花纹 枪械表面的磨损细节 当一个三角形(Triangle)被贴上纹理后,屏幕上的每个片元(Fragment)都会有一个纹理坐标,也就是 UV 坐标(UV Coordinates)。
问题在于:
屏幕是离散的像素网格(Pixel Grid) 纹理也是离散的纹素网格(Texel Grid) 但 UV 通常落在纹理上的非整数位置 一个屏幕像素也不一定只对应一个 texel 于是我们会遇到一个核心问题:
当一个片元要从纹理中取颜色时,到底应该怎么取?
这就是纹理过滤(Texture Filtering)要解决的事。
1.2 “过滤(Filtering)“这个词怎么理解 很多人第一次看到"过滤"这个词会有点懵,因为日常语境里的"过滤"像是在说"把杂质滤掉”。
但在图形学和信号处理(Signal Processing)里,filtering 更接近"滤波(Filtering / Filtering Operation)“这个意思,也就是:
按照某种规则,对周围样本做选择、加权、平滑或抑制,得到更适合当前使用方式的输出。
所以在纹理场景里,过滤不是"修图美颜”,而是在回答:
当前这个屏幕像素,应该如何综合纹理中的附近信息,得到一个合理的颜色。
二、最基础的纹理过滤方法 2.1 最近点采样(Nearest Filtering) 最简单的方法是最近点采样(Nearest Filtering):
UV 落到哪里,就找最近的那个 texel 直接取那个 texel 的颜色 比如 UV 落在纹理坐标 (10.3, 20.7) 附近,就取最接近的那个纹素。
优点:
继续阅读