Unity3D中的shader,视角,和贴图范围offset

1.Unity中配备了强大的阴影和材料的语言工具称为ShaderLab,以程式语言来看,它类似于CgFX和Direct3D的效果框架语法,它描述了材质所必须要的一切咨询,而不仅仅局限于平面顶点/像素着色。


2.在Unity3D中创建一个Shader:Assets -> Create -> Shader


3.创建了Shader就可以应用到各个材质Material中,创建材质:Assets -> Create -> Material。然后就可以在材质的Inspector面板中,shader下拉框中可以找到新增加的shader


4.Rendering Paths是Unity3D中一个重要的概念,中文翻译就是“渲染通道”。它可以很大程度上影响光线和阴影的渲染效果,但具体要依赖于具体的游戏内容和硬件设备,以及平台。Unity3D中有三种渲染通道类型,从高到低分别为:Deferred Lighting,Forward Rendering,Vertex Lit。如果平台或设备显卡不能支持高级别的通道类型,Unity3D会自动选择稍微低一些的类型。


三种类型的细节比较,详情看参考手册。


5.如何设置渲染通道:在Edit -> Project Setting -> Player中Inspector面板下面,三种发布类型里都有一个渲染通道的设置。


另外,每个摄像机的Inspector面板中,也都有一个渲染通道Rendering Path的设置。


6.渲染通道与shader的关系。


Deferred Lighting通道类型不关心有多少个光源会影响它,每个物体一般都会绘制两次;类似地,Vertex Lit 只绘制一次。所以对于这两种类型来说,shader对表现效果的改变大多在于多重纹理方面。


Forward 通道类型的表现效果要取决于shader和场景中的光源。它有两种基本的计算方式Vertex-Lit 和 Pixel-Lit。可以翻译为逐顶点渲染法和逐像素渲染法吧应该,对应着D3D中的顶点着色和像素着色过程。


Vertex-Lit 用于对网格模型表面顶点进行光照计算,一次性将所有光源的影响都计算在内,所以无论场景中有多少个光源,这种方式绘制的物体只绘制一次。


Pixel-Lit 会计算每个像素上面最终的光照,因此一个物体必须先呗绘制一次来获得环境光和主方向光的光照信息,再绘制一次来获得其他每个额外的光源信息。应用Pixel-Lit的物体的大小也会影响绘制的效率,越大的物体,绘制越慢。


Vertex-Lit 的开销大于Pixel-Lit,但是Pixel-Lit可以提供很多非常好的效果。


7.Unity3D中的shader是通过改变那些直接影响游戏对象的材质来使用的。


8.一个shader可以被应用于多个材质中,但一个材质只能应用一个shader。


9.一些shader被写入了Unity3D底层里,一部分作为内建shader被放置于standard assets里,可供用户使用


Unity3d里面shader着色器有几十种,但是大体被归为5类:Normal,Transparent,Cutout,Self-llluminated,Reflective.

<1>Normaln Shader Family,一共是九个shader,都是针对不透明对象


1.Vertex-Lit:

基于:基于顶点计算的光照模型

正方体:【直接照射到的地方不会非常亮,光照照射不到的地方是黑色的,没有效果】

圆形:【直接照射的地方非常亮,光照照射不到的地方仍然有高光效果】

支持:设备自动选择【可编程管线】【和固定管线】

参数:【主色color】【SpecColor广照颜色】

渲染代价:比较小

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 加深)



persp透视视角:3D视角
正交视角:2D平面视角


区别在于:透视图有很强的立体空间的表现力而正交视图能准确表达物体在空 间中的位置和状态
原因为:
透视图是把立体三维空间的形象按照人眼的视觉习惯表现在二维平面上的构成画面
正交视图则是不考虑物体的透视效果,只是将物体所在三维空间的点一一对应到二维视图平面上的成像


persp相当于是透视视野

在persp模式下,物体在scene界面上所呈现的画面是给人一种距离摄像头近的物体显示的大,距离摄像头远的物体显示的小。

ISO相当于是平行视野

在ISO模式下,不论物体距离摄像头远近都给人的感觉是一样大的。

在Game界面,这两种模式给人呈现的效果是一样的,都是距离摄像头近就大,远就小,个人介意在persp模式下开发比较好,因为跟Game界面的效果是一样的,但是有的时候需要一些其他的调试可以切换到ISO模式下

shader里面有个unlit[未点燃的]属性里面有个transparent[透明的],要在background组件里面显示图片,就把创建的材质球托给background组件,背景图片是不需要碰撞器的(collider),将backland放到background里面保持一致性,把positon里面的Z轴改成-1就错开了,position里面1.1代表在外面,-0.1在里面












































你可能感兴趣的:(unity工具的熟悉)