Unity3D Built-in Shader,unity3d内置shader详解1

来源:互联网 发布:网络机房维保方案 编辑:程序博客网 时间:2024/04/29 10:44
http://wenku.baidu.com/view/e82c4e196bd97f192279e922.html

Unity3D置了很多Shader,文详细,自己翻一下.便于加深印象. 

      首先先解Unity3D的Shader.Unity里面的Shaders是使用一ShaderLab的编写的,同微.FX文件或者NVIDIA的CgFX有些似。传统上的vertex shader和pixel shader 是使用准的Cg/HLSL 编写的。(因此Unity文里面的Shader,都是指用ShaderLab编写的代

      然后我们来看下Unity3D自60多Shader。 Shader被分Normal,Transparent,Transparent Cutout,Self-llluminated,Reflective。由于量比多,分几篇幅一一介

      (一) Normal Shader Family

      这个家族一共9Shader,都是针对不透明的象的。

      (1) Vertex-Lit:

      最简单的一Shader之一,所有照射在物体上的光在一Pass里面渲染完,光源只在算。所以不有任何基于像素渲染得效果,比如normal mapping,light cookies和shadows.这个shader模型的剖分(物体几何描述变为形表示的程)非常敏感,如果你将点光源放在很靠近一立方体的一个顶点那里,立方体使用这个shader,光源只在角落算。基于像素光照的shader剖分有要求,在表现圆形高光上效果也很好。如果上述情况时你想要的效果,可以考使用一基于像素光照的shader或者增加模型的剖分。(增加

      来说这个shader的渲染代价比小。这个shader包含了2subshader,分别对应成管线和固定管线。是所有硬件都支持的一最基本的shader。如果设备支持可成管线,那使用可成管线subshader,否使用固定管线的。

      (2) Diffuse:

      Diffuse基于一个简单的光照模型-Lambertian,光照强度着物体表面和光入射角角的小而(即光垂直于表面强度最大)。光照的强度只和角度有系,和像机无。由于是一基于像素光照的shader,因此他有这类shader的优势,同他需要设备支持可程管线,如果设备不支持,使用Vertex-Lit这个Shader。

      来说这个shader渲染代价比小。

      (3) Specular

      Specular 使用和Diffuse相同的光照模型,但是添加了一察角度相的反射高光。这个称为Blinn-Phong光照模型。他包含了一反射强光,这个反射高光物体表面角度,光的入射角度以及察者角度都有系。这种高光算方法实际上是对实时光源模糊反射的一具有可行性的模。模糊的等inspector里面Shininess这个变量控制。

      主理的alpha通道被用来当Specular Map使用(有候也gloss map),了物体的反光率。理中alpha里面全黑 的部分完全不反光(即反光率0%)。而全白的的部分反光率100%。这个Map在的物体在不同的部分有不同的反光率的候非常有用。比如迹斑斑的金属会反光率低,而磨光的金反光率比高。口的反光率比皮高,而皮的反光率比棉衣服高。一精心制作的Specular Map将会让玩家身其境。如果目标设备不支持可程管线使用Vertex-Lit这个Shader。

       这个shader的渲染代价

       (4)Bumped Diffuse

       同Diffuse Shader一这个Shader基于Lambertian光照模型,同使用了normal mapping技术来增加物体表面细节。相于通增加剖分物体表面细节的方式,normal mapping不改物体的形,而是使用一张称为Normal Map的特殊来达这种效果。在normal map中,每象素的色代表了像素所在物体表面的法线,然后通过这个线(而不是通物体模型算而的法线来计算光照。可以Normal Map在算光照的程中“高效地修改”了整模型

       如何Normal maps:可以通过导入一普通的灰度(白色表示凸起,黑色表示凹Unity动将它转换为Normal Map。

       技术细节里使用Normal map是一Tangent space Normal Map”,Tangent space(正切空)是一模型物体表面的空。在这个中,z终从表面指向外面。Tangent space Normal Map相于另一称为Object space Normal Map”来说有点复杂,但是他有一些优势1)可以使用在各奇形怪的表面  2)便于在同一物体不同域或者不同物体间复

        具体Tangent Space Normal Map和Object Space Normal Map的区别,下次再

        如果这个shader失则会调Diffuse这个shader,一般而言,shader渲染代价低。

        (5) Bumped Specular

        和Specular一的光照模型,相比Specular而言,使用一Tangent Space Normal Map描述物体表面法向量的化,增加物体细节。(normal map具体Bumpped Diffuse)如果用失使用Specular这个shader,一般而言,这个shader的渲染代价大。

        (6) Parallax Diffuse

        Parallax Normal mapped与传统normal mapped一,但是“深度”的模更佳。外的深度效果是通Height Map(高度来实现的。Height Map在Normal map的alpha通道里面保存。全黑表示有高度,而白色表示有高度。通常或者砖块间的裂

        Parallax mapping的技简单,因此有些人工痕迹或者不太正常的效果出。尤其是,陡峭的高低转换在高度里面应该避免。在inspector里面height数值来调整高度的范,有造成物体不真实,凌的情。因此建使用高度化平的高度或者高度数值设置比低,表面看起

        这个shader的渲染代价相比bumped diffuse而言更大。如果这个Shader失使用Bumped Diffuse。

        (7) Parallax Specular

        Bumped Spcular相比,增加了一Height Map描述深度细节Height Map,parallax Diffuse。如果用失则调Bumped Specular这个Shader。

        (8) Decal

        这个Shader在unity文里面的描述和Unity3.0有明实现区别,文由于比老,07年的,官下的Built-in Shader里面,decal是使用可程管线实现的,就是,如果的机器不支持可程管线使用diffuse,因diffuse也不需要可程管线,所以只能使用vertex-lit。这个Shader除了主理之外,这个Shader是用了第二张纹理用描述细节。第二Decal()的理使用alpha通道确定是否覆盖主理。花用的理只是理的充。比如说你有一个砖砌的壁,可以使用一个砖块理作理,然后使用alpha通道的Decal理在壁的不同地方涂

        (9) Diffuse Detail 

        是一普通的diffuse shader加上一些据的shader。许你第二张纹理,称为Detail Texture。camera靠近的候,Detail Texture逐渐显示出,一般用于地形。比如当你使用一低分辨率的理拉升到整地形上的候。camera逐拉近,低分辨率的始模糊,不是我想要的效果。了避免这个效果,建一Detail 会将地形tile化。在这种模式下,着camera逐拉近,外的细节将会以避免出模糊的效果。

        Detail 理是覆盖在主理上面的。Detail理中深色的部分将会使得主深,而淡色的部分将会使主亮,Detail理通常是灰色。(Decal里面Decal理不同的是,Decal理是RGBA,通alpha控制Decal TextureMain Texture的融合,而Detail的理是RGB,直接是两张纹理的rgb通道分相乘再*2,就是Detail理中数值 = 0.5不,>0.5会变亮,<0.5加深)


原创粉丝点击