TinyRenderer 3:ZBuffer 这一节是为了解决上一节课里简单的计算平面法向量和光照夹角后绘制造成的错误,引入ZBuffer来计算每个像素实际上在屏幕空间的可见性 这里由于这个渲染器还没有进行投影等相关操作,所以ZBuffer的计算比较取巧,原文的解释也并不是很充分,暂时没有去深究具体的推倒 并且wiki给出的源码版本似乎是对不上的 这里简单实现了一下: 1234567891011121314151617181920212223 2022-07-02 CG #Renderer #CG
TinyRenderer 2:三角形光栅化和背面剔除 画三角形 上节已经会画线了,三角形还能不简单吗 假设我有ABC三个点组成三角形,我AB画一条线,BC画一条线,AC画一条线,结束! = =目前写C处于UE和之前C风格的混沌叠加态了,能跑就行(不是 123456void DrawTriangle(Point<float> A, Point<float> B, Point<float> C, TGAImage&a 2022-07-02 CG #Renderer #CG
UE4:关于Texture Streaming的一部分总结 前言 Leader告诉我可以看下Texture Streaming相关,这里总结一下下 日常费解.jpg UE4的Texture Streaming 纹理流送系统或流送器是引擎的一部分,负责增大和减小每个纹理的分辨率。该系统使您可以拥有良好的视觉质量, 同时有效地管理可用内存。(来自UE4官方文档机翻) 看完这句话我的脑子里冒出来的问题大概有: 为什么要有流送系统? 它流送的是啥? 2022-07-01 UE4 #UE4 #Optimization
UE4:移动端俯视角远距离摄像机的级联阴影优化 前言 项目中使用了方向光级联阴影,但是leader跟我说这个级联阴影的ShadowMap的利用率很低,让我去看看能不能搞一搞,然鹅本人光照和阴影啥都没看过(甚至第一次听说CSM)当时真的是: 于是抓紧时间看了一下相关的知识和UE4的源码部分,算是一定程度解决了问题,本文作为这次任务的小总结。 级联阴影简介 级联阴影是对ShadowMap的一种优化,理想情况下,空间中的每一个阴影的像素都对应到 2022-06-20 UE4 #UE4 #Rendering #Mobile #Shadow
UE4:移动端级联阴影简要分析 前言 假装过一下移动端渲染管线的源码,其实是看一下移动端的固定方向光源对移动物体生成阴影的部分。 本文重点在UE4 关于CSM阴影的这部分源码,其他的略过 之前从来没有看过这部分源码,本人基础也很薄弱,rendering方面能力不足,本文仅仅是给我的脑子梳理一下,避免稀里糊涂的看完不出三天就忘记了…… 学而不思则罔~ 目录: 前言 流程梳理 简单描述 详细流程 源码学习 移动端渲染主 2022-06-16 UE4 #UE4 #Rendering #Mobile #Shadow
UE4:4.27版本PSO变化 前言 最近项目升级了4.27版本,发现PSO部分似乎又有了什么改动,于是决定去看一下ReleaseNotes,对比一下相对4.26版本的变化。 ReleaseNotes 其中与PSO相关的几点如下: 安卓 BUG FIX 修复了在PSO缓存处理期间,如果传入的PSO在PSO缓存加载开始之前已经实例化则可能触发GLES断言的问题 Rendering 新特性 实现了可选的非阻塞光线跟 2022-06-12 #UE4
UE4:AnimSequence曲线和Tracks复制 前言 本文在4.27版本下完成 在编辑AnimSequence的时候,不同的动画可能需要服用Curves和AdditiveLayerTracks,为了提高效率,增加了一下原本编辑器不存在的复制粘贴方法 Curves 查看方法 在AnimSequenceBase.h文件中UAnimSequenceBase类有一个成员变量:RawCurveData 12345/** * Raw uncompr 2022-05-25 #UE4 #C++ #UE4 Editor
UE4:ShadecodeLibrary拆分 前言 UE4的项目设置的Packaging中提供了Share Material Shader Code,开启选项后会把ShaderCode从每一个材质中拿出单独的放在一个.ushaderbytecode文件中,目的是减少包体大小,该文件会在游戏启动时加载。 如果是用UE4的Pak分包机制,那么打包过程会处理掉每个Pak中需要的Shader,不用自己去关心ShaderArchive的生成。如果是更 2022-05-09 #UE4 #Rendering #Material #Shader
UE4:运行时获取UFont相关数据 最近项目中要排查运行时字体的使用和内存占用情况,稍微看了一下相关的东西,简单整理一下,目测没啥用 UFont相关类 去官网查了一些得知,UFont在运行时和非运行时有不同的缓存,运行时缓存包含了一些TTF文件,这些文件组合成了一个复合字体。 然后发现UFont有一个成员函数GetResourceSizeEx,继承自Uobject,大概看一下这个函数: 1234567/** * Get the 2022-03-12 #UE4 #C++ #Program
UE4:Log综合 基本使用 UE的log相关的一些tips,用于索引,部分细节忘记的时候快速查阅用 1UE_LOG(LogTemp, Warning, TEXT("Your message")); LogTemp是Log的Category,可以自定义 Warning是Log的显示级别,常用的有Display、Warning、Error 后面是Log的内容 Log显示级别 显示级别 Ship 2022-03-12 #UE4 #Program