Unity HDR 无线延申的网格效果

news2024/12/24 20:40:14

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

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 OneMinusSrcAlpha
            ZTest LEqual
            ZWrite Off
            Cull off 
            HLSLPROGRAM
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
            #pragma vertex vert
            #pragma fragment frag
            float _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 = viewZ
                return 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)
                    //有时候会反转z
                    farPlane = 1 - farPlane;
                    nearPlane = 1 - nearPlane;
                #endif

                float4 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;
                //计算grid
                float 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.coloradmin.cn/o/1038789.html

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

相关文章

【Java】基于物联网技术的智慧工地源码(项目端、监管端、APP端、智慧大屏)

智慧工地是将云计算、大数据、物联网、移动技术和智能设备等信息化技术手段,聚集在建筑工地施工管理现场,围绕人员、机械、物料、环境等关键要素,建立智能信息采集、高效协同管理、数据科学分析、过程智慧预测,最终实现建筑工地的…

工厂漏水怎么预防?教你一招,百试百灵

随着工业化的迅速发展,工厂和生产设施在现代社会中扮演着至关重要的角色。然而,这些设施在日常运营中也面临着各种各样的风险和挑战,其中之一是水浸事件。 水浸事件可能是由于天灾、设备故障、管道泄漏或人为失误等原因引发的,但无…

单片机上软字库换32进制存储,空间占用少20%

在之前的单片机字库建立的推送中: https://blog.csdn.net/platform/article/details/130742775, 存储了GB2312字符集对应的软字库文件,在16*16的编码下总字库的507KB,后来把字体切换成了12*12,软字库缩减到了301KB。当然这里面对…

速卖通商品详情数据接口

速卖通商品详情数据接口(aliexpress商品详情API接口)可以获取到速卖通商品的详细信息,如商品标题、价格、库存、详情描述、图片等。 速卖通商品详情API接口是速卖通提供的一种产品数据接口,可以帮助速卖通卖家快速地将产品分类、…

一个高效、简洁、轻量的一站式研发管理平台,协作一站式

一、开源项目简介 Codes 是一个 高效、简洁、轻量的一站式研发管理平台。包含需求管理,任务管理,测试管理,缺陷管理,自动化测试,cicd 等功能;Codes 帮助企业加速融合研发、测试、运维一体化进程 常态下,刀…

正态分布的概率密度函数|正态分布检验|Q-Q图

在正态分布的概率密度函数中,自变量 X 是一个随机变量,表示我们要研究或测量的某一现象或事件的取值。正态分布的概率密度函数用来描述这个随机变量的概率分布情况,即在不同取值上的概率密度。 具体来说,对于正态分布的概率密度函…

【PMP/软考】软件需求的三个主要层次:业务需求、用户需求和功能需求解释及实例解析

简述 当进行需求分析时,通常着重考虑三个主要层次:业务需求、用户需求和功能需求。业务需求关注项目与组织战略目标的一致性,用户需求明确最终用户的期望,而功能需求定义具体的系统功能和特性。这三个层次为项目管理和软件工程提…

12款最火的AI画图软件,助你探索创新设计

ChatGPT火爆出圈,AI画图软件也如雨后春笋般流行起来。各类AI画图的软件工具横空出世,设计师与其焦虑工作会不会被人工智能取代,不如践行“工欲善其事必先利其器”,开拓思路,打开格局,好好地探索下如何利用好…

Apache HTTP Server 2.4.49 路径穿越漏洞 (CVE-2021-41773)

Apache HTTP Server 2.4.49 路径穿越漏洞 (CVE-2021-41773) 文章目录 Apache HTTP Server 2.4.49 路径穿越漏洞 (CVE-2021-41773)1 在线漏洞解读:2 环境搭建3 影响版本:4 漏洞复现4.1 执行漏洞核心指令4.2 进行访问使用bp抓包4.3 尝试执行指令4.4 反弹shenll成功 1 …

039:vue中数字货币化快速显示

第039个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

Python程序设计实例 | 爬取机场航班信息

案例中将展示机场官网中航班信息(如机场航班的离港与进港信息)的爬取过程。有兴趣的读者可以在本案例的基础上对数据进一步分析,或是对爬虫做进一步的开发,增加更多功能。 请求、解析、处理数据是通用爬虫的三个步骤,在本案例中,…

一文了解什么SEO

搜索引擎优化 (SEO) 是一门让页面在 Google 等搜索引擎中排名更高的艺术和科学。 一、搜索引擎优化的好处 搜索引擎优化是在线营销的关键部分,因为搜索是用户浏览网络的主要方式之一。 搜索结果以有序列表的形式呈现,网站在该列表中的排名越高&#x…

一个含不少免费额度和数据下载的IP地址来源查询工具

大家好,我是TJ君! 如今在国内运营的各种互联网应用都有接入IP来源显示的要求,现在相关API的供应商也很多。今天TJ刚好看到一个不错的,所以马上给大家推荐一下。 这款不错的产品名称为:IPInfo 产品特性 该IP查询工具…

解决 react 项目启动端口冲突

报错信息: Emitted error event on Server instance at:at emitErrorNT (net.js:1358:8)at processTicksAndRejections (internal/process/task_queues.js:82:21) {code: EADDRINUSE,errno: -4091,syscall: listen,address: 0.0.0.0,port: 8070 }解决方法&#xff…

第二证券:美国政府又要“关门”?3万亿市值蒸发!

上星期,欧美股市全线跌落,科技股大跌,纳斯达克指数跌逾3%,苹果、微软、谷歌、亚马逊、英伟达、特斯拉、脸书母公司Meta等七大科技股上星期市值算计削减4615亿美元(合人民币3.37万亿元)。 本周市场将发布我…

查看吾托帮88.47的docker里的tomcat日志

步骤如下 (1)ssh (2)ssh root192.168.88.47 等待输入密码:fytest (3)pwd #注释:输出/root (4)docker exec -it wetoband_deploy /bin/bash #注释&#xff1…

jmeterbeanshell调用jsonpath获取对应值

1.jmeter 新建线程组、Java Request、BeanShell Assertion、View Results Tree 2、在BeanShell Assertion中贴入代码: import org.apache.jmeter.extractor.json.jsonpath.JSONManager; import java.util.List; JSONManager js new JSONManager(); String jsonStr…

Vuex命名空间及如何获取根模块、兄弟模块状态管理器

模块化思想 import global from ./modules/global; import form from ./modules/form; import formDesign from ./modules/form-design; ...const store new Vuex.Store({state: {},mutations: {},actions: {},strict: true,modules: {global,form,formDesign,...},... } 此时…

现场直击|亚数TrustAsia精彩亮相IOTE深圳物联网展,CSA联盟展台等你来!

2023年9月20日,IOTE 2023第二十届深圳国际物联网展在深圳国际会展中心(宝安)顺利开幕。作为物联网领域年度最重要的行业盛会之一,本次展会汇聚全球来自工业、物流、基建、智慧城市、智慧零售等领域的600企业、10万行业人士&#x…

springboot 获取参数

1.获取简单参数 2.实体对象参数