unity 优化之overdraw查看
scene视图里面能直接看,打开左上角那个下拉选项,选择overdraw就行
转载篇在game视图下查看overdraw: https://blog.csdn.net/complicatedcc/article/details/70214681
c#代码,要挂在摄像机上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 这个脚本挂在摄像机上才能正确运行 /// </summary> [RequireComponent( typeof (Camera))] public class DebugOverdrawMode : MonoBehaviour { public Shader m_OverdrawShader; private Camera m_Camera; private bool m_SceneFogSettings = false ; private CameraClearFlags m_ClearFlagSetting; private Color m_BackGroundColor; void Awake() { m_Camera = GetComponent<Camera>(); StoreParam(); } //void OnLevelWasLoaded() //{ // //每次场景加载取消雾效,缓存并在OnDisable后恢复 // m_SceneFogSettings = RenderSettings.fog; // RenderSettings.fog = false; //} void StoreParam() { m_SceneFogSettings = RenderSettings.fog; RenderSettings.fog = false ; m_ClearFlagSetting = m_Camera.clearFlags; m_BackGroundColor = m_Camera.backgroundColor; } void OnEnable() { if (m_OverdrawShader == null ) { m_OverdrawShader = Shader.Find( "Custom/Overdraw" ); //m_OverdrawShader = UnityEditor.EditorGUIUtility.LoadRequired("SceneView/SceneViewShowOverdraw.shader") as Shader; //应用unity自带shader即可达到相同效果 } if (m_OverdrawShader != null && m_Camera != null ) { RenderSettings.fog = false ; m_Camera.clearFlags = CameraClearFlags.Color; m_Camera.backgroundColor = Color.black; m_Camera.SetReplacementShader(m_OverdrawShader, "" ); bChanged = true ; } } void OnDisable() { if (m_Camera != null ) { RestoreParam(); } } void RestoreParam() { RenderSettings.fog = m_SceneFogSettings; //m_Camera.SetReplacementShader(null, ""); //和下面效果相同 m_Camera.ResetReplacementShader(); m_Camera.backgroundColor = m_BackGroundColor; m_Camera.clearFlags = m_ClearFlagSetting; } //测试方法 为了方便切换 可在非运行模式下测试 bool bChanged; bool bInited; [ContextMenu( "ChangeMode" )] public void ChangeMode() { if (bChanged) { RestoreParam(); } else { if (!bInited) { m_Camera = GetComponent<Camera>(); StoreParam(); m_OverdrawShader = Shader.Find( "Custom/Overdraw" ); bInited = true ; } RenderSettings.fog = false ; m_Camera.clearFlags = CameraClearFlags.Color; m_Camera.backgroundColor = Color.black; m_Camera.SetReplacementShader(m_OverdrawShader, "" ); } bChanged = !bChanged; } } |
shader代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | Shader "Custom/Overdraw" { SubShader { Tags { "RenderType" = "Transparent" "Queue" = "Transparent" } LOD 100 Fog { Mode Off } ZWrite Off ZTest Always Blend One One Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; }; struct v2f { float4 vertex : SV_POSITION; }; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); return o; } fixed4 frag (v2f i) : SV_Target { return fixed4(0.1, 0.04, 0.02, 0); } ENDCG } } } |
不过作者说这个不完全对,但是可以大概看下overdraw情况
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~