Unity 立方天模拟天空盒shader
时间: 2024-03-03 10:26:00 浏览: 124
在Unity中,使用Skybox来模拟天空是非常常见的。而立方天(Cubemap)就是一种用于渲染Skybox的贴图。下面是一个简单的天空盒Shader示例代码,可以让你在Unity中使用Cubemap来模拟天空。
```C#
Shader "Custom/Skybox" {
Properties {
_MainTex ("Cubemap", Cube) = "white" {}
_Color ("Tint Color", Color) = (1,1,1,1)
}
SubShader {
Tags {"Queue"="Background" "RenderType"="Background"}
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata {
float4 vertex : POSITION;
};
struct v2f {
float4 pos : SV_POSITION;
float3 worldPos : TEXCOORD0;
};
samplerCUBE _MainTex;
float4 _MainTex_ST;
float4 _Color;
v2f vert (appdata v) {
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.worldPos = mul((float3x3)UNITY_MATRIX_IT_MV, v.vertex).xyz;
return o;
}
fixed4 frag (v2f i) : SV_Target {
fixed4 col = texCUBE(_MainTex, i.worldPos);
col.rgb *= _Color.rgb;
return col;
}
ENDCG
}
}
FallBack "Skybox/Cubemap"
}
```
在这个Shader中,使用了一个Cube属性来接收Cubemap贴图,并且使用了一个_Color属性来调整天空的颜色。在顶点着色器中,将世界坐标和投影矩阵相乘,将其转换为屏幕空间坐标,并在输出中传递了世界坐标。在片段着色器中,使用了texCUBE函数来从Cubemap贴图中获取颜色,并将_Color属性应用于颜色。
在使用这个Shader时,只需将其附加到Skybox材质上即可。
阅读全文