当前位置:网站首页>遮罩纹理-MaskTexture
遮罩纹理-MaskTexture
2022-08-09 00:08:00 【ThomasQxx】
遮罩纹理
//所谓的遮罩纹理和渐变纹理是类似的
//渐变纹理就是希望光照部分不要对所有的部分都一模一样 而是变换的
//遮罩纹理就是希望高光部分不要都一模一样 而是高光部分各有不同
Shader "QStudyShader/MaskTexture"
{
Properties
{
_MainTex("Main Texture",2D) = "white"{
}
_BaseColor("Base Color",Color) = (1.0,1.0,1.0,1.0)
_MaskTex("Mask Texture",2D) = "mask"{
}
_Gloss("Gloss",Range(8.0,200.0)) = 20.0
_BumpMap("BumpMap",2D) = "Bump"{
}
}
SubShader{
Pass{
Tags{
"LightModel" = "ForwardBase"}
CGPROGRAM
#include "Lighting.cginc"
#pragma vertex Vertex
#pragma fragment Fragment
struct a2v {
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 tangent : TANGENT;
float4 texcoord : TEXCOORD0;
};
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
float3 lightDir : TEXCOORD1;
float3 viewDir : TEXCOORD2;
};
sampler2D _MainTex;
sampler2D _BumpMap;
fixed4 _BaseColor;
float _Gloss;
sampler2D _SpecularMask;
v2f Vertex(a2v v) {
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
TANGENT_SPACE_ROTATION;
o.lightDir = mul(rotation, ObjSpaceLightDir(v.vertex)).xyz;
o.viewDir = mul(rotation, ObjSpaceViewDir(v.vertex)).xyz;
return o;
}
//所谓的遮罩纹理和渐变纹理是类似的
//渐变纹理就是希望光照部分不要对所有的部分都一模一样 而是变换的
//遮罩纹理就是希望高光部分不要都一模一样 而是高光部分各有不同
fixed4 Fragment(v2f i) : SV_TARGET{
fixed3 tangentLightDir = normalize(i.lightDir);
fixed3 tangentViewDir = normalize(i.viewDir);
fixed3 tangentNormal = UnpackNormal(tex2D(_BumpMap, i.uv));
tangentNormal.z = sqrt(1.0 - saturate(dot(tangentNormal.xy, tangentNormal.xy)));
//对主纹理进行混合
fixed3 albedo = tex2D(_MainTex, i.uv).xyz * _BaseColor.xyz;
//环境光混合
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * albedo;
//漫反射
fixed3 diffuse = _LightColor0.xyz * albedo * max(0, dot(tangentNormal, tangentLightDir));
//半程向量 用于计算高光
fixed3 halfDir = normalize(tangentLightDir + tangentViewDir);
//遮罩纹理进行采样
fixed3 specularMask = tex2D(_SpecularMask,i.uv).r;
//和高光混合
fixed3 specular = _LightColor0.xyz * specularMask * pow(max(dot(tangentNormal, halfDir), 0), _Gloss);
return fixed4(diffuse + ambient + specular, 1.0);
}
ENDCG
}
}
}
边栏推荐
- Idea碰到的问题总结
- 《MySQL入门很轻松》第3章:数据库的创建与操作
- 关于字符串根据字典序排序的方法
- Anaconda 使用 Navigator 安装 Tensorflow(包括 Anaconda 安装)
- 2021.10.7 2020 CCPC重现赛
- SyntaxError line:3546,column:96577,SyntaxError: Unexpected token '...'. Expected a property name.
- Laravel框架之JSON
- C——《C和指针》第六章读书笔记
- The difference between the apply and call in js and usage
- 如何使用WebDAV?
猜你喜欢
随机推荐
如何使用Rancher部署发布自己的web应用
数据机构-哈夫曼树
蓝桥杯历届试题-合根植物(并查集)
如何快速简单的设置你的vscode背景图
解决8080端口被占用问题
C#数据流
ADXL345静止时振动值不归零的问题
GRPC学习(An RPC library and framework)
一种新的测转速的方法
Laravel框架之文件上传
Laravel框架之JSON
蓝桥杯历届试题-高僧斗法(博弈论)
APUE---chap4文件和目录---4.2~4.18(stat/access/umask/chmod/remove/rename)
《MySQL入门很轻松》第3章:数据库的创建与操作
2021ccpc网络选拔赛
二 分析C#中的结构
Mysql Workbench导出sql文件出错:Error executing task: ‘ascii‘ codec can‘t decode byte 0xd0 in position 26:
Jupyter代码补全、修改路径、增添解释器
SyntaxError line:3546,column:96577,SyntaxError: Unexpected token '...'. Expected a property name.
使用muse-ui制作省市选择器(ts)