Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >像素艺术家优化之路

像素艺术家优化之路

作者头像
keyle
发布于 2025-01-22 01:40:14
发布于 2025-01-22 01:40:14
810
举报
文章被收录于专栏:礼拜八不工作礼拜八不工作

像素艺术家是我业余制作的一款小工具的代号,是一个集合像素画图片,像素画编辑一体的应用,在这里分享在程序性能调优的过程。

效率优化第零版

所有的物体创建/销毁都是基于池,也就避免了额外的GC开销,缩短CPU耗时。

效率优化第一版

每次用笔刷绘图的时候,当鼠标划过网格,都会记录位置,划过的这个位置就作为一个 Tile 渲染的基本点。 在这个点上再去生成一个mesh,进行染色,标注这里被画出了颜色。

由于需要渲染的Tile,是动态创建的,都具有自己的单独的Render,并且需要改变自己的颜色。 对于材质来说,就会在每次改变属性之后创建出新的instance,众所周知instance多drawcall就多。 这个问题,并不难解决,通过 MaterialPropertyBlock 去修改属性,可以避免instance的创建。

效率优化第二版

当使用 MaterialPropertyBlock 去处理材质属性修改后,画板的drawcall已经保持在一个极低的数量级了。 直到我准备给画板添加一个背景,也就是预创建tile,给画板一个背景色。这时候新的问题又出现了。

100x100的像素图编辑,就有一万个tile,需要去染色,虽然是公用材质,但是架不住节点多导致的CPU耗时过高。 这时候,我想起,既然最后需要导出到像素图片,为什么不直接将像素点写入图片呢?

随后,新增了一个实时渲染图,展示正在绘制的像素画状态。并且修改这个渲染tile的逻辑,每次要渲染tile的时候,不再进行mesh创建与render渲染,直接将像素写入实时渲染图。 至此,突破了之前的节点瓶颈,在512x512 ,也就是差不多2.6w像素的图片上,进行流畅的编辑。

效率优化第三版

在成功的在512x512的像素图上编辑的时候,我顺便也尝试了在1000x1000,2000x2000的像素图上进行编辑。 明显会觉得有点卡顿,分析了一下卡顿的原理,原来新的瓶颈在修改实时渲染图的频率上。 每次创建新的像素点,也就是画笔在滑动的时候路过的像素点,都会立即去做一个像素图的写入。

这个问题解决起来倒是不难,就是将实时像素图的写入频率降下来。 结合第一个优化版本的实现。每次玩家开始绘制与结束绘制之间,所有的像素点,都是用第一个优化版本,仍旧去创建tile,将这个过程产生的所有tile数据进行记录。 玩家手指抬起,结束一轮绘制,再将上一轮缓存的tile信息统一写入实时渲染图。并且回池所有的tile。

至此,在至少四百万的像素图编辑上表现得很丝滑,就如同在四百个像素点的编辑。

效率优化第四版

在增加了大贴图导入后,如果拖拽整个贴图会造成画面卡顿。原因是拖拽的是由unity的meshrender组成的画面。 画面有多少个像素点,就由多少个mesh(一个meshrender只渲染了一个像素点)。 这样数量上去了,也就又出现了性能瓶颈,为此改为了给mesh增加了一个支持贴图的材质球,匹配像素图进行缩放,将像素点都渲染到这个单位上,进行整体图片的预览,效率又上去了。 这里遇到一个问题,使用 MaterialPropertyBlock 进行针对 Texture 的drawcall 优化的时候,需要注意如果N个meshrender使用了的一个材质,但使用的并不是一张贴图,drawcall仍然会增加。 所以这边我记录玩家每次画笔下落与抬起,在期间,渲染玩家绘出的像素图,都是一张贴图。用以保证 MaterialPropertyBlock 能够正常生效。

当然这个效率优化并不会停止,就先写到这。

当然如果你想体验这个应用可以在下面链接访问:

https://px.vrast.cn/ (需要注意的是目前只适配的桌面浏览器)

https://vrast.cn/project/ (项目更新日志)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 礼拜八不工作 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
GPU 渲染管线和硬件架构浅谈
作者:landonwang,腾讯 IEG 客户端开发工程师 本文简述了 GPU 的渲染管线和硬件架构,对一些常见问题进行了讨论和分析。特此分享出来,与君共勉。当然,由于本人并未从事过硬件开发的工作,文中有错漏之处在所难免,欢迎批评指正。另外本文内容量很大,总结下来有以下几点核心内容:(1)移动平台渲染管线 TBDR 的介绍; (2)GPU 缓存体系的介绍;(3)Warp 的执行机制;(4)常见的如 AlphaTest 或者分支对性能的影响。 序言 联发科的工程师团队在对我们游戏进行了性能分析之后,建议我们将
腾讯技术工程官方号
2022/06/07
11K1
GPU 渲染管线和硬件架构浅谈
【Unity面试篇】Unity 面试题总结甄选 |Unity性能优化 | ❤️持续更新❤️
Unity中,CPU准备好需要绘制的元素,对底层图形程序接口进行调用的过程,每次引擎准备数据并通知GPU的过程称为一次Draw Call。DrawCall越高对显卡的消耗就越大。 降低DrawCall的方法:
呆呆敲代码的小Y
2023/07/24
2.8K0
【Unity面试篇】Unity 面试题总结甄选 |Unity性能优化 | ❤️持续更新❤️
Unity3D基础知识之 ✨ Stats渲染数据统计窗口
Stats窗口,全程叫做 Rendering Statistics Window , 即渲染数据统计窗口,它会实时统计数据。
呆呆敲代码的小Y
2021/08/12
2.1K0
【Unity面试篇】Unity 面试题总结甄选 |Unity基础篇 | ❤️持续更新❤️
答:Awake —> OnEnable —> Start —> FixedUpdate —>Update —> LateUpdate—> OnGUl —> OnDisable —> OnDestroy
呆呆敲代码的小Y
2023/07/24
3.3K0
【Unity面试篇】Unity 面试题总结甄选 |Unity基础篇 | ❤️持续更新❤️
RPG游戏高性能特效是怎么练成的?
众所周知技能系统与技能特效,可以说是 RPG 游戏的精髓,游戏好不好玩,带不带感,这一点至关重要。
张晓衡
2023/01/03
8260
RPG游戏高性能特效是怎么练成的?
腾讯《天涯明月刀》5年研发历程全复盘
作为腾讯游戏首款自主研发的3D武侠题材MMORPG游戏,《天涯明月刀》凭借其自研的Quicksliver引擎,高度还原了很多真实景观,塑造出杭州、开封等经典场景,并通过真实的光影效果和流畅的战斗画面,向玩家展现了逼真写实的武侠世界。本期《论道》,腾讯北极光工作室群的专家工程师刘冰啸将深入复盘《天涯明月刀》5年开发历程中,针对游戏主城、多人场景等进行的诸多优化,分享制作大型MMORPG游戏效率提升的方法以及常见疑难问题。
腾讯大讲堂
2019/05/16
2.1K0
腾讯《天涯明月刀》5年研发历程全复盘
过亿月流水H5游戏优化分享、腾讯自研H5游戏优化分享、Layabox官方优化分享,全在这里了!
讲到优化,嘉宾们几乎都会提到优化与调试工具,掌握工具是性能优化的基础。那么都有哪些工具呢?常用的有三个:
Layabox Charley
2019/05/10
2.7K0
过亿月流水H5游戏优化分享、腾讯自研H5游戏优化分享、Layabox官方优化分享,全在这里了!
连“捉阔”是什么都不知道就不要混了!如何优化看这里!
在游戏开发中,DrawCall 作为一个非常重要的性能指标,直接影响游戏的整体性能表现。
张晓衡
2020/07/09
2.3K0
连“捉阔”是什么都不知道就不要混了!如何优化看这里!
【Unity面试篇】Unity 面试题总结甄选 |Unity渲染&Shader相关 | ❤️持续更新❤️
LightMap:就是指在三维软件⾥实现打好光,然后渲染把场景各表⾯的光照输出到贴图上,最后⼜通过引擎贴到场景上,这样就使物体有了光照的感觉。
呆呆敲代码的小Y
2023/07/24
9280
【Unity面试篇】Unity 面试题总结甄选 |Unity渲染&Shader相关 | ❤️持续更新❤️
《黑暗之潮》中次时代技术的应用经验及技术
《黑暗之潮》是一款顶视角的次世代手游,虽然锁了视角,但实际对画质和战斗细节的要求很高。游戏采用了PBR的渲染,场景当中有不少的动态光影效果,场景的细节也相当丰富。
放牛的星星
2021/03/10
2.1K0
《黑暗之潮》中次时代技术的应用经验及技术
Android界面性能优化必读
Android系统要求每一帧都要在 16ms 内绘制完成,平滑的完成一帧意味着任何特殊的帧需要执行所有的渲染代码(包括 framework 发送给 GPU 和 CPU 绘制到缓冲区的命令)都要在 16ms 内完成,保持流畅的体验。这个速度允许系统在动画和输入事件的过程中以约 60 帧每秒( 1秒 / 0.016帧每秒 = 62.5帧/秒 )的平滑帧率来渲染。
做个快乐的码农
2022/01/10
4.9K0
Android界面性能优化必读
u3d 100道面试题(包含答案)
一:什么是协同程序? 答:在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个可以与程序并行的逻辑。可以用来控制运动、序列以及对象的行为。
立羽
2023/08/24
1K0
[穿越福城] 幕后故事 | 设计定义年味
腾讯ISUX isux.tencent.com 社交用户体验设计 导语 每到过年,在外的游子都会不远万里回家与亲人团聚,这是一种中国独有的特色,也是一种别样的年味。我们期望在春节上线一款游戏,让玩家感知到这种年味,《穿越福城》应运而生。游戏的玩法是以搭板子的方式,让玩家穿越36个中国主要地标建筑,寓意穿越中国,走亲访友,年味十足。 游戏线上录屏 历时1个月的加班加点,《穿越福城》终于和大家见面了。作为3D游戏界的萌新,设计过程中我们遇到了非常多的困难,我们希望通过复盘与思考,能把项目中的问题
腾讯ISUX
2019/01/30
7150
[穿越福城] 幕后故事 | 设计定义年味
如何快速优化手游性能问题?从UGUI优化说起
作者Feefi,加入腾讯多年,目前主要从事Unity项目UI开发及优化相关工作,曾获得国际软件设计大赛“成都创业金钥匙”奖。
WeTest质量开放平台团队
2018/10/29
1.6K0
Android性能优化-渲染优化
我们在开发的过程中,可能经常会遇到测试的一些反馈,就是APP运行卡顿的问题。我们通常所讲的卡顿问题都是因为渲染掉帧的问题引起视觉上的卡顿感。所以了解渲染机制,我们在项目的开发过程中,可以有意识的少挖坑。同时要打造一款精品的应用,注意渲染优化也是非常重要的一件事情。
Anymarvel
2018/10/22
1.5K0
Android性能优化-渲染优化
Unity性能调优手册7:渲染优化,DrawCall,剔除,Shader,LOD,TextureStreaming
翻译自https://github.com/CyberAgentGameEntertainment/UnityPerformanceTuningBible/ 本章介绍围绕Unity图形功能的调整实践。
立羽
2023/10/26
3.1K0
Unity性能调优手册7:渲染优化,DrawCall,剔除,Shader,LOD,TextureStreaming
跨平台渲染引擎之路:拨云见日
最近在工作中越来越多地接触到一些3D以及相比常见特性更酷炫的效果,因此萌发了想要自己从0开始打造一个渲染引擎的念头,一方面是为了更好地实现公司业务的需求,另一方面则是可以学到整个渲染流水线上的方方面面。
音视频开发进阶
2019/07/30
1.5K0
DAPP丨NFT卡牌/盲盒/农场/对战链游系统开发技术说明及详细源码
1.获取所有可能和投影框相交的mesh,一般游戏引擎都会有Octree或BVH保存mesh的aabb,这一步简单获取aabb相交的mesh即可.
系统_I8O28578624
2023/02/21
5450
什么是draw call_unity drawcall优化
draw call是openGL的描绘次数(directX没怎么研究,但原理应该差不多) 一个简单的openGL的绘图次序是:设置颜色→绘图方式→顶点座标→绘制→结束。 每帧都会重复以上的步骤。这就是一次draw call
全栈程序员站长
2022/10/02
1.4K0
大型 3D 互动项目开发和优化实践
得益于“元宇宙”概念在前段时间的爆火,各家公司都推出了使用 3D 场景的活动或频道。
winty
2023/08/23
4730
大型 3D 互动项目开发和优化实践
推荐阅读
相关推荐
GPU 渲染管线和硬件架构浅谈
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档