当前位置: 首页 > article >正文

Unity Shader 深度重建世界坐标

只用一张深度图就能还原每个像素对应的世界空间位置用 NDC 坐标 逆 VP 矩阵反算。这是 SSAO、SSR、体积雾等所有屏幕空间效果的底层基础。一、核心原理当我们渲染一个 3D 场景时GPU 会将顶点从世界空间变换到屏幕空间这个过程涉及 View 矩阵和 Projection 矩阵。深度重建的本质就是反向这个过程。Pworld (VP)-1 × Pndc世界坐标 逆 View-Projection 矩阵 × 标准化设备坐标为什么不用线性深度透视投影的非线性深度分布使得直接反算不可行。NDC 深度值 [0,1] 对应的是经过透视除法的齐次坐标只有逆 VP 矩阵才能正确还原原始的 3D 位置。二、完整实现代码下面是一个完整的 Shader 实现使用 URP 的内置函数和属性来重建世界坐标。using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; public class DepthReconstructionFeature : ScriptableRendererFeature DepthReconstructionPass m_ScriptablePass; public override void Create() { m_ScriptablePass new DepthReconstructionPass(); m_ScriptablePass.renderPassEvent RenderPassEvent.AfterRenderingOpaques; } public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) { m_ScriptablePass.Setup(renderer.cameraDepthTexture); renderer.EnqueuePass(m_ScriptablePass); } }using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; public class DepthReconstructionFeature : ScriptableRendererFeature DepthReconstructionPass m_ScriptablePass; public override void Create() { m_ScriptablePass new DepthReconstructionPass(); m_ScriptablePass.renderPassEvent RenderPassEvent.AfterRenderingOpaques; } public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) { m_ScriptablePass.Setup(renderer.cameraDepthTexture); renderer.EnqueuePass(m_ScriptablePass); } } DepthReconstructionPass.cs using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; public class DepthReconstructionPass : ScriptableRenderPass private Shader m_Shader; private Material m_Material; private RTHandle m_DepthTexture; public void Setup(RTHandle depthTexture) { m_DepthTexture depthTexture; m_Shader Shader.Find(Hidden/DepthReconstruction); } public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) { if (m_Shader null) return; if (m_Material null) m_Material new Material(m_Shader); ref CameraData cameraData ref renderingData.cameraData; Matrix4x4 invVP cameraData.camera.projectionMatrix * cameraData.camera.worldToCameraMatrix; invVP invVP.inverse; m_Material.SetMatrix(_InvVP矩阵, invVP); m_Material.SetTexture(_CameraDepthTexture, m_DepthTexture); // 在此处绘制全屏Quad进行深度重建 } }Shader Hidden/DepthReconstruction Properties { _MainTex (Screen Texture, 2D) white {} } CGINCLUDE #include UnityCG.cginc // // 核心方法从深度图重建世界坐标 // float3 ReconstructWorldPosition(float2 uv, float rawDepth) { // 步骤1构建 NDC 坐标 // 将屏幕UV转换为NDC空间 [-1, 1] float2 ndc uv * 2.0 - 1.0; // 步骤2构造齐次坐标 // NDC_z 已经经过透视除法需要恢复为 clip space float4 clipPos float4(ndc.x, ndc.y, rawDepth * 2.0 - 1.0, 1.0); // 步骤3逆变换到世界空间 // 乘以逆 VP 矩阵 float4 worldPos mul(_InvVP, clipPos); // 步骤4透视除法 // w 分量保存原始深度信息除以它得到真实坐标 worldPos / worldPos.w; return worldPos.xyz; } ENDCG三、矩阵变换详解理解 VP 矩阵及其逆矩阵是掌握深度重建的关键。下面的流程图展示了完整的变换链路1世界矩阵 (M)模型自身变换2视图矩阵 (V)相机坐标系变换3投影矩阵 (P)透视/正交投影性能提示逆 VP 矩阵可以在 C# 端预计算并传递给 Shader避免在 GPU 上进行昂贵的矩阵求逆运算。矩阵作用输入空间输出空间View (V)将世界坐标转换到相机视角World SpaceView SpaceProjection (P)将视图坐标投影到裁剪空间View SpaceClip SpaceVP组合变换一步到位World SpaceClip Space(VP)⁻¹逆向重建世界坐标NDC SpaceWorld Space四、应用场景深度重建是众多屏幕空间技术的基石。掌握这项技术后你可以实现以下效果SSAOScreen Space Ambient Occlusion屏幕空间环境光遮蔽SSRScreen Space Reflections屏幕空间反射体积雾Volumetric Fog基于深度的雾效计算SSAO 实现要点性能提示逆 VP 矩阵可以在 C# 端预计算并传递给 Shader避免在 GPU 上进行昂贵的矩阵求逆运算。 矩阵 作用 输入空间 输出空间 View (V) 将世界坐标转换到相机视角 World Space View Space Projection (P) 将视图坐标投影到裁剪空间 View Space Clip Space VP 组合变换一步到位 World Space Clip Space (VP)⁻¹ 逆向重建世界坐标 NDC Space World Space 四、应用场景 深度重建是众多屏幕空间技术的基石。掌握这项技术后你可以实现以下效果 SSAO Screen Space Ambient Occlusion 屏幕空间环境光遮蔽 SSR Screen Space Reflections 屏幕空间反射 体积雾 Volumetric Fog 基于深度的雾效计算 SSAO 实现要点 SSAO.frag (片段着色器) // 采样周围多个点进行深度比较 float CalculateAO(float2 uv, float3 normal) { float ao 0.0; // 获取当前像素的世界坐标 float depth SAMPLE_TEXTURE2D(_CameraDepthTexture, uv); float3 currentPos ReconstructWorldPosition(uv, depth); // 在半球方向采样多个点 for (int i 0; i 16; i) { float3 sampleDir GetHemisphereSample(i, normal); float3 samplePos currentPos sampleDir * radius; // 将采样点投影回屏幕空间 float2 sampleUV ProjectToScreen(samplePos); float sampleDepth SAMPLE_TEXTURE2D(_CameraDepthTexture, sampleUV); // 深度差异决定遮蔽程度 float rangeCheck smoothstep(0.0, 1.0, radius / abs(currentPos.z - samplePos.z)); ao (samplePos.z currentPos.z ? 1.0 : 0.0) * rangeCheck; } return 1.0 - (ao / 16.0); }五、关键要点总结NDC 坐标转换uv * 2.0 - 1.0 是将 [0,1] 范围映射到 [-1,1] 的标准操作透视除法不可省略w 分量保存了原始深度信息必须除以 w 才能得到正确的世界坐标逆矩阵计算时机建议在 C# 端计算逆矩阵并通过 SetMatrix 传递避免 GPU 端的矩阵求逆开销深度纹理格式确保在 URP Asset 中开启 Depth Texture否则 m_DepthTexture 将为 nullSRP Batcher 兼容性使用常量缓冲区传递矩阵时需确保格式兼容以获得最佳性能六、URP 配置要点要在 URP 中使用深度重建功能需要正确配置渲染管线资产1打开 URP Asset选中你的 URP Renderer Asset2启用 Depth Texture勾选 Depth Texture 选项代码中启用深度纹理备选方案// 在你的 Renderer 的 BeginCameraRendering 中 var cameraData renderingData.cameraData; if (cameraData.cameraType CameraType.Game) { cameraData.camera.depthTextureMode | DepthTextureMode.Depth; }

相关文章:

Unity Shader 深度重建世界坐标

只用一张深度图就能还原每个像素对应的世界空间位置:用 NDC 坐标 逆 VP 矩阵反算。这是 SSAO、SSR、体积雾等所有屏幕空间效果的底层基础。一、核心原理当我们渲染一个 3D 场景时,GPU 会将顶点从世界空间变换到屏幕空间,这个过程涉及 View 矩…...

哔哩下载姬完整教程:如何高效下载B站视频的终极指南

哔哩下载姬完整教程:如何高效下载B站视频的终极指南 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&#xf…...

如何用XUnity.AutoTranslator实现Unity游戏多语言自动翻译:终极实战指南

如何用XUnity.AutoTranslator实现Unity游戏多语言自动翻译:终极实战指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为游戏出海而烦恼语言本地化问题吗?XUnity.AutoTransl…...

【CrewAI系列3】8 分钟,我用 CrewAI 创建了第一个 AI 员工

这是CrewAI系列的第3篇,计划写24篇,会持续更新;作者:14 年测试/QA 老兵系列:CrewAI 多 Agent 测试框架实战(第 3 篇)字数:约 4,200 字阅读时间:10 分钟收益:学…...

lite-avatar形象库效果惊艳:客服形象在复杂噪声环境下仍保持唇动-语音强同步

lite-avatar形象库效果惊艳:客服形象在复杂噪声环境下仍保持唇动-语音强同步 1. 引言:数字人客服的新突破 在数字人技术快速发展的今天,我们经常遇到一个令人头疼的问题:在嘈杂的环境中,数字人形象的口型和语音总是对…...

解放双手的航海之旅:碧蓝航线Alas自动化助手深度探索

解放双手的航海之旅:碧蓝航线Alas自动化助手深度探索 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 你是否曾因…...

收藏!小白程序员必看:揭秘 Anthropic、OpenAI 等大模型构建核心——智能体脚手架工程

本文深入解析了 Anthropic、OpenAI、Perplexity 和 LangChain 等前沿 AI 公司/AI 工具构建的核心技术,即“智能体脚手架”。文章详细阐述了脚手架工程的重要性,包括编排循环、工具、记忆、上下文管理等功能,并通过对比生产级与玩具级智能体的…...

React Fiber 架构的调度机制原理

React Fiber 架构的调度机制原理 React Fiber 是 React 16 引入的全新核心算法,旨在解决传统堆栈调和(Stack Reconciler)在复杂应用中的性能瓶颈。其核心思想是通过可中断、优先级驱动的调度机制,将渲染任务拆分为多个小任务&…...

题解:洛谷 P1914 小书童——凯撒密码

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…...

Vue前端实现Lingbot深度估计结果实时可视化交互

Vue前端实现Lingbot深度估计结果实时可视化交互 深度估计技术,简单来说,就是让计算机“看懂”一张图片里物体的远近关系,把平面的图像变成有立体感的深度图。这项技术在机器人导航、增强现实、3D建模等领域有着广泛的应用。然而,…...

DLSS Swapper终极指南:如何轻松升级游戏画质技术版本

DLSS Swapper终极指南:如何轻松升级游戏画质技术版本 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 还在为游戏内置的DLSS版本过时而烦恼吗?是否希望在不等待游戏官方更新的情况下,…...

Moon主题开发原理深度解析:Jekyll架构与主题设计哲学

Moon主题开发原理深度解析:Jekyll架构与主题设计哲学 【免费下载链接】Moon 🌓 Moon is a minimal, one column jekyll theme. 项目地址: https://gitcode.com/gh_mirrors/moon/Moon Moon是一款基于Jekyll构建的极简单栏博客主题,以其…...

【Unity】打包发布到微信平台详细过程

目录一、微信小游戏项目转换二、导入Unity打包插件1、下载Unity打包插件2、导入插件到Unity项目三、转换小游戏四、打开小游戏五、上传webgl文件1、新建 webgl 文件夹2、上传文件,多余的可以不要3、配置CDN路径4、资源优化六、可能遇到的问题七、微信小游戏官方文档…...

终极指南:如何用LeaguePrank安全定制你的英雄联盟游戏形象

终极指南:如何用LeaguePrank安全定制你的英雄联盟游戏形象 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 还在为千篇一律的游戏界面感到厌倦?想要在英雄联盟中展现独特个性又担心账号安全?…...

yz-bijini-cosplay LoRA组合魔法:两个Cosplay LoRA叠加生成新风格实验

yz-bijini-cosplay LoRA组合魔法:两个Cosplay LoRA叠加生成新风格实验 想用AI生成独一无二的Cosplay风格图片,但总觉得单个LoRA的风格太单一?今天,我们来玩点不一样的——把两个不同的Cosplay LoRA叠加在一起,看看能碰…...

2026年,华为、阿里、腾讯云谁能在Token驱动的AI新世界掌控“收税权”?

华为、阿里、腾讯云各施策略,2026年谁能在Token驱动的AI新世界掌控“收税权”?Token作为当下的“硬通货”,正在重新定义中国AI产业规则,也彻底“搅乱”了云计算市场。3月31日,华为发布2025年年报,云计算业务…...

s2-pro语音合成镜像使用指南:支持参考音频复用音色,打造个性化语音

s2-pro语音合成镜像使用指南:支持参考音频复用音色,打造个性化语音 1. 镜像概述与核心价值 s2-pro是Fish Audio开源的专业级语音合成解决方案,通过容器化部署提供开箱即用的文本转语音服务。与常规TTS系统不同,其核心创新在于参…...

解锁60帧限制:原神FPS解锁工具完全指南

解锁60帧限制:原神FPS解锁工具完全指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 还在为原神游戏中的60帧限制感到困扰吗?想让你的高端硬件充分发挥性能&…...

3 年→ 资深开发速通计划 序言,开发者服务

大家好,我是3 年→ 资深开发速通计划的顾问。注意到大龄程序员的转型问题,但可能面临技术深度不足或晋升缓慢的问题。我的速通计划已帮助大家用3个月掌握资深技能,借助AI风口平均薪资涨幅达40%。 大家是不是遇到(如“技能分散”“晋升缓慢”) 以下分析如何突破瓶颈: (“…...

告别手动抢购:用JDspyder实现京东商品自动化预约与秒杀

告别手动抢购:用JDspyder实现京东商品自动化预约与秒杀 【免费下载链接】JDspyder 京东预约&抢购脚本,可以自定义商品链接 项目地址: https://gitcode.com/gh_mirrors/jd/JDspyder 想象一下这样的场景:你心心念念的商品即将在京东…...

BitNet b1.58-2B-4T-GGUF效果展示:4096上下文下长文档总结与精准问答对比

BitNet b1.58-2B-4T-GGUF效果展示:4096上下文下长文档总结与精准问答对比 1. 模型特性与性能亮点 BitNet b1.58-2B-4T-GGUF是一款突破性的开源大语言模型,采用原生1.58-bit量化技术,在保持高性能的同时实现了极致的资源效率。这个模型最令人…...

深入nbviewer架构:理解多Provider和Format渲染机制

深入nbviewer架构:理解多Provider和Format渲染机制 【免费下载链接】nbviewer nbconvert as a web service: Render Jupyter Notebooks as static web pages 项目地址: https://gitcode.com/gh_mirrors/nb/nbviewer nbviewer作为Jupyter Notebook的静态网页渲…...

AndroidUSBCamera媒体捕获完全解析:照片、视频、音频一站式解决方案

AndroidUSBCamera媒体捕获完全解析:照片、视频、音频一站式解决方案 【免费下载链接】AndroidUSBCamera 🔥🔥🔥Flexible and useful UVC camera engine on Android platform, supporting multi-road cameras! 项目地址: https:/…...

AccessControl.js未来展望:探索下一代权限控制技术趋势

AccessControl.js未来展望:探索下一代权限控制技术趋势 【免费下载链接】accesscontrol Role and Attribute based Access Control for Node.js 项目地址: https://gitcode.com/gh_mirrors/ac/accesscontrol AccessControl.js作为一款基于Node.js的角色与属性…...

Parseable Kafka连接器深度解析:实现实时数据流处理

Parseable Kafka连接器深度解析:实现实时数据流处理 【免费下载链接】parseable Parseable is an observability datalake built from first principles. 项目地址: https://gitcode.com/gh_mirrors/pa/parseable 在现代数据架构中,实时数据处理已…...

Node.js连接SQL Server终极指南:node-mssql快速入门教程

Node.js连接SQL Server终极指南:node-mssql快速入门教程 【免费下载链接】node-mssql Microsoft SQL Server client for Node.js 项目地址: https://gitcode.com/gh_mirrors/no/node-mssql node-mssql是一款专为Node.js开发的Microsoft SQL Server客户端工具…...

Krita-AI-Diffusion插件安装失败:Linux系统Python虚拟环境创建错误完全解决指南

Krita-AI-Diffusion插件安装失败:Linux系统Python虚拟环境创建错误完全解决指南 【免费下载链接】krita-ai-diffusion Streamlined interface for generating images with AI in Krita. Inpaint and outpaint with optional text prompt, no tweaking required. 项…...

Windows Cleaner终极指南:5步彻底解决C盘爆红问题

Windows Cleaner终极指南:5步彻底解决C盘爆红问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款完全免费开源的Windows系统清…...

告别SSLError!手把手教你离线安装Sentence Transformers的all-MiniLM-L6-v2模型(附国内镜像源)

离线部署Sentence Transformers模型全攻略:all-MiniLM-L6-v2国内高效安装指南 当你在本地运行SentenceTransformer(all-MiniLM-L6-v2)时,是否经常遇到网络连接超时或SSL证书错误?这种情况在国内开发环境中尤为常见。本文将彻底解决这个痛点&…...

DLSS Swapper深度解析:多平台游戏渲染技术版本管理架构揭秘

DLSS Swapper深度解析:多平台游戏渲染技术版本管理架构揭秘 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 在游戏图形渲染技术快速迭代的今天,DLSS(深度学习超级采样)、…...