在绝大多数游戏引擎和渲染管线里,“顶点颜色 * 纹理颜色”是默认的混合方式,
而不是“顶点颜色 + 纹理颜色”,
是因为:
- 纹理里的颜色,通常被当成**“本身的颜色/图案”**;
- 顶点颜色,通常被当成**“这个颜色要被整体调成多亮/偏什么色的“系数”**;
也就是说:
纹理 = 底色,顶点颜色 = 灯光/滤镜/调色板 → 最自然的操作就是“乘”而不是“加”。
你可以把它想象成:
- 纹理是你的白 T 恤上印的图案;
- 顶点颜色是一盏彩色灯,照在这件衣服上;
- 灯照在衣服上,颜色怎么变?——当然是图案颜色 * 灯光颜色,而不是图案颜色 + 灯光颜色。
这篇文章就从多个角度,把这件事掰开了讲:
- 先用生活比喻解释“乘法混合”到底在表达什么物理/直觉含义;
- 再对比一下:如果用加法混合会发生什么怪事;
- 讲讲乘法在数学和渲染体系上的“好处”:保持范围、方便控制亮度、天然支持“遮罩”等;
- 说说在 Unity 代码/Shader 里的体现:
texColor * vertexColor到底在干嘛; - 最后再扩展:什么时候会用加法、更复杂的混合形式。
一、先用特别直白的比喻:纹理是“底色”,顶点颜色是“灯光/滤镜”
先约定一点点