博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Unity Shaders】使用Unity Render Textures实现画面特效——画面特效中的叠加(Overlay)混合模式...
阅读量:6474 次
发布时间:2019-06-23

本文共 1674 字,大约阅读时间需要 5 分钟。

本系列主要参考一书(感谢原书作者),同时会加上一点个人理解或拓展。

是本书所有的插图。是本书所需的代码和资源(当然你也可以从下载)。

========================================== 分割线 ==========================================

写在前面

在这篇里,我们将会学习另一种混合模式,叠加(Overlay)混合模式。这种混合模式使用了条件判断语句来决定最终的像素值。因此,这里用到的计算会稍微复杂一点(其实也很简单啦)。

我们再复习一下叠加所用的计算公式:

,其中a是基色,b是混合色。

准备工作

  1. 创建一个新的脚本,命名为Overlay_ImageEffect,以及一个新的Shader,名为Overlay_Effect。
  2. 把中的C#代码复制到新的脚本中。
  3. 把中的Shader代码复制到新的Shader中。
  4. Overlay_ImageEffect脚本添加到Camera上,并使用Overlay_Effect Shader给脚本中的Cur Shader赋值。

实现

这篇的代码很简单,大部分都不需要改动。改动的部分如下:
  1. 之前说过,我们需要添加一个条件判断语句来进行颜色混合。为此,我们需要编写一个函数,它依次接受各个通道(RGB)的颜色值,然后再执行叠加操作。在frag函数上方定义如下函数:
    fixed OverlayBlendMode(fixed basePixel, fixed blendPixel) {				if (basePixel < 0.5) {					return (2.0 * basePixel * blendPixel);				} else {					return (1.0 - 2.0 * (1.0 - basePixel) * (1.0 - blendPixel));				}			}
  2. 最后,修改frag函数,来混合两张textures中的各个通道:
    fixed4 frag(v2f_img i) : COLOR {				//Get the colors from the RenderTexture and the uv's				//from the v2f_img struct				fixed4 renderTex = tex2D(_MainTex, i.uv);				fixed4 blendTex = tex2D(_BlendTex, i.uv);								fixed4 blendedImage = renderTex;								blendedImage.r = OverlayBlendMode(renderTex.r, blendTex.r);				blendedImage.g = OverlayBlendMode(renderTex.g, blendTex.g);				blendedImage.b = OverlayBlendMode(renderTex.b, blendTex.b);				// Adjust amount of Blend Mode with a lerp				renderTex = lerp(renderTex, blendedImage,  _Opacity);								return renderTex;			}
最后,你可以看到类似下面的效果:
叠加(Overlay)混合模式 Opacity = 1.0 :

解释

叠加混合效果,实际上就是正片叠底(Multiply)和滤镜(Screen)两种混合模式的结合。它通过判断每个通道的颜色值,来决定使用哪种混合模式。
这篇是画面特效一章的最后一节了啦~如你所见,画面特效里面包含了很多知识和内容。它非常依赖你的平台和分配给画面特效的内存容量。那么,尽可能愉快而富有创造力地和画面特效玩耍吧~

转载于:https://www.cnblogs.com/xiaowangba/p/6314672.html

你可能感兴趣的文章
使用表格分割图片
查看>>
我的友情链接
查看>>
为CentOS虚拟机添加第二块网卡
查看>>
Linux防火墙iptables学习笔记
查看>>
Java常用类(一)Object
查看>>
激励着我前进
查看>>
我的友情链接
查看>>
npm打包指定本地nexus仓库
查看>>
IP地址简介
查看>>
LDAP服务原理详解
查看>>
Docker容器初体验
查看>>
SSH异常和日志处理方案
查看>>
我的友情链接
查看>>
jquery操作select
查看>>
我的友情链接
查看>>
在word2003插入音乐的方法
查看>>
九、多表模型创建,一对一,一对多,基于对像的多表模型等
查看>>
Xenserver网卡丢失进入emergency mode的处理方法
查看>>
扩展实验:LAMP+NFS
查看>>
[ComandDetail] Vim
查看>>