为了动画从任意片段着色器到另一个的过渡(不能修改着色器内的 alpha 值),我在考虑:
- 使用第一个片段着色器渲染第一个网格
- 使用不同的片段着色器和以下参数渲染相同的网格
- 对于深度测试,使用比较功能
wgpu::CompareFunction::LessEqual
,这样我就可以在之前渲染的网格上绘制 - 我在逐渐更改的渲染通道上使用自定义混合颜色
set_blend_constant
,并在我的渲染管道中将其与此混合状态一起使用:
- 对于深度测试,使用比较功能
wgpu::BlendState {
color: wgpu::BlendComponent {
src_factor: wgpu::BlendFactor::Constant,
dst_factor: wgpu::BlendFactor::OneMinusConstant,
operation: wgpu::BlendOperation::Add,
},
alpha: Default::default(),
};
它确实工作得很好,但是我不是 OpenGL 或图形管道方面的专家(而不是初学者),所以也许这不是通常要做的事情。
我的问题是我的第二个着色器(绘制在第一个着色器之上)是否有一些透明颜色。由于我已经使用混合功能来控制整体透明度,我不知道如何将来自第二个着色器的实际透明颜色与整体应用的透明度结合起来。
OpenGL 似乎有一个GL_CONSTANT_ALPHA
混合模式,我认为(但我可能错了?),它将结合着色器透明度和我的整体透明度。但这在 WebGPU 中不存在,实际上根据这个WebGPU GitHub 问题,它似乎也不存在于 D3D 中。
我应该如何继续结合我的整体透明度和着色器透明度?