
图形引擎实战
文章平均质量分 93
搜狐畅游引擎部
这个作者很懒,什么都没留下…
展开
-
图形引擎实战:Unity重构体积云密度场
程序化生成的体积云在效果上大同小异,关键在于如何让美术更高效地调整参数。相比于程序化驱动的体积云,以稀疏体积纹理(VDB)为基础的体积云或许是未来的发展方向,因为它能够更加精细地塑造体积云的形态。希望未来能有机会对此展开更深入的研究。欢迎加入我们!感兴趣的同学可以投递简历至:CYouEngine@cyou-inc.com。原创 2025-02-24 08:00:00 · 965 阅读 · 0 评论 -
图形引擎实战:Unity移动端带宽优化分享
在开始性能优化之前,我们首先需要一个可靠的工具来帮助发现问题。高通的骁龙性能分析器(Snapdragon Profiler,简称SDP)正是这样一款强大的工具。SDP能够采集骁龙系列芯片的实机性能数据,包括GPU的读写总量、纹理内存占用、L1/L2缓存未命中率、时钟频率等关键指标,并提供实时(Realtime)和快照(Snapshot)两种工作模式。在实际应用中,我们通常使用实时模式来监测游戏各项指标的变化情况,例如观察战斗场景下的带宽占用,以便定位异常场景。原创 2025-02-10 08:00:00 · 1030 阅读 · 0 评论 -
图形引擎实战:DDGI项目实战
为了解决这一问题,可以对剔除范围进行适当的外扩,即将相机的视锥体范围适当放大,如下图所示:红色区域表示相机的正常视锥范围,蓝色区域则是扩展后的视锥范围。然而,由于 Probe 的位置和光照计算是实时生成的,如果直接剔除视野范围外的 Probe,可能会导致相机视角移动时光照出现不连续的问题。对于特别小的物体可以忽略不处理。,针对地形系统需要解决两个问题,一个是光线如何与地形求交,地形系统没有办法生成SDF信息,第二个问题是多地形系统的支持,开放世界项目地形系统都是占据很大的面积,会将其拆分成很多个小地形。原创 2025-01-27 08:00:00 · 734 阅读 · 0 评论 -
图形引擎实战:游戏内简单IK的实现
本文简单介绍了一下项目中使用的IK脚本的实现思路,它很简洁,同时意味着它并不能适应所有情况,比如如何固定腿部不让计算IK时模型产生偏移,如何适用于双手武器的协调等等,这些问题就需要更多的算法来进行适配,如反IK、加限制条件、利用动画配合等等。因此本文仅供使用简单IK时作为参考。欢迎加入我们!感兴趣的同学可以投递简历至:CYouEngine@cyou-inc.com。原创 2025-01-13 08:00:00 · 676 阅读 · 0 评论 -
图形引擎实战:GPU优化分享
在实现过程中学习和借鉴了很多人的思路和实现,力求在能在牺牲可接受画面范围达到效率的最大化,所以其中存在很多简化和trick。欢迎加入我们!感兴趣的同学可以投递简历至:CYouEngine@cyou-inc.com。原创 2024-12-30 08:00:00 · 572 阅读 · 0 评论 -
图形引擎实战:DDGI动态漫反射全局光照
核心原理:对每个需要参与全局光照的物体生成一份SDF(Signed Distance Field,符号距离场)的离线数据。对于特别小的物体可以忽略不处理。运行时,每帧根据场景中物体的当前位置,将所有的SDF数据组合生成一个场景级的SDF数据,称为GDF(Global Distance Field)。然后将屏幕换分成8x8的Tile,每个Tile中生成一个Probe,利用这个GDF来进行光线求交,并生成探针的光照球谐数据。原创 2024-12-16 08:00:00 · 1188 阅读 · 0 评论 -
图形引擎实战:Live2D项目应用及落地
欢迎来到畅游引擎部的应用研发分享,今天给大家带来Live2D动态立绘制作的分析及项目落地分享~之前我们的知乎已经分享过Spine性能优化相关的文章,同学们可以通过本文了解到Live2D与Spine之间的对比以及适用场景。前几篇分享中有同学指出没有考虑到创新技术的落地问题,那么本文也会给大家带来落地过程中遇到的问题和解决办法!Live2D与Spine对比分析Live2D原画拆分规范Live2D在Unity中落地问题。原创 2024-12-02 08:00:00 · 2501 阅读 · 0 评论 -
图形引擎实战:植被风力系统以及四季变化
大家好,我是畅游引擎部 TA 组的 Fan Sir。今天,我很高兴向大家分享在游戏中如何实现植被风力系统与四季更替的动态效果。我们将先展示实际效果,随后深入讲解每个实现环节,包括模型制作的标准规范、植被风力动画的设计过程,以及四季变化的平滑过渡方式。希望本次分享能为大家带来新的启发和实用的技术思路!原创 2024-11-18 08:00:00 · 1257 阅读 · 0 评论 -
图形引擎实战-拼接玩法分享
塞尔达传说:王国之泪》 发售以来, 究极手和蓝图能力深受广大玩家的喜爱。究极手的能力包括抓取、 移动以及旋转物体,将物体拼接起来组成一个拼接体组合,同时也可以将物体从拼接体组合上拆下来。正是由于究极手这个拼接能力,玩家可以在王国之泪上按照的自己的想法拼接组合物体,这个能力极大的丰富了游戏玩法以及乐趣,具有较高的自由度。比如,可以拼接组合出一个高达模型。蓝图则可以帮助玩家快速记录和恢复这个高达模型。原创 2024-11-04 08:00:00 · 476 阅读 · 0 评论 -
图形引擎实战:Unity音频管理器
一般游戏项目都会接入诸如Wwise、Fmod或者Creware等音频管理插件,用于管理和播放音频以及实现各种音频效果。中间件的意义在于让音频同学不用关心具体的程序控制快速制作各种音频效果和控制逻辑,而程序同学只需要简单调用就能接入复杂的音频控制效果。但是由于这些音频引擎中间件都会收取较高的使用费用,对于小型项目和对音频效果没太高要求的项目来说,这种成本能省则省。所以这里介绍的音频管理工具就是为了替代Fmod 这类音频中间件,模仿Fmod 关于音频控制的结构和制作流程。同时提供运行时播放控制接口。原创 2024-10-21 08:00:00 · 718 阅读 · 0 评论 -
图形引擎实战:特效资源检查工具分享
特效是增强游戏表现力的重要手段之一,然而,华丽复杂的特效往往会导致更高的内存消耗和渲染压力。在美术制作特效时,通常只关注视觉效果,尽管程序团队可能会提供一些参数限制,但这些限制往往并未得到充分遵守。因此,定期检查美术上传的特效资源(包括纹理、网格等其他相关资源)显得尤为必要。在我参与的某个在研项目中,出于某些原因,项目初期并未对美术资源进行严格的检查,导致在实际测试中发现了内存占用异常的问题。具体表现为,在第一次战斗中,某些NPC使用了几个华丽的技能后,显存占用出现了异常增长,这显然是一个不正常的现象。原创 2024-09-23 20:00:00 · 991 阅读 · 0 评论 -
图形引擎实战:项目引擎迁移及鸿蒙化
这里将对项目引擎升级以及编译鸿蒙包过程中遇到的一些问题及注意事项进行简单整理这里只提及常规要修改的地方,一个是涉及前向渲染器的类或结构体已经弃用,需要使用通用渲染器进行替换,如:ForwardRendererData替换为UniversalRendererData,ForwardRenderer替换为ForwardRenderer。原创 2024-09-09 08:00:00 · 1534 阅读 · 0 评论 -
图形引擎实战:UE Hillside体积云移植URP管线技术实践
若历史帧UV有效,进一步判断当前像素的深度与历史帧像素的深度差异,若深度差异过大则使用与当前像素深度差异最接近的相邻绘制结果来作为重建结果,否则将历史结果Clamp至相邻绘制结果的Min/Max包围盒内作为重建结果。值得注意的是,出于性能考虑,体积云的绘制在1/4 x 1/4分辨率RT上进行,仅渲染1/2 x 1/2分辨率目标RT中2x2像素区域内的一个像素,剩下的三个像素则通过重投影的方式用历史帧结果重建得到,再得到1/2 x 1/2分辨率目标RT的重建结果后,进一步通过上采样得到全分辨率下的体积云。原创 2024-08-26 08:00:00 · 1053 阅读 · 0 评论 -
图形引擎实战:开放世界游戏制作分享
想象一下你站在一座山顶,眼前是一片广阔无边的土地,山川、河流、城镇、森林尽收眼底,而这些地方你都可以自由地去探索、发现和体验。这就是开放世界游戏的魅力。开放世界游戏实际上是一种自由探索和自主选择的游戏。它提供了一个庞大而开放的环境,玩家可以按照自己的节奏和兴趣去探索,而不是像传统游戏那样有着线性的流程。线性游戏中的玩家被写好的剧本引导着一步步走向终点,所有的故事和场景都是预先设计好的,玩家只能按照流程去推进。对比传统线性游戏,开放世界游戏赋予了玩家完成任务的自由,让每个玩家的旅程都独一无二。《艾尔登法环》游原创 2024-08-12 08:00:00 · 879 阅读 · 0 评论 -
图形引擎实战:Unity性能分析工具原理介绍
上面简单介绍下性能工具如何通过Profiler获取数据,希望起到抛砖引砖的作用。通过该工具,在测试人员跑游戏的同时,无感的上传性能数据,并通过Web的形式展现出来,使得我们能够实时了解游戏的性能状态,及时发现问题,及时解决问题。欢迎加入我们!感兴趣的同学可以投递简历至:CYouEngine@cyou-inc.com。原创 2024-07-29 08:00:00 · 550 阅读 · 0 评论 -
图形引擎实战:后台下载移动平台调试及iOS开发介绍
关于后台下载Unity插件的整体设计架构以及主要功能分析详情请见另一篇开发文档[1],这里对安卓与iOS后台下载功能修复调试过程中遇到的问题进行总结并对iOS平台的后台下载实现进行基本说明。原创 2024-07-01 08:00:00 · 837 阅读 · 0 评论 -
图形引擎实战:客户端优化之零GC日志系统改造
通过使用自定义字符串拼接格式化方案,确实将由传统字符串格式化产生的GC给清零了。零GC字符串不仅仅可以使用在日志系统,在项目其他需要使用字符串格式化的地方也可以扩展使用,虽然最后在ToString的时候会产生一些GC,但是至少能节约掉格式化过程产生的GC。最后就是该优化操作是针对项目日志系统的特定优化,在类型支持上可能会存在不全面的问题。欢迎加入我们!感兴趣的同学可以投递简历至:CYouEngine@cyou-inc.com。原创 2024-06-17 08:00:00 · 1055 阅读 · 0 评论 -
图形引擎实战:变体工具应用经验
当前游戏画面的丰富度和精美程度日益上升,为了支持这一点,就需要大量的shader及变体。随着项目的推进,shader变体也在渐渐增多,为了保证渲染效果正常以及获取良好的运行效率,就需要对所需的变体进行收集。在了解变体收集之前,首先需要了解一下什么是变体。例如在场景中有一片草地,我们希望其进行顶点动画,随风摇动,那么就需要添加额外的计算,为了适配各种配置的机型,可能会希望在低端机上关闭这个动画,不进行相关计算。原创 2024-05-20 08:00:00 · 1266 阅读 · 0 评论 -
图形引擎实战:近岸海浪初步尝试
关于水体渲染的主题有很多,如水面网格生成,FFT,着色等。step(0,-worldNormal.x)是加入多一个判定泡沫产生的位置的信息,一般来说泡沫产生的位置都在海浪的背部,但这样的判定导致产生的泡沫的mask太“硬”不够自然,还有一些其他更好的计算方法,这是一个可以优化的点。一个是高度信息,一个是浮沫信息,浮沫信息可以根据高度做一个Mask来进行控制,理论应该加入更多的控制和信息来做浮沫的动画来表示白沫的产生和消失的演变过程,这是一个可以优化的点。也可以根据需要,写入多张RT,如法线信息,浮沫信息。原创 2024-05-06 08:00:00 · 891 阅读 · 0 评论 -
图形引擎实战:基于音素对齐和语音驱动的中文口型同步
通过上述归类,我们可以制作一定类别口型的BlendShape,并设置这些BlendShape的权重来表示不同音素的口型,从而完成音素到口型的映射,图3为音素至视素的映射表。汉语产生的单位主要由词汇、音节和音素等组成,通俗讲就是我们的中文语句由若干个词组成,词又由相应的音节组成,其中声母和韵母构成了我们所熟知的拼音,从这段介绍中我们也可以得出,声母和韵母即音素构成了汉语文本的基本要素,如何将一段对话中的音素映射至相应的口型则成为了实现汉语语音和口型同步的关键。原创 2024-04-22 08:00:00 · 1570 阅读 · 0 评论 -
图形引擎实战:URP自定义后处理框架及扩展
游戏后处理效果是游戏开发过程中不可或缺的部分。它们通过颜色、光照、模糊等技术手段,让游戏画面更加逼真、迷人。在Unity的Built-in管线下,想要完成后处理效果,要么引进著名的后处理插件Post Processing Stack来实现此目标,要么使用OnRenderImage()配合Shader的方法进行自定义。当使用以上方法实现后,便可以对场景使用想要的后处理效果,并且自由度很高,可以随时进行修改和扩展。原创 2024-04-08 08:00:00 · 2464 阅读 · 0 评论 -
图形引擎实战:8级风格化级联阴影
阴影是画面表现光影的重要元素之一,高质量的阴影会对游戏画面产生不小的贡献。对于大世界来说,高质量的阴影往往意味着低走样和较远的绘制距离。Unity的URP管线中自带了最大级联数为4级的级联阴影,然而4级的级联数在阴影绘制距离较大时,近处的阴影会出现难以接受的锯齿,出现较大的走样。解决走样主要有两个方向,提高采样频率和降低信号频率。在本篇文章中,我们选择了一个较为通用的解决方案。对于前者,我们选择提高级联数,拓展4级到8级,对于后者,我们则选择在采样前进行PCF滤波。原创 2024-03-25 08:00:00 · 1312 阅读 · 0 评论 -
图形引擎实战:FFT海洋系统开发手记(一)
其实在前期需求调研阶段,我们也没有一开始就奔着实时计算波浪的这个方向去,还是本着能省则省的想法,测试了好几个使用预计算的置换图来计算波浪形态的插件,以及一些甚至没有顶点偏移只有法线扰动的水片shader。无论是采样预计算的资产,还是实时计算波形需要的信息,这阶段的输出都已经大体上决定了水波浪的形态:譬如波峰尖锐程度,波谷的平滑度,波浪细节的丰富度等等。一些早年的3A游戏,如神秘海域,刺客信条等,则对于这些技术根据自家需求进行了不同的改进和组合,感兴趣的朋友可以直接搜索他们当年的技术分享看看,挺有意思的。原创 2024-03-11 08:00:00 · 1077 阅读 · 0 评论 -
图形引擎实战:基于rdc文件的世界场景还原流程介绍
在图形流水线中,MVP变换指的是一系列坐标空间变换,这些转换通过将模型变换(Model Transform)、视图变换(View Transform)和投影变换(Projection Transform)相结合来实现。这三种变换共同组成了MVP变换,它们将3D场景中的对象转换到一个二维图像上,以便在屏幕上渲染。原创 2024-02-26 08:00:00 · 1191 阅读 · 0 评论 -
图形引擎实战:Spine动画性能优化
Spine 2D 是一款针对游戏开发的 2D 骨骼动画编辑工具。相比于传统的逐帧动画,Spine2D内存占用体积更小,所需美术资源更少等等。Spine2D提供了良好的 Unity 支持,包括导入工具和运行时库,使得 Spine 动画能够轻松地集成到 Unity 项目中。上述两点问题是如何发现的?这就离不开性能分析工具了,本章介绍2种常用的分析工具(干货请移步2.3章节)。(需要注意由于项目是移动端开发,所以实际性能指标,应打包安装到手机后在做性能分析才是正确的。CPU Usage。原创 2024-02-12 08:00:00 · 3264 阅读 · 0 评论 -
图形引擎实战:UGUI名字版合批,LightMap/ShadowMap贴图通道合并,与安卓GPU Query
近期在为Unity通用渲染管线下的手游项目进行性能优化,主要是环绕当前渲染瓶颈展开的尝试和验证。原创 2024-01-29 08:00:00 · 1815 阅读 · 0 评论 -
图形引擎实战:云雾渲染漫谈
云雾一直都是各个游戏烘托场景氛围的主要组成部分,而这种很难对其感性审美效果进行参数化的东西,无论是在美术工作流中还是渲染技术中都是比较难以处理的。原创 2024-01-01 08:00:00 · 973 阅读 · 0 评论 -
图形引擎实战:RayMarching后处理实时体积雾渲染
Hi!大家好我是Kevin,来自畅游引擎部。这次分享的内容是RayMarching体积雾渲染的实现。在户外游戏场景的表现中,雾效对整体氛围的渲染有着至关重要的作用。本次使用了Unity3D引擎,采用的URP管线。首先URP管线是支持内置雾效的,可以通过Window-Rendering-Lighting-Other Settings中的fog来进行开启和调整。思路基本与后处理线性雾的思路,通过深度图还原世界空间坐标,然后分别通过高度和深度决定雾的强度。原创 2023-12-18 08:00:00 · 570 阅读 · 0 评论 -
图形引擎实战:端游引擎改造实践
对于溶解效果来说,需要一系列timer数据来添加基于时间的控制效果,定义相关数据结构后根据time thread以及粒子的生命周期计算出想要的数据对象,然后在initParticle对象阶段加载dissolve材质进行特殊处理,将数据传入材质中进行shader的参数重载。之后,在引擎的资源管理系统中添加支持,在导入此资源文件时对新的标签进行处理,对其中的数据进行解释,以便在前端中进行显示和修改、在文件系统中进行保存。根据引擎自身的材质系统,创建一种新的材质时需要编写相应的.material文件。原创 2023-12-04 08:00:00 · 437 阅读 · 0 评论 -
图形引擎实战:自阴影渲染分享
与Urp中的shadow caster pass很接近,不过这里我们要加上自定义的shadow bias,然后在Fragment中处理一下alpha 和 cutoff就可以了;原创 2023-11-20 08:00:00 · 835 阅读 · 0 评论 -
图形引擎实战:镭射效果制作分享
该方案的优势1.遵循物理的2.可以使用少量的参数去调控镭射的效果。计算相对简单,缺点仍是颜色不能够自定义,还有一种常见的方案是采样一张镭射贴图来模拟,好处是颜色可以自定义同时性能上还很高效没有复杂的公式计算。我查阅了网上普遍的方案,常见的做法是制作一个Ramp图生成工具,然后将生成好的ramp图赋给材质。这两个方案的好处是美术同学可以手动的去控制镭射的颜色。最后就是Shader中对Ramp图的采样的部分,Ramp图的UV坐标是使用fresnel作为Ramp的U轴坐标,0.5作为V轴坐标。原创 2023-11-06 08:00:00 · 491 阅读 · 0 评论 -
图形引擎实战:一种典型的屏幕空间全局光照方案设计
具体的思路是,在像素点屏幕空间周围360°范围内平均采样一定数量的方向(示例代码中为16个采样点,同时引入了噪声作为反射计算的法线来改变每个像素点的采样方向),分别还原各采样方向上设定距离的屏幕空间点对应的世界空间位置,并计算得到要估计的点到各采样点的世界空间方向向量,通过计算该方向向量与要估计的点的世界空间法线的余弦值,即可估计对应方向上的遮蔽情况。可以看出,虽然模型制作上很精致,但是整个画面给人一种很干、不真实的感觉。很明显的,自发光的球有光晕,但是却照不到附近的表面,面和面之间的光照比较平,不真实。原创 2023-10-23 08:00:00 · 219 阅读 · 0 评论 -
图形引擎实战:AssetBundle构建,更新与动态加载的实践
在 Unity 引擎中,AssetBundle 系统允许我们在游戏发布后随时更新资源,还支持在游戏运行时根据实际需要动态加载资源。但是,由于 AssetBundle 系统的特定设计和固有属性,实际项目中使用它来进行资源管理可能会变得复杂,带来不少挑战。本文旨在从开发者的视角出发,探讨 AssetBundle 的构建、下载更新,以及加载与卸载的一些实践方法。原创 2023-10-09 08:00:00 · 249 阅读 · 0 评论 -
图形引擎实战:Unity大世界地形制作流程分享
接着说地形的LOD,还有进一步的优化方式,就是把一些不止是地形的东西,也做进来,例如,一些比较大的山体模型,比较明显的建筑,在足够远时,可以直接和地形合并在一起,当做低阶的LOD,因为足够远,山体和建筑的贴图可以用顶点色,或者UV缩到足够小,合并到地形LOD的那张图里,可以节省很多的远景批次,因为足够远,质量也不会收到太大影响,缺点就是需要一定的美术工作量。提个算是额外的话题,为了解决岩石和地表的衔接生硬问题,我们做了地表融合,需要在渲染管线的开始阶段,预渲染一遍地形,所以地形的优化,效果还是比较大的。原创 2023-09-25 08:00:00 · 531 阅读 · 0 评论 -
图形引擎实战:游戏GPU性能优化
最近项目场景进入优化阶段,之前我对优化的认识只在一些通用方法上,比如:减面,LOD等。对其他的优化方法完全不了解。这些手段确实是有作用的,但是如果不深入进去根据项目和硬件平台特点进行优化,很难实现性能和效果的最大性价比,就很有可能会出现“效果也不好,性能也不好“这种情况。随着这段时间的学习和第一阶段优化结束,我对优化这件事有了更多的认识。我希望把我这段时间实践和学习得到的知识分享出来。学习时间不太长,经验不足难免会有疏漏。希望能对大家有帮助。因为优化其实是个很大的话题,而且篇幅有限,我不能让文章太长。原创 2023-09-11 08:00:00 · 1049 阅读 · 0 评论 -
图形引擎实战:NGUI转UGUI的实践之路
使用工具可以快速的将NGUI的项目转换成UGUI项目,可以批量复用NGUI的UI,能节约大量的时间去拼接UI。但是因为UI的复杂性跟不确定性,转换以后还需要做相当细致的验证,还需要对应的前端程序配合才能更好的完成。欢迎加入我们!感兴趣的同学可以投递简历至:CYouEngine@cyou-inc.com。原创 2023-08-28 08:00:00 · 409 阅读 · 1 评论 -
图形引擎实战:移动端大世界TOD与多光源调节经验分享
我们将天空划分为四个不同的区域,下图中的蓝色、品红、绿色、墨蓝四个部分就是四个区域的示意,美术同学可以调节不同区域的颜色和不同区域间的混合程度,比如让太阳一侧的色彩更暖更丰富,让另一侧的部分偏冷,增强对比,四个颜色区域,可以给美术同学更高的自由度,调出美术同学所期望的效果。例如主光的颜色、主光的强度,太阳的颜色、大小、亮度等。因为灯光过多,在性能有瓶颈的时候,在不是那么必要的灯光上做一些牺牲,比如把离的比较近的灯光进行合并,或者是把灯光的范围进行一定程度的收缩等,不过这些方法对美术效果会有一定程度的损失。原创 2023-08-14 08:00:00 · 333 阅读 · 0 评论 -
图形引擎实战:变体剔除经验分享
既URP之后的近年shader中定义的keyword数量爆炸增长,编译后变体数量更是指数级增长;变体剔除成为打包过程中必不可少的一步,相较于之前buildin管线下,urp中的变体剔除也有不少变化,这里分享一下个人在处理变体剔除过程中遇到的一些问题。原创 2023-07-31 08:00:00 · 247 阅读 · 0 评论 -
图形引擎实战:Native RenderPass原理及URP应用(下)
Unity目前对RenderPass的debug机制还不算友好,例如非暂态资源未绑定RT造成的报错不太直观,刚接触报错时,会对报错无从下手;而且经常因为某些Attachment绑定问题导致崩溃,对于这些问题,在没有精力去搭建一套容错机制之前,最好的办法只是不要一次性编写过多逻辑。根据前一篇文章的理论,暂态资源的绑定应该是无消耗的,理论上如果在shader里增加一个无计算消耗的Attachment,并且不绑定实际RT,应该是没什么性能影响的;原创 2023-07-17 08:00:00 · 648 阅读 · 0 评论 -
图形引擎实战:Native RenderPass原理及URP应用(上)
或许你曾经听过一种说法,移动端游戏开后处理会特别费,有没有想过这个费体现在哪里,为什么特意提移动端,很容易想到的是,提到手机是因为手机的硬件架构会使后处理类的屏幕空间操作很费。另一方面,Vulkan1.2前的初学者也会很气恼,RenderPass到底有什么作用,为什么简简单单画个三角形都要填一大堆RenderPass的结构体。本篇文章会从硬件结构出发,讲述RenderPass的原理,了解RenderPass的适用场景,以及Vulkan、Unity SRP、URP的写法,并且提供一些实践案例。原创 2023-07-03 08:00:00 · 1459 阅读 · 0 评论