Shader入门PPT教程.ppt_第1页
Shader入门PPT教程.ppt_第2页
Shader入门PPT教程.ppt_第3页
Shader入门PPT教程.ppt_第4页
Shader入门PPT教程.ppt_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

HelloSHADER,主讲人:虚拟橙子,什么是Shader,程序化着色器,最初的概念是采用一系列类似汇编语言的指令直接对GPU进行操作,改变3D显示中的顶点、像素,做到一些特殊的效果经过多年的发展,语言体系逐渐成熟,多家公司及机构开发了自己的语言标准,目前我们常见的有以下几种:,Unity3Dshader分类,那些有可能是让你停下来的原因,学习shader是否需要知道复杂的GPU指令?完全不需要,最初的shader确实是采用类似汇编的GPU语言来编写,但经过多年的进化,现在已经十分规范了。学习shader是否要有非常专业的图形学和数学知识?这个可以有,当然越专业越好!但意思并不是说不懂图形学就不能写shader了,即使做不到那么专业,你也可以学shader,就比方说你可能会C+,但是你不一定要用它来写一套windows系统,但你完全可以用它做个计算器,仍然很管用。,HelloShader,这段程序做了最简单的事情:把一个物体的表面颜色赋值成了红色。当我们剔除shader当中的大部分,以最简单的结构去看它的时候,你会发现,其实shader就是一个函数,而这个函数所做的事情,不过就是指定输出的颜色而已,HelloShader,稍微做下更改,这次我们把输出的自发光通道赋以绿色,结果中我们看到,自发光是不受环境光影响的,至此,我们得出结论,shader其实只不过是让一个物体表面以什么颜色显示而已,就这么简单,从哪里开始?到哪里结束?(SurfaceShader),CG语言段起点,CG语言段终点,文件头:#pragmasurfacesurfSimpleLambert#pragmasurface:声明是surfaceshadersurf:surfaceshader的入口函数名称定义SimpleLambert:自定义的光照模式函数名称(实际的函数都要在此名称基础上加Lighting前缀),执行顺序(SurfaceShader),1,2,Shader程序的执行顺序:1.执行surfaceshader的入口函数,计算表面颜色,返回给SurfaceOutput结构体2.执行光照模式函数,用surf函数返回的SurfaceOutput参数计算高光颜色,最终输出到屏幕中的3D物体表面,注意:可能你看过很多没有光照模式函数的代码段,但那并不意味着没有光照模式函数,打开UnityEditorDataCGIncludes文件夹中的Lighting.cginc文件,你就会找到默认的Lambert和BlinnPhong两种光照模式函数了,当然,你也可以找到surf函数中形参中的SurfaceOutput结构体的定义,他是固定的,不可以自己定义,形参(SurfaceShader),Surfaceshader的形参结构体Input可以由以下参数构成:uv_TextureName贴图坐标1(TextureName例如MainTex)uv2_TextureName贴图坐标2float3viewDir视点方向float4withCOLORsemantic颜色float4screenPos屏幕坐标系中的点坐标float3worldPos世界坐标系中的点坐标float3worldRefl-世界坐标系下的反射向量float3worldNormal-世界坐标系下的法线float3worldRefl;INTERNAL_DATAfloat3worldNormal;INTERNAL_DATA,通过简单的例子认识Shader,我们知道,在u3d的shader中,一般情况下,习惯把高光贴图放到_MainTex的Alpha通道内,如左图这样的确省了一张贴图,但并不是我们所习惯的,因此我们想把它提取出来,为这个shader增加一个高光通道的设置,通过简单的例子认识Shader,1.为shader在u3d的属性面板中增加一个贴图通道2.增加一个变量与属性面板对应,以便能够在程序中使用3.在Input结构体中增加这个贴图通道的uv,但其实你可以直接用uv_MainTex,因为不论你定义成什么名字,只要以uv_开头,都是默认的第一套坐标4.将贴图解释成颜色信息,并代替原来的MainTex的alpha通道,赋值给高光属性,1,2,3,4,从哪里开始?到哪里结束?(Vertex&FragmentShader),CG语言段起点,CG语言段终点,声明VertexShader的函数名称,声明FragmentShader的函数名称,执行顺序(Vertex&FragmentShader),Shader程序的执行顺序:1.执行vertexshader,执行结果输出到屏幕3D物体顶点,同时作为fragmentshader的形参输入(如果有)2.执行fragmentshader,最终输出到屏幕中的3D物体表面,最终输出到画面,1,2,形参(Vertex&FragmentShader),形参定义,以上图中所示的用于vertexshader的形参appdata结构体,可以有自己定义,但官方文档中有这样的解释仅能用以下参数构成:float4vertex顶点位置float3normal顶点法线float4texcoordUV1float4texcoord1UV2float4tangent正切(用于法线贴图计算)float4color顶点颜色,不过我们也可以不用自己定义,打开unity3d安装目录下“UnityEditorDataCGIncludes”文件夹中的UnityCG.cginc文件,会看到如右图的一些定义因此,我们只需要在程序中#include“UnityCG.cginc”就可以使用已经定义好的形参结构体,注意:请完全不用去理会这些既定的参数是如何从模型文件中获得的,因为这是程序自动完成的,我们只需要关心,对他们进行什么样的处理就行了,形参定义,FragmentShader的形参结构体v2f,顾名思义就是vertextofragment的意思,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论