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

【Quest开发】透视环境下抠出身体并能遮挡身体上的服装

软件:Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72

硬件:Meta Quest3

仅针对urp管线

博主搞这个主要是想做现实里的人的变身功能,最后效果如下

可以看到虽然身体是半透明的,但是裙子依旧被完全遮挡了

原理是参考unity的官方urp示例,使用RendererFeature更换被遮挡物体的材质

Unity - Manual: Example of creating a custom rendering effect via the Render Objects Renderer Feature in URP

实现步骤:

一、使用BuildingBlocks设置透视环境

注意:透视有个坑是camera不能开postprocessing(后处理),开后处理会导致环境全黑

二、配置一个具有全身追踪的玩家物体,可参考这篇

【Quest开发】全身跟踪(一)_quest3如何识别跟踪脚部-CSDN博客​​​​​​

我为了绑定准确直接使用meta默认的全身追踪示例 

三、材质设置

身体材质:身体材质的shader需要是透明但写入深度(DepthWrite)的,这里我直接复制了一份meta提供的oculusHand改了参数给到了Mesh里的材质

ps.不用默认透明lit shader的原因是这个shader只参与深度测试但是不写入深度(也就是它能被别的东西遮,但是不能遮别的东西)

衣服材质:我直接用的默认lit shader材质。要求是在Transparent队列里,即使衣服本身不透明(原因在配置RendererFeature里解释)

被遮挡时替换的材质:为了让被遮挡的衣服不可见,也就是达成遮挡的效果,应创建一个透明材质(我这里又复制了一个oculusHand调成了全透明,lit的透明材质应该也行)

四、修改物体层级

新建一个Layer:Clothes,给自己的衣服改成这个层级

五、配置RendererFeature

1、找到自己正在使用的渲染管线使用的renderer(渲染器)

2、点击Renderer Data后选中最下方的add Renderer Feature

选择Render Objects

3、配置如下

这个渲染器的意思就是,在所有物体渲染完后,再对Clothes这个层级的透明队列里的物体再次进行渲染处理,当深度测试发现该层级有物体顶点?片元?处于别的物体后面时(也就是自身深度值大于当前像素点存储的深度缓冲区值时)就会把被遮挡的那个片元替换为ClothesTransparent材质

这样就完成啦,编辑器里应该能看见效果了。


现在来解释为什么衣服需要在Transparent队列里

因为渲染时,opaque(不透明)队列和Transparent(透明)队列是分开渲染的,opaque队列比Transparent队列先渲染。而我们添加的RendererFeature是针对Transparent队列的,那么如果衣服位于opaque队列的话,显然没法检测到

我相信会有人想那给rendererFeature改成针对opaque队列,衣服就可以在opaque里了呗。不行哈,遮不住一点,会变成下面这样。我还没有想通为什么,我贫瘠的渲染知识理解到这已经是极限了,希望大佬评论区解答吧。

http://www.xdnf.cn/news/2318.html

相关文章:

  • 【前端基础】viewport 元标签的详细参数解析与实战指南
  • Milvus(8):密集向量、二进制向量、稀疏向量
  • 烽火HG680-MC_晨星MSO9385芯片-2+8G_安卓9.0_不分地区通刷卡刷固件包
  • Java面向对象:抽象类详解
  • Linux文件操作
  • 如何避免爬虫因Cookie过期导致登录失效
  • 视觉/深度学习/机器学习相关面经总结(2)(持续更新)
  • vscode vue 的插件点击组件不能跳转到文件问题解决
  • LeetCode13_罗马数字转整数
  • OpenVLA:大语言模型用于机器人操控的经典开源作品
  • 界面打印和重定向同时实现
  • 多级缓存架构设计与实践经验
  • 决策树随机深林
  • Mysql从入门到精通day6————时间和日期函数精讲
  • PDF嵌入隐藏的文字
  • [ACTF2020 新生赛]Upload
  • DeepSeek智能时空数据分析(五):基于区域人口数量绘制地图散点-大模型搜集数据NL2SQL加工数据
  • Python对比两张CAD图并标记差异的解决方案
  • 第5章 数据库系统(选择|案例|论文)(重点★★★★★)
  • 【ROS2】ROS开发环境配置——vscode和git
  • 【极致版】华为云Astro轻应用抽取IoTDA影子设备参数生成表格页面全流程
  • OceanBase数据库磁盘空间管理
  • AI声像融合守护幼儿安全——打骂/异常声音报警系统的智慧防护
  • 在Linux中使用ferror()函数和feof()函数判断文件是否读取成功,或者读取指针是否到达了文件末尾?
  • python实战项目66:抓取考研招生专业信息
  • 2025上海车展 | 移远通信重磅发布AR脚踢毫米波雷达,重新定义“无接触交互”尾门
  • IO与文件·I(linux+C)
  • 洛谷题目:P8856 [POI 2002] 火车线路 题解(有一点难)
  • Docker(二):docker常用命令
  • 概率论与统计(不确定性分析)主要应用在什么方面?涉及到具体知识是什么?