c# - Unity Post-processing PostProcessEffectRenderer 显示在编辑器中但不在构建中
问题描述
将 PostProcessEffectRenderer 的实现添加到 Unity 后处理堆栈后,效果在 Unity 编辑器中完美运行,但在构建的游戏中不显示。
对构建质量的更改没有效果,使用最高质量设置不显示效果,为 Windows x86_64 构建。
灰度.cs
using System;
using UnityEngine;
using UnityEngine.Rendering.PostProcessing;
[Serializable]
[PostProcess(typeof(GrayscaleRenderer), PostProcessEvent.AfterStack, "Custom/Grayscale")]
public sealed class Grayscale : PostProcessEffectSettings
{
[Range(0f, 1f), Tooltip("Grayscale effect intensity.")]
public FloatParameter blend = new FloatParameter { value = 0.5f };
}
public sealed class GrayscaleRenderer : PostProcessEffectRenderer<Grayscale>
{
public override void Render(PostProcessRenderContext context)
{
var sheet = context.propertySheets.Get(Shader.Find("Hidden/Custom/Grayscale"));
sheet.properties.SetFloat("_Blend", settings.blend);
context.command.BlitFullscreenTriangle(context.source, context.destination, sheet, 0);
}
}
灰度着色器
Shader "Hidden/Custom/Grayscale"
{
HLSLINCLUDE
#include "Packages/com.unity.postprocessing/PostProcessing/Shaders/StdLib.hlsl"
TEXTURE2D_SAMPLER2D(_MainTex, sampler_MainTex);
float _Blend;
float4 Frag(VaryingsDefault i) : SV_Target
{
float4 color = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.texcoord);
float luminance = dot(color.rgb, float3(0.2126729, 0.7151522, 0.0721750));
color.rgb = lerp(color.rgb, luminance.xxx, _Blend.xxx);
return color;
}
ENDHLSL
SubShader
{
Cull Off ZWrite Off ZTest Always
Pass
{
HLSLPROGRAM
#pragma vertex VertDefault
#pragma fragment Frag
ENDHLSL
}
}
}
解决方案
推荐阅读
- python - 数组的符号导数
- mysql - 1822 (HY000): 添加外键约束失败
- html - 网站未重定向到节点 js 服务器
- math - 给定行列式 a 和 b 时如何在 2x2 矩阵中查找元素
- tableau-api - Tableau 地理制图不显示整个地图
- android - 一个 LiveData 返回 null
- java - 为什么包装器整数值和实际 int 值在变量查看器中显示不同(在 Netbeans 调试模式下)?
- discord - 如何从机器人脚本向频道发送游戏邀请(丰富的存在游戏邀请)?
- python - 如何用 Numpy 而不是 Pandas 计算满足条件的总和
- python - Python for 循环 - 我可以从循环内的条件集中跳过多次迭代吗?