Unity3D教程典之Shader篇:第十四讲Surface Shader.docxVIP

Unity3D教程典之Shader篇:第十四讲Surface Shader.docx

  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教程典之Shader篇:第十四讲Surface Shader

原创文章如需转载请注明:转载自 HYPERLINK /lsy835375 风宇冲Unity3D教程学院 ????????????????????????????Shader第十四讲?Surface?Shader ???用Shader来实现光照是比较复杂的,有不同的光类型,不同的阴影选项,不同的Render Path(forward和Deferred)。 Unity只是把光照模型封装处理了,Shader的代码还是用CG/HLSL编写的。 ????????????????????????例一:最简单的Surface Shader ? Shader?Custom/T_3_0?{ Properties?{ _MainTex (Base (RGB),?2D) =?white?{} } SubShader?{ CGPROGRAM #pragma?surface surf Lambert sampler2D _MainTex; struct?Input { float2 uv_MainTex; } ; void?surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D (_MainTex, IN.uv_MainTex); o.Albedo = c.rgb; o.Alpha = c.a; } ENDCG } ? } 表面处理函数从顶点处理函数(这里自动顶点处理)接收参数Input IN,输出SurfaceOutput o至光照模型(这里是Lambert)。 这里我们就做了三件事: (1)通过uv取得了贴图对应uv的颜色c ??(2)把c.rgb赋给o.Albedo ??(3) 把c.a赋给o.Alpha 这就完成了。之后让任一物体使用该Shader,则不管加什么光都能正确显示。真的很简单! ???????????????????????????????表面处理函数surf的输入及输出 (1)输入 struct?Input { float2 uv_MainTex; float3 viewDir; float4 anyName:COLOR; float4 screenPos; ????????float3 worldPos; float3 worldRefl; } ; uv_MainTex: uv viewDir: 入视角 screenPos:裁剪空间位置 worldPos:世界空间位置 (2)输出 ? struct SurfaceOutput { ????half3 Albedo; ????half3 Normal; ????half3 Emission; ????half Specular; ????half Gloss; ????half Alpha; }; Albedo:漫反射颜色 Normal: 法线 Emission:自发光颜色 Specular:镜面反射系数 Gloss: Alpha:透明值  HYPERLINK /Documentation/Components/SL-SurfaceShaders.html \t _blank 更多的参数请参考文档 ?????????????????????????????????????????Surface Shader参数 Surface Shader可以通过加参数实现额外的控制,例如加顶点处理函数,alpha混合等。 注意: 如果使用的光照模型是Unity自带的Lambert或者BlinnPhong: alpha混合,alpha混合等功能必须使用Surface Shader参数。 之前例如AlphaTest Greater 0.3 等代码就不能再加了。如果加了的话,光照失效,物体为一片漆黑。 如果使用的光照模型是自定义光照模型: 只要在surf中给o.Alpha正常赋值(如赋贴图颜色的a值),那么之前例如AlphaTest Greater 0.3 等代码依然可以照常使用。具体相关代码可以参考下一讲中的代码。 (1)alpha混合 直接加参数Alpha即可 #pragma?surface surf BlinnPhong alpha (2)alphatest 加入一个变量,这里起名为_Cutoff, 然后在#pragma?surface结尾处加上alphatest:_Cutoff。 效果是alpha值大于_Cutoff时,才会输出颜色 ? ? Shader?Custom/T_3_0?{ Properties?{ _MainTex (Base (RGB),?2D) =?white?{} _Cutoff (Alpha cutoff,?Range(0,1)) =?0.5 } SubShader?{ CGPROGRAM

文档评论(0)

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

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

1亿VIP精品文档

相关文档