Unity编写添加法线贴图的Shader - 二

Unity编写添加法线贴图的Shader

法线贴图的作用再次就不做过多赘述了,不了解的自己查一下即可,下面以实际例子展示添加法线贴图的模型与没有添加法线贴图的区别。


下图为两个相同的模型,

左侧的为添加了基本贴图、法线贴图两个贴图;

右侧模型只添加了基本贴图;

对比标注相同颜色的箭头处,比较添加法线贴图和没有添加法线贴图模型的区别

可以看出添加法线贴图的模型线条比较明显,有凹凸感




创建Shader脚本Base.shader(在Project面板右键Create-Shader),双击打开脚本编写让其只包含基本贴图

Shader "Custom/Base" {
	Properties {
	   //基本贴图
		_MainTex ("Base (RGB)", 2D) = "white" {}
	}
	SubShader {
		Tags { "RenderType"="Opaque" }
		LOD 200
		
		CGPROGRAM
		#pragma surface surf Lambert

		sampler2D _MainTex; //在CG模块重新声明一下  _MainTex
		
		struct Input {
			float2 uv_MainTex;  		
		};

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


创建Shader脚本NormalMapShader.shader(在Project面板右键Create->Shader),双击打开脚本编写让其只包含基本贴图

Shader "Custom/NormalMapShader" {
	Properties {
	   //基本贴图
		_MainTex ("Base (RGB)", 2D) = "white" {}
		//法线贴图
		_NormalMaping("NormalMaping", 2D) = "bump" {}
	}
	SubShader {
		Tags { "RenderType"="Opaque" }
		LOD 200
		
		CGPROGRAM
		#pragma surface surf Lambert

		sampler2D _MainTex; //在CG模块重新声明一下  _MainTex
		sampler2D _NormalMaping; //在CG模块重新声明一下  _NormalMaping

		struct Input {
			float2 uv_MainTex;  
			float2 uv_NormalMaping; 
		};

		void surf (Input IN, inout SurfaceOutput o) {
			half4 c = tex2D (_MainTex, IN.uv_MainTex);
			// 提取法线值,UnpackNormal接受一个fixed4的输入,并将其转换为相应的法线值(fixed3)
			o.Normal = UnpackNormal(tex2D(_NormalMaping, IN.uv_NormalMaping));
			o.Albedo = c.rgb;
			o.Alpha = c.a;
		}
		ENDCG
	} 
	FallBack "Diffuse"
}


脚本编写完成,然后创建材质球

在Project面板右键Create -> Material,我再次创建了两个材质球,一个aaa, 一个bbb

选中 aaa材质球在Inspector面板选择需要的Shader


选好后界面如下




选中bbb材质球在Inspector面板选择需要的Shader


选好后如下


然后分别为aaa材质球和bbb材质球选择相应的贴图图片



上图中那张蓝紫色的图片即为法线贴图,在aaa材质球上自行选上此处略

选好后如下



分别将aaa材质球和bbb材质球拖拽给两个蜘蛛模型,效果如最上边的图所示












  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值