在 m1 Mac 上使用 unity 2022.3.10f1。
我正在研究绽放效果,遇到了一个奇怪的问题。
private void OnRenderImage(RenderTexture source, RenderTexture destination)
{
Graphics.Blit(source, tempRt);
Graphics.Blit(source, tempRt2);
//Compute Shader to get bloomy parts of image
ExtractBloomLayer.SetTexture(0, "LayerOut", tempRt);
ExtractBloomLayer.Dispatch(0, tempRt.width / 32, tempRt.height / 32, 1);
//tempRt now contains the information that I'll blur to make the bloom
//apply the blur (only one iteration for testing)
Graphics.Blit(tempRt, tempRt2, blurMat); //SHOULD MAKE WHOLE SCREEN RED
//sending raw blur to screen (for testing)
Graphics.Blit(tempRt2, destination);
}
由于使用了blurMat Graphics.Blit,这段代码应该使我的整个屏幕变成红色,并且它在编辑器中按预期工作,但在构建中却不然。如果我注释掉这两条 ExtractBloomLayer 行,构建也会按预期工作(但我需要这些行,并且不能只删除它们。)在构建中,ExtractBloomLayer 计算着色器工作得很好,但模糊Mat blit 却不起作用做任何事。有谁知道这是为什么吗?
我已经尝试了很多使用blurMat着色器的东西,但它总是无法出现在游戏的构建版本中(但同样,只有当计算着色器线处于活动状态时才会中断)
修改着色器剥离选项 https://forum.unity.com/threads/some-shaders-not-rendering-in-build.1412457/ 将着色器放入资产/资源中 https://forum.unity.com/threads/why-this-shader-works-in-editor-but-not-when-i-build-the-game.255756/ 从包中删除 Shadergraph(我是内置的,所以不适用) https://forum.unity.com/threads/standard-cutout-shader-working-in-editor-not-in-build.1223088/ 将着色器放入图形设置中的“始终包含”列表中
到目前为止还没有任何效果。
我找不到真正的解决方案。相反,我将隔离布隆计算着色器重写为片段着色器并替换了相关行。现在构建可以按预期工作。
我知道过度依赖计算着色器可能不是一个好主意,但它们使用起来更加直观,我通常可以接受它们的缺点。
工作代码:
private void OnRenderImage(RenderTexture source, RenderTexture destination)
{
Graphics.Blit(source, tempRt, isolateBloomMat);
if (blurIterations > 50) blurIterations = 50;
for (int i = 0; i < blurIterations; i++)
{
Graphics.Blit(tempRt, tempRt2, blurMat);
Graphics.Blit(tempRt2, tempRt, blurMat);
}
Graphics.Blit(source, tempRt);
BlurAndAdd.SetTexture(0, "CamIn", tempRt);
BlurAndAdd.SetTexture(0, "BLayer", tempRt2);
BlurAndAdd.Dispatch(0, tempRt.width / 32, tempRt.height / 32, 1);
Graphics.Blit(tempRt, destination);
}