[toc] # 全局光照的定义 一次弹射是直接光,多次弹射是间接光,直接光加上所有的间接光的和就是全局光照 其中积分形式的渲染方程定义如下 # 概率密度函数 PDF (Probability Density Function) 最下面的式子是对应概率密度下的期望 # 蒙特卡洛解复杂积分 (数值) 定积分 如果一个积分表达式很难得到解析式,那我们如何得到积分的值呢? 这就用到了蒙特卡洛方法。 # 黎曼积分 黎曼积分是将函数划分为无数小的矩形 (二维) 来进行累加和求解积分数值 # 蒙特卡洛方法 使用概率的方式采样曲线,在积分域内不断采样 x, 设采样的 y...

[toc] # 4 寻找两个正序数组的中位数 类似于二分,可以递归解,每次可以排除 K/2 个元素,以 A,B K/2 为初始条件递归, K=(M+N)/2 1. A[K/2] < B[K/2] 那么总共小于 B [K/2] 的元素个数严格小于 K, 即 A [K/2] 之前的数据全部不可能是中位数 2. A[K/2] > B[K/2] 同上,B [K/2] 之前的不可能是中位数 3. A[K/2] == B[K/2] 则表示 A/B 之中最小的那个必是中位数 1/2 每次去掉 K/2...

[toc] 最近在学习 GPGPU 相关的知识,开这个系列对学习的知识进行总结 # GPU 是什么 GPU 全称是 Graphics Processing Unit,图形处理单元。它的功能最初与名字一致,是专门用于绘制图像和处理图元数据的特定芯片,后来渐渐加入了其它很多功能。 GPU 架构发展史 (NVIDIA) 大体而言: GPU 在早期是为了优化 3D 渲染管线而诞生的一种架构,其主要的目标就是对大批量的矩阵运算与数值运算进行高并发的处理。  在架构演化中,人们发现 GPU 的性能不应该值限制在 3D 渲染这一个领域内,同时,借助人工智能中神经网络的兴起,GPU...

[toc] # 基础概念 # 光流量 Flux 为了度量光能在瞬间的能量,提出了一个量化的参数 Radiant flux 。 它的定义是: Radiant flux,also known as power,is the total amount of energy passing through a surface or region of space per unit time. 在某一单位时间内通过某一区域或表面的光能量。 举个栗子,在一小时内发射出 Q = 200000J 能量的光源,其光流量为: 将单位时间的光流量抽象成函数,那么某段时间内对光流量的积分就是这段时间发射出的总光量: #...

[toc] # 光线追踪的着色 由上一节我们可以知道,rayTracing 从摄像机触发,向屏幕逐像素释放射线并计算路径上碰撞体的融合颜色。 最后在目标像素上输出融合颜色,这个过程就是 rayTracing 染色的过程。 那么另外一个问题是,如何在 rayTracing 的框架下实现传统的着色呢?我们需要知道几个变量 物体表面法线 光源位置 相机到物体表面的方向向量与 hitPoint 我们假设: 1. 法线方向为从相机出发到物体表面的射线方向,自定义一个光源方向。 2. 假设着色模型为表面法线与光源方向的点积(即背向光源的越来越黑) 这样最基础的光照模型 #...

[toc] # 为何要使用 Texture 传递数据 在工作的时候遇到一个问题,华为的 Mali 架构系统手机的 OpenGL ES3.0 实际上不支持使用 SSBO 的,但是 Vulkan 可以。 这就产生了一个问题,如果不支持 SSBO,就没法用 StructedBuffer, 而 ContantBuffer 只支持 64KB, 也就意味着 Shader 的参数数量会限制 GpuInstance 的数量,哪怕 Unity 限制每个 Draw 最多只能 Draw 可以支持 Shader 参数的数量,而且如果拆的很细,又会破坏掉 StructedBuffer...

[toc] https://www.baidu.com/link?url=NV5sFLdJTrizgjWcTkrOGVeNf7fCBOgpTI5NAK22gFMyANQqa8iG2QConDRQLHWS&wd=&eqid=ccc38590000002820000000463f1e1f8 公式可视化 ↑ # Ray 的公式 我们可以将线的公式解释为 y = ax + b RatTraing 中的 Ray (也是射线) 的定义是: 有起点和终点的线 Ray 的描述为: # RGB 编码方式 r8g8b8a9 就是每个单位 8 位,最后一个颜色会转换成一个整数,int...

[toc] # 前言 看了一下午 Entitas, 最终发现这个插件的问题有点多,所以选择一个较轻量级的框架进行 ECS 的学习,即 Svelto-ecs # 我所理解的 ECS 通常 ECS 的架构会如上图所示,即 System 驱动 Entity, 而 Entity 下则挂上属于他的 Component 组件,ECS World 负责驱动所有的 System. 其中,System 负责管理 Entity 和 Component 通常在 C# 中为了实现高效的 ECS, 会将 Component 抽象成只有数据的 struct , 而 Entity 则负责维护他身上所有的非托管的组件数据...

[toc] # 蓝图开发 # 1. 实现蓝图组 主要功能点有几个: 更改功能组的标题 拖拽右下角可以对功能组的大小进行调整 可以吸附功能组内的元素一起移动 保证在所有元素最下方 # 1. 更改功能组标题 这个比较简单,直接暴露一个标题参数,然后在 Editor 的 OnHeaderGUI 重载中刷新题头 12345public override void OnHeaderGUI(){ var self = group; GUILayout.Label(self.title, NodeEditorResources.styles.nodeHeader,...