什么是遮罩?

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

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

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

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

shader如下:

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Custom/Mask Texture"
{
Properties
{
_MainTexture("Main Texture", 2D) = "white" {}
_NormalMap("Normal Map", 2D) = "bump" {}
_MaskTexture("Mask Texture", 2D) = "white" {}
_Specular("Specular", Color) = (, , , )
_Gloss("Gloss", Range(, )) =
} SubShader
{
Pass
{
Tags
{
"LightMode" = "ForwardBase"
} CGPROGRAM
#pragma vertex vert
#pragma fragment frag #include "UnityCG.cginc"
#include "Lighting.cginc" struct appdata
{
float4 vertex : POSITION;
float4 uv : TEXCOORD0;
float3 normal : NORMAL;
float4 tangent : TANGENT;
float4 color : COLOR;
}; struct v2f
{
float4 pos : SV_POSITION;
float4 color : COLOR;
float4 uv : TEXCOORD0;
float3 tangentLight : TEXCOORD1;
float3 tangentView : TEXCOORD2;
}; v2f vert(appdata v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
o.color = v.color; float3 objLightDir = ObjSpaceLightDir(v.vertex);
float3 objViewDir = ObjSpaceViewDir(v.vertex); TANGENT_SPACE_ROTATION;
o.tangentLight = mul(rotation, objLightDir);
o.tangentView = mul(rotation, objViewDir);
return o;
} sampler2D _MainTexture;
sampler2D _NormalMap;
sampler2D _MaskTexture;
float4 _Specular;
float _Gloss; fixed4 frag(v2f i) : SV_TARGET
{
fixed3 tangentNormal = UnpackNormal(tex2D(_NormalMap, i.uv));
fixed3 albedo = tex2D(_MainTexture, i.uv).rgb * i.color;
fixed3 ambient = albedo * UNITY_LIGHTMODEL_AMBIENT.rgb; fixed3 diff = albedo * _LightColor0.rgb * max(, dot(tangentNormal, i.tangentLight)); fixed4 mask = tex2D(_MaskTexture, i.uv);
fixed3 halfDir = normalize(i.tangentView + i.tangentLight);
fixed3 spec = _Specular.rgb * _LightColor0.rgb * pow(max(, dot(halfDir, tangentNormal)), _Gloss) * mask.r; fixed3 col = ambient + diff + spec;
return fixed4(col, );
} ENDCG
}
} Fallback "Specular"
}

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

使用遮罩:

不使用遮罩:

资源如下:

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. azkaban---visualize crontab--frontail

    azkaban---visualize crontab azkaban--docker-----http://www.jkeabc.com/254015.html azkaban--tips   ht ...

  2. Django 的操作

    安装: pip install Django 创建django工程 django-admin startproject  mysite python manage.py startapp blog / ...

  3. [development][C] linux 设置线程名称

    两个API, 都是linux的. 不是POSIX, 是GNU?  傻傻搞不清楚. 1. pthread_setname_np / pthread_setname_np 2. ptctl 带 PR_GE ...

  4. Flink - StreamJob

      先看最简单的例子, final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironmen ...

  5. dp的斜率优化

    对于刷题量我觉得肯定是刷的越多越好(当然这是对时间有很多的人来说. 但是在我看来我的确适合刷题较多的那一类人,应为我对知识的应用能力并不强.这两天学习的内容是dp的斜率优化.当然我是不太会的. 这个博 ...

  6. mysql-5.7免安装版本设置

    mysql-5.7.22 免安装版本设置(Windows7) 一.在Mysql官网下载Mysql-5.7.22的ZIP文件  下载链接为:https://dev.mysql.com/downloads ...

  7. TensorFlow设置GPU占用量

    默认开启Tensorflow的session之后,就会占用几乎所有的显存,进行如下设置即可: 指定GPU编号: import os os.environ["CUDA_VISIBLE_DEVI ...

  8. ETL : kettle Spoon 转换 + 作业

    Kettle能做什么? 前言 : 需将db2中数据导入到mysql中,利用etl工具进行多表转换.以此为切入点,系统整理.学习kettle工具. 提醒: kettle是纯java编写,机器需要有jre ...

  9. centos安装Django之四:安装Django

    前面我们学会了centos安装Django之一:安装openssl和centos安装Django之二:pip3安装,centos安装Django之三:安装python,现在我们就可以安装Django了 ...

  10. Python3学习之路~5.6 shutil & zipfile & tarfile模块

    高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length])#将文件内容拷贝到另一个文件中,可以部分内容 shutil.copyfile(s ...