- 博客(152)
- 收藏
- 关注
原创 UnityShader——基础篇之学习Shader所需的数学基础——下
裁剪空间 顶点接下来要从观察空间转换到裁剪空间(也被称为齐次裁剪空间) 中,这个用于变换的矩阵叫做裁剪矩阵,也被称为投影矩阵 裁剪空间的目标是能够方便地对渲染图元进行裁剪:完全位于这块空间内部的图元将会被保留,完全位于这块空间外部的图元将会被剔除,而与这块空间边界相交的图元就会被裁剪。这块空间是由视锥体来决定 视锥体指的是空间中的一块区域,这块区域决定了摄像机可以看到的空间。视锥体由六个平面鲍威尔成,这些平面也被称为裁剪平面。视锥体有两种类型,这涉及两种投影类型:一种是正交投影,一种是透视投影。
2024-10-22 21:11:36 991
原创 UnityShader——基础篇之学习Shader所需的数学基础——上
学习Shader所需的数学基础笛卡尔坐标系二维笛卡尔坐标系三维笛卡尔坐标系左手坐标系和右手坐标系Unity使用的坐标系点和矢量点和适量的区别矢量运算1. 矢量和标量乘法/除法2.矢量的加法和减法3.矢量的模4.单位矢量5.矢量的点积6.矢量的叉积矩阵矩阵的定义和矢量联系起来矩阵运算1.矩阵和标量的乘法2.矩阵和矩阵的乘法特殊的矩阵1.方块矩阵2.单位矩阵3.转置矩阵4.逆矩阵5.正交矩阵矩阵的几何意义:变换什么是变换分解基础变换矩阵平移矩阵缩放矩阵旋转矩阵复合变换坐标空间坐标空间的转换顶点的坐标空间变换过程
2024-10-22 21:10:42 434
原创 RTR-Chapter9上
第九章 基于物理的着色光的物理学粒子介质表面次表面散射相机The BRDF光照菲涅尔反射外反射典型的菲涅尔反射值电介质的菲涅尔反射率金属的菲涅尔反射率半导体的菲涅尔反射值水中的菲涅尔反射率参数化的菲涅尔值内反射微观几何光的物理学 在物理光学(physical optic)中,光被认为是一种电磁横波(electromagnetic transverse wave),它使得电场(electric field)和磁场(magnetic field)在其传播方向的垂直面上来回振荡。电场和磁场的振荡是耦合的,二
2024-10-15 15:26:47 606
原创 RTR-Chapter8
第八章 光与颜色光量辐射度量学光度学色度学使用RGB颜色进行渲染从场景到屏幕HDR显示编码色调映射色调再现变换曝光颜色分级光量辐射度量学 辐射度量学(radiometry)研究的是对电磁辐射(electromagnetic radiation)的测量,这种辐射会以波的形式进行传播。具有不同波长的电磁波,往往会具有不同的特性。波长是指两个具有相同相位的相邻点之间的距离,例如两个相邻峰值之间的距离。在自然界中,电磁波的波长范围很广,既有长度不到百分之一纳米的伽马波,也有到长达数万公里的极低频(extre
2024-10-13 19:53:58 573
原创 RTR_Chapter7
对于创建逼真的图像、为用户提供物体位置的视觉暗示而言,阴影效果是非常重要的。本章节将重点介绍计算阴影的基本原理和基本思想,并对最重要、最流行的几种实时阴影算法进行介绍。我们还会简要讨论一些不太流行,但是体现了重要原则和重要思想的方法。我们并不会在本章节中花费大量时间来覆盖所有的内容和方法,因为已经有两本非常全面的书籍,对阴影领域进行了深入研究和讨论。相反,我们将专注于调查文献(surveying article)和相关技术演讲,这些内容在出现之前,相关方法就已经被提出并实现了。
2024-10-08 02:23:23 734
原创 C++——职工管理系统
职工管理系统可以用来管理公司所有员工的信息主要利用C++来实现一个基于多态的职工管理系统公司中职工分为三类:普通员工、经理、老板,显示信息时,需要显示职工编号、职工姓名、职工岗位以及职责普通员工职责:完成经理交给的任务经理职责:完成老板交给的任务,并下发给员工老板职责:管理公司所有事务。
2024-10-06 12:17:24 1013
原创 RTR_Chapter_6 下
程序化纹理 上文所提到的方法,都是给定一个纹理空间中的坐标位置,然后在图像中进行查找,从而获得纹理值。还有一种方法是对函数进行求值,然后作为对应位置上的纹理值,这就是程序化纹理(procedural texture)。 在过去,程序化纹理通常运用于离线渲染中,在实时渲染中更加常见的则是图像纹理,这是因为现代GPU中的图像纹理硬件是非常高效的,可以在一秒钟内执行数十亿次的纹理访问操作。然而,目前的GPU架构正在向着更低的计算成本,以及更昂贵(相对)的存储访问发展,也就是说,存储访问和带宽限制越来越成为
2024-10-06 03:31:34 976
原创 RTR_Chapter_6 上
表面纹理(texture)是指其外观和给人的视觉感受,就像是一幅油画的图案一样。而在计算机图形学中,纹理化则指的是一个过程,即通过使用一些图像、函数或者其他数据,来对每个表面位置的外观表现进行修改。例如:我们可以将一张砖墙的彩色图像应用于由两个三角形组成的矩形上,而不是去精确表现砖墙的几何结构。当观察这个砖墙矩形的时候,对应的彩色图像将会显示在这个矩形所在的位置上,这样可以使得这个矩形看起来很像真实的砖墙。除非相机十分靠近墙壁的话,否则砖墙几何细节的缺乏并不会带来明显的视觉瑕疵。
2024-09-23 19:28:37 780
原创 RTR——Chapter5 下
锯齿和抗锯齿 想象现在有一个巨大的黑色三角形,正在白色的背景上缓缓移动。由于屏幕上的网格单元被三角形所覆盖,因此其像素值的强度应该会平滑的下降。但是通常在各种基础渲染器中发生的情况是,一旦网格单元的中心被三角形所覆盖,这个单元的像素颜色就会立即从白色变为黑色。标准的GPU渲染器也不例外,如图5.14最左侧一列所示。图5.14 第一行图像展示了三个具有不同抗锯齿级别的三角形、线和点。第二行图像是上面图像放大数倍之后的结果。最左边一列图像在每个像素中仅使用了一个样本,即没有使用抗锯齿技术;中间一列图像
2024-09-19 15:40:35 1449
原创 RTR_Chapter_5 上
第五章 着色基础 在渲染三维物体的图像时,场景中的模型不仅仅需要有正确的几何形状,还应当具备想要的材质外观。根据应用程序的不同,这些外观具有非常广泛的范围,从真实感渲染(即物体外观几乎和真实世界中的一模一样),到各种各样的由于创造性而选择的风格化外观等。图5.1同时展示了这两种不同的风格。图5.1 第一行是使用虚幻引擎渲染的写实风景场景。第二行来自Campo Santo的游戏《看火人(Firewatch)》,它采用了一种插画式(illustrative art)的艺术风格。着色模型 想要确
2024-09-19 08:13:57 889
原创 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 867
原创 RTR_Chapter_4_中
四元数 四元数可以用于表示旋转和方向,它在很多地方都比欧拉角和矩阵表示更加优秀。任何三维方向都可以表示为一个绕特定轴的简单旋转,给定一个旋转轴和旋转角度,可以直接将其转换为一个四元数,或者是从一个四元数中提取出旋转轴和旋转角度;但是对任意方向上的欧拉角进行转换是很困难的。四元数可以用于稳定且恒定速度的方向插值,这是欧拉角很难实现的。 复数由一个实部和一个虚部组成,每个复数都可以使用两个实数进行表示,其中第二个实数要乘以−1\sqrt{-1}−1。类似地,四元数由四个部分组成,前三个值与旋转的轴有关
2024-09-13 08:08:27 1147
原创 RTR_Chapter_4_上
第四章Transform 变换 变换(transform)是指以点、向量、颜色等实体作为输入,并以某种方式对其进行转换的一种操作。对于计算机图形学从业者而言,熟练掌握变换相关的知识是非常重要的。通过各种变换操作可以对物体、光源和相机进行移动、变形以及设定动画;还可以确保所有的计算都在同一个坐标系下进行,以及使用不同的方式来将物体投影到一个平面上。这里只列举了变换所能完成的部分操作,但是足以证明变换在实时图形学中的重要性,或者可以说,在任何领域图形学中的重要性。 线性变换(linear transf
2024-09-12 22:13:51 323
原创 RTR_Chapter_3
在历史上,图形加速首先开始于三角形上的像素扫描线颜色插值,并在屏幕上显示这些颜色值。它包括访问图像数据的能力,这允许将纹理运用在表面上;添加用于插值和深度测试的硬件,这提供了内置的可见性检查。由于这些过程在渲染管线中被大量使用,因此它们都需要专门的硬件单元来进行执行,从而提高性能表现。在多次迭代的过程中,渲染管线增加了很多部分,并且其中的每个部分也增加了更多的功能。这些专用的图形硬件与CPU相比,唯一的优势就是速度,在实时渲染中,速度是至关重要的。在过去的二十年中,图形硬件发生了不可思议的变化。
2024-09-11 20:40:38 862
原创 RTR_Chapter_2
本章节所描述的渲染管线,是几十年来,面向实时渲染程序的API以及图形硬件发展而来的结果。很重要的一点是,这并不是唯一可能的渲染管线,离线渲染中也有一套渲染管线,但是经历了与实时渲染完全不同的演化路径。用于电影制作的渲染以往都会采用微多边形渲染管线,但是最近几年来,光线追踪和路径追踪已经渐渐占据了上风。这些技术在建筑可视化领域和设计可视化领域中也有很多应用,它们会在章节11.2.2中提及。多年以来,开发人员只能使用图形API所定义的固定渲染管线来完成这个过程。
2024-07-30 09:35:17 1142
原创 RTR_Chapter_1
首先,我们将解释本书中使用的数学符号。几乎所有图形硬件使用的渲染图元都是点、线和三角形。我们所知道的唯二例外就是Pixel-Planes,它可以绘制球体;以及NVIDIA NV1芯片,它可以绘制椭球体。在本书中,我们会将一个几何实体的集合称作为模型或者物体。场景是指环境中所有待渲染模型的集合,同时场景中还包含了材质信息,灯光信息,以及观察信息等。这里的物体可以是一辆车,一栋建筑甚至是一条直线。
2024-07-29 16:20:36 816
原创 游戏热更新——AssetBundle
是一个存在硬盘上的文件,可以称之为压缩包,这个压缩包可以认为是一个文件夹,里面包含了多个文件。这些文件分为两类:serialized file 和 resource files(序列化文件和源文件)serialized file:资源被打碎放在一个对象中,最后统一被写进一个单独的文件(只有一个)resource file:某些二进制资源(图片、声音)被单独保存,方便快速加载是一个AssetBundle对象,可以通过代码从一个特定的压缩包加载出来的对象。
2024-07-13 17:03:55 885
原创 C++进修——C++核心编程
内存分区模型 C++程序在执行时,将内存大方向划分为4个区域代码区:存放函数体的二进制编码,由操作系统进行管理全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放,存放函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收 内存4区意义:不同的区域存放不同的数据,赋予不同的生命周期,给我们更大的灵活编程程序运行前 在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域 代码区 存放CPU执行的机器指令
2024-06-26 07:49:27 1324
原创 UnityShader——基础篇之UnityShader基础
Unity Shader 是 Unity 为研发者提供的高层记得渲染抽象层,Unity 希望以这种方式来让开发者更加轻松的控制渲染,见下图:在 Unity 中,所有的 Unity Shader 都是使用 ShaderLab 来编写的ShaderLab 是 Unity 编写 Unity Shader 的一种说明性语言,它使用了一些嵌套在花括号内部的**语义&&(syntax。
2024-06-23 13:25:54 3301 1
原创 游戏热更新进修——Lua编程
userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特殊的工作,也可以用来计算一些值。完成指定的任务,这种情况下函数作为调用语句使用;计算并返回值,这种情况下函数作为赋值语句的表达式使用。end。
2024-04-25 06:02:45 1509
原创 C++进修——通讯录管理系统
删除联系人前,需要先判断用户输入的联系人是否存在,如果存在则删除,不存在则提示用户没有要删除的联系人,:添加联系人前先判断通讯录是否已满,如果满了就不再添加,未满情况将新联系人信息逐个加入到通讯录。:将通讯录所有联系人信息删除掉,只要将通讯录记录的联系人数量置为0,做逻辑清空即可。:判断如果当前通讯录中没有人员,就提示记录为空,人数大于0,显示通讯录中所有信息。:判断用户指定的联系人是否存在,如果存在显示信息,不存在则提示查无此人。:查找用户输入的联系人,如果查找成功进行修改操作,查找失败提示查无此人。
2024-04-19 21:14:08 651
原创 UnityShader——基础篇之渲染流水线
几何阶段和光栅化阶段可以分成若干更小的流水线阶段,这些流水线阶段由GPU来实现,每个阶段GPU提供了不同的可配置型或可编程性,如图:从图中可以看出,GPU的渲染流水线接受顶点数据作为输入,这些顶点数据是由应用阶段加载到显存中,再由Darw Call指定的,这些数据随后被传递给顶点着色器顶点着色器)是完全可编程的,它通常用于实现顶点的空间变换、顶点着色等功能曲面细分着色器)使一个可选的着色器,它用于细分图元几何着色器。
2024-04-19 11:49:35 1025
原创 C++进修——C++基础入门
数组就是一个集合,里面存放了相同类型的数据元素特点1:数组中的每个数据元素都是相同的数据类型特点2:数组是由连续的内存位置构成的数据类型 数组名[数组长度];数据类型 数组名[数组长度] = {值1,值2,值3};数据类型 数组名[] = {值1,值2,值3};i < 10;数据类型 数组名[行数][列数];数据类型 数组名[行数][列数] = {{数据1,数据2},{数据3,数据4}};
2024-04-19 04:47:53 837
原创 计算机网络——42攻击和对策
Denial of server(DOS)对策。对策:IP Spoofing 入口过滤。IP Spoofing欺骗。
2024-04-10 10:53:29 423
原创 计算机网络——40各个层次的安全性
Alice需要发送机密的报文m给BobAliceKsKsKsKsmKBKSBobKSKSKSmAlice数字签署文件发送报文(明文)和数字签名Alice 需要提供源端的报文完整性和可认证性KAKA−m))KAKA−m))Alice 需要提供机密性,源端可认证性和报文的完整性Alice使用了3个keys:自己的私钥,Bob的公钥,新产生出的对称式密钥。
2024-04-09 04:43:26 1445
原创 计算机网络——38报文完整性
对长报文进行公开密钥加密算法的实验需要耗费大量的时间Goal:固定长度,容易计算的"fingerprint"对m使用散列函数H,获得固定长度的报文摘要H(m)散列函数的特性多对一固定长度不变给定一个报文摘要x,反向计算出报文在计算上是不可行的x=H(m)Bob发送数字签名的报文Alice校检签名和报文完整性。
2024-04-07 05:02:29 900
原创 计算机网络——36加密原理
对称密钥密码学:发送方和接收方的秘钥相同公开秘钥密码学:发送方使用接收方的公钥进行加密,接收方使用自己的私钥进行解密。
2024-04-06 06:31:43 1095
原创 计算机网络——34LANs
指出高层协议(大多情况下是IP,但也支持其他网络层协议Novell IPX和Apple Talk)Walkthrough:发送数据报:由A通过R到B,假设A知道B的IP地址。Q:交换机如何知道通过接口1到达A,通过接口5到达B’?问题:已知B的IP地址,如何确定B的MAC地址。得到哪些主机(mac地址)可以通过哪些端口到达。制造商购入MAC地址空间(保证唯一性):6字节源MAC地址,目标MAC地址。局域网上每个适配器都有一个唯一的。IP地址和MAC地址的作用不同。A:每个交换机都有一个交换表(
2024-04-06 00:21:41 1294 1
原创 计算机网络——31数据链路层和局域网引论和服务
WAN:网络形式采用点到点链路点到点链路的链路层服务实现非常简单,封装和解封装LAN一般采用多点连接方式多点连接方式网络的链路层功能实现相当复杂。
2024-03-30 17:10:11 846
原创 计算机网络——30SDN控制平面
幸运的是,网络管理员不需要直接通过创建/发送流表来编程交换机,而是采用在控制器上的app自动运算和配置。:SDN控制器和SDN交换机之间进行通信。一些关键的控制器到交换机的报文。网络范围的状态管理层。网络控制应用的界面层。
2024-03-29 01:20:41 763
原创 计算机网络——29ISP之间的路由选择:BGP
一个平面的路由平面路由的问题规模管理层次路由:将互联网分成一个个AS(路由器区域)路由变成了:2个层次路由网管路由器。
2024-03-28 17:18:28 1063
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人