自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(132)
  • 收藏
  • 关注

原创 更换博客地址

接下来的博客会在个人博客。

2024-11-12 23:25:21 218

原创 VulkanTutorial(18`Multisampling ,Compute shaders)

我们不希望渲染效果有锯齿,它是由于像素分辨率导致的,解决问题的方式之一时多采样抗锯齿MSAA,普通的光栅化渲染方式,每个像素有一个采样点,如果采样点在图元内,就绘制颜色,否则保留空白,由于分辨率,边缘处就会形成锯齿MSAA是每个像素多个采样点,如果采样点在图元内,就让颜色*权重,否则采样点颜色为0,将一个像素内所有采样点颜色相加即像素颜色。

2024-11-10 17:45:16 1060

原创 VulkanTutorial(17`Loading models, Mipmaps)

我们将使用tinyobjloader库从OBJ文件加载顶点和索引,它速度快,易于集成,因为它是一个像stb_image一样的单一文件库因为我们没有学习光照,使用照明烘焙的纹理在程序中添加两个新的配置变量来定义模型和纹理路径:并更新createTextureImage 以使用此路径变量加载纹理数据。

2024-11-09 15:55:13 981

原创 树状数组(Binary Indexed Tree -- BIT)

BIT:给定1维数组映射(lowbit)为树形结构。

2024-11-07 22:36:02 293

原创 VulkanTutorial(16`Depth buffer)

之前顶点数据一直使用的2D坐标,这次我们使用3D数据,并且我们本次添加多个物体,然后进行深度测试。

2024-11-07 13:04:04 787

原创 VulkanTutorial(15`Texture mapping)

图像对象数据填充。

2024-11-06 20:03:25 1098

原创 VulkanTutorial(14·descriptor,uniform buffer)

我们将继续学习3D图形,这需要一个模型-视图-投影矩阵,因此我们要更改向vertex shader传输的数据,也就是通过vertex buffer但是当实时渲染,每一帧这些数据都有可能变化,都需要更新顶点缓冲区,会造成内存浪费uniform buffer是一块存储在GPU上的内存区域,它可以在多个着色器(甚至多个着色器阶段)之间共享一致的数据在Vulkan中解决此问题的正确方法是使用资源描述符Descriptor,

2024-11-04 14:41:58 921

原创 VulkanTutorial(13·Staging buffer,Index buffer)

因为我们将在本章中创建多个缓冲区,所以最好将缓冲区创建移到单独的函数中将原本createVertexBuffer除了MapMemory部分,全部移动到新函数中,不要忘记使用函数参数,而非原有的固定值,并在createVertexBuffer调用createBuffer运行程序以确保顶点缓冲区仍然正常工作。

2024-11-03 18:42:20 399

原创 VulkanTutorial(12·recreation swap chain,Vertex buffers)

我们要优化程序,因为window surface(窗口大小)可能会发生变化,导致swapchain不再兼容,当这个事件发生时,我们应该重新创建swapchain。

2024-11-02 11:56:24 822

原创 VulkanTutorial(11·Rendering,Frame synchronization)

Semaphores在一个队列作为信号,当队列执行完发出信号,在另一个队列等待这个信号发生时执行,当这个新队列开始执行,Semaphores会自动重置为未发送的状态,从而允许再次使用它。但是这里vkWaitForFences由于放在函数的最开始的指令位置,它在执行时将等待fence的信号,但是,fence信号是在此帧渲染完成后才发出,因此它会无限期的阻止CPU执行,将请求提交到交换链以呈现图像。接下来的两个字段指定要等待的操作以及这些操作发生的阶段,我们需要等待交换链完成对图像的阅读,然后才能访问它。

2024-10-30 20:54:41 918

原创 进程线程、同步异步、并发并行

有(一个任务包含多条指令)需要被处理,如何能提高执行效率?

2024-10-30 15:50:04 324

原创 VulkanTutorial(10·Framebuffers, Cmd )

我们必须为swapchain中的所有图像Image Views创建一个Framebuffers(vector),并在绘制时使用与检索到的图像相对应的帧缓冲区,用于在渲染通道(Render Pass)中作为附件(Attachments)进行渲染每个Framebuffers的Attachments与Render Pass的Attachments描述相对应(数量和类型),它们共同定义了渲染的目标。

2024-10-29 21:00:44 764

原创 < 背包问题 >

状态转移方程:f[i][j] = max(k= 0, 1, 2, 3, 4,...j / v-i]) (f[i-1][j- k * v[i]] + k * w[i] )当背包容量为j,有i种物品时,可以选取的最高价值 == max(取(k= 0, 1, 2, 3, 4,...) 次:此物品价值 + (背包容量 - 此物品体积)的最高价值 )状态转移方程:f[i][j] = max(f[i-1][j-v[i]]+w[i], f[i-1][j])把求和式展开书写:f(i,v)=f(i−1,v)+

2024-10-28 22:58:31 393

原创 VulkanTutorial(9·Fixed functions)

旧的图形API为图形管道的固定功能的阶段提供默认状态。在Vulkan中,您必须明确大多数管道状态以下内容都在createGraphicsPipeline函数中添加。

2024-10-28 16:39:13 626

原创 VulkanTutorial(8·Shader modules)

与早期的API不同,Vulkan中的着色器代码必须以字节码格式指定,而不是人类可读的语法,如GLSL和HLSL。这种字节码格式称为SPIR-V它是一种可用于编写图形和计算着色器的格式使用像SPIR-V这样简单的字节码格式,不会面临其他供应商的驱动程序因语法错误而拒绝您的代码的风险,SPIR-V二进制文件,并不意味着我们需要手工编写,Khronos已经发布了他们自己的独立于供应商的glslangValidator.exe编译器,该编译器将GLSL编译为SPIR-V。

2024-10-28 00:10:24 1133

原创 VulkanTutorial(7`ImageViews,Graphics pipeline Introduction)

要在render pipeline中使用任何VkImage,包括 swap chain 中的VkImage,我们必须创建一个VkImageView对象,VkImageView是对图像的显示,它描述了如何访问图像以及要访问图像的哪个部分我们将编写一个ImageViews函数,为 swap chain 中的每个VkImage创建一个基本的VkImageView,以便我们稍后可以将它们用作颜色目标。

2024-10-27 15:36:22 927

原创 VulkanTutorial(6·VkSwapChainKHR)

Vulkan 没有像opengl的“默认帧缓冲区”的概念,它需要SwapChain在屏幕上显示它们之前要渲染的缓冲区交换链本质上是等待呈现在屏幕上的图像队列,我们的应用程序将获取这样一个图像并绘制给它,然后将其返回给队列队列中显示图像的条件取决于交换链的设置方式,但交换链的一般图像的显示与屏幕的刷新率同步。

2024-10-26 20:55:35 782

原创 VulkanTutorial(5`VkDevice,VkQueue,VkSurfaceKHR)

择要使用的物理设备后,我们需要设置一个LogicalDevice逻辑设备,描述我们想要使用的功能首先这个struct,描述我们想要的单个队列系列的队列数量以及queueFamilyIndex我们必须为队列分配优先级(浮点数),影响 命令缓冲区执行顺序(多线程)我们要开启 VkPhysicalDeviceFeatures物理设备功能集(比如几何着色器的功能)逻辑设备创建信息,比如队列数量,是否启用特性配置特定于设备的扩展和 验证层执行vkCreateDevice创建逻辑设备。

2024-10-26 18:33:49 387

原创 VulkanTutorial(4·VkPhysicalDevices和VkQueueFamily)

通过 VkInstance初始化 Vulkan 库后,我们需要查找 并在系统中选择一个支持我们所需功能的显卡,我们选择使用适合我们需求的第一个显卡。我们最终选择的显卡作为新的类成员VkPhysicalDevice,此对象将为 在 VkInstance被销毁时销毁,因此我们不需要在cleanup函数中做任何内容。

2024-10-26 15:38:55 526

原创 VulkanTutorial(3·Validation layer)

第一个参数。

2024-10-25 13:07:41 903

原创 VulkanTutorial(2·GLFWwindow*和VkInstance)

首先包含两个库的头文件定义Application的基本结构:run ( init(),loop(),clean() )在main loop创建Application obj,通过try catch异常处理,检测在程序执行时是否有错误信息调用GLFWAPI创建窗口。

2024-10-25 11:28:49 764

原创 VulkanTutorial(1·简述,vs环境搭建)

VulkanAPI->驱动程序软件(接收API调用传递过来的指令和数据,并进行转换)->硬件对于openglAPI驱动程序会跟踪大量对象的状态,自动管理内存和同步,以及在程序运行时检查错误,与opengl不同,VulkanAPI为了保持良好的CPU性能,将状态跟踪、同步和内存管理交给了应用程序开发人员,同时将正确性检查交给各个层进行代理,而要想使用这些层必须手动启用。这些层在正常情况下不会在应用程序里执行。

2024-10-21 16:08:16 753

原创 UE(其他)

网络:Preference(偏好)-》Play-》Multiplayer options->play net mode->listen serve监听服务器->设置client的数量。相较于FString,它的大小更小,更能高效的传递,但更难以操控。UE_LOG(类别名称(CoreGlobals.h 的引擎中找到这些类别),日志详细级别,Text)网络函数以C_为前缀(表示客户端)、S_为前缀(表示服务器)和MC _ 为前缀(表示多播)绕前轴(绕 X 轴)旋转,倾斜头部,(0=直线,+顺时针,-逆时针)

2024-10-21 10:38:11 570

原创 UE(反射系统,容器)

在运行时动态地获取和操作类和对象的信息(近似于c#的Attribute特性)

2024-10-21 10:18:46 550

原创 Unity性能优化

当游戏开发使用传统的OPP(面向对象编程)面对大量的Game object时FPS会显著降低,而使用Dots()性能依旧很好。

2024-10-15 13:09:56 1296

原创 Unity基础

设置输入管理系统:ProjectSetting->Player-》Active input Handling->Both允许你选择项目的输入处理系统,选择“Both”意味着你的项目将同时支持旧的输入管理系统(Input Manager)和新的输入系统(Input System Package)Prefab预制体,将设置的组合体,保存为资源,但这时资源和场景是完全分离的,因此如果预制体调用了场景中其他实例(类对象),则无法获取到,抛出nullreferenceException空引用异常。

2024-10-13 17:21:44 947

原创 Ray_Tracing_The_Rest_of_Your_Life

这一部是优化之前的渲染,我们之前的渲染有很多噪声,我们只有提高采样点数量才行,但是这会降低性能,那么如何才能在性能和画面做权衡?

2024-10-09 23:21:06 1011

原创 Ray_Tracing_The_Next_Week下

然后在ray_color()求得交点的uv后,应该调用value()获取uv对应的颜色,这里由于继承体系,我们将从材质获取纹理添加getTexture()的虚函数,以便动态的调用纹理的value()定义一个轴对齐xy方向的平面,x0,x1,y0,y1,z,首先射线方程仅看z值,求得t,然后再分别将t带入xy的射线方程,即可求出xy,那么当xy在范围内,那么就是相交的。我们创建image_texture的图片纹理,它的颜色值是通过uv坐标从data*纹理获取的,并且我们的球体应用这个新纹理。

2024-10-05 22:13:25 457

原创 Ray_Tracing_The_Next_Week上

我们还需要一个运动中的物体,和普通非运动球体来说,其实就多了center(double time)函数,负责线性插值在time时刻下的球体运动的位置,我们传入r.time()也就是光线自己的时间点。并且我们直到光线的表示,那么x0 = Ax + to * BX,光线从起点A,经过to时间延B方向,到达轴对齐x的某个平面xO,那么我们可以表示to和t1。每一条光线都拥有自己存在的一个时间点。动态模糊在摄影中就是快门的速度慢,捕捉光的时间长,物体运动时进行捕捉成像,拍出来的结果是这个运动过程每一帧的平均值。

2024-10-04 23:58:35 340

原创 GAMES101(19节,相机)

不同于合成渲染,相机是捕捉成像,但是在合成渲染时,有时也会利用相机的成像原理(比如最基础的fov,特效动态模糊 / 景深等),这时会有涉及很多专有名词,以及基础成像方式,因此我们要储备摄像机基础知识。

2024-10-04 14:00:24 975

原创 Ray_Tracing_In_One_Weekend下

我们看到的球体比较暗,这其实和计算的数据不符合,因为屏幕CRT2.2会自动校正颜色,因此我们应该进行gamma校正(1/2.2次幂),让我们看到实际颜色值。为了模拟漫反射材质,我们生成随机反射方向,这个方向根据,交点的法线终点坐标为中心的单位球体内,生成随机点,求得反射光线(随机点 - 交点)还有一种方式,选取随机反射方向:通过在交点取单位球体的随机方向,然后再和物体的normal点乘,判断是否在物体表面的半球。因为vn方向相反,因此点乘cos结果为负数,即在n的反向方向的投影,因此需要加符号。

2024-10-03 13:10:50 1200

原创 Ray_Tracing_In_One_Weekend上

首先指定p3和分辨率(宽高)和最大颜色值,然后设置每个像素颜色值,首先在0---1之间,然后转为0---255的颜色。在不使用 opengl (渲染图像)/ std_image.h(加载图像)等库的情况下,怎样通过代码自定义图像?首先p3表明颜色是ASCII码格式,接着指定分辨率,和最大颜色值之后下面的都是RGB颜色值 ,我们可以运行exe,并将cout输出的内容写入到PPM格式的文件中。有一种PPM格式的图像,可以通过定义数据生成简单的图像。我们已经有了所有数据,通过新建终端,然后执行命令。

2024-10-02 11:39:42 631

原创 < IDE编程环境配置>

我们在写项目时会链接(调用)第3方库,或者比如在vs的解决方案solution创建项目project时,不仅可以开发可执行程序exe(可单独运行)(windows/控制台 应用程序),也可以开发自定义库(不可单独运行,只能在应用程序被调用)(DLL动态库,LIB静态库)库是一个二进制文件。

2024-09-30 00:16:06 1634

原创 GAMES101(作业8)

模拟绳子动画,包括基于物理的,和非物理的,应该修改的函数是:rope.cpp 中的void Rope::simulateEuler(... Rope::rope(...),,void Rope::simulateVerlet(...)

2024-09-29 19:57:33 449

原创 GAMES101(21~22节,动画和仿真)

动画和几何(曲线)相关。

2024-09-28 20:44:42 1064

原创 < 初等物理 >

为什么需要单位,是统一衡量的标准通过国际单位,以及单位的拓展,以及单位的组合,形成一系列新的测量单位面积 m^2速率 m/s米每二次方秒,m /s, delta表示增量,每秒移动多少米加速度 m / s^2 -> (m/s)/s 每秒的速度变化牛顿第二运动定律:力 F = m a ->N = kg m/s^2 ,质量为1kg的物体,使其产生1m / s^2的加速度的力为1N牛。

2024-09-28 14:29:27 555

原创 UE(委托,接口)

在其他类包含接口头文件,多重继承public I接口类名(一定注意I),重写声明:Virtual 函数 _Implementation(一定要加,因为声明) ovrried。

2024-09-27 23:46:01 1019

原创 UE(网络)

联机模式和单机模式不同,单机模式仅考虑架构设计和逻辑问题,联网则需要考虑每个数据存放的 位置,以便在客户端或服务器正确交互通信存储,由于联网的设计细节有很大不同,一些单机模式的设计在联网中并不适合,所以游戏开发前首先要确定是否联网,然后才开始支持联网的具体设计。

2024-09-27 23:16:00 1299

原创 GAMES101(17~18节,物理材质模型)

材质:决定了光线与物体不同的作用方式BRDF(reflect)定义了物体材质。

2024-09-26 15:01:09 795

原创 GAMES101(作业7)

实现path Tracing,仅修改castRay(const Ray ray, int depth)函数,在其中实现 Path Tracing 算法。

2024-09-26 08:19:21 539

空空如也

空空如也

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

TA关注的人

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