透明物体渲染的步骤(大白话生动版:你以为是“画一下”,其实是“排队、算账、再排队”)

透明物体渲染这件事,表面看起来很简单:不就是玻璃、水、烟、火、UI、半透明布料嘛。
但做过的人都知道:透明一多,画面就开始“玄学”——

  • 玻璃前后顺序一乱,就像贴纸叠错了;
  • 粒子一多,GPU 直接变“暖手宝”;
  • 深度一开一关,边缘不是穿帮就是发灰;
  • 折射、反射、雾、后处理一起上,效果香是香,帧率也香(发烫的香)。

原因只有一个:透明物体不遵守“不透明世界”的那套简单规矩
不透明物体靠深度缓冲(ZBuffer)就能解决“谁挡谁”;
透明物体不行,它得靠“排序 + 混合”,这就麻烦了。

这篇文章就用大白话,把“透明物体到底怎么渲染”讲清楚,重点是步骤:从 CPU 怎么排队,到 GPU 怎么上色,再到各种常见变种(玻璃、水、粒子、UI)。
你看完会知道:

  • 透明物体渲染的完整流水线步骤
  • 为什么透明必须“从远到近”
  • 为什么透明通常不开 ZWrite
  • 透明的两大坑:排序问题、Overdraw 问题
  • 半透明、AlphaTest(裁剪)、预乘 Alpha 的区别
  • 复杂透明效果(折射、深度雾、软粒子)在步骤里插在哪

0. 先立规矩:透明渲染最终要解决什么?

透明渲染最终想做的是一件事:

把“后面的颜色”和“前面的透明颜色”按比例混起来,得到最终像素。<