关键词不能为空

当前您在: 主页 > 英语 >

Unity内置Shader详解

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

-

2021年3月1日发(作者:莱昂内尔)


Unity3D Built-in Shader,unity3d




shader


详解

< br>




unity3d


内置了很多


Shader,


文档很详细


,


自己翻一下


.


便于 加深印象


.













< br>首先先解释下


Unity3D




里面的


Shaders


是使用一种叫< /p>


ShaderLab


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

< br>.FX


文件或




NVIDIA



CgFX


有 些类似。传统意义上的


vertex


shader



pixel


shader


还是使用标准的


Cg/HLSL


编程 语言编写的。


(因此


Unity


文档里 面的


Shader


,都是指用


Shad erLab


编写的代码)















然后我们来看下


Unity3D


自带的


60


多个


Shader




这些


Shader


被分为五个大类:


Normal,Tr ansparent,Transparent Cutout,Self-llluminated,Refl ective



由于数量比较多,


将分 几个


篇幅一一介绍。














(



) Normal Shader Family













< br>这个家族一共


9



Shader


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














(1) Vertex- Lit





















< br>最简单的一种


Shader


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


Pass


里面渲染完,


光源只 在顶点计算。所以不会有任何基于像素渲染得效果,比如



说:


normal


mapping,light


cookies



shadows.


这个


sh ader


对模型的剖分(将一个物体从几何描述变为多边形表示的过

程)非常敏感,如果你将一个点光源放在很靠近一



个立方 体的一个顶点那里,并且对立方


体使用这个


shader


,光源只会在角落计算。基于像素光照的


shader


对剖分没有要求,在表


现圆形高光上效果也很



好。如果上述情况时你想要的效果,你可以考虑使用一个基于像素


光照 的


shader


或者增加模型的剖分。


(增加顶点数)














< br>总的来说,


这个


shader


的 渲染代价比较小。


这个


shader


包 含了


2



subshader



分别对应可编成管线和固定管线。是所有硬件都支持的



一个最基本的


shader


。如果设备支


持可编成管线,那使用可编成管线的


subsha der


,否则使用固定管线的。














(2) Diffuse





















Diffuse< /p>


基于一个简单的光照模型


-Lambertian


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


角夹角的减小而减小


(


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


)


。光< /p>



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


像机 无关。由于这是一个基于像素光照的


shader


,因此他有这 类


shader


的优势,同时他需


要设 备支持可编程管线,如



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


Vertex-Lit


这个


Shader
















总的来说,这个


shader


渲染代价比较小。














(3) Specular



















Specular


使用和


Diffuse


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


射高光。


这个被称为


Blinn-Phong


光照模型。


他包含 了一个反射强光,


这个



反射高光物体 表


面角度,


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

< p>
这种高光计算方法实际上是对实时光源模


糊反射的一种具有可行性的模拟。 模糊的等级通过



inspector


里面


Shininess


这个变量控制。















主纹理的


alpha


通道被用来当作


Specular Map


来使用(有时候也称


gloss map



,


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

< br>alpha


里面全黑



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


0%




而全白的的部分反光率为


100%



这个


Map


在你的物体在不同的部分有不同的 反光率的时候


非常有用。比如说,锈迹



斑斑的金属会反光率低,而磨光的金属反光率比较高。口红的反


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


Specular


M ap


将会让玩家


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


Vertex-Lit


这个


S hader

















这个


shader


的渲染代价会比较大。















(4)Bumped Diffuse






















Diffuse


Shader


一样,这个


Shader


基于


Lambertian


光照模型,同时使用了


normal mapping


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


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


normal map ping


并不改变物体的形状,而是使用一张称为


Normal Map


的特殊纹理来达到这


种效果。在


normal map


中,每个象素的颜色代表了该像素所在物体表面的法线,然后通过


这个法线(而不是通过物体模型计算而来的法线)来计算光照。可以说

< br>Normal Map


在计算


光照的过程中



高效地修改



了整个模型 。
















如何创建


Normal

< p>
ma


ps


:你可以通过导入一张普通的灰度图(白 色表示凸起,


黑色表示凹进)


Unity


会自动将它转换为


Normal Map

















技术细节:这里使用


Normal map


是一种


“Tangent space Normal Map”



Tangent


spac e


(正切空间)是一个跟随模型物体表面的空间。在这个空间中,


z


轴始终从表面指向外


面。


Tang ent space Normal Map


相对于另一种被称为


“Object space Normal Map”


来说有点复杂,


但是他有一些优势。< /p>


1


)可以使用在各种奇形怪状的表面


2


)便于在同一物体不同区域或者


不同物体间复用
















具体关于


Tangent Space Normal Map



Object Space Normal Map< /p>


的区别,


下次


再讲。














如果调用这个


shader


失败,


则会调用


Diffuse


这个


shad er



一般而言,


< br>shader


渲染代价低。
















(5) Bumped Specular






















Specular


一样的光照模型,相比


Specular


而言,它使 用一张


Tangent


Space


Normal


Map


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


(关于


normal


map


具体见


Bumpped


Diffuse


)如果调用失败,则使用


Sp ecular


这个


shader


,一般 而言,这个


shader



渲染代价会 比较大。
















(6) Parallax Diffuse






















Parallax Normal mapped


与传统的


normal mapp ed


一样,但是对



深度



的模拟


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


Height Map


(高度图)来实现的。


Height Map



Normal map



alpha


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


砖块间的裂缝。
















Parallax


mapping


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


现。尤其是,急剧陡峭的高低转 换在高度图里面应该避免。在


inspector


里面调




height


数 值来调整高度的范围,


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


凌乱的情况。


因此建议使用高度变化平


缓的高度图或者将高度数值设置比较低 ,让表面看起来比



较平缓。















这个


shader


的渲染代价相比


bumped diffuse


而言更大。如果调用这个


Sha der


失败,则自动使用


Bumped Diffuse

















(7) Parallax Specular
























Bumped Spcular


相比 ,


增加了一张


Height Map


来 描述深度细节。


关于


Height


Map


,见


parallax Diffuse


。如果调用失败,则调用


Bumped Spe cular


这个


Shader

















(8) Decal





















这个


Shader



unity< /p>


文档里面的描述和


Unity3.0


有明 显的实现区别,文档由


于比较老,


07


年写的,官网下的


Built-in


Shader

< p>
里面,


decal


是使用可编程管线实现的,就< /p>


是说,


如果你的机器不支持可编程管线,


会使用


diffuse



因为


diffuse


也不需要可编程



管线,


所以只能使用


vertex-l it


。这个


Shader


除了主纹理之 外,这个


Shader


还是用了第二张纹理用

< br>来描述细节。第二张用来


Decal(





)


的纹理使用

< p>
alpha


通道来确定是否覆盖主纹理。贴花


用的 纹理只是对主纹理的补充。


比如说你有一个砖砌的墙壁,


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


为主纹理,



然 后使用带有


alpha


通道的


Deca l


纹理在墙壁的不同地方涂鸦。
















(9) Diffuse Detail










-


-


-


-


-


-


-


-



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

Unity内置Shader详解的相关文章

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

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

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

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

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

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

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

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

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

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

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

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

    语文