系列
游戏中的 Shader:十个常用效果的实现与边界
以原生 WebGL2 与 GLSL ES 3.00 实现十个常用游戏效果,逐篇建立状态、时间、空间、混合、深度与后处理边界。
已读 0 / 10(0%)
-
1
受击闪白不能是一把全局开关:颜色混合与逐角色状态提交
同一套 Shader 可以被多个角色复用,但受击时间和混合强度必须由角色状态持有,并在每次 Draw 前独立提交。
-
2
暂停后还在流动的纹理:UV 偏移、循环边界与效果时钟
UV 流动应由可暂停且有限循环的效果时钟驱动,方向、速度与采样边界则在宿主提交前形成完整参数合同。
-
3
角色消散不只是 discard:遮罩阈值与稳定边缘带
消散进度必须是由宿主持有的单调状态,片元阶段则用同一个遮罩差值完成裁剪、边缘着色与端点收敛。
-
4
护盾为何只在轮廓发亮:用视线夹角控制 Fresnel 边缘光
Fresnel 边缘光成立的前提不是一条幂函数,而是世界空间法线、相机视线与非均匀缩放下逆转置法线矩阵的一致合同。
-
5
草叶摆动时根部为何漂移:顶点风、根部遮罩与剔除边界
顶点风应在对象空间用高度权重约束位移,宿主同时限制振幅并扩张剔除边界,否则根部漂移与提前消失会同时出现。
-
6
角色选中描边为何覆盖整张脸:双 Pass 外扩、像素宽度与绘制顺序
双 Pass 描边必须由宿主按外扩壳再原表面的顺序提交,并在裁剪空间按视口换算像素宽度,否则远近粗细漂移或描边覆盖整个表面。
-
7
透明护盾为什么不能只调低 Alpha:混合、深度写入与排序合同
半透明护盾只有在颜色表示、混合因子、深度测试、深度写入和远近顺序同时匹配时,才能保留正确的边缘光、遮挡与透明层叠。
-
8
水面扭曲为何露出重复接缝:双层 UV 扰动与采样边界
水面扭曲应由两组不同尺度和方向的扰动共同驱动,并在宿主限制位移强度、在 Shader 明确底图边界,否则周期纹理和越界回卷会直接进入画面。
-
9
场景雾效为何随远裁剪面跳变:世界距离与高度衰减
场景雾应从片元世界位置计算相机距离,并由宿主约束密度与高度范围;裁剪深度只能表达投影结果,远裁剪面变化会让同一世界坐标获得不同雾量。
-
10
低血量效果为何不该写进每个材质:离屏颜色与全屏 Pass
低血量反馈应由宿主把有限生命值与秒制时间提交给全屏 Pass,只处理同渲染尺寸的场景颜色,并在其后合成 UI,避免漏处理场景或污染 HUD。