多个Mesh涂色的思路以及实现

本文介绍了在Unity3D中实现多Mesh涂色的思路和步骤,包括初始化点的世界坐标,使用蓝图和材质进行污渍绘制,通过SceneCapture记录坐标信息,并解决模型接缝处绘制问题的方法。详细讲解了如何展开Mesh,更新材质,以及处理UV坐标以适应绘制需求。最后,讨论了膨胀算法在解决接缝处误差问题的应用。
摘要由CSDN通过智能技术生成
  1. 初始化记录各个Mesh上的各个点的世界坐标信息在CaptureAltaCanvasRT
  2. 根据HitPositionCaptureAltaCanvasRT绘制污渍RT图,并应用到Mesh对应的材质

在这里插入图片描述
蓝图:
部分1
在这里插入图片描述

  1. 对于要涂色的Mesh,添加SplatReceiver组件,在BeginPlay时加入到SplatManager中的RenderList数组中在这里插入图片描述
  2. SplatManagerRenderList数组添加完毕后,对数组中每个mesh进行遍历,然后对其进行展开模型(把Mesh的材质替换成Unwarp材质,且创建初始材质的动态材质)
    在这里插入图片描述

在这里插入图片描述
6. 利用SceneCapture捕捉Mesh上每个点的世界坐标信息作为SubSceneCaptureRT贴图(清空SceneCapture中的ShowOnlyActors数组,再将该MeshownerActor加入到ShowOnlyActors中,保证SceneCapture只捕捉了当前Mesh,没有捕捉其他的信息,影响捕捉出来的RT图)。
在这里插入图片描述
7. 在把模型的材质替换回原始材质,且更新原始动态材质上的SubUVCount变量作为后续更新材质中污渍图中sub的选择。
在这里插入图片描述
8. 开始绘制CanvasRT,把刚刚捕捉出来的SubSceneCaptureRT作为子RT添加到CaptureAltaCanvasRT的图集。这张图集相当于记录了RenderList上所有Mesh的世界坐标信息。绘制完成一次CanvasSubUVCount更新一次。
在这里插入图片描述
部分2
在这里插入图片描述


各个材质:
M_UnwrapMesh:用于展开模型,且将展开前的Mesh上的各个点的信息作为自发光输入,用于后面被SceneCapture捕捉
注意:

  1. Texcoord[1]表示获取的是模型的第二套UV
  2. constantBiasScale用于把展开的UV坐标范围从是X【0,1】,Y【-1,0】调整到x【-0.5,0.5】.Y【-0.5,0.5】,相当于把UV坐标平移到展开模型的中心点下方。
  3. Param中Size等于SceneCapture的捕捉的大小
  4. 材质函数UnwrapUVsForRender,箭头输出的和上面实际效果是相同的

在这里插入图片描述


M_SceneCaptureÿ

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值