重建世界坐标 
   一、为什么 : 屏幕后处理得不到准确的世界空间下的物体的坐标, 都会使用深度纹理来重建每个像素在世界空间下的位置
   二、怎么做 :
    1 利用vp矩阵重建
        先得到vp矩阵的逆矩阵
        得到ndc的坐标
        利用vp逆矩阵,将ndc坐标转化成世界空间下坐标
由于是在片元着色器中进行计算处理, 会比较耗费性能
详细原理,可以了解一下,shader中从观察空间到屏幕空间所做的一些列操作
2 屏幕射线插值的方式重建
其中: 0 -> bottomLeft;  1 -> bottomRight ; 2 -> topLeft ;  3 -> topRight
-- c#
vector3 toRight = right * halfWidth
vector3 toTop = up * halfHeighttopLeft = forward + toTop - toRight
topRight = forward + toTop + toRight
bottomLeft = forward - toTop - toRight
bottomRight = forward - toTop + toRight//set matrix
Matrix4x4 frustumDir = Matrix4x4.identity;
frustumDir.SetRow(0,bottomLeft);
frustumDir.SetRow(1,bottomRight);
frustumDir.SetRow(2,topLeft);
frustumDir.SetRow(3,topRight);
mat.SetMatrix("_FrustumDir", frustumDir); -- shader  vertex
//uv值和对应的索引的关系 ,对应上图
// x =0 , y = 0  result 0
// x =0 , y = 1  result 2
// x = 1 , y = 0 result 1
// x = 1 , y = 1 result 3
int ix = (int)o.uv.z;int iy = (int)o.uv.w;
o.frustumDir = _FrustumDir[ix + 2 * iy];-- shader fragment
//vertex到fragment的过程中是有个东西叫插值的,这个插值正好能把每个像素所在的向量求出。
float depth = UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture, i.uv.zw));
float linearEyeDepth = LinearEyeDepth(depth);
float3 worldPos = _WorldSpaceCameraPos + linearEyeDepth * i.frustumDir.xyz;
参考链接:Unity Shader - 深度图基础及应用 - 简书

shader 重建世界坐标相关推荐

  1. Unity学习shader笔记[一百]简单焦散Caustic效果

    焦散是模仿光透过水底的一个投影景象 有两个版本,改版最后效果如下 这里是简单的基于物体的焦散,基于水体的焦散思路是水面物体的shader中拿到ColorBuffer,然后用水体的屏幕空间坐标取采集Co ...

  2. 【我的书】Unity Shader的书 — 目录(2016.5.19最后一次更新)

    写在前面 感谢所有点进来看的朋友.没错,我目前打算写一本关于Unity Shader的书. 出书的目的有下面几个: 总结我接触Unity Shader以来的历程,给其他人一个借鉴.我非常明白学Shad ...

  3. 【我的书】Unity Shader的书 — 文件夹(2015.12.21更新)

    写在前面 感谢全部点进来看的朋友.没错.我眼下打算写一本关于Unity Shader的书. 出书的目的有以下几个: 总结我接触Unity Shader以来的历程,给其它人一个借鉴.我非常明确学Shad ...

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

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

  5. Unity学习shader笔记[一百零八]简单萤火效果

    之前用粒子系统基于原有萤火虫的粒子改了一波慢萤火效果就被惊艳到了,开始大家讨论,就都觉得这样大数量的粒子消耗挺大的,后面测试过才发现单纯的粒子系统在总粒子数量3000,每秒300的生成数量,屏幕呈现有 ...

  6. Unity SRP世界空间重建

    世界空间重建解决的是:当我们在不透明物体渲染完成,想要知道深度缓存中保存当前渲染的物体的世界空间位置.这个功能还是比较常用的,一些后处理效果比如雾效,ScreenSpace效果都基于此. 重建世界空间 ...

  7. Unity Shader深度相关知识总结与效果实现

    鸣谢:puppet_master (VIA CSDN)贡献此文 前言 前言废话依旧比较多,感觉我是个写游戏体验评测的,233.最近想起了<恶灵附身>这款游戏的几个效果: <恶灵附身& ...

  8. 【unity shader/风格化水表面渲染/基础笔记】urp代码版01-水面与水底的深度判断

    目录 1 场景搭建与实现思路 2 深度图获取与原理 获取方式 深度图计算原理 变换过程 3 重建世界坐标 采样深度图 重建方法1 重建方法2 4 结果 仅做学习,如有错误望指正 涉及的知识点:dept ...

  9. 【游戏开发小技】Unity中实现Dota里的角色技能地面贴花效果(URP | ShaderGraph | Decal)

    本文最终效果 文章目录 一.前言 二.环境准备 1.URP环境准备 2.技能范围图案 二.方案一:写Shader实现 1.Shader脚本:UrpDecal.shader 2.材质球 3.创建Cube ...

  10. 【游戏开发小技】Unity中实现Dota里的角色技能地面贴花效果(URP ShaderGraph Decal)

    本文最终效果 文章目录 一.前言 二.环境准备 1.URP环境准备 2.技能范围图案 二.方案一:写Shader实现 1.Shader脚本:UrpDecal.shader 2.材质球 3.创建Cube ...

最新文章

  1. GDCM:gdcm::PDFCodec的测试程序
  2. 开放防火墙/26ip段_在5个不同国家/地区采用开放硬件设计的电子产品
  3. # 异运算_人教版六年级数学下册第29课数的运算(P7680)图文视频辅导
  4. Python项目开发基础 -- with open (filename) as 读写文件
  5. h5课件制作_教师必备:实用H5课件制作技巧
  6. 中国与印度软件开发之比较
  7. 第一章 数据资产的定义
  8. GridView列标题设置颜色
  9. 关于Spring Security框架 关于单点登录sso
  10. 基于豆瓣评价的文本分析 ——以《流浪地球》为例
  11. java label对齐方式_java – 在BorderLayout中对齐JLabel和JTextField
  12. 微博小米鸿蒙,华为确定鸿蒙OS全面开源,小米会... - @V黑猫评测 的微博精选 - 微博国际站...
  13. HIVE/SQL 实现同一列数据累加和累乘
  14. python对 CAD图斑面积的统计及标注
  15. U盘安装Win10,遇到“由于存在受损的安装文件 因此安装无法继续”
  16. 2014年高考计算机试题答案,春季高考历年真题-2014年天津市春季高考计算机试卷.doc...
  17. 信号与系统(3)---男生、女生声音信号的混合与分离
  18. 二维码扫码登录的项目实战(建议收藏)
  19. 【GAN】是什么让GAN成为了这5年里深度学习领域最亮的崽?
  20. 恼人的工行u盾驱动安装

热门文章

  1. 2合1笔记本 android,华为二合一笔记本支持Android可能是鸡肋
  2. 车载以太网测试:以太网测什么
  3. 看完就能学会如何使用热敏电阻!
  4. Django之wagtail安装及配置
  5. python读取tif图片_在Python中读取TIFF图像元数据
  6. ifcfg-eth0配置详解
  7. 管理欲望:领导者的自我觉察与突破
  8. 基本的信号——Sa函数(抽样信号)
  9. 哈希列表、哈希链、哈希树
  10. echart柱状图堆列实现百分比显示