什么是遮罩?

遮罩允许我们可以保护某些区域,使它们奂于某些修改。

例如下面的例子,使用遮罩来控制高光反射。

转载请注明出处:http://www.cnblogs.com/jietian331/p/7149182.html

使用的贴图,法线,遮罩纹理如下:

shader如下:

  1. // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
  2.  
  3. Shader "Custom/Mask Texture"
  4. {
  5. Properties
  6. {
  7. _MainTexture("Main Texture", 2D) = "white" {}
  8. _NormalMap("Normal Map", 2D) = "bump" {}
  9. _MaskTexture("Mask Texture", 2D) = "white" {}
  10. _Specular("Specular", Color) = (, , , )
  11. _Gloss("Gloss", Range(, )) =
  12. }
  13.  
  14. SubShader
  15. {
  16. Pass
  17. {
  18. Tags
  19. {
  20. "LightMode" = "ForwardBase"
  21. }
  22.  
  23. CGPROGRAM
  24. #pragma vertex vert
  25. #pragma fragment frag
  26.  
  27. #include "UnityCG.cginc"
  28. #include "Lighting.cginc"
  29.  
  30. struct appdata
  31. {
  32. float4 vertex : POSITION;
  33. float4 uv : TEXCOORD0;
  34. float3 normal : NORMAL;
  35. float4 tangent : TANGENT;
  36. float4 color : COLOR;
  37. };
  38.  
  39. struct v2f
  40. {
  41. float4 pos : SV_POSITION;
  42. float4 color : COLOR;
  43. float4 uv : TEXCOORD0;
  44. float3 tangentLight : TEXCOORD1;
  45. float3 tangentView : TEXCOORD2;
  46. };
  47.  
  48. v2f vert(appdata v)
  49. {
  50. v2f o;
  51. o.pos = UnityObjectToClipPos(v.vertex);
  52. o.uv = v.uv;
  53. o.color = v.color;
  54.  
  55. float3 objLightDir = ObjSpaceLightDir(v.vertex);
  56. float3 objViewDir = ObjSpaceViewDir(v.vertex);
  57.  
  58. TANGENT_SPACE_ROTATION;
  59. o.tangentLight = mul(rotation, objLightDir);
  60. o.tangentView = mul(rotation, objViewDir);
  61. return o;
  62. }
  63.  
  64. sampler2D _MainTexture;
  65. sampler2D _NormalMap;
  66. sampler2D _MaskTexture;
  67. float4 _Specular;
  68. float _Gloss;
  69.  
  70. fixed4 frag(v2f i) : SV_TARGET
  71. {
  72. fixed3 tangentNormal = UnpackNormal(tex2D(_NormalMap, i.uv));
  73. fixed3 albedo = tex2D(_MainTexture, i.uv).rgb * i.color;
  74. fixed3 ambient = albedo * UNITY_LIGHTMODEL_AMBIENT.rgb;
  75.  
  76. fixed3 diff = albedo * _LightColor0.rgb * max(, dot(tangentNormal, i.tangentLight));
  77.  
  78. fixed4 mask = tex2D(_MaskTexture, i.uv);
  79. fixed3 halfDir = normalize(i.tangentView + i.tangentLight);
  80. fixed3 spec = _Specular.rgb * _LightColor0.rgb * pow(max(, dot(halfDir, tangentNormal)), _Gloss) * mask.r;
  81.  
  82. fixed3 col = ambient + diff + spec;
  83. return fixed4(col, );
  84. }
  85.  
  86. ENDCG
  87. }
  88. }
  89.  
  90. Fallback "Specular"
  91. }

使用和不使用遮罩的效果对比图如下:

使用遮罩:

不使用遮罩:

资源如下:

http://files.cnblogs.com/files/jietian331/MaskTexture.rar

Unity shader学习之遮罩纹理的更多相关文章

  1. Unity shader学习之渐变纹理

    渐变纹理,及使用纹理来存储漫反射光照的结果,这种技术在游戏<军团要塞2>中流行起来,它也是由Valve公司(提出半兰伯特光照技术的公司)提出来的,他们使用这种技术来渲染游戏中具有插画风格的 ...

  2. Unity Shader 学习之旅

    Unity Shader 学习之旅 unityshader图形图像 纸上学来终觉浅,绝知此事要躬行 美丽的梦和美丽的诗一样 都是可遇而不可求的——席慕蓉 一.渲染流水线 示例图 Tips:什么是 GP ...

  3. Unity Shader 学习之旅之SurfaceShader

    Unity Shader 学习之旅之SurfaceShader unity shader 图形图像  如果大地的每个角落都充满了光明 谁还需要星星,谁还会 在夜里凝望 寻找遥远的安慰——江河 官方文档 ...

  4. 【Unity Shader学习笔记】Unity基础纹理-单张纹理

    1 单张纹理 1.1 纹理 使用纹理映射(Texture Mapping)技术,我们把一张图片逐纹素(Texel)地控制模型的颜色. 美术人员建模时,会在建模软件中利用纹理展开技术把纹理映射坐标(Te ...

  5. 【Unity Shader学习笔记】Unity基础纹理-渐变纹理

    纹理可以用来存储任何表面属性. 可以通过使用渐变纹理来实现插画风格的渲染效果. 这项技术是由Valve公司提出的.Valve使用它来渲染游戏中具有插画风格的角色. 我们使用半兰伯特模型计算漫反射. 因 ...

  6. 【Unity Shader学习笔记】Unity基础纹理-法线贴图

    1 高度纹理 使用一张纹理改变物体表面法线,为模型提供更多细节. 有两种主要方法: 1.高度映射:使用一张高度纹理(height map)来模拟表面位移(displacement).得到一个修改后的法 ...

  7. 第四章 开始Unity Shader学习之旅(2)

    目录 1. 强大的援手:Unity提供的内置文件和变量 1.1 内置的包含文件 1.2 内置的变量 2. Unity提供的Cg/HLSL语义 2.1 什么是语义 2.2 Unity支持的语义 2.3 ...

  8. 第四章 开始Unity Shader学习之旅(1)

    1. 一个最简单的顶点/片元着色器 现在,我们正式开始学习如何编写Unity Shader,更准确的说是,学习如何编写顶点/片元着色器 2.顶点/片元着色器的基本结构 我们在以前已经讲过了Unity ...

  9. Unity Shader学习笔记-1

    本篇文章是对Unity Shader入门精要的学习笔记,插图大部分来自冯乐乐女神的github 如果有什么说的不正确的请批评指正 目录 渲染流水线 流程图 Shader作用 屏幕映射 三角形遍历 两大 ...

随机推荐

  1. radio样式的写法,单选和多选如何快速的改变默认样式,纯CSS,

    一.纯CSS写法改变单选框的默认选择样式,用背景图片代替 input[type='radio']:radio:before { content: '';//这里需要有 width: 20px; hei ...

  2. [nginx] load balancing & location

    一 将NGINX配置成7层load balancer,该怎么做? 参见: http://nginx.org/en/docs/http/load_balancing.html https://docs. ...

  3. 《linux 文件目录》- touch/rm/mv/cat/head/tail/cp/mkdir/chmod/chown/find/locate/which/whereis

    一:基本 / 根目录下目录结构定义 /bin 常见的用户指令 ls/echo ...... 等 /boot 内核和启动文件 /dev 设备文件 /etc 系统和服务配置文件 /home 用户家目录 / ...

  4. Matlab 快捷键 命令

    1. 在命令窗口(Command Window)中: 1) [上.下键]――切换到之前.之后的命令,可以重复按多次来达到你想要的命令 2) clc――清除命令窗口显示的语句,此命令并不清空当前工作区的 ...

  5. 使用Apache CXF根据wsdl文件生成代码

    1.去官网下载,我用的是apache-cxf-2.5.10.zip 2.解压 3.通过命令行进入Apache CXF的bin目录,如我的目录是D:\BIS\axis2\apache-cxf-2.7.1 ...

  6. swift 相机、相册、定位的权限判断

    //是否开启相机权限 func IsOpenCamera() -> Bool{ let authStatus = AVCaptureDevice.authorizationStatus(for: ...

  7. Log4j Append属性指定是否追加内容

    Log4j默认是不断的把日志内容追加到日志文件: 这里就有个属性 Append 默认就是true: 假如我们设置成false 就不追加了 直接覆盖前面的内容: 我们来测试下: log4j.rootLo ...

  8. python-面向对象-13_文件

    文件 目标 文件的概念 文件的基本操作 文件/文件夹的常用操作 文本文件的编码方式 01. 文件的概念 1.1 文件的概念和作用 计算机的 文件,就是存储在某种 长期储存设备 上的一段 数据 长期存储 ...

  9. laravel用crud之index列出产品items

    前面我们说了laravel用crud修改产品items-新建resource controller和routing,现在我们要把产品items罗列出来,需要修改路由和模板,一起随ytakh来看看把 1 ...

  10. host文件

    # Copyright (c) 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP f ...