当前位置: 首页 > news >正文

UE官方教程笔记02-实时渲染基础下

对官方教程视频[官方培训]02-实时渲染基础下 | 陈拓 Epic的笔记

没听懂的地方就瞎写


反射

实时渲染中反射是一个非常有挑战的特性

UE中有多种不同的方案,各有各的优势和缺点

  • 反射捕获

  • 屏幕空间反射

  • 平面反射

  • Lumen

  • RT Reflection

反射捕获

  • 在指定位置捕获一张Cube Map

  • 需要预计算

  • 快速

  • 不精确

  • 只能捕获一定距离范围内的物体

反射捕获文档

反射捕获的使用方法是在场景中放置reflection capture actor,actor会捕获一张自身位置的cube map,在渲染时会以这张cube map作为光源来计算反射

反射捕获使用的是一张预先计算的立方体贴图,因此运行速度很快,但并不精确,且只有局部的效果,相机离捕获位置越近则越精确

只开启反射捕获的测试,帧率是高了但效果一言难尽:

反射捕获的立方体贴图分辨率可以在项目设置中修改,影响反射效果清晰度:

如果场景中有多个反射捕获且半径较大出现了反射捕获重叠的情况,重叠区域会导致像素进行多次计算,使性能损耗变大

平面反射

  • 并不常见,也不常常使用,仅限在指定平面上

  • 在某些设置下可能会有很大的性能损耗(每帧都会捕获画面)

  • 适合需要精确反射的表面(例如镜子)

平面反射文档

平面反射需要在场景添加Planar Reflection Actor,并包裹需要反射的平面,项目设置中的"全局剪切平面"也需要打开

使用平面反射的地板效果,与反射捕获相比更为准确:

平面反射本质上也是一个摄像机,以平面的视角将几乎整个场景又重新渲染了一次,所以对性能的损耗非常大

屏幕空间反射

  • 默认开启的反射系统

  • 对任何物体都有影响

  • 准确

  • 输出有噪声,性能损耗较大

  • 只反射视野范围内可见的物体

屏幕空间反射文档

屏幕空间反射是引擎中唯一默认激活的反射系统

通过控制台开启或关闭屏幕空间反射:

r.SSR.Quality 0//关闭
r.SSR.Quality 4//开启

后期盒子中也有相关设置:

一个比较明显的问题是屏幕空间反射只能反射我们屏幕里能看到的内容,屏幕看不到的内容不会进行绘制,如下图在屏幕边缘的倒影反射

反射性能提示

  • 如果未经过Cook,反射捕获会在打开关卡时进行,导致加载变慢

  • 反射捕获区域如果有很多重叠,会导致多次着色从而性能变差

  • 反射捕获的分辨率可以在系统设置中调节

  • 天空光为整个关卡提供了低成本的反射捕获

  • 必要时才使用平面反射的实时捕获和SSR

光照

光源类型文档

静态光源 (Static Light)

是指在运行时不能以任何方式改变或移动的光源。它们仅在光照贴图中进行计算,一旦处理完成后,不会再有进一步的性能影响。可移动对象不能和静态光源进行交互,所以静态光源的用处是非常有限的

可移动光源 (Movable Lights)

产生完全动态的光照和阴影,可以改变光源位置、旋转、颜色、衰减、半径等属性,几乎光源的任何属性都可以修改。它们产生的光照不会烘焙到光照贴图中,也不会产生间接光照效果

固定光源(Stationary Lights)

保特固定位置不变的光源,但可以在其他方面进行变更,例如亮度和颜色。这是它们与静态光源的主要不同之处,静态光源无法在游戏时以任何方式进行变更。然而,应该注意的是,在运行时对亮度进行修改仅会影响直接光照。间接(反射)光照由于是通过 Lightmass 进行预计算的,所以不会改变

静态光照和阴景

  • 与反射一样,光照和阴影在实时计算也很困难

  • 部分光照、阴影的计算会在预计算阶段完成,在runtime与实时光照结合

  • 虚幻引擎中有数十种不同的光照和阴影方案

Lightmap(光照贴图)

理解虚幻引擎中的光照贴图

静态光照主要通过Lightmap实现,Lightmap是一张烘焙了光照和阴影的贴图,在计算光照时与BaseColor相乘

Lightmap原理示意图:

在虚幻引擎中使用 Lightmass 工具生成 Lightmap,多张Lightmap 会合并到 atlas 中,可以逐个 mesh 调整 Lightmap 密度

场景中的Lightmap可以在World Setting 中的Lightmass下的light map中查看

贴图的分辨率可以在物体的light map resolution override属性修改,分辨率越高则阴影越清晰

在视口中可以可视化查看场景物体的Lightmap分辨率情况

对于静态光照,不管是移动了光源还是物体,都需要重新构建烘焙光照贴图

Volumetric Lightmap

Lightmass会生成表面光照贴图,用于表现静态对象上的间接光照。但是,动态的对象 (例如角色)也需要一种接受间接光照的方法。这种方法就是在构建时将所有点的预计算光照存储在名为体积光照贴图的空间中,然后在运行时用于动态对象的间接光照的插值。

如下图所示,在空间中记录了一系列的点,这些点上以求谐系数的形式保存了当前这个位置的光照信息,在绘制动态物体时,取靠近物体的点对他们的光照结果进行插值

使用控制台代码显示当前场景中的Volumetric Lightmap采样点:

ShowFlag.VisualizeVolumetricLightmap 1

Lightmass

虚幻引擎使用Lightmass来构建Lightmap

  • Lightmass 是一个独立程序,由引擎编辑器在烘焙时调用

  • 支持网络分布式渲染

  • 渲染质量可以通过一些选项设置

GPU Lightmass

在UE4.27添加了GPU Lightmass,大大减少了计算、构建和生成复杂场景光照数据所需的时间,其速度可与基于CPU的Lightmass使用Swarm进行分布式构建时的速度相媲美。此外还提供具有交互性的新工作流,可以实时编辑场景、重新计算和重新构建光照,基于CPU的Lightmass系统无法使用此工作流

GPU Lightmass全局光照

静态光照质量总结
  • 可以处理间接和全局光照

  • 真实的阴影效果包括软阴影

  • 光照和阴影的质量取决于Lightmap的分辨率和UV分布

  • 由于UV布局的关系,光照还可能显示出接缝

  • Lightmap分辨率有上限,巨大的模型可能效果不佳

  • 一旦烘焙完成,在运行时静态的光源和物体无法移动

静态光照性能总结
  • 在编辑器下预先计算,并将信息储存在Lightmap中

  • 计算非常高效,但占用更多内存

  • 需要一定的时间去预计算

  • 每次修改光照和静态物体,需要重新构建光照

  • 模型需要Lightmap UV,因此需要额外的步骤去处理

静态光照性能提示
  • 静态光照总是以完全相同的速度渲染

  • 无论有多少静态光源,烘焙之后的渲染速度是一样的

  • Lightmap分辨率会影响内存,但不影响帧率

  • 烘焙速度会受以下几点影响

  • Lightmap分辨率模型

  • 光源数量

  • 烘焙选项

  • 光照影响范围

动态光照和阴影

动态阴影
  • 常规动态阴影

  • 级联阴影

  • 逐对象阴影

  • 距离场阴影

常规动态阴影(阴影非常锐利)

Shadow Acne(阴影失真)

阴影贴图分辨率不足时会导致阴影失真,光源的阴影偏移设置有助于减少这些类型的瑕疵

阴影偏差文档

级联阴影(Cascaded Shadow Maps)
  • 阴影贴图的分辨率低,锯齿严重

  • 视锥体分割

  • 方向光、不同距离

级联阴影贴图文档

传统的阴影贴图方法是将所有的物体全部渲染在一张阴影贴图中,对于近距离的物体,贴图分辨率是不够的,级联阴影对视椎进行分割,使用多张阴影贴图,离相机近的地方使用精细的阴影贴图,远的地方使用粗糙的,既优化了阴影的效果,也保证了渲染的效率

逐对象阴影
  • 针对可移动物体

  • 针对固定光源 (位置固定,颜色、光强可变)

针对单独的每一个物体渲染它的阴影贴图,同时保证了分辨率和贴图的使用率

//教程里只是一句带过,文档里也没找到具体说明

距离场阴影(Distance Field Shadows)
  • 可以生成软阴影,不需要针对模型运行阴影pass

  • 从空间中待着色的点出发,沿着光线方向前进

  • 由于需要直接光照,光源需是固定或可移动光源

  • 只对静态网格体有效,需离线生成Mesh Distance Field(网格体距离场)

(Mesh Distance Field在UE5中默认开启,但在UE4中默认关闭)

  • 同时开启情况下的优先级: 级联阴影 > 距离场阴影 > 传统阴影

  • 运行实时生成Global Distance Field

  • Ray Marching

距离场阴影文档

其他阴影

Contact Shadow -- 对于小的物体有较好的细节

Capsule Shadow -- 用简化的模型来渲染阴影

阴影性能提示
  • 渲染阴影的性能损耗大,通常需要降低渲染质量来补偿

  • 动态光照不会对大部分的内容产生间接或全局光照

  • 动态光照不会生成“真正的”软阴影,只是通过模拟实现

  • 动态光照在场景中看起来更“真实”,光线非常锐利

动态光照
  • 使用像素着色器计算

  • 点光源用一个球形模型来渲染,在球投影内像素会进行光照渲染

  • 方向光对全屏像素进行渲染

动态光照性能提示
  • 动态光照在延迟渲染中性能损耗相对少

  • 像素越多性能越慢

光源本身并不是问题和损耗的所在,阴影才是,损耗源于像素的着色运算,因此像素越多性速度越慢

  • 光源离相机越近,受影响的像素越多,性能也就越慢

  • 光源半径需要尽可能小,避免重叠

点光源如果有重叠,重叠部分会进行多次着色计算

Lumen和VSM

Lumen是虚幻引擎5全新的全动态全局光照和反射系统,使用了多种光线追踪方法来处理全局光照和反射

VSM是对应的阴影解决方案

UE5创建的工程默认开启了Lumen,如果是从UE4升级的项目需要进行设置:

  1. 项目设置中选择动态全局光照方法

  1. 项目设置中选择反射方法

  1. 项目设置中开启网格距离场

Lumen支持特性
  • Color bleeding

  • Soft indirect shadow

  • Multi-bounce indirect illumination

  • Emissive materia

  • Skylight emissive

Color bleeding

Color bleeding使被光照射到的物体表面的颜色会影响周围物体表面的颜色

Soft indirect shadow

Soft indirect shadow(间接软阴影)可以使场景中没有受到直接光照的物体投下阴影,传统方法是使用AO贴图或屏幕空间的AO算法来粗略估算阴影的产生方式,UE5中Lumen完全取代了UE4中的SSAO,消除了实时生成AO贴图的需求,并提供了精确且柔和的阴影

AO: Ambient Occlusion,三维图形渲染中用来表示物体之间相互影响效果的环境光遮蔽贴图,主要用于改善阴影

Multi-bounce indirect illumination

Multi-bounce indirect illumination(多次反弹间接照明)通过追踪前一帧的光照来计算当前帧的光照,这意味着光照结果是当前帧和前几帧混合在一起的结果

r.Lumen.Radiosity 0//关闭间接光照

Lumen原理说明

处理全局光照最常用的方法就是光线追踪,光线追踪通过追踪光线来模拟光线和物体相交时的效果并生成图像,全局光照需要大量的追踪来生成间接漫反射、软阴影和二次反射等

Lumen使用了混合的追踪方法,首先它会追踪屏幕上的光线,但只追踪屏幕上的光线无法覆盖全部场景,所以Lumen还大量使用了硬件加速的光线追踪,为了支持老一些的设备,Lumen还通过有向距离场生成简化的场景来加速追踪,因此也提供了光线追踪的软件方案

另外由于直接采样追踪到的三角形会有巨大的消耗,Lumen通过采样表面缓存的方式来加速计算光照结果,通过Lumen Sence我们可以看到Lumen是如何照亮这个场景的,可以在可视化选项中查看Lumen Sence:

Lumen正是使用这些内容来生成全局光照、阴影和反射的,Lumen scene的内容也会被直接用来计算场景的反射,不再需要在场景里放置反射捕获,一旦在项目中启用了Lumen反射,它也会完全取代屏幕空间反射和光线追踪反射

UE4的屏幕空间反射和光线追踪反射会直接忽略粗糙材质,而在Lumen中能够为粗糙的表面计算出更好的反射结果

半透明

  • 延迟渲染管线难以处理半透明材质

  • 半透明渲染在渲染流程的后半段

  • 使用前向渲染管线渲染半透明物体

半透明是延迟渲染器的弱项之一,也是实时渲染中最大的性能影响因素之一,不仅仅是虚幻引擎,任何延迟渲染引擎都会遇到这个困难

通常会将半透明渲染放在渲染流程中非常靠后的阶段,在前向渲染中渲染透明效果要简单得多,引擎使用的办法就是在前向渲染中完成半透明物体的渲染,然后将结果和延迟渲染的结果进行合并

前向渲染:
每个几何体从顶点着色器到像素着色器,输出到图元缓冲区后,再进行下一个物体的渲染,即一个一个的渲染,场景有多少物体就渲染多少次

优点
1.前向渲染是从头到尾走完一个着色模型,所以对于着色器的支持更好,可以使用更多种类着色器,和更多功能
2.特别适合半透明物体,每个物体的渲染都是单独的,不会出现透明物体渲染错误的情况

缺点
1.无效渲染太多,如前面的物体挡住了后面的物体,被挡住的部分相机看不见,但是依旧被渲染了出来
2.无法支持过多光源,每个物体都会走一遍着色器,每个着色器都会去进行光源的计算,如100个光源100个着色模型,那么光源就会被计算10000次

延迟渲染:
得到深度信息后,对场景里的所有物体一窝蜂一起进行渲染

优点
1.支持多光源,只渲染可见像素不会无效计算

缺点
1.支持的shader种类少
2.延迟渲染储存的信息大,带宽开销高
3.处理半透明物体比较蛋疼

半透明性能提示

  • 渲染半透明材质的对性能影响很大

  • 像素被多层半透明材质覆盖,性能损耗很大

  • 渲染排序也会增加性能的损耗

后期处理

后期处理效果文档

后期处理就是在渲染流程的最未端应用的一个视觉特效,顾名思义这就是它为什么被称为后期处理,后期处理很大程度上也依赖于像素着色器,并且也是利用合成来实现,它通过再度使用G-buffer来计算各种效果

  • Bloom (泛光)

泛光是真实摄像机的光照瑕疵,它通过再现光源和反射性表面周围的辉光来增加所渲染图像的真实感

  • DOF (Depth of Field,景深)

景深根据焦点前后的距离为场景应用模糊效果。该效果用于根据深度将观看者的注意力吸引到镜头中的特定主体上。它还可以增加一种美感,使渲染的图像看起来更像照片或胶片

  • Lensflare (镜头光晕)

镜头光晕效果可模拟在查看明亮物体时由于摄像机镜头缺陷导致的光散射

  • Vignette (暗角)

暗角效果创建一个无边框窗口,使图像朝边缘淡出

  • Tonemapping (色调映射)

色调映射功能的目的是将广泛的高动态范围(HDR)颜色映射到显示器能够输出的低动态范围(LDR),可以将色调映射的过程想象成一种模拟胶片对光线的反应的方法

  • Motion Blur (动态模糊)

动态模糊基于对象运动情况使对象模糊。在摄影与电影中(如一系列帧),动态模糊源于捕获图像之前的对象移动,从而产生可见的模糊效果

  • Exposure (曝光)

曝光类目包含的属性用于选择要使用的曝光方法类型,以及指定场景在给定时间内应该变得多亮或多暗

自定义的后期处理材质需要把材质域设置为后期处理

实时光线追踪

Ray Tracing(光线追踪)指追踪从摄像机出发的光线在场景中多次反弹的过程,光线的生成和反弹符合物理规律,使得渲染效果非常逼真

从相机发射一条光线交于场景中某一点,将这个点与场景中的光源连线,如果连线被其他物体阻挡,则这个点处于阴影中,如果与某个光源的连线没有被其他物体阻挡,则这个点是被该光源照亮的

如果一条光线射到一个光滑的表面上,可以根据这个光滑表面的法线计算出它的反射光线,再将反射光线所交的点的颜色值赋给这个点

光线追踪文档

性能调试(Profiling)

  • Stat命令

stat unit
查看不同线程执行的耗时stat game
查看game线程stat initviews
查看draw线程stat gpu
查看gpu线程
使用Ctrl+Shift+,快捷键也可以显示GPU查看器

  • GPU Visualizer

Unreal Visualizer是一个独立的可执行程序,可以帮助开发者来识别瓶颈用于性能优化,还可以用于收集分析和显示引擎发出的数据,还可以轻松添加用户自身的分析数据

可以从里面活获得各个函数运行的时间、运行的次数、当前帧率、各线程使用情况等信息

  • Unreal Insight

  • Frontend session

这俩教程视频里没展开,我也懒得去了解了,相比性能优化还是先弄明白怎么把功能实现比较重要

相关文章:

UE官方教程笔记02-实时渲染基础下

对官方教程视频[官方培训]02-实时渲染基础下 | 陈拓 Epic的笔记没听懂的地方就瞎写反射实时渲染中反射是一个非常有挑战的特性UE中有多种不同的方案,各有各的优势和缺点反射捕获屏幕空间反射平面反射LumenRT Reflection反射捕获在指定位置捕获一张Cube Map需要预计算…...

grep命令——在文件中搜索指定的文本模式

grep是英文词组“global search regular expression and print out the line”的缩写,意思是全局搜索正则表达式,并将结果输出。 通常将grep命令与正则表达式搭配使用,命令选项作为搜索过程中的补充或对输出结果的筛选,命令模式十…...

数据结构刷题(二十二):90子集II、491递增子序列、46全排列

1.子集II题目链接思路:这是一道标准的组合问题数组排序去重。依然是使用回溯。注意:去重代码只需要判断同一树层上是否有重复,同组合总和II(https://blog.csdn.net/xiaomingming99/article/details/129396344)解法&…...

AI+人类,实现高效网络安全

导语 聊天机器人和生成式人工智能(如 ChatGPT)突然成为主流让很多人感到担忧。很多人开始担忧,人工智能取代人的时代已经到来。 幸运的是,事实并非如此。 更有可能的情况是,人类将与 AI 合作创建工作角色的混合模型。…...

牛客小白月赛68【A-E】

文章目录A.Tokitsukaze and New Operation【模拟】B.Tokitsukaze and Order Food Delivery【模拟、特判】C.Tokitsukaze and Average of Substring【暴力、前缀】D.Tokitsukaze and Development Task【记忆化搜索】E.Tokitsukaze and Colorful Chessboard【预处理,二…...

WIFI P2P架构

WI-FI P2P定义架构3个组件组织结构技术标准P2P DiscoveryDevice Discovery(扫描)流程p2p probe 管理帧Group Formation(组网)GO Negotiation(GON)流程P2P Public Action管理帧Provision Discovery&#xff…...

架构师之中台思维_系统发展之路_结果和抽象之间平衡的艺术

父文章 如何成为一名架构师,架构师成长之路_golang架构师成长之路_个人渣记录仅为自己搜索用的博客-CSDN博客 任何系统的发展都是如此. 1. 业务增长 2. 烟囱增长 _ 结果优先 _ 太快去抽象抽象不好 3. 太多的烟囱, 3.1 抽象复用为平台 3.2 面对更多新的业务,提供不同的枚举值…...

23届非科班选手秋招转码指南

1.秋招情况介绍 1.1自我介绍 我是一名23届非科班转码选手,本硕均就读于某211院校机械专业,秋招共计拿下12份offer,包括大疆创新、海康威视、联发科技、理想汽车、中电28、阳光电源等各行业、各种性质企业的意向。主要的投递岗位为嵌入式软件…...

《传感器技术》考试学习笔记

文章目录一、选择题二、简答题1.什么是传感器?传感器的共性是哪些?2.差动变气隙式传感器电感传感器的灵敏度推导过程是什么(推导公式)?与单极性进行比较它们的优缺点是哪些?3.霍尔传感器如何进行微位移测量…...

第十五章 opengl之高级OpenGL(模板测试)

OpenGL模板测试模板函数物体轮廓模板测试 当片段着色器处理完一个片段后,模板测试就会开始执行。类似于深度测试,模板测试也可能会丢弃片段。被保留的片段会进入深度测试,可能会丢弃更多的片段。 模板测试是根据模板缓冲来进行的。一个模板缓…...

【C语言蓝桥杯每日一题】—— 单词分析

【C语言蓝桥杯每日一题】—— 单词分析😎前言🙌单词分析🙌总结撒花💞😎博客昵称:博客小梦 😊最喜欢的座右铭:全神贯注的上吧!!! 😊作者…...

Web2:Tomcat

二.Web2:Tomcat 1.Tomcat的配置 2.Tomcat的工作方式 3.Tomcat服务器的虚拟映射 4.Tomcat部署到IDEA中使用 二.Web2:Tomcat 1.Tomcat的配置 ①安装下载Tomcat 配置好JAVA_HOME启动时保证端口号8080不被占用 ②下载后的目录结构 bin 启动或关闭to…...

C++语法规则2(C++面向对象)

继承 面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。 当创建一个类时,您不需要重新编写新的数据成员和成…...

第八批国家药品集中采购-(附药品集采目录明细下载)

2023年3月2日,‘国家组织药品联合采购办公室’发出了《全国药品集中采购文件》,宣告了第八批国家组织药品集中采购工作正式开展,其公告中还包含三个附表分别为‘采购品种目录’、‘各地区首年约定采购量’、‘各采购品种首年约定采购量’&…...

政府工作报告连提9年科技创新 企业研发如何“又快又好”

今年的政府工作报告, “科技创新” 这一描述连续出现7次,这也是自2015年开始, “科技创新” 这一概念在全国“两会”政府工作报告中连续九年被提到。政府工作报告指出,科技政策要聚焦自立自强,完善新型举国体制&#x…...

GM8773C 是一款 1:2 DSI 桥接芯片,可实现 4 路进 8 路出转换器功能、视频分离器功能。

GM8773C 是一款 1:2 DSI 桥接芯片,可实现 4 路进 8 路出转换器功能、视频分离器功能。芯片内集成了一个 4 路单一链路的 MIPI DSI 接收器和 8 路双链路 MIPI DSI 发送器。 接 收 器 每 路 可 以 支 持 到 2.0Gbps/lane , 可 以 最 高 支 持 到…...

Java常用包名和说明

包名主要功能java.applet提供了创建applet需要的所有类java.awt.*提供了创建用户界面以及绘制和管理图形、图像的类java.beans.*提供了开发Java Beans需要的所有类java.io提供了通过数据流、对象序列以及文件系统实现的系统输入、输出java.lang.*Java编程语言的基本类库java.ma…...

dva01-初识

背景 React 本身只是一个 DOM 的抽象层,使用组件构建虚拟 DOM。如果开发大应用,还需要解决一个问题。 通信:React 只提供了一种传参手段,后续数据变化非常麻烦,无法适用于大应用。数据流:每次要更新数据&…...

信捷 XDH Ethercat A_WRITE指令

本指令修改指令轴的当前位置。 什么时候需要用本指令呢?换句话说,用本指令后,坐标原点修改了偏移了。如果在回原点后,往前走了一段距离x,如果是用绝对模式执行把位置修改成0,那么下一次开始每次做绝对运动A_MOVEA&…...

Spring Cloud ( Eureka集群的搭建 )

操作步骤: 添加主机映射创建Eureka服务 导入依赖编写启动类编写yml复制服务实例测试一、添加主机映射 以 Windows系统为例,如果要构建集群,需要修改 hosts 文件,为其添加主机名的映射。 打开C:\Windows\System32\drivers\etc\h…...

Python re 模块

正则表达式是一种小型、高度专业化的编程语言。适用于任何语言,在 Python 中通过 re 模块实现。正则模式被编译成一系列的字节码,然后由 C 语言编写的匹配引擎执行。给字符串模糊匹配 正则用于匹配字符串,匹配字符串可以完全匹配和模糊匹配&…...

为什么越来越多的人开始学习大数据

因为根据国内的发展形势,大数据未来的发展前景会非常好,前景好需求高,自然会吸引越来越多的人进入大数据行业 我国市场环境处于急需大数据人才但人才不足的阶段,所以未来大数据领域会有很多的就业机遇。 2022年春季,…...

【C++】C++核心编程(二)---引用

1.基本语法 作用:给变量起别名 语法:数据类型 &别名 原名(int &b a,其中别名与原名的数据类型必须一致) 注意事项: 引用必须初始化引用在初始化后,就不可以再改变了 代码演示&am…...

原型设计模式

介绍 原型模式 在Java中,原型模式是一种创建型设计模式,它允许通过复制一个现有对象来创建一个新对象,而不是通过创建新的对象来初始化一个对象,原型模式是一种基于克隆的设计模式,通过复制现有对象的数据来创建新的对象. 原型模式需要实现Cloneable接口并重写Object类中的c…...

JVM结构-类加载(类加载子系统,类加载的角色,类加载的过程,类加载器分类,双亲委派机制,类的主/被动使用)

JVM 结构-类加载2.1类加载子系统2.2类加载的角色2.3类加载的过程2.3.1加载2.3.2链接2.3.3初始化2.4类加载器分类2.4.1 引导类加载器2.4.2扩展类加载器2.4.3应用程序类加载器2.5双亲委派机制2.6类的主动/被动使用2.1类加载子系统 类加载器子系统负责从文件系统或者网络中加载 cl…...

vcpkg私有port的创建和使用

1,准备环境: 系统:windows 系统 2, 安装vcpkg 步骤一 :先git clone下载下来vcpkg文件夹 命令:git clone “https://github.com/Microsoft/vcpkg.git” 步骤二:添加vcpkg环境变量 例如下载目录:D:\woker_zj 步骤三:编译vcpkg 操作:双击bootstrap-vcpkg.bat 步骤四: 为…...

LeetCode——203. 移除链表元素

对于初学链表的学者来学,链表是比较困难的,这部分对指针结构体的要求比较高。我们通过练习是掌握知识的重要途经203. 移除链表元素 - 力扣(LeetCode)我们在数组中去除某元素是遍历一遍数组,如果某位置是要去除的元素&a…...

[Java Web]Request对象 | 超1w字带你熟悉Servlet中的request请求

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,输出优质文章 ⭐所属专栏:Java Web ⭐如果觉得文章写的不错,欢迎点个关注😉有写的不好的地方也欢迎指正,一同进步😁 目录 Reque…...

求一个补码表示数的原始值的三种方式

求一个补码表示数的原始值的三种方式假设 a(10010)2′complement−14a (10010)_{2complement}-14a(10010)2′complement​−14 方式1,通过补码求原始值公式求值(see article) x−xM−1∗2M−1∑i0M−2xi∗2ix-x_{M-1}*2^{M-1}\sum_{i0}^{M-2…...

【计算机组成原理】

第2章 运算方法和运算器 2.1 数据与文字的表示方法 2.1.1 数据格式 定点数的表示方法 定点纯小数纯小数表示范围定点纯整数定点表示法特点 浮点数的表示方法: 浮点的规格化表示:阶码、尾数、指数、基数IEEE754标准:单精度、双精度浮点数表…...

论文分享:图像识别与隐私安全

1、基于差分隐私框架的频域下人脸识别隐私保护算法Privacy-Preserving Face Recognition with Learnable Privacy Budget in Frequency Domain2、一种基于视觉密码学和可信计算的无密钥依赖的医学图像安全隐私保护框架A Privacy Protection Framework for Medical Image Securi…...

计算机基础小结

目录 ❤ 计算机基础编程 什么是编程语言? 什么是编程? 为什么要学习编程? ❤ 计算机组成原理 控制器 运算器 储存器 内存(主存) 外存 输入设备 输出设备 适配器 总线 机械硬盘 固态硬盘 ❤ 计算机操作系统 什么是操作系统? 什么是文件? 什么是应…...

Linux服务器还有漏洞?建议使用 OpenVAS 日常检查!

几乎每天都会有新的系统漏洞产生,系统管理员经常忙于管理服务器,有时候会忽略一些很明显的安全问题。扫描 Linux 服务器以查找安全问题并不是很简单的事情,所以有时候需要借助于一些专门的工具。 OpenVAS 就是这样一种开源工具,它…...

【Redis】P1 Redis - NoSQL

Redis - NoSQLSQL 与 NoSQL差别一:结构化 与 非结构化差别二:关联性 与 非关联性差别三:规范化查询语句 与 非规范化差别四:事务 与 无事务差别五:磁盘存储 与 内存存储RedisRedis 的安装当前数据库存储主要分为 关系型…...

Angular学习之ControlValueAccessor接口详解

ControlValueAccessor 是什么?为什么需要使用 ?下面本篇文章就来带大家了解Angular中的ControlValueAccessor组件接口,希望对大家有所帮助! ControlValueAccessor 是什么? 简单来说ControlValueAccessor是一个接口&am…...

【GORM】高级查询方案

【GORM】高级查询方案1.Struct & Map查询为空的情况2.FirstOrInit3.FirstOrCreate4.高级查询1.Struct & Map查询为空的情况 当通过结构体进行查询时,GORM将会只通过非零值字段查询,这意味着如果你的字段值为0,‘’,false…...

MFC 简单使用事件

功能三个按钮,一个静态框,默认值是0,增加减少按钮和退出按钮.增加减少按钮显示在静态框中.退出按钮退出软件.实验事件思路新建三个事件,add事件sub事件quit事件,一个按钮触发一个事件,静态框新建一个线程接受事件做出对应的改变.UI添加的代码就不具体说,具体说下事件的代码,这才…...

华为OD机试题 - 端口合并(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:端口合并题目输入输出示例一输入输出说明示例二输入输出说明示例…...

ECharts数据可视化--常用图表类型

目录 一.柱状图 1.基本柱状图 1.1最简单的柱状图 ​编辑 1.2多系列柱状图 1.3柱状图的样式 (1)柱条样式 (2)柱条的宽度和高度 (3)柱条间距 (4)为柱条添加背景颜色 ​编辑 2.堆…...

Flutter面试题解析-GridView详解与应用

一、前言Flutter 作为时下最流行的技术之一,凭借其出色的性能以及抹平多端的差异优势,早已引起大批技术爱好者的关注,甚至一些 闲鱼 , 美团 , 腾讯 等大公司均已投入生产使用。虽然目前其生态还没有完全成熟&#xff0…...

最全的论文写作技巧(建议收藏)

近10年来,笔者有幸多次参与教学论文的评审工作,在此,特将教学论文写作的步骤及相关问题整理汇总如下: 一、选定论题 (一)论题在文中的地位与作用 严格地讲,论文写作是从选定论题开始的。选题…...

面向对象设计模式:设计模式分类(创建型、行为型、结构型)

1. 创建型设计模式 单例模式:https://blog.csdn.net/qq_44992559/article/details/129348686工厂模式:https://blog.csdn.net/qq_44992559/article/details/115222311抽象工厂模式:https://blog.csdn.net/qq_44992559/article/details/12934…...

MySQL数据库迁移

考试系统的数据库一直是在我自己的服务器上面的, 但是最近,自己的服务器马上要过期了,里面的MySQL数据需要迁移出来,放在另外一个服务器上面。百度了几篇教程,也没研究太多,选了一种比较简单的方式进行迁移…...

Docker:关于 Dockerfile 编写优化的一些笔记整理

写在前面 分享一些 Dickerfile 构建镜像优化方式的笔记理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式&#…...

个性化营销:您需要知道的信息

个性化营销在现代企业中风靡一时。我们将剖析您需要了解的有关个性化营销的信息,一起来了解一下吧。 什么是个性化营销? 个性化营销是一种一对一营销形式,它使用实时用户数据和分析来传递品牌信息并针对特定潜在客户。 它与传统营销不同&…...

栈和队列的相互实现

文章目录一、用栈实现队列入队:出队:Java代码实现:二、用队列实现栈入栈:出栈:Java代码实现:附:C版代码1、用栈实现队列2、用队列实现栈栈(stack):先进后出&a…...

iTab新标签页重磅更新 |这些功能绝对有你想要的新体验!

01 写在前面 csdn的朋友们,你好哦,我是iTab 插件的独立开发者,今天给大家安利一下我做的这款桌面插件。 首先要告诉大家一个好消息: 最近iTab新标签页被Edge 浏览器商店官方热门🔥推荐啦。 在此,特别感谢…...

【改机教程】iOS系统去除小黑条,改拍照声、拨号音、键盘音,不用越狱,支持所有机型

大家好,上次给大家分享了几个iOS系统免越狱改机教程 今天带来最新的教程,这次修改利用的是同一个漏洞,由外网大神 tamago 开发,国内大神冷风 进行汉化和优化 可以修改的地方包括 去除底部小黑条 dock栏透明 桌面文件夹透明 桌面…...

Android10开机向导中复用设置中的Wifi界面

很多时候我们需要定制开机向导,在开机向导界面我们一般会实现联网和设置时间等功能,考虑复用与稳定性问题,我们最好复用设置中的WiFi设置和日期设置。但是设置中的wifi设置界面默认是没有下一步按钮的,这会让用户感觉很奇怪。在以…...

川农机械专业小伙转行Java开发,年薪20w

本期学员就业故事,知了姐邀请到一位“特别”的同学,一位从知了堂就业成功近两年的学员再度接受我们的采访。 来自四川农业大学的曾同学,一个本来学机械开挖掘机的粗犷男人,因为不断地努力学习编程,最终成为一个性格闷…...