Learn ComputeShader 09 Night version lenses

2024-09-08 06:36

本文主要是介绍Learn ComputeShader 09 Night version lenses,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这次将要制作一个类似夜视仪的效果

第一步就是要降低图像的分辨率, 这只需要将id.xy除上一个数字然后再乘上这个数字

可以根据下图理解,很明显通过这个操作在多个像素显示了相同的颜色,并且很多像素颜色被丢失了,自然就会有降低分辨率的效果

效果:

但是这样图像太锐利了,我们加入噪声去解决这个问题

[numthreads(8, 8, 1)]
void CSMain(uint3 id : SV_DispatchThreadID)
{uint2 index =(uint2(id.x,id.y)/3*3);float noise =random((float2)id.xy,time);float3 srcColor =lerp(source[index].rgb*2,source[index].rgb,noise);float3 finalColor = srcColor;output[id.xy] = float4(finalColor, 1);
}

这样以后得到的结果就更接近低分辨率相机的效果 

夜视仪通常都是绿色的,我们首先计算出灰度值,然后用灰度值乘上我们设置的一个类似夜视仪的绿色,灰度值越大颜色就越接近我们设置的颜色,反之越接近黑色。最后再将这个颜色与原始颜色根据强度进行插值,

夜视仪上通常有滚动的扫描线。

我们首先将像素的y坐标转换到0-1的范围内,然后生成一个周期性的值模仿扫描线的循环,然后加上0.3避免扫描线的强度过大,最后将它限制在0-1范围内

[numthreads(8, 8, 1)]
void CSMain(uint3 id : SV_DispatchThreadID)
{uint2 index =(uint2(id.x,id.y)/3*3);float noise =random((float2)id.xy,time);float3 srcColor =lerp(source[index].rgb*2,source[index].rgb,noise);float3 grayScale = (srcColor.r + srcColor.g + srcColor.b) / 3.0;float3 tinted = grayScale * tintColor.rgb;float3 finalColor = lerp(srcColor,tinted, tintStrength);float uvY = (float)id.y/ (float)source.Length.y;float scanline = saturate(smoothstep(0.1,0.2, frac(uvY*lines + time*3)) +0.3);finalColor = lerp(source[id.xy].rgb*0.5,finalColor,scanline);output[id.xy] = float4(finalColor, 1);
}

 效果:

最后就是制作夜视仪的望远镜的效果 。主要原理可参照下面的图片

[numthreads(8, 8, 1)]
void CSMain(uint3 id : SV_DispatchThreadID)
{uint2 index =(uint2(id.x,id.y)/3*3);float noise =random((float2)id.xy,time);float3 srcColor =lerp(source[index].rgb*2,source[index].rgb,noise);float3 grayScale = (srcColor.r + srcColor.g + srcColor.b) / 3.0;float3 tinted = grayScale * tintColor.rgb;float3 finalColor = lerp(srcColor,tinted, tintStrength);float uvY = (float)id.y/ (float)source.Length.y;//float scanline = saturate(smoothstep(0.1,0.2, frac(uvY*5+time*3)) +0.3);float scanline =  frac(uvY*2);finalColor = lerp(source[id.xy].rgb*0.5,finalColor,scanline);float2 pt = (float2)id.xy;float2 center = float2(source.Length * 0.5);center.x -= radius * 0.7;float leftLense = incircle(pt, center, radius, edgewidth);center.x += radius * 1.4;float rightLense = incircle(pt, center, radius, edgewidth);float inVision = saturate(leftLense + rightLense);float3 black = float3(0, 0, 0);finalColor = lerp(black, finalColor, inVision);output[id.xy] = float4(finalColor, 1);
}

最终效果:

这篇关于Learn ComputeShader 09 Night version lenses的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

Java第二阶段---09类和对象---第三节 构造方法

第三节 构造方法 1.概念 构造方法是一种特殊的方法,主要用于创建对象以及完成对象的属性初始化操作。构造方法不能被对象调用。 2.语法 //[]中内容可有可无 访问修饰符 类名([参数列表]){ } 3.示例 public class Car {     //车特征(属性)     public String name;//车名   可以直接拿来用 说明它有初始值     pu

Science|癌症中三级淋巴结构的免疫调节作用与治疗潜力|顶刊精析·24-09-08

小罗碎碎念 Science文献精析 今天精析的这一篇综述,于2022-01-07发表于Science,主要讨论了癌症中的三级淋巴结构(Tertiary Lymphoid Structures, TLS)及其在肿瘤免疫反应中的作用。 作者类型作者姓名单位名称(中文)通讯作者介绍第一作者Ton N. Schumacher荷兰癌症研究所通讯作者之一通讯作者Daniela S. Thomm

09 生命周期

生命周期 beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestorydestoryed 辣子鸡:香辣入口,犹如吃了炫迈一样 - - - 根本停不下来 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport"

Jenkins 通过 Version Number Plugin 自动生成和管理构建的版本号

步骤 1:安装 Version Number Plugin 登录 Jenkins 的管理界面。进入 “Manage Jenkins” -> “Manage Plugins”。在 “Available” 选项卡中搜索 “Version Number Plugin”。选中并安装插件,完成后可能需要重启 Jenkins。 步骤 2:配置版本号生成 打开项目配置页面。在下方找到 “Build Env

【笔记】数据结构刷题09

快速排序 215. 数组中的第K个最大元素 class Solution {public:int findKthLargest(vector<int>& nums, int k) {return divide(nums,0,nums.size()-1,nums.size()-k);}int divide(vector<int>& nums,int left,int right,int k)

【SpringMVC学习09】SpringMVC中的拦截器

Springmvc的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。本文主要总结一下springmvc中拦截器是如何定义的,以及测试拦截器的执行情况和使用方法。 1. springmvc拦截器的定义和配置 1.1 springmvc拦截器的定义 在springmvc中,定义拦截器要实现HandlerInterceptor接口,并实现该接口中提供的

周末总结(2024/09/07)

工作 人际关系核心实践: `要学会随时回应别人的善意,执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己,抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内,职场社交不要放在5min以外 职场的人际关系在面对利益冲突是直接质疑,要快准狠,不要内耗、 回复消息要控制在30mins之内,一定要及时回复`` 工作上的要点 现状(已经提了离职,last day在9月20号)

【视频教程】手把手AppWizard轻松制作一个emWin滑动主界面控制框架,任意跳转控制(2024-09-06)

现在的新版AppWizard已经比较好用,用户可以轻松的创建各种项目常规界面。 比如早期创建一个支持滑动的主界面框架,并且可以跳转各种子界面,仅仅界面布局和各种图片格式转换都要花不少时间,而现在使用AppWizard,可以说轻轻松松,毫不费力。 用户唯一要做的就是根据自己的芯片性能做一定的速度优化。 视频: https://www.bilibili.com/video/BV17Rp3eLE