下面为,公式和代码之快问快答
噪点Mask图的作用是?
2贴图融合的公式是?
取决于混色方式。例如按最常用的不透明度计算,每个通道的计算公式是α*A+(1-α)*B,其中A、B分别是两个色层同一通道的灰度值,A层在B层之上。α是A色层的不透明度。
α*A+(1-α)*B
公式怎么来的?
这又一个链接可以参考一下,关于混色的原理,1984年提出
在很多Shader代码里,你会看到大量的(1-a),为什么要用1减去透明度?得到的是什么呢?实际上在做这些算法的时候,研究人员尽量模拟光线的特性来设计,例如,光线穿透一些具有透明度的物体,一部分光会投射过去,剩下一部分反射回来,被我们看到。
假设有两块有颜色的玻璃,一块红色,一块绿色,红色的玻璃透明度alpha = 0.2 ,则这块玻璃的透光率为80%,因为有80%的光透过去了,只有20%能被我们的眼睛接收,所以透明度为0.2,若alpha = 0,则透光率为100%,所有光线都透过去了,我们就看不到了,另一块绿色玻璃的透明度是0.6,则透光率是40%。现在,将两块玻璃叠放到一起,用一束太阳光照射后,光线先穿过红色玻璃,有80%的光透过去了,再经过绿色玻璃,有 80 * 40% = 32%的光透过去了,也就是两块玻璃叠加后,总的透光率为32%,所以透明度为0.68.
举个例子:
如上图,A== 圆 ; B==方;A在B上面
所以(alpha和A容易混淆,不能死背公式,需要理解)
当然,万幸的时,这时很简单的,最简单的加减乘除公式,真的草履虫都要懂的公式
要做2贴图融合,除了公式外,2贴图前后顺序必须先搞清楚,因为公式也是基于贴图的tex2D()取值
Mask 高光 Specular 的应用场景有??
Shader RenderMode Cutout原理
很多时候,Shader理论一堆,但是一上真机测试,完全没效果,可能缺的并不是代码,首先缺是反而一个有用的贴图,能用的贴图,(Unity Shader算不错了,起码不缺环境,不缺编译)
这里假定你有多年的Unity的经验,而且有一点编程经验,而不是找本宣读的大学生
不缺代码,不缺贴图,但缺了一行
Pass {
Tags { "LightMode" = "ForwardBase"}
CGPROGRAM
总之剔除透明部分,就一行代码
//bu不知道有无卵用
SubShader{
Tags { "Queue" = "AlphaTest" "IgnoreProjector" = "True" "RenderType" = "TransparentCutout"}
//写在片元 Frag 着色器
clip(col.a - _Cutoff);
//_Cutoff这参数,需要另外补充
参考:Unity3d同时支持半透、Cutout、阴影三种属性Shader
https://www.it610.com/article/1229590936779067392.htm
颜色十六进制转换
官方有提供不少方法,虽然名字有些怪,但很多三维的运算方法真的很多,要是全部学习,够你学几年了,其中的一个颜色转换方法:
Color nowColor;
ColorUtility.TryParseHtmlString("#FECEE1", out nowColor);
input16Color.text = ColorUtility.ToHtmlStringRGB(nowColor);
外发光Shader的调试
放大