最近有个需求:通过一张贴图的颜色值来控制材质主贴图的透明度。

先做一个注明:用来控制主贴图透明度的贴图,我们暂且称之为“Alpha贴图”;主贴图就叫“主贴图”。

首先,我们需要解决的是将Alpha贴图的颜色值转化成透明度;经过多方测试,最终采用了以下方法:1)比较像素点的r、g、b;2)假设r最大,则float val = r*权重+g+b;3)alpha = val/(权重+2)

直接上代码:

Shader "Custom/MainTexAlphaCtrl"
{Properties{_MainTex("Texture", 2D) = "white" {}//主贴图纹理_AlphaTex("AlphaTexture",2D) = "white"{}//Alpha纹理_BaseColor("Base Color",Color) = (1, 1, 1, 1)_Weight("Weight",float) = 0//Alpha计算时的权重[Toggle(_Reverse)] _Reverse("Reverse", float) = 0//是否取反,用于主贴图的透明度计算}SubShader{Tags { "RenderType" = "Transparent"}LOD 100Cull Off//如果使用Alpha混合,需要关闭深度缓冲写入ZWrite Off//添加混合命令Blend SrcAlpha OneMinusSrcAlphaPass{CGPROGRAM#pragma vertex vert#pragma fragment frag// make fog work#pragma multi_compile_fog#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;};sampler2D _MainTex;sampler2D _AlphaTex;float4 _MainTex_ST;float4 _BaseColor;float _Weight;float _Reverse;//原理:// 1. 前置条件:1)单通道渲染,Unity内置了参数unity_StereoEyeIndex作为渲染左右眼的标志,//                               unity_StereoEyeIndex = 0:渲染左眼画面;=1:渲染右眼画面。//                         2)纹理包含左右双目画面,如果纹理是单目画面,此方法不适用。// 2. 当渲染左眼画面时,取纹理的0~0.5f(包含0.5f)范围;渲染右眼画面时,取纹理的0.5f(不包含0.5f)~1范围。v2f vert(appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.uv, _MainTex);return o;}//将颜色值转化成透明度float color2Alpha(fixed3 col){float a = 0;float val = 0;//比较r、g、b三个值,得到最大值,如果r最大,则val = 4*r+g+b;if (col.r > col.g){if (col.r > col.b){val = _Weight * col.r + col.g + col.b;}else{val = _Weight * col.b + col.g + col.r;}}else{if (col.g > col.b){val = _Weight * col.g + col.r + col.b;}else{val = _Weight * col.b + col.g + col.r;}}//然后val除以(权重+2),得到最终alpha值return val / (_Weight+2);//return (col.r + col.g + col.b)/3;}fixed4 frag(v2f i) : SV_Target{// sample the texturefixed4 main_col = tex2D(_MainTex, i.uv) * _BaseColor;fixed3 alpha_col = tex2D(_AlphaTex, i.uv).rgb;if (_Reverse == 0){return fixed4(main_col.rgb, main_col.a * color2Alpha(alpha_col));}else{return fixed4(main_col.rgb, main_col.a * (1 - color2Alpha(alpha_col)));}}ENDCG}}
}

Unity 使用一张贴图来控制材质主贴图的透明度相关推荐

  1. 使用Deep Exploration进行STK 模型的转换-材质与贴图

    STK模型格式及Deep Exploration介绍 在STK软件中,使用两种格式进行3维模型的显示,mdl和dae两种格式. 其中,mdl格式为STK软件特有的格式,暂时没有现成的CAD软件直接进行 ...

  2. Unity高级功能—法线贴图的制作以及在代码里面进行材质上贴图的切换

    制作法线贴图还是得美术提供你几张基础的法线贴图之后,然后再去制作. 现在我们手里有两张贴图,一张是正常贴图,一张是法线贴图: 1.选择美术提供的基础的法线贴图: Tip:其中Filtering选项有的 ...

  3. opengl 贴图坐标控制_材质贴图正确打开方式

    哈喽,各位观众朋友们好鸭~欢迎来到讲道理画图的地方,我是黄玮宁. 最近呀经常有小伙伴来问我那些不同通道的材质贴图该怎么用,而且频率不是一般的高,所以我觉得有必要来说说这些通道贴图的用法了. 视频版(B ...

  4. 【Unity】获取模型的材质球贴图中的像素点色值

    获取模型的材质球贴图中的像素点色值,可以计算模型贴图的RGB.或某个色值的占比,也可以动态修改指定像素色值. 方式一: 获取可读的贴图,并遍历像素点:(通过Texture获取Texture2D操作的运 ...

  5. unity 材质球无法编辑_【每天一个Unity技巧】批量修改材质球的主贴图和添加法线贴图...

    注释以后有空再写吧,加班到现在还没吃饭呢 using System.Collections; using System.Collections.Generic; using UnityEngine; ...

  6. Unity 材质球贴图寻找

    材质球寻找同级目录下对应贴图 格式为材质球名称后_A _M _N的图片文件. using System.IO; using UnityEditor; using UnityEngine;namespa ...

  7. unity用代码控制材质emission color时,勾选了emission后启动不能正常控制自发光颜色的问题解决

    问题描述: 最近实现一个功能是根据摄像机高度控制材质emission color的自发光(相关材质勾选emission,编写脚本控制emission color的值),做好了之后发现启动不能正常自发光 ...

  8. Unity中用代码动态改变材质球贴图

    首先先把贴图放在Resources文件夹下,或者新建一个文件夹,便于管理. 并命好名,方便遍历. 创建脚本,挂在要动态改变的物体上. using System.Collections; using S ...

  9. 第二章:3ds max材质和贴图

    关于材质和贴图,我们在DirectX中也介绍过.在3ds max中也是通过材质和贴图来表现物体模型的表面纹理.在3ds max中物体模型的材质主要包括颜色,透明度,高光等等,其中贴图用于替换颜色部分, ...

最新文章

  1. C/C++ 中的0长数组(柔性数组)
  2. JS Array filter()方法
  3. redis安装与基本配置
  4. redis-稿件-python连接redis-使用连接池的方式来创建
  5. Apache 服务器的安全策略
  6. react-router中进行路由控制
  7. PHP-表单提交(form)
  8. 1024,今天给大家发100个现金红包和思否课程、掘金小册
  9. rgb sw 线主板接口在哪_火力升级 华硕B460重炮手PRO主板豪横上市_搜狐汽车
  10. python 根据身份证号计算年龄和性别_根据身份证自动计算出生日期、年龄、性别的例子...
  11. matlab求解零输入响应,matlab求解零状态零输入响应
  12. sharepoint 工作经验与技能总结
  13. 【逆向】i春秋入门实战——crack_me
  14. 摄像头各参数的意义_如何选择摄像头,需要考虑那些参数
  15. phpredis使用zadd批量添加到集合
  16. VB、C#等高级语言与三菱PLC(Q系列、L系列、FX系列)串口、以太网通讯的DLL及源代码
  17. Java自学书籍推荐,java程序员面试算法宝典
  18. WiFi 运动,心跳,跌倒监测 (一)
  19. 生产者消费者模型【新版】
  20. 10个Python爬虫实战项目

热门文章

  1. html5 a4页面,如何在A4纸张尺寸页面制作HTML页面?
  2. Django + ajax
  3. 基于安卓的仿米画师(画师约稿)系统的设计与开发
  4. 宠辱不惊 闲看庭前花开花落
  5. [日推荐]『每日故宫lite』不去北京也能游故宫!
  6. 【同花顺公式编辑教程】第1章 编辑器环境
  7. 国外毕业论文写作论证方面如何做好?
  8. ghost手动恢复linux,GHOST手动还原重装系统详细教程(图文)
  9. 教育论文中的论证方式
  10. PS入门(2-2) 点阵格式图像