华为云渲染实践

  //  

编者按:云计算与网络基础设施发展为云端渲染提供了更好的发展机会,华为云随之长期在自研图形渲染引擎、工业领域渲染和AI加速渲染三大方向进行云渲染方面的探索与研究。本次LiveVideoStackCon 2023上海站邀请了来自华为云的陈普,为大家分享云渲染在垂直场景的一些应用。

文/陈普

整理/LiveVideoStack

大家下午好,今天非常荣幸和大家进行分享交流,本次分享的主题为华为云渲染实践——从2D图形到3D空间。

本人于2005年加入华为公司,自2007年至今曾先后负责华为云计算、自研桌面云和人工智能等技术的研发工作,目前正致力于华为云渲染服务的研发。

本次分享分为以下几部分:首先介绍渲染技术的范围和云渲染希望解决的问题,其次介绍华为云渲染在2D、3D和云原生渲染方面的一些实践,再到工业图像和AI加速渲染方面的实践。

-01-

渲染技术的范围

65d9d1c675b44e19be96062c2f939db4.png

提到云渲染,大家可能会直接联想到云游戏,实际上二者并不等同。华为云致力于将渲染技术应用于各个行业,目前主要包括实时渲染和离线渲染两大分支,实时渲染的落地场景包括虚拟展会、汽车展示、虚拟空间和数字人等等,离线渲染更注重逼真的效果,主要应用于设计效果图和影视等场景。

-02-

云渲染希望解决的问题

一部分人容易直接将渲染与3D图形划等号,因此首先解释一下渲染的概念。百度百科将渲染定义为CG的最后一道工序,这个解释偏向于离线渲染。维基和百度百科也曾在浏览器引擎、OpenGL中提及渲染,可以看到渲染的对象是包括2D和3D图形的。维基百科对渲染的定义是较为准确,它实际上指软件利用二进制和格式化数据生成图像的过程。

9b1cf5be9f8e81a6fd822804795463e1.png

我们将云渲染定义为:实现客户的图形渲染业务上云,整个流程从无图形到2d图形再到3D图形。

3937ff3d18a11dacaf85ad809ca0a85d.png

我们的现有图像渲染架构如上所示,3D技术最下层的GPU到显卡驱动、DX、OpenGL、Vulkan运行库、3D渲染引擎再到3D应用程序,直接使用底层API开发图形渲染程序难度较大。

另一条2D应用程序分支主要包含大家常见的Office等PC 2D应用程序,从GPU、显卡驱动、微软定义的GDI运行库、GUI框架再到2D应用程序。

-03-

2D渲染实践

668ecbc43bae1d311954e0c041a0de3a.png

接下来介绍我们的云端2D实践。标准的2D图形显示流程如上图所示,首先由应用程序调用GUI程序库,GUI库转化为底层GDI运行库调用,此时运行库还处于用户态,没有调用硬件。随后GDI运行库调用显卡驱动,显卡驱动调用显卡,完成图像渲染并输出至显示器。

d4b86883c2db12fe3fb3ce53c526d735.png

那么实现2D应用的远程显示是否只需要将渲染后的画面编码并传输到客户端?实际上这种方式存在编码效率低、视频带宽占用大和有损压缩导致颜色失真等缺点,并不适用于2D渲染上云。

我们设计的渲染流程是在显卡驱动获取2D图像渲染调用后,将图像渲染调用序列转化成数据,利用2D渲染指令处理程序对数据进行处理、编码后进行画面无损压缩,最终通过网络传输到客户端解码显示。以文字输入为例,输入的字符串通过字体驱动转为像素级文字,并且只需在屏幕上的小范围更新区域显示,传输的数据量不大,可以实现无损压缩。以上流程在Windows和Linux平台都有实现方案。

-04-

3D渲染应用上云实践

977460a12545a5ef68c450e531cbba19.png

3D云渲染架构和2D渲染类似。早期由于技术条件限制,我们选择使用GPU直通技术,将GPU与虚拟机绑定,虚拟机可以直接访问GPU,获得高性能图形渲染能力,再通过远程应用技术将画面传递至客户端。

这种方式的优点是虚拟机可以直接安装设备商的标准显卡驱动,保证了兼容性,使显卡接近于物理GPU性能。缺点是GPU与虚拟机绑定,失去了灵活性,并且成本较高。但它目前仍是主流的云上GPU使用方式。

ebbf3c387a9e51b0c451590fbc636680.png

我们于2012年尝试将渲染从云端转到客户端远程完成,本质上需要获取用户程序的3D指令流。

按照微软WDDM显卡驱动可以捕获到用户应用程序3D图像渲染的调用。在该架构下,驱动程序分为用户态和内核态,实现3D程序需要借助Direct运行库,它调用设备厂商提供的驱动,并通过内核态驱动与GPU进行交互。OpenGL也存在类似程序。

664a02e690dc80462c2719160171c772.png

于是我们将全部3D应用程序指令流处理后传输至客户端,在客户端重新进行渲染,经过50多款游戏测试,基本实现了渲染功能。但带宽存在不稳定性,实现难度和所需成本都比较高。

8f7ca5b878f2770165e6c7de69c9b544.png

2012年我们开始研发软件GPU虚拟化。它的基本原理通过两种虚拟机实现,一种是为客户服务的虚拟GPU虚拟机,另一种是前述的使用直通技术的物理GPU虚拟机。

我们在虚拟化平台对两种虚拟机构筑了内存通信,在虚拟GPU虚拟机安装虚拟显卡驱动,利用驱动捕获3D图像驱动调用,并利用共享内存传输至物理GPU虚拟机,在物理GPU虚拟机中利用直通物理显卡进行渲染,渲染后进行画面回传。

这种方式面临的挑战有两种,一是由于DirectX具有多种版本,驱动兼容实现难度大。二是内部共享内存传输还需进一步加速。存在的缺点是方案本身属于资源抢占模型,隔离能力较差,其次是对虚拟显卡驱动兼容性研发投入人力非常大。

01b95655a59c8941d4d75824c8eda9ac.png

2013年我们与英伟达合作,在虚拟化平台支持硬件GPU虚拟化,这种方式可以获得更好的隔离能力和驱动兼容性,缺点是Nvidia按照虚拟机单独收取License费用,成本较高。

-05-

云原生渲染实践

bba8c13f5e72aaf5651649d4bea29474.png

以上介绍的方案仅是围绕操作系统级别支持的底层图形渲染能力,对业务具体场景渗透的不够。从实际业务场景来看,华为云渲染的目标是帮助客户图形渲染场景上云,离线渲染场景主要服务于影视和高清设计图,由此衍生的应用级渲染技术包括AI渲染加速和华为云原生渲染引擎支持的离线光追渲染。

实时渲染场景服务于3D空间、数字孪生、实时设计和游戏等,主要分为现有3D应用无需修改直接上云和经过云原生优化后上云两套方案,分别包括3D应用实时渲染、云应用以及远程渲染、3D空间加速。

接下来介绍实时渲染场景下的云渲染技术,华为云通过提供云应用产品帮助实现现有应用直接上云,主要包括对CPU/GPU算力要求较高的3D设计类软件,这解决了软件下载安装耗时费力和销售价格昂贵的问题,例如CAD、CAE、CAM等设计、建模、仿真软件类软件。

41aaafa6907f1350a191900611077778.png

它的原理是利用Windows多会话技术来构建轻量级的隔离技术,使Windows Server同时服务多个客户端。它的优点是具备一定隔离能力,并且由于在虚拟机层面实现了多会话,每个会话都可以直接访问物理GPU。它本身是标准的Windows技术,和企业内部网络具备很好的互通性。缺点是GPU计算与显存处于多用户抢占模式,无法隔离。并且每个会话要独立付费Windows RDS License。

dc75dc29823d88871e2215605aced7e2.png

为了优化前面提到的License成本问题,我们通过将沙箱和Hook技术结合,让Windows不使用多会话技术运行多个应用,并服务于多个接入客户端,这也是目前云渲染的主流技术方案。它的优点是不依赖Windows多会话技术,降低了License成本,缺点是相对于GPU虚拟化,资源隔离能力有限。

bf2388f79d2198fc7fae86c96aefda6c.png

前面提到过的硬件GPU虚拟化也是一种主要的实现方式,但需要增加远程交互模块对3D应用进行管理。它的优势是隔离能力和兼容性好,缺点是Nvidia按照虚拟机单独收取License费用。

db944fc28d5aa4acb9c931566b6feb22.png

接下来对几种方案适用的场景进行介绍。选择云应用方案一般涉及强烈的企业内网互通(账号、权限)和应用兼容性诉求(2D、3D各种类型);选择3D应用实时渲染一般专注于3D渲染程序,如基于DirectX开发的3D展示应用、游戏等;GPU硬件虚拟化/物理直通方案一般配合云应用和3D应用实时渲染使用。

以上技术的共同点是把3D应用直接搬上云端进行计算,但单纯的云渲染能否实现应用不上云,仅渲染上云?

45032055ce31bb08cbf2732027181024.png

因此我们实现了一套基于云原生优化的上云方案,即远程渲染。它同时适用于Web、PC和移动端3D应用程序。应用程序实际在客户端侧运行,但渲染的计算被卸载,并通过远程渲染SDK在云端完成渲染,最终画面通过视频编码回传给端侧。

它的优点是云端只承担渲染职能,端侧的算力可以完成其他逻辑的运算,结合客户端实际情况还可以灵活选择本地、云端或混合渲染。缺点是应用需要基于远程渲染SDK进行改造,并且无法满足非常高的交互式实施场景需求(例如某些游戏)。

7eceaa7d63a67e20f2136b0f27b8d922.png

上图展示了用户使用远程渲染服务的具体流程。在开通服务并创建云渲染会话后,由远程SDK控制云端渲染,渲染后的画面通过华为RTC服务回传至客户端进行显示。

d85f9f40132eae8c5da7e237cfda2980.png

接下来对远程渲染效果进行演示。传统模式下,设计师需要通过离线渲染获得效果图后才能查看设计效果。利用华为云渲染,设计师可以实时查看设计效果,同时云端光追渲染可以更真实地还原现场光线环境。

bca1869ffdc9c64f041c57379c3954bb.png

那么渲染和云结合的具体优势是什么?和消费级显卡相比,云数据中心使用的硬件价格十分昂贵,高昂的造价实际带来了哪些利好呢?如上图所示,如果将云看做一个大机器,可以发现,云渲染支持同时服务于不同类型(手机、平板、主机等等)的多个用户,并且可提供一个应用能够被多用户使用的场景。它的硬件资源不绑定到用户,而是由用户使用时间决定。软件也无需在本地进行安装。

6f420f19aa06a009e0c419e241d1ff27.png

前面提到的几种3D应用上云方案本质上只是将本地程序部署上云,云仅仅提供本地资源的替代,计算资源按连接来调度,不同的应用间没有共享。

华为云通过对自研渲染引擎进行多用户接入改造实现了一些新的尝试,使单引擎在相同场景下可以同时接入多个用户,这种方式变相节省了部分场景加载的内存和显存,且用户之间共享的计算可以节省CPU、GPU。作为充分发挥云优势的云原生方案,它与前述的几种方案在本质上完全不同。经过实际测试,它可以提升0.5倍以上的效率。

-06-

工业图形渲染实践

接下来介绍我们在工业图形渲染领域的一些实践。工业图形渲染引擎可能与大家日常接触的渲染工作不同,它是计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助工程(CAE)、建筑信息建模(BIM)等工业设计软件中的基础技术组件,决定了3D设计对象的真实呈现、保证前端设计的正确性。

cc78bb926be220323a3fc427391ffb40.png

目前国内缺乏自主研发的高质量工业图形渲染引擎,各大企业的自研引擎无法支持高质量和大场景图形渲染。业界较为出名的GPU渲染器基本都是国外的产品(如KeyShot和HOOP等)。

华为云在国家技术创新中心的支持下启动了工业图形渲染引擎研发项目,目标是历经2~3年的开发,产出达到世界先进水平的渲染引擎,满足CAD、CAE、CAM和EDA场景的工业图形渲染需求。

800ed27001a54cb51a9b00b1a4861d2b.png

上图展示了我们自研工业渲染管线近期的实时渲染效果,目前它已和部分中国三维CAD厂商完成了集成对接,2024年将陆续实现与其他企业设计软件的对接。

f6f64a65a6bc0173991802ebb2120a96.png

接下来对云端光追实时渲染进行展示,它侧重呈现材质、光影等效果。

-07-

AI加速渲染实践

ece4dbf0c4ecd128e703d48cb9640754.png

最后介绍华为云的AI加速离线渲染。我们原有的旧思路是通过自研渲染引擎来替代友商同类产品,由于生态壁垒过高,该思路并不可行。

现有离线渲染流程是客户端应用通过农场服务、农场调取器提交图形数据,确定计算节点并完成图形渲染。由于过程中的光追计算消耗量很大,导致整体所需时间也很长。因此我们希望通过引入AI技术对渲染进行加速,通过农场服务调整参数降低渲染的光追计算,从而降低纯CG端的计算,再通过专有的AI模型对渲染过程性输出CG数据进行AI推理计算。输出效果可以达到同等质量。

e6c3bf5d682bc79792033efc23b8fe7f.png

上图展示了华为云AI加速渲染的输出效果。可以看到,AI输出与原生渲染图在质量上基本一致。

114bff3708f68528348c40b09be9a616.png

上图展示了一个AI加速渲染影视番剧的实际案例。可以看到毛发等细节与原生渲染图基本一致,并且质量要求越高,提速效果越好。

接下来对我们的技术时间轴进行总结。2011年至今,我们的发展从2D渲染到自研3D空间云渲染,从GPU虚拟化到光追引擎和AI渲染加速,涉及的行业包括企业办公、数字人、影视、云游戏、工业设计等等。

我们的研发团队呈全球布局,依靠图形领域全球知名高校和产业基地,持续深耕云原生图形技术,支持产业升级。

352535cfb58c1b62da81efbfc3da7c96.png

接下来对我们的自研离线渲染视频进行演示,它主要面向家装设计场景,光影真实性比实时渲染更强,每帧渲染仅需要5~10秒。

80abf5b66b3ca0e92ab08d63bf5ce0c5.png

最后对我们的自研实时渲染进行视频演示,它基于华为自研渲染引擎构建。

本人认为渲染是技术也是工具,可以帮助用户达成预期效果的呈现,在此也希望与各位在座专家深入交流。我的分享就到这里,谢谢大家!


46d09a9a4de6ef73d07715fa5953b323.png

扫描图中二维码或点击“阅读原文 

直通LiveVideoStackCon 2023深圳站 8折购票通道

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/106098.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[系统] 电脑突然变卡 / 电脑突然** / 各种突发情况解决思路

今天来公司办公,开机之后发现电脑出现各种问题,死机、卡顿、点什么都加载,甚至开一个文件夹要1分钟才能打开,花了2个小时才解决,走了很多弯路,其实早点想通,5分钟就能解决问题,所以打…

玩转科技|了解AI平台桌面客户端—ChatBox

目录 前言 特性 ​编辑 为什么需要 ChatBox? ChatGPT Plus 平替? 下载 支持系统 功能图 使用教程 ​感受 展示 前言 今天小编又来了,推荐给大家一款开源的OpenAI API桌面客户端ChatBox,它支持 Windows、Mac 和 Linux。…

Vue2向Vue3过度Vuex核心概念state状态

目录 1 核心概念 - state 状态1.目标2.提供数据3.访问Vuex中的数据4.通过$store访问的语法5.代码实现5.1模板中使用5.2组件逻辑中使用5.3 js文件中使用 2 通过辅助函数 - mapState获取 state中的数据1.第一步:导入mapState (mapState是vuex中的一个函数)2.第二步&am…

【Apollo学习笔记】——规划模块TASK之PATH_REUSE_DECIDER

文章目录 前言PATH_REUSE_DECIDER功能简介PATH_REUSE_DECIDER相关配置PATH_REUSE_DECIDER总体流程PATH_REUSE_DECIDER相关子函数IsCollisionFreeTrimHistoryPathIsIgnoredBlockingObstacle和GetBlockingObstacleS Else参考 前言 在Apollo星火计划学习笔记——Apollo路径规划算…

容器技术,1. Docker,2. Kubernetes(K8s):

目录 容器技术 1. Docker: 2. Kubernetes(K8s): Docker和Kubernetes 容器的主要应用场景有哪些? 容器技术 有效的将单个操作系统的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使…

分布式 - 服务器Nginx:一小时入门系列之 HTTPS协议配置

文章目录 1. HTTPS 协议2. 生成 SSL 证书和私钥文件3. 配置 SSL 证书和私钥文件4. HTTPS 协议优化 1. HTTPS 协议 HTTPS 是一种通过计算机网络进行安全通信的协议。它是HTTP的安全版本,通过使用 SSL 或 TLS 协议来加密和保护数据传输。HTTPS的主要目的是确保在客户…

PHP小白搭建Kafka环境以及初步使用rdkafka

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、安装java(Kafka必须安装java,因为kafka依赖java核心)二、安装以及配置Kafka、zookeeper1.下载Kafka(无需下载…

强化学习在游戏AI中的应用与挑战

文章目录 1. 强化学习简介2. 强化学习在游戏AI中的应用2.1 游戏智能体训练2.2 游戏AI决策2.3 游戏测试和优化 3. 强化学习在游戏AI中的挑战3.1 探索与利用的平衡3.2 多样性的应对 4. 解决方法与展望4.1 深度强化学习4.2 奖励设计和函数逼近 5. 总结 🎉欢迎来到AIGC人…

计算机网络——OSI与TCP/IP各层的结构与功能,都有哪些协议?

文章目录 一 OSI与TCP/IP各层的结构与功能,都有哪些协议?1.1 应用层1.2 运输层1.3 网络层1.4 数据链路层1.5 物理层1.6 总结一下 二 ⭐TCP 三次握手和四次挥手(面试常客)2.1 TCP 三次握手漫画图解2.2 为什么要三次握手⭐2.3 第2次握手传回了ACK,为什么还要传回SYN&…

基于Java+SpringBoot+Vue前后端分离社区智慧养老监护管理平台设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

【Jetpack】Navigation 导航组件 ④ ( Fragment 跳转中使用 safe args 安全传递参数 )

文章目录 一、页面跳转间的传统的数据传递方式1、传统的数据传递方式 - Bundle 传递数据1、Navigation 组件中的 Bundle 数据传递2、传统数据传递实现步骤3、FragmentA 完整代码示例4、FragmentB 完整代码示例5、执行结果 2、使用 Bundle 传递数据安全性差 二、页面跳转间的传统…

lesson9: C++多线程

1.线程库 1.1 thread类的简单介绍 C11 中引入了对 线程的支持 了&#xff0c;使得 C 在 并行编程时 不需要依赖第三方库 而且在原子操作中还引入了 原子类 的概念。要使用标准库中的线程&#xff0c;必须包含 < thread > 头文件 函数名 功能 thread() 构造一个线程对象…

item_search_seller-搜索店铺列表

一、接口参数说明&#xff1a; item_search_seller-搜索店铺列表&#xff0c;点击更多API调试&#xff0c;请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_search_seller 名称类型必须描述keyString是调用key&#x…

Redis笔记——(狂神说)待续

Nosql概述 为什么要用NoSql&#xff1f; 1、单机mysql的年代&#xff1a;90年代&#xff0c;网站访问量小&#xff0c;很多使用静态网页html写的&#xff0c;服务器没压力。 当时瓶颈是&#xff1a;1)数据量太大一个机器放不下。2)数据的索引(BTree)&#xff0c;一个机器内存也…

thinkphp6 入门(1)--安装、路由规则、多应用模式

一、安装thinkphp6 具体参考官方文档 安装 ThinkPHP6.0完全开发手册 看云 下面仅列举重要步骤 ThinkPHP6.0的环境要求如下&#xff1a; PHP > 7.2.5 1. 安装Composer 2. 安装稳定版thinkphp 如果你是第一次安装的话&#xff0c;在命令行下面&#xff0c;切换到你的WE…

【高危】Kubernetes Windows节点kubernetes-csi-proxy提权漏洞 (CVE-2023-3893)

zhi.oscs1024.com​​​​​ 漏洞类型OS命令注入发现时间2023-08-24漏洞等级高危MPS编号MPS-t6rg-974fCVE编号CVE-2023-3893漏洞影响广度小 漏洞危害 OSCS 描述Kubernetes是开源的容器管理平台&#xff0c;kubernetes-csi-proxy是用于Windows中的CSI&#xff08;容器存储接口&…

如何在不使用任何软件的情况下将 PDF 转换为 Excel

通常&#xff0c;您可能会遇到这样的情况&#xff1a;您需要的数据不在 Excel 工作表中&#xff0c;而是以数据表形式出现在 PDF 文件中。为了将此数据放入 Excel 工作表中&#xff0c;如果您尝试将数字复制并粘贴到电子表格中&#xff0c;则列/行将无法正确复制和对齐。因此&a…

Python爬虫分布式架构问题汇总

在使用Python爬虫分布式架构中可能出现以下的问题&#xff0c;我们针对这些问题&#xff0c;列出相应解决方案&#xff1a; 1、任务重复执行 在分布式环境下&#xff0c;多个爬虫节点同时从消息队列中获取任务&#xff0c;可能导致任务重复执行的问题。 解决方案&#xff1a;…

从0到1学会Git(第一部分):Git的下载和初始化配置

1.Git是什么: 首先我们看一下百度百科的介绍:Git&#xff08;读音为/gɪt/&#xff09;是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 …

【面试】线上 CPU 100% 问题排查

回答套路一般为&#xff1a;线上服务器没有排查过&#xff0c;线上服务器只有运维才有操作权限。在平时开发的时候&#xff0c;在测试服务器上排查过。 一、复现代码 public class Test {public static void main( String[] args ){int a 0;while (a < 100) {a * 10;}} }…