• 渐变纹理

纹理不仅可以定义一个物体的颜色,也可以用来存储任何表面属性。比如用渐变纹理 来控制漫反射光照结果。可以通过使用不同的渐变纹理 来控制物体的漫反射光照。

Shader "Custom/RampTexture"
{Properties{_Color ("Color", Color) = (1,1,1,1)//渐变纹理_RampTex ("Ramp Tex", 2D) = "white" {}_Specular("Specular",Color)=(1,1,1,1)_Gloss ("Gloss", Range(8,256)) = 20}SubShader{pass{Tags{"LightMode"="ForwardBase"}CGPROGRAM#pragma vertex vert#pragma fragment frag#include "Lighting.cginc"fixed4 _Color ;sampler2D _RampTex;float4 _RampTex_ST;fixed4 _Specular;float _Gloss;struct a2v{float4 vertex :POSITION;float3 normal:NORMAL;float4 texcoord:TEXCOORD0;};struct v2f{float4 pos:SV_POSITION;float3 worldNormal:TEXCOORD0;float3 worldPos:TEXCOORD1;float2 uv:TEXCOORD2;};v2f vert(a2v v){v2f o;o.pos=UnityObjectToClipPos(v.vertex);o.worldNormal=UnityObjectToWorldNormal(v.normal);o.worldPos=mul(unity_ObjectToWorld,v.vertex).xyz;//计算经过平铺 和偏移后的纹理坐标o.uv=TRANSFORM_TEX(v.texcoord,_RampTex);return o;}   fixed4 frag(v2f i):SV_Target{fixed3 worldNormal=normalize(i.worldNormal);fixed3 worldLightDir=normalize(UnityWorldSpaceLightDir(i.worldPos));fixed3 ambient=UNITY_LIGHTMODEL_AMBIENT.xyz;//half Lambertfixed  halfLambert=0.5 * dot(worldNormal,worldLightDir)+0.5;fixed3 diffuseColor=tex2D(_RampTex,fixed2(halfLambert,halfLambert)).rgb * _Color.rgb;fixed3 diffuse=_LightColor0.rgb*diffuseColor;fixed3 viewDir=normalize(UnityWorldSpaceViewDir(i.worldPos));fixed3 halfDir=normalize(worldLightDir+viewDir);fixed3 specular=_LightColor0.rgb*_Specular.rgb*pow(max(0,dot(worldNormal,halfDir)),_Gloss);return fixed4(ambient+diffuse+specular,1);}ENDCG}}FallBack "Specular"
}

通过使用不同的渐变纹理,来改变 模型风格

第一张图使用的是 紫色到浅黄色的 渐变纹理。第二张渐变纹理是 中间分界线 微微发红,插画中阴影处是用这样的色调。

第三张通常被用于 卡通风格,色调突变 没有平滑过渡,模拟卡通中的阴影色块。

  • 遮罩纹理

允许我们可以保护某些区域不被修改。比如我们 想让 模型的某些区域反光强度强烈一些,某些区域弱一点,这时我们就可以采用一张遮罩纹理来控制光照。还有就是在制作地形材质的时候需要混合多张图片,例如草地的纹理,表现石子的纹理,裸露土地的纹理等,使用遮罩纹理可以控制如何混合这些纹理。

是用遮罩纹理流程:通过采样得到遮罩纹理的纹素值,然后使用其中某个或者 某几个通道的值(比如 texel.r)来与某种表面属性进行相乘,这样当该通道的值为0的时候,可以保护表面不受属性的影响。

Shader "Custom/MaskTexture"
{ Properties{_Color ("Color", Color) = (1,1,1,1)_MainTex ("Main Tex", 2D) = "white" {}_BumpMap("Normal Map",2D)="bump" {}_BumpScale("Bump Scale",Float)=1_SpecularMask("Specular Mask",2D)="white"{}_SpecularScale("Specular Scale",Float)=1_Specular("Specular",Color)=(1,1,1,1)_Gloss ("Gloss", Range(8,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-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);//获取遮罩值 ,采用r 分量来计算掩码值,来控制高光反射强度fixed3 specularMask=tex2D(_SpecularMask,i.uv).r *_SpecularScale;//计算高光部分,和高光遮罩fixed3 specular=_LightColor0.rgb*_Specular.rgb*pow(max(0,dot(tangentNormal,halfDir)),_Gloss)*specularMask;//fixed3 specular=_LightColor0.rgb*_Specular.rgb*pow(max(0,dot(tangentNormal,halfDir)),_Gloss);//return fixed4(ambient+diffuse,1);return fixed4(ambient+diffuse+specular,1);}ENDCG}}FallBack "Specular"
}

通过使用高光遮罩纹理 依次得到下面的效果。

可以让我们 更加精细的控制光照细节,得到更好的效果。

渐变纹理 和 遮罩纹理相关推荐

  1. 【Unity Shader】纹理实践4.0:简单尝试渐变纹理和遮罩纹理

    写在前面 由于我还是处于刚刚入门(其实还是小菜鸡...)的阶段,关于渐变纹理目前主要是学习一下如何通过渐变纹理控制漫反射光照. 这种用渐变纹理控制颜色效果的想法,是Valve公司(提出半兰伯特光照技术 ...

  2. Unity Shader入门精要第七章 基础纹理之遮罩纹理

    Unity系列文章目录 文章目录 Unity系列文章目录 前言 一.实践 参考 前言 遮罩纹理(mask texture)是本章要介绍的最后一种纹理,它非常有用,在很多商业游戏中 都可以见到它的身影. ...

  3. 【Unity Shader】(八) ------ 高级纹理之立方体纹理及光线反射、折射的实现

    笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) ----- ...

  4. 第七章 凹凸映射 渐变纹理 遮罩纹理

    一.凹凸映射 1.切线空间存储法线纹理 优点: (1)自由度高,将纹理应用到其他模型上,有时候也能得到合理的结果 (2)可以进行uv动画,制作出火山熔岩的效果 (3)可以重用法线纹理 (4)可以压缩 ...

  5. 【Unity Shader入门精要】普通纹理和高级纹理

    原作者博客链接:http://blog.csdn.net/candycat1992/article/  书籍链接:http://product.dangdang.com/23972910.html 纹 ...

  6. CNN结构基元:纹理结构和纹理基元方程化GLOH、Gabor...(Code)

    模式识别专注于寻找相同模式的共性和不同模式的分离.CNN把特征提取全局化,其中重要的一个是纹理特征,利用卷积核来表示纹理基元,用以重现模式,应如何显示表示. 第一次使用纹理特征,2012年,使用了灰度 ...

  7. OpenGL纹理过滤以及纹理Wrapping mode

     在三维动态场景中,如果一个纹理对象迅速地远离观察点而去,此时纹理图像必须随被投影的图像一起缩小,否则很产生抖动或者闪烁的现象.为了避免产生抖动或者闪烁,OpenGL必须对纹理图像进行过滤,适当的 ...

  8. halcon 纹理检测_Halcon 纹理缺陷检测 apply_texture_inspection_model

    在纹理中找瑕疵.基于高斯混合模型(GMM)分类器的纹理检查模型,适用于图像金字塔,可以分析纹理的多个频率范围. [要求]训练样本,必须完美无瑕疵. [步骤] 1.创建模型 2.加载训练样本 3.训练模 ...

  9. (十六)unity shader之——————高级纹理之渲染纹理(镜子、玻璃效果)

    在之前的学习中,一个摄像机的渲染结果会输出到颜色缓冲中,并显示到我们的屏幕上.现在的GPU允许我们把整个三维场景渲染到一个中间缓冲中,即渲染目标纹理(Render Target Texture,RTT ...

最新文章

  1. Linux运维系统工程师与java基础学习系列-6
  2. kotlin学习之对象(九)
  3. FBI为车主支招:如何预防汽车黑客
  4. HDU 5726 GCD
  5. python3 zip()函数笔记
  6. ADO.NET的DataAdapter对象的方法
  7. 終級方案之封USB設備必殺技
  8. 电力系统潮流计算c语言程序,电力系统潮流计算C语言程序.doc
  9. Tasker实现简易的Telegram新消息朗读
  10. 超出本地计算机网络,超出本地计算机网络适配器卡的名称限制怎么解决?
  11. NFS服务器工作原理及权限设置
  12. 2022年电工(初级)考试报名及电工(初级)最新解析
  13. Android入门教程五之使用AndroidStudio+SDK开发安卓APP
  14. Microsoft Teams免费版本初体验
  15. 跑步用挂脖耳机好还是无线耳机、公认最好的跑步耳机推荐
  16. STM32 定时器主从模式,上电立即输出脉冲,输出有尖刺,解决方法
  17. 【李佳辉_周报_2022.10.16】
  18. 学习MyBatis3这一篇就够了
  19. CSS的三种样式——内联、内部、外部
  20. 浅谈ARM Cortex-M系列架构——架构篇

热门文章

  1. maven 插件 spring-boot-maven插件repackage(goal)的那些事
  2. 航天战场态势感知平台
  3. ​ISI、CISI投资者情绪指数(2003-2021年)
  4. 安信可的GPRS+GSM模组A9连接机智云的教程
  5. void fun() const{}; const void fun(){}; 和void const fun(){}; 的区别?
  6. web网页制作,css遮挡动画(让文字慢慢浮现)
  7. (郁闷p2pover中)整理记录一
  8. 【团队建设】团队建设之初篇
  9. RocketMq 封装工具类
  10. 派代年会:85后总裁董欣达亮相