unity3d内置shader_unity shader 内置矩阵 - CSDN
  • Unity3d 5.x内置shader

    2020-07-29 14:20:26
    Unity3d 5.x内置shader
  • unity3d--内置shader详解

    2012-12-15 19:51:47
    Unity3D内置了很多Shader,文档很详细,自己翻一下.便于加深印象. 首先先解释下Unity3D的Shader.Unity里面的Shaders是使用一种叫ShaderLab的语言编写的,它同微软的.FX文件或者NVIDIA的CgFX有些类似。传统意义上的...

    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

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

    (1) Vertex-Lit:

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

    总的来说,这个shader的渲染代价比较小。这个shader包含了2个subshader,分别对应可编成管线和固定管线。是所有硬件都支持的一个最基本的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 Texture与Main Texture的融合,而Detail的纹理是RGB,直接是两张纹理的rgb通道分别相乘再*2,就是说,Detail纹理中颜色数值 = 0.5不会改变主纹理颜色,>0.5会变亮,<0.5加深)

     

    下面主要讨论Unity自带的Shader中Transparent Shader Family

    这个家族的Shader一共7种,原理和类型与Normal中的上差不多,只不过这些Shader是用在半透明或者全透明的物体上面的。他们的主纹理接受RGBA4个通道。如果你的模型一部分是半透明,一部分是不透明的。请分开使用两张材质,半透明的材质这个家族的Shader。这个家族的Shader的内容和Normal中同名的几乎一样,只是添加了半透明效果,因此不再做重复介绍。

    通过读取纹理中的alpha值,这个Transparent家族的shader可以让模型变成半透明或者全透明的。在alpha中,0表示全透明,255表示全白。如果你的主纹理不包含alpha通道,那么这个物体将会变成不透明的。

    在游戏中使用半透明的物体是比较有技巧性的,因为他们经常会导致排序问题。比如说,如果你透过两个窗口观察物体,发觉物体很异样,恭喜你,你正在经历着每个人都会遇到的使用半透明对象的问题。一条具有普遍性的规则是:有些时候一个半透明的对象会很诡异的绘制在另外一些对象前面,尤其当这些对象是互相交叉的,或者一个把另一个包围的抑或是。为此,当你需要半透明对象的时候,你应该使用它们,但是不要太过于依赖半透明对象(考虑到性能问题)。你也应该让你的设计者们了解到排序可能会出现问题,让他们做好为此调整的准备。

    (1)Vertex-Lit

    这个家族中最简单的Shader,同样有固定管线和可编程管线两个SubShader,适用于所有的硬件。所有的光只在顶点计算。除了支持半透明,其他特性和Normal里面的Vertex-Lit一致。

    (2)Transparent Diffuse

    同Normal中的Diffuse,支持了alpha。

    (3)Transparent Specular

    同Normal Specular,支持了半透明

    (4) Transparent Bumped Diffuse

    同Normal中的Bumped Diffuse

    (5) Transparent Bumped Specular

    同Normal里面的Bumped Specular,支持半透明

    (6)Transparent parallax Diffuse

    同Normal parallax Diffuse,支持半透明

    (7) Transparent Parallax Specular

    同Normal Parallax Specular,支持半透明。

     

    http://www.comedreams.com/index.php/archives/7302

    http://www.comedreams.com/index.php/archives/7304

    展开全文
  • https://unity3d.com/cn/get-unity/download/archive 在上面的Unity旧版本中选择自己对应的版本,选择内置着色器下载。

    https://unity3d.com/cn/get-unity/download/archive
    在上面的Unity旧版本中选择自己对应的版本,选择内置着色器下载。
    在这里插入图片描述
    ps:可以查看上述下载的内置shader代码。

    展开全文
  • 包含Unity3D内置Shader源码, 以及这些源码的详解! 资源来网络收集,与大家分享一下
  • Unity3D内置Shader 详解

    2020-07-30 23:33:23
    (因此Unity文档里面的Shader,都是指用ShaderLab编写的代码) 然后我们来看下Unity3D自带的60多个Shader。 这些Shader被分为五个大类:Normal,Transparent,Transparent Cutout,Self-llluminated,Reflective。由于...
  • 包含Unity3D内置Shader源码, 以及这些源码的详解! 有兴趣是可以参考学习一下! 资源来网络收集,放出来与大家分享一下,不要分!
  • 熟悉Unity3d内置shader应该算是学习unity shader不可缺少的一步,Unity3d自带60多个shader,这些shader被分为五大类Normal,Transparent,Transparent,Cutout,Self-llluminated,Reflective。 (一) Normal Shader ...

    熟悉Unity3d内置shader应该算是学习unity shader不可缺少的一步,Unity3d自带60多个shader,这些shader被分为五大类Normal,Transparent,Transparent,Cutout,Self-llluminated,Reflective。

     

    (一) Normal Shader Family,一共九个shader,都是针对不透明对象。

     

    原始的中文文档下载地址:http://download.csdn.net/detail/l364244206/8094559

     

    以下是学习过程中一个简短的总结,好记性不如烂笔头吧,方便以后可以快速的找到相关信息。

     

     1.Vertex-Lit:
    基于:  基于顶点计算的光照模型
    正方体: 【直接照射到的地方不会非常亮】【光照照射不到的平面无效果】
    圆形:   【直接照射到的地方非常亮】【光照照射不到的地方有高光效果】
    支持:  设备自动选择【可编程管线】和【固定管线】
    参数:  【主色color】【SpecColor光照颜色】【EmissiveColor自发光颜色】【Shininess光照强度】
    渲染代价: 比较小

     

    2.Diffuse:
    基于:  基于简单的光照模型 lambertian
    正方体: 【直接照射到的地方会非常亮】【光照照摄不到的平面无效果】
    圆形:   【直接照射到的地方非常亮】【光照照射不到的地方无效果】
    支持:  设备需要支持【可编程管线】如果不支持将自动使用【Vertex-Lit】
    参数:  【主色color】
    渲染代价: 比较小

     

    3.Specular
    基于:  和Diffuse相同的光照模型,多了一个观察角度相关的反射高光(#pragma surface surf BlinnPhong)
    正方形: 【直接照射到的地方会非常亮】【光照照摄不到的平面无效果】【观察角度和光入射角度会产生反射光】
    圆形:  【直接照射到的地方非常亮】【光照照射不到的地方无效果】【观察角度和光入射角度会产生反射光】
    支持:  设备需要支持【可编程管线】如果不支持将自动使用【Vertex-Lit】
    参数:  【主色color】【SpecularColor反射光照颜色】【Shininess反射光照强度】
    渲染代价: 比较大

     

    4.Bumped Diffuse
    基于:  和Diffuse相同的光照模型,同时使用了法线贴图normal mapping技术(UnpackNormal)【灰度图,白色表示凹起,黑色表示凹进】
    正方形: 和【Diffuse】一样,【多了凹凸感】
    圆形:  和【Diffuse】一样,【多了凹凸感】
    支持:  如果设备不支持,将自动使用【Diffuse】
    参数:  【主色color】【多了法线贴图】
    渲染代价: 比较大

     

    5.Bumped Specular 凹凸反射
    【Bumped Diffuse】与【Specular】的合并
    支持:  如果设备不支持,将使用【Specular】

     

    6.Parallax Diffuse
    基于:  和Bumped Diffuse一样的光照模型lambertian,也使用normal mapping技术(UnpackNormal),同时使用HeightMap(ParallaxOffset)实

    现更加逼真的凹凸感【高度图在法线贴图的alpha通道保存,全黑表示么有高度,白色表示高低】
    支持:  设备无法使用,会自动使用【Bumped Diffuse】
    参数:  【主色color】【多了法线贴图】【多了高度贴图】【height设置高度参数】
    渲染代价: 比【Bumped Diffuse】更大

     

    7.Parallax Specular
    基于:  使用【Bumped Specular】+【高度图】
    支持:  设备无法使用,会自动使用【Bumped Specular】

     

    8.Decal  【贴花】
    基于:  与Diffuse一样基于Lambert,增加第二张贴图,然后融合色彩(lerp)覆盖在主纹理之上【注:DiffusDetail的融合是rgb*rgb】
    支持:  设备需要支持【可编程管线】如果不支持将自动使用【Vertex-Lit】
    参数:  【主色color】【两张贴图】

     

    9.Diffuse Detail 【细节贴图】
    基于:  与Diffuse一样基于Lambert,多了一张贴图与之融合(rgb*rgb),一般用于地形,摄像机拉近时额外的细节会出现。
    说明:         Detail 纹理是覆盖在主纹理上面的。Detail 纹理中深色的部分将会使得主纹理变深,而淡色的部分将会使主纹理变亮, Detail 纹

    理通常是浅灰色。(与Decal 里面 Decal 纹理不同的是,Decal 纹理是 RGBA,通过 alpha 控制 DecalTexture 与 Main Texture 的融合,而 Detail

    的纹理是 RGB,直接是两张纹理的rgb 通道分别相乘再*2,就是说,Detail 纹理中颜色数值 = 0.5 不会改变主纹理颜色,>0.5 会变亮,<0.5 加深)

    展开全文
  • Unity3D内置Shader翻译三

    2014-03-18 17:30:52
    上次讲的是Transparent Shader Family,他们是绘制半透明的对象使用的,但他们并不能满足我们全部的要求。 Transparent Cutout Shader Family是对半透明对象Shader的一类补充,与Transparent Shader Family有所区别...

    上次讲的是Transparent Shader Family,他们是绘制半透明的对象使用的,但他们并不能满足我们全部的要求。
    Transparent Cutout Shader Family是对半透明对象Shader的一类补充,与Transparent Shader Family有所区别的是:Cutout Shader Faimily中的Shaders不允许绘制部分透明的区域。就是说,使用这种Shader绘制出来的对象,要么是全透明,要么是半透明。使用这个家族 Shader的对象通常用来转换和接受阴影。半透明对象中常有的排序问题在使用这类Shader的时候不存在。
    这个家族里面的所有Shader都定义了一个Alpha Cutout的数值,纹理中alpha大于Alpha Cutout数值的,被认为是不透明的,否则就是全透明的。通过这个alpha cutoff数值,我们可以控制哪些区域全透明,哪些区域不透明。(也可以用来做一些动画的控制,你懂的)
    这个家族只包含了6个Shader,分别是
    (1) Transparent Cutout Vertex-Lit

    (2)Transparent Cutout Diffuse

    (3) Transparent Cutout Specular

    (4) Transparent Cutout Bumped Diffuse

    (5)Transparent Cutoff Bumped Specular

     

    (6) Transparent Cutout Soft Edge UnLit
    这个是官方文档里面没有记录的,估计是后面新加入的。这个Shader绘制物体的正反两面,不受光照影响,常常用来绘制花草,树木,叶子。
    他包含了两个Pass,第一次将对象中Alpha大于alpha cutoff的部分以不透明的方式绘制。第二次关闭写zbuffer后,以半透明的方式绘制Alpha小于alpha cutoff的部分。这样做可以将绿草这种半透明的对象不需要排序就能绘制正确。

    展开全文
  • Unity内建Shader的DefaultResourcesExtra的目录中,有一个很简单却很实用的shader——Decal。这是一个贴花着色器,可以在模型的表面添加一个贴花纹理。
  • Unity3D内置Shader翻译一

    2014-03-18 17:22:25
    Unity3D内置了很多Shader,文档很详细,自己翻一下.便于加深印象. 首先先解释下Unity3D的Shader.Unity里面的Shaders是使用一种叫ShaderLab的语言编写的,它同微软 的.FX文件或者NVIDIA的CgFX有些类似。传统意义上的...
  • unity的download页面上能找到Built in shaders的下载连接。 转载于:https://www.cnblogs.com/wantnon/p/4550631.html
  • Unity内建Shader的DefaultResourcesExtra的目录中,可以看到AlphaTest-SoftEdgeUnlit.shader这个文件。可以用来渲染草、树和叶子。 当绘制半透明的物体,例如草的时候,因为关闭了ZWrite,所以没有办法保证这些半...
  • 我们除了可以使用Unity3D默认的天空盒之外,还可以自定义天空盒。可以使用Skybox/6 Sided这个shader作为天空盒材质的着色器,它在内建Shader
  • Unity内建Shader的DefaultResourcesExtra的目录中,可以看到Normal-Parallax.shader这个文件。可以使用这个shader配合法线贴图创建视差效果来更好的表现对象表面的凹凸。
  • Unity3D内置了很多Shader,文档很详细,自己翻一下.便于加深印象.   首先先解释下Unity3D的Shader.Unity里面的Shaders是使用一种叫ShaderLab的语言编写的,它同微软的.FX文件或者NVIDIA的CgFX有些类似。传统意义上...
  • 上一篇我们学了一个简单的顶点/片元着色器。复杂的着色器可能需要我们处理法线,光照,阴影等。为了方便开发者的编码,Unity提供了很多内置文件,包含了提前定义的函数、变量和宏等。下面我们逐一讲解。
  • Unity3D Shader官方教程翻译(四) 1、Shader语法:Pass的雾化处理 雾化混合产生像素的颜色是依据于常量颜色(这个常量颜色是基于摄像头的距离的)。雾化不会改变像素的alpha值,仅仅是改变它的rgb分量。 指导:...
  • Unity5.x内置Shader源码

    2020-07-30 23:31:03
    Unity最新内置shader源码!Yeah
  • unity 内置shader

    2020-07-30 23:31:16
    unity 3d 内置shader ,可查看源码。
  • unity shader 内置变量

    2016-05-04 11:05:21
    官网Manual:http://docs.unity3d.com/Manual/SL-UnityShaderVariables.html unity提供大量的内置变量,来供我们使用,主要包括一些 :矩阵运算/变形,光影,时间等等。用户可以在CGIncludes目录下的...
1 2 3 4 5 ... 20
收藏数 3,008
精华内容 1,203
关键字:

unity3d内置shader