
VR/AR
文章平均质量分 62
XR风云
云计算、边缘计算、VR/AR,是一个奋斗者,坚持没有退路,就是必胜之路。
展开
-
VR渲染之Stereo Rendering解析
VR渲染的独特和最明显的方面之一是需要生成两个视图,左右眼睛各一个。我们需要这两个视图来为观众创建立体3D效果。原创 2022-12-21 10:35:41 · 3067 阅读 · 0 评论 -
远程登录云上显卡(英伟达RTX5000)的主机,解决游戏应用帧率降低的问题
最近在使用游戏引擎开发一款游戏应用,在自己的开发机上(显卡RTX4000),帧率能够跑到60fps。我们就在云厂商上买了一台RTX5000的虚拟机,远程登录跑我们的游戏引擎,但是帧率怎么都上不去,只能跑到30fps,RTX5000的显卡肯定比RTX4000的显卡好啊,为啥还帧率还越来越低了呢?自己也看了一下,远程登录运行应用,帧率会有所降下来的。那怎样解决这个问题呢?原创 2022-09-22 09:54:28 · 2855 阅读 · 0 评论 -
Unity的相机的世界坐标Postion、Rotation、Scale怎样转换成View矩阵
最近在做端云协同渲染,会上报相机的世界坐标Postion、Rotation、Scale,没有保存View矩阵,那怎样根据Postion、Rotation、Scale获取得到View矩阵呢?我们知道Camera.worldToCameraMatrix可以直接获取得到view矩阵,这个矩阵是跟OpenGL保持一致的。我们知道Matrix TRS可以根据Postion Rotation Scale获取得到转换矩阵,所以根据Postion Rotation Scale获取得到View矩阵的公式为:更简单的计算原创 2022-07-13 14:52:28 · 1392 阅读 · 0 评论 -
Android上使用NDK MediaCodec硬解码到纹理上
在之前写过在Android平台上通过MediaCodec的能力,硬解码到纹理上,然后在Unity上使用纹理进行渲染。在Unity使用Android的MediaCodec硬解码能力进行纹理加载_XR风云的博客-优快云博客在做AR云渲染项目中,需要在Unity中利用Android的MediaCodec能力进行对视频进行硬解码,我们知道MediaCodec可以把视频流渲染到一个surface上,怎样把视频流中的纹理在Unity中使用呢?一个办法就是MediaCodec解码完成之后,可以把图像的缓存读取出来,在U原创 2022-06-17 14:48:45 · 2523 阅读 · 0 评论 -
Unity上玩转数字人(Avatar)
现在数字人越来越有趣了,现在好多公司都在做,那我也想在Unity玩转一下,怎么玩呢?首先我们需要有数字人资源,数字人资源从哪来呢?第一你可以直接去Unity assetstore上去搜一下免费的数字人,有2个还是比较好的资源。第二可以是自己制作, 打开网址https://vrchat.readyplayer.me/avatar上传一个图片就可以自己捏脸,制作一个自己的avatar了。下面就是我根据关晓彤捏出来的,是不是捏出来的非常不像,这个网站是偏欧美化的,很多材质都很欧美风,所以希望有国内的做出来一个可以原创 2022-06-01 08:45:29 · 13768 阅读 · 5 评论 -
Unreal Engine源代码git clone方法
今天想下载Unreal Engine源代码下来研究研究,我以为像以前git clone一样这么简单就能把代码下载下来呢,但是Unreal Engine组织做了很多安全的事情,并没有这么简单下载下来。大部分人首次去Epic 的github官网首页上都看不到UnrealEngine这个工程的,为什么呢?Epic公司把这个做了账号绑定,只有你Epic的账号绑定到github的账号,才能正常查看UnrealEngine代码。账号绑定接下来我们就一步步来把Github账户关联到Epic Game.原创 2022-05-10 16:38:29 · 5002 阅读 · 4 评论 -
Unity Android多线程实时更新纹理数据
在上一文我们对Unity实时更新纹理数据做了一些研究,但是最后有一步骤,texture.Apply()依然需要在渲染线程中执行,这个函数其实也是非常耗时的,依然会影响到应用的FPS。这篇文章用了另外一条思路,就是开一个线程,主要处理纹理更新的线程,主要是参考了Unity 的NativeRenderingPlugin插件来写的,搞一个Unity单独更新纹理的插件。1、EGL在Android平台上,EGL是OpenGL ES与本地窗口系统(本机窗口系统)之间的通信接口,其主要功能:与设备的原生窗原创 2022-05-06 17:17:55 · 3929 阅读 · 2 评论 -
Unity中实时更新图片的方法探究
背景最近继续在做VR会议,在共享桌面这一块遇到了一个棘手的问题。在会议中,共享的桌面是通过发送一帧一帧的图片来实现的。在Unity中需要把图片渲染出来。3个难点在Unity实时的渲染图片有3个难点:在往texture中灌数据的时候是一个非常耗时的工作,如果是在主线程中做的话,是会影响帧率的。 服务端传过来的图片格式数据为RABG格式,是一个不规范的格式,没有办法直接赋值到texture中,需要做一次转换,转成RGBA格式或者ARGB格式。 texture.Apply函数,是把CPU中的数原创 2022-03-30 15:05:10 · 4712 阅读 · 0 评论 -
Unity中世界坐标与相对于某个物体的相对坐标的转换
最近在开发XR会议, 会上报一些姿态信息在多个端侧进行同步,由于在不同的端侧定位的位置是不一样的,如果你上传的是世界坐标,其实你在另个端侧根本就不能定位出来。所以我们在上报姿态信息时,都是相对于某个物体的相对坐标,然后在端侧在进行转换成相对坐标。设定roomObject为你要改变的相对物体,世界坐标转换成相对于roomObject这个物体的相对坐标: Vector3 headLocalPosition = roomObject.transform.InverseTransformPoint原创 2022-03-08 19:19:31 · 7710 阅读 · 1 评论 -
Unity中使用XR Input获取XR设备中手柄的姿态信息
在上一篇博客Unity在XR设备中获取手柄的按键信息_XR风云-优快云博客我们知道怎样获取手柄的按键信息,那怎样获取得到手柄的姿态信息呢?也是很简单的了,Unity的XR Input已经帮我们对接上Oculus平台,能够获取手柄姿态信息。1、根据输入设备的类型获取设备,设备类型包括如下,我们今天是获取手柄信息,主要用到Left或者Right。 // // 摘要: // A set of bit flags describing XR.InputDevice ch原创 2022-03-04 09:17:44 · 6984 阅读 · 0 评论 -
Unity在XR设备中获取手柄的按键信息
我们在平常的XR设备开发中,尤其适用VR设备的时候,会用到手柄的操作。我们知道Oculus SDK提供了OVRInput,能够获取得到手柄的按键信息。// public variable that can be set to LTouch or RTouch in the Unity Inspectorpublic Controller controller;// returns a float of the Hand Trigger’s current state on the Oc.原创 2022-03-02 19:36:02 · 13982 阅读 · 5 评论 -
Oculus Quest,Unity开发如何开启虚拟键盘
最近在做一个VR虚拟会议,用到输入框,点击输入框的时候,需要开启虚拟键盘。我们主要使用了Oculus,集成了Oculus的SDK,也使用了MRTK作为我们开发3D界面的组件。我是使用的Unity2020.3.7版本,在Package Manager中安装了Oculus,MRTK:是由 Microsoft 驱动的项目,它提供了一系列组件和功能来加速 Unity 中的跨平台 MR 应用开发。 MRTK提供了TMP_KeyboardInputField,能够作为输入框,并且能够自动调用系统的虚拟键盘,原创 2022-01-22 08:23:33 · 3874 阅读 · 2 评论 -
解决UnityGLTF不支持Android手机端不能读取StreamingAssets目录下文件的问题
解决UnityGLTF不支持Android手机端不能读取StreamingAssets目录下文件的问题原创 2021-12-25 16:45:14 · 7432 阅读 · 4 评论 -
Unity引入自定义aar库,aar库又依赖其他第三方库,如何破?
最近开发一个VR上项目,这个项目想集成一个云上的SDK,但是这个SDK只发布了JAVA版本aar库,没有Unity版本。那只能自己想办法把aar库集成到Unity项目中。在这个集成过程中,发现这个aar库还依赖于第三方库,所以在Unity版本的apk运行的的时候,就会报错Unity AndroidJavaException: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/gson/GsonBuilder等。202原创 2021-10-20 10:32:27 · 4304 阅读 · 0 评论 -
VR开发者如何把Oculus Quest中的录制视频导出
最近在开发Oculus上的一个APP,在向上级汇报的时候,录制了一段视频,那怎样把这段视频导出到个人的PC上呢?之前用过Android Studio开发过手机的APP,之前可以在Android Studio上之间看到整个手机的目录。Oculus也是Android的系统,是否可以用相同的办法呢?打开Android Studio,在右下角有个Device File Explorer,打开就可以看到Oculus的整个目录结构了。录制的视频保存在目录sdcard/Oculus/VideoShots.原创 2021-10-14 09:18:13 · 8341 阅读 · 2 评论 -
看看2016年科幻元宇宙原型,2021年了我们还在为实现努力
Facebook:发力XR技术,打造下一个十年的计算平台,构建全产业竞争力原创 2021-10-09 08:47:56 · 212 阅读 · 0 评论 -
试用华为3D建模服务
我们知道苹果还有一些其他的公司都出了拿着手机对物体扫描就可以自动生成3D模型,最近看到华为消费者终端出了一款3D建模服务,就迫不及待的来试用一下。1、我们自己拿华为3D建模demo来进行试用。首先在github上下载3D建模服务的demo代码。代码地址如下:...原创 2021-07-31 09:43:55 · 4148 阅读 · 8 评论 -
Unity Render Streaming,3D模型流式云渲染的解决方案
Unity Render Streaming是Unity开源的一个高质量、高复杂的3D模型在云端渲染,手机端侧、浏览器显示的解决方案。此解决方案的流技术利用了WebRTC,开发人员甚至可以使用WebRTC包创建自己独特的解决方案。WebRTC的安装使用我们在此前的博客中说过了,大家可以看我之前的博客查看怎样安装。好,现在我们开始搭建一个Unity Render Streaming来看看demo的运行。一、Unity Render Streaming安装部署以及案例的运行1、首先创建一个工程,原创 2021-05-29 09:48:18 · 15354 阅读 · 15 评论 -
Unity开源的webrtc库,为流式远程渲染提供视频流传输方案
最近的项目中,可能会用webrtc跟Unity的结合,那就先研究一下webrtc怎样玩呗。那就找找看看有没有开源的的项目可以进行借鉴。幸得Unity官方自己出了一个Unity结合Webrtc的开源项目com.unity.webrtc,这个项目可以在Package Manager直接进行安装。那我就安装好完一下例子呗。1、首先创建一个工程,在Package Manager 的Advanced中首选勾选上Show preview packages,否则你查询不断webrtc。2、安装webrtc原创 2021-05-25 20:30:01 · 10605 阅读 · 17 评论 -
华为AREngine背景图变形(图片比例不正确)的问题
在利用华为AREngine开发的过程的,发现华为AREngine返回的摄像头背景图变形,物体被拉长了。初步定为摄像头的投影矩阵不正确。然后根据投影矩阵打印了一下,fov与aspect,发现aspect为0.78,如果是手机16:9的比例的话,应该大概是0.56左右。因此发现图片的长宽高比例不正确。那继续研究AREngine的接口,发现ARSession有个设置长宽的接口setDisplayGeometry,可以设置AREngine的长宽比。如果没有设置的话,就会默认使用手机自带的长宽比(1080, 14原创 2021-05-25 10:49:59 · 446 阅读 · 0 评论 -
解决AR Foundation在Unity2019.3版本无法编译发布到android手机的问题
最近在使用AR Foundation开发一些AR应用,在编译的时候,碰到一个问题。就是Gradle报错,定位了一下,查找到了解决方法。当前我使用的Unity 2019.3版本,所以在编译android版本的时候,需要注意。报错信息如下:[:arcore_client:] C:\Users\y00384577\.gradle\caches\transforms-2\files-2.1\b6f763c3be184b6b50c3a1bb135fb791\AndroidManifest.x..原创 2021-05-21 10:56:38 · 3664 阅读 · 6 评论 -
AREngine深度图优化之一基于两基带统计的补洞方法
我们都知道AREngine返回的深度图质量并不高,大概率是直接返回的tof深度图,跟ARCORE返回的深度图差距还是比较大的。在我们当前AR云渲染项目中,需要用到AREngine返回的深度图,这就需要提高深度图的质量。所以就开始研究怎样优化AREngine的深度图的方法。本篇博客是对深度图进行补洞的常规方法。两基带统计算法:首先遍历深度图,寻找深度图中的“白点”像素(候选像素),查找候选像素相邻的像素,滤波器把候选像素周围分两个个“带”,统计周围像素的非“白点”值,滤波器计算每个深度值的统计频率分布,并原创 2021-04-24 17:20:16 · 346 阅读 · 2 评论 -
创建Unity package Manager自定义管理的包
Unity包的layout约定,需要按照这个规范进行布局。具体的每个字段的含义可以查询官方文档。1、创建一个工程,取名叫ar_client_unity2、右键点击PackagesàShow in Explorer,打开Packages所在的目录3、在Packages目录下,创建你的包目录,目录名称建议遵循规范,com.<company-name>.xx, 比如Unity官方的包命名: “com.unity.timeline”。4、在com.huawei.aren.原创 2021-04-21 10:35:37 · 3878 阅读 · 11 评论 -
尝试玩转arfoundation,解决arfoundation-samples 编译失败的问题
在研究arfoundation的时候,需要看一些arfoundation的例子,在编译的过程中,出现了一些编译的问题。arfoundation-samples的地址:https://github.com/Unity-Technologies/arfoundation-samples看起来是Gradle编译的问题,尝试解决在查了资料之后,需要确认Unity对Gradle的支持。为了支持Android 11(API级别30),程序包可见性<queries>元素已添加到AR ...原创 2021-04-16 10:44:46 · 567 阅读 · 0 评论 -
AREngine深度图优化之一基于最大/最小/平均值的补洞方法
我们都知道AREngine返回的深度图质量并不高,大概率是直接返回的tof深度图,跟ARCORE返回的深度图差距还是比较大的。在我们当前AR云渲染项目中,需要用到AREngine返回的深度图,这就需要提高深度图的质量。所以就开始研究怎样优化AREngine的深度图的方法。本篇博客是对深度图进行补洞的常规方法。基于最大/最小/平均值的补洞方法,无非就是在周边像素找到能够对候补像素进行补值的算法。如下图所示。在opengl中,我们会查找周边的像素,找到最大/最小值,或者计算出所有像素的平均.原创 2021-04-12 11:24:10 · 535 阅读 · 0 评论 -
AREngine深度图以一种彩虹视图进行可视化
在华为AREngine根据深度图获取深度信息一文中,我们可以在华为AREngine中获取得到深度信息,获取得到的深度图会有一些噪点需要优化,优化的时候,需要展示出来。在看了ARCORE的深度图之后,感觉ARCORE的深度图展示太漂亮了,他们是怎样展示的呢?本文就尝试利用华为AREngine获取的深度图进行彩虹视图的可视化。我们先了解一下为啥要用彩色图像进行可视化呢?假彩色图像出现在计算机视觉和机器学习的许多应用中,从可视化深度图像到更抽象的用途,如图像差分。对图像进行着色有助于人类视觉系统以更直观的原创 2021-04-07 11:20:59 · 755 阅读 · 0 评论 -
根据姿态四元组(Rotation/Quaternion)以及位置(Position)信息获取视图矩阵(viewMatrix)
在Unity中,我们知道在inspector中修改Positon以及Rotation就可以更改相机的位置以及旋转信息,我们知道Rotation都是用Quaternion四元组进行表示的,在Unity中有个一个函数Matrix4x4.TRS可以根据Postion、Quaternion、Scale求得视图转换矩阵。那这个TRS是怎样实现的呢?查了很多资料,基本的实现的代码如下。我这里都是用数组来表示的,返回的是行优先,而Unity的Matrix4x4 ToString方法打印的是列优先,你可以把我返回的原创 2021-03-23 11:43:03 · 1210 阅读 · 0 评论 -
AR云渲染服务中旋转欧拉角度与四元组之间的转换公式
当前正在做AR云渲染服务,用到了需要把从AREngine中获取得到的旋转四元组配置到Unity上,怎么配置也没有配置正确。查了一些资料,把角度与四元组之间的转换公式记录一下。四元组与欧拉角的转换具体的原理我在这就不讲了,大家可以自行查询资料。我们知道不同的XYZ相乘顺序,得到的四元组是不一样的。注意,在AREngine中,使用XYZ顺序,在Unity中,使用的是YXZ方式。 /** * Sets the quaternion to the given euler angles.原创 2021-03-22 11:43:23 · 392 阅读 · 0 评论 -
LearnOpenGL教程案例代码生成Microsoft Visual Studio工程的方法
我们学习opengl,一般都会翻到LearnOpenGL(https://learnopengl.com/)这个教程,这个教程能让我们很快的对opengl进行入门,你也可以去百度中文翻译的教程。这个教程有一些例子,我们一般需要进行编译测试。怎样玩呢? 首先我们可以去github上进行下载代码,地址为:https://github.com/JoeyDeVries/LearnOpenGL,然后我们需要安装cmake工具,怎样安装大家可以去百度进行安装。 安装cmake完成之后,打开cmake,点击Brows原创 2021-03-17 16:02:40 · 624 阅读 · 0 评论 -
华为手机视频解码首屏时延比较大的问题
最近,我继续在做AR云渲染项目,在华为手机P40PRO上测试,视频解码经常延迟2-3帧才能解码出来,直接表现就是首屏时延比较大。看华为社区给出的解决方案,能够有一定的优化效果。主要是设置mediaFormat增加2个参数vendor.hisi-ext-low-latency-video-dec.video-scene-for-low-latency-req 跟vendor.hisi-ext-low-latency-video-dec.video-scene-for-low-latency-rdyM原创 2021-03-15 17:10:36 · 1434 阅读 · 1 评论 -
opengl 使用framebuffer处理图片时可能造成变形的原因
在进行AR云渲染项目的开发中,使用framebuffer对图片进行处理,但是处理出来的图片已经变形了,经定位查询,是因为设置的viewport跟创建的缓存texture的width,height不匹配造成的,所以大家后续注意使用。纹理创建,并把这个纹理绑定到framebufferGL_COLOR_ATTACHMENT0上。 private void createTexture() { if (mImageTextureIDs != null && mImage.原创 2021-03-09 16:11:49 · 752 阅读 · 0 评论 -
opengl使用compute shader的生成纹理,解决残影的问题
在做AR云渲染的项目中,经常会有残影出现,定位问题吧。在我们项目中,使用到了compute shader来定制一些纹理的输出,每帧的写纹理可能没有覆盖纹理的每个像素,这样就造成了问题,下一帧的渲染这个纹理时,由于没有清理纹理缓存,造成残影的出现。尝试使用glClearColor与glClear去做清理,清理不掉。在看其他项目c/c++中,把这个纹理绑定到framebuffer上,在使用glClearColor与glClear去做清理,还是清理不掉。最后想到2个比较粗暴简单的方法:方法一:原创 2021-02-26 15:43:39 · 1043 阅读 · 1 评论 -
opengl 利用高斯模糊(Gaussian blur/高斯滤波)对tof深度图像进行图像平滑处理
在做AR云渲染服务中,需要对华为AR Engine获取得到的深度图进行处理,AR Engine获取得到的深度图就是直接利用tof获取得到的深度图,都没有进行优化过,这里要吐槽一下AR Engine,人家友商arcore获取得到深度图就非常的平滑。一种简单的方式是取了图像周围所有像素,然后求平均值。虽然它确实给我们一个容易模糊,但它并没有给出最好的结果。高斯模糊是基于高斯曲线,高斯曲线通常被描述为钟形曲线,在靠近中心处给出高值,随着距离逐渐磨损。高斯曲线可以用不同的数学形式表示,但通常具有以下形状:原创 2021-02-24 15:42:02 · 2208 阅读 · 0 评论 -
android平台opengl es读取纹理数据并保存图片
在AR云渲染服务中,有时候需要把生成的纹理保存到图片来进行调试。那就想办法看看存成图片,很多人说用glGetTexImage这个函数可以直接读取纹理的数据,但是我们用到了opengl es 32版本,不支持这个函数,想了办法,把纹理绑定到framebuffer,然后用glReadPixels读取出来,然后在保存图片。具体实现如下: private void saveRgb2Bitmap(Buffer buf, String filename, int width, int height)原创 2021-02-22 16:15:41 · 4849 阅读 · 3 评论 -
在AR云渲染服务中,尝试玩转webrtc的编译
1、depot_tools下载下载depot_tools.zip并解压,将解压后的depot_tools文件夹路径加入到系统环境变量 git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git管理员方式运行cmd运行2、cmd中设置代理的方法为:set http_proxy=http://10.34.192.82:808set https_proxy=http://10...原创 2021-02-07 08:57:02 · 572 阅读 · 0 评论 -
利用AREngine识别地面或者桌面并进行绘制边界
众所周知,AREngine或者ARCore都是能够识别出来地面或者桌面的,有时候我们想跟识别出来的地面或者桌面加一些特效,那如何来做呢?先上效果图具体的代码:package com.huawei.arengine.demos.java.world.rendering;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import .原创 2021-02-03 10:10:38 · 786 阅读 · 0 评论 -
opengl与DX下Z值在视觉坐标与NDC坐标转换以及归一化计算
在AR中有时候会用到Eyez转换到buffer z或者buffer z转换成Eyez的问题,把计算方法记录一下。n = nearf = farz = depth buffer Z-value (opengl:[-1..1], dx:[0..1])EZ = eye Z valueLZ = depth buffer Z-value remapped to a linear [0..1] range (near plane to far plane)LZ2 = depth buff...原创 2021-02-03 09:29:16 · 1084 阅读 · 0 评论 -
AR云渲染竞品分析
原创 2021-01-28 15:55:11 · 703 阅读 · 4 评论 -
华为AREngine根据深度图获取深度信息
我们知道华为AREngine可以根据接口acquireDepthImage()获取得到深度图,获取得到的深度图是DEPTH16格式的,AREngine中又没有给出例子怎样根据深度图求得深度信息,吐槽一下文档不够详细。 Image acquireDepthImage() 在camera状态为tracking状态下,获取当前帧对应的深度图像,返回图像格式为DEPTH16,只能在下一次ARSession.update()前使用。 DEPTH16格式是Andr原创 2021-01-25 19:38:55 · 1974 阅读 · 6 评论 -
opengl各个坐标系理解与转换公式
1、标准化设备坐标(Normalized Device Coordinates, NDC)顶点坐标已经在顶点着色器中处理过,它们就应该是标准化设备坐标了,标准化设备坐标是一个x、y和z值在-1.0到1.0的一小段空间。任何落在范围外的坐标都会被丢弃/裁剪,不会显示在你的屏幕上。2、UV坐标系UV坐标系一般以左下角为原点(0,0),经常用于贴图上面。范围为0-1....原创 2020-12-11 14:28:41 · 8071 阅读 · 0 评论