实现原理

见这篇文章Unity Shader-深度相关知识总结与效果实现(LinearDepth,Reverse Z,世界坐标重建,软粒子,高度雾,运动模糊,扫描线效果)_puppet_master的专栏-CSDN博客_shader深度

核心Shader代码


Shader "Universal Render Pipeline/Dejavu/HeightFog"
{Properties{_MainTex("Base (RGB)", 2D) = "white" {}[HDR]_FogColor("_FogColor (default = 1,1,1,1)", color) = (1,1,1,1)}HLSLINCLUDE
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"CBUFFER_START(UnityPerMaterial)float4 _MainTex_ST;half4 _FogColor;float _FogStartHeight;float _FogHeight;float _FogIntensity;CBUFFER_END//TEXTURE2D(_MainTex);//SAMPLER(sampler_MainTex);sampler2D _MainTex;TEXTURE2D(_CameraDepthTexture);SAMPLER(sampler_CameraDepthTexture);struct appdata {float4 positionOS : POSITION;float2 uv : TEXCOORD0;UNITY_VERTEX_INPUT_INSTANCE_ID};struct v2f {float4 positionCS : SV_POSITION;float2 uv : TEXCOORD0;float3 viewRayWorld : TEXCOORD1;UNITY_VERTEX_OUTPUT_STEREO};//vertex shaderv2f vert(appdata v){v2f o;UNITY_SETUP_INSTANCE_ID(v);UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);o.positionCS = TransformObjectToHClip(v.positionOS.xyz);float sceneRawDepth = 1;#if defined(UNITY_REVERSED_Z)sceneRawDepth = 1 - sceneRawDepth;
#endiffloat3 worldPos = ComputeWorldSpacePosition(v.uv, sceneRawDepth, UNITY_MATRIX_I_VP);o.viewRayWorld = worldPos - _WorldSpaceCameraPos.xyz;o.uv = v.uv;return o;}//fragment shaderfloat4 frag(v2f i) : SV_Target{float sceneRawDepth = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, sampler_CameraDepthTexture, i.uv);float linear01Depth = Linear01Depth(sceneRawDepth, _ZBufferParams);float3 worldPos = _WorldSpaceCameraPos.xyz + ( linear01Depth) * i.viewRayWorld;float blendParam  = saturate((_FogStartHeight - worldPos.y) / _FogHeight);blendParam = max(linear01Depth * _FogHeight, blendParam);half4 screenCol =  tex2D(_MainTex,  i.uv);return lerp(screenCol, _FogColor, blendParam * _FogIntensity);}ENDHLSL//开始SubShaderSubShader{//Tags {"RenderType" = "Opaque"  "RenderPipeline" = "UniversalPipeline"}Tags{ "RenderPipeline" = "UniversalPipeline"  "RenderType" = "Overlay" "Queue" = "Transparent-499" "DisableBatching" = "True" }LOD 100ZTest Always Cull Off ZWrite OffBlend one zeroPass{Name "HeightFog"//后处理效果一般都是这几个状态//使用上面定义的vertex和fragment shaderHLSLPROGRAM#pragma vertex vert#pragma fragment fragENDHLSL}}//后处理效果一般不给fallback,如果不支持,不显示后处理即可
}

实现效果

工程链接

GitHub - Dejavu0709/StudyForShader  中的HeightFog文件夹

Unity URP高度雾效果Shader相关推荐

  1. Unity URP的四种shader model

    https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@10.3/manual/shading-model.htm ...

  2. GIS融合之路(五)给CesiumJS加上体积云(Volumetric Cloud)和高度雾(Height Fog)

    同样在这篇文章开始前重申一下,山海鲸并没有使用ThreeJS引擎.但由于ThreeJS引擎使用广泛,下文中直接用ThreeJS同CesiumJS的整合方案代替山海鲸中3D引擎和CesiumJS整合. ...

  3. Unity URP世界空间后处理扫描圈效果Shader

    实现原理 见这篇文章Unity Shader-深度相关知识总结与效果实现(LinearDepth,Reverse Z,世界坐标重建,软粒子,高度雾,运动模糊,扫描线效果)_puppet_master的 ...

  4. Unity Shader PostProcessing - 11 - Depth Fog/Height Fog - 雾效/深度雾效/高度雾/深度+高度雾

    文章目录 观察生活中的雾 Scenario 1 - Pure Depth Fog - 纯深度雾 提取有用信息 Scenario 2 - Height Fog - 带高度的雾 提取有用信息 Scenar ...

  5. Unity Shader - Post Processing 15 - Height Fog (Plus) - 后效 高度雾 改进版 (Parallax)、模拟闪电在云层中SSS

    文章目录 环境 问题 Parallax 原理 GGB 效果 模拟闪电在云层中SSS 测试脚本 效果 GIF Project References 环境 Unity : 2018.2.11f1, 201 ...

  6. unity urp自定义后处理 雾效 深度雾,高度雾 简版

    1,c#代码 using System.Collections; using System.Collections.Generic; using UnityEngine;public static c ...

  7. Unity URP运动模糊效果Shader

    实现原理 见这篇文章Unity Shader-深度相关知识总结与效果实现(LinearDepth,Reverse Z,世界坐标重建,软粒子,高度雾,运动模糊,扫描线效果)_puppet_master的 ...

  8. Shader之——高效率高度雾 云海

    在网上研究了好长一段时间的高度雾 ,大概的方法分两种,一种是屏幕特效,一种是区域的模拟,都是需要开启相机的深度图,对移动端来说效率还是有一定的影响的,最后都放弃了.用我的野路子方法实现了个物体上的高度 ...

  9. Unity从零开始实现一个全息效果Shader

    Unity从零开始实现一个全息效果Shader 前言 开始捣鼓 一.准备阶段 二.先从透明效果开始 三.顶点故障效果 四.扫描线效果 五.菲尼尔反射效果 六.颗粒效果 七.颜色故障效果 CustomE ...

最新文章

  1. react native基本调试技巧
  2. asp.net与JAVASCRIPT函数的相互调用
  3. 监控oracle数据io,Prometheus监控Oracle数据库
  4. libv4l 库【转】
  5. AspectJ声明式事务配置
  6. 设置相机的距离_数码相机的曝光判断标准是什么
  7. 《精通 ASP.NET MVC 3 框架(第三版)》----第1章 设计思路 1.1 Web开发简史
  8. 网站后台目录扫描工具Dirbuster和御剑(脚本小子的最爱)
  9. Java之JDBC安装、使用详解(2021最新!)
  10. 程序员年薪45万,国企年薪20万,该不该跳槽去国企?
  11. web前端开发学习经验分享——css,js进阶篇
  12. python中pd是什么意思_python pd
  13. Mybatis中如何实现一对一,一对多的关联查询?
  14. IT类职位常用缩写 SA SD RD PG PM DBA MIS QA Sales
  15. Java-绘图软件(Windows画板)
  16. GIT回顾(持续更新)
  17. java用socket和serversocket实现一对一聊天(java实现简单的TCP聊天程序)
  18. 字符编码在项目中的应用(一)
  19. 计算机vb计算函数值,VB计算公式及值.doc
  20. “技术男”升为“管理者”,角色一定要转变,你有好方法吗?

热门文章

  1. java 的“mwq”_java的对象模型 - osc_mwqvsfzo的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. P3368 【模板】树状数组 2(区间修改单点查询)
  3. mysql 20小时内,mysql中关于date(Y-m-d H:i:s) 入库慢8小时的解决
  4. Python统计分析--- 5.统计法与随机梯度下降(SGD)
  5. 容器大小_C++ 顺序容器基础知识总结
  6. java session使用_java学习之web基础(8):使用session实现带验证码的登录功能
  7. php是独立服务吗,使用Sprockets作为PHP应用程序的独立服务
  8. java set的first_Java Pair.setFirst方法代码示例
  9. multinorm r语言_与心理学数据分析相关的R工具包
  10. 数据结构-队列之循环队列