2024 抖音欢笑中国年之渲染技术实践与探索

SAR Creator是一款基于 Typescript 的高性能、轻量化的互动解决方案,目前支持了浏览器和跨端框架平台,服务于字节内部的各种互动业务。

前言

抖音在2024年春节期间推出了欢笑中国年系列活动,为用户带来了全新的体验和乐趣。而SAR Creator则为该项目研发工作提供了重要的技术支持。SAR Creator是一款基于 Typescript 的高性能、轻量化的互动解决方案,目前支持了浏览器和跨端框架平台,服务于字节内部的各种互动业务。

这些绚烂多彩的互动场景当然也离不开实时渲染技术的支持,因此本文将专门介绍春节活动招财神龙神龙探宝中SAR Creator渲染相关的业务实践经验以及技术探索和尝试。

春节—招财神龙

图片

春节—神龙探宝

图片

比如抖音欢笑中国年系列文章《招财神龙互动技术揭秘》中就有提到,项目中“家”场景就是由2D元素以及不同材质支持的3D元素共同组成的。出于性能和美术效果的考虑,各3D模型使用的材质会有所不同,比如无光照Unlit材质、基于物理的PBR材质。对于阴影这种移动端性能消耗比较大的特性,不同物体的接收也会做特殊处理。这些材质的选择以及光照阴影的支持都是依托于SAR Creator材质库能力的支持。如下图所示即为SAR Creator Unlit材质(左图)和PBR材质(右图)的示例。

图片


无光照Unlit材质示例

图片

基于物理的PBR材质示例

此外,SAR Creator支持使用ShaderGraph插件制作自定义材质,帮助用户制作更多可定制化的特效。神龙探宝项目中实现了多种基于ShaderGraph的特殊效果,包括:入场溶解特效、分区解冻特效、拖尾特效等。下图展示了利用ShaderGraph定制卡通风格水体的效果。

图片

ShaderGraph卡通水体

除了上述春节活动中顺利落地的渲染效果外,我们还尝试做了很多效果提升的技术探索,比如后处理辉光效果、凹凸贴图等。希望可以更好的提升美术设计师的设计体验和最终的渲染效果。

图片

bloom辉光

图片

招财神龙渲染实践

“招财神龙”活动是2024年春节游戏化玩法之一,活动整体采用3D场景(龙在家场景)+ 2D场景(龙寻宝场景)结合的方式。在招财神龙的活动中,设计同学基于SAR Creator编辑器,进行场景搭建和效果还原工作;研发同学基于SAR Creator渲染能力,快速进行技术方案选型和实施。

2D&3D混合渲染

对于活动中的“龙”和“小女孩”元素,我们采用3D模型,提供更为逼真的体验感。而针对场景中的房子、炮仗等,我们使用2D贴片来呈现。通过调整相机的远近平面、fov等参数,展示出小女孩在炮仗前、龙在房子前、龙在炮仗后的视觉假象。

图片

图片

图片

材质库

SAR Creator提供了Unlit、PBR、Uber和NPR等多种材质的选择。

图片

例如,这次“招财神龙”中的白天/黑夜场景场景,小女孩和龙的皮肤颜色等需要有不同的表现,就是基于材质的“颜色贴图”能力来实现的。

图片

针对PBR材质来说,设计同学还基于SAR Creator提供的金属度、粗糙度来进行小女孩身体细节的调整。

图片

为了追求更佳的视觉体验,在小女孩的模型上,设计同学为不同的部位(身体、头发和衣服)赋予了不同的PBR材质的实例,再通过调整不同PBR材质的金属度、粗糙度属性,微调受光条件下,不同部位的表现细节。

这次活动,我们不仅使用了PBR材质,综合性能和实用性的角度,还使用了Sar Creator提供的Unlit材质。比如“龙”模型中的身体、胡须、眼睛等模块。Unlit材质是一种简单的、不受光源影响的材质,在技术选型时,为了平衡性能和效果,通常是活动开发的首选。

图片

光照阴影

除了上述所说的这些材质,为了实现场景中元素的真实性,设计同学借助SAR Creator提供的渲染能力,利用灯光、阴影来优化渲染场景。

SAR Creator提供了平行光的方向、颜色、强度等属性,使得设计同学可以调整出不同效果。

图片

为了更好的光照效果,我们这次使用了两个平行光,利用PBR受光的特性,可以实现更贴近真实世界的效果。

图片

只使用了环境光

图片

使用了一个平行光(小女孩鞋子、脸、手部等部分都收到了光照影响)

图片

使用了两个平行光微调(小女孩背部收到了光照,更贴近真实效果)

只有光照,没有阴影的话,同样也不符合物理世界的客观规律。SAR Creator通过在光源上设置“投射阴影”,在需要显示阴影的物体上,设置“接受阴影”,即可快速的实现阴影的效果。

图片

图片

图片

无阴影

图片

有阴影

利用SAR Creator提供的ShadowMaterial这种自实现的材质,我们还能通过调整颜色、透明度等常用属性,快速调整出设计师想要的阴影效果。

图片

神龙探宝渲染实践

神龙探宝是2024年春节系列活动中的一个以2D场景为主的互动玩法,其尝试并成功落地了多种特效渲染技术。本章节主要有三个特效渲染技术点可分享给大家。分别是:入场溶解特效、分区解冻特效、拖尾特效。

入场溶解

实现入场溶解特效核心是采样一张溶解图(可低分辨率128x128),通过动画step.edge即可。该方案主要通过ShaderGraph可视化界面开发Shader帮助实现美术预期效果,具体节点实现实现如下图所示:

图片

图片

如想了解更多技术细节,各位同学可用WebGPU版ShaderGraph在线体验(https://deepkolos.github.io/shader-graph-wgsl/?graph=demoSummberDissolve)(PC Chrome113+),也欢迎内部同学直接体验SAR Creator。

地图分区解冻

地图分区解冻需要实现的效果是支持分区块单独控制其处于解冻/未解冻状态。表现效果会随着解冻状态的变化而变化。

如果按照传统前端实现估计需要7个区域小图+1张底图=8张图片去实现, 即需要消耗8个绘制指令(DrawCall)。虽然传统方式可以通过动态合批的方式优化绘制指令(DrawCall)为1个,但合批操作本身也有耗时,且每次资源替换+小图位置调整,会带来额外工作量。而利用ShaderGraph插件定义支持图片存储特定贴图IDMap的Shader可解决这些问题,只需一张JPG 一张PNG 即可。首先我们需要将区域信息存储在A通道,比如区域A = 0.9 区域B = 0.8 以此类推。

未点亮

图片

已点亮

图片

解冻过程  

图片

然后在Shader中根据点亮前后纹理采样颜色值,混合计算出最终像素颜色值,以实现每个区域的解冻/未解冻状态变化。具体计算逻辑如下所示:

图片

图片

如想了解更多技术细节,该例子也可用WebGPU版ShaderGraph在线体验(https://deepkolos.github.io/shader-graph-wgsl/?graph=demoCustomMap)(PC Chrome113+)。

然而在上述效果的实现基础上,设计同学提出了更高的渲染需求,要求冰冻区域沿边缘浸染已解冻区域,来避免硬边缘。由于项目时间节奏比较紧张,综合考虑时间成本和收益后,边缘浸染需求最终没有推进支持。通过简单的调研,该效果可能的一个解法是:增加7个2D光照,通过光照计算范围来实现冰冻浸染效果,但问题在于没法实现沿边缘浸染。各位如果有什么好的思路也可以分享下,也许可以通过ShaderGraph插件快速支持这种定制需求。

粒子拖尾+几何拖尾

设计效果

图片

落地实现

图片

我们可以分析表格第三列中效果参考的构成,得出技术要点为: 几何拖尾+粒子拖尾+头部星光。头部星光较为简单,只需要一个Sprite/Plane+Tween增加下旋转动画即可。下面将主要介绍粒子拖尾和几何拖尾的技术实现。

图片

粒子拖尾

目前SAR Creator现有非常强大的粒子系统,可快速实现粒子效果,提效非常明显。

图片

但完整的粒子系统在功能强大的同时包体积也相对较大,为了兼顾粒子效果的同时也避免包体积问题,需实现简易版拖尾粒子。通过ShaderGraph结合EmitOverDisatance,抽离出的粒子拖尾特效资源打包后只有7.66KB。下图左为: 简易版粒子拖尾+EmitOverDistance+ShaderGraph联动,下图中/右为: 粒子系统示例和ShaderGraph定制材质的参数设置。

图片

图片

图片

目前粒子拖尾已集成进SAR Creator以及ShaderGraph插件,方便用户更加直观的调试材质特效。

图片

GPU Instancing是一个DrawCall绘制大量相同几何,姿态不同的技术。

所以简易版拖尾粒子本质上是一个GPU Instancing几何更新器

图片

图片

图片

图片

大量粒子的位移动画通过Shader使用GPU并行算力完成,节约宝贵的CPU算力。

图片

感兴趣代码实现,可查看👉开源实现(https://github.com/deepkolos/three-js-trail) or 线上Demo(https://deepkolos.github.io/three-js-trail/),或者SAR Creator中直接体验。

几何拖尾

几何拖尾本质上也是一个几何更新器,不过并非更新Instanced数据,而是几何本身数据Position+Index,使用下图可直观了解几何拖尾的关键逻辑。

图片

图片

图片

如上图左所示为几何拖尾的几何部分实现,参考效果的游动效果则需要在Shader中增加UV动画+拖尾沿Brush重心缩小,所以几何拖尾同样支持ShaderGraph扩展材质。

图片

图片

如感兴趣代码实现,可查看👉开源实现(https://github.com/deepkolos/three-js-trail) or 线上Demo(https://deepkolos.github.io/three-js-trail/),或者SAR Creator中直接体验。

ShaderGraph探索

ShaderGraph自定义Shader相较于研发编写定制材质而言主要优势在于更高的自由度。SAR Creator通过ShaderGraph插件可以边看中间结果,边理解特效的实现方式。同时帮助用户更好的调试渲染结果高度不可控的特效。此外,ShaderGraph插件实现思路和节点能力实现方式与Unity ShaderGraph基本一致,用户可以以极低成本的方式参考Unity已有特效并搬运到SAR Creator上。

比如抖音故障效果:

图片

再或者卡通水体WebGPU版ShaderGraph在线预览(https://deepkolos.github.io/shader-graph-wgsl/?graph=demoCartoonWater):

图片

渲染技术探索

除了在项目实际落地的渲染技术外,我们也在春节项目中尝试探索渲染技术可能应用场景。下面我们将通过后处理篇和材质篇来进一步介绍其中的技术点。

后处理篇

比如在“招财神龙”的龙须上,我们希望能增加辉光bloom的效果。bloom是屏幕后处理效果中较为常用的一种,表现为高光物体带有泛光效果,通常会搭配HDR来得到更好的效果。

图片

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

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

相关文章

01 MySQL--概念、三范式、表、字段设计方法与规范

1. 定义 1.1 SQL的分类 DQL - 数据查询语言(Data Query Language, DQL)负责进行数据查询而不会对数据本身进行修改的语句。 SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY。DDL - 数据定义语言 (Data Definition Language, DDL) 负责数据结构定义与…

【RV1106的ISP使用记录之基础知识】硬件连接关系与设备树的构建

RV1106具备2个mipi csi2 dphy硬件,1个VICAP硬件和1个ISP硬件。其中: 1、mipi csi2 dphy 用于对数据流的解析,支持MIPC,LVDS,DVP三种接口; 2、VICAP用于数据流的捕获; 3、ISP用于对图像数据进行处理; 这三个…

文件夹变白之谜:原因、恢复与防范之道

在日常电脑使用中,我们有时会遇到一些文件夹突然变成白色文件的情况。这些文件夹看起来就像失去了原有的属性,无法被正常打开或访问。这种情况往往让人感到困惑和焦虑,因为文件夹中可能存储着重要的数据和信息。那么,文件夹为何会…

匿名对象 与 new delet初识

一.匿名对象 1.定义: 没有名称的临时创建的对象,通常用于临时操作或作为函数的实参或返回值。 2.声明周期与作用域: 仅仅在定义所在代码行中,执行完就销毁。 3.使用格式 类名(构造参数) 4.使用场景 临时调用成员函数 mid…

MapReduce 机理

1.hadoop 平台进程 Namenode进程: 管理者文件系统的Namespace。它维护着文件系统树(filesystem tree)以及文件树中所有的文件和文件夹的元数据(metadata)。管理这些信息的文件有两个,分别是Namespace 镜像文件(Namespace image)和操作日志文件(edit log)&#xff…

书生浦语大模型实战训练营--第二期第六节--Lagent AgentLego 智能体应用搭建--homework

一、基础作业 1.完成 Lagent Web Demo 使用,并在作业中上传截图 根据以下命令启动成功! 2.完成 AgentLego 直接使用部分,并在作业中上传截图 这是原图 使用AgentLego进行自动目标检测后,很明显图中的物体已经被识别出来了 二、…

【python】如何通过python来发邮件,各种发邮件方式详细解析

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

MQ技术选型

消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题。它可以实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。 RabbitMQ 特点: RabbitMQ 相当轻量级的消息队列&#xff…

英伟达一系列高质量公开课来了!

B站:啥都会一点的研究生公众号:啥都会一点的研究生 英伟达免费提供许多自学课程,评价肥肠高,有专为初学者设计的也有更进阶的内容(提供证书),若实验室/单位基于NVIDIA Jetson进行开发&#xff…

Junit 更多-ApiHug准备-测试篇-010

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace 如果大家…

VisualGLM-6B的部署步骤

对于如下命令,你将完全删除环境和环境中的所有软件包 conda remove -n env_name --all 一、VisualGLM-6B环境安装 1、硬件配置 操作系统:Ubuntu_64(ubuntu22.04.3) GPU:4050 显存:16G 2、配置环境 建…

2024华中杯C题光纤传感器平面曲线重建原创论文分享

大家好,从昨天肝到现在,终于完成了2024华中杯数学建模C题的完整论文啦。 给大家看一下目录吧: 目录 摘 要: 10 一、问题重述 12 二.问题分析 13 2.1问题一 13 2.2问题二 14 2.3问题三 14 三、模型假设 15 四、…

HWOD:字符串字符匹配

一、知识点 c语言中,判断一个字符串中是否含有某字符是很容易的,不需要知道字符串的长度 i0; while(c ! str[i] && str[i] ! \0){ i; } if(str[i] \0){ return false; } return true; 二、题目 1、描述 判断短字符串S中的所有字符…

Redis: 在项目中的应用

文章目录 一、Redis的共享session应用二、分布式缓存1、缓存2、缓存一致性问题解决方案(缓存更新策略)(1)作用(2)三种策略(3)主动更新策略(数据库、缓存不一致解决方案&a…

汽车研发项目进度管理的挑战与优化策略

随着汽车行业的快速发展和市场竞争的加剧,新车型研发项目的进度管理成为车企赢得市场的关键。然而,由于汽车研发项目通常具有投资大、周期长、技术难度高、参与方众多等特点,项目进度管理面临着诸多挑战。为了提升车型研发效率、缩短研发周期…

设计模式之创建型模式详解

设计模式 创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节&#xff0…

软考-系统集成项目管理中级--项目质量管理(输入输出很重要!!!本章占分较高,着重复习)

本章历年考题分值统计 本章重点常考知识点汇总清单 5、成本效益分析法:对每个质量活动进行成本效益分析,就是要比较其可能的成本与预期的效益。达到质量要求的主要效益包括减少返工、提高生产率、降低成本、提升干系人满意度及提升赢利能力。(掌握)17下64考题 本章…

贪吃蛇项目实战解析

项目实战 游戏背景​ 贪吃蛇是久负盛名的游戏,它也和俄罗斯方块,扫雷等游戏位列经典游戏的行列。 在编程语言的教学中,我们以贪吃蛇为例,从设计到代码实现来提升学生的编程能力和逻辑能力。 目录: 游戏背景 游戏效…

Java如何用EasyExcel插件对Excel进行数据导入和数据导出

文章目录 一、EasyExcel的示例导入依赖创建实体类数据导入和导出 二、EasyExcel的作用三、EasyExcel的注解 EasyExcel是一个阿里巴巴开源的excel处理框架,它以使用简单、节省内存著称。在解析Excel时,EasyExcel没有将文件数据一次性全部加载到内存中&…

【Flutter】自动生成图片资源索引插件二:FlutterAssetsGenerator

介绍 FlutterAssetsGenerator 插件 :没乱码,生成的图片索引命名是小驼峰 目录 介绍一、安装二、使用 一、安装 1.安装FlutterAssetsGenerator 插件 生成的资源索引类可以修改名字,我这里改成R 2. 根目录下创建assets/images 3. 点击image…