<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[leon]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/leonwei</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; leonwei]]></copyright><item><title><![CDATA[从gles，vulkan到metal（二）-- 同步和内存]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/132764327</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/132764327</guid><author>leonwei</author><pubDate>Fri, 08 Sep 2023 17:21:44 +0800</pubDate><description><![CDATA[在vulkan和metal上同步API的使用都是经常性的操作，metal设计上很轻量，但确实vulkan的重难点之一。但是，GPU上的管线状态不只有PS，比如我们有时候要保证VS的顺序，且有时要保证基于整个pixel甚至基于整个Framebuffer的写入顺序，他们不是局限在单个sample内，并且GPU上还有出color写入外的很多其他的内存读写操作，所有其余这些顺序都需要我们自己去保证，其余的这些顺序主要分成两类，在某种管线阶段区间指令的执行顺序，以及内存的访问顺序。]]></description><category></category></item><item><title><![CDATA[从Gles、Vulkan到Metal（一）-- 数据和提交]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/131068542</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/131068542</guid><author>leonwei</author><pubDate>Tue, 06 Jun 2023 15:35:13 +0800</pubDate><description><![CDATA[一直想整理下关于移动端图形编程API的文档。如果说图形编程的内功是计算机图形学的诸原理和算法，那么外功就是实实在在的硬件API。当我们设计引擎的渲染硬件接口层的时候，要面对移动端图形API的三座大山Gles，Vulkan，Metal。这系列文档的一个主要目的是把这三大API放在一起学习，但还有一个目的是试图比较总结他们背后的共性和差异，以试图更容易理解图形API设计上的通用思想，帮助大家一起练好外功。]]></description><category></category></item><item><title><![CDATA[Frame Pacing]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/130954679</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/130954679</guid><author>leonwei</author><pubDate>Tue, 30 May 2023 18:37:00 +0800</pubDate><description><![CDATA[要实现文章开头所说的3个目标，我们需要在正确的时机进行提交，垂直同步是一个无情的准时发生的机器，我们需要自己去找准这个时间，为了找准这个时间， 在android系统上我们需要关注的还有当前系统的刷新率，vsync的发生时间，surfaceflinger的工作时间（包括它present的deadline，上次present的时间），APP自己的cpu时间和gpu时间。所以提交时机很重要，如果我们能够保证等待前一阵GPU处理完才真正的提交，上面的情形就会被纠正过来，如图。渲染上实际上就多延迟了一个同步周期。]]></description><category></category></item><item><title><![CDATA[Vulkan下多线程渲染设计]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/128265453</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/128265453</guid><author>leonwei</author><pubDate>Sat, 10 Dec 2022 15:50:43 +0800</pubDate><description><![CDATA[之前项目一直大范围的运行在vulkan之上，但是比较可惜的是面对vulkan这种新一代的api，很多先进的特性并没有被实际运用，一个最关键的特性就是多线程渲染的能力，最近把vulkan的多线程渲染实现到了项目中，取得了不错的性能提升，也刚好很久没有写文章，特此记录下这里面的一些实现，思考和棘手的问题（本文基于UE4实现）。]]></description><category></category></item><item><title><![CDATA[基于UE4的多RHI线程实现]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/120747993</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/120747993</guid><author>leonwei</author><pubDate>Wed, 13 Oct 2021 17:17:21 +0800</pubDate><description><![CDATA[1 UE4的现有多线程架构
UE的多线程渲染结构如下图， 它有几个特点

game thread 负责逻辑tick，render thread 负责culling、batching和draw api的生成， rhithread 负责drawapi的执行
game和render两个线程最多可以差一帧，即前后两帧的gam额和render可以并发，通过Fframeendsync做同步
render 和rhi之间的关系是帧内的合作关系，即不能达到前后两帧render和rhi的并发，前一帧的drawapi最多在下一帧]]></description><category></category></item><item><title><![CDATA[UE高级性能剖析技术（三）-- Android内存分布和优化]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/105459382</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/105459382</guid><author>leonwei</author><pubDate>Sat, 11 Apr 2020 21:00:04 +0800</pubDate><description><![CDATA[在基于ue的手游开发中，经常会发现android系统的实际内存占用要比我们预估的高很多，优化内存的占用就要先明确究竟每1k实际的内存占用分布在哪里及如何运用工具有效的获取真实的内存组成，本文将结合项目经验详细介绍这个部分，并据此分别介绍一些常用的瓶颈和优化。最终了解你的android程序中的每1k内存。


	Android程序内存分配原理
	
Android内存管理基础



Android内...]]></description><category></category></item><item><title><![CDATA[PBR以及在Disney和UE渲染模型中的使用]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/104044122</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/104044122</guid><author>leonwei</author><pubDate>Sun, 19 Jan 2020 18:52:54 +0800</pubDate><description><![CDATA[PBR，基于物理的渲染模型，是当前主流游戏引擎使用的真实感3D渲染模型，在游戏场景渲染中，它用更接近光学物理的方式，建立一个对全场景材质的大一统shader。大一统shader的好处包括：统一美术制作管线加快制作效率，对动态光照环境的更耗的适应性，减少shader维护的负担等。本文总结了PBR的理论知识以及具体在Disney和UE中的典型应用。

1 PBR的理论基础

1.1光波

光波能量描述...]]></description><category></category></item><item><title><![CDATA[UE高级性能剖析技术（2） -CPU帧率瓶颈和卡顿]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/100099096</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/100099096</guid><author>leonwei</author><pubDate>Tue, 27 Aug 2019 14:41:06 +0800</pubDate><description><![CDATA[CPU上帧率低和卡顿是性能优化中最易出现的一部分，尤其对于手游，提到卡，就大概率是在CPU上出现的问题，CPU上的卡顿一般是卡逻辑或是卡渲染，本篇将详细系统的介绍基于UE的手游对CPU瓶颈的剖析方法。

低帧率和卡顿

首先低帧率和卡顿是两种完全不同的瓶颈类型，虽然归根到底都是某个函数执行的过慢引起的，但是定位和解决方法并不一样。低帧率瓶颈是需要统计一段时间内CPU把更多的时钟耗费在了哪些函数上...]]></description><category></category></item><item><title><![CDATA[UE高级性能剖析技术（1）-- RHI线程（渲染提交)]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/95527109</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/95527109</guid><author>leonwei</author><pubDate>Thu, 11 Jul 2019 22:14:57 +0800</pubDate><description><![CDATA[在最前面

基于UE的手游客户端的性能主要由这七大部分构成：CPU逻辑，CPU渲染，图形API（提交），GPU渲染，内存，带宽，加载时间。这几个基本元素又会合力衍生出一些新的性能指标，例如功耗（往往同gpu负载和带宽紧密相关）。同时这七部分又构成一个闭合的木桶，最长的一块是主要瓶颈，并且瓶颈可以在这几块转移流动。作为开发者我们解决性能问题的步骤一般都是按照做性能剖析,解读结果，定位问题，增加剖析代...]]></description><category></category></item><item><title><![CDATA[基于深度学习的渲染  Deep Learning Based Rendering]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/88344991</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/88344991</guid><author>leonwei</author><pubDate>Fri, 08 Mar 2019 12:39:24 +0800</pubDate><description><![CDATA[此文作为siggraph17的《Deep Learing：The Futrure of Real-Time Rendering？》的整理笔记。

就像《必然》中说的那样，如同这个时代的互联网一样，AI已然成为下个时代的主角， AI让计算机拥有对复杂算法的决策能力，是解决很多复杂问题的终极武器。它尤其擅长解决这样的问题：复杂的、可并行计算的、能用已有经验推测任意结果并...]]></description><category></category></item><item><title><![CDATA[颜色 /About Color  --图形学的B面（二）]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/85006175</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/85006175</guid><author>leonwei</author><pubDate>Fri, 14 Dec 2018 17:00:05 +0800</pubDate><description><![CDATA[                                                                                                                                                                                        --图形学的B面（二）

本文谈...]]></description><category></category></item><item><title><![CDATA[UE4 Render System Sheet（UE4渲染系统概览）]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/84821849</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/84821849</guid><author>leonwei</author><pubDate>Wed, 05 Dec 2018 10:28:29 +0800</pubDate><description><![CDATA[UE4的渲染系统代码量庞大，复杂，我们写UE渲染相关的功能需求的时候，经常需要反复翻阅它里面的数据结构，pipeline，这里用一张图，把UE4的渲染系统的脉络梳理进来，让大家都能更方便的修改UE引擎的渲染功能

(你需要点下放大镜)

 



 ...]]></description><category></category></item><item><title><![CDATA[RTR4 拾遗（一）-- 图形学的B面]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/84821309</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/84821309</guid><author>leonwei</author><pubDate>Wed, 05 Dec 2018 10:22:19 +0800</pubDate><description><![CDATA[        RTR（Real Time Rendering）对于游戏图形开发来说是本宝书，最近对新版的RTR4进行重读，知识需要经过自己的消化重表述才能成为自己的，所以在这里对里面一些重要内容以我自己的理解重新整理，这篇是关于第8章的Light and Color。它对应于RTR3的第7章advanced shading，后面会陆续更新。写本连载的文，希望自己能够坚持下去

 

图形学的Se...]]></description><category></category></item><item><title><![CDATA[图形编程中常用浮点数及其精度剖析]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/82805103</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/82805103</guid><author>leonwei</author><pubDate>Wed, 26 Sep 2018 17:55:34 +0800</pubDate><description><![CDATA[    图形学中经常要涉及使用各种格式的浮点数类型，如float,half,也会经常用到各种格式的浮点数类型PixelFormat，例如R10G10B10A2，R11G11B10，RGBHalf...。在合适的情况下使用合适的浮点数类型，是保证效率和效果的基础。虽然有些是大学本科课程，但牢记于脑海并时刻保持对每种浮点数精度的敏感也不易，此文总结并详细讨论一下各种常见浮点数的精度，范围，精度分布及应...]]></description><category></category></item><item><title><![CDATA[谈谈法线图的压缩]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/79893445</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/79893445</guid><author>leonwei</author><pubDate>Wed, 11 Apr 2018 21:51:40 +0800</pubDate><description><![CDATA[      贴图压缩是游戏开发中常见的一个问题，不过说到法线图的压缩，其实里面就有一些特殊的问题要处理。前段时间做了一次贴图通道的优化，打算用两个通道表示法线图并且和其他通道合并到一张图里，以减少采样次数。这个过程中陆续挖掘了一些问题，记录一下。为什么要用3个通道来表示法线？        我们通常会把法线贴图归一化成一个3元向量n（x,y,z）来表示，常识上来看，因为这个n是归一化的，所以用两个...]]></description><category></category></item><item><title><![CDATA[针对移动端特性的渲染优化（续）]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/79616972</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/79616972</guid><author>leonwei</author><pubDate>Tue, 20 Mar 2018 11:14:18 +0800</pubDate><description><![CDATA[    本文接着之前的文章《基于移动端tbdr特性gpu的渲染优化》，继续补充一些移动端渲染优化的点尽量使用direct rendering 模式，很多游戏使用了很多的后期处理，所以需要先渲染到贴图上，然后再一遍遍的blit 到屏幕上，blit操作是一个昂贵的操作，它涉及到对当前framelist data 的立即绘制（理论上framelist data越晚绘制越好，越利于延迟渲染），然后额外的f...]]></description><category></category></item><item><title><![CDATA[针对移动端TBDR架构GPU特性的渲染优化]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/79298381</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/79298381</guid><author>leonwei</author><pubDate>Fri, 09 Feb 2018 14:49:25 +0800</pubDate><description><![CDATA[    TBDR(Tile-Base-Deffered-Rendering)是现代移动端gpu的设计架构，它同传统pc上IR（Immediate-Rendering）架构的gpu在硬件设计上是差别很大的。手游正是运行在这些移动端的TBDR架构上，所以手游的渲染优化在硬件的角度上讲有其独特之处，甚至一些特点和优化点与PC是大相径庭的，基于硬件的优化是应用程序优化很重要的一部分，最近阅读了一些tbdr...]]></description><category></category></item><item><title><![CDATA[Sparse Virtual Texture （虚拟贴图技术）]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/78435898</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/78435898</guid><author>leonwei</author><pubDate>Fri, 03 Nov 2017 18:32:54 +0800</pubDate><description><![CDATA[Virtual texture 技术用于解决3D场景中大量贴图而内存有限的情况，它的思想可以参考虚拟内存。	虚拟内存技术中，物理内存是有限的，但是虚拟内存可以远远大于物理内存，虚拟内存被抽象成一个个page即分页文件，page可以真实的载入到物理内存中，也可以存在与磁盘文件上，寻址时采用的内存地址采用一个表来映射到具体的的内存位置，如果映射到物理内存里，即hit，如果在磁盘的page上，将其载入物]]></description><category></category></item><item><title><![CDATA[textrue坐标到uv的映射]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/78317369</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/78317369</guid><author>leonwei</author><pubDate>Mon, 23 Oct 2017 11:58:30 +0800</pubDate><description><![CDATA[前两天被shader里面一个奇怪的bug困扰了一下，其实就是一个最简单的问题，我有一个rgbafloat的贴图，只能点采样，因为存储的不是颜色是数据不能线性插值，而这时候我已知当前点的texture坐标x y和贴图尺寸w h如何计算这个位置的uv供shader采样？       我直接使用了x/（w-1），  y/（h-1），结果是有问题的，如果x的取值是【0， w-1】，把他除以w-1，变成了 ]]></description><category></category></item><item><title><![CDATA[简单理解spherical harmonic lighting（球谐光照）]]></title><link>https://blog.youkuaiyun.com/leonwei/article/details/78269765</link><guid>https://blog.youkuaiyun.com/leonwei/article/details/78269765</guid><author>leonwei</author><pubDate>Wed, 18 Oct 2017 10:07:45 +0800</pubDate><description><![CDATA[1.球谐光照球谐光照在现代游戏图形渲染领域应用很广，用于快速的模拟复杂的实时光照，例如unity中的light probe以及一些不重要的实时光源，可以用球谐光照快速的计算。球谐光照的优点是运行时的计算量与光源的数量无关，如果参数足够却可以较好的模拟实时的光照结果。球谐光照的原理不仅涉及图形学，概率论，信号分析，微积分等大量复杂数学公式，这里对这个球谐光照的背景和应用做个最简单的理解]]></description><category></category></item></channel></rss>