人气 177

[行业观察] 滤色片效果的实现 [复制链接]

九艺网 2017-3-10 17:00:53

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
刚刚讲过的《Alpha混合》及它的应用,够广泛的吧。当时我也认为几乎所有的色彩变换都可以转化成一个alpha混合的问题,但后来有一天晚上睡觉前闲得没事,想到了中学物理里的一些色彩知识,觉得还有其他的色彩转换方式,这里谈一下滤色片效果。  滤色片效果,最典型的就是Diablo(又是Diablo,没办法,谁让人家这么出名,人怕出名猪怕壮嘛)里你的主角死掉的时候,屏幕一片血红。在真实世界里,透过一块有色玻璃——简单一点,就说红色吧——看东西,看到的一切不是各种深浅的红色就是黑色的,因为其他颜色的光线都被滤掉了(想一下,和alpha混合有出入了吧)。就是说这时颜色里的RGB分量只有R分量剩下来,GB分量都变成0了。这可以用一个简单的式子来得到这种效果。
B(RGB)=A(RGB)&mask
  其中B是看到的颜色,A是原来的颜色,mask是滤镜颜色的掩模。
  举个例子:
16位高彩565模式,B=A(RRRRRGGGGGGBBBBB)&0xf800=RRRRR00000000000

  明白了吧。这是红光全部透过的效果,但如果红光只是部分透过呢?这时的靠掩模就不行了,得另想个办法。
  设红色滤片颜色为R(x)(x=0..255),这时透过的红光最多只能是x,就是说:
if(R(A)>x) R(B)=x;
else R(B)=R(A);

  上面的掩模的式子是当x=255时的特例,同样对GB分量也是一样的,如果滤色片不是纯色,就对RGB分量分别运算,再组合起来。(这样对高彩模式——16位模式——又想不出什么快速算法了,我苦,只好用纯色来糊弄了。如果各位有什么快速算法,就是不用拆开颜色分量再组合的方法,速通知我,在下不胜感激)。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-4-19 06:42 , Processed in 0.087918 second(s), 23 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.