注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

气吞水饺的七格福礼德

Lo siendo, no me acuerdo de eso

 
 
 

日志

 
 

Shake的第二个魔衣橱  

2006-03-17 22:09:01|  分类: 术哈术哈 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
今天杨老师教了Z通道后,我就大约感觉到α通道在整个Shake里的位置,后来,又教了如何用没有α通道的普通RGB图片的R或G或B通道
来代替alpha通道的做法,于是我就很清楚了。

我把心得写在下面,谁能打开这个魔衣橱,谁就有希望进入Shake通往里面世界的路径。
 
实际上α通道就是个权系数,当它为0的时候,该α上的像素就是不显示,1的时候就全部显示,-1的时候则显示反相。
 
进行层运算时,其实就是前景和后景相同位置上的两个像素之间的α进行逻辑运算,运算出来的α值,决定了该点两个像素的混合显示百分比
情况(从100%反相到100%正相)。但这两个点如何混合,则取决于它们各自的RGB通道运算。
 
Z通道也可以这么理解,它只不过是映射景深的一个放大了α通道的通道(你看,我们可以在flooatZinA选项里,将Z的数值通过α通道来显示),但它的层运算我估计非常简单,就一种:max(z1, z2),由于前景物体的z比后景物体的z大,经这个max运算后,将最大值所对应的那个像素的RGB通道都百分之一百的打开显示,于是最终就会有谁在景深前方谁就可以遮挡同一位置后方物体的效果。当然,这里面有一个逆运算,即invert(max(z1, z2)),我觉得这个函数很好玩,因为靠它,我可以制造一个跟透视原理完全相反的视觉世界:比如,你的皮肤被你的内脏挡住了。这个时候,表现佛学经常吹嘘的那种一副臭皮囊的景象,是很合适的呀。

层运算举例(A:前景α通道;B:后景α通道,C:前景RGB通道,D:后景RGB通道):

Atop:{(C|B+D|~A},前景在后景通道区域显示,并且后景在前景通道的补集区域显示
 
Over:{(C+D|~A},前景显示,后景在前通道的补集区域显示
 
Inside:{C|B},前景在后通道区域显示

Outside:{C|~B},前景在后通道的补集区域显示
 
IAdd:{(C+D)|I},前景和后景叠加显示在整个区域

ISub:{(C-D)|I},前景减去后景后显示在整个区域

ISubA:{|C-D||I},前景减去后景的绝对差显示在整个区域

IMult:{(C×D)|I},前景和后景相乘显示在整个区域*

IDiv:{(C÷D)|I},前景被后景除后显示在整个区域**
 
Max:{max(C, D)|AB},前景和后景中像素值最高的像素组合出来的图景显示在前后通道

Min:{min(C, D)|AB},前景和后景中像素值最低的像素组合出来的图景显示在前后通道
 
注:
*
减后要是负数就按0,即纯黑显示。
 
**
我发现首先,当后景颜色为纯黑,即被除数为0时,Shake根本不为所动,得出的数值最大就到1了。总之,只要商大于1就算1。
试算下来,如果前景是1即纯白的话,一除一乘的最小除数只能是0.002,要是前景不是整数1而是小于1的数,保险起见,除数还是大于0.2的好,否则出来的前后颜色会有偏差。

一些按钮之间的等价逻辑路径举例(其中M(A, C), N(B, D),即M和N是RGB通道和α通道的合成通道,这样写起来方便些)。
 
Outside=Invert(Over(Invert(M)N))
 
Inside(M, N)=Outside(M,Invert(N))
 
M=IDiv(IMult(M))

Over(Inside(M, N), N)=Atop(M, N)。
 
 
即Atop是先后用Inside和Over的合成结果。
 
这个魔衣橱做得太累了,好久不碰集合运算,又不熟悉Shake,一个简单的证明都搞得我哈欠连天,还懒得动笔,索性拿两个手在那里比划这个集合那个集合的,真是懒惰到底了。国内出的教科书也是语焉不详,李剑那本Shake实用教程最后11章我看好像都是直接翻译自Shake自带的帮助文件,还省略了些内容,莫非是嫌稿费多得不必逐行翻译了mia?hiahia

不过到这儿,至少我总算理清楚了一些层函数之间的关系,也算没白花时间,事实上,如果可以,将来应该做一个万能通道,它应该是用矩阵排列方式,穷尽一切可能的组合,并且可以不再用通道概念:直接直观得进行工作,比如我选:前景范围F内显示前景70%后景30%,前景范围F外显示前景0%后景90%,以及前景范围F和后景范围G共同的范围内显示后景100%......具体的逻辑运算可以让机器去运行,为什么要艺术家面对这些与非或门愁眉苦脸呢?可惜zen不在,要在,这开发活就可以交给他了。
 
补记:终于给我找到有关这一切的大本营了:
 
Atop r*a2+r2*(1-a)
IAdd r+r2
IDiv r2==0?1:r/r2
IMult r*r2
Inside r*a2
ISub r-r2
ISubA fabs(r-r2)
Max r>r2?r:r2
Min r<r2?r:r2
Mix r*(1-mix)+r2*mix
Outside r*(1-a2)
Over r+(1-a)*r2
Screen 1-(1-r)*(1-r2)
Under r2+r*(1-a2)
Xor r*(1-a2)+r2*(1-a)
  评论这张
 
阅读(86)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018