Unity Urp无线延申的网格效果

无线延申的网格
该项目必须是再Urp项目
在这里插入图片描述

shader代码实现

Shader "Unlit/infTutorial1"
{Properties{_Alpha ("Alpha", Range(0, 0.5)) = 0.5}SubShader{Tags{"RenderPipeline"="UniversalRenderPipeline""RenderType"="Transparent""IgnoreProjector"="True""Queue"="Geometry"}Pass{Blend SrcAlpha OneMinusSrcAlphaZTest LEqualZWrite OffCull off HLSLPROGRAM#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"#pragma vertex vert#pragma fragment fragfloat _Alpha;float computeViewZ(float3 pos) {float4 clip_space_pos = mul(UNITY_MATRIX_VP, float4(pos.xyz, 1.0));float viewZ = clip_space_pos.w; //根据projection矩阵定义,positionCS.w = viewZreturn viewZ;};struct Attributes{float4 positionOS : POSITION;float2 uv : TEXCOORD0;};struct Varings{float4 positionCS : SV_POSITION;float3 nearPoint : TEXCOORD0;float3 farPoint : TEXCOORD1;};float3 TransformHClipToWorld(float3 positionCS, float4x4 inv_VP) {float4 unprojectedPoint =  mul(inv_VP, float4(positionCS, 1.0));return unprojectedPoint.xyz / unprojectedPoint.w;};half Grid(float2 uv){float2 derivative = fwidth(uv);uv = frac(uv - 0.5); //中心对齐uv = abs(uv - 0.5);uv = uv / derivative;float min_value = min(uv.x, uv.y);half grid = 1.0 - min(min_value, 1.0);return grid;};Varings vert(Attributes input){//此shader专用于quad mesh//所以使用4个顶点的uv值进行变换 作为 裁切空间的坐标//保证这是一个覆盖全屏幕的渲染Varings o;float2 uv = input.uv * 2.0 - 1.0;//默认情况下,Zndc = 1是远平面half farPlane = 1;half nearPlane = 0;#if defined(UNITY_REVERSED_Z)//有时候会反转zfarPlane = 1 - farPlane;nearPlane = 1 - nearPlane;#endiffloat4 position = float4(uv, farPlane, 1);float3 nearPoint = TransformHClipToWorld(float3(position.xy, nearPlane), UNITY_MATRIX_I_VP); float3 farPoint = TransformHClipToWorld(float3(position.xy, farPlane), UNITY_MATRIX_I_VP); o.positionCS = position;o.nearPoint = nearPoint;o.farPoint = farPoint;return o;};half4 frag(Varings input) : SV_TARGET{//计算地平面float t = -input.nearPoint.y / (input.farPoint.y - input.nearPoint.y);float3 positionWS = input.nearPoint + t * (input.farPoint - input.nearPoint);half ground = step(0, t);float3 cameraPos = _WorldSpaceCameraPos;float fromOrigin = abs(cameraPos.y);float viewZ = computeViewZ(positionWS);float2 uv = positionWS.xz;//计算gridfloat fading = max(0.0, 1.0 - viewZ / 150);half smallGrid = Grid(uv) * lerp(1, 0, min(1.0, fromOrigin / 100)); half middleGrid  = Grid(uv * 0.1) * lerp(1, 0, min(1.0, fromOrigin / 300)); half largeGrid = Grid(uv * 0.01) * lerp(1, 0, min(1.0, fromOrigin / 3000)); //合并计算half grid = smallGrid + middleGrid + largeGrid;return half4(0.5, 0.5, 0.5, ground * grid * fading * _Alpha);};ENDHLSL}}
}

参考实现
https://zhuanlan.zhihu.com/p/647256794

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

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

相关文章

VMware下的ubuntu虚拟机,实现虚拟机与本地硬盘间的文件互传

本次安装vmware tools工具,以实现二者间的文件互传。 1、打开VMware软件,运行Ubuntu系统虚拟机 安装过程需在ubuntu虚拟机启动的情况下,才能进行安装; 2、安装VMware Tools 在VM主菜单栏中,点击 “虚拟机&#xff0…

Linux ❀ 进程出现process information unavailable时的消除方法

[rootmaster ~]# jps 74963 -- process information unavailable 78678 Jps [rootmaster ~]# cd /tmp/hsperfdata_redhat/ # redhat为启动该java进程的用户ps -ef | grep $pid查找 [rootmaster hsperfdata_redhat]# ll total 32 -rw------- 1 redhat redhat 32768 Sep 27 15:…

使用日志分析工具了解网络情况

日志分析(或日志文件分析)是检查整个网络中生成的日志数据的过程,日志数据从各种来源生成,包括外围设备、工作站、服务器、应用程序以及其他硬件和软件组件,将它们收集到一个中心位置并进行分析,可以为了解…

深入解析JVM:双亲委派机制的原理与实践

双亲委派机制 引言概述流程工作原理: 优势自定义类加载器实际应用 主页传送门:📀 传送 引言 在Java虚拟机(JVM)中,类加载是一个重要的概念,而双亲委派机制是类加载的核心之一。本文将深入研究双…

写代码生成流程图

我们在写文档,博客的时候,一般都会使用markdown语法,最常见的就是一些github开源项目的README。有时候会去画一些流程图,例如使用process.on或者xmind等第三方网站,然后截图插入到文档中。 今天我们介绍一种使用代码直…

分布式搜索引擎Elasticsearch

一、Elasticsearch介绍 1.Elasticsearch产生背景 大数据量的检索NoSql: not only sql,泛指非关系型的数据库Nginx的7层负载均衡和4层负载均衡2.Elasticsearch是什么 一个基于Lucene的分布式搜索和分析引擎,一个开源的高扩展的分布式全文检索引擎 Elasticsearch使用Java开发…

一次ES检索的性能优化经验记录

优化功能: 统一检索能力,为各服务所调用。 该接口并发压力大,压测效果不理想。 初步2k线程两台压测机预发环境压测结果两pod下为400qps左右,单pod 平均qps200,响应时间在五分钟之后达到了峰值,平响达到几十秒开外。 压…

跨境电商引流之Reddit营销,入门保姆级攻略

在当今竞争激烈的在线市场中,企业不断寻求新的方法来加强其数字营销工作。Reddit 是最受欢迎的社交媒体平台之一,为企业提供了巨大的潜力,可以通过引人入胜且相关的内容来接触目标受众。然而,将 Reddit 用于营销目的需要仔细考虑某…

企业专线成本高?贝锐蒲公英轻松实现财务系统远程访问

在办公及信息系统领域,许多企业纷纷采用金蝶等财务管理软件来提升运营效率。以某食品制造企业为例,该企业总部位于广州,并拥有湖北仙桃工厂、广州从化工厂和湖南平江工厂三大生产基地。为提高管理效率,该企业在广州总部局域网内部…

游戏社区-搭建的目的和意义是什么

在游戏社区中,用户的活跃度指标是至关重要的,因此在必要时,我们会进行指标转化,以丰富的内容形式来促进用户的活跃度;作为一个垂直社区,我们可以通过聚合和培养一批游戏KOL,建立用户之间的紧密联…

成都瀚网科技:抖音上线地方方言自动翻译功能

为了让很多方言的地域历史、文化、习俗能够以短视频的形式生产、传播和保存,解决方言难以被更多用户阅读和理解的问题,平台正式上线推出当地方言自动翻译功能。创作者可以利用该功能,将多个方言视频“一键”转换为普通话字幕供大众观看。 具体…

leetcode 23. 合并 K 个升序链表

2023.9.25 本题要合并k个有序链表,最朴素的方法可以联想到之前做的合并两个有序链表。 用一个for循环遍历lists数组,利用合并两个有序链表的代码,不断合并lists中的链表,最后返回头节点即可。 代码如下: /*** Definit…

vue-cli创建项目、vue项目目录结(运行vue项目)、ES6导入导出语法、vue项目编写规范

vue-cli创建项目、vue项目目录结构、 ES6导入导出语法、vue项目编写规范 1 vue-cli创建项目 1.1 vue-cli 命令行创建项目 1.2 使用vue-cli-ui创建 2 vue项目目录结构 2.1 运行vue项目 2.2 vue项目的目录结构 3 es6导入导出语法 4 vue项目编写规范 4.1 修改项目 4.2 以后…

VC++判断程序是否已经运行;仅运行一次

VC判断程序是否已经运行;仅运行一次 BOOL CClientApp::InitInstance() {...//判断程序是否已经运行;仅运行一次CreateMutex(NULL,true,_T("xxxxx")); //xxxxx:为程序标识码if(GetLastError()ERROR_ALREADY_EXISTS) { AfxMess…

C#求100-999之间的水仙花数,你知道多少个?让我们一起来探索!

目录 背景: 扩展: 水仙花数例子: 效果展示:​ 总结: 背景: 水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong…

博主老程序员长期个人接单

主要技术栈 : 后端: .net winform webapi 前端:vue2 vue3 微信小程序 数据库: sqlserver mysql 小程序案例:快猪小寓微信小程序客户端 后台管理系统 联系微信 或 QQ 35568701

网络编程day04(网络属性函数、广播、组播、TCP并发)

今日任务 对于newfd的话,最好是另存然后传入给分支线程,避免父子线程操作同一个文件描述符 ------------在tcp多线程服务端---------- 如果使用全局变量,或者指针方式间接访问,会导致所有线程共用一份newfd和cin,那么…

冲刺十五届蓝桥杯P0001阶乘求和

文章目录 题目描述思路分析代码解析 题目描述 思路分析 阶乘是蓝桥杯中常考的知识。 首先我们需要知道 int 和long的最大值是多少。 我们可以知道19的阶乘就已经超过了long的最大值,所以让我们直接计算202320232023!的阶乘是不现实的。 所以我们需要…

基于Linux socket聊天室-多线程服务器模型(01)

​前言 socket在实际系统程序开发当中,应用非常广泛,也非常重要。实际应用中服务器经常需要支持多个客户端连接,实现高并发服务器模型显得尤为重要。高并发服务器从简单的循环服务器模型处理少量网络并发请求,演进到解决C10K&…