• [技术干货] Unity 遮挡剔除-转载
     渲染时 摄像机视锥体会裁切一部分 其实还可以遮挡剔除 首先要设置下 阻挡别人的  被阻挡的  设置好以后 点一下bake  摄像机记得要设置这个 Occlusion Culling  右下第一个选项 Camera Volumes 相机进入这个范围内 才会触发 遮挡剔除  勾选上 就可以看到 剔除的效果 也就是说 被挡住的物体会消失不见 Occlusion culling  必须在  这个模式下 拖动摄像机才会隐藏被遮挡的物体 编辑器模式就可以预览 不需要运行模式  其实你会发现 触发遮挡剔除的范围太小了 有没有办法扩大呢  可以创建一个空对象 加上组件 Occlusion Area 然后调整大小  可以看到他是绿色的 设置完以后 记得bake一下  看 范围扩大了 摄像机碰撞到这个盒就会开启遮挡了 你也可以创建多个 Occlusion Area  最重要的一点 Smallest Occluder 一定要设置正确 不然不会触发阻挡 具体看一下描述  The size of the smallest object that will be used to hide other objects when doing occlusion culling. Any objects smaller than this size will never cause objects occluded by them to be culled. For example, with a value of 5, all objects that are higher or wider than 5 meters will cause hidden objects behind them to be culled (not rendered, saving render time). Picking a good value for this property is a balance between occlusion accuracy and storage size for the occlusion data.  最小物体的大小,在进行遮挡剔除时将用于隐藏其他物体。任何小于此大小的对象都不会导致被它们遮挡的对象被剔除。例如,值为5时,所有高于或大于5米的物体将导致隐藏在它们后面的物体被剔除(不渲染,节省渲染时间)。为这个属性选择一个好的值是遮挡精度和遮挡数据存储大小之间的平衡。  比如你的遮挡物大小是3 Smallest Occluder 要设置为1.5才行 设置为3就不会触发 具体原理不太清楚 ———————————————— 版权声明:本文为CSDN博主「开着房车环游世界」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_38913715/article/details/131423543 
  • 虚拟现实(VR)领域Unreal和Unity3D 哪个更有可能成为主流开发引擎?
    有开发者认为,从实现的角度,两者都可以,差异就是哪个引擎是你的团队更可控的,事在人为是真理,大家怎么看
  • VTuber表情捕捉开发指南(HuaWeiARFace/Unity)
    1.   开发环境准备1.1 硬件环境准备(1)一部支持HUAWEI AR Engine的手机,对于FaceAR需要使用Mate20/30 Pro带有深度相机的手机。1.2 软件环境准备(1)手机EMUI版本9.0以上。(2)Unity 2017.4LTS 及以上版本。(3)前往华为开发者网站下载最新版本的UnitySDK,其格式为:Huawei_AR_Engine_UnitySDK_v*.unitypackage。(4)在华为应用市场搜索“华为AR Engine”并下载安装。 2. 基于HUAWEI AR Engine Unity SDK开发AR应用2.1 导入unitypackage新建unity项目,导入HUAWEI AR Engine Unity SDK_vx.x.x.unitypackage,可参考Unity SDK接口说明书进行开发。连接地址如下:https://developer.huawei.com/consumer/cn/doc/overview/HUAWEI_AR2.2 FaceARHUAWEI AR Engine在支持的设备上可以实时识别人脸,人脸的微表情以及人脸模型。当应用为ARSession配置 HuaweiARUnitySDK.ARFaceTrackingConfig ,引擎将实时检测并返回预览中的人脸HuaweiARUnitySDK.ARFace。 目前仅支持单个人脸的检测。  1)会话管理关于会话的启动、暂停、恢复和停止,请参考WorldAR中的 会话管理 。 ARFaceTrackingConfig的创建方式如图:                                                  ARFaceTrackingConfig的配置面板如下:   应用在使用时,需要设置EnableDepth,在支持的手机上,启动深度以便实现人脸识别和跟踪。关于手机是否支持的判断,请参考 HuaweiARUnitySDK.ARSession.Config(ARConfigBase)的使用.ARFace获取的关键代码如下: ARFrame.GetTrackables<ARFace>(m_newFaces, ARTrackableQueryFilter.NEW);for(int i=0;i< m_newFaces.Count; i++){    GameObject faceObject = Instantiate(facePrefabs, Vector3.zero, Quaternion.identity, transform);    faceObject.GetComponent<FaceVisualizer>().Initialize(m_newFaces[i]);}2)ARFace主要类说明关于ARFace的数据获取和使用详情请参考 HuaweiARUnitySDK.ARFace。 类 HuaweiARUnitySDK.ARFace 继承关系图如下: 类ARFace中的主要数据结构说明enum BlendShapeLocation定义了64个华为AR Engine所支持的微表情;包含:眉毛,眼皮,眼球,脸颊,嘴巴,舌头,下巴等的动作捕捉。 类ARFace中的主要成员函数说明GetBlendShape()获取人脸的微表情,返回人脸的微表情和值的字典。GetBlendShapeWithBlendName()获取人脸的微表情,返回人脸微表情字符串和值的字典。GetFaceGeometry() 返回人脸的3D Mesh。该Mesh基于一个人脸坐标系,该坐标系的原点位于人头模型的中央。GetPose( 获取到 该原点在Unity相机坐标系下的位姿。  2.3 获取ARFace的数据传到Unity人物模型在上述工程中找到Assets->Examples->Common->Visualizer->FaceVisualizer.cs文件;在 “FaceVisualizer.cs”文件中定义StringBuilder sb = new StringBuilder();在update函数中var blendShapes = m_face.GetBlendShapeWithBlendName();语句下面加入以下代码,拿到人脸表情的数据: foreach(var bs in blendShapes){  sb.Append(bs.Key);  sb.Append(": ");  sb.Append(bs.Value);  sb.Append("\n");                } 自己动手编写Socket Client函数将上述sb发送给自己的VTuber Server端,同时也是Socket Server端。VTuber Server接收到表情的BlendShapeName及Value后,将对应的BlendShape值赋给自己模型脸部上对应的BlendShape上。复制语句残参考如下代码:skinnedMeshRenderer.SetBlendShapeWeight(pair.Key, pair.Value); 备注:Socket Client端代码、Socket Sever端代码需要自己来写
  • VTuber语音通话开发指南(Agroa/Unity)
    1.        软/硬件环境准备1)      Unity3D 5.5 或更高版本。2)      两部或多部支持音频功能的 Android 真机 (4.0 或更高版本)。3)      一个 App ID,详见 https://docs.agora.io/cn/Agora%20Platform/token?platform=All%20Platforms#app-id2.        Demo配置1)      下载Agroa Unity语音版SDK及Demo,下载地址:https://docs.agora.io/cn/Interactive%20Gaming/downloadscc                                               2)      解压上述文件,用Unity打开samples文件夹下的“Hello-Unity3D-Agora”示例工程。“Hello-Unity3D-Agora”示例工程演示了一下功能:创建/加入频道;自由发言;离开频道3)      在 [Agora.io 注册](https://dashboard.agora.io/cn/signup/) 注册账号,并创建自己的测试项目,获取到 AppID。将 AppID 填写进 HelloUnity3D.cs```private static string appId = "YOUR APP ID";```4)      在项目的根目录下,创建如下文件夹或路径:Assets/Plugins/Android/AgoraAudioKit.plugin/libsAssets/Scripts/AgoraGamingSDK5)      添加如下SDK:-把SDK中 **libs/Android/** 下的内容,复制到Hello-Unity3D-Agora项目的 **Assets/Plugins/Android/AgoraAudioKit.plugin/libs/** 文件夹下;- 把SDK中 **libs/iOS/** 下的内容,复制到Hello-Unity3D-Agora项目的 **Assets/Plugins/iOS/** 文件夹下- 把SDK中 **libs/macOS/** 下的内容,复制到Hello-Unity3D-Agora项目的 **Assets/Plugins/macOS/** 文件夹下- 把SDK中 **libs/x86/** 下的内容,复制到Hello-Unity3D-Agora项目的 **Assets/Plugins/x86/** 文件夹下- 把SDK中 **libs/x86_64/** 下的内容,复制到Hello-Unity3D-Agora项目的 **Assets/Plugins/x86_64/** 文件夹下- 把SDK中 **libs/Scripts/AgoraGamingSDK/** 下的内容,复制到Hello-Unity3D-Agora项目的 **Assets/Scripts/AgoraGamingSDK/** 文件夹下3.        运行Demo1)      配置完APPID,添加完SDK后,即可以运行Demo了。可以在Unity Editor里面直接运行,也可以发布到Android手机手机上查看效果,如下图所示。2)      以发布到Android手机运行为例:在Hello-Unity3D-Agora Demo界面的文本输入框中输入房间号,如“106”,点击“Join Channel”即进入语音通话房间;另一端也加入“106”房间即可互相即时语音通话。如果需要结束语音通话,点击“Leave Channel”按钮即可结束本次通话。备注:通话双方的APP ID 及 房间号需要相同。 图1 Demo运行截图 4.        代码说明1)      HelloUnity3D.cspublic void JoinChannel (){}将此方法与JoinChannel按钮绑定,点击按钮触发此函数加入语音房间。public void LeaveChannel (){}将此方法与LeaveChannel按钮绑定,点击按钮触发此函数离开语音房间。2)      其他说明声网语音通话提供多种语音模式,具体参见以下连接中的API使用说明:https://docs.agora.io/cn/Interactive%20Gaming/game_unity?platform=Unity其中自由通话模式支持双向语音通话,可在加入房间前,在Start()函数中设置自由语音通话模式:mRtcEngine.SetChannelProfile (CHANNEL_PROFILE.GAME_FREE_MODE);
  • Unity人物模型导入及骨骼绑定
     1.   人物模型要求利用3D Max或者Maya将设计的人物模型导出成Unity可使用的fbx格式的人物模型。该人物模型导出时需要设置为T-Pose(否则人物模型可能动作会不正常),且骨骼的初始rotation需要清零,默认为Y轴向上,如下图所示。2.   模型导入Unity及骨骼绑定1)  将人物模型fbx文件及相关素材一并放入Unity工程目录文件,打开工程后,可在Project窗口下看到自己导入的人物素材fbx文件,如下图,仍以Unity Chan为例。2)  点击fbx文件,在Inpector视图中选择Rig选项卡,将fbx的Animation Type设置为Humanoid。3)  点击Configure…按钮,查看骨骼绑定状态。如下图所示。4)  在Inspector视图中,可看到任务的骨骼状态,其中,骨骼映射分为Body、Head、Left Hand和Right Hand四个选项卡,可分别查看每个部分的骨骼绑定状态。5)  在Hierarchy视图中,可以看到任务模型的具体骨骼细节,通过点击具体骨骼,可查看骨骼逻辑映射关系。  6)  若需修改映射,则点击Model里的白色骨骼,在Hierarchy里选择正确的骨骼节点,拖到它的Mapping(映射)对话框中即可。7)  设置完成后,点击Apply进行应用。
  • VTuber Demo 开发指南(unity)
    1      开发环境准备1.1    硬件环境准备一部配置较高的手机,如华为P20系列,Mate30系列。手机配置低可能造成程序卡顿。一根连接手机的数据线。1.2    软件环境准备Unity 2018.4.13 及以上版本。本Demo工程使用的Unity版本为Unity      2018.4.13File->BuildSettings->PlayerSettings->OtherSettings下面的设:1.3    打开示例工程打开Unity Hub,并添加项目VTuberUploadDemo和VTuberDownloadDemo。1.4    打开示例场景两个工程中,都是打开Assets->Scenes->DemoScene。打开File->BuildSettings,选择Android并switch      Platform(不切换运行平台,在Unity Editor里同样可以运行)。如图1和图2所示,为Demo工程打开后的效果。 图1 上传Demo效果 图2 下载Demo效果2      让虚拟角色动起来2.1    AK和SK打开下载工程的Assets/VTuberDownloadDemo.cs,修改Line66和Line67中的AK和SK(string ak = "*** Provide your Access Key ***";    string sk = "*** Provide your Secret Key ***")为从华为云OBS服务申请的值。同样,打开上传工程的Assets/VTuberUploadDemo.cs,修改Line131和Line132中的AK和SK为从华为云OBS服务申请的值。华为云OBS服务介绍与使用请参考:https://www.huaweicloud.com/product/obs.html2.2    桶名称上传和下载Demo中桶名称的修改:Assets/VTuberDownloadDemo.cs的方法public MotionDataUploader getMotionDataUploader() {} 里面包含string bucketName = "vtuber-shanghai2"; 此处的桶名称需要修改为自己使用的桶名称。同样,VTuberUploadDemo.cs里面的桶名称也要对应修改为相同的。并且,所有用户的桶名称都不能相同,具体请参考OBS的桶命名规则。2.3    节点设置用户可以选择距离使用地点近的节点传输数据,减少时延。枚举类ObsEndpoint里面存放了可以使用的节点列表。用户可以自行设置obsEndpointEnum的值。2.4    运行Demo修改好AK和SK后,即可以运行Demo了。可以在Unity Editor里面直接运行,也可以发布到Android手机手机上查看效果,如图3所示。以发布到Android手机运行为例:1)      点击VTuberUploadDemo的开始上传按钮,程序会从Assets/StreamingAssets/MotionData.bin文件读取动作数据,上传到OBS。同时,人物会按照上传的动作数据运动。点击停止上传可以结束上传。同时,在运行过程中,会显示上传数据的时延。2)      然后,点击VTuberDownloadDemo的开始下载按钮,程序会从OBS上下载动作数据,人物就会动起来了。同时,在运行过程中,会显示从上传动作数据到下载完成动作数据的时延。图3 Demo运行截图2.5    代码说明2.5.1  VTuberUploadDemo.cspublic MotionDataUploader getMotionDataUploader(){}此方法中的string bucketName = "vtuber-shanghai2";为上传使用的桶名称。需要修改为自己的桶名称。motionDataUploader.setFoldName("live/UnityChan/");  此处的文件夹名为动作数据存放的文件夹,用户可以按自己的需要进行设置。2.5.2  VTuberDownloadDemo.cs此方法中的string bucketName = "vtuber-shanghai2";为下载使用的桶名称,应该设置为和上传使用的桶名称相同。motionDataUploader.setFoldName("live/UnityChan/");  此处的文件夹名为动作数据存放的文件夹,需要与上传的文件夹相同。注意此类需要实现ImotionDataCallback的onMotionDataDownloaded<T>(params T[] motionDataArr)方法:public class VTuberDownloadDemo : MonoBehaviour, ImotionDataCallback{//下载的动作数据从回调函数中获得    void IMotionDataCallback.onMotionDataDownloaded<T>(params T[] motionDataArr)    {        MotionData motionData = (MotionData)(object)motionDataArr[0];   //下载的对象数据                 timeDelay = (int)(MotionDataHelper.CurrentTimeMillis() - motionData.getCreateTime());        long motionDataID = motionData.getMotionDataID();    }}回调函数中motionDataArr数组为下载完成的动作数据,用户可以对此数据进行后续处理。2.5.3  其他说明Demo中的动作数据是录制好后序列化写入到文件中的,所以Demo中并没有设置MotionData类的实例数据的方法。用户可以根据自己使用的数据格式,封装成MotionData类的格式后进行上传。其中,MotionData类定义如下:Ø  MotionData包含Hips的位置坐标和所有HumanBodyBones的Rotation坐标、表情数据(最多支持65个表情数据)。Ø  MotionData类会在创建实例的时候自动记录数据创建的时间,一般情况下不需要用户自己添加时间。Ø  MotionData类包含设置和获取ID的方法,用户可以通过此方法给MotionData编号。
  • [问题求助] ModelArts训练管理模块预置算法生成的.pbtxt库文件,如何在Unity工具调用该库文件?
    大家好,本人使用ModelArts训练管理->训练作业->预置算法生成的库文件,文件格式为:.pbtxt,我想在Unity工具里面调用这个库文件,请问具体应如何操作?谢谢!