【博物纳新】是UWA旨在为开发者推荐新颖、易用、有趣的开源项目,帮助大家在项目研发之余发现世界上的热门项目、前沿技术或者令人惊叹的视觉效果,并探索将其应用到自己项目的可行性。很多时候,我们并不知道自己想要什么,直到某一天我们遇到了它。

更多精彩内容请关注:lab.uwa4d.com


效果展示

开源库链接:https://lab.uwa4d.com/lab/5b564072d7f10a201fd8d451


效果实现

此开源库的镜头光晕效果是由Pseudo Lens Flare简化修改的Unity版本。

以示例项目为例,下图展示了光晕效果的主要产生过程,经过了下采样、Ghost、半径扭曲、散射重影和两次虚化效果,最后叠加原始图像得到最终效果。

1、Downsampling/Threshold

第一步,将原始图像做一次下采样,同时通过参数_Sub控制只保留画面中亮的部分,通过参数_Mul调节保留亮度(默认参数_Mul=0.5)。

fixed4 frag (v2f i) : SV_Target
{fixed4 col = tex2D(_MainTex, i.uv);col = max(col-_Sub, 0);col *= _Mul;return col;
}

类似于原Blog中的第一步效果:

2、Ghosts

这一步模拟光晕效果中的斑点,通过三个参数可以控制斑点的个数、扩散和衰减。以下为参数调节的效果图及Shader部分代码。

fixed4 frag(v2f i) : SV_Target
{fixed4 col = tex2D(_MainTex, i.uv);float2 uv = i.uv - float2(0.5, 0.5);for (int k = 3; k < _NumGhost + 3; k++) {if (k & 1) {col += tex2D(_MainTex, _Displace * -uv / (k >> 1) + float2(0.5, 0.5));}else {col += tex2D(_MainTex, uv / (k >> 1) + float2(0.5, 0.5));}}col *= pow(1 - length(uv) / .707, _Falloff);return col;
}

3、RadialWarp

这一步是用于模拟一个外部的光环,首先根据需要的光环半径HaloWidth计算得到一个半径扭曲的图像,再添加光环的衰减效果。即可得到一个根据原图像移动的光环效果。

fixed4 frag(v2f i) : SV_Target
{fixed4 col = fixed4(0,0,0,0);float2 ghostVec = i.uv - .5;//归一化后减光环半径得到光环顶点位置float2 haloVec = normalize(ghostVec)*-_HaloWidth;//根据光环位置得到每个像素的权重,为一个白色的圆环float weight = length(float2(0.5, 0.5) - (i.uv + haloVec)) / .707;//添加衰减效果weight = pow(1.0 - weight, _HaloFalloff);col += tex2D(_MainTex, i.uv + haloVec) * weight;col = max(0, col - _HaloSub);return col;
}

4、Aberration

将第2步和第3步的图像叠加,即可得到一个初步成型的光晕效果图(下图左)。这一步要模拟出光线的失真效果(下图右)。

如下,为计算色彩失真的Shader核心计算代码,其中_ChromaticAberration_Spectrum是一个1x3的三像素RGB图像。

fixed4 frag (v2f i) : SV_Target
{//计算失真位置float2 coords = 2.0 * i.uv - 1.0;float2 end = i.uv - coords * _ChromaticAberration_Amount;//uv差值float2 diff = end - i.uv;//失真采样像素数int samples = clamp(int(length(_MainTex_TexelSize.zw * diff / 2.0)), 3, 16);//每个像素的uv差float2 delta = diff / samples;float2 pos = i.uv;half3 sum = (0.0).xxx, filterSum = (0.0).xxx;//循环采样计算失真像素点的uv和色值for (int i = 0; i < samples; i++){half t = (i + 0.5) / samples;half3 s = tex2Dlod(_MainTex, float4(pos, 0, 0)).rgb;half3 filter = tex2Dlod(_ChromaticAberration_Spectrum, float4(t, 0, 0, 0)).rgb;sum += s * filter;filterSum += filter;pos += delta;}return float4(sum / filterSum, 1);
}

最后将得到的图像做两次Blur效果,再与原图像混合后即可得到镜头光晕的模拟效果。

小结

本文主要分析了Lens Flare开源库的大致实现过程及部分代码解读。由于目前的版本效果运用了大量的后处理,渲染开销较高,在移动端性能较差,并不建议直接在移动端使用。但其模拟的镜头光晕效果逼真,建议有需要的朋友可以一试。


快用UWA Lab合辑Mark好项目!

今天的推荐就到这儿啦,或者它可直接使用,或者它需要您的润色,或者它启发了您的思路......

请不要吝啬您的点赞和转发,让我们知道我们在做对的事。当然如果您可以留言给出宝贵的意见,我们会越做越好。

Unity镜头光晕模拟开源库相关推荐

  1. 开源库UniTask笔记

    内容来源:up主游戏石匠,仅作笔记,推荐关注该up主. UniTask是Github上的开源库,为Unity提供一个高性能异步方案,可以代替协程实现异步操作,中文文档 优点: 不需要依赖于MonoBe ...

  2. 推荐一些嵌入式、C/C++的开源库和项目

    前言 想用代码实现一个功能时,我们可以先看看是否有前辈已经实现了该功能,并且开源分享在网上.一般我们自己造出来的轮子的可用性基本上是很难和大神们造的轮子相比的. 因此多了解一下优秀的开源库的使用,可以 ...

  3. 利用人工智能(Magpie开源库)给一段中文的文本内容进行分类打标签

    当下人工智能是真心的火热呀,各种原来传统的业务也都在尝试用人工智能技术来处理,以此来节省人工成本,提高生产效率.既然有这么火的利器,那么我们就先来简单认识下什么是人工智能吧,人工智能是指利用语音识别. ...

  4. 常用C/C++开源库

    1. 框架 Apache C++ Standard Library : 是一系列算法,容器,迭代器和其他基本组件的集合 ASL : Adobe源代码库提供了同行的评审和可移植的C++源代码库. Boo ...

  5. Google重磅发布开源库TFQ,快速建立量子机器学习模型

    整理 | 弯月 编辑 | 郭芮 出品 | AI科技大本营(ID:rgznai100) 近日,Google 与滑铁卢大学.大众汽车等联合发布 TensorFlow Quantum(TFQ),一个可快速建 ...

  6. 走过19年,每年千万下载量,科学计算开源库SciPy的前世今生

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 转自:机器之心 每年千万下载量,科学计算开源库 SciPy,你已经是个成熟的小伙伴了. ...

  7. C++开源库,欢迎补充。

    C++在"商业应用"方面,曾经是天下第一的开发语言,但这一桂冠已经被java抢走多年.因为当今商业应用程序类型,已经从桌面应用迅速转移成 Web应 用.当Java横行天下之后,MS ...

  8. 从SeekFree的Gitee开源库建立通用MM32开发模板

    简 介: 为了便于便捷开发基于MM32的单片机程序,本文从SeekFree的Gitee开源库中构造了初始化模板库.利用Python编写了一键生成工程文件以及一键下载程序.基于该基础可以完成基于MM32 ...

  9. Netflix发布Polly.JS,一个用于HTTP交互的开源库

    Netflix最近发布了Polly.JS,一个用于记录.重放和模拟HTTP交互的开源库. \\ Polly利原生机浏览器API来模拟请求和响应,以便减少配置工作,为开发人员提供一种管理HTTP请求的机 ...

  10. iOS开发的库的列表,不完全是开源库

    这个也是从他人的总结中COPY过来,加以整理的 iOS苹果官方Demo合集1.网页地址 2.官方地址 优质iOS UI/UE库:1.gitHub地址 [资源集合]94个iOS开发资源推荐 iOS开发的 ...

最新文章

  1. 说说大型高并发高负载网站的系统架构【转】
  2. Foundation框架: 11.NSDate的基本认识和使用
  3. 计算机网络_第7版_谢希仁_目录
  4. 如何将存储在MongoDB数据库中的数据导出到Excel中?
  5. String类的特点和使用步骤
  6. 28 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义行标识
  7. Windows Workflow Foundation之旅(六)——框架组成、工作流创作模式
  8. 图片以base64格式显示出来
  9. 超级鹰+selenium规避检测模拟登录12306
  10. Snapchat如何突出重围?
  11. Spring-AOP模块的Advised分析
  12. Vue 加载 SVG 图片文件
  13. 使用sql server Management Studio(企业管理器)或查询分析器管理数据库
  14. 值得和孩子一起看的100部BBC经典纪录片
  15. CAD多标签工具Docbar
  16. Xilinx SDK下如何进行断点调试(保姆级别教程)
  17. linux硬盘自动停转,求助硬盘异常系统自动挂起导致宕机
  18. 6个usb口服务器无响应,USB插口无反应怎么办?USB接口不能用解决办法
  19. 第十一届蓝桥杯大赛软件类省赛第一场真题-Java语言B组
  20. Linux国产操作系统,UCA-系统工程师学习必备技能,Linux启动流程、计划任务、密码破解和密码防破解以及ssh服务

热门文章

  1. 反向代理实例一 访问一个域名 代理到另一个服务 nginx 200323
  2. Cint() , int(),round() , fix() 的区别与联系
  3. 「漫談數位音樂」5~音樂CD複製要點
  4. uva 12307(点集的外接矩形)
  5. 通配符 或 怎么浓_浓咖啡的咖啡渣新鲜度
  6. 扁豆凝集素/红藻凝集素GRFT/蓝藻凝集素CVN/香蕉凝集素H84-植物凝集素
  7. C语言编辑时绝对值怎么输,互联网常识:c语言绝对值怎么打
  8. matlab省略,matlab的省略号
  9. 《女生宿舍第二部》(1-46上) 转贴
  10. LUMION PureGlass纯正玻璃材质新功能应用