自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ 提高编程 下

所有元素都会在插入时自动被排序。

2025-04-03 11:32:39 884

原创 RTR Chaptor 13

使用三角形对表面进行建模,这通常是解决场景中物体描述的问题的最直接方法。然而,三角形表示只在一定程度上是好的。用图像表示物体的一个很大优点是,其渲染成本与要渲染的像素数量成正比,而不是与几何模型中的顶点数量成正比。因此,基于图像的渲染,其中一个用途就是作为一种渲染模型的更高效方法。然而,图像采样技术的用途要广泛得多。许多物体,例如云和动物毛皮,很难使用三角形来进行表示。而分层半透明图像(layered semitransparent image)则可以用来显示这种复杂的表面。

2025-01-07 19:14:01 961

原创 RTR Chaptor12

制作一副图像要比简单地描绘(portray)物体复杂得多,想要让图像看起来具有真实感,其中一方面是让它看起来像一张照片。就像摄影师对他们的摄影作品进行后期调整一样,我们也希望能够对渲染出的图像进行修改调整,例如色彩平衡等。在渲染图像中添加胶片颗粒(film grain)、暗角(vignetting)以及其他细节变化,可以使其看起来更有说服力。此外,一些更加引人注目(dramatic)的效果,例如镜头光晕(lens flare)和泛光(bloom)可以增加艺术感。

2024-12-16 19:46:38 756

原创 RTR Chaptor11 下

全局光照定向遮蔽预计算定向遮蔽定向遮蔽的动态计算使用定向屏蔽进行着色满反射全局光照表面预照明定向表面预照明预计算传输存储方法动态漫反射全局光照光照传播体积基于体素的方法屏幕空间方法其他方法镜面全局光照局部环境贴图环境贴图的动态更新基于体素的方法平面反射屏幕空间方法统一方法定向遮蔽  尽管单独使用环境光遮蔽可以极大地提高图像的视觉质量,但它毕竟是一个大大简化了的模型。在处理大面积光源的时候,它所给出的可见性近似很差,更不用说较小的光源或者精确光源了。它也无法正确处理光滑的BRDF或者更加复杂的光照环境。想

2024-12-09 19:35:13 780

原创 C++提高编程 上

示例public:int age;it!= v.end();it++) {//存放自定义数据类型指针it!= v.end();test02();return 0;

2024-12-09 07:56:46 586

原创 RTR Chaptor11 上

Lo​pv∫l∈Ω​flvLi​pln⋅ldl11.1其中Lo​pv是表面位置p在观察方向v上的出射radiance;Ω是表面位置p的上半球范围;flv是观察方向v和当前光线入射方向l上的BRDF;Li​pl是从光线方向l到达表面位置p的入射radiance;n⋅l是光线方向l和表面法线n之间的点积,并将负数结果clamp到0,即将来自表面下方的光线过滤掉。

2024-12-02 16:53:25 733

原创 UnityShader——初级篇之开始Unity Shader学习之旅

实际上,这些事 Cg/HLSL 提供的语义。语义实际上就是要给赋给 Shader 输入和输出的字符串,这个字符串表达了这个参数的含义。通俗的讲,这些语义可以让 Shader 知道从哪里读取数据,并把数据输出到哪里,它们在 Cg/HLSL 的 Shader 流水线中是不可或缺的。需要注意的是,Unity 并没有支持所有的语义通常情况下,这些输入输出变量并不需要有特别的意义,也就是说可以自行决定这些变量的用途。例如上面的代码,顶点着色器的输出结构体中用 COLOR0 语义去描述 color 变量。

2024-12-01 18:41:52 1752

原创 RTR Chaptor10 下

局部光照环境映射经纬度映射球面映射立方体映射其他投影方法基于图像的高光照明预过滤环境映射卷积环境贴图微表面 BRDF 的分裂积分近似不对称和各向异性波瓣环境映射球谐 irrandance其他表示方法误差来源环境映射  将一个球面函数记录在一个或者多个图像中的做法,被称为环境映射(environment mapping),因为我们通常会使用纹理映射来实现对表格的查找。这种表现形式是目前最强大且最流行的环境光照形式之一。与其他球面表示方法相比,虽然它占据了更多的内存,但是这种方法的实时解码过程十分简单、速度

2024-11-29 14:41:03 994

原创 RTR Chaptor10 上

局部光照面光源光泽材质一般光源形状环境光照球面函数和半球函数简单表格形式球面基底球面径向基函数球面高斯函数球谐函数其他球面表示半球基底AHD 基底辐射法向映射/《半条命2 》基底半球谐波 / H-Basis  在第9章中,我们讨论了基于物理的材质的相关理论,以及如何使用精确光源来计算它们。有了这些前置内容,我们就可以通过模拟光线与表面之间的相互作用,来进行着色计算,以便计算这个着色点在给定方向上,向虚拟相机发出了多少radiance。这个光谱radiance是场景参考的像素颜色,它最终会被转换为图像中给定

2024-11-27 17:16:56 1084

原创 RTR-Chaptor9下

第九章 基于物理的着色波动光学的 BRDF 模型衍射模型薄膜干涉模型分层材质9.13 混合和过滤材质过滤法线和法线分布波动光学的 BRDF 模型  我们在前几个节中所讨论的模型都依赖于几何光学,它把光的传播看作成一种射线而不是波。几何光学基于了这样的假设:任何表面的不规则性要么小于一个波长,要么大于100倍波长(大约)。  而现实世界中的表面并没有那么理想,它们在所有尺度上都具有不规则性,包括1-100倍波长范围内。我们将1-100倍波长范围内的不规则性称为纳米几何(nanogeometry),来与前

2024-11-21 15:56:04 809

原创 RTR-Chapter9中

第九章 基于物理的着色微表面理论表面反射的BRDF模型法线分布函数各项同性法线分布函数各项异性法线分布函数多次反弹的表面反射次表面散射的BRDF模型次表面反照率次表面反射和粗糙度的规模光滑表面的次表面模型粗糙表面次表面模型布料的 BRDF 模型微表面布料模型微圆柱体布料模型微表面理论  有关微观几何对反射率影响的数学分析,被称为微表面理论(microfacet theory),许多BRDF模型都是建立在这个理论之上的。这个工具最初是由光学界的研究人员提出的,1977年由Blinn引入了计算机图形学,19

2024-11-21 14:49:42 1002

原创 UnityShader——基础篇之学习Shader所需的数学基础——下

裁剪空间  顶点接下来要从观察空间转换到裁剪空间(也被称为齐次裁剪空间) 中,这个用于变换的矩阵叫做裁剪矩阵,也被称为投影矩阵  裁剪空间的目标是能够方便地对渲染图元进行裁剪:完全位于这块空间内部的图元将会被保留,完全位于这块空间外部的图元将会被剔除,而与这块空间边界相交的图元就会被裁剪。这块空间是由视锥体来决定  视锥体指的是空间中的一块区域,这块区域决定了摄像机可以看到的空间。视锥体由六个平面鲍威尔成,这些平面也被称为裁剪平面。视锥体有两种类型,这涉及两种投影类型:一种是正交投影,一种是透视投影。

2024-10-22 21:11:36 1115

原创 UnityShader——基础篇之学习Shader所需的数学基础——上

学习Shader所需的数学基础笛卡尔坐标系二维笛卡尔坐标系三维笛卡尔坐标系左手坐标系和右手坐标系Unity使用的坐标系点和矢量点和适量的区别矢量运算1. 矢量和标量乘法/除法2.矢量的加法和减法3.矢量的模4.单位矢量5.矢量的点积6.矢量的叉积矩阵矩阵的定义和矢量联系起来矩阵运算1.矩阵和标量的乘法2.矩阵和矩阵的乘法特殊的矩阵1.方块矩阵2.单位矩阵3.转置矩阵4.逆矩阵5.正交矩阵矩阵的几何意义:变换什么是变换分解基础变换矩阵平移矩阵缩放矩阵旋转矩阵复合变换坐标空间坐标空间的转换顶点的坐标空间变换过程

2024-10-22 21:10:42 574

原创 RTR-Chapter9上

第九章 基于物理的着色光的物理学粒子介质表面次表面散射相机The BRDF光照菲涅尔反射外反射典型的菲涅尔反射值电介质的菲涅尔反射率金属的菲涅尔反射率半导体的菲涅尔反射值水中的菲涅尔反射率参数化的菲涅尔值内反射微观几何光的物理学  在物理光学(physical optic)中,光被认为是一种电磁横波(electromagnetic transverse wave),它使得电场(electric field)和磁场(magnetic field)在其传播方向的垂直面上来回振荡。电场和磁场的振荡是耦合的,二

2024-10-15 15:26:47 697

原创 RTR-Chapter8

第八章 光与颜色光量辐射度量学光度学色度学使用RGB颜色进行渲染从场景到屏幕HDR显示编码色调映射色调再现变换曝光颜色分级光量辐射度量学  辐射度量学(radiometry)研究的是对电磁辐射(electromagnetic radiation)的测量,这种辐射会以波的形式进行传播。具有不同波长的电磁波,往往会具有不同的特性。波长是指两个具有相同相位的相邻点之间的距离,例如两个相邻峰值之间的距离。在自然界中,电磁波的波长范围很广,既有长度不到百分之一纳米的伽马波,也有到长达数万公里的极低频(extre

2024-10-13 19:53:58 755

原创 RTR_Chapter7

对于创建逼真的图像、为用户提供物体位置的视觉暗示而言,阴影效果是非常重要的。本章节将重点介绍计算阴影的基本原理和基本思想,并对最重要、最流行的几种实时阴影算法进行介绍。我们还会简要讨论一些不太流行,但是体现了重要原则和重要思想的方法。我们并不会在本章节中花费大量时间来覆盖所有的内容和方法,因为已经有两本非常全面的书籍,对阴影领域进行了深入研究和讨论。相反,我们将专注于调查文献(surveying article)和相关技术演讲,这些内容在出现之前,相关方法就已经被提出并实现了。

2024-10-08 02:23:23 802

原创 C++——职工管理系统

职工管理系统可以用来管理公司所有员工的信息主要利用C++来实现一个基于多态的职工管理系统公司中职工分为三类:普通员工、经理、老板,显示信息时,需要显示职工编号、职工姓名、职工岗位以及职责普通员工职责:完成经理交给的任务经理职责:完成老板交给的任务,并下发给员工老板职责:管理公司所有事务。

2024-10-06 12:17:24 1171

原创 RTR_Chapter_6 下

程序化纹理  上文所提到的方法,都是给定一个纹理空间中的坐标位置,然后在图像中进行查找,从而获得纹理值。还有一种方法是对函数进行求值,然后作为对应位置上的纹理值,这就是程序化纹理(procedural texture)。  在过去,程序化纹理通常运用于离线渲染中,在实时渲染中更加常见的则是图像纹理,这是因为现代GPU中的图像纹理硬件是非常高效的,可以在一秒钟内执行数十亿次的纹理访问操作。然而,目前的GPU架构正在向着更低的计算成本,以及更昂贵(相对)的存储访问发展,也就是说,存储访问和带宽限制越来越成为

2024-10-06 03:31:34 1036

原创 算法导论——Data Structures and Dynamic Arrays 笔记

同一个问题可以用不同的数据结构来解决。

2024-09-23 19:29:31 1072

原创 RTR_Chapter_6 上

表面纹理(texture)是指其外观和给人的视觉感受,就像是一幅油画的图案一样。而在计算机图形学中,纹理化则指的是一个过程,即通过使用一些图像、函数或者其他数据,来对每个表面位置的外观表现进行修改。例如:我们可以将一张砖墙的彩色图像应用于由两个三角形组成的矩形上,而不是去精确表现砖墙的几何结构。当观察这个砖墙矩形的时候,对应的彩色图像将会显示在这个矩形所在的位置上,这样可以使得这个矩形看起来很像真实的砖墙。除非相机十分靠近墙壁的话,否则砖墙几何细节的缺乏并不会带来明显的视觉瑕疵。

2024-09-23 19:28:37 884

原创 RTR——Chapter5 下

锯齿和抗锯齿  想象现在有一个巨大的黑色三角形,正在白色的背景上缓缓移动。由于屏幕上的网格单元被三角形所覆盖,因此其像素值的强度应该会平滑的下降。但是通常在各种基础渲染器中发生的情况是,一旦网格单元的中心被三角形所覆盖,这个单元的像素颜色就会立即从白色变为黑色。标准的GPU渲染器也不例外,如图5.14最左侧一列所示。图5.14 第一行图像展示了三个具有不同抗锯齿级别的三角形、线和点。第二行图像是上面图像放大数倍之后的结果。最左边一列图像在每个像素中仅使用了一个样本,即没有使用抗锯齿技术;中间一列图像

2024-09-19 15:40:35 1539

原创 RTR_Chapter_5 上

第五章 着色基础  在渲染三维物体的图像时,场景中的模型不仅仅需要有正确的几何形状,还应当具备想要的材质外观。根据应用程序的不同,这些外观具有非常广泛的范围,从真实感渲染(即物体外观几乎和真实世界中的一模一样),到各种各样的由于创造性而选择的风格化外观等。图5.1同时展示了这两种不同的风格。图5.1 第一行是使用虚幻引擎渲染的写实风景场景。第二行来自Campo Santo的游戏《看火人(Firewatch)》,它采用了一种插画式(illustrative art)的艺术风格。着色模型  想要确

2024-09-19 08:13:57 939

原创 RTR_Chapter_4 下

投影  在真正渲染一个场景之前,场景中所有的相关物体都需要被投影到某个平面上,或者是某个简单空间中。在投影变换完成之后,才会进行裁剪操作和渲染操作。  到目前为止,本章节中所涉及的诸多变换,并不会对齐次坐标的www分量(第四个分量)产生影响;也就是说,点和向量在经过变换之后,仍然会保持它们的类型:点的www分量为1,向量的www分量为0。同时,这些变换矩阵的第四行(最底行)都是(0,0,0,1)(0,0,0,1)(0,0,0,1)。而现在所要讨论的投影变换,将会涉及到对齐次坐标www分量的修改。对于透视

2024-09-13 08:24:22 940

原创 RTR_Chapter_4_中

四元数  四元数可以用于表示旋转和方向,它在很多地方都比欧拉角和矩阵表示更加优秀。任何三维方向都可以表示为一个绕特定轴的简单旋转,给定一个旋转轴和旋转角度,可以直接将其转换为一个四元数,或者是从一个四元数中提取出旋转轴和旋转角度;但是对任意方向上的欧拉角进行转换是很困难的。四元数可以用于稳定且恒定速度的方向插值,这是欧拉角很难实现的。  复数由一个实部和一个虚部组成,每个复数都可以使用两个实数进行表示,其中第二个实数要乘以−1\sqrt{-1}−1​。类似地,四元数由四个部分组成,前三个值与旋转的轴有关

2024-09-13 08:08:27 1196

原创 RTR_Chapter_4_上

第四章Transform 变换  变换(transform)是指以点、向量、颜色等实体作为输入,并以某种方式对其进行转换的一种操作。对于计算机图形学从业者而言,熟练掌握变换相关的知识是非常重要的。通过各种变换操作可以对物体、光源和相机进行移动、变形以及设定动画;还可以确保所有的计算都在同一个坐标系下进行,以及使用不同的方式来将物体投影到一个平面上。这里只列举了变换所能完成的部分操作,但是足以证明变换在实时图形学中的重要性,或者可以说,在任何领域图形学中的重要性。  线性变换(linear transf

2024-09-12 22:13:51 392

原创 RTR_Chapter_3

在历史上,图形加速首先开始于三角形上的像素扫描线颜色插值,并在屏幕上显示这些颜色值。它包括访问图像数据的能力,这允许将纹理运用在表面上;添加用于插值和深度测试的硬件,这提供了内置的可见性检查。由于这些过程在渲染管线中被大量使用,因此它们都需要专门的硬件单元来进行执行,从而提高性能表现。在多次迭代的过程中,渲染管线增加了很多部分,并且其中的每个部分也增加了更多的功能。这些专用的图形硬件与CPU相比,唯一的优势就是速度,在实时渲染中,速度是至关重要的。在过去的二十年中,图形硬件发生了不可思议的变化。

2024-09-11 20:40:38 969

原创 RTR_Chapter_2

本章节所描述的渲染管线,是几十年来,面向实时渲染程序的API以及图形硬件发展而来的结果。很重要的一点是,这并不是唯一可能的渲染管线,离线渲染中也有一套渲染管线,但是经历了与实时渲染完全不同的演化路径。用于电影制作的渲染以往都会采用微多边形渲染管线,但是最近几年来,光线追踪和路径追踪已经渐渐占据了上风。这些技术在建筑可视化领域和设计可视化领域中也有很多应用,它们会在章节11.2.2中提及。多年以来,开发人员只能使用图形API所定义的固定渲染管线来完成这个过程。

2024-07-30 09:35:17 1208

原创 RTR_Chapter_1

首先,我们将解释本书中使用的数学符号。几乎所有图形硬件使用的渲染图元都是点、线和三角形。我们所知道的唯二例外就是Pixel-Planes,它可以绘制球体;以及NVIDIA NV1芯片,它可以绘制椭球体。在本书中,我们会将一个几何实体的集合称作为模型或者物体。场景是指环境中所有待渲染模型的集合,同时场景中还包含了材质信息,灯光信息,以及观察信息等。这里的物体可以是一辆车,一栋建筑甚至是一条直线。

2024-07-29 16:20:36 871

原创 游戏热更新——AssetBundle

是一个存在硬盘上的文件,可以称之为压缩包,这个压缩包可以认为是一个文件夹,里面包含了多个文件。这些文件分为两类:serialized file 和 resource files(序列化文件和源文件)serialized file:资源被打碎放在一个对象中,最后统一被写进一个单独的文件(只有一个)resource file:某些二进制资源(图片、声音)被单独保存,方便快速加载是一个AssetBundle对象,可以通过代码从一个特定的压缩包加载出来的对象。

2024-07-13 17:03:55 950

原创 C++进修——C++核心编程

内存分区模型  C++程序在执行时,将内存大方向划分为4个区域代码区:存放函数体的二进制编码,由操作系统进行管理全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放,存放函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收  内存4区意义:不同的区域存放不同的数据,赋予不同的生命周期,给我们更大的灵活编程程序运行前  在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域  代码区    存放CPU执行的机器指令  

2024-06-26 07:49:27 1361

原创 UnityShader——基础篇之UnityShader基础

Unity Shader 是 Unity 为研发者提供的高层记得渲染抽象层,Unity 希望以这种方式来让开发者更加轻松的控制渲染,见下图:在 Unity 中,所有的 Unity Shader 都是使用 ShaderLab 来编写的ShaderLab 是 Unity 编写 Unity Shader 的一种说明性语言,它使用了一些嵌套在花括号内部的**语义&&(syntax。

2024-06-23 13:25:54 5634 1

原创 游戏热更新进修——Lua编程

userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特殊的工作,也可以用来计算一些值。完成指定的任务,这种情况下函数作为调用语句使用;计算并返回值,这种情况下函数作为赋值语句的表达式使用。end。

2024-04-25 06:02:45 1653

原创 C++进修——通讯录管理系统

删除联系人前,需要先判断用户输入的联系人是否存在,如果存在则删除,不存在则提示用户没有要删除的联系人,:添加联系人前先判断通讯录是否已满,如果满了就不再添加,未满情况将新联系人信息逐个加入到通讯录。:将通讯录所有联系人信息删除掉,只要将通讯录记录的联系人数量置为0,做逻辑清空即可。:判断如果当前通讯录中没有人员,就提示记录为空,人数大于0,显示通讯录中所有信息。:判断用户指定的联系人是否存在,如果存在显示信息,不存在则提示查无此人。:查找用户输入的联系人,如果查找成功进行修改操作,查找失败提示查无此人。

2024-04-19 21:14:08 669

原创 UnityShader——基础篇之渲染流水线

几何阶段和光栅化阶段可以分成若干更小的流水线阶段,这些流水线阶段由GPU来实现,每个阶段GPU提供了不同的可配置型或可编程性,如图:从图中可以看出,GPU的渲染流水线接受顶点数据作为输入,这些顶点数据是由应用阶段加载到显存中,再由Darw Call指定的,这些数据随后被传递给顶点着色器顶点着色器)是完全可编程的,它通常用于实现顶点的空间变换、顶点着色等功能曲面细分着色器)使一个可选的着色器,它用于细分图元几何着色器。

2024-04-19 11:49:35 1278

原创 C++进修——C++基础入门

数组就是一个集合,里面存放了相同类型的数据元素特点1:数组中的每个数据元素都是相同的数据类型特点2:数组是由连续的内存位置构成的数据类型 数组名[数组长度];数据类型 数组名[数组长度] = {值1,值2,值3};数据类型 数组名[] = {值1,值2,值3};i < 10;数据类型 数组名[行数][列数];数据类型 数组名[行数][列数] = {{数据1,数据2},{数据3,数据4}};

2024-04-19 04:47:53 878

原创 计算机网络——42攻击和对策

Denial of server(DOS)对策。对策:IP Spoofing 入口过滤。IP Spoofing欺骗。

2024-04-10 10:53:29 443

原创 计算机网络——41防火墙

将组织内部网络和互联网络隔离开来,按照规则允许某些分组通过(进出),或者阻塞掉某些分组。

2024-04-10 10:25:30 903

原创 计算机网络——40各个层次的安全性

Alice需要发送机密的报文m给BobAliceKs​Ks​Ks​Ks​mKB​KS​BobKS​KS​KS​mAlice数字签署文件发送报文(明文)和数字签名Alice 需要提供源端的报文完整性和可认证性KA​KA−​m))KA​KA−​m))Alice 需要提供机密性,源端可认证性和报文的完整性Alice使用了3个keys:自己的私钥,Bob的公钥,新产生出的对称式密钥。

2024-04-09 04:43:26 1519

原创 计算机网络——39密钥分发和证书

对称密钥问题解决办法公共密钥问题解决方法。

2024-04-09 00:36:04 910

原创 计算机网络——38报文完整性

对长报文进行公开密钥加密算法的实验需要耗费大量的时间Goal:固定长度,容易计算的"fingerprint"对m使用散列函数H,获得固定长度的报文摘要H(m)散列函数的特性多对一固定长度不变给定一个报文摘要x,反向计算出报文在计算上是不可行的x=H(m)Bob发送数字签名的报文Alice校检签名和报文完整性。

2024-04-07 05:02:29 943

BloonsTD6 游戏拆解

气球塔防游戏拆解

2024-01-27

空空如也

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

TA关注的人

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