Unity3D中的shader基础知识

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里,可供用户使用

时间: 2024-08-06 15:53:55

Unity3D中的shader基础知识的相关文章

Unity3D中的Shader

简单的说,Shader是为渲染管线中的特定处理阶段提供算法的一段代码.Shader是伴随着可编程渲染管线出现的,从而可以对渲染过程加以控制. 1. Unity提供了很多内建的Shader,这些可以从官网下载,打开looking for older version的链接就能看到Build-in shaders.选择合适的Shader很重要,以下是开销从低到高的排序: (1)Unlit:仅使用纹理颜色,不受光照影响 (2)VertexLit:顶点光照 (3)Diffuse:漫反射 (4)Specul

Java中String的基础知识

Java中String的基础知识 ==与equal的区别 基本数据类型,指的是java中的八种基本数据结构(byte,short,char,int,long,float,double,boolean),一般的比较是使用的 ==,比较的是他们的值. 复合数据类型(类) ==比较的是两个对象的引用,可以理解为在内存中的地址,除非是同一个new出来的对象,他们的 ==为true,否则,都为false. equal是object中的方法.object中的实现如下,内部还是使用==实现,也就是说,如果一个

ASP.NET中的C#基础知识

ASP.NET中的C#基础知识 说明:asp.net作为一种开发框架现在已经广为应用,其开发的基础除了前端的html.css.JavaScript等后端最重要的语言支持还是C#,下面将主要用到的基础知识做一个总结,方面后面的学习. 一.C#是一种面向对象的变成语言,主要用于开发可以在.net平台上运行的应用程序.是一种强类型语言,一次每个变量都必须具有声明类型.C#中有两种数据类型:值类型和引用类型.(其中值类型用于存储值,引用类型用于存储实际数据的引用). 1.值类型 值类型表示实际的数据,存

day29—JavaScript中DOM的基础知识应用

转行学开发,代码100天--2018-04-14 JavaScript中DOM操作基础知识即对DOM元素进行增删改操作.主要表现与HTML元素的操作,以及对CSS样式的操作.其主要应用知识如下图: 通过对DOM的基本了解,还要通过代码实现对DOM的操作. 1.childNodes + nodeType 与children的区别 <ul id= "ull"> <li>1</li> <li>2</li> <li>3&l

(001)springboot中测试的基础知识以及接口和Controller的测试

(一)springboot中测试的基础知识 (1)添加starter-test依赖,范围指定为test,只在执行测试时生效 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> 完整po

PHP中oop面向对象基础知识(一)

                                                                                    OOP 基础知识汇总(一) >>>你需要了解以下概念面向对象&面向过程概念:  面向过程:专注于解决一个问题的过程.面向过程的最大特点,是由一个一个的函数去解决处理这个问题的一系列过程.  面向对象:专注于由哪个对象来处理一个问题.面向对象的最大特点,是有一个个具有属性和功能的类,从类中拿到对象,进而处理问题. [

Java中浮点数的基础知识

偶然查看Math.round的JDK 1 public static int round(float a) { 2 if (a != 0x1.fffffep-2f) // greatest float value less than 0.5 3 return (int)floor(a + 0.5f); 4 else 5 return 0; 6 } 注释说0x1.fffffep-2f是最接近0.5的float类型的小数,咦,科学计数法用e表示指数我是知道的,但是这个p是什么鬼.可能有的读者还会问,

javascript中BOM部分基础知识总结

一.什么是BOM BOM(Browser Object Document)即浏览器对象模型. BOM提供了独立于内容 而与浏览器窗口进行交互的对象: 由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是window: BOM由一系列相关的对象构成,并且每个对象都提供了很多方法与属性: BOM缺乏标准,JavaScript语法的标准化组织是ECMA,DOM的标准化组织是W3C,BOM最初是Netscape浏览器标准的一部分. 二.学习BOM学什么 我们将学到与浏览器窗口交互的一些对象,例如

关于Java中面向对象章节、IO 流中的重点基础知识。

一.面向对象的三大特征,以及作用. 答:面向对象的三大特征即,封装性.继承性.多态性. 其分别的作用为 : 封装作用:将数据封装起来,提高数据的安全性, 继承作用:提高代码的复用性,减少冗余代码. 多态性:应用程序不必对每个派生类进行方法调用,只需要对抽象基类处理即可,大大提高程序的复用性,可以提高可扩充性和可维护性. 二.多态中的向上转型 的作用以及向下转型使用的原因 答:在多态中向上转型的是作用是,父类的引用对象名指向子类的实体,也就是用一个抽象的基类去调用每一个派生子类,向下转型的原因为,