要想通过屏幕后期处理效果实现高度雾,就得知道屏幕中每个像素在世界空间中的坐标。
其中一种方法是:
打开深度纹理,通过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; } }