版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lxt610/article/details/91344607
1、Unity Shader的形态
2、ShaderLab基本结构
shader "name"{ [Properties] SubShaders [FallBack] }
- Properties的作用是能够允许在Unity材质(material)检视面板中为材质去定义一些需要的参数,如颜色、贴图、参数等,这些都属于原材料,被shader程序使用。
- SubShader的作用就是专门为GPU渲染所编写的shader程序片段,在一个shader当中有并且至少需要一个SubShader,也可以有多个SubShader,但是在执行时只能选择其中的一个SubShader。那为什么允许多个SubShader同时存在呢?原因是shader中的某一种算法或者某一种指令可能不支持当前的硬件,比如说一个shader程序有多个SubShader,当这个shader程序被执行的时候,首先会去检测当前硬件能不能完好地支持第一个SubShader,如果第一个SubShader可以被当前硬件良好支持,那么就会使用当前SubShader,如果不能,那么就去检测下一个SubShader。在编写shader时,假如不能确定当前的SubShader在某些老旧的硬件上得到良好的支持,可以编写第二个SubShader,用来适配这些老旧的、稍差的图形硬件,当然也可以继续编写第三个、第四个、第五个等等,编写的SubShader功能要依次简化、运算指令依次简单,用来满足更多的硬件支持。如果编写的SubShader都不能支持当前的硬件时,就需要用到ShaderLab的“FallBack”功能了。
- FallBack的意思就是回滚。如果当前硬件无法支持所有的SubShader时,Unity会将当前的着色回滚,回滚到FallBack所指定的shader,因此FallBack指令后跟随的一般都是系统自带比较简单的,能够被绝大多数硬件执行的shader。以下列举了几个Unity官方的内建的shader,更加具体的信息可以查阅Unity官方手册。
Unity Build-In Shader
- Unlit. This is just a texture,not affected by any lighting.(不发光。这只是一个纹理,不被任何光照影响)
这是Unity中最为简单的shader,执行效率非常快,该shader经常被用于UI系统。- VertexLit.(顶点光照)
该shader拥有在顶点上渲染光照的能力。- Diffuse.(漫反射)
漫反射也是一种光照形态,不过它不仅仅在顶点上进行光照计算,在片段程序中也要进行光照计算。- Normal Mapped.This is a bit more expensive than Diffuse:it adds more texture(normal map),and a couple of shader instructions.(法线贴图,比漫反射更昂贵:增加了一个或更多纹理(法线贴图)和几个着色器结构)
- Specular.This adds specular highlight calculation.(高光。增加了特殊的高光计算)
Specular指的是镜面高光反射,主要用于模拟光滑物体,比如金属、玻璃等。- Normal Mapped Specular.Again,this is a bit more expensive than Specular.(高光法线贴图。比高光更昂贵一点)
该shader结合了以上两点,既有法线贴图,又有高光显示。- Parallax Normal mapped.This adds parallax normal-mapping calculation.(视差法线贴图。增加了视差法线贴图计算)
- Parallax Normal Mapped Specular.This adds both poarallax normal-mapping and specluar highlight calculation.(视差高光法线贴图。增加了视差法线贴图和镜面高光计算)
3、总结
文章来源: https://blog.csdn.net/lxt610/article/details/91344607