我正在使用 Metal 和 LiquidFun 创建 2d 动画。我想模拟汽油。我希望我的动画是带有灰色阴影的黄色,类似于:
这是我当前的动画,它完全是黄色的,没有任何灰色阴影,所以看起来不太现实:
我的片段着色器现在非常简单,我只将黄色传递给它:
fragment half4 fragment_shader(VertexOut in [[stage_in]],
float2 pointCoord [[point_coord]]) {
float4 out_color = float4(0.7, 0.5, 0.1, 0.07);
return half4(out_color);
};
我查看了有关在 MTKView 上添加阴影的各种教程,但它们都提出了对我不起作用的建议。首先不起作用的是创建各种顶点并为每个顶点设置颜色。在我的代码中,我没有确定的顶点,我有一个传递给顶点缓冲区的粒子系统:
particleCount = Int(LiquidFun.particleCount(forSystem: particleSystem))
let positions = LiquidFun.particlePositions(forSystem: particleSystem)
let bufferSize = MemoryLayout<Float>.size * particleCount * 2
vertexBuffer = device.makeBuffer(bytes: positions!, length: bufferSize, options: [])
我尝试过的另一件事是设置环境、漫反射和镜面反射颜色,但它也不起作用,因为我的动画是 2D,而不是 3D。
我也尝试过根据粒子位置设置颜色。我在片段着色器中的代码与此接近:
if (in.position.y < 1500.0) {
out_color = float4(0.7, 0.5, 0.1, 0.07);
} else if (in.position.y > 1500.0) {
out_color = float4(0.6, 0.5, 0.1, 0.07);
}
但它也没有按预期工作:颜色过渡不平滑,看起来不像阴影。加上我的动画在增加,所以将颜色设置为确定的位置不是一个好主意。
你能给点建议吗?我觉得我错过了一些非常重要的东西。
感谢任何帮助!