关键词不能为空

当前您在: 主页 > 英语 >

Unity3D内部Shader详解

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-03-01 01:47
tags:

-

2021年3月1日发(作者:interactive)


Unity3D Built-in Shader


详解一



Unity3D



Shader



Unity


里面的


Shaders


是使用一种叫


ShaderLab


的语言编写的,它同微软的


.FX


文件或者


NVIDIA



CgFX


有些类似。传统意义上的


vertex shader



pixel shader


还是使用标准的


Cg/HLSL


编程 语言


编写的。



因此

< br>Unity


文档里面的


Shader


都是指用


ShaderLab


编 写的代码)



然后我们来看下


Unit y3D





60


多个


Shader






Shader



分为五


个大


类:< /p>


Normal,Transparent,Transparent


Cutout,Self-llluminated,Reflective

< p>
。由于数量比较多,将分几个篇幅一一介绍。




(



)


Normal


Shader


Family


这个家族一共


9



Shader



都 是针对不透明的对象的。


(1)


Vertex- Lit




最简单的一种


Shader


之一,所有照射在该物体上的光在一个


Pass


里面渲染完,光源只在顶点计算。


所以不会有任何基于 像素渲染得效果,比如说:


normal mapping,light cookie s



shadows.


这个

< p>
shader


对模型的剖分(将一个物体从几何描述变为多边形表示的过程 )非常敏感,如果你将一个点


光源放在很靠近一个立方体的一个顶点那里,并且对立方体 使用这个


shader


,光源只会在角落计算。


基于像素光照的


shader


对剖分没有要求,在表现 圆形高光上效果也很好。如果上述情况时你想要的


效果,


你可以 考虑使用一个基于像素光照的


shader


或者增加模型的剖分 。


(增加顶点数)



总的来说,


这个


shader


的渲染代价比较小。这个< /p>


shader


包含了


2

< br>个


subshader


,分别对应可编成管线和固定管< /p>


线。是所有硬件都支持的一个最基本的


shader


。如果设备支持可编成管线,那使用可编成管线的


subshader


,否则使用固定管线的。





(2) Diffuse



Diffuse


基 于一个简单的光照模型


-Lambertian


,光照强度随着 物体表面和光入射角


夹角的减小而减小


(


即光垂直于表面时强度最大


)



光照 的强度只和该角度有关系,


和摄像机无关。由


于这是一个基于像 素光照的


shader



因此他有这类


shader


的优势,


同时他需要设备 支持可编程管线,


如果设备不支持,则自动使用


Vertex- Lit


这个


Shader


< p>


总的来说,这个


shader

< br>渲染代价比较小。





(3)


Specular


Specular


使用和


Diffu se


相同的光照模型,但是添加了一个和观察角度相关的反射高


光。这个被称为


Blinn-Phong


光照模型。他包含了一 个反射强光,


这个反射高光物体表面角度,


光的


入射角度以及观察者角度都有关系。


这种高光计算方法实际上是对实时光源模糊 反射的一种具有可行


性的模拟。模糊的等级通过


inspect or


里面


Shininess


这个变量 控制。



主纹理的


alpha


通道被用来


当作


Specular Map


来使用(有时候也称


gloss map



,


它定义了物体的反光率。纹理中

< br>alpha


里面全




的部分将完全不反光(即反光率为


0%


)。


而全白的的部分反光率为


100%


。这个< /p>


Map


在你的物体在


不同的部分有不同的 反光率的时候非常有用。比如说,


锈迹斑斑的金属会反光率低,而磨光的金属反


光率比较高。口红的反光率比皮肤高,而皮肤的反光率比棉质衣服高。一个精心制作的

< p>
Specular


Map


将会让玩家身临其境。 如果目标设备不支持可编程管线,则自动使用


Vertex-Lit

这个


Shader



< p>



shader


的渲染 代价会比较大。





(4)Bumped Diffuse



Diffuse Shader


一样 ,这个


Shader


基于


Lamber tian


光照模型,同时使用了


normal


mapping


技术来增加物体表面细节。


相对于通过 增加剖分来表现物体表面细节的方式,


normal


mapp ing


并不改变物体的形状,


而是使用一张称为


Normal


Map


的特殊纹理来达到这种效果。< /p>



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



Specula r


一样的光照模型,


相比


Specul ar


而言,


它使用一张


Tangent


Space


Normal Map


来 描述物体表面法向量的变化,来增加物体细节。(关于


normal map


具体见


Bumpped


Dif fuse


)如果调用失败,则使用


Specular

< p>
这个


shader


,一般而言,这个


shader


的渲染代价会比较


大。




(6) Parallax Diffuse Parallax Normal mapped


与传统的


normal mapped

< p>
一样,但是对“深度”的


模拟更佳。额外的深度效果是通过


Height Map


(高度图)来实现的。


Height Map



Normal map



alpha


通道里面保存。全黑表示么有高度,而白色表示有高度。 通常这用来表现石头或者砖块间的裂


缝。


Parallax mapping


的技术很简单,因此会有些人工痕迹或者不太正常的效果出现。尤其是, 急


剧陡峭的高低转换在高度图里面应该避免。在


inspect or


里面调整


height


数值来调整 高度的范围,


有时候会造成物体不真实,


凌乱的情况。


因此建议使用高度变化平缓的高度图或者将高度数值设置比


较低,让表面 看起来比较平缓。



这个


shader


的渲染代价相比


bumped diffuse


而言更大。如果调用


这个


Shader


失败,则自动使用


Bumped Diffuse





(7) Parallax Specular



Bumped Spcular


相比,增加了一张


Height Map


来描述深度细节。关于


Height Map


,见


parallax Diffuse


。如果调用失败,则调用


Bumped Spe cular


这个


Shader







(8) Decal


这个


Shade r



unity


文档里面的描述和


Unity3.0


有明显的实现区别,文档由于比较老,

< p>
07


年写的,官网下的


Built-in


Shader


里面,


decal


是使用可编程管线实现的,就是说,如果你的机


器不支持可编程管线,


会使用


diffuse


因为


diffuse


也不需要可编程管线,


所以只能使用


vertex-lit



这个


Shader


除了主纹理之外,

< br>这个


Shader


还是用了第二张纹理用来描述细节。< /p>


第二张用来


Decal(




)


的纹理使用


alpha


通道来确定是否覆盖主纹理。贴花用的纹理只是对主纹理的补充。比如说你有

< p>
一个砖砌的墙壁,


你可以使用一个砖块的纹理作为主纹理,


然后使用带有


alpha


通道的


Decal


纹理在


墙壁的不同地方涂鸦。



(9) Diffuse Detail


这是一个普通的


diffuse shader


加上一些额外数据的


shader


。它允许你定义


第二张纹理,称为


Detail


Text ure


。当


camera


靠近的时候,


Detail


Texture


逐渐显 示出来,一般用


于地形。比如说,当你使用一张低分辨率的纹理拉升到整个地形上的时候 。随着


camera


逐渐拉近,


低分辨 率的纹理开始模糊,这不是我们想要的效果。为了避免这个效果,创建一张


Detail


纹理会将


地形


tile


化。在这种模式下,随着


camera


逐渐拉近,额外 的细节将会出现以避免出现模糊的效果。



Detail


纹理是覆盖在主纹理上面的。


Detail


纹理中深色的部分将会使得主纹理变深,而淡色的部分


将会使主纹理变亮,


Detail


纹理通常是浅灰色。


(



Decal


里面


Decal


纹理不同的是,


Decal


纹理是


RGBA


,通过


alpha


控制


Decal Texture



Main Texture

< br>的融合,而


Detail


的纹理是


RGB


,直接是两


张纹理的


rgb< /p>


通道分别相乘再


*2


< br>就是说,


Detail


纹理中颜色数值

< br> =


0.5


不会改变主纹理颜色,

>0.5


会变亮,


<0.5


加深< /p>


)



Unity Built-in Shader


详解二



这次主要讨论< /p>


Unity


自带的


Shader



Transparent Shader Family




这个家族的


Shader


一共


7


种 ,


原理和类型与


Normal


中的上差 不多,


只不过这些


Shader


是用< /p>


在半透明或者全透明的物体上面的。


他们的主纹理接受

< p>
RGBA4


个通道。


如果你的模型一部分是半透明 ,


一部分是不透明的。请分开使用两张材质,半透明的材质这个家族的

< br>Shader


。这个家族的


Shader



内容和


Normal


中同名 的几乎一样,只是添加了半透明效果,因此不再做重复介绍。





通过读取纹理中的


al pha


值,


这个


Transparen t


家族的


shader


可以让模型变成 半透明或者全


透明的。在


alpha


中 ,


0


表示全透明,


255


表示全白。如果你的主纹理不包含


alpha


通道, 那么这个


物体将会变成不透明的。





在游戏中使用半透明的物体是比较有技巧性的, 因为他们经常会导致排序问题。比如说,如


果你透过两个窗口观察物体,


发觉物体很异样,


恭喜你,你正在经历着每个人都会遇到的使用半透明


对象的问题。


一条具有普遍性的规则是:


有些时 候一个半透明的对象会很诡异的绘制在另外一些对象


前面,尤其当这些对象是互相交叉的 ,


或者一个把另一个包围的抑或是。为此,当你需要半透明对象

-


-


-


-


-


-


-


-



本文更新与2021-03-01 01:47,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/685058.html

Unity3D内部Shader详解的相关文章

  • 余华爱情经典语录,余华爱情句子

    余华的经典语录——余华《第七天》40、我不怕死,一点都不怕,只怕再也不能看见你——余华《第七天》4可是我再也没遇到一个像福贵这样令我难忘的人了,对自己的经历如此清楚,

    语文
  • 心情低落的图片压抑,心情低落的图片发朋友圈

    心情压抑的图片(心太累没人理解的说说带图片)1、有时候很想找个人倾诉一下,却又不知从何说起,最终是什么也不说,只想快点睡过去,告诉自己,明天就好了。有时候,突然会觉得

    语文
  • 经典古训100句图片大全,古训名言警句

    古代经典励志名言100句译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。3良言一句三冬暖,恶语伤人六月寒。喷泉的高度不会超过它的源头;一个人的事

    语文
  • 关于青春奋斗的名人名言鲁迅,关于青年奋斗的名言鲁迅

    鲁迅名言名句大全励志1、世上本没有路,走的人多了自然便成了路。下面是我整理的鲁迅先生的名言名句大全,希望对你有所帮助!当生存时,还是将遭践踏,将遭删刈,直至于死亡而

    语文
  • 三国群英单机版手游礼包码,三国群英手机单机版攻略

    三国群英传7五神兽洞有什么用那是多一个武将技能。青龙飞升召唤出东方的守护兽,神兽之一的青龙。玄武怒流召唤出北方的守护兽,神兽之一的玄武。白虎傲啸召唤出西方的守护兽,

    语文
  • 不收费的情感挽回专家电话,情感挽回免费咨询

    免费的情感挽回机构(揭秘情感挽回机构骗局)1、牛牛(化名)向上海市公安局金山分局报案,称自己为了挽回与女友的感情,被一家名为“实花教育咨询”的情感咨询机构诈骗4万余元。

    语文