自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

leon

【腾讯光子招聘ue引擎开发 有意向私信】

  • 博客(163)
  • 资源 (3)
  • 收藏
  • 关注

原创 UE高级性能剖析技术(三)-- Android内存分布和优化

在基于ue的手游开发中,经常会发现android系统的实际内存占用要比我们预估的高很多,优化内存的占用就要先明确究竟每1k实际的内存占用分布在哪里及如何运用工具有效的获取真实的内存组成,本文将结合项目经验详细介绍这个部分,并据此分别介绍一些常用的瓶颈和优化。最终了解你的android程序中的每1k内存。 Android程序内存分配原理 Android内存管理基础Android内...

2020-04-11 21:00:04 1417 2

原创 PBR以及在Disney和UE渲染模型中的使用

PBR,基于物理的渲染模型,是当前主流游戏引擎使用的真实感3D渲染模型,在游戏场景渲染中,它用更接近光学物理的方式,建立一个对全场景材质的大一统shader。大一统shader的好处包括:统一美术制作管线加快制作效率,对动态光照环境的更耗的适应性,减少shader维护的负担等。本文总结了PBR的理论知识以及具体在Disney和UE中的典型应用。1 PBR的理论基础1.1光波光波能量描述...

2020-01-19 18:52:54 1796

原创 UE高级性能剖析技术(2) -CPU帧率瓶颈和卡顿

CPU上帧率低和卡顿是性能优化中最易出现的一部分,尤其对于手游,提到卡,就大概率是在CPU上出现的问题,CPU上的卡顿一般是卡逻辑或是卡渲染,本篇将详细系统的介绍基于UE的手游对CPU瓶颈的剖析方法。低帧率和卡顿首先低帧率和卡顿是两种完全不同的瓶颈类型,虽然归根到底都是某个函数执行的过慢引起的,但是定位和解决方法并不一样。低帧率瓶颈是需要统计一段时间内CPU把更多的时钟耗费在了哪些函数上...

2019-08-27 14:41:06 2891 1

原创 UE高级性能剖析技术(1)-- RHI线程(渲染提交)

在最前面基于UE的手游客户端的性能主要由这七大部分构成:CPU逻辑,CPU渲染,图形API(提交),GPU渲染,内存,带宽,加载时间。这几个基本元素又会合力衍生出一些新的性能指标,例如功耗(往往同gpu负载和带宽紧密相关)。同时这七部分又构成一个闭合的木桶,最长的一块是主要瓶颈,并且瓶颈可以在这几块转移流动。作为开发者我们解决性能问题的步骤一般都是按照做性能剖析,解读结果,定位问题,增加剖析代...

2019-07-11 22:14:57 3902 4

原创 基于深度学习的渲染  Deep Learning Based Rendering

此文作为siggraph17的《Deep Learing:The Futrure of Real-Time Rendering?》的整理笔记。就像《必然》中说的那样,如同这个时代的互联网一样,AI已然成为下个时代的主角, AI让计算机拥有对复杂算法的决策能力,是解决很多复杂问题的终极武器。它尤其擅长解决这样的问题:复杂的、可并行计算的、能用已有经验推测任意结果并...

2019-03-08 12:39:24 1903

原创 颜色 /About Color --图形学的B面(二)

                                                                                                                                                                                        --图形学的B面(二)本文谈...

2018-12-14 17:00:05 598

原创 UE4 Render System Sheet(UE4渲染系统概览)

UE4的渲染系统代码量庞大,复杂,我们写UE渲染相关的功能需求的时候,经常需要反复翻阅它里面的数据结构,pipeline,这里用一张图,把UE4的渲染系统的脉络梳理进来,让大家都能更方便的修改UE引擎的渲染功能(你需要点下放大镜)  ...

2018-12-05 10:28:29 1305 1

原创 RTR4 拾遗(一)-- 图形学的B面

        RTR(Real Time Rendering)对于游戏图形开发来说是本宝书,最近对新版的RTR4进行重读,知识需要经过自己的消化重表述才能成为自己的,所以在这里对里面一些重要内容以我自己的理解重新整理,这篇是关于第8章的Light and Color。它对应于RTR3的第7章advanced shading,后面会陆续更新。写本连载的文,希望自己能够坚持下去 图形学的Se...

2018-12-05 10:22:19 1222

原创 图形编程中常用浮点数及其精度剖析

    图形学中经常要涉及使用各种格式的浮点数类型,如float,half,也会经常用到各种格式的浮点数类型PixelFormat,例如R10G10B10A2,R11G11B10,RGBHalf...。在合适的情况下使用合适的浮点数类型,是保证效率和效果的基础。虽然有些是大学本科课程,但牢记于脑海并时刻保持对每种浮点数精度的敏感也不易,此文总结并详细讨论一下各种常见浮点数的精度,范围,精度分布及应...

2018-09-26 17:55:34 1091

原创 谈谈法线图的压缩

      贴图压缩是游戏开发中常见的一个问题,不过说到法线图的压缩,其实里面就有一些特殊的问题要处理。前段时间做了一次贴图通道的优化,打算用两个通道表示法线图并且和其他通道合并到一张图里,以减少采样次数。这个过程中陆续挖掘了一些问题,记录一下。为什么要用3个通道来表示法线?        我们通常会把法线贴图归一化成一个3元向量n(x,y,z)来表示,常识上来看,因为这个n是归一化的,所以用两个...

2018-04-11 21:51:40 2433

原创 针对移动端特性的渲染优化(续)

    本文接着之前的文章《基于移动端tbdr特性gpu的渲染优化》,继续补充一些移动端渲染优化的点尽量使用direct rendering 模式,很多游戏使用了很多的后期处理,所以需要先渲染到贴图上,然后再一遍遍的blit 到屏幕上,blit操作是一个昂贵的操作,它涉及到对当前framelist data 的立即绘制(理论上framelist data越晚绘制越好,越利于延迟渲染),然后额外的f...

2018-03-20 11:14:18 2046

原创 针对移动端TBDR架构GPU特性的渲染优化

    TBDR(Tile-Base-Deffered-Rendering)是现代移动端gpu的设计架构,它同传统pc上IR(Immediate-Rendering)架构的gpu在硬件设计上是差别很大的。手游正是运行在这些移动端的TBDR架构上,所以手游的渲染优化在硬件的角度上讲有其独特之处,甚至一些特点和优化点与PC是大相径庭的,基于硬件的优化是应用程序优化很重要的一部分,最近阅读了一些tbdr...

2018-02-09 14:49:25 9333 3

原创 Sparse Virtual Texture (虚拟贴图技术)

Virtual texture 技术用于解决3D场景中大量贴图而内存有限的情况,它的思想可以参考虚拟内存。 虚拟内存技术中,物理内存是有限的,但是虚拟内存可以远远大于物理内存,虚拟内存被抽象成一个个page即分页文件,page可以真实的载入到物理内存中,也可以存在与磁盘文件上,寻址时采用的内存地址采用一个表来映射到具体的的内存位置,如果映射到物理内存里,即hit,如果在磁盘的page上,将其载入物

2017-11-03 18:32:54 8576

原创 textrue坐标到uv的映射

前两天被shader里面一个奇怪的bug困扰了一下,其实就是一个最简单的问题,我有一个rgbafloat的贴图,只能点采样,因为存储的不是颜色是数据不能线性插值,而这时候我已知当前点的texture坐标x y和贴图尺寸w h如何计算这个位置的uv供shader采样?       我直接使用了x/(w-1),  y/(h-1),结果是有问题的,如果x的取值是【0, w-1】,把他除以w-1,变成了

2017-10-23 11:58:30 2243

原创 简单理解spherical harmonic lighting(球谐光照)

1.球谐光照球谐光照在现代游戏图形渲染领域应用很广,用于快速的模拟复杂的实时光照,例如unity中的light probe以及一些不重要的实时光源,可以用球谐光照快速的计算。球谐光照的优点是运行时的计算量与光源的数量无关,如果参数足够却可以较好的模拟实时的光照结果。球谐光照的原理不仅涉及图形学,概率论,信号分析,微积分等大量复杂数学公式,这里对这个球谐光照的背景和应用做个最简单的理解

2017-10-18 10:07:45 12597 3

原创 基于GPU Skin的骨骼动画Instance的实现

很多游戏类型需要在场景中表现大量的角色,而这些角色大多使用骨骼动画的方式来表现,传统的基于CPU蒙皮的方式在手机上对角色数量的限制非常大,本文实现了一种基于GPU Skin的方式,并且结合GPU Instance技术,将大量同类角色的蒙皮到绘制全交给GPU并行进行,并合并了同类角色的批次,本文对着种做法的性能做了测试和分析。

2017-08-18 20:39:14 8959

原创 Unity中depth pass的优化以及谈谈unity中的Framebuffer

最近遇到个很小但是很有意思的问题,在unity中如何从屏幕copy depth texutrue出来用? 这个问题的来源是我发现在unity在移动平台上为了得到深度图,通常需要一个单独的pass,例如我们用到的一些后处理特效需要用刀场景深度信息,我们通过把camera的flag设置为depth tex 打开,unity就会在每帧用一个单独的pass绘制深度图,这其实很浪费,我们队全场景的顶点提交了两次,增加了大量drawcall。为了说明解决这个问题的思路,我们从framebuffer说起。

2017-06-29 21:28:00 6744 6

原创 Unity中基于Gpu Instance进行大量物体渲染的实现与分析(一)

在3D渲染中,尤其是现代3D游戏中,我希望能够绘制越来越多的场景物体,这对于设备(尤其是移动端)的性能是个极大的考验,对于新一代的渲染api,都逐渐支持了Gpu Instancing技术,这对于大量相同物体的绘制提供了一个新的方案,在最新的unity5中也提供了对gpu instance 的支持,我尝试在unity5中利用gpu instance 技术来表现大量的植被,并对其性能进行了分析,以探索在3D手游中gpu instance的应用的可行性。

2017-06-15 09:52:37 32281 5

原创 优化shader程序的一些tips

在写shader的时候,其实一些写法对于其执行影响非常大,而且由于gpu和cpu在架构上的不同,代码的优化思想也不一样,最近一直在写几个shader,为了性能问题,查阅了很多资料,把一些tips总结下来。

2017-02-17 19:24:58 6474

原创 Unity3d中渲染到RenderTexture的原理,几种方式以及一些问题

虽然RenderTexture这个技术是个普遍使用的技术,但是用好它还是要理解他的底层原理和避免一些使用的问题。这里就UNITY3d中的RenderTexure介绍Rendertexture的底层原理和使用时可能遇到的坑和效率问题。

2017-02-10 18:24:46 49013 14

转载 do{...}while(0)的意义和用法

转自http://www.spongeliu.com/415.htmllinux内核和其他一些开源的代码中,经常会遇到这样的代码:do{ ...}while(0)这样的代码一看就不是一个循环,do..while表面上在这里一点意义都没有,那么为什么要这么用呢?实际上,do{...}while(0)的作用远大于美化你的代码。查了些资料,总结起来这样写主要有以下几点好处:1、辅助定义复杂的宏,避免

2017-02-03 11:51:49 2822 6

原创 扩展欧几里得定理的证明和代码

扩展欧几里得定理的证明和代码

2017-01-25 19:07:16 1658 1

原创 Alpha To Coverage

Opengles3.0新增加了一个Alpha To Coverage的特性,这是一个对Alpha Test的优化,那么这里要搞清楚Alpha to Coverage 是个什么东西。     AlphaTest 和AlphaBlend都可以用来表现(全)透明的效果,对于草,树这种,我们会使用AlphaTest表现,把不需要显示的地方镂空处理,但是AlphaTest有一个最大的问题就是边缘的硬边,导致

2016-11-09 15:13:35 3306 2

原创 opengles中的Tessellation(曲面细分)

从opengles3.2开始,支持了一项新的特性,Tessellation Shader,这是一个新的shader,发生在顶点处理阶段,曲面细分可以在显卡上动态生成新的顶点和面,这在支持gles3.2的设备上,可以用来表现模型的lod,我们不用传输大量的顶点数据给显卡,而使显卡能够根据一定规则自动生成细节层次更多的顶点。也有应用结合高度图生成细节更加复杂的模型,因为不用再cpu这边准备高面数的模型

2016-10-21 16:44:23 3090 1

原创 Unity5和unity4的AssetBundle打包策略对比分析

项目开始逐渐迁移到unity5上,原有用4的打包流程在5上依然是work的,基本是不用改代码的,但是5对打包做了一些改进,今天在考虑要不要改一下项目的打包代码,使用5的所谓的“”新的方式“,但是仔细研究了一下,法线其实是没必要的,5的打包没解决什么根本问题,下面我对4 和5 的打包策略进行一下对比分析,并说一下我们目前大题的打包方法。

2016-09-14 16:35:18 4007 2

原创 作为技术面试官,我是怎样评价一个游戏开发人员的素质的

很长一段时间,一直在负责工作室的客户端程序招聘,招聘工作已经进行了大半年,面过的程序几十个,但是最终成功发了offer的单手可数,在这过程中,pass掉了很多人,有技术总监,有大厂数年经验者,也有更多的打酱油的,HR那边可能觉得我们这边的通过率不高,究其原因,我想说现在的程序员很多,非常多,但是能够称得上研发者的取值却很难找,能称得上有经验的游戏研发人员更是屈指可数,大部分的程序员确实满足不了我们工作室的最低要求。

2016-09-10 11:38:34 16909 23

转载 C#中的弱引用(WeakReference

转载自:http://www.cnblogs.com/bayonetxxx/archive/2009/06/02/1494728.html我们平常用的都是对象的强引用,如果有强引用存在,GC是不会回收对象的。我们能不能同时保持对对象的引用,而又可以让GC需要的时候回收这个对象呢?.NET中提供了WeakReference来实现。弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存

2016-09-08 14:41:03 5606

转载 C#中的析构函数

转载自http://www.cnblogs.com/paper/archive/2009/07/31/1535998.html析构函数 析构函数(destructor) 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。以C++语

2016-09-08 14:15:58 10225

原创 VR渲染的一些优化

今天读了Alex Vlachos 先后在15和16年GDC写的一些关于在valve上做的vr 渲染的一些优化技巧,虽然很多东西没有能吸收,把理解的总结一下:1. 预测渲染:因为vr对渲染的延迟特别敏感,vr设备可能每时每刻都在动,而正常来说gpu上渲染出来的结果一定都会比cpu计算提交的时候玩,看到的总是和当前所处位置不一致的图像,延迟越大就越会头晕,valve解决的思路是大量应用了预测,等于在在

2016-09-05 20:15:35 1217

转载 请问FXAA、FSAA与MSAA有什么区别?效果和性能上哪个好?

转载自 知乎 文刀秋二 的回答  http://www.zhihu.com/question/20236638/answer/14438218首先所有MSAA, SSAA, FXAA, TXAA等都是抗锯齿(Anti-Aliasing)技术。锯齿的来源是因为场景的定义在三维空间中是连续的,而最终显示的像素则是一个离散的二维数组。所以判断一个点到底没有被某个像素覆盖的时候单纯是一个“有”或者“没

2016-09-05 18:46:26 12604

原创 OpenGLES编程思想

最近在看gles的reference,想多了解一下gles的底层,gles是opengl在khronos在嵌入式设备上的图形硬件的软件访问接口,很多东西和opengl似曾相似,但是和opengl又有很大的不同,最新的标准是gles3.2,标准文档非常长,如果不是写引擎没必要对每个接口烂熟于心,但是为了能够了解他,我对他的编程思想做个总结,最重要的是理解gles的设计思路,然后在使用的时候也必将容易找到相关接口。所以本文基本不会列出gles的每个接口,不会记录讲解每个接口,而是希望能够通过总结gles的设计思

2016-09-01 15:33:57 4359 4

原创 UNITY的drawcall计算

1.正常情况下,用最简单的光照或无光照的shader渲染一个mesh, 一个dc2.unity5对烘焙做了修改,烘焙的物体仍然可以接受实时光,这样如果烘焙的物体再受一个实时光,那就是2个dc,unity4不是3.多一盏实时光,就会多一个drawcall,如果使用了deferred shading,则不一样,一些光源会被合并到后面计算,dc会合并减少4.开了实时阴影,会根据情况增加2-4

2016-07-12 16:56:56 3059

原创 UGUI的事件机制

UGUI使用了新的event机制,我们之前在NGUI中,为了处理ui的交互,通常是在ui组件挂载的mono上写onclick(),onpress()这些函数,换到ugui后,unity使用了新的event 机制。但是unity的文档解释的很乱,这里整理一下。

2016-06-16 20:28:14 4734

原创 Unity5动态加载烘培场景

有时候我们需要动态加载场景(比如场景比较大,或者一些无限重复的自动生成的场景),这时如果对场景又使用了烘培,那么在unity5里面就会有一些小问题。  1.在这种需求下我们一般会把场景物体存成一个预置,需要的时候加载进来,但是在unity5里面,物体的lightmap信息(index和偏移)并不会记录在预置上,这导致你直接把预置加载进来看不到烘培效果,这里要这样,在加载之后手动的赋值这个lig

2016-06-13 15:48:37 5605

原创 opengles 简要流程

ref card :  https://www.khronos.org/files/opengles20-reference-card.pdf

2016-06-06 18:38:25 833

原创 IOS上的UIApplicationInvalidInterfaceOrientation crash

最近在游戏中加入一个打开本地相册选择图片上传的功能,在ios上使用了UiImagePicker,去显示相册,但是在iphone上运行的时候,会crash,并给出这样的信息:'UIApplicationInvalidInterfaceOrientation', reason: 'Supported orientations has no common orientation with the a

2016-04-08 18:38:05 3927

原创 Unity3D中继承在ios上的UIApplicationDelegate

有时我们需要修改Unity为我们生成的在ios上的代码,通常可能要修改主要的是UnityAppController这个类,他是ios的UIApplicationDelegate。我们能想到的方法就是能够继承这个类,这在unity里是支持的,做法是这样的:        编写你自己的类型CustomAppController,继承自UnityAppController,然后把你的CustomAp

2016-04-08 18:16:43 3205 2

原创 vr的延迟和渲染效率优化与Nvidia VRWorks

vr现在正处于风生水起的阶段,但是vr的性能一直是大问题,最主要的问题就是响应延迟,玩家改变位置到这一位置的图像被cpu提交,gpu渲染,同步刷新到头部显示设备上,这中间的延迟会导致用户的头晕,减少相应的延迟,是vr从硬件到软件一直在优化的问题。Nvidia针对这个,新推出了VRWorks组件,这是一套软硬件结合的改善响应延迟以及提高vr渲染效率的方案,从硬件上做了一些改进和加速

2016-03-23 21:49:56 5215

原创 Unity3D插件开发

给51cto录制的UNITY3d插件的课程,包含android平台完整的开发demo和真机测试过程http://edu.51cto.com/course/course_id-5436.html

2016-03-21 11:37:16 1145

原创 Unity中Android和Ios平台的crash reporter(崩溃报告采集与上传)

Crash Report,这在大型软件开发领域是很常见的功能,就是能够当程序崩溃退出后,能够将崩溃时的信息,最好是携带dmp文件发送给服务器,这样开发人员既可以获得分发出去的客户端的崩溃率统计,也可以针对出现的错误进行及时的纠正,之前在PC的端游时代,这是很常见的做法,最近进行了在手游上的关于crash report的相关研究,并且为项目编写了一个相对完善的CrashReport模块。

2016-02-23 20:44:15 8539

计算机图形学

计算机图形学

2014-10-15

Game Programming Gem 8

Game Programming Gem 8

2014-10-15

数字图像处理(K.R.Castkeman).rar

数字图像处理领域最权威的教科书,事从事该领域研究和开发的必备

2008-10-04

空空如也

空空如也

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

TA关注的人 TA的粉丝

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