要想通过屏幕后期处理效果实现高度雾,就得知道屏幕中每个像素在世界空间中的坐标。

其中一种方法是:

打开深度纹理,通过uv坐标和深度计算出屏幕中每个像素在NDC中的坐标,再通过世界坐标到投影空间的转换矩阵的逆矩阵来变换,即可得到其在世界空间中的坐标。

但此种方法需要在 fragment shader 中进行矩阵乘法计算,而这通常会影响游戏性能。

转载请注明出处:https://www.cnblogs.com/jietian331/p/9441440.html

c#代码:

using UnityEngine;

[RequireComponent(typeof(Camera))]
public abstract class PostEffectRenderer : GameBehaviour
{
    [SerializeField]
    Material m_material;

    Camera m_camera;


    protected abstract string ShaderName { get; }

    protected Material Mat
    {
        get
        {
            if (!m_material)
            {
                Shader shader = Shader.Find(ShaderName);
                if (shader != null && shader.isSupported)
                    m_material = new Material(shader);
                else
                    NotSupport();
            }
            return m_material;
        }
    }

    protected Camera SelfCamera
    {
        get
        {
            if (!m_camera)
                m_camera = GetComponent<Camera>();
            return m_camera;
        }
    }


    void Start()
    {
        if (!SystemInfo.supportsImageEffects)
            NotSupport();
    }

    protected virtual void OnRenderImage(RenderTexture src, RenderTexture dest)
    {
        Graphics.Blit(src, dest, Mat);
    }

    protected void NotSupport()
    {
        Debug.LogError(string.Format("{0} not support!", this.GetType().Name));
        enabled = false;
    }

}
基类

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-25
  • 2022-12-23
  • 2021-04-26
  • 2019-07-04
  • 2019-07-05
猜你喜欢
  • 2022-12-23
  • 2022-01-17
  • 2022-12-23
  • 2021-10-20
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案