unity-urp:视野雾

问题背景

恐怖游戏在黑夜或者某些场景下,需要用雾或者黑暗遮盖视野,搭建游戏氛围

效果

场景中,雾会遮挡场景和怪物,但是在玩家视野内雾会消散,距离玩家越近雾越薄。

当前是第三人称视角,但是可以轻松的把这个效果转换为第一人称视角。

原理

正如屏幕空间的高度雾,这里做一个屏幕空间的视野雾。

采用特殊的材质在相机前方绘制一个能遮盖相机的矩形。如果矩形覆盖的像素点在视野内,就降低雾效果,否则绘制雾效果。

实现

urp下使用RenderFeature + 自定义shader实现

简略步骤

在相机节点下放置一个Plane,隐藏它

编写shader并创建材质

像素着色器代码如下,原理为采样深度,根据深度计算出当前像素的世界坐标,根据坐标和玩家位置的关系确定雾效果

            float4 frag(Varyings input) : SV_Target{UNITY_SETUP_INSTANCE_ID(input);UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);//计算屏幕uvfloat2 screenUV = GetNormalizedScreenSpaceUV(input.positionCS);//采样深度#if UNITY_REVERSED_Zfloat depth = SampleSceneDepth(screenUV);#else// Adjust Z to match NDC for OpenGL ([-1, 1])float depth = lerp(UNITY_NEAR_CLIP_VALUE, 1, SampleSceneDepth(screenUV));#endif//根据深度计算当前像素所代表的世界空间坐标float3 worldPos = ComputeWorldSpacePosition(screenUV, depth, UNITY_MATRIX_I_VP);//计算角色位置和当前渲染的像素所代表的世界坐标的距离float distanceVal = distance(worldPos, _PosWS);//做过渡float t = (max(distanceVal - (_Range * 0.8), 0)) / (_Range * 1.2);//计算透明度,透明度越低雾越薄float alpha = lerp(0, 1, saturate(t * t));//返回像素颜色return float4(_Color.rgb, alpha * _Color.a);}
创建并且配置RenderFeature到URP管线的自定义Renderer

自定义Pass中的核心代码,使用指定的材质绘制隐藏的Plane

    public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData){if(null == Renderer){if(null != SceneFogController.Instance){Renderer = SceneFogController.Instance.Renderer;}}if (null == FogMat || null == Renderer){return;}var cmd = CommandBufferPool.Get("FogPass");cmd.DrawRenderer(Renderer, FogMat, 0, 0);//Matrix4x4 material = new Matrix4x4();//material.SetTRS(_renderer.transform.position, _renderer.transform.rotation, Vector3.one);//cmd.DrawMesh(_renderer.gameObject.GetComponent<MeshFilter>().sharedMesh, material, FogMat);context.ExecuteCommandBuffer(cmd);CommandBufferPool.Release(cmd);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/730254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】十大排序算法之 归并排序 快速排序

本次介绍内容参考自&#xff1a;十大经典排序算法&#xff08;C实现&#xff09; - fengMisaka - 博客园 (cnblogs.com) 排序算法是《数据结构与算法》中最基本的算法之一。 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a;通过比较来决定元素间的相对次序…

力扣--滑动窗口438.找到字符串中所有字母异位词

思路分析&#xff1a; 使用两个数组snum和pnum分别记录字符串s和p中各字符出现的次数。遍历字符串p&#xff0c;统计其中各字符的出现次数&#xff0c;存储在pnum数组中。初始化snum数组&#xff0c;统计s的前m-1个字符的出现次数。从第m个字符开始遍历s&#xff0c;通过滑动窗…

史上最细,接口自动化测试用例设计编写总结,一篇带你打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 说到自动化测试&a…

亚信安慧AntDB:“融合+实时”引领数据库创新

在当今多变的数据应用场景中&#xff0c;AntDB作为行业领先的超融合流式实时数仓&#xff0c;秉承着“融合实时”的研发理念&#xff0c;全面应对企业日益复杂的数据处理需求。通过SQL接口访问多种执行引擎&#xff0c;AntDB在实现交易、分析等多重能力的“超融合”方面取得了显…

SQL设计时增加说明列

后关闭sql Studio,然后打开注册表,注册表地址: 计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\SQL Server Management Studio\18.0_IsoShell\DataProject 如有版本不同,红色内容有所变化,修改内容如下: SSVPropViewColumnsSQL70,SSVPropViewColumnsSQL80 全修改为 1,2,6,7…

魔方,3循环是你的秘密[嗑瓜子]。​

引理1.任意Sn中的元素&#xff1a;(N_1N_2N_3...N_m) 证明&#xff1a; (N_1N_2N_3...N_m) (N_1N_m)(N_1N_m-1)...(N_1N_2) 举例&#xff1a; 比如(1234) (14)(13)(12) (3214) (34)(31)(32) 2.任意An可以表示成3循环的乘积&#xff0c; 证明&#xff1a; 1.An中的元素属于…

抖店无货源模式,采购商品、平台渠道正规吗?相关基础问题解答

我是王路飞。 无货源模式&#xff0c;相信你们也都不陌生了。 每个电商平台都存在这种模式&#xff0c;且我以为&#xff0c;每个电商平台的发展壮大&#xff0c;最应该感谢的就是这些无货源商家了。 而现在说到无货源&#xff0c;最适合普通人的无疑就是抖音小店了。 今天…

[云原生] k8s之存储卷

一、emptyDir存储卷 当Pod被分配给节点时&#xff0c;首先创建emptyDir卷&#xff0c;并且只要该Pod在该节点上运行&#xff0c;该卷就会存在。正如卷的名字所述&#xff0c;它最初是空的。Pod 中的容器可以读取和写入emptyDir卷中的相同文件&#xff0c;尽管该卷可以挂载到每…

【Redis】redis持久化

redis 持久化 所谓的持久化&#xff0c;就是把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。 redis 开始是将所有数据保持在内存中&#xff0c;对数据的更新将根据策略配置异步地保存在磁盘中。 持久化的方式 快照方式 快照是某时某刻对数据的完整备份。在以…

3dmax画图卡顿解决方法---模大狮模型网

当你在使用3D Max进行画图时遇到卡顿问题&#xff0c;可以尝试以下方法来解决&#xff1a; 减少模型复杂度&#xff1a;如果你的场景中有过多的高细节模型&#xff0c;可能会导致卡顿。尝试减少模型的复杂度&#xff0c;合并或简化多边形数量过多的模型。这将减轻计算机的负担&…

【UE 材质 Niagara】爆炸效果

目录 效果 步骤 一、材质部分 二、Niagara部分 效果 步骤 一、材质部分 1. 创建一个材质&#xff0c;这里命名为“M_Burst” 打开“M_Burst”&#xff0c;设置混合模式为半透明&#xff0c;设置着色模型为无光照&#xff0c;勾选双面显示 在材质图表中首先创建扰动效果 其…

智能指针基础知识【C++】【RAII思想 || unique_ptr || shared_ptrweak_ptr || 循环引用问题】

目录 一&#xff0c;为什么需要智能指针 二&#xff0c;内存泄露的基本认识 1. 内存泄露分类 2. 常见的内存检测工具 3&#xff0c;如何避免内存泄露 三&#xff0c;智能指针的使用与原理 1. RAII思想 2. 智能指针 &#xff08;1. unique_ptr &#xff08;2. shared_…

数据治理实战——翼支付金融板块业务数仓建设和数据治理之路

目录 一、数据治理背景 二、数据治理建设内容 2.1 组织协同 2.2 平台建设 2.3 数据应用治理 2.4 数据规范 2.5 数据安全 三、企业级数仓建设 3.1 调研阶段 2.2 平台护航 2.3 数仓分层 2.4 维度建模 2.4.1 维度建模四步曲 2.4.2 命名规范 2.4.3 资产沉淀 2.4.4 …

百度智能云发布专用向量数据库 VDB 1.0,全新设计内核开启性能狂飙

1 专用向量数据库应对未来业务挑战 向量数据库 向量检索 数据库 向量数据库大致可以分为 2 部分&#xff1a;向量数据的检索&#xff0c;以及向量数据的存储和管理。 向量数据库的性能&#xff0c;比如高 QPS、低延时等&#xff0c;使得业务能够更快的响应用户的查询请求…

2024 AI 辅助研发的新纪年

随着人工智能技术的持续发展与突破&#xff0c;2024年AI辅助研发正成为科技界和工业界瞩目的焦点。从医药研发到汽车设计&#xff0c;从软件开发到材料科学&#xff0c;AI正逐渐渗透到研发的各个环节&#xff0c;变革着传统的研发模式。在这一背景下&#xff0c;AI辅助研发不仅…

【kubernetes】关于k8s集群中的ingress规则案例

目录 一、k8s 对外服务之 Ingress 1.1什么是ingress 1.2外部的应用能够访问集群内的服务有哪些方案&#xff1f; 1.3Ingress 组成 1.4Ingress-Nginx 工作原理 1.5ingress 暴露服务的方式 二、实操ingress暴露服务 前期.部署 nginx-ingress-controller 2.1基于host网络…

RabbitMQ的Windows版安装教程

文章目录 前言一、Windows安装RabbitMQ总结 前言 曾经写过一篇关于RabbitMQ的Ubuntu安装教程&#xff08;http://t.csdnimg.cn/5CYfC&#xff09;&#xff0c;当时使用的是Docker将RabbitMQ安装到虚拟机上&#xff0c;但是有很多小伙伴问Windows上如何进行安装RabbitMQ&#x…

flink重温笔记(十二): flink 高级特性和新特性(1)——End-to-End Exactly-Once(端到端精确一致性语义)

Flink学习笔记 前言&#xff1a;今天是学习 flink 的第 12 天啦&#xff01;学习了 flink 高级特性和新特性之 End-to-End Exactly-Once&#xff08;端到端精确一致性语义&#xff09;&#xff0c;主要是解决大数据领域数据从数据源到数据落点的一致性&#xff0c;不会容易造成…

官宣!百度智能云千帆产品发布会3月21日北京见!

回望2023大模型狂奔的一年&#xff0c;百度智能云千帆大模型平台无疑是浓墨重彩的一笔。自2023年3月27日正式问世后&#xff0c;百度智能云千帆大模型平台以突飞猛进的速度持续发展。从模型、应用到生态&#xff0c;“千帆”书写着自身在大模型时代的答卷。 作为全球首个一站式…

指针的学习5

目录 sizeof和strlen的区别 sizeof strlen 数组和指针笔试题解析 一维数组 字符数组 二维数组 指针运算笔试题解析 题目1&#xff1a; 题目2&#xff1a; 题目3&#xff1a; 题目4&#xff1a; 题目5&#xff1a; 题目6&#xff1a; 题目7&#xff1a; sizeof和…