跳到主要内容
腾讯题库 · Q43
先读 30 秒回答

第 43 题 / 50

学习状态 未开始

法线精度与带宽

面试官问

PDF 第 91 页

在移动端,如何平衡“高精度法线贴图”与“显存带宽”之间的矛盾?你采用过哪些替代方案?(常问题,理清逻辑)

Shader normal-map · bandwidth 对应课程:texture-sampling

先把问题答上

你可以直接这样回答

约 30 秒

我会按纹理类型、屏幕占比和设备能力选择格式/分辨率,必要时用 RG 重建、顶点法线或低频 detail 法线。优化必须同时看带宽、VRAM、高光方向和 mip 稳定性,不能只报告贴图变小。

这道题真正想听什么?

先确认比较对象和回答边界,再决定要不要展开公式、工程实现或性能取舍。

它考你会不会把“精度”拆成方向误差、纹理格式、采样次数、分辨率和带宽,而不是一句“压缩就好”。可以讨论 BC/ETC/ASTC、RG 两通道重建、顶点法线/细节法线、按屏幕占比降级,但要说明法线空间、切线基和视觉验收。

把答案讲到 2 分钟面试必答 · 约 2 分钟 · 补足因果、输入和取舍

先固定 TBN 与灯光做高精度 baseline,再逐项比较压缩、分辨率、采样和法线强度。移动端关键角色保留高质量,远景降低法线或改顶点/程序细节;对 mirrored UV、色彩空间、z 重建和归一化写成导入校验。

面试官可能继续追问什么?补充自测 · 约 3 分钟 · 检查自己是不是真的懂了
  • 问:法线图分辨率降了,为什么高光可能突然坏? 答:细节频率和 mip 变化会让方向噪声或平滑边界进入 N·L;要看远近和切线空间,而不是只看平均色。
  • 问:把法线压成 RG 一定正确吗? 答:需要正确的 z 重建、归一化、色彩空间和切线 handedness;误差要在高光和轮廓上验收。
  • 因果链: 编码/压缩 → 采样带宽 → 解码方向 → TBN/N·L → 画质与设备预算。
如果概念还是悬空,就去做实验关键证据 · 约 5–15 分钟 · 预测 → 单变量 → 观察

实验不是第二份答案,它只负责证明答案

如果上面的解释已经听懂,可以直接跳过。卡住时,再沿着这三步把抽象词变成画面证据。

  1. 先猜 这份数据从哪里进入 Shader,经过哪一步,最后改变哪个像素?
  2. 去取证 固定其他条件,只改一个参数。先写下变化,不用“更真实”“更高级”这种空词代替证据。
  3. 再追问为什么 是哪一步造成这个结果?如果结果相反,先检查输入、空间、算法,还是显示输出?
我完全没头绪,给我一个起点

先截下默认状态,只动页面当前开放的那个参数。你只需要说清楚“原来怎样 → 改了什么 → 现在怎样”。

1. 先预测

Normal Spaces LabdebugMode=normal-mapspace=tangentnormalStrength=0.55showRawNormal=true;切换 perturbed-normalndotl。在 Texture Sampling Lab 只改 resolutioncompressionsampleBudgetdebugMode=bandwidth;Quality Tier 切 normalMaptextureResolutionmobileBandwidth输入 → 变化 → 输出: 法线编码/空间/采样 → 解码与光照 → N·L、带宽、VRAM 与画质误差。

老师追问

先别急着查答案: 先追一条数据从输入到像素:它经过哪一步计算,哪一个中间通道会先暴露问题?

为什么: 你刚才的预测依赖哪个前提?如果把“法线精度与带宽”里最关键的变量或约束关掉,画面/输出会先坏在哪里?

如果结果相反: 先排除哪一层,再谈结论?这个规则的边界是什么?

2. 再动手

固定模型与灯光,先在 Normal Spaces 对照 normal-mapperturbed-normalndotl;再在 Texture Sampling 比较 compression=rgba8/etc2/astcresolution=2048/512sampleBudget。Quality Tier 只改 normalMaptextureResolutionmobileBandwidth。记录 Bandwidth、VRAM、GPU 与高光方向,写出可接受的远景 fallback。

3. 最后对证据

压低分辨率/采样预算通常减轻带宽和显存,但法线细节、闪烁和高光方向可能变粗。Normal Spaces 的 debug 直接显示切线/扰动法线与 N·L;Texture Sampling/Quality Tier 的数值是教学估算,不等于某手机的真实带宽。最终方案必须在目标设备和真实纹理编码上复测。

答案在代码哪里发生?实现定位 · 约 3 分钟 · 变量、函数和关键行
完整 5 分钟版本面试扩展 · 约 5 分钟 · 项目边界、验证与降级

我会建立按设备/材质的法线预算表,记录纹理格式、mip、采样数、GPU/带宽/显存、闪烁和高光误差。发布前跑真实机镜头路径与温度回归;fallback 必须能解释为什么牺牲细节、在什么阈值恢复,并保留原图回滚。

哪些说法最容易答歪?必看陷阱 · 约 1 分钟 · 面试前最后检查
  • 把法线图当 sRGB 颜色处理。
  • 只看 RGB 误差,不看 TBN、N·L 和高光。
  • 只降分辨率,不检查 mip/各向异性和远景闪烁。
  • 把浏览器教学估算写成手机实测。