官术网_书友最值得收藏!

How it works...

The actual math to perform the normal mapping effect is definitely beyond the scope of this chapter, but Unity has done it all for us already. It has created the functions for us so that we don't have to keep doing it over and over again. This is another reason why Surface Shaders are a really efficient way to write shaders.

If you look in the UnityCG.cginc file found in the Editor | DataCGIncludes folder in your Unity installation directory, you will find the definitions for the UnpackNormal() function. When you declare this function in your Surface Shader, Unity takes the normal map provided and processes it for you, giving you the correct type of data so that you can use it in your per-pixel lighting function. It's a huge time-saver! When sampling a texture, you get RGB values from 0 to 1; however, the directions of a normal vector range from -1 to 1. UnpackNormal() brings these components into the right range.

Once you have processed the normal map with the UnpackNormal() function, you send it back to your SurfaceOutput struct so that it can be used in the lighting function. This is done by using o.Normal = normalMap.rgb;. We will see how the normal is actually used to calculate the final color of each pixel in Chapter 4, Understanding Lighting Models.

主站蜘蛛池模板: 平罗县| 洪泽县| 廊坊市| 东光县| 铁岭市| 嫩江县| 浦东新区| 信宜市| 邢台市| 喀什市| 凤山市| 祥云县| 长阳| 黑龙江省| 古蔺县| 凤山县| 耒阳市| 沁阳市| 海盐县| 子长县| 瓮安县| 阳朔县| 蚌埠市| 班戈县| 天台县| 三亚市| 宜兰县| 常熟市| 新河县| 蒲江县| 五大连池市| 石家庄市| 松潘县| 康保县| 梓潼县| 富平县| 宽甸| 太和县| 电白县| 墨竹工卡县| 高青县|