shader篇-纹理-遮罩纹理
shader篇-纹理-遮罩纹理
- shader篇-纹理-遮罩纹理
- 简介
- 使用流程和原理
- 代码实现
简介
==
什么是遮罩纹理?它保护了某些区域,使他们免于某些修改。
比如说高光,你希望模型不同区域有不同的高光强度和高光指数,从而达成细腻的效果,就可以用遮罩纹理控制光照。
比如制作地形需要混混多张图片,遮罩纹理可以控制如何混合这些纹理。
使用流程和原理
遮罩纹理的使用流程是:采用得到遮罩纹理的纹素值后,使用其中某个通道值与表面属性相乘。这样,当通道为0时,可以保护表面属性不受该属性的影响。
代码实现
配置
Properties {_Color ("Color Tint", Color) = (1, 1, 1, 1)_MainTex ("Main Tex", 2D) = "white" {}_BumpMap ("Normal Map", 2D) = "bump" {}_BumpScale("Bump Scale", Float) = 1.0//高光反射遮罩纹理_SpecularMask ("Specular Mask", 2D) = "white" {}//控制遮罩影响度的系数_SpecularScale ("Specular Scale", Float) = 1.0_Specular ("Specular", Color) = (1, 1, 1, 1)_Gloss ("Gloss", Range(8.0, 256)) = 20}SubShader {Pass { Tags { "LightMode"="ForwardBase" }CGPROGRAM#pragma vertex vert#pragma fragment frag#include "Lighting.cginc"fixed4 _Color;sampler2D _MainTex;float4 _MainTex_ST;sampler2D _BumpMap;float _BumpScale;sampler2D _SpecularMask;float _SpecularScale;fixed4 _Specular;float _Gloss;
输入输出结构体
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;};
顶点着色器
在顶点着色器完成了坐标的变换,把它们从模型空间变换到了切线空间
v2f vert(a2v v) {v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.uv.xy = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw;TANGENT_SPACE_ROTATION;o.lightDir = mul(rotation, ObjSpaceLightDir(v.vertex)).xyz;o.viewDir = mul(rotation, ObjSpaceViewDir(v.vertex)).xyz;return o;}
片元着色器
我们在片元着色器使用遮罩纹理
fixed4 frag(v2f i) : SV_Target {fixed3 tangentLightDir = normalize(i.lightDir);fixed3 tangentViewDir = normalize(i.viewDir);fixed3 tangentNormal = UnpackNormal(tex2D(_BumpMap, i.uv));tangentNormal.xy *= _BumpScale;tangentNormal.z = sqrt(1.0 - saturate(dot(tangentNormal.xy, tangentNormal.xy)));fixed3 albedo = tex2D(_MainTex, i.uv).rgb * _Color.rgb;fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * albedo;fixed3 diffuse = _LightColor0.rgb * albedo * max(0, dot(tangentNormal, tangentLightDir));fixed3 halfDir = normalize(tangentLightDir + tangentViewDir);//在计算高光反射,采用遮罩纹理来控制高光强度fixed specularMask = tex2D(_SpecularMask, i.uv).r * _SpecularScale;fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(max(0, dot(tangentNormal, halfDir)), _Gloss) * specularMask;return fixed4(ambient + diffuse + specular, 1.0);
}
遮罩纹理除了用来保护某些区域使它们免于修改,还可以存储其他逐像素控制的表面属性。
shader篇-纹理-遮罩纹理相关推荐
- 第七章 凹凸映射 渐变纹理 遮罩纹理
一.凹凸映射 1.切线空间存储法线纹理 优点: (1)自由度高,将纹理应用到其他模型上,有时候也能得到合理的结果 (2)可以进行uv动画,制作出火山熔岩的效果 (3)可以重用法线纹理 (4)可以压缩 ...
- Unity Shader入门精要第七章 基础纹理之遮罩纹理
Unity系列文章目录 文章目录 Unity系列文章目录 前言 一.实践 参考 前言 遮罩纹理(mask texture)是本章要介绍的最后一种纹理,它非常有用,在很多商业游戏中 都可以见到它的身影. ...
- 【Unity Shader】纹理实践4.0:简单尝试渐变纹理和遮罩纹理
写在前面 由于我还是处于刚刚入门(其实还是小菜鸡...)的阶段,关于渐变纹理目前主要是学习一下如何通过渐变纹理控制漫反射光照. 这种用渐变纹理控制颜色效果的想法,是Valve公司(提出半兰伯特光照技术 ...
- 渐变纹理 和 遮罩纹理
渐变纹理 纹理不仅可以定义一个物体的颜色,也可以用来存储任何表面属性.比如用渐变纹理 来控制漫反射光照结果.可以通过使用不同的渐变纹理 来控制物体的漫反射光照. Shader "Custom ...
- opengl es3.0学习篇八:纹理
2019独角兽企业重金招聘Python工程师标准>>> 学习内容来源and参考 opengl es 3.0编程指南 https://www.jianshu.com/p/4d8d352 ...
- [Python从零到壹] 六十一.图像识别及经典案例篇之基于纹理背景和聚类算法的图像分割
祝大家新年快乐,阖家幸福,健康快乐! 欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所 ...
- android纹理缓存,Android OpenGLES(七) 理解纹理与纹理过滤
1.理解纹理 OpenGL中的纹理可以用来表示图像,照片,甚至由一个数学算法生成的分形数据.每个二维的纹理都由许多小的纹理元素组成,它们是小块的数据,类似于我们前面讨论过的片段和像素.要使用纹理,最常 ...
- 处理2D图像和纹理——投影纹理
创建一面镜子:投影纹理 问题 你想在场景中创建一面镜子.例如,在一个赛车游戏中创建一面后视镜.你也可以使用这个技术创建一个反射贴图. 解决方案 首先需要将镜子中看到的场景绘制到一张纹理中.然后,绘制相 ...
- 纹理对象纹理单元纹理目标_网页设计理论:纹理
纹理对象纹理单元纹理目标 Texture has become an indispensable element in web design. It is not only a trend but a ...
- 多重纹理和纹理组合器
多重纹理和纹理组合器 本文主要介绍OpenGL中两种技术的使用方法:多重纹理技术和纹理组合器技术,最终根据参考[2]中的代码,实现了两个简单的演示DEMO,其中使用到了<八叉树颜色量化.BMP. ...
最新文章
- Debug Your Life!关于学习、面试和工作成长(附B站录播)
- 首位猪心移植患者去世!术后存活2个月,创造医学里程碑;官方讣告:哀悼并感谢所作巨大贡献...
- linux 下常见启动文件配置
- CBM--组件化业务模型简介
- 十七、深入Java的类
- 新疆大学(新大)OJ xju 1010: 四个年级 C++ STL map 将4层循环优化成2层循环可解
- Python知道cos值求角度_Python——画一棵漂亮的樱花树
- HDU6184【Counting Stars】(三元环计数)
- 绘制三维散点图_SPSS统计作图教程:三维散点图
- hrsc2016 下载 数据集_PIoU Loss:倾斜目标检测专用损失函数,公开超难倾斜目标数据集Retail50K | ECCV 2020 Spotlight...
- Quick BI产品核心功能大图(四):Quick引擎加速--十亿数据亚秒级分析
- 三星是android吗,三星 Galaxy Camera(三星安卓相机)
- linux 安装php7.3
- 视频教程-C#多层架构项目实战房屋中介管理系统-C#
- Qt 开发activex控件(以中控的指纹仪URU4000B为例)
- [USA]办理美国签证,被Check
- 程序员那些悲催的事儿
- 解剖Twitter:Twitter系统架构设计分析
- 钉钉内部企业应用免登录 php js
- 2022年湖南省临床执业医师考试第二单元生理学模拟题