Unity双面材质Shader

这篇博客介绍了如何在Unity中创建一个双面材质Shader,分别处理正面和背面的渲染。Shader代码详细展示了如何设置漫反射、法线贴图、高光度等参数,并提供了正面和背面不同的渲染效果。通过这个Shader,可以在3D场景中实现衣物等物体的特殊渲染需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Unity双面材质Shader。

正面渲染支持漫反射贴图、法线贴图、高光度等。背面渲染支持漫反射贴图。

Shader代码如下:

Shader "LiangHaoXiangShaders/DoubleFace" 
{
	Properties
	{
		_Color("Main Color", Color) = (1,1,1,1)
		_SpecColor("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
		_Shininess("Shininess", Range(0.03, 1)) = 0.078125
		_MainTex("MainTex", 2D) = "white" {}
		_NormalTex("NormalTex", 2D) = "bump" {}
		_BackColor("Back Main Color", Color) = (1,1,1,1)
	}

	SubShader
	{
		Tags { "RenderType" = "Opaque" }
		LOD 400
		//背面剔除
		Cull back
		CGPROGRAM
			#pragma surface surf BlinnPhong
			sampler2D _MainTex;
			sampler2D _NormalTex;
			fixed4 _Color;
			half _Shininess;

			struct Input 
			{
				float2 uv_MainTex;
				float2 uv_NormalTex;
			};

			void surf(Input IN, inout SurfaceOutput o)
			{
				fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
				o.Albedo = tex.rgb * _Color.rgb;
				o.Gloss = tex.a;
				o.Alpha = tex.a * _Color.a;
				o.Specular = _Shininess;
				o.Normal = UnpackNormal(tex2D(_NormalTex, IN.uv_NormalTex));
			}
		ENDCG

		//正面剔除
		Cull front
		CGPROGRAM
			#pragma surface surf Lambert
			sampler2D _MainTex;
			fixed4 _BackColor;
			struct Input 
			{
				float2 uv_MainTex;
			};

			void surf(Input IN, inout SurfaceOutput o) 
			{
				fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _BackColor;
				o.Albedo = c.rgb;
				o.Alpha = c.a;
			}
		ENDCG
	}
	FallBack "Specular"
}

效果如下图所示:

材质面板

场景中这一件衣服使用材质

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值