- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Unity双面渲染shader
双面渲染shader
Unity内置的Shader,都是单面效果,想必导入Mesh的同学都碰到过这样的痛苦,布料飘起的背面部分看起来是空气,汽车透过车窗看到是路面...各种蛋疼。
有些文章教导大家 把模型做出厚度来吧,这种做法实在太那个啥了......
?
其实用改写Shader的方法可以很方便的实现双面材质。
Unity里有3种Shader方式:
1.Fixed Function Shaders?
2.Vertex and Fragment Shaders
3. Surface Shaders
关于这部分的详细介绍,请参考官方的教程。
这三种方式里,都可以通过直接在Shader代码头部添加一个Cull off 语句,实现强制双面渲染。
但是直接用Cull off的方式 有个重大的缺陷,这材质从两面看无论贴图、颜色、反光、照明情况,都是一模一样的,这并不符合大多数实际情况的常识。
在第1和第2种Shader里,是可以通过在一个渲染子程序里用两个渲染Pass来实现双面不同效果的,这部分网上的资料也很多,写起来也很简单直接。
?
这里主要讨论的是第三种也是最常用的Surface Shader的双面不同效果的实现。
Surface Shader是不能写在Pass里的,所以要实现它的双面不同效果就要用其他变通的办法。
?
首先去Unity官方网站下载一个内置Shader的代码包,链接如下:
/download_unity/builtin_shaders.zip?
打开后看见一堆.shader文件,可以用任何文本编辑器打开。可以看见系统内建的Shader基本都是Surface方式。
这里随便打开一个Normal-BumpSpec.Shader 这是普通的高光-凹凸贴图材质
复制代码
1.Shader Bumped Specular {
2.Properties {
3.? ?_Color (Main Color, Color) = (1,1,1,1)
4.? ?_SpecColor (Specular Color, Color) = (0.5, 0.5, 0.5, 1)
5.? ?_Shininess (Shininess, Range (0.03, 1)) = 0.078125
6.? ?_MainTex (Base (RGB) Gloss (A), 2D) = white {}
7.? ?_BumpMap (Normalmap, 2D) = bump {}
8.}
9.SubShader {
10.? ?Tags { RenderType=Opaque }
11.? ?LOD 400
12.? ?
13.CGPROGRAM
14.#pragma surface surf BlinnPhong
15.
16.
17.sampler2D _MainTex;
18.sampler2D _BumpMap;
19.fixed4 _Color;
20.half _Shininess;
21.
22.struct Input {
23.? ?float2 uv_MainTex;
24.? ?float2 uv_BumpMap;
25.};
26.
27.void surf (Input IN, inout SurfaceOutput o) {
28.? ?fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
29.? ?o.Albedo = tex.rgb * _Color.rgb;
30.? ?o.Gloss = tex.a;
31.? ?o.Alpha = tex.a * _Color.a;
32.? ?o.Specular = _Shininess;
33.? ?o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
34.}
35.ENDCG
36.}
37.FallBack Specular
38.}
?
简单解说一下几个关键行:
第一行Shader Bumped Specular 指定了这个shader出现在Unity系统Shader菜单里的名字,如果要修改系统内建Shader的源代码,最好把这个名字改掉,否则和系统内建Shader重名啦。我是这样写的: Shader Hogs shaders/BumpSpec_Twoside ,这个shader会出现在Hogs shaders组里,系统会自动完成这个加载。
第二行Properties后面的一组以下划线开头的变量表示了这个渲染器需要设置的参数。对于一个高光-凹凸材质来说,需要材质颜色、反光颜色、反光率、材质贴图和法线贴图,这5个变量就对应这5个东西啦,详细请参考系统手册。
在第11行LOD 4
您可能关注的文档
- RV系列蜗轮蜗杆减速机.pdf
- SCIKEE STEKI无励磁制动器.pdf
- SKF 型号说明.doc
- NAIF-奈孚减速机样本(2015版).pdf
- SC气体增压泵选型样本.pdf
- SO(n) SO(n-1)张量表示和旋量表示的分支公式.pdf
- SCIKEE STEKI NAB型空压通轴式制动器.pdf
- udor高压柱塞泵和10scy14-1b轴向柱塞泵价格.docx
- V型气水反冲洗均质滤料滤池关键施工技术研究.pdf
- WF卧式不锈钢离心泵_化工环保电镀漂染耐腐蚀管道增压泵型号_选型.pdf
- 中国行业标准 GM/T 0126-2023HTML密码应用置标语法.pdf
- 《JJF 2121-2024恒转速源校准规范》.pdf
- 餐饮服务中20条处理要点.docx
- 《GM/T 0011-2023可信计算 可信密码支撑平台功能与接口规范》.pdf
- 《JJF 2134-2024旋转流变仪校准规范》.pdf
- JJF 2121-2024恒转速源校准规范.pdf
- 计量规程规范 JJF 2121-2024恒转速源校准规范.pdf
- 《JJF 2118-2024压力式六氟化硫气体密度控制器校验仪校准规范》.pdf
- JJF 2134-2024旋转流变仪校准规范.pdf
- 计量规程规范 JJF 2134-2024旋转流变仪校准规范.pdf
文档评论(0)