自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(143)
  • 资源 (2)
  • 收藏
  • 关注

原创 从gles,vulkan到metal(二)-- 同步和内存

在vulkan和metal上同步API的使用都是经常性的操作,metal设计上很轻量,但确实vulkan的重难点之一。但是,GPU上的管线状态不只有PS,比如我们有时候要保证VS的顺序,且有时要保证基于整个pixel甚至基于整个Framebuffer的写入顺序,他们不是局限在单个sample内,并且GPU上还有出color写入外的很多其他的内存读写操作,所有其余这些顺序都需要我们自己去保证,其余的这些顺序主要分成两类,在某种管线阶段区间指令的执行顺序,以及内存的访问顺序。

2023-09-08 17:21:44 1197 1

原创 从Gles、Vulkan到Metal(一)-- 数据和提交

一直想整理下关于移动端图形编程API的文档。如果说图形编程的内功是计算机图形学的诸原理和算法,那么外功就是实实在在的硬件API。当我们设计引擎的渲染硬件接口层的时候,要面对移动端图形API的三座大山Gles,Vulkan,Metal。这系列文档的一个主要目的是把这三大API放在一起学习,但还有一个目的是试图比较总结他们背后的共性和差异,以试图更容易理解图形API设计上的通用思想,帮助大家一起练好外功。

2023-06-06 15:35:13 2091 1

原创 Frame Pacing

要实现文章开头所说的3个目标,我们需要在正确的时机进行提交,垂直同步是一个无情的准时发生的机器,我们需要自己去找准这个时间,为了找准这个时间, 在android系统上我们需要关注的还有当前系统的刷新率,vsync的发生时间,surfaceflinger的工作时间(包括它present的deadline,上次present的时间),APP自己的cpu时间和gpu时间。所以提交时机很重要,如果我们能够保证等待前一阵GPU处理完才真正的提交,上面的情形就会被纠正过来,如图。渲染上实际上就多延迟了一个同步周期。

2023-05-30 18:37:00 1757

原创 Vulkan下多线程渲染设计

之前项目一直大范围的运行在vulkan之上,但是比较可惜的是面对vulkan这种新一代的api,很多先进的特性并没有被实际运用,一个最关键的特性就是多线程渲染的能力,最近把vulkan的多线程渲染实现到了项目中,取得了不错的性能提升,也刚好很久没有写文章,特此记录下这里面的一些实现,思考和棘手的问题(本文基于UE4实现)。

2022-12-10 15:50:43 4023 3

原创 基于UE4的多RHI线程实现

1 UE4的现有多线程架构UE的多线程渲染结构如下图, 它有几个特点game thread 负责逻辑tick,render thread 负责culling、batching和draw api的生成, rhithread 负责drawapi的执行game和render两个线程最多可以差一帧,即前后两帧的gam额和render可以并发,通过Fframeendsync做同步render 和rhi之间的关系是帧内的合作关系,即不能达到前后两帧render和rhi的并发,前一帧的drawapi最多在下一帧

2021-10-13 17:17:21 6008

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

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

2020-04-11 21:00:04 8662 5

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

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

2020-01-19 18:52:54 5013 2

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

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

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

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

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

2019-07-11 22:14:57 15692 9

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

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

2019-03-08 12:39:24 4418 1

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

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

2018-12-14 17:00:05 1462

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

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

2018-12-05 10:28:29 5001 3

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

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

2018-12-05 10:22:19 2339

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

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

2018-09-26 17:55:34 3672

原创 谈谈法线图的压缩

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

2018-04-11 21:51:40 4651 2

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

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

2018-03-20 11:14:18 3067 4

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

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

2018-02-09 14:49:25 15704 8

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

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

2017-11-03 18:32:54 14207 1

原创 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 3302

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

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

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

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

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

2017-08-18 20:39:14 14048 3

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

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

2017-06-15 09:52:37 50304 4

原创 优化shader程序的一些tips

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

2017-02-17 19:24:58 7434

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

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

2017-02-10 18:24:46 77239 18

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

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

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

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

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

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

原创 Alpha To Coverage

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

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

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

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

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

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

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

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

转载 C#中的弱引用(WeakReference

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

2016-09-08 14:41:03 6601

转载 C#中的析构函数

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

2016-09-08 14:15:58 17836

原创 VR渲染的一些优化

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

2016-09-05 20:15:35 1465

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

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

2016-09-05 18:46:26 20343

原创 OpenGLES编程思想

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

2016-09-01 15:33:57 4956 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 3461

原创 UGUI的事件机制

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

2016-06-16 20:28:14 5591

原创 Unity5动态加载烘培场景

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

2016-06-13 15:48:37 5889

原创 opengles 简要流程

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

2016-06-06 18:38:25 1037

原创 Unity3D中继承在ios上的UIApplicationDelegate

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

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

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

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

2016-03-23 21:49:56 5921

Game Programming Gem 8

Game Programming Gem 8

2014-10-15

空空如也

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

TA关注的人

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