Unite 2017 Shanghai

This article contains AI-generated translation.

 Author
 Published

## Introduction

《崩坏3》上架以来，我们看到了卡通渲染技术在游戏领域的高品质画面表现力，米哈游对这种技术恰到好处的运用也让《崩坏3》受到了广大玩家的喜爱，以及业内诸多从业人士的认可。
Since its release, *Honkai Impact 3rd* has showcased the high-quality visual performance of cartoon rendering technology in the gaming industry. miHoYo's adept use of this technique has garnered widespread love from players and recognition from numerous professionals in the industry.

事实上，米哈游在制作这款游戏的过程中，也经历了反复的尝试和探索。同时，为了让卡通渲染技术有更好的表现力，他们也利用了Unity 5引擎，探索了次世代卡通渲染技术用法。
In the process of creating this game, miHoYo went through numerous trials and explorations. To enhance the expressive power of cartoon rendering technology, they utilized the Unity 5 engine and delved into the application of next-generation cartoon rendering techniques.

2016年11月，米哈游在B站投稿了“琪亚娜·极乐净土”的视频，短时间内成为B站最热门的视频之一，目前已经积累了近230w次的播放量。
In November 2016, miHoYo uploaded the video "Kiana: Blissful Land" on Bilibili, quickly becoming one of the most popular videos on the platform with nearly 2.3 million views to date.

在这则视频当中，米哈游尝试了次世代画面品质的角色渲染；全局光照、体积光、面积光源等光效处理；特殊材质的实现以及高级反射材质的效果处理；以及卡通渲染后处理等相关技术。
In this video, miHoYo experimented with next-gen character rendering, global illumination, volumetric lighting, area light sources, and other lighting effects. They also implemented special materials and advanced reflection effects, as well as post-processing for cartoon rendering.

在日前刚刚结束的Unite 2017开发者大会当中，米哈游技术总监贺甲对这些技术进行了逐一解读，并通过自身的实际尝试为例，分享了他们的开发技术经验。
During the recently concluded Unite 2017 developer conference, miHoYo's Technical Director, He Jia, provided in-depth insights into these technologies and shared their development experiences through practical examples.

以下内容经游戏葡萄整理发布。
The following content has been compiled and released by Youxi Putao.

## Lecture

贺甲：大家好，首先自我介绍一下，我叫贺甲，在米哈游担任技术总监和美术指导工作，目前主要关注的方向是非写实渲染以及可交互物理方面的研究。很高兴在这里给大家带来一场有关于次世代卡通渲染的演讲。
He Jia: Hello, everyone. First of all, let me introduce myself. I'm He Jia, serving as the Technical Director and Art Director at miHoYo. Currently, my main focus lies in non-photorealistic rendering and interactive physics research. I am delighted to present a speech today about next-generation cartoon rendering.

我们在考虑如何运用次世代渲染技术，对当前卡通渲染技术时代进行升级。如何将新的技术和卡通渲染有机结合，也是一个比较大的挑战，我们想还原不仅仅是之前传统上色的质感，还想进一步把插画级细致方面的表现，以60帧每秒帧率表现出来，这种工作量仅靠手绘无法完成，我们选择了极乐净土作为MV来展现新的卡通渲染效果。整个制作过程大概有3到4个月，发布之后只用了2天直接登上B站榜的第一，目前累计有230万点击量。
As we consider how to apply next-gen rendering technology, we aim to upgrade the current era of cartoon rendering. It's quite a significant challenge to organically integrate new technology with cartoon rendering. We want to go beyond traditional flat coloring and further depict the intricate details of illustrations at a frame rate of 60 frames per second. Such a workload cannot be achieved solely through manual drawing. That's why we chose "Blissful Land" as the MV to showcase the new cartoon rendering effect. The entire production process took about 3 to 4 months, and after its release, it directly topped the Bilibili charts within 2 days, accumulating 2.3 million views to date.

下面我们来介绍一下这次演讲的主要内容，首先是次世代卡通渲染角色的主要实现方法以及特殊材质的处理，然后是场景方面的渲染，包括全局光照、体积光、面积光源的实现，之后我们介绍一下卡通渲染所涉及的后处理效果。
Now, let's delve into the main content of this presentation. First, we will discuss the main implementation methods for next-gen cartoon rendering of characters and the handling of special materials. Then, we'll explore scene rendering, including global illumination, volumetric lighting, and area light source implementation. Afterward, we will introduce the post-processing effects involved in cartoon rendering.

首先我们来看一下角色卡通渲染的主要特性，第一是我们自己实现的卡通多材质多通道Ramp上色技术，以及一些特殊材质的实现，比如各向异性的头发，Glitter和眼睛折射的效果。然后是光照的构成，我们选择了主要光源和IBL环境光，之后还有高精度的勾线，以及高精度的角色软阴影。
Let's begin with the key features of character cartoon rendering. First, we developed our own cartoon multi-material multi-channel Ramp coloring technique and implemented various special materials, such as anisotropic hair, glitter, and eye refraction effects. Next is the composition of lighting, where we chose primary light sources and IBL environment lighting, followed by high-precision line art and character soft shadows.

下面几张图展示了上述效果，随着视角的变化，头发高光以及眼睛的折射效果有不同变化。这段是固定相机视角旋转光源之后的动态表现，大家可以看到光影和高光。
The following images demonstrate the mentioned effects. With changes in the perspective, the highlights on the hair and eye refraction effects vary. This dynamic representation shows how the lighting and highlights change with a fixed camera angle rotation.

首先我们来介绍一下多通道控制上色方法，我们使用了多通道2D Ramp，使用多通道控制上色层，对于卡通风格画面来说，如果上色只是纯粹的明暗变化，阴影处就会显得比较缺乏表现度，通过调整垂直采样坐标，我们可以实现动态软硬风格的切换。从另一个角度来说，这种方法还间接表现了皮肤的次表面散射效果。
First, let's introduce the multi-channel control coloring method. We utilized the multi-channel 2D Ramp, using multiple channels to control coloring layers. For a cartoon-style image, if coloring is solely based on brightness and darkness changes, the shading may lack expressive power. By adjusting the vertical sampling coordinates, we can achieve a dynamic switch between soft and hard styles. From another perspective, this method indirectly represents the subsurface scattering effect of the skin.

这四幅图展示了多通道上色的叠加效果，大家可以看到通过一层层上色叠加，皮肤细节的阴影变化也变得更加丰富。
These four images demonstrate the overlay effect of multi-channel coloring. Through layer-by-layer coloring overlay, the shading changes in skin details become more enriched.

这上下幅图展示了采样位置不同的渲染效果。由于我们使用了2D的纹理，他们之前的变化也可以动态调整，这就方便了我们在想要的结果上做一些精细的调整。
The upper and lower images show the rendering effects with different sampling positions. Since we used 2D textures, their changes can also be dynamically adjusted, which facilitates fine-tuning for achieving the desired results.

卡通风格对于面部表现一般不会有太多阴影层次的变化，如果我们直接套用这个方法在面部的话，效果就会像右图看起来不自然，为了改善这种情况，我们使用了顶点色通道mask控制明暗强度，通过压低阴影表现达到想要的卡通效果。
Cartoon-style facial expressions generally do not exhibit significant variations in shadow layers. If we directly apply this method to the face, the result may appear unnatural, as seen in the right image. To improve this situation, we used the vertex color channel mask to control the brightness intensity, achieving the desired cartoon effect by reducing shadow representation.

下面我介绍一下卡通渲染的常见勾线方法，第一种是Backface方法，是比较高效的方法，而且通过顶点色可以实现各种风格化的控制。比如通常头发丝对勾线逐渐变细，美术就可再在mask来刷线表达想要效果，暗处的色彩饱和度也会提高，这点我们在实现中也有所体现。
Now, let me introduce common line art methods for cartoon rendering. The first method is the Backface method, which is relatively efficient and can achieve various stylized controls through vertex color. For example, as hair strands typically become thinner towards the tips, artists can use a mask to brush lines to express the desired effect. Additionally, the saturation of colors in dark areas will increase, which we also implemented in our work.

第二种方法是基于图像检测的勾线方法，通过图像检测提取出不良象素标出边界，这样可以标出物体表面的棱角。基于图像处理方法，还可以表现出较多的有勾线细节，随着相机的拉近拉远，勾线就不太能体现具体的细节。 基于图像检测的方法，比较适合用于场景的勾线。这种方法还有一个好处，不会随着细节的复杂度增加，而降低运行效率。
The second method is image-based edge detection for line art. By extracting problematic pixels and marking boundaries through image detection, we can outline the object's surface edges. This method allows for more detailed line art with image processing, but as the camera zooms in and out, specific details may not be fully evident. Image-based edge detection is more suitable for scene line art. Another advantage of this method is that it does not reduce operational efficiency as the complexity of details increases.

第三种方法是基于笔刷的勾线方法。首先是轮廓线的提取，然后是连接轮廓线，根据模型的关系，将相邻的轮廓边连接成尽可能长的轮廓线，但有可能会出现轮廓线交叉的问题，这点也是需要处理的。然后是轮廓线的分段，在步骤二的基础上，将轮廓线在曲律上分开。然后是笔触，这种方法可以达到更为风格化的表现，笔触会更加明显。
The third method is the brush-based line art method. First is the extraction of contour lines, followed by connecting these lines. Based on the model's relationship, adjacent contour edges are connected to form the longest possible contour lines. However, it may lead to intersecting contour lines, which needs to be addressed. Next is the segmentation of contour lines, where we separate them based on curvature from step two. Then comes the brushstroke, which allows for a more stylized representation, making the brushstrokes more prominent.

接下来我们讲一下高品质角色阴影的实现，视频中有不少特写镜头，我们想要局部特写也能表现非常细腻的高品质角色软阴影效果。所以我们就单独为角色渲染了一张分辨率为2k的Shadowmap。为了保证相机拉很近的时候仍有较高的阴影品质，需要视角相关的Shadowmap。第二是使用PCSS提高阴影效果，第三使用半透明阴影的处理。大家可以看到，裙子上的阴影是有半透明的效果。
Now, let's talk about the implementation of high-quality character shadows. The video contains many close-up shots, and we wanted even partial close-ups to exhibit highly detailed high-quality soft shadows on the characters. To achieve this, we rendered a separate 2k resolution Shadowmap solely for characters. To maintain high shadow quality even at close camera angles, angle-dependent Shadowmaps were used. Second, PCSS was employed to improve the shadow effect, and third, semi-transparent shadow handling. As you can see, there are semi-transparent shadows on the skirt.

我们再来看一下角色边缘光的处理，由于场景中大部分为面积光源，我们想要做出根据光照环境变化的边缘光一我们就使用IBL环境贴图作为主要输入，使用菲涅尔强度Mask控制光照在边缘出现，最终用贴图AO Mask模拟自遮挡效果。可以看到左边这个对比图。
Next, let's discuss the handling of character edge highlights. As most light sources in the scene are area lights, we aimed to create edge highlights that vary with changes in the lighting environment. For this, we used IBL environment maps as the primary input and controlled the appearance of highlights on edges using the Fresnel intensity mask. Finally, AO maps were used to simulate self-occlusion effects. The comparison image on the left illustrates this.

对于眼睛的处理也使用了基于物理光的折射效果，我们使用了真实的折射算法，眼球本身还是按照球面来做，根据视线角度算出折线系数。这两个对比图显示了有无折射的效果，基于物理的方法，在VR模式下会看起来更有质感，看起来比较类似于像玻璃珠的感觉。
For the eyes, we applied physically-based refraction effects using a real refraction algorithm. The eye itself is represented as a spherical shape, and the refractive index is calculated based on the viewing angle. The two comparison images show the effects with and without refraction. The physically-based method gives a more tangible impression in VR mode, resembling the appearance of glass beads.

除了眼睛折射效果之外，我们还加入了光线折射后的焦散效果，使得眼睛的材质得到进一步增强。考虑到卡通渲染的特殊情况，我们希望的效果是将散出现在入射光另一侧。实现方法通过入射光和眼球前的夹角，算出入射光的强度，辅助菲涅尔公式，最后得到最终效果。通过对比图我们可以看到，没有焦散的眼睛就显得缺乏质感。
In addition to the eye refraction effect, we also added the dispersion effect caused by refracted light, further enhancing the eye's material. Considering the special case of cartoon rendering, we aimed for the effect of dispersion occurring on the opposite side of the incident light. The implementation involves calculating the intensity of incident light and applying the Fresnel formula, resulting in the final effect. As seen in the comparison image, the eyes without dispersion appear to lack texture and depth.

我们看一下头发的渲染，头发渲染是卡通渲染表现的重点之一，这也是和照片写实风格主要区别点之一。常见头发阴影层次一般实现都是贴图上，这样在动态光影变化就不会发生变化。我们的目标之一是将阴影和动态光照随着光源的变化而变化，没有任何内容是直接在贴图上画死的，都是由计算而得到，我们使用了各项异性高光做卡通渲染的头发。通过不同的调整颜色，可以想得到立即的想要的图案。
Let's take a look at hair rendering. Hair rendering is one of the key aspects in cartoon rendering, and it's also one of the main differences from photorealistic styles. In common hair shading, shadow levels are usually implemented as textures, which means they don't change with dynamic lighting variations. One of our goals is to make shadows and dynamic lighting change along with the light source variations. Nothing is directly painted on textures; everything is calculated. We used anisotropic highlights for hair in cartoon rendering. By adjusting colors, we can achieve the desired patterns instantly.

相比普通的光照我们使用tangent计算光照，可以通过高频和低频双层高光叠加，达到细致的效果。
Compared to regular lighting, we use tangent calculations for lighting, allowing us to achieve fine effects through the combination of high-frequency and low-frequency dual-layer highlights.

这张图展示了两层异性高光的效果，左上没有高光效果，左上一层只有低频高光效果，左下一层只有高频光照的效果，右下是最终的渲染结果。我们对两层高光设有不同亮度和摄像，这样使得高光层次更为丰富。
This image illustrates the effects of two layers of anisotropic highlights. The top-left shows no highlight effect, the top-right has only low-frequency highlights, the bottom-left has only high-frequency lighting effects, and the bottom-right is the final rendered result. We set different brightness and cameras for the two highlight layers to enrich the highlight levels.

除此之外，我们还使用Jitter map抖动贴图，增强质感，来达到模拟发丝细节的效果，我们还可以做到调节发丝的高光粗细。
In addition to that, we use a Jitter map to add texture and enhance the realism, simulating hair strand details. We can also adjust the thickness of the highlights for the hair strands.

除了头发使用特殊光照材质处理之外，我们的角色材质中，还有一些类似于玻璃水晶等半透明材质，为了使更真实细腻表现这些材质效果，如果我们直接使用半透明混合就不能满足需求，这样的话就需要我们来实现有真实效果的折射。这两个实现，都使用Unity的CommandBuffer实现，RGB通道可以设置为不同折射系数，分别采样三次来模拟色散效果，如果用模糊效果，就生成四张尺寸依次减半的模糊贴图，根据相机距离和材质固有的模糊度，选择对应的来模糊效果。
Apart from the special lighting material used for hair, we also have some semi-transparent materials in our character materials, like glass and crystal. To achieve a more realistic and delicate representation of these material effects, direct mixing with transparency would not be sufficient. Instead, we need to implement real refraction effects. Both implementations use Unity's CommandBuffer. The RGB channels can be set with different refraction indices, sampled three times to simulate dispersion. To achieve the blurry effect, we generate four blurred maps with halving sizes. Depending on the camera distance and material's inherent blurriness, we select the corresponding blurred effect.

我们还可以看到，还有类似于闪光片的闪烁效果，这个是我们作为第二层材质来处理。首先用specular map表示区域，然后用normal map增加反射不规则性，反射的光源主要是主光源和环境IBL贴图，此外我们使用光图查找表做五彩的闪烁效果。主要方法也是根据入射角度决定色彩偏移来查找光谱图，使用不同光谱图也会有不同的色彩表现。
We can also observe the shimmering effect, similar to glitters, which we handle as a second-layer material. First, we use a specular map to define the areas, then we add irregularity with a normal map to enhance reflection. The main light sources for reflection are the main light source and the environment IBL map. Additionally, we use a light texture lookup table for a colorful shimmering effect. The main approach is to determine color shifts based on the incident angle to find the spectral map. Different spectral maps also result in different color presentations.

角色衣服上的动态条带，随着音乐的节奏变化而变化，我们把跳动的音符调在分为两组，分别对应音频文件中的中频和低频信号，然后对音频做频谱分析，每帧得到的中频和低频强度根据强度去伸缩对应层的音符UV，得到动态的效果。
The dynamic stripes on the character's clothing change with the rhythm of the music. We divide the pulsating notes into two groups, corresponding to the mid-frequency and low-frequency signals in the audio file. Then, we perform a spectrum analysis on the audio and scale the UVs of the corresponding layers based on the intensity of the mid-frequency and low-frequency signals per frame to achieve the dynamic effect.

接下来我们介绍一下场景方面的渲染技术规格，整个场景在HDR线性空间下渲染，我们使用修改过的PBR，开启了烘焙enlighten GI。根据需求，实现了平面反射材质，此外还应用了各种后处理效果，比如Bloom、屏幕空间反射等。
Next, let's discuss the technical specifications for scene rendering. The entire scene is rendered in HDR linear space, using a modified PBR (Physically Based Rendering) and enabled baked enlighten GI (Global Illumination). According to the requirements, we implemented the plane reflection material and applied various post-processing effects such as Bloom and Screen Space Reflection.

这是我们几张舞台的截图特写，大家可以看到，综合应用了之前提到的技术之后，整体感觉可以比较接近离线渲染的效果。舞台中有大量动态视频作为光照来源，并且把强度系数设大于1，作为面积光源。如果想要光照环境实时更新，就需要在脚本里面每帧调用Cache。场景中也设置一些动态更新的Lightprobes，作为角色的光照来源。
These are close-up screenshots of several stages. As you can see, after applying a combination of the previously mentioned techniques, the overall appearance comes close to offline rendering results. The stage has a large number of dynamic videos as light sources, and the intensity coefficient is set greater than 1 to act as area light sources. To ensure real-time updates of the lighting environment, we need to call Cache in the script every frame. Dynamic Lightprobes are also set in the scene as light sources for the characters.

我们再来看一下体积光的实现，各种灯光效果和激光效果，也是舞台渲染不可缺少的一部分。使用体积光可以比较好满足上述需求，我们使用常见类型作为体积光的光源定义来源。
Now, let's discuss the implementation of volumetric lighting, various light effects, and laser effects, which are indispensable for stage rendering. Using volumetric lighting helps meet the mentioned requirements effectively. We use common types as the source definitions for volumetric lighting.

我们先来看一下聚光灯的效果，由于想表现空气中散射导致光柱逐渐模糊扩散的效果，光锥体积用过程化参数来控制。为了进一步模拟烟雾效果，我们还使用了3DNoisemap技术，此外配合Cookie map可以定义投射型状，引入了高频的变化，需要对应增加采样数。我们使用两种抖动方式，可以在较低采样实现比较好的平滑体积效果。
Let's take a look at the spotlight effect first. To achieve the gradual blurring and diffusion of light columns caused by scattering in the air, we use procedural parameters to control the cone volume. To further simulate the smoke effect, we also use 3D Noisemap technology. Additionally, with the Cookie map, we can define the projected shape, introducing high-frequency variations, which require corresponding increases in the sampling. We use two jitter methods, which can achieve a smooth volumetric effect with relatively low sampling.

我们还用体积光来表现激光效果，只需使用一个定义激光扫描路径就可以实现，贴图越细，高频程度也越多。
We also use volumetric lighting to represent laser effects, which can be achieved with just defining the scanning path of the laser. The finer the texture map, the more high-frequency detail there is.

我们的舞台中还有一种常见的大范围镜头平面激光效果，直接使用体积光我们即使把采样数设的很高，也会有一些瑕疵。并且性能下降非常严重，考虑到实现效果和精度，我们又做了新类型prefab来完成这个功能。将单独的激光数作为可以绕中心轴旋转面向摄像机，这样就避免了本身朝向摄像机会变细的情况。此外，激光扫描平面的烟雾效果，也用一个2Dnoisemap可以实现。
In our stage, there is also a common large-area flat laser effect. Even with a high sampling setting using volumetric lighting, there will still be some imperfections and severe performance degradation. Considering the implementation effect and precision, we created a new type of prefab to accomplish this. Each individual laser number can rotate around the central axis to face the camera, avoiding the issue of thinning when facing the camera. Additionally, the smoke effect on the laser scanning plane can also be achieved with a 2D Noisemap.

接下来介绍一下灯光组的控制，现实中舞台都有软件和硬件控制灯光变化，我们根据需求写了一个脚本完成类似的功能。首先定义一组灯光，定义一个组的运动和曲线，设置每一个灯光独自变化参数组合不同效果。灯光色彩变化强度也是由曲线控制，我们设了几组灯光配置，这样在播放的时候直接调用需要的配置即可。
Next, let's discuss the control of the light group. In reality, stages have software and hardware control of lighting variations. We wrote a script to achieve a similar function based on the requirements. First, we define a group of lights and set their motion and curves. Each light has individual variation parameters to combine different effects. The intensity of light color changes is also controlled by curves. We set several light configurations, so we can directly call the required configuration during playback.

下面我们介绍一下地面反射实现，由于我们的舞台一部分是接近于镜面反射材质，如果直接使用SSR从精度就无法满足需求，这就需要我们需要用平面反射实现。平面反射实现大家都不陌生，这种方法也有它的局限性，只能高度统一平面才能使用。
Now, let's talk about the ground reflection implementation. As part of our stage resembles mirror reflection material, using Screen Space Reflection (SSR) alone cannot meet the precision requirement. Therefore, we need to use planar reflection to achieve the effect. Planar reflection is a familiar method, but it also has its limitations; it can only be used for highly unified planes.

为了解决这个问题，在不同落差上就重新渲染，这样效率比较低。我们做了一个平面反射管理器，定义一到多个反射平面，根据当前平面高度查找影射最接近的象素，我们定义了三个主要反射平面，其他的和平面高度接近的平面，查找主要平面的象素来产生。其他一些垂直于地表或者一些细碎的地方，我们则统一使用envmap加SSR。
To solve this problem, we re-render at different disparities, but this approach is relatively inefficient. Therefore, we developed a planar reflection manager, where one to multiple reflection planes are defined. Based on the current plane height, we find the closest mapped pixels. We defined three main reflection planes, and for other planes close in height to the main planes, we use the mapped pixels from the main planes to generate reflections. For other surfaces vertical to the ground or in some fragmented areas, we use a combination of environment mapping (envmap) and SSR (Screen Space Reflection).

我们想把材质表现的更为细腻，这样对非光滑的地面，我们模拟了基于高度和相机入射角度变化的模糊，基本思路反射纹理生成模糊，根据被反射物体远近选择不同模糊度进行模糊。离反射面越远的物体反射越大，影响模糊度主要因素修改物体到反射点的距离，离距离越大模糊度越高，并受到材质本身Roughness参数和菲涅尔效果的影响。上图是应用模糊后的材质表现，大家可以看到越接近水平角度，反射面越接近镜面。
To achieve a more delicate material representation, we simulated blur based on height and camera incident angles for non-smooth ground. The main idea is to generate blurred reflection textures, and depending on the distance of the reflected object to the reflection point, we choose different blur levels. Objects farther from the reflection surface have larger reflections and are influenced mainly by the distance from the object to the reflection point. The farther the distance, the higher the blur, also influenced by the material's Roughness parameter and the Fresnel effect. The image above shows the material representation after applying the blur, where you can see that the closer to a horizontal angle, the reflection surface appears more like a mirror.

接下来我们说一下过程化生成观众席，大家可以看到挥动的荧光棒完全是由过程化生成。为了表现大量随机群体动作，过程化生成是最高效的方式。这段视频也展示了有500个观众挥舞荧光棒的场面，效率有比较大的提升。实际测试，我们数量从100到400到800，对于帧率并没有明显的变化。
Next, let's talk about the procedural generation of the audience stands. As you can see, the waving glowsticks are entirely procedurally generated. Procedural generation is the most efficient way to represent a large number of randomized group actions. The video also shows a scene with 500 audience members waving glowsticks, and the efficiency is significantly improved. In actual testing, we went from 100 to 400 to 800 instances, and there was no significant change in frame rate.

下面我们主要介绍一下实现方式，我们写了一个crowdmanager过程化生成每个实例，观众席每个独立个体表现，由振幅、频率、颜色、位置偏移等随机参数来控制。
Now, let's focus on the implementation method. We wrote a crowd manager for procedural generation, where each instance of the audience stands is independently controlled with random parameters such as amplitude, frequency, color, and position offset.

接下来我们介绍一下后处理相关的内容，Bloom我们使用高光提取，色相饱和度偏移，这样对卡通渲染来说，色彩看起来就会更加丰富，而且从一定程度上，避免了应用Bloom后，画面会降低饱和度的现象。
Moving on, let's discuss the post-processing-related content. For Bloom, we use highlight extraction and hue saturation offset. This way, for cartoon rendering, the colors appear richer, and to some extent, it avoids the issue of reduced saturation when applying Bloom.

Bokeh效果进化，模拟自然的镜头色差现象，使用不同的pencilmap可以模拟不同的镜片色散效果。左图为对比效果图，我们可以看到应用了之后，Bokeh边缘有蓝色色散现象，比右边更加真实和自然。
Bokeh effect has evolved to simulate the natural lens chromatic aberration phenomenon. Different pencil maps can simulate various lens dispersion effects. The left image shows a comparison effect, and we can see that after applying it, there is a blue dispersion effect on the Bokeh edges, making it more realistic and natural than the right image.

我们还加入了加于图像的Glare效果，做法和Bloom一样，通过多次叠加，应用色彩偏移调制以后，得到最终的效果。
We also added a Glare effect to the image, which is done similarly to Bloom, by multiple stacking and applying color offset modulation to achieve the final effect.

AO方面我们使用了饱和度增强的HBAO，和普通的HBAO相比，它不仅仅在AO地方变暗，而且把色彩饱和度、色相进行变化，这样对于卡通渲染来讲，画面不会变得在暗处比较脏，保持了原有风格，我们可以看到应用AO之后，右图比左图层次更加丰富。
For Ambient Occlusion (AO), we used an enhanced saturation HBAO (Horizon-Based Ambient Occlusion). Compared to regular HBAO, it not only darkens the AO areas but also changes the color saturation and hue. This ensures that the cartoon rendering does not become too dark and maintains the original style. After applying AO, as seen in the right image, the layers become more rich and diverse compared to the left image.

我们在制作的时候，我们使用插件来做分镜编辑，Slate更方便，而且可以自定义需求。我们加入了自定义控制的参数，还有3D渲染相关的汇聚和深度控制参数。除此之外还有灯光控制，大屏幕视频内容切换，这些都由Slate驱动。整体来说，Slate较为应用广泛，也有小漏洞。
During production, we used plugins for storyboard editing, and Slate was more convenient and allowed for customization. We added custom control parameters and 3D rendering-related convergence and depth control parameters. Additionally, we had lighting control and content switching for the large screen video, all driven by Slate. Overall, Slate is widely used but has some minor flaws.

最终渲染录制我们使用了AVCapture来做，我们采用异步模式。视频渲染规格为1080p60帧，内部渲染效果使用4k获得更好的效果。视频录制和开始以及结束也是通过Slate触发来控制。
For final rendering and recording, we used AVCapture in asynchronous mode. The video rendering specs were 1080p at 60 frames per second, and we used 4k for internal rendering to achieve better results. The video recording and start/end were also controlled through Slate triggering.

下面我们说一下3D渲染，3D渲染我们使用双向机左右格式分别渲染，有基于分镜的汇聚和深入调整。由于使用两个相机渲染，类似于反射、折射等效果都能做到比较好的支持，没有兼容性的问题。因为我们主要是追求最好的渲染品质，效率并不作为主要权衡点之一。
Now let's talk about 3D rendering. We use bidirectional stereo formats for rendering, and it involves convergence and depth adjustments based on the storyboard. Using two cameras for rendering allows us to effectively support effects like reflection and refraction without compatibility issues. Since our main focus is on achieving the best rendering quality, efficiency is not a primary concern.

下一步我们准备支持VR模式，需要做的是优化运行效率，目前来讲，在没有优化的情况下，GTX 980TI 1080p可以接近60帧，优化之后970可以达到120帧的效率，提升空间比较大。另外一方面，由于用到比较多自定义渲染，在VR会出现渲染兼容性问题，这点也是需要解决的。
Next, we are preparing to support VR mode. The goal is to optimize the runtime efficiency. Currently, without optimization, GTX 980TI at 1080p can achieve close to 60 frames per second. After optimization, GTX 970 can reach 120 frames per second, which presents significant improvement potential. However, we may encounter rendering compatibility issues with VR due to the extensive use of custom rendering, and this is something we need to address.

除了VR之外，我们也会继续优化和升级卡通渲染的效果以及运行效率，争取把次世代卡通渲染推向移动平台。随着移动平台性能的持续提升，估计2到3年之后性能接近于PS4。
Besides VR, we will continue to optimize and upgrade the cartoon rendering's effects and runtime efficiency, aiming to bring next-gen cartoon rendering to mobile platforms. With the continuous improvement in mobile platform performance, we estimate that in 2 to 3 years, the performance will be comparable to that of PS4.

我要做的分享就到这里结束，谢谢大家！
That concludes my presentation. Thank you, everyone!