




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新型家电批发采购协议(绿色环保专项版)
- 2025年新型合金材料终止采购协议及废旧资源高效回收利用合同
- 2025年特色农产品养殖项目用地租赁合同
- 2025年度高端玻璃纤维增强塑料屋顶安装及绿色建筑认证服务合同
- 2025年圆管涵工程竣工结算审核及造价咨询服务合同
- 2025年度城市居民自建房施工噪声控制管理协议
- 2025年公共场所消防安全责任协议书模板
- 2025年创新AI教育平台研发与授权使用合同
- 2025年度环保型公共卫生间升级施工合作协议
- 2025年创新项目知识产权布局与风险防控服务合同
- 中级采气工操作技能鉴定要素细目表
- 油水气井带压井作业操作规程及工艺技术要求
- 产品表面外观缺陷的限定标准
- (33)-钠钾泵细胞生物学
- 配电室巡检记录表
- 紧急宫颈环扎术的手术指征及术后管理
- GB/T 242-2007金属管扩口试验方法
- 政治理论水平任职资格考试题库
- 路基压实度汇总表
- 【食品生产加工技术】香肠的加工技术
- 贫困户访谈记录
评论
0/150
提交评论