【译】Unity3D Shader 新手教程(16)
UnityShader基础教程
UnityShader基础教程在Github上看到⼀篇关于Unity-Shader的教程,感觉还不错,作者写的很好,很适合Unity-Shader的基础⼊门,我在这⾥翻译⼀下,分享给⼤家,英⽂⽔平很烂,⼤致能明⽩Unity-Shader是什么,渲染管线的⼯作流程,以及Unity Shader的⼀些类型和怎样编写Unity Shader。
(原⽂链接)第⼀部分:什么是Shader?Shader是计算机图形渲染管线的⼀部分,它是⼀⼩段应⽤程序,告诉计算机在场景中怎样对物体渲染和着⾊。
这个过程包括计算颜⾊和光照值,并将其给予对象,以⾄于对象被显⽰在屏幕上。
和上⾯⼀样,Shader也被⽤来创建游戏中的⼀些特殊的和后期处理效果。
在现代游戏引擎中(包括Unity),Shader运⾏在可编程的GPU渲染管道中,在GPU中允许并⾏运⾏,并且能够很快速的进⾏许多着⾊计算。
第⼆部分:渲染管道为了学习Shader,我们将简单的了解渲染管道,我们将在本教程中讨论下⾯这张图⽚:我更加倾向把Shader看做是由⼀种信息类型(模型数据、颜⾊等等)到另外⼀种信息类型(像素/⽚元)的变换,对象数据继承与对象本⾝,例如模型中的点、法线、三⾓形、UV坐标等等。
我们可以把⾃定义数据/传递到shader中使⽤,颜⾊、纹理、数字等等这些。
着⾊器流⽔线的第⼀步是顶点函数。
正如你所知的,顶点就是⼀些点。
顶点函数将处理模型中的⼀些点(连同其它的⼀些数据诸如法线)并将它们渲染流⽔线的下⼀个阶段,⽚元函数。
⽚元函数将使⽤这些顶点,并对它们着⾊。
将它想象为⼀个画家和他们的画笔,它最终以(R,G,B,A)的格式输出像素数据。
最后,将像素添加到帧缓冲中,在帧缓冲中这些数据有可能被进⼀步处理,直到这些数据被绘制到屏幕上。
第三部分:Scene 配置在开始写Shader代码之前,需要在Unity中配置⼀下我们的场景。
在Unity中创建⼀个⼯程,并导⼊所有的资源。
使用Unity开发3D游戏的基础教程
使用Unity开发3D游戏的基础教程第一章:Unity的介绍和安装Unity是一款强大的跨平台游戏开发引擎,可用于开发2D和3D游戏。
它拥有直观易用的界面和丰富的功能,适用于初学者和经验丰富的开发者。
在本章中,我们将介绍Unity的基础知识并帮助您安装和配置开发环境。
Unity支持多种平台,包括Windows、MacOS和Linux。
在开始之前,请确保您的计算机满足Unity的最低系统要求。
您可以从Unity官方网站下载并安装Unity Hub,它是一个用于管理Unity项目和版本的工具。
安装Unity之后,您可以通过Unity Hub打开编辑器。
Unity编辑器的界面分为多个窗口,如场景视图、资源视图、检查器视图和层次视图,从而使您能够轻松管理和操作游戏对象。
第二章:创建场景和游戏对象在Unity中,您可以创建场景来构建游戏世界。
场景是游戏中的虚拟空间,您可以在其中放置游戏对象和元素。
游戏对象是可以在场景中实例化的实体,如人物、道具、地形等。
要创建一个新场景,您可以在Unity编辑器中单击“File”菜单,然后选择“New Scene”。
接下来,您可以将游戏对象拖放到场景中,或使用Unity提供的创建工具来生成对象。
对于每个游戏对象,您可以在检查器视图中设置其属性和组件。
组件是游戏对象的功能模块,如碰撞器、脚本和动画控制器。
通过添加适当的组件,您可以控制游戏对象的行为和外观。
第三章:使用脚本编写游戏逻辑脚本是Unity中编写游戏逻辑的重要工具。
脚本是一种编程语言,可用于控制游戏对象的行为和交互。
在Unity中,您可以使用C#或Unity的自有语言UnityScript来编写脚本。
要创建一个新的脚本,您可以在Unity编辑器中单击“Assets”菜单,然后选择“Create”>“C# Script”。
然后,您可以使用Unity内置的脚本编辑器来编写和编辑脚本。
在脚本中,您可以定义类和方法来实现所需的游戏逻辑。
unity shader的使用流程
Unity Shader的使用流程1.简介U n it yS ha de r是一种用于控制渲染效果的程序,它可以实现各种各样的特效和图形效果。
本文将介绍U ni ty Sh a de r的使用流程,帮助开发者快速上手并创建自己的S ha de r效果。
2.步骤2.1.创建S h a d e r文件在U ni ty中创建S ha d er文件非常简单。
在项目文件夹中右键点击“C re at e”->“S ha d er”->“St an dar d Su rf ac eS ha de r”,即可创建一个新的Sh ad er文件。
2.2.编辑S h a d e r属性编辑Sh ad er属性是创建自定义S ha de r的第一步。
通过编辑S ha de r 属性,我们可以控制材质的外观和行为。
可以定义基础属性如颜色、纹理等,也可以自定义属性以实现更复杂的效果。
2.3.实现表面着色器函数表面着色器是Sh ad er中最重要的部分之一。
它决定了物体表面的颜色、反射等属性。
在表面着色器函数中,我们可以使用Un ity提供的内置函数和变量来实现各种特效。
2.4.添加顶点着色器函数顶点着色器决定了物体的形状和位置。
通过修改顶点的坐标,我们可以实现形变和动画效果。
在顶点着色器函数中,我们可以使用U ni ty提供的顶点变换函数来处理顶点位置。
2.5.编写片段着色器函数片段着色器控制像素的颜色和透明度。
在片段着色器函数中,我们可以使用U ni ty提供的内置函数和变量来实现各种图形效果,如光照、阴影等。
2.6.使用S h a d e r完成Sh ad er的编写后,我们可以将其应用到物体上。
在U nit y的材质属性面板中,选择自定义S ha de r并配置相关参数。
通过调整参数,我们可以实时预览S had e r的效果。
3.示例下面是一个简单的示例,演示如何创建一个变色效果的Sh ad er。
```C#S h ad er"C us to m/Col o rC ha ng e"{P r op er ti es{_M ai nC ol or("Ma inC o lo r",C ol or)=(1,1,1,1)_C ha ng eC ol or("Cha n ge Co lo r",C ol or)=(0,0,0,1)_O ff se t("O ff se t",R an ge(0,1))=0}S u bS ha de r{T a gs{"Re nd er Ty pe"="O pa qu e"}C G PR OG RA M#p ra gm as ur fa ce sur f La mb er ts a mp le r2D_Ma in Tex;h a lf_O ff se t;f i xe d4_M ai nC ol or;f i xe d4_C ha ng eC olo r;s t ru ct In pu t{f l oa t2uv_M ai nT ex;};v o id su rf(I np ut IN,i no ut Su rf ac eO utp u to){f i xe d4c=te x2D(_Ma i nT ex,I N.uv_M ain T ex);c.rg b+=_Ch an ge Col o r.rg b*_O ff se t;o.Al be do=c.r gb*_M a in Co lo r.rg b;}E N DC G}F a ll Ba ck"D if fu se"}```4.总结通过本文的介绍,我们了解了Un it yS had e r的使用流程。
Unity3D内部Shader详解
Unity3D Built-in Shader详解一Unity3D的ShaderUnity里面的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,光照强度随着物体表面和光入射角夹角的减小而减小(即光垂直于表面时强度最大)。
unity的shader用法
一、Shader的概念及作用Shader是一种编程语言,用于控制计算机图形的渲染过程,其主要作用是定义了物体的表面如何反射光线,从而决定了物体在屏幕上的呈现效果。
在Unity中,Shader是一种通过编写代码来控制物体表面属性,使其在游戏中呈现出不同的视觉效果的工具。
二、Shader的编写流程1. 编写Shader的基础知识在Unity中编写Shader需要掌握一定的基础知识,包括语法结构、变量、函数等。
同时还需要了解Shader的类型,如表面Shader (Surface Shader)、顶点和片元Shader(Vertex and Fragment Shader)等。
2. 创建Shader文件在Unity中可以通过创建一个新的Shader文件来开始编写自己的Shader程序。
在创建Shader文件时,需要为其指定类型,并可以选择不同的模板来快速生成基础代码。
3. 编写Shader代码根据需要,可以在Shader文件中编写自定义的Shader代码,控制物体表面的颜色、光照、透明度等属性。
在编写Shader代码时,需要根据具体的需求选择合适的函数和变量来实现期望的效果。
4. 调试和优化Shader代码编写完Shader代码后,需要进行调试和优化工作,确保Shader可以正确地在游戏中使用并且不影响游戏的性能。
三、Shader的常见用法1. 实现特效通过编写Shader代码,可以实现各种特效效果,如模拟火焰、水波纹、粒子效果等,从而增强游戏的视觉表现力。
2. 自定义材质通过使用Shader,可以为游戏对象创建自定义的材质,实现各种独特的视觉效果,使游戏中的场景更加丰富多彩。
3. 控制光照Shader还可以用于控制游戏中的光照效果,包括光照强度、光照颜色、阴影效果等,从而使游戏中的光照效果更加逼真。
四、常见问题和解决方法1. 兼容性问题在使用Shader时,可能会出现不同评台不兼容的情况,需要根据不同评台的要求进行调整和优化。
unity shader常用方法
(原创实用版3篇)编制人员:_______________审核人员:_______________审批人员:_______________编制单位:_______________编制时间:____年___月___日序言下面是本店铺为大家精心编写的3篇《unity shader常用方法》,供大家借鉴与参考。
下载后,可根据实际需要进行调整和使用,希望能够帮助到大家,谢射!(3篇)《unity shader常用方法》篇1Unity 中 Shader 的使用可以通过编写着色器来实现,着色器分为顶点着色器和片元着色器两种。
顶点着色器主要用于处理模型的顶点信息,如位置、颜色、纹理坐标等,而片元着色器则主要用于处理模型的像素信息,如光照、阴影、透明、反射等。
通过编写 Shader,我们可以实现各种特效,例如镜面反射、水面、塑料等特殊材质。
同时,Shader 也可以方便地设置渲染状态,如混合函数、深度写入等。
在 Unity 中,我们可以将编写好的着色器打包成材质,然后将材质赋予合适的游戏对象,从而实现我们所需的渲染效果。
Shader 的编写语言为 HLSL 和 GLSL,其中 HLSL 是 Microsoft 推出的标准语言,而 GLSL 则是 OpenGL 的标准语言。
在 Unity 中,我们可以使用这两种语言中的任意一种来编写着色器。
此外,Unity 还提供了 ShaderLab 语言,它是一种类似于 HLSL 的语言,专门用于编写 Unity 中的着色器。
《unity shader常用方法》篇2Unity 中的 Shader 是一种用于控制 GPU 渲染流水线的高度可编程的阶段,可以通过编写着色器和设置渲染状态来实现各种渲染效果。
下面列举了一些Unity 中常用的 Shader 方法和技巧:1. 基本 Shader 类型:Unity 中的 Shader 分为两种类型,分别是顶点着色器(Vertex Shader)和片元着色器(Fragment Shader)。
Unity3D Shader入门指南
当然,因为我本身在Shader开发方面也是一个不折不扣的大菜鸟,本文很多内容也只是在自己的理解加上一些可能不太靠谱的求证和总结。
本文中的示例应该会有更好的方式来实现,因此您是高手并且恰巧路过的话,如果有好的方式来实现某些内容,恳请您不吝留下评论,我会对本文进行不断更新和维护。
一些基本概念Shader和Material如果是进行3D游戏开发的话,想必您对着两个词不会陌生。
Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。
绘图单元可以依据这个输出来将图像绘制到屏幕上。
输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)。
之后,我们便可以将材质赋予合适的renderer(渲染器)来进行渲染(输出)了。
所以说Shader并没有什么特别神奇的,它只是一段规定好输入(颜色,贴图等)和输出(渲染器能够读懂的点和颜色的对应关系)的程序。
而Shader开发者要做的就是根据输入,进行计算变换,产生输出而已。
Shader大体上可以分为两类,简单来说∙表面着色器(Surface Shader)- 为你做了大部分的工作,只需要简单的技巧即可实现很多不错的效果。
类比卡片机,上手以后不太需要很多努力就能拍出不错的效果。
∙片段着色器(Fragment Shader)- 可以做的事情更多,但是也比较难写。
使用片段着色器的主要目的是可以在比较低的层级上进行更复杂(或者针对目标设备更高效)的开发。
因为是入门文章,所以之后的介绍将主要集中在表面着色器上。
Shader程序的基本结构因为着色器代码可以说专用性非常强,因此人为地规定了它的基本结构。
一个普通的着色器的结构应该是这样的:一段Shader程序的结构首先是一些属性定义,用来指定这段代码将有哪些输入。
unity3D学习之shader学习的教程
由于本人比较懒,基本上混迹于问答板块与朋友们交流U3D开发很少发主题帖,由在这里准备写一些自己学习shader的一些经验与心得,然后与朋友们分享一些写sha 交流,欢迎指出错误之处)一:工欲善其事必先利其器首先推荐两本学习shader非常有必要而且很不错的书。
学习shader你首先应该必备一些写shader的语法支持GPU的编程的语法有三种微软提供的HLSL,OpenGL提供的GLSL,还有NVIDIA提供的Cg在这里推荐使用Cg因为Cg编写的Shader同时兼容Direct3D和OpenGL。
那么要怎么学好Cg语言呢?那么《 Cg教程---可编程实时图形权威指南》一定可以满足你的需求这是一本英译书,所以建议有点英语基础的小伙伴去购买英译版的然后自己理解,学习shader教程中比较不错的书《unity 3D ShaderLab开发实战详解》二:Shader原理及基础书本介绍完了那么首先来了解下shader的工作原理吧从字面意思来说shader翻译过来就是着色器,所以可以理解为给我们想要看见的道计算机的GPU就是为此服务的,而我们写shader的目的也就是告文章来自【狗刨诉GPU我们画在屏幕什么位置,什么颜色,什么形态等等。
他们的工作流程是:1.坐标系变换,(物体空间坐标->世界坐标->摄像机坐标->裁剪空间坐标)2.流水线图形,(着色顶点->图元装配->光栅化->插值,贴图,着色)3.unity3d渲染流程(固定关系和可编程管线的渲染)4.光栅操作(像素所有权测试->裁剪测试->alpha测试->模板测试->深度测试->混合这些之中与我们shader编程密切相关的就是第三点固定渲染管线这是标准的几何&光照(Transforming&Lighting)管线,功能是固定的,它控制着纹理混合。
T&L管线可以被渲染状态控制,矩阵,光照和采制参数。
unity3d入门教程
unity3d入门教程Unity3D是一款非常强大的游戏引擎,它为开发者提供了丰富的功能和工具,帮助他们创建出令人惊叹的游戏作品。
下面是一个简单的入门教程,带你了解Unity3D的基本使用方法。
第一步:下载和安装Unity3D首先,你需要去Unity官网下载最新版本的Unity3D并进行安装。
安装过程很简单,只需按照提示进行即可。
第二步:创建新的Unity项目打开Unity3D,点击菜单栏上的“File”,然后选择“New Project”来创建一个新的项目。
在弹出的窗口中,你可以选择项目的名称和保存路径。
第三步:了解Unity编辑器一旦项目创建好了,你将会看到Unity的编辑器界面。
它由多个窗口组成,包括场景视图、层次视图、检查器视图等。
你可以根据自己的喜好进行调整和布局。
第四步:导入资源在创建游戏之前,你需要导入一些资源,比如模型、纹理、音频等。
点击菜单栏上的“Assets”,然后选择“Import Package”来导入资源包。
你也可以将资源文件直接拖拽到项目窗口中进行导入。
第五步:创建游戏对象游戏对象是Unity中的一个重要概念,它代表着场景中的物体或角色。
你可以点击菜单栏上的“GameObject”,然后选择“Create Empty”来创建一个空的游戏对象。
你还可以在“Hierarchy”视图中右键点击空白处,选择“Create Empty”来创建游戏对象。
第六步:添加组件游戏对象可以通过添加组件来增加功能。
比如,你可以给一个游戏对象添加刚体组件,使其具有物理效果。
点击游戏对象,在“Inspector”视图中点击“Add Component”按钮,然后选择你想要添加的组件。
第七步:调整场景你可以在场景中调整游戏对象的位置、旋转和缩放。
在“Scene”视图中点击游戏对象,然后使用移动、旋转和缩放工具进行调整。
第八步:编写脚本如果你想要给游戏对象添加更复杂的行为,你需要编写脚本。
点击菜单栏上的“Assets”,然后选择“Create”和“C# Script”来创建一个新的脚本。
unity 3d入门教程
unity 3d入门教程本节我们将介绍如何入门使用Unity 3D。
Unity 3D是一款非常强大的游戏开发引擎,可以用于开发2D和3D的游戏。
1. 获取Unity要开始使用Unity 3D,你首先需要下载并安装Unity。
你可以在Unity官方网站上免费下载Unity的最新版本。
根据你的操作系统选择相应的下载版本,并按照安装向导一步一步安装。
2. 创建新项目打开Unity 3D,并点击"New Project"按钮来创建一个新的项目。
输入项目名称和存储路径,并选择适当的模板。
Unity提供了许多预设的模板,你可以选择基于你的游戏类型来选择适合的模板。
点击"Create"按钮创建新项目。
3. 探索Unity界面一旦项目创建成功,你将看到Unity的编辑界面。
Unity界面由多个窗口组成,包括场景视图、游戏视图、项目视图、检视器视图等等。
你可以根据你的需要调整窗口的布局,以便更方便地开发游戏。
4. 添加游戏对象在Unity中,所有的游戏对象都是通过层次结构组织的。
在项目视图中,你可以创建新的游戏对象,例如角色、环境、道具等等。
选择一个游戏对象并将其拖放到场景视图中,你就可以在场景中看到该对象了。
5. 设置游戏对象属性通过选择游戏对象并在检视器视图中修改其属性,你可以设置游戏对象的位置、旋转和缩放等属性。
你还可以为游戏对象添加组件,例如碰撞器、脚本等等,以便实现更多的功能。
6. 编写脚本Unity使用C#作为主要的脚本语言。
你可以在Unity中创建和编辑C#脚本文件,并将其附加到游戏对象上。
通过编写脚本,你可以控制游戏对象的行为、实现游戏逻辑等等。
7. 运行游戏在编辑场景视图中,你可以通过点击Unity界面的"Play"按钮来运行游戏。
你可以通过游戏视图来观察游戏的实时运行效果,并进行交互。
这是入门使用Unity 3D的基本步骤。
希望本教程对你有所帮助,并祝你在Unity 3D的学习和开发中取得成功!。
Unity3D教程:教你如何利用Shader来进行3D角色的渲染
Unity3D教程:教你如何利用Shader来进行3D角色的渲染Posted on 2013年05月09日 by U3d / Unity3D 基础教程/被围观 30 次本文主要介绍一下如何利用Shader来渲染游戏中的3D角色,以及如何利用Unity 提供的Surface Shader来书写自定义Shader。
一、从Shader开始1、通过Assets->Create->Shader来创建一个默认的Shader,并取名“MyShader”。
Unity3D教程:3D角色的渲染2、将MyShader打开即可看见Unity默认的Shader代码3、将该Shader赋给一个角色,就可以看到该Shader所能表达出的Diffuse渲染效果。
Unity3D教程:3D角色的渲染4、接来我们将以此默认Shader作为蓝本,编写出自定义的Shader。
另外,该Shader所用到的参数,我们将在下一章节进行说明。
二、实现多种自定义渲染效果1、 BumpMap效果如果想实现Bump Map效果,可对上述的Shader做如下修改:1.1 在属性Properties中加入:1.2 在SubShader的变量中也进行相应修改:1.3 最后修改surf函数,加入对Normal分量的计算:这样,角色的材质部分即可变为如下形式(暂定BumpMap的Shader名为“MyShader1”):Unity3D教程:3D角色的渲染然后,根据Base图来创建其Normal Map图,并拖入到BumpMap中即可。
BumpMap的效果显示如下:Unity3D教程:3D角色的渲染说明:(1)首先是title的解释这种表示表明了该Shader在编辑器中的显示位置,例如我们可在如下地方找到该Shader。
Unity3D教程:3D角色的渲染(2)其次是PropertiesProperties可通过如下语义进行声明:name ("displayname", property type) = default value“name”是与Shader脚本中对应的名字“display name”是在材质视图中所显示的名字“propertytype”是指该property的类型,一般可有如下几种类型:Range,Color,2D,Rect,Cube,Float和Vector“defaultvalue”是指该property的默认值这里需要注意的是,如果你在Properties中加入了新的属性,那么你需要在CGPROGRAM中的SubShader中加入同样名字的参数。
unity3d shader使用方法
Unity3D中的着色器(Shader)用于定义物体的渲染方式和外观。
以下是使用Unity3D中着色器的基本步骤:1.创建着色器文件:在Unity编辑器中,右键点击项目窗口中的目录,并选择“Create ->Shader”。
这将创建一个新的着色器文件。
2.编辑着色器代码:打开创建的着色器文件,使用一种称为ShaderLab的语言编写着色器代码。
ShaderLab语言用于描述渲染状态、指定渲染阶段和传递参数等。
可以在Unity 官方文档中找到有关ShaderLab的详细信息和教程。
3.添加属性:通过添加属性,可以在着色器中公开参数供用户调整。
例如,可以添加颜色、纹理、浮点数等属性,并在代码中使用它们。
4.实现顶点着色器:顶点着色器控制物体的几何处理过程。
在着色器代码中实现顶点着色器部分,定义如何变换和操作物体的顶点位置。
5.实现片段着色器:片段着色器控制物体表面的光照和纹理等特性。
在着色器代码中实现片段着色器部分,定义如何计算每个像素的颜色并应用纹理等效果。
6.应用着色器:将创建的着色器应用于Unity场景中的物体。
可以通过将着色器文件拖放到物体的渲染组件上或使用代码进行应用。
7.迭代和调试:根据需要,反复迭代和调试着色器,以达到期望的外观效果。
可以通过在Unity编辑器中实时预览来进行调试,并根据需求调整属性和着色器代码。
请注意,这只是Unity3D中着色器的基本使用方法。
Unity支持多种类型和变体的着色器,还提供了专门的着色器图形界面(Shader Graph)等工具来简化着色器的创建过程。
深入学习和探索Unity着色器的使用可以参考官方文档和在线教程资源。
UnityShader权威指南—中文翻译
UnityShader 权威指南—中文翻译目录: 1. 1.1 1.1.1 1.1.2 1.1.3 1.1.3.1 1.1.3.2 1.1.3.3 1.1.3.4 1.1.3.5 1.1.3.6 1.1.3.7 1.1.3.8 1.1.3.9 1.1.41.1.4.11.1.4.2 1.1.4.3 1.1.4.4 1.1.4.5 Transparent Bumped Specular 透明法线高光着色器 1.1.4.6 Transparent Parallax Diffuse 透明视差漫反射着色器 1.1.4.7 Transparent Parallax Specular 透明视差高光着色器1.1.5 1.1.5.1 1.1.5.2 1.1.5.3 1.1.5.4 1.1.5.5 1.1.6 1.1.6.1 1.1.6.2 1.1.6.3 1.1.6.4 1.1.6.5 1.1.6.6 1.1.6.7 1.1.7 1.1.7.1 1.1.7.2 1.1.7.3 1.1.7.4 1.1.7.5 1.1.7.6 1.1.7.7 1.1.7.8 1.1.7.9 2 2.1 2.1.1 属性 2.1.2 子着色器 2.1.2.1 传递 2.1.2.1.1 颜色,材质,光照 2.1.2.1.2 2.1.2.1.3 2.1.2.1.4 2.1.2.1.5 2.1.2.1.62.1.2.1.7 2.1.2.1.8 2.1.2.1.9 2.1.2.2 2.1.2.3 2.1.2.4 2.1.3 2.1.4 2.2 2.2.1 2.2.2 2.2.3 2.3 2.3.1 2.3.2 2.3.3 2.3.4 2.4 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 3 2.5 Tutorial 3.1 3.2 3.34ShadersAll rendering in Unity is done with Shaders - small scripts that let you configure the how the graphics hardware is set up for rendering. Unity ships with 60+ built-in shaders (documented in the ). You can extend this by making your own shaders.Shaders in Unity can be written in one of three different ways:Surface Shaders will probably be your best bet. Write your shader as a surface shader if it needs to interact properly with lighting, shadows, projectors, etc. Surface shaders also make it easy to write complex shaders in a compact way - it's a higher level of abstraction. Lighting for most surface shaders can be calculated in a deferred manner (the exception is some very custom lighting models), which allows your shader to efficiently interact with many realtime lights. You write surface shaders in a couple of lines of Cg/HLSL and a lot more code gets auto-generated from that. Vertex and Fragment Shaders will be required, if you need some very exotic effects that the surface shaders can't handle, if your shader doesn't need to interact with lighting or if it's an image effect. Shader programs written this way are the most flexible way to create the effect you need (even surface shaders are automatically converted to a bunch of vertex and fragment shaders), but that comes at a price: you have to write more code and it's harder to make it interact with lighting. These shaders are written in Cg/HLSL as well. Fixed Function Shaders need to be written for old hardware that doesn't support programmable shaders. You will probably want to write fixed function shaders as an n-th fallback to your fancy fragment or surface shaders, to make sure your game still renders something sensible when run on old hardware or simpler mobile platforms. Fixed function shaders are entirely written in a language called ShaderLab, which is similar to Microsoft's .FX files or NVIDIA's CgFX.Regardless of which type you choose, the actual meat of the shader code will always be wrapped in ShaderLab, which is used to organize the shader structure. It looks like this:Shader "MyShader" { Properties { _MyTexture ("My Texture", 2D) = "white" { } // other properties like colors or vectors go here as well } SubShader { // here goes the 'meat' of your // - surface shader or // - vertex and fragment shader or // - fixed function shader } SubShader { // here goes a simpler version of the SubShader above that can run on older graphics cards } }We recommend that you start by reading about some basic concepts of the ShaderLab syntax in the and then move on to the tutorials listed below. The tutorials include plenty of examples for the different types of shaders. For even more examples of surface shaders in particular, you can get the source of Unity's built-in shaders from the . Unity's package contains a lot of interesting vertex and fragment shaders. Read on for an introduction to shaders, and check out the ! 着色器所有在 Unity 的渲染都用着色器 - 小脚本完成,着色器让您配置该如何设置图形硬件进行渲染。
如何在Unity中制作3D游戏的入门指南
如何在Unity中制作3D游戏的入门指南Unity是一款强大的游戏开发引擎,广泛应用于制作2D和3D 游戏。
本文将为读者提供一份如何在Unity中制作3D游戏的入门指南。
第一章:Unity基础知识在开始制作3D游戏之前,我们需要先了解一些基本的Unity知识。
首先,Unity采用了C#作为其主要的编程语言。
因此,学习和了解C#语言对于使用Unity进行游戏开发是非常重要的。
另外,了解基本的Unity界面和功能,如场景视图、层次视图和检查器视图,对于创建和管理游戏场景非常有帮助。
第二章:准备3D模型和资源在制作3D游戏之前,我们需要准备好所需的3D模型和其他资源。
Unity支持导入多种3D模型文件格式,如FBX和OBJ。
选择适合你游戏风格的模型,并使用Unity的资源管理器将其导入到项目中。
此外,还可以使用Unity Asset Store下载和导入其他资源,如贴图、声音和特效等。
第三章:场景设置和物体布置在Unity中,游戏场景是由各种物体构成的。
通过使用Unity 的场景视图和层次视图,我们可以轻松设置场景的大小、摄像机位置和光照效果等。
然后,使用Unity中提供的各种物体,如立方体、球体和平面等,通过简单的拖拽和放置来布置场景。
这些物体可以用来创建游戏的地形、建筑和其他实体。
第四章:对象交互和游戏逻辑在游戏中,物体之间的交互是非常重要的。
在Unity中,我们可以使用碰撞器和触发器来实现对象之间的碰撞检测和触发事件。
此外,通过编写C#脚本,我们可以为物体添加行为和游戏逻辑。
比如给一个人物添加移动、跳跃和攻击等功能,或者实现游戏中的计分系统和关卡切换等。
第五章:粒子特效和音效为了增加游戏的视觉和听觉效果,我们可以在Unity中添加粒子特效和音效。
Unity内置了粒子系统,可以用来创建火焰、雨滴、爆炸和烟雾等特效。
通过修改粒子的属性和参数,我们可以根据需要调整特效效果。
同时,我们还可以导入和使用音频文件,如背景音乐、音效和语音对话等,为游戏增添音乐和声音效果。
unity3d中文教程
unity3d中文教程Unity3D是一款非常受欢迎的游戏引擎,它的强大功能和易于上手的特点吸引了很多人学习和使用。
在这篇文章中,我将介绍一些Unity3D的基础知识和常见操作,希望能为初学者提供一些帮助。
首先,我们来了解一下Unity3D的背景和特点。
Unity3D是由Unity Technologies开发的跨平台游戏引擎,支持Windows、Mac、iOS、Android等多个平台。
它具有友好的用户界面和丰富的功能库,可以快速开发出高质量的游戏和应用程序。
Unity3D还提供了强大的物理引擎和粒子系统,用于模拟游戏中的物理效果和粒子效果。
在Unity3D中,游戏的开发主要通过场景、游戏对象和脚本三个重要元素来实现。
场景是游戏中的环境,可以包含多个游戏对象。
游戏对象是游戏中的角色、道具、场景元素等,每个游戏对象都具有自己的属性和行为。
脚本是编写游戏逻辑的代码,可以控制游戏对象的运动、交互和状态等。
接下来,我们来看一下Unity3D中常用的操作和功能。
首先是资源的导入和管理。
Unity3D支持导入各种资源,如图片、音频、视频等。
导入的资源可以在Unity3D中进行管理和编辑,通过拖放操作可以将它们添加到场景中。
另外,Unity3D还提供了资源的打包和压缩功能,可以将游戏资源进行打包,并在游戏运行时进行加载和优化。
其次是游戏对象的创建和控制。
在Unity3D中,可以使用内置的游戏对象创建工具或自定义脚本来创建游戏对象。
创建好的游戏对象可以通过变换组件来进行位置、旋转和缩放等操作。
另外,还可以通过刚体组件实现物理效果,通过碰撞器组件实现物体之间的碰撞和触发。
再次是脚本的编写和交互。
Unity3D使用C#作为主要的脚本语言,通过编写脚本可以给游戏对象添加逻辑和交互。
脚本可以控制游戏对象的运动、触发事件、改变状态等。
另外,还可以通过调用Unity3D提供的API来实现一些高级功能,如网络通信、音频播放等。
Unity3D开发之shader教程(浅谈光照之漫反射diffuse)
Unity3D开发之shader教程(浅谈光照之漫反射diffuse) 在游戏开发过程中,光照应该是必不可少部分,当然,这是指⼤多数的稍微⼤型⼀些的3D游戏会需要,给模型或者⼭⼭⽔⽔加上光照,会看上去更加的真实,获得更好的体验。
⼀个本⾝不发光物体显⽰什么颜⾊,在于本⾝反射什么颜⾊,⽐如⼀块⽯头,在太阳光的照射之后,你看到是红⾊的,⽽太阳光是⽩⾊的,⽩⾊是因为RGB组合⽽成,这快⽯头吸收了绿⾊和蓝⾊,反射了红⾊,那么你看到这块⽯头就会是红⾊的! 那么谈到反射,就分为了漫反射(diffuse)和镜⾯反射(specular),先说漫反射因为表⾯凹凸不平,所有法线的⽅向也就不⼀致,那么反射的光线也就不⼀致,何为法线,所谓法线,就是垂直与表⾯的那条线(看到⼀个哥们⼉说因为法线⼀定是垂直的线,像个公正不阿的法官,所以叫法线),⼊射光线到表⾯,令⼊射光线与反射光线的夹⾓相等,得到反射光线,⽽我们在计算中是试⽤dot(N,L)来得到⼀个值,N代表法线向量,L代表⼊射光线的向量表⽰,先对这两个向量进⾏归⼀化处理(使⽤normalize函数)所谓的归⼀化处理,即是让这个向量的模等于1(其实就是让向量除以他的模,这块可以参考3D图形学基础⾥⾯提到的向量部分),⽽dot函数的公式为向量点乘,即N*L=|N|*|L|cosΘ由于之前对N与L进⾏了归⼀化处理,那么N*L=cosΘ,回顾⼀下三⾓函数,也就是说,⼊射光线与法线夹⾓在(0,90)之间,⾓度越⼤,那么值就越⼩。
下⾯给出漫反射的公式:diffuse = Kd * lightColor * max(N·L,0)。
⾸先kd为光强,也就是光照的强度,准确的说是材质对光的反射系数,在0到1 之间,根据名称可以⾃⼰想象⼀下。
其次lightColor,这玩意⼉是指光的颜⾊,它⾥⾯有rgb三个分量,⽤句⽜逼的话说,世界上所有的颜⾊都可以⽤RGB来表⽰,通过在计算机中RGB三个不同的值可以匹配出⽆数种颜⾊,8bit的颜⾊通道可以表⽰出0-255,那么256的3次⽅,就可以组合得到16777216种颜⾊,当然,⼈的眼睛貌似感觉不到那么多颜⾊,扯远了,回到刚刚那个话题,光的颜⾊有了,在乘以max(N*L,0),为什么要这样做?因为如果夹⾓⼤于90度,那么就会出现负数,负数是没有意义的(⾄于为什么会出现⼤于90度的情况,请发挥空间想象能⼒(脑补)),这样就得到了漫反射的颜⾊值了(就是简单是梳理⼀下思路!漫反射的代码,待会⼉上传⼀下,作为总结)。
Unity3D着色器Shader编程入门
自学Unity3D也有大半年了,对Shader一直不敢入坑,最近看了些资料,以及通过自己的实践,对Shader还是有一点了解了,分享下仅作入门参考。
更多精彩请关注【狗刨学习网】因Shader是对图像图像渲染的,学习前可以去了解下图形图像学及GPU编程相关的知识。
强烈推荐《GPU 编程与CG 语言之阳春白雪下里巴人》,这本书网上有电子版。
还有一本是关于Unity3D的Shader开发的《Unity着色器和屏幕特效开发秘笈》该书是《Unity Shaders and Effects Cookbook》翻译过来的。
首先来看下Shader实现的效果:1、新建一个球体Sphere,然后再Project中创建一个材质球Material。
2、将新建的材质球赋值给该球体对象的Mesh Renderer组件的Materials中选择不同的Shader,并调节参数,就可以看到不同的效果了。
3、在Project中新建一个Shader,打开后会默认一个写好的Shader1.[font=新宋体][size=2]Shader "Custom/testShader" { //Shader【关键字开头】"Custom/testShader"【Shader的名字,分好用来分组】2. Properties { //里面包含了Unity中进行赋值的属性3. _MainTex ("Base (RGB)", 2D) = "white" {}//_MainTex【属性名】"Base(RGB)"【属性描述,将会在Unity面板中出现】2D【属性类型】"white"【默认值】4. _Alpha("透明度",Range(0,1))=05. }6. SubShader {//子着色器,可以写多个用来适配不同的硬件或平台7. Tags { "RenderType"="Opaque" }//着色器标签【硬件将通过判定这些标签来决定什么时候调用该着色器】8. LOD 200//Level of Detail9.10. CGPROGRAM//CG语言开始11. //申明程序使用surface【表面着色器】处理方法为下面的surf,使用Lambert光照模型12. #pragma surface surf Lambert13.14. sampler2D _MainTex;//sampler2D类型的变量,名字和属性中的名字一致,用来接收Unity传入的参数15. half _Alpha;16.17. struct Input {//结构体,用于输入数据18. float2 uv_MainTex;//uv_开头用于取传入的贴图的UV19. };20.21. void surf (Input IN, inout SurfaceOutput o) {//表面着色器的方法22. half4 c = tex2D (_MainTex, IN.uv_MainTex);//tex2D方法对贴图中一个点进行采样23. o.Albedo = c.rgb;//对输出的rgb颜色进行赋值24. o.Alpha = c.a;//透明度赋值25. }26. ENDCG//CG语言结束27. }28. FallBack "Diffuse"//回滚29.}[/size][/font]。
Unity3D Shader 入门
Unity3D Shader 入门什么是ShaderShader(着色器)是一段能够针对3D对象进行操作、并被GPU所执行的程序。
Shader并不是一个统一的标准,不同的图形接口的Shader并不相同。
OpenGL的着色语言是GLSL, NVidia开发了Cg,而微软的Direct3D使用高级着色器语言(HLSL)。
而Unity的Shader 是将传统的图形接口的Shader(由 Cg / HLSL编写)嵌入到独有的描述性结构中而形成的一种代码生成框架,最终会自动生成各硬件平台自己的Shader,从而实现跨平台。
Unity Shader 其实并不难,初学者往往很迷惑是因为它有太多固定的命令和结构,而这些命令又需要我们对3D渲染有一定的了解才能知道它们是做什么的。
Shader种类OpenGL和Direct3D都提供了三类着色器:?顶点着色器:处理每个顶点,将顶点的空间位置投影在屏幕上,即计算顶点的二维坐标。
同时,它也负责顶点的深度缓冲(Z-Buffer)的计算。
顶点着色器可以掌控顶点的位置、颜色和纹理坐标等属性,但无法生成新的顶点。
顶点着色器的输出传递到流水线的下一步。
如果有之后定义了几何着色器,则几何着色器会处理顶点着色器的输出数据,否则,光栅化器继续流水线任务。
? 像素着色器(Direct3D),常常又称为片断着色器(OpenGL):处理来自光栅化器的数据。
光栅化器已经将多边形填满并通过流水线传送至像素着色器,后者逐像素计算颜色。
像素着色器常用来处理场景光照和与之相关的效果,如凸凹纹理映射和调色。
名称片断着色器似乎更为准确,因为对于着色器的调用和屏幕上像素的显示并非一一对应。
举个例子,对于一个像素,片断着色器可能会被调用若干次来决定它最终的颜色,那些被遮挡的物体也会被计算,直到最后的深度缓冲才将各物体前后排序。
? 几何着色器:可以从多边形网格中增删顶点。
它能够执行对CPU来说过于繁重的生成几何结构和增加模型细节的工作。
学习使用Unity制作3D建模和动画的入门指南
学习使用Unity制作3D建模和动画的入门指南Unity是一款功能强大的游戏引擎,被广泛用于游戏开发和动画制作。
对于初学者来说,学习使用Unity进行3D建模和动画制作可能是一个具有挑战性的任务。
本文将为大家提供一个入门指南,帮助您快速上手使用Unity进行3D建模和动画制作。
第一章:认识UnityUnity是一款跨平台的游戏引擎,可以运行在Windows、Mac、iOS和Android等多个操作系统上。
它提供了一套完整的工具和编辑器,用于开发游戏、创建交互式应用程序以及制作动画。
在开始学习之前,我们需要先了解Unity的基本概念和界面。
第二章:Unity界面初探Unity的界面分为场景视图、层次视图、项目视图、资源视图和检视视图等多个模块。
场景视图用于显示场景中的物体和环境,层次视图用于管理场景中的物体层次结构,项目视图用于管理项目资源,资源视图用于预览和导入资源,检视视图用于编辑物体的属性。
熟悉这些界面模块是学习使用Unity的基础。
第三章:创建场景和物体学习使用Unity进行3D建模和动画制作的第一步是创建场景和物体。
通过菜单栏中的“GameObject”选项,我们可以创建各种类型的物体,如立方体、球体、平面等。
在场景中放置和组织这些物体,就可以构建一个完整的3D场景。
第四章:应用材质和纹理材质和纹理是渲染3D物体时非常重要的元素。
通过选择合适的材质和纹理,并将其应用到物体上,可以赋予物体不同的外观和质感。
在Unity中,我们可以通过使用内置的材质库,或者导入自定义的纹理,来实现这一目标。
第五章:创建动画Unity提供了一个强大的动画系统,可以用来为物体赋予动态效果。
通过在层级视图中选择物体,并使用“Animation”组件,我们可以创建和编辑动画关键帧。
通过定义物体在不同时间点上的位置、旋转和缩放等属性,我们可以制作出生动而饱满的3D动画。
第六章:光照和阴影光照和阴影是营造真实感和增强观赏效果的重要手段。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【译】Unity3D Shader 新手教程(16)标签:class style 代码com log 使用src html http 刚开始接触Unity3D Shader编程时,你会发现有关shader的文档相当散,这也造成初学者对Unity3D Shader编程望而却步。
该系列教程的第一篇文章(译者注:即本文,后续还有5篇文章)详细介绍了Unity3D 中的表面着色器(Surface Shader)的,为学习更复杂的Shader编程打下基础。
动机如果你是刚刚接触Shader编程的新手,你可能不知道从何开始踏出Shader编程的第一步。
本教程将带你一步步完成一个表面着色器(Surface Shader)和片段着色器(Fragment Shader)。
本教程也将介绍在Unity3D Shader编程中所使用的一些函数和变量,这些内容可能和你在网上看到的不一样哦!如果你满足下面的条件,我觉得你应该看看这篇文章:如果你是shader编程的新手。
你想在你的游戏中使用shader做一些很炫酷的效果,但是你在网上找不到可用的Shader(译者注:o(╯□╰)o自己动手丰衣足食)。
由于缺乏对基础知识的了解,造成不能随心所欲使用Strumpy着色器编辑器(译者注:Strumpy Shader Editor,一种图形化编写shader的方式,看着很诱人!)。
你想在你的shader代码中手动处理纹理(Textures)本文是该系列教程的第一篇文章,随后我们会制作一些更复杂的shader。
相比起来,第一篇文章确实很简单。
关于作者我也是Shader编程的新手----所以我决定写这篇教程帮助大家入门——我当初也在入门上遇到很多苦恼。
事实上我并不是一个Shader编程专家。
当我想了解Shader编程时,我曾反复阅读官方文档,但是我最终发现官方文档讲述的顺序并不适合我学习shader。
所以我觉得我应该写一篇教程,并分享我所学到的知识。
不过写完教程之后,我发现再次阅读官方文档时,觉得明白多了。
尽管本教程中的所有例子都能正常运行,但是我相信肯定有更好shaders实现这些例子。
如果聪明的你对这些例子中的shaders有更好的建议,请在评论区留言!我之所以学习shader编程是因为我需要在我创建的游戏世界中创建些东西,但这个游戏世界创建起来有个麻烦之处,因为它是由不同角色组成的,而我必须创建由多个部分组成的一个统一网格(mesh)。
所以我只能对每个角色使用一次绘制调用(draw call)。
(译者注:完全不知道他在讲什么?所以我把原文放在下面给大家评评理)My reason for getting into shader programming was to build something that I needed for a world populated with an endless array of different characters. I needed to build a combined mesh out of multiple parts so I only have one draw call per character.通过打开和关闭角色的穿衣效果,我使用Megafiers(一个变形插件)修改了角色的基本网格(base meshes)。
其中的困难在于我只有一个纹理(texture),但是我却想给每个角色的皮肤,服饰以及其他的特征使用不同的颜色。
我想到一个方法----对每个角色使用不同的3个4x4纹理,并使用一个shader 来给模型上色。
我将在整个教程中详细描述我做的这个shader,但是现在—我想你们已经迫不及待地想看我创建的角色表演一段即兴的快闪舞(flash mob dance)(译者注:网上截的图片)。
着色器和材质(shaders&materials)一个shader所做的就是将一个模型的网格(mesh)渲染到屏幕上。
Shader可以被定义为一系列的属性(译者注:就像一个函数里面的参数一样,你可以改变函数的不同赋值来改变函数的输出结果),你可以通过改变这些属性来改变模型渲染到屏幕上的效果。
而这些属性被存放起来,放到一个叫做材质(material)的地方。
Unity3D Shader有以下几种表面着色器(surface shader)----后台自动为你做的绝大部分的工作,减少了你工作量,并且适合绝大多数需要shader 的情况。
片段着色器(fragment shader)----可以让你做更多的效果,但是此shader更难写。
你也可以用它做一些底层的工作,比如顶点光照(Vertex lighting,即在每个顶点存储该点的光照信息)。
顶点光照对于移动设备很有用(译者注:估计省内存吧)。
该shader对于一些需要多通道(multiple passes)的高级渲染效果也很有效。
本文中我们将关注点放在表面着色器上。
学习Shader的资源如果你要学习Shader编程,我向你推荐下面几个资源Martin Kraus‘s fantastic Wiki Book GLSLProgramming/UnityUnity‘s Shader ReferenceNVidia‘s tutorial on the CG programming languageCreativeTD‘s video series on writing surface shadersShader的流水化工作方式(译者注:Shader的工作方式也称为shader流水线(pipeline),因为shader工作方式很类似汽车流水线,将模型上一系列顶点数据和其他各种数据作为输入,用这个shader组成的流水线加工下,出来的就成了炫酷的效果了。
)你将在shader流水线中看到不明觉厉的各种术语,我将用我自己的语言尽量降低理解的难度。
Shader的工作就是输入一些3D几何信息,经过shader处理后将其变为2D的像素呈现在屏幕上。
好处是在shader处理过程中,你只需要改变少数几个属性就可以产生不同的效果。
对于表面着色器,该工作流程看起来像下面这样:(译者注:简单讲解一下这个流程图,首先要渲染的物体将自己的几何信息传递到Shader中,并且系统得到了该物体的顶点信息,然后你可以选择经不经过Vertex Function来处理这些顶点信息,随后经过光栅化(将三维几何信息映射到二维屏幕上,打个不恰当的比喻,相当于把3D模型拍扁到屏幕上,然后你就可以专心处理屏幕上的像素了),每个像素经过你的shader代码将得到最终的颜色值)注意在表面着色器(Surface Shader)中的函数退出之前,像素的颜色还没有计算出来。
这意味着你可以再次之前传入顶点的法向量来影响光照的计算。
片段着色器(Fragment Shader)有着同样的工作流程,但事实上,片段着色器中必须有Vertex Function(上图中的Vertex Function部分就是可选的(Optional)),而且需要在像素处理阶段做很多的工作才能产生最终的像素。
而表面着色器隐藏了这些。
(译者注:给我的感觉就是片段着色器向用户提供了更多的接口进行更高级的渲染)。
下图展示了你的代码如何被调用以及代码构成从上图我们可以看到,当你写一个shader的时候,你可能得有一些属性值(properties),并且有一个或多个Subshaders。
具体使用哪个Subshader进行处理取决于你的运行平台。
你应该还要指定一个Fallback shader,当你的subshader没有一个能运行在你的目标设备上,将使用Fallback shader(译者注:有点像备胎)。
每个Subshader都至少有一个通道(pass)作为数据的输入和输出。
你可以使用多个通道(passes)执行不同的操作,比如在一个Grab Pass中,你可以获取将要呈现到屏幕上的像素值(译者注:类似于glsl中的fragment buffer)。
当你想制作高级的扭曲效果,这非常有用。
虽然当你开始学习shader编程时,你可能并不会使用到它。
另外一个使用多通道(multiple passes)的原因是在不同时刻,你可能需要写入或者禁止写入深度缓存的使用。
当你写表面着色器时,我们将直接在Subshader这个层次上写代码,系统将把我们的代码编译成若干个合适的通道(pass)。
尽管shader最终产生的是二维像素,但是其实这些像素除了保存xy坐标外,本身保存着深度值(即每个像素点上的内容在原先3D场景中离照相机的远近),这样距离照相机近的物体就会把距离照相机远的物体遮挡住,在屏幕上显示时,就是将其像素值覆盖。
你可以控制是否在你的shader中使用深度缓存(Z-buffer)产生一些特效,或者在Pass中使用一些指令决定shader是否可以写入Z-buffer:比如使用ZWrite Off时,任何你输出的东西都不会更新Z-buffer的值,即关闭的Z-Buffer的写入功能。
你可以使用Z-buffer技术在别的物体上掏出一个洞,你可以先写入需要打洞区域的深度值,但不输出打洞区域所属的像素值,然后在你模型后面的物体的深度值将无法写入(因为Z-buffer觉得你的模型已经挡住了后面的物体)(译者注:这样你打洞区域显示的就是一开始使用的背景色,会造成一个洞穿过了这些物体的效果)。
下面是一些shader代码:希望你能看出上面代码是由Properties,SubShader,Fallback三段代码组成的。
理解Shader代码文章剩下的部分将讲述上面那段简单代码到底做了什么?真正的干货马上就来了,你必须好好掌握这些内容。
当你进行shader编程时,你必须使用正确的变量名和函数名来调用它们,事实上变量的名称在某些情况下能让人一眼看出它的特定含义。
创建并使用默认Shader(译者注:在详细介绍Shader之前,我们先简单介绍下shader如何使用。
)1. 我们先打开Unity(我的版本是4.6.1),创建新工程,并在Assets文件夹下创建三个目录,如下:2. 我们再创建一个cube。
可以在Inspector面板看到新创建的cube所使用的Material 如下。
3. 打开Material文件夹,我们在其中创建一个Shader和一个Material。
此时New Material的默认Shader为Diffuse。
我们将NewShader拖到New Material上。
可以看到该材质所使用的Shader变成我们新建的NewShader了。
当然你也可以直接点击材质编辑器中Shader下拉框,选择相应的Shader。