自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

海洋个人博客

喜欢自由的飞翔!

  • 博客(334)
  • 收藏
  • 关注

原创 移动端小场景优化方案

我们在关注DC数值时,也要关注它们实际的渲染操作,举个例子,10个不同的物体,如果我们使用两个材质球,五五分二组,再不合批的情况下,是10个DC,同样,也是这10个物体,我们使用10个不同的材质球,分别赋予它们,DC也是10,但是它们的GPU消耗是完全不同的,前者只需要加载两次材质球中的贴图就OK了,但是后者需要加载10次,这就会出现Catch missing的问题,增加GPU消耗,所以虽然表面是一样的,但实际是不同的。内存泄漏在逻辑中是比较常见的,借助UWA或者性能狗这些第三方平台去查找,比较方便。

2022-10-24 14:32:31 1774 1

原创 优化基础知识点分享

二、游戏低帧,卡顿(30帧 建议最低在25帧左右),低帧率和卡帧是不一样的,低帧率是在某个时间段的帧率,卡顿是在某个时刻,卡顿在项目中所占的比重应该在2-3%左右,是允许存在的,比如在加载资源时刻,在GC时刻,但是也是有概率限制的,不能频繁的卡顿。为了让绘制更加高效,更加合理,又加入了各种变种的剔除算法,绘制优化等优化算法等。另外大家在面试的时候,面试官经常会问,你们项目场景面数是多少,在这里也给大家强调一遍,并不是真正的模型面数,给大家分享一下数据和相关的知识点,这样你就不用再为面试的问题而发愁了。

2022-10-22 15:07:55 2189

原创 移动端实时阴影+自投影技术实现

说到实时阴影,现在市面上各个项目实现的实时阴影大部分都是平面阴影,比如王者荣耀实现的实时阴影以及一些RPG网络游戏实现实时阴影,所以项目在设计地形时都是有意回避地形高度差的出现,尽量让地形是平坦的。本篇博客介绍的实时阴影是可以在平面以及地形上进行的渲染。这样实现的实时阴影就可以在不同的地形上进行投影,实现方式采用的还是比较传统的实时阴影算法比如ShadowMap,CSM算法或者PSM算法等等都可以...

2019-10-02 22:03:35 2779 4

原创 关于大世界地形优化思考

以前使用Unity制作大地形时,我们采用的方案是先制作大世界地形,这个地形制作的方式是先通过Max或者Maya先把地形制作好,通过软件制作的好处是可以控制地形的面数,这样地形可以一次性加载进内存,物体的显示采用的是多线程以及分层显示的方式,优化的点主要集中在地形上的物体,建筑,草,树木,NPC,实时阴影等等。雨雪,一般采用的都是粒子系统实现,为了实现更逼真的效果,可以使用深度图按照建筑或者地形的高低去渲染,雨或者雪,这样可以模拟真实的环境,低处的雪厚一些,低处的雨水多一些,高处的雪薄一些,雨水少一些等等。

2023-10-24 13:52:07 374

原创 UE4帧渲染内容分享

为了提升Unity的渲染品质,需要深入研究一下UE4的渲染流程以及UE4引擎的设计非常好,在这里把UE4引擎每帧的渲染以及它一帧渲染的主要内容通过下面的思维导图给读者呈现,UE4引擎使用的技术相对来说做的比较细致,比如针对灯光的渲染,静态的,平行光,动态的,阴影渲染也分为:lightmap烘焙,联级阴影针对的是动态的实时阴影,还使用了CubMap立方体阴影针对的是室内的阴影等等。每个渲染分工明确。...

2019-10-13 17:05:15 1583 1

原创 游戏创业团队应该选择Git还是Svn

在开发过程中遇到问题,我都会做一些思考,总结一下,作为研发团队在项目研发前就要确定好管理工具,游戏研发团队核心:程序,美术,策划。公司为了项目管理方便,一般会选择Git或者SVN,下面我们就分析一下项目开发该选择那款项目管理工具,先说Git。Git选择Git,Git它的优势非常明显,如下所示:1、分布式管理,非常强大的分支管理功能,分支功能对于开发者来说非常方便,每个人可以开一个分支,开发好...

2019-10-12 11:35:48 4063 2

原创 移植UE4的BRDR算法到Unity

最近在改进Unity的PBR渲染技术,计划把UE4的渲染库搬到Unity中,就查阅了相关的资料,找到了UE4的PBR公式,下面把公式对应的代码实现出来,后面把它们整到一个cginc作为库文件使用,换句话说就是封装一个类似Unity的UnityStandardBRDF.cginc里的函数换掉。下面就把BRDF的渲染公式以及对应公式的代码展示一下,后面直接将其放到Unity即可。BRDF算法UE4...

2019-10-11 21:45:01 2254 2

原创 Unity对象和序列化原理介绍

Unity使用了很多年了,在这里我敢说很多人对Unity对象和序列化原理并不是很清楚,比如Asset与Object之间有啥区别?如何管理Asset?Unity的序列化是咋回事等等,下面就从Asset与Object对象区别说起。Asset与对象先介绍Asset,它是存储在Unity项目中的文件夹中,比如纹理,3D模型,音频文件等等。Unity对象也就是我们说的Object,它是一组序列化的数据,...

2019-10-10 14:53:30 3095

原创 正确使用AssetBundle加载和卸载

在使用Unity开发项目时,AssetBundle是必须使用的,对资源进行打包加载,因为移动端游戏包体的大小对用户体验非常重要,对内存的使用更加重要,下面我们就介绍一下关于AssetBundlle的加载和卸载,虽然网上关于这方面的介绍已经非常多了,自己还是总结一下:当从本地加载AssetBundle文件时,可以通过缓存后者AssetBundle.LoadFromFile加载文件,它们对于内存的消...

2019-10-09 11:14:34 2870 1

原创 Unity游戏开发经验点滴

游戏开发中会遇到各种各样的问题,只有经历过了才会深刻,这里就游戏开发的一些经验点滴给读者分享一下,先从代码说起。从事IT行业这么多年了,写过或者看过很多代码,有的项目代码写的不错的,大家经过多年的努力都会从初级程序员到主程的发展,作为主程除了做架构设计,带团队外,就是审核代码,现在程序员写的代码,大部分都是只根据需求而写,游戏开发与其他开发最大的不同是需求经常变化,朝令夕改用于游戏策划一点都不为...

2019-10-08 10:24:05 5085 3

原创 Unity PBR渲染技术系列一

国庆假期终于空闲了,利用休息这段时间,把最近一直研究Unity的渲染技术成果给大家分享一下,目前,在游戏开发方面,两个职位比较火,一个是图形学程序,另一个是美术TA。这两个职位有个共同的特征就是需要掌握Shader编程。Unity官方提供了一些Shader的渲染比如Standard。但是这个远远不能满足程序开发需求。需要我们自己去开发一些Shader满足需求,很多人对写Shader都比较头疼,学习...

2019-10-01 21:41:04 5197

原创 Unity3D捏脸+衣服摆动技术介绍

在前面的博客中介绍过关于变形的实现方式,使用的是球体,本篇博客结合着游戏开发中的捏脸以及角色衣服随动作摆动效果,因为二者在目前的游戏开发中使用的非常多,借此给读者通过案例的方式给读者介绍一下。捏脸实现捏脸效果,在MMORPG游戏中使用的比较多,比如:《楚留香》、《荒野行动》、《猎魂觉醒》、《琅琊榜:风起长林》、《九州天空城》等等。MMORPG游戏的捏脸系统还是做的比较强大,但是原理都是一样的,...

2019-10-01 10:10:11 17848 15

原创 次世代角色渲染技术概述

在上篇给读者介绍了关于卡通渲染的一些技术点,本篇再介绍一下关于次世代角色渲染技术,市面上占主流的游戏还是大型的次世代渲染,Unity自身提供了Standard和Standard(Specular),但是对于游戏的品质来说还远远不够,而且相对来说比较耗,这就需要我们自己去提升,其实新版的Unity给我们提供了Shader Graph作为Shader工具来说还是可以使用的。先介绍一下次世代渲染使用的技...

2019-09-28 22:07:52 3379

原创 Lua与Unity的内存优化技术

现在使用Unity开发,有许多Lua插件供选择:ulua,slua,xlua等等。开发使用Lua的目的是为了热更新,换句话说就是将游戏中可变的资源和逻辑一起进行更新。Lua作为一种脚本非常适合做这种事情,但是使用Lua并不像表面这么简单,这中间会涉及到虚拟机技术以及Lua和Unity之间的互调,内存的释放等等很多坑。这些问题如果搞不清楚就会出现游戏占用大量内存而不知所措,因为Lua并不适合于调试,...

2019-09-28 19:23:46 3473

原创 二次元卡通角色渲染技术概述

**概述**好久没写博客了,最近一直在学习二次元卡通渲染技术,自从崩坏三,闪耀暖暖等二次元游戏出来后,作为程序员对他们使用的渲染技术很感兴趣,二次元卡通目前主要分为欧美卡通和日式卡通,我们以日式卡通为例给读者分享做卡通渲染主要运用哪些技术。二次元游戏在角色渲染和场景渲染方面跟我们以前开发的次世代游戏或者RPG游戏中的渲染还是有区别的。我们以前做RPG游戏或者次世代游戏,主要是Shader的编...

2019-09-28 14:39:15 6317 1

原创 我对架构设计的理解

游戏架构设计是一个老生长谈的话题,以前给多个游戏公司培训过,随着时间的积累,对游戏架构设计的理解又多了一些,在此给读者分享一下我对于架构设计的理解。游戏架构设计是基于引擎的基础上的二次封装,目的是便于游戏开发者能够专注于逻辑的编写,便于多人协同开发,便于功能的扩展等等。不论使用什么引擎,只要掌握了思想,就能解决问题。我先把我们的设计思想介绍一下,我们的架构设计总体来说是基于组件的模块化设计,举...

2019-02-09 13:53:52 2115 1

原创 聊聊Unity2018中的Package Manager应用

从Unity2017版本开始,随着Unity版本的提升,Package Manager 逐步在完善。Package Manager 里面包含了很多对开发有用的程序,如下图所示:左边显示的对话框就是Unity为我们提供的包体,它里面包含了2D相关的,AR相关的,以及支付相关的,还有Jobs,Render-Pipeline等等。内容还是非常强大的,其中我们已经将In App Purchasing应...

2019-02-06 14:07:05 14157

原创 C#重要知识点在游戏开发中的应用

今天是大年三十,在此祝各位程序员朋友身体健康,猪年大吉。闲来无事,把在Unity开发中使用的C#知识点总结一下,自己在带团队新人的时候,好多知识点它们并不是很清楚,另外也不知道自己哪方面不足。其实在面试的时候,主考官也会问到相关的问题,项目开发中这些知识点是必备的。下面我把总结的给读者展示一下:我给读者介绍一下,C#作为面向对象语言,面向对象语言的三大特性就是,继承,封装,多态。继承就是子类继...

2019-02-06 09:47:04 5596 4

原创 回顾我的2018

2018年即将过去,回顾过去,2018年是一个多事之秋,尤其是出现了版号的问题,导致了IT小公司很多转型做小游戏,通过广告收费,这样的小游戏创新不足,在市场上很难被认可, 即使转向IOS,IOS审核相比以前也是非常严格,这就挤压了产品的生存空间。在年末,像过去一样,IT行业的公司面临着重新洗牌,这个已经成为了行业规律,小公司由于项目不给力,更重要的是资金短缺,面临着入不敷出,最后关门大吉。大公司同...

2019-01-27 09:27:02 1540 5

原创 图形学渲染算法资料持续更新中

Forward vs Deferred vs Forward+ Rendering with DirectX 11https://www.3dgep.com/forward-plus/Fundamentals of Ray Tracinghttp://www.cosinekitty.com/raytrace/contents.htmlThe Basics of GPU Voxelizati...

2019-01-11 20:57:53 1951 5

原创 [译]网格着色器渲染数亿面片的模型

现在在工业仿真或者航天以及军事仿真中,会使用数以亿级的模型数量,针对它们的渲染,普通的渲染管线几乎是不可能做出逼真的渲染效果,这就要用到网格着色器。本篇博客主要是给读者介绍 网格着色器渲染技术,我们主要从以下几方面给读者介绍:1 网格着色器管线2 网格和网格着色3 预计算Meshlets3.1 数据结构3.2 渲染资源和数据流3.3 Cluster Culling with...

2019-01-04 11:23:02 3203 1

原创 聊聊引擎底层如何实现Bloom渲染算法

Bloom渲染是游戏中常用的,在Unity和UE4中也有Bloom渲染算法如果我们自己实现Bloom渲染算法,该如何实现呢?网上关于Bloom的实现算法讲述的也比较多,但是我们本篇实现的Bloom渲染算法相对来说比较简单,但是效果也不赖。我们讲述的同样是引擎底层实现的Bloom渲染算法,我们在实现渲染算法之前都会查阅相关资料,那我们自己编写Bloom渲染算法,参考的网址:https://lear...

2019-01-03 15:39:36 4800

原创 [译]体素技术介绍

A voxel representation of a scene has spatial data as opposed to the conventional rasterization view (as stored in a render target) which just has a slice of depth value. A voxelized scene can be easi...

2019-01-01 09:18:04 12859 3

原创 聊聊引擎底层如何实现BRDF渲染算法

BRDF作为比较流行的渲染算法,但凡成熟的引擎的都有此功能,我们自己写引擎也不例外,我在编写引擎时也会参考网上的一些资料,这也是学习的过程,先介绍BRDF,它是双向反射分布函数,说白了它是对于物体表面上光的处理,BRDF有很多模型,我们在编写Shader的时候也是基于这些模型。BRDF使用的数学模型是Cook-Torrance公式,如下所示:我们实现的BRDF渲染算法会参考Unreal Eng...

2018-12-29 08:38:58 4261 3

原创 Fog Volume渲染算法实现

由于项目需求,需要实现Fog Volume的效果,查阅了网上资料没有找到相关算法介绍,Unity虽然提供了插件但是效果不是项目想要的,只能自己去写,为了便于日后查阅,写篇博客记录下来,在介绍Fog Volume算法实现之前,先介绍Fog Volume可以实现的效果表现,它可以跟blinn phone,阴影结合起来使用,效果更佳,看下面与blinn phone结合实现的效果:每种渲染效果的背后都...

2018-12-27 21:42:51 3533 2

原创 Unity屏幕雪花另类实现方式

今天是圣诞节平安夜,为此特别制作了一个雪花飘落的场景,我们的雪花渲染方式不同于网上流行的使用Camera Filter,而是采用自定义Mesh实现的,自定义Mesh可以帮助我们实现很多的效果,而且对效率的提升非常有帮助,雪花实现方式分为:C#脚本和Shader渲染,C#负责雪花的生成,Shader负责雪花的飞舞和渲染。下面我们介绍实现方式:关于unity,每帧可渲染65000顶点,表示雪的网状物...

2018-12-24 21:58:58 14355 10

原创 聊聊引擎底层如何实现Forward+Phone渲染

现在的渲染技术由于硬件的提升,算法也得到了极大的改进,Forward,Deferred在成熟引擎中已经得到了广泛的应用,比如Unity,UE4等。下面我们将其应用到我们自己的引擎中,先看看Phone算法。Phone算法首先要了解Phone模型算法的作用,它是计算镜面反射光强的模型,它的计算公式是一个叫Phong Bui Tuong提出的,我们的Shader编程也是根据此算法实现的,看下面的公...

2018-12-21 13:22:08 1168

原创 聊聊引擎底层如何实现SSAO渲染

SSAO被称为屏幕空间环境光遮蔽,它的原理是:对于铺屏四边形(Screen-filled Quad)上的每一个片段,我们都会根据周边深度值计算一个遮蔽因子(Occlusion Factor)。这个遮蔽因子之后会被用来减少或者抵消片段的环境光照分量。遮蔽因子是通过采集片段周围球型核心(Kernel)的多个深度样本,并和当前片段深度值对比而得到的。高于片段深度值样本的个数就是我们想要的遮蔽因子。SS...

2018-12-19 09:01:56 1749

原创 聊聊引擎底层如何实现Deferred延迟渲染

Deferred又称为延迟渲染,它是后处理渲染技术的一种,网上也有相关的定义说明,它主要是采用GBuffer实现的,GBuffer可以存储的信息相比ZBuffer更多,这也是Unity引擎也提供了Deferred渲染,只是在手机端比较耗,所以大部分开发者并不是特别关注,其实它在引擎渲染里面也是非常重要的。程序我们还需要自己手动实现一下,这样对技术的理解能够更深入。我们在上篇博客中给读者介绍了关于...

2018-12-17 19:22:48 1515 1

原创 聊聊引擎底层如何编译Shader脚本

由于现在的引擎都比较完善,开发者无需关心引擎底层的技术,只负责写逻辑即可,比如Unity引擎和UE4引擎,它们的出现确实为开发者提供了便利,但是对开发者来说,个人认为并不是好事情,它导致了大部分开发者只能做些没有任何科技含量的东西,请允许我这么说,因为我们只是在如何用好引擎方面大动脑筋,而不是去思考如何改造引擎。更要命的是使用的引擎都是国外开发的,人家是做底层的技术,换句话说,核心技术掌握在人家手...

2018-12-15 16:51:21 3054 3

原创 应聘客户端主程需做哪些准备

上一篇博客给读者介绍了关于应聘引擎程序或者资深引擎需要做的准备工作,本篇博客给哪些想应聘客户端主程的开发者提供一些建议。客户端主程市场需求也是非常大的,我本人以前也应聘过客户端主程,也招聘过客户端主程,下面将一些心得分享给读者,以供参考。项目要求客户端主程就是要对整个项目负责,对主程的要求就比较多,比较杂了,因为他关乎整个项目的成功与失败,所以必须要谨慎对待。项目也分很多种类,比如MMOR...

2018-12-12 18:04:09 2755 1

原创 应聘引擎程序需做哪些准备

每个人进入企业都面临面试这一关,不同的职业面试的内容是不同的,即使都是IT游戏行业,也分多个职业,从技术角度讲,有客户端,服务器,引擎程序。它们面试的内容也是不同的,工欲善其事必先利其器,要想进入某个领域必须武装好自己,不打无准备的仗。下面就给读者分享关于面试引擎程序的一点心得。简历简历是门面,相信每个面试者都写过简历,应聘引擎的程序员在简历中最好能体现自己以前做过引擎编写工作,或者使用某...

2018-12-11 07:21:24 1262 2

原创 利用运动学实现导弹仿真飞行

利用Unity实现导弹飞行的算法网上案例很多,本篇博客主要给读者介绍如何将所学算法运用到项目开发的实战教程。我们将使用运动学原理实现仿真,这意味着我们将只在计算中使用速度,而不考虑物体上的质量和其他作用的物理力,这些力会影响物体的运动,比如阻力。为了能够模拟导弹击中目标,我们将考虑以下变量:发射速度,发射角度,导弹距离目标的距离。很多程序员学过算法,学过数据结构,但是在项目开发过程中就不会灵...

2018-12-10 14:15:11 7829 3

原创 手把手教你成为Shader编程实战达人—GPU

GPU编程市场应用GPU全称是Graphics Processing Unit,中文成为图形处理器,所以GPU编程也叫图形学编程,它是针对的显卡中的芯片编程,游戏引擎的更新换代发展的一个重要阶段是显卡芯片的出现,引擎的渲染能力得到极大提升。GPU 加速器于 2007 年由 NVIDIA® 率先推出,引擎的更新换代也是跟GPU硬件息息相关的,从固定流水线变成了可编程流水线,画面品质得到了质的飞跃...

2018-12-08 10:53:43 3069

原创 手把手教你成为Shader编程达人系列概述

最近,很多大型的游戏公司或者虚拟现实公司,都在大量招聘资深的GPU渲染引擎程序员或者引擎主管等。对于从事游戏开发的程序员,尤其是客户端程序员掌握GPU编程非常重要,由于项目分工的缘故,大部分程序员并没有接触到GPU编程,认为GPU编程很高深,在项目开发过程中并不关心,只负责写逻辑,这样会严重阻碍自己的职业发展。作为一名从事IT行业多年的老程序员,要想在行业立足,技术要做到全面,当然自己最拿手的技术...

2018-12-07 08:07:47 3701 13

原创 手把手教你架构3D引擎高级篇系列八

本篇博客是给读者介绍引擎底层如何与Lua进行结合,方便开发者直接使用脚本编程,为什么选择Lua,通常开发者会使用Json,XML,txt等等。相比Lua有哪些优点呢?a、除了Lua库,在没有使用其他库可以使用。b、可以在文件中使用不同的公式,例如:some_variable = math.sqrt(2)* 2c、它非常轻巧,速度快d、它是在MIT许可下换句话说代码是开源的,因此我们可以以任...

2018-12-03 21:14:45 1027

原创 手把手教你架构3D引擎高级篇系列七

前面封装了数据结构中常用算法,接下来给读者封装一个好用的东西——委托。使用过Unity开发的人知道,我们经常在项目中使用委托,类似我们说的回调。使用C#编写委托,其实质是什么呢?其实就是把委托函数加到一个列表中。我们在实现引擎的委托时,首先要清楚我们的委托面对的是所有类型的,因此很容想到模板。在实现委托时,我们分两个模块,一个是委托,一个是委托列表。在这里我们还是用了模板指针,C++模板这块技术,...

2018-12-01 16:57:24 1647 1

原创 手把手教你架构3D引擎高级篇系列六

前面给读者介绍了哈希表的封装,其实我们实现的是数据结构的算法,

2018-11-23 14:06:11 844

原创 手把手教你架构3D引擎高级篇系列五

内存管理给读者介绍完了,其实我们只是简单的用了一个HashTable哈希表对资源做了一个统一管理,哈希表系统有自己的封装,因为我们是自己写引擎,在此我们自己实现了一遍,自己封装的优点是便于控制,缺点是要优化好效率问题。我们的Hash表采用了迭代器的形式,由于该类代码量比较大,在此只把关键的几个函数显示一下,其他内容读者可自行查看。说说它的设计思想,我们实现时,并不是简单的实现一个数据结构,而是将它...

2018-11-07 10:58:47 1425 4

原创 D3D渲染技术之混合案例

在本篇内容中,我们将介绍用于获得特定效果的一些混合因子组合, 在这些示例中,我们仅查看RGB混合。 Alpha混合的处理方式类似。无颜色写入假设我们想要保持原始目标像素的原样,而不是覆盖它或将其与当前光栅化的源像素混合。 这可能很有用,例如,如果您只想写入深度/模板缓冲区,而不是后台缓冲区。 为此,请将源像素混合因子设置为D3D12_BLEND_ZERO,将目标混合因子设置为D3D12_BLE...

2018-11-05 09:57:01 1051 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除