Unity3D技术之表面着色器详解.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Unity3D技术之表面着色器详解

Unity3D技术之表面着色器详解一、Unity 中三种着色器书写格式:??1、surface shaders, 表面着色器??2、vertex and fragment shaders and 顶点和片段着色器 3、fixed function shaders. 固定功能着色器二、顶点着色器与片段着色器? ?? ? Unity三维空间中任何复杂的模型都是由若干个三角形组成的,顶点(Vertex)就是指这些三角形的顶点,而片段(fragment)就是指三角形的填充区域。三、表面着色器(Surface Shader)的标准输出结构:? ?? ? struct SurfaceOutput? ?? ? {? ?? ?? ???half3 Albedo; //反射率? ?? ?? ???half3 Normal; //法线? ?? ?? ???half3 Emission; //自发光,用于增强物体自身的亮度,使之看起来好像可以自己发光? ?? ?? ???half Specular; //镜面? ?? ?? ???half Gloss; //光泽? ?? ?? ???half Alpha; //透明? ?? ? };四、表面着色器使用 #pragma surface surfaceFunction lightModel [optionalparams] 指令,以声明它是一个表面着色器。??1、surfaceFunction:表示Cg函数中有表面着色器(surface shader)代码。这个函数的格式应该是这样:void surf (Input IN,inout SurfaceOutput o), Input是你自己定义的结构。Input结构中应该包含所有纹理坐标(texture coordinates)和和表面函数(surfaceFunction)所需要的额外的必需变量。文章出处【狗刨学习网】。??2、lightModel:在光照模式中使用。内置的是Lambert(diffuse)和 BlinnPhong(specular)。五、表面着色器附加输入结构:??1、float3 viewDir:视图方向(view direction) 值。为了计算视差效果(Parallax effects),边缘光照(rim lighting)等,需要包含视图方向(view direction)值。??2、float4 COLOR:每个顶点(per-vertex)颜色的插值。??3、float4 screenPos:屏幕空间中的位置。 为了反射效果,需要包含屏幕空间中的位置信息。??4、float3 worldPos:世界空间中的位置。??5、float3 worldRefl:世界空间中的反射向量。如果表面着色器(surface shader)不写入法线(o.Normal)参数,将包含这个参数。??6、float3 worldNormal:世界空间中的法线向量(normal vector)。如果表面着色器(surface shader)不写入法线(o.Normal)参数,将包含这个参数。??7、float3 worldRefl(INTERNAL_DATA):世界空间中的反射向量。如果表面着色器(surface shader)不写入法线(o.Normal)参数,将包含这个参数。为了获得基于每个顶点法线贴图( per-pixel normal map)的反射向量(reflection vector)需要使用世界反射向量(WorldReflectionVector (IN, o.Normal))。??8、float3 worldNormal(INTERNAL_DATA):世界空间中的法线向量(normal vector)。如果表面着色器(surface shader)不写入法线(o.Normal)参数,将包含这个参数。为了获得基于每个顶点法线贴图( per-pixel normal map)的法线向量(normal vector)需要使用世界法线向量(WorldNormalVector (IN, o.Normal))。六、光照模式声明? ?? ? 光照模式是一个以Lighting开头与名字组合在一起的合乎规范的函数。你可以在你的着色器文件(shader file)或导入文件(included files)中的任何一个地方声明它。这个函数是:??1、half4 LightingName(SurfaceOutput s, half3 lightDir, half atten):这是在正向渲染路径(forward rendering path)中使用的光照模式。它不是取决于视图方向的(view direction)。??2、half4 LightingName(

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档