【发布时间】:2021-06-09 18:03:06
【问题描述】:
我是 Unity 中着色器编码的新手(实际上也是一般的着色器)。我最近一直在尝试通过对深度纹理进行采样并使用它在渲染视图和恒定颜色之间进行混合来创建基本的雾效果,但是我无法从深度纹理中获取信息。
据我了解,以下代码应仅在应用此材质的任何对象上显示屏幕空间中的深度纹理,但我的测试对象仅显示无阴影的纯灰色。我也做了一些其他测试,我认为正在发生的事情是,当我尝试从深度纹理中采样时,它总是返回 0.5 秒的固定 4,但我不明白为什么。
我知道我可能在这里犯了一些有趣的菜鸟错误,但我是菜鸟,所以任何帮助将不胜感激。谢谢
Shader "Hidden/Atmosphere"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Scale ("Scale", float) = 1
}
SubShader
{
// No culling or depth
Cull Off ZWrite Off ZTest Always
GrabPass{"_Post"}
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
};
struct v2f
{
float4 ScreenPos : TEXCOORD0;
float4 vertex : SV_POSITION;
};
float _Scale;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.ScreenPos = ComputeScreenPos(o.vertex);
return o;
}
sampler2D _Post;
sampler2D _CameraDepthTexture;
fixed4 frag (v2f i) : SV_Target
{
float2 ScreenspaceUV = i.ScreenPos.xy/ i.ScreenPos.w;
//fixed4 col = tex2D(_Post, ScreenspaceUV);
fixed4 col = tex2D(_CameraDepthTexture, ScreenspaceUV);
//col = fixed4(i.ScreenPos.x/i.ScreenPos.w, i.ScreenPos.y/i.ScreenPos.w, 0, 1);
//col.rgb = 1 - col.rgb;
return col;
}
ENDCG
}
}
}
【问题讨论】: