【Unity】简单的深度虚化shader

【Unity】简单的深度虚化shader

实现效果
在这里插入图片描述

可以用于对地图场景边界的白模处理

实现方法

1.关键方法

UnityObjectToClipPos:将物体坐标转换为屏幕坐标

LinearEyeDepth:将屏幕坐标中的z值转换为实际的深度值

saturate:将值规范到0~1之间,小于0,则返回值为0,大于1,则返回值为1。

2.实现原理

通过LinearEyeDepth转换的深度值是的区间,只和相机的裁剪的远近截面有关。

这里将深度值除去远截面值(far)归一化的值赋给透明度,得到下图效果

float depth = LinearEyeDepth(i.depth);	
float depth_normal =depth/47;

从图上看,虚化的值是从近截面一值到远截面,所以需要设置参数,控制虚化的范围和虚化的位置

用一个简单是数学公式
y = a x + b y=ax+b\\ y=ax+b
其中, a > 0 a>0 a>0; 0 < y < 1 0<y<1 0<y<1

a a a控制虚化的范围,也就是斜率

b b b控制虚化的位置

得到上图,发现近处的透明。再用1-值取反,完成效果。

3.完整shader
方法一

Shader "Custom/DepthShader" {Properties{_MainTex("Texture", 2D) = "white" {}_Color("Color",Color) = (1,1,1,1)_Blur("Blur", Range(0, 40)) = 32_Dis("Dis", Range(-40, 40)) = -32}SubShader{Tags { "Queue" = "Transparent"  "RenderType" = "Opaque"  }LOD 100Pass{Cull Back      //剔除后面//Blend SrcAlpha OneMinusSrcAlphaBlend One OneMinusSrcAlphaCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;float depth : TEXCOORD1;};sampler2D _MainTex;float _Blur;float _Dis;fixed4 _Color;float4 _MainTex_ST;v2f vert(appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.depth = UnityObjectToClipPos(v.vertex).z;o.uv = TRANSFORM_TEX(v.uv, _MainTex);return o;}fixed4 frag(v2f i) : SV_Target{float depth = LinearEyeDepth(i.depth);float depth_normal = 1 - saturate((depth * _Blur) + _Dis);clip(depth_normal);float4 col_Blur = depth_normal;fixed4 col = tex2D(_MainTex, i.uv) * col_Blur * _Color;return col;}ENDCG}
}
}

方法二

Shader "Custom/DepthCameraShader" {Properties{_MainTex("Texture", 2D) = "white" {}_Color("Color",Color) = (1,1,1,1)_Blur("Blur", Range(0, 40)) = 32_Dis("Dis", Range(-40, 40)) = -32}SubShader{Tags { "Queue" = "Transparent"  "RenderType" = "Opaque"  }LOD 100Pass{Cull Back      //剔除后面Blend SrcAlpha OneMinusSrcAlphaCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;float3 worldPos:TEXCOORD2;};sampler2D _MainTex;float _Blur;float _Dis;fixed4 _Color;float4 _MainTex_ST;v2f vert(appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.uv, _MainTex);o.worldPos = mul(unity_ObjectToWorld, v.vertex);return o;}fixed4 frag(v2f i) : SV_Target{float dis = distance(_WorldSpaceCameraPos.xyz ,i.worldPos);float depth_normal =1- saturate((dis * _Blur) + _Dis);float4 col_Blur = depth_normal;fixed4 col = tex2D(_MainTex, i.uv) * col_Blur * _Color;return col;}ENDCG}}
}

4.Shader Graphs实现方法

ShaderGraphs深度虚化资源

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

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

相关文章

【AI视野·今日Robot 机器人论文速览 第四十一期】Tue, 26 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Tue, 26 Sep 2023 Totally 73 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Extreme Parkour with Legged Robots Authors Xuxin Cheng, Kexin Shi, Ananye Agarwal, Deepak Pathak人类可以通过以高度动态…

成为吃鸡战场的王者!分享顶级战术干货,助您提高战斗力!

各位吃鸡战场的玩家们&#xff0c;欢迎来到本视频&#xff01;在这里&#xff0c;我将为您呈现一些与众不同的吃鸡干货&#xff0c;帮助您提高战斗力、轻松吃鸡&#xff01; 首先&#xff0c;让我们谈一谈作图工具推荐。绝地求生作图工具是吃鸡玩家们的必备利器。我将给大家推荐…

IDEA运行第一个Java简单程序(新建项目到运行类)

目录 前言 一、准备工作 JDK下载安装 1.IDEA下载安装 二、IDEA建立项目 &#xff08;一&#xff09;新建项目&#xff08;银河系&#xff09; &#xff08;二&#xff09;新建模块&#xff08;地球&#xff09; &#xff08;三&#xff09;新建包&#xff08;国家&#…

1.3python基础语法——PyCharm

1&#xff09;PyCharm的作用 python的集成开发环境&#xff0c;功能如下&#xff1a; Project管理 智能提示 语法高亮 代码跳转 调试代码 解释代码(解释器) 框架和库 2&#xff09;下载与安装 下载地址&#xff1a;http://www.jetbrains.com/pycharm/download/#sectionwind…

查询表中的全部列的数据

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法格式: select from * 表名; 说明: * 表示所有列 由于不写where子句&#xff0c;表示无条件&#xff0c;找到所有的行&#xff01; 准备工作:执…

【计算机网络笔记九】I/O 多路复用

阻塞 IO 和 非阻塞 IO 阻塞 I/O 和 非阻塞 I/O 的主要区别&#xff1a; 阻塞 I/O 执行用户程序操作是同步的&#xff0c;调用线程会被阻塞挂起&#xff0c;会一直等待内核的 I/O 操作完成才返回用户进程&#xff0c;唤醒挂起线程非阻塞 I/O 执行用户程序操作是异步的&#xf…

909. 蛇梯棋

909. 蛇梯棋 题目-中等难度示例1. bfs 题目-中等难度 给你一个大小为 n x n 的整数矩阵 board &#xff0c;方格按从 1 到 n2 编号&#xff0c;编号遵循 转行交替方式 &#xff0c;从左下角开始 &#xff08;即&#xff0c;从 board[n - 1][0] 开始&#xff09;每一行交替方向…

基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译——深度学习算法应用(含Python、ipynb工程源码)+数据集(四)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 数据增强3. 模型构建4. 模型训练及保存5. 模型评估6. 模型测试1&#xff09;权限注册2&#xff09;模型导入3&#xff09;总体模型构建4&#xff09;处理视频中的预览帧数据5&#xff09;处理图片数…

github搜索技巧

指定语言 language:java 比如我要找用java写的含有blog的内容 搜索项目名称包含关键词的内容 vue in:name 其他如项目描述跟项目文档&#xff0c;如下 组合使用 vue in:name,description,readme 根据Star 或者fork的数量来查找 总结 springboot vue stars:>1000 p…

程序启动-大数据平台搭建

1、启动zookeeper集群 /home/cluster/zookeeper.sh start /home/cluster/zookeeper.sh stop 2、启动hadoop和yarn集群 /home/cluster/hadoop-3.3.6/sbin/start-dfs.sh /home/cluster/hadoop-3.3.6/sbin/start-yarn.sh /home/cluster/hadoop-3.3.6/sbin/stop-dfs.sh /home/clust…

Java括号匹配

目录 一、题目描述 二、题解 一、题目描述 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭…

AG35学习笔记(二):安装编译SDK、CMakeLists编译app、Scons编译server

目录 一、概述二、安装SDK2.1 网盘SDK - 权限不够2.2 bj41 - 需要交叉source2.3 mullen - relocate_sdk.py路径有误 三、编译SDK3.1 /bin/sh: 1: gcc: not found3.2 curses.h: No such file or directory 四、CMakeLists - 编译app4.1 cmake - 项目构建4.2 make - 项目编译4.3 …

计算机图像处理:图像轮廓

图像轮廓 图像阈值分割主要是针对图片的背景和前景进行分离&#xff0c;而图像轮廓也是图像中非常重要的一个特征信息&#xff0c;通过对图像轮廓的操作&#xff0c;就能获取目标图像的大小、位置、方向等信息。画出图像轮廓的基本思路是&#xff1a;先用阈值分割划分为两类图…

如何修复wmvcore.dll缺失问题,wmvcore.dll下载修复方法分享

近年来&#xff0c;电脑使用的普及率越来越高&#xff0c;人们在日常生活中离不开电脑。然而&#xff0c;有时候我们可能会遇到一些问题&#xff0c;其中之一就是wmvcore.dll缺失的问题。wmvcore.dll是Windows平台上用于支持Windows Media Player的动态链接库文件&#xff0c;如…

命运2中文wiki搭建记录——MediaWiki安装与初设置

命运2中文wiki搭建记录 本文转自我的博客&#xff0c;原文地址——>命运2中文wiki搭建记录——MediaWiki安装与初设置 可能是出于闲的发霉&#xff0c;想自己搭建一个命运2wiki。 因为bilibili上的命运2Bwiki也全是自己搭的。指路——>命运2Bwiki 但是当自己实际上手Me…

windows系统删除网络适配器

此电脑&#xff0c;右键&#xff0c;管理 打开本机设备管理器 其中找到网络适配器&#xff1a; 选中要删除的&#xff0c;右键点击“卸载设备”&#xff0c;点击卸载即可完成。

控价与数据分析的关系

品牌在做线上控价时&#xff0c;会面对许多的数据&#xff0c;如店铺数据、行业数据&#xff0c;当这些数据仅仅只是拿来做监测低价输出低价报表使用&#xff0c;是没有发挥其最大作用的&#xff0c;因为商品链接的字段较丰富&#xff0c;涉及的内容会包含销量、评价量、促销信…

Linux:理解进程的多种状态

文章目录 理解状态运行状态阻塞状态挂起状态Linux系统下的进程状态的解析状态的查看 本篇总结的是进程的多种状态 对于进程的状态理解&#xff0c;在教材上通常是有下面的思维模式图 那么如何理解上面图片中的内容&#xff1f; 理解状态 如何理解状态&#xff1f;其实理解状…

PyCharm中使用pyqt5的方法2-2

1.2 是否下载成功 按照以上步骤安装了“pyqt5”、“pyqt5-tools”模块和“pyqt5designer”模块后&#xff0c;可以打开保存这三个模块的路径&#xff0c;找到其对应的文件夹&#xff0c;即可验证是否下载成功。 获取PyCharm保存下载模块路径的方法是&#xff0c;在PyCharm界面…

解决java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset.的错误

文章目录 1. 复现错误2. 分析错误3. 解决问题3.1 下载Hadoop3.2 配置Hadoop3.3 下载winutils3.4 配置winutils 1. 复现错误 今天在运行同事给我的项目&#xff0c;但在项目启动时&#xff0c;报出如下错误&#xff1a; java.io.FileNotFoundException: java.io.FileNotFoundEx…