Shader山下(四)法线贴图

法线向量表示某个点上垂直于该点的向量,而法线贴图(Normal Map)就是保存这些法线的贴图。实际应用中,经常使用法线贴图为低模添加细节。


上图来源于百度百科法线贴图


本文就介绍一下,怎样使用shader来添加法线贴图。

首先依旧是最简单的漫反射shader:

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

		sampler2D _MainTex;

		struct Input {
			float2 uv_MainTex;
		};

		void surf (Input IN, inout SurfaceOutput o) {
			fixed2 texUV = IN.uv_MainTex;
			fixed4 c = tex2D (_MainTex, texUV);
			o.Albedo = c.rgb;
			o.Alpha = c.a;
		}

		ENDCG
	}
	FallBack "Diffuse"
}
在Properties里添加:

_NormalMap ("Normal Map", 2D) = "white" {}

并在SubShader的 CGPROGRAM之后,surf方法之前添加:

sampler2D _NormalMap;

这样我们就可以在编辑器里看到多了一个Normal Map的选项了。

在Input结构里添加:

half2 uv_NormalMap;

这样我们就可以在surf方法里调用法线贴图的纹理坐标了。

修改surf方法:

		void surf (Input IN, inout SurfaceOutput o) {
			fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
			o.Albedo = c.rgb;
			o.Alpha = c.a;
			fixed3 n = UnpackNormal(tex2D (_NormalMap, IN.uv_NormalMap));
			o.Normal = n;
		}

导入下面这张图片:


或者自己找一个也没关系,记得Texture Type设置为Normal Map。(注:因为法线一般都偏向z轴方向,所以法线贴图一般偏蓝色)

为使用本文shader的材质设置Normal Map,并把它应用在场景对象上,我们就可以看到:


添加主贴图后的效果:


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值