[ShaderStaff] Vignette Effect

2023-10-10 23:30
文章标签 effect vignette shaderstaff

本文主要是介绍[ShaderStaff] Vignette Effect,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

操作系统:Windows8.1

显卡:Nivida GTX965M

开发工具:GLSL | C


 最近在看Cardboard实现,其中关于畸变的着色器代码中有加入 晕影Vignette 效果的实现,固在这里温习、总结一下。

直接上效果图:

未使用Vignette

使用Vignette滤镜效果图:

大概意思如图所示,增加了晕影效果后,使得边缘区域覆盖了厚重的颜色快,其目的是使得观看者更多的将目光聚焦在中心区域,该效果被大量运用到摄影、影视作品中。

比如:

How to implement


先给出全部代码具体解释说明,顶点着色器代码相对比较简单,仅仅是传递Mesh顶点数据及对应的UV数据。

static const char *vertex_shader_source =LINE("attribute vec4 aPosition;")LINE("attribute vec4 aTextureCoord;")LINE("varying highp vec2 vTextureCoord;")LINE("void main() {")LINE("gl_Position = aPosition;")LINE("vTextureCoord = aTextureCoord.xy;")LINE("}");

片段着色器代码:

static const char *fragment_shader_source =LINE("precision mediump float;")LINE("varying vec2 vTextureCoord;")LINE("uniform lowp sampler2D sTexture;")LINE("uniform lowp vec2 uVignetteCenter;")LINE("uniform lowp vec3 uVignetteColor;")LINE("uniform highp float uVignetteStart;")LINE("uniform highp float uVignetteEnd;")LINE("void main() {")LINE("lowp vec3 rgb = texture2D(sTexture, vTextureCoord).rgb;")LINE("lowp float d = distance(vTextureCoord, vec2(uVignetteCenter.x, uVignetteCenter.y));")LINE("lowp float percent = smoothstep(uVignetteStart, uVignetteEnd, d);")LINE("gl_FragColor = vec4(mix(rgb.x, uVignetteColor.x, percent), mix(rgb.y, uVignetteColor.y, percent), mix(rgb.z, uVignetteColor.z, percent), 1.0);")LINE("}");

该代码中设计带一些 uniform 系变量逐一说明:

  • uVignetteCenter 二维分量,用于确定晕影效果的中心点,用于逐像素计算距离中心点距离使用。考虑着色器坐标需要归一化 [0.0 - 1.0 ],固在上面的示例中定义为默认 [0.5, 0.5]
  • uVignetteColor   三维分量,用于确定晕影效果的颜色,一般情况下倾向于暗色调,在本例中为黑色 [1.0, 1.0, 1.0]
  • uVignetteStart | uVigntteEnd 均为二维分量,与上面提到的中心点组合使用,可以简单理解通过 smoothstep 插值计算当前像素晕影强度,越靠近 uVignetteStart 晕影效果越轻淡,反之越靠近边缘晕影效果越浓重

以下为示例所使用的参数值:

    filter->vignette_center_x = 0.5f;filter->vignette_center_y = 0.5f;filter->vignette_color[0] = 0.0f;filter->vignette_color[1] = 0.0f;filter->vignette_color[2] = 0.0f;filter->vignette_start = 0.2f;filter->vignette_end = 0.85f;

关于着色器中的 smoothstep 插值函数以参考 OpenGL Refpages 了解其实现原理,mix 混色函数参考 OpenGL Refpages。 

Summery


效果实现相对比较简单,具体应用环境可通过 fragment shader 任意调整参数,包括影晕形状。

转载于:https://www.cnblogs.com/heitao/p/8111341.html

这篇关于[ShaderStaff] Vignette Effect的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/183873

相关文章

Audio Effect

Android:AudioEffect——音乐特效控制 https://blog.csdn.net/qq_42192693/article/details/105047003 AudioEffect构造流程跟踪 & 音效库实现(native侧) https://blog.csdn.net/wkw1125/article/details/65632960?utm_medium=distribu

如何处理批次效应(batch effect)

1、如何处理批次效应(batch effect) https://www.plob.org/article/14410.html 2、基于多数据集分析ANLN在宫颈癌所起到的功能 https://www.omicsclass.com/article/769

解读vue3源码-响应式篇3 effect副作用函数

提示:看到我 请让我滚去学习 文章目录 前言effect问题拓展分支切换与 cleanup嵌套的 effect 与 effect 栈解决在副作用函数中同时读取和操作同一属性时无限循环 effect函数实现computed-api 实现图解在这里插入图片描述 总结 前言 什么是副作用函数? 在 Vue 3 中,副作用函数(Effect Function)通常指的是那些

error:loading /system/media/audio/ui/Effect_Tick.ogg

error loading /system/media/audio/ui/Effect_Tick.ogg  问题原因:      同一个AVD,调试了很多个项目,产生了N多个log文件,这些文件可能产生了影响。 解决办法:     新建一个AVD即可。 AVD的全称为:Android Virtual Device, 就是Android运行的虚拟设备,他是Android的模拟器识别。

三极管的厄利效应(early effect)

詹姆斯·M·厄利(James M. Early)发现的现象,厄利效应(英语:Early effect),又译厄尔利效应,也称基区宽度调制效应,是指当双极性晶体管(BJT)的集电极-射极电压VCE改变,基极-集电极耗尽宽度WB-C(耗尽区大小)也会跟着改变。此变化称为厄利效应,由詹姆斯·M·厄利(James M. Early)所发现。 现象 图1中的有效中性基区为绿色,基区相邻的耗尽区为画有阴影

Causal Effect Identification in Uncertain Causal Networks

我们采用以下六个分类标准为: 数据模态: 观察数据: 这类数据是在没有研究人员任何干预的情况下收集的。它通常很容易获得,但由于潜在的混杂变量而带来挑战。例如,在流行病学中,由于实验的伦理限制,观察性研究很常见。参考文献[6]讨论了观察性研究中因果效应的识别和估计。实验数据: 这是因果推理的黄金标准,因为它涉及随机对照试验(RCT),研究人员在其中操纵治疗变量。RCT旨在最大限度地减少偏差,为因

static作用——The static effect

1)在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区)。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 大多数应试者能正确回答第一部分,

PHP:open_basedir restriction in effect.

当我们下载了组件,引入的时候出现 open_basedir restriction in effect,那这个时候我们该怎么弄呢? 首先我们进入宝塔管理页面:【软件商店】-【运行环境】-【安装PHP】-【设置】 其中后面的路径是用 : 来分隔表示多少个,所以在最后加上 你要访问路径即可 设置之后,重载下PHP设置,即可访问;

Flex Effect使用实例

1.旋转效果:http://www.alex-uhlmann.de/flash ... Effects/effectCube/代码:http://weblogs.macromedia.com/au ... stortionEffects.zip2.画布按钮http://dougmccune.com/blog/2007/ ... n-added-to-flexlib/3.鱼眼工具条效果:http:/

解决 php 报错 open_basedir restriction in effect

php报错:  [29-Apr-2012 22:36:14] PHP Warning:  Unknown: open_basedir restriction in effect. File(/tmp) is not within the allowed path(s): (/www/)    in Unknown on line 0 [29-Apr-2012 22:36:14