您的位置:首页 > 移动开发 > Unity3D

VS2017下用Graphics Debugger调试UnityShader

2017-11-01 02:47 232 查看

第一步,为shader加特殊代码

为需要断点的Shader加上 “#pragma enable_d3d11_debug_symbols”,如下所示:
Shader "Unlit/NewUnlitShader"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100

Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// make fog work
#pragma multi_compile_fog
#pragma enable_d3d11_debug_symbols  //需要断点调试的Shader加上的

#include "UnityCG.cginc"

struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};

struct v2f
{
float2 uv : TEXCOORD0;
UNITY_FOG_COORDS(1)
float4 vertex : SV_POSITION;
};

sampler2D _MainTex;
float4 _MainTex_ST;

v2f vert (appdata v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}

fixed4 frag (v2f i) : SV_Target
{
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv);
// apply fog
UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}
ENDCG
}
}
}




第二步,打包程序到PC平台,变为 exe 执行文件





第三步,打开VS2017,新建一个C++空项目,然后点击: 文件->打开->项目/解决方案,直接打开刚才打包出来的 test.exe 文件,得到的如下所示:



第四步,点击VS2017的开始调试图形功能,也就是:  调试->图形->启动图形调试(Alt+F5),得到下面的



然后点击开始的按钮,等进入游戏后,进行截屏,可以直接用截屏按钮或者点击捕获帧数,得到如下所示:



双击 10:35:47 的那帧画面,进入 debug 界面,如下所示:



在“呈现目标”面板选中一个像素,然后点击“”像素历史记录“”的面板的小绿色三角形按钮,可以进入VertexShader或者PixelShader 来断点查看具体的参数,如下所示:





最后还需要强调的问题

(1)注意打包的 exe 执行程序是在PC平台上的,因为PC平台上运行的是Directx11,而VS的Graphics Debugger就是为 Directx 的调试专用的。
(2)注意在需要断点调试的Shader加上 “‘#pragma enable_d3d11_debug_symbols”,不加的话,会在查看VertexShader或者PixelShader的具体参数时跳出下面这个异常:



这跟我的另外一篇博客其实是一个样(VS2015环境下)用Visual Studio Graphics Debugger调试Shader

以后可能会很少写博客了,因为太浪费时间了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: