系列

游戏中的 Shader:十个常用效果的实现与边界

以原生 WebGL2 与 GLSL ES 3.00 实现十个常用游戏效果,逐篇建立状态、时间、空间、混合、深度与后处理边界。

已读 0 / 10(0%
  1. 1 受击闪白不能是一把全局开关:颜色混合与逐角色状态提交

    同一套 Shader 可以被多个角色复用,但受击时间和混合强度必须由角色状态持有,并在每次 Draw 前独立提交。

    4 分钟
  2. 2 暂停后还在流动的纹理:UV 偏移、循环边界与效果时钟

    UV 流动应由可暂停且有限循环的效果时钟驱动,方向、速度与采样边界则在宿主提交前形成完整参数合同。

    5 分钟
  3. 3 角色消散不只是 discard:遮罩阈值与稳定边缘带

    消散进度必须是由宿主持有的单调状态,片元阶段则用同一个遮罩差值完成裁剪、边缘着色与端点收敛。

    5 分钟
  4. 4 护盾为何只在轮廓发亮:用视线夹角控制 Fresnel 边缘光

    Fresnel 边缘光成立的前提不是一条幂函数,而是世界空间法线、相机视线与非均匀缩放下逆转置法线矩阵的一致合同。

    4 分钟
  5. 5 草叶摆动时根部为何漂移:顶点风、根部遮罩与剔除边界

    顶点风应在对象空间用高度权重约束位移,宿主同时限制振幅并扩张剔除边界,否则根部漂移与提前消失会同时出现。

    6 分钟
  6. 6 角色选中描边为何覆盖整张脸:双 Pass 外扩、像素宽度与绘制顺序

    双 Pass 描边必须由宿主按外扩壳再原表面的顺序提交,并在裁剪空间按视口换算像素宽度,否则远近粗细漂移或描边覆盖整个表面。

    6 分钟
  7. 7 透明护盾为什么不能只调低 Alpha:混合、深度写入与排序合同

    半透明护盾只有在颜色表示、混合因子、深度测试、深度写入和远近顺序同时匹配时,才能保留正确的边缘光、遮挡与透明层叠。

    5 分钟
  8. 8 水面扭曲为何露出重复接缝:双层 UV 扰动与采样边界

    水面扭曲应由两组不同尺度和方向的扰动共同驱动,并在宿主限制位移强度、在 Shader 明确底图边界,否则周期纹理和越界回卷会直接进入画面。

    5 分钟
  9. 9 场景雾效为何随远裁剪面跳变:世界距离与高度衰减

    场景雾应从片元世界位置计算相机距离,并由宿主约束密度与高度范围;裁剪深度只能表达投影结果,远裁剪面变化会让同一世界坐标获得不同雾量。

    6 分钟
  10. 10 低血量效果为何不该写进每个材质:离屏颜色与全屏 Pass

    低血量反馈应由宿主把有限生命值与秒制时间提交给全屏 Pass,只处理同渲染尺寸的场景颜色,并在其后合成 UI,避免漏处理场景或污染 HUD。

    6 分钟