Transparency与Opacity
In the real world, these properties are often referred to as Transparency or Opacity and are often used interchangeably to describe the same thing. However inside of Unreal Engine 4(UE4), Transparency is used to describe if a surface is see-through or not while Opacity is used to define how see-through the surface is.
注:现实世界中,Transparency(透明)与Opacity(不透明)通常就是反义词,可以自由选择使用其中一个来描述相同的东西。而在UE4中,Transparency通常用于Material的BlendMode属性的选项之一:Translucent,其表达一种二值性,光能还是不能穿透物体。如果能穿透,则进一步用Opacity表达不透明度:
注:现实世界中,Transparency(透明)与Opacity(不透明)通常就是反义词,可以自由选择使用其中一个来描述相同的东西。而在UE4中,Transparency通常用于Material的BlendMode属性的选项之一:Translucent,其表达一种二值性,光能还是不能穿透物体。如果能穿透,则进一步用Opacity表达不透明度:
- Opacity=0:完全透明,光能全部穿过
- Opacity=1:完全不透明,光完全不能穿过
在UE4的Texture Viewer里,关掉RGB通道,只打开Alpha通道,一般会显示一张黑白二值图,其中
- Alpha=1显示纯白
- Alpha=0显示纯黑
- Alpha介于0~1之间显示相应程度灰色
- 这里Alpha就是Opacity的意思
blending(混合)
$$Value_{output}=Value_{src} * Factor_{src}\ [OP]\ Value_{dst} * Factor_{dst}$$
这就是应用面极广的blending操作。
它不光可以应用在颜色领域,也可以应用到动画领域等等,其应用都遵循同样的模式:
已有一个值(dst),现在有另一个值(src)想要参与到该值里面来,问最后是什么值。
比如颜色混合,就是画板上已有一个颜色(dst),现在用一只画笔涂在dst上,问dst变成什么值。
比如动画数据,就是人体已有一套动作数据(dst)在驱动,现在有另一套动作数据想融合到原先动作上,问dst是什么动作。
比如动画数据,就是人体已有一套动作数据(dst)在驱动,现在有另一套动作数据想融合到原先动作上,问dst是什么动作。
在webgl里有gl.blendFunc(sfactor, dfactor)函数,作为函数参数的sfactor与dfactor合法取值范围是预定义的几个值,每个预定义值的含义(包含相关的处理过程)是明确规定的。
注意:这里的sfactor与dfactor不是开头公式里的Factor,它们的关系是sfactor与dfactor的取值,决定了Factor的值。比如webgl里sfactor取gl.ONE时,有SouceFactor取值为1。关于alpha blending里factor的取值参考blendFunc
注意:这里的sfactor与dfactor不是开头公式里的Factor,它们的关系是sfactor与dfactor的取值,决定了Factor的值。比如webgl里sfactor取gl.ONE时,有SouceFactor取值为1。关于alpha blending里factor的取值参考blendFunc
公式里还有一个[OP],在webgl里用gl.blendEquation(mode)来对应它。mode也是预定义的几个值,代表预定义的几个[OP],比如:
- gl.FUNC_ADD:标识[OP]是加法处理。source + destination (default value)
- gl.FUNC_SUBTRACT:source - destination
- gl.FUNC_REVERSE_SUBTRACT:destination - source
mode还有其他一些取值,参考blendEquation
另:RGBA不同的Component或channel可以分别设置不同的blendFunc与blendEquation
对于“权”的理解
看到加权平均数,却很不理解这个计算公式,想了想,其实主要难点在于对“权”的理解。
权就是权重,赋权就是一种数字化,亦即将某个事物量化,想到这里,平均数里还应有另外一个对象,联合起来描述平均数的意义就应该是:一个单位尺度(分母)的一种对象,对应了多少另一种(分子)对象。算术平均数就很好这么理解了,加权平均数按刚才的思考,一个单位尺度的那种对象和通常算术平均数的一个单位尺度的那种对象其实是不同的东西,怎么形象理解呢?就是普通算术平均数的一个单位尺度的那种对象是指一个完整的人的话,那么加权平均数里的这个对象,就是把所有人都切成相同尺寸的薄片后的那个薄片,然后对薄片总数求平均数,形式上和求算术平均数达成了一致,但薄片和人当然不是一个东西。加权的意义是什么呢?这就是人分三六九等这个显而易见的事实的数学处理了,我比较初级,同样的薄片,我只能切成10片,你比较高级,就能切成100片,真惨。一个人的薄片数在所有人的总薄片数中的比例就是这个人的权重。这样想了一圈感觉不合常理,又想了一大圈,嗯,整明白了,是算术平均数不合常理,它把所有人都当作是由完全相同数量和尺寸的薄片组成的实体了。迷糊,有点上头,我到底整明白没有咧?!
整体上再来看一看,发觉其实没这么多虚头巴脑的,你的需求可以把对象平等对待,那就算术平均。需求要区分人的差别,那就用加权。想多了…凌晨被傻蛾子闹醒了,小家伙蹲床头那儿哭,抱起来到客厅秒睡,放下他我又睡不着了,刷抖音到手机快没电,就翻了一下书,就翻到加权平均数,就迷糊了,就死磕了这么多…现在早上五点半了,睡觉去
一个薄片就是一权,薄片数量在总薄片数量占比就是权重值,这就是我理解的基于薄片作为单位来计算平均值的意思,这样就能对应加权平均数的计算公式了。所以加权平均数里首先要清楚把什么东西作为权重对象
关于“股票的平均价格”的例子 这个例子比较好的说明了我上面表达的平均数的意义,在这个股票的例子里就是一股(单位尺度)的股票(对象),对应了(多少)价格(即另一种对象)。注意,价格是用元来描述,股票A的价格总量就是单价*薄片(股),股票B的价格总量亦如此计算,最后价格的平均数为两只股票的价格总量之和,除以薄片(股)数量(即股数之和、总股数),把加法拆开,就很清楚的解释了前面的理解:薄片数量在总薄片数量占比就是权重值
$$\overline{x}=\frac{x_1*n_1+x_1*n_2+\ldots+x_k*n_k}{n_1+n_2+\ldots+n_k}$$
$$\overline{x}=x_1*w_1+x_2*w_2+\ldots+x_k*w_k$$