本文将通《世界金融史》了解金融的发展,金融是如何驱动世界运转,以及相关的理财产品。
世界金融简史
社会是如何稳定运转的
常用的理财产品
常用的数据分析软件和工具
总结
参考
- 《世界金融史》
Done is better than perfect
在计算机科学中,组成原理通常指的是计算机系统的基本组成部分,比如主板 (Motherboard)、中央处理器(CPU)、存储器(内存)、输入/输出设备等,并且涉及到它们之间的连接和交互。本节主要介绍一下PC和手机的组成部件,以及它们的作用。
主板 (Motherboard)主要由BIOS、总线、扩展插槽、芯片组和I/O端口等组成。
后处理是指,在正常渲染管线结束后,对渲染出来的结果进行加工,以此来模拟各种效果。
颜色(color) 对应电磁波的可见光波段,是被后期处理的波长信息。颜色既是物体的客观属性——确定的波长,又带有大脑的主观属性——不同的个体对特定波长的电磁波敏感程度不同,感受的颜色也有差异。 为了表示色彩,人们建立了一维、二维、三维甚至四维空间坐标模型,这些色彩模型称为颜色空间。颜色空间多达百种,常见的有如下5种。
在影像制作和后期处理中,Linear、LogC和Gamma是三种关键的概念,它们描述了不同的图像数据处理和表示方法。理解它们之间的区别对于正确处理图像和视频数据非常重要。
Linear(线性): Linear指的是一种线性响应的色彩空间,其中记录的图像亮度值直接对应于场景中的实际光照强度。在线性色彩空间中,如果场景中一个区域的光照强度是另一个区域的两倍,那么记录的数值也会是两倍。这种表示方式使得图像的色彩混合和处理在数学上更加直接和简单,但由于人眼对亮度的感知是非线性的,线性空间通常不适用于最终图像的显示。
LogC(对数) LogC是ARRI摄影机特有的一种对数色彩空间,它旨在通过对数曲线来模拟人眼对亮度的非线性感知,使得在有限的比特深度下能够捕获更宽的动态范围。LogC色彩空间特别适合于记录高动态范围的场景,因为它能够有效地保留高光和阴影中的细节。然而,LogC图像在没有经过适当的色彩校正或应用LUT(查找表)之前,看起来会显得非常低饱和和低对比度。
Gamma Gamma校正是一种用于调整图像亮度的非线性操作,旨在使图像在特定显示设备上的显示更符合人眼的感知特性。Gamma校正可以被视为在图像数据和最终显示之间的一个桥梁,用于调整图像的整体亮度和对比度。不同的显示设备和媒体标准可能会使用不同的Gamma值,如sRGB标准使用大约2.2的Gamma值。
总结
Linear色彩空间: 最适合图像的处理和合成,需要在最终输出前转换到适合观看的色彩空间。
LogC色彩空间: 用于捕获和记录高动态范围的图像,需要在后期处理中进行色彩校正。
Gamma校正: 用于调整图像的显示,以符合人眼对亮度的非线性感知和特定显示设备的要求。
本文的目的是通过Shader代码实现Photoshop的图层混合模式,图层混合模式是将上图层中的颜色与下层图层中的颜色,通过一个公式计算出最总的颜色。
具体的公式如下:
混合模式 | 公式 | 说明 |
---|---|---|
透明度 | alpha * foregroundCol + bgCol * (1.0 - alpha) | 实现Alpha混合 |
变暗 | min(bgCol, foregroundCol) | 上下图层中,取最小的颜色值 |
正片叠底 | bgCol * foregroundCol | 混合后颜色整体压暗,最常用的混合模式 |
颜色加深 | 1 - ((1-bgCol) / foregroundCol) | - |
线性加深 | bgCol + foregroundCol - 1 | - |
变亮 | max(bgCol, foregroundCol) | 上下图层中,取最大的颜色值 |
滤色 | 1 - (1-bgCol) * (1-foregroundCol) | 和正片叠底真好向反,两图层取反后再乘,再取反,也是比较常用的混合模式 |
颜色减淡 | bgCol / (1-foregroundCol) | - |
线性减淡 | bgCol + foregroundCol | - |
叠加 | 当bgCol<0.5时, 2(bgColforegroundCol); 当bgCol >= 0.5时, 1-2(1-bgCol)(1-foregroundCol) | 当bgCol小于0.5时,使用2倍的正片叠底;当bgColr大于等于0.5时,使用2倍的滤色,使用2倍是为了当bgCol=0.5时不断层. |
柔光 | 当foregroundCol<0.5时, 2bgColforegroundCol+pow(bgCol,2)(1-2foregroundCol); 当foregroundCol >= 0.5时, (2bgCol(1-foregroundCol)+sqrt(bgCol)(2foregroundCol - 1)) | - |
强光 | 当foregroundCol<0.5时, bgCol * (2foregroundCol); 当foregroundCol >= 0.5时, 1-((1-bgCol) (1-2*(foregroundCol - 0.5))) | - |
亮光 | 当foregroundCol<0.5时, 1-(1-bgCol)/(2foregroundCol); 当foregroundCol >= 0.5时, bgCol/(1-2(foregroundCol-0.5)) | - |
线性光 | 当foregroundCol<0.5时, bgCol+2foregroundCol-1; 当foregroundCol >= 0.5时, bgCol+2(foregroundCol-0.5) | - |
点光 | 当foregroundCol<0.5时, min(bgCol, 2foregroundCol); 当foregroundCol >= 0.5时, max(bgCol, 2(foregroundCol-0.5)) | - |
差值 | abs(bgCol-foregroundCol) | - |
排除 | 0.5-2(bgCol-0.5)(foregroundCol-0.5) | - |
减去 | bgCol-foregroundCol | - |
要在屏幕上绘制几何体时,Unity会调用底层的图形API的Draw命令进行绘制。一个Draw命令高数图形API绘制什么以及如何绘制。每个Draw命令都包含图形API所需的所有信息,其中包括texture,shader和buffers数据。绘图调用可能是资源密集型的,但绘图调用的准备工作通常比绘图调用本身更耗费资源。
准备绘制调用时,CPU去构建资源并通过图形API改变GPU的内部设置。这些设置统称为渲染状态。改变这些渲染状态通常时资源密集型的操作,比如切换不同的材质时。 因为渲染状态的改变是资源密集型的,所有减少渲染状态改变的次数是主要的优化方法,这有两种方法能到达此目的:
优化绘制调用和渲染状态改变数量,主要减少每帧的时间,它也能:
Unity提供了如下几种优化绘制调用和渲染状态的方法,一些方法只适用于特定的场景。
您可以在同一场景中使用多个绘制调用优化方法,但请注意,Unity会按特定顺序对绘制调用优化方法进行优先排序。如果您将一个游戏对象标记为使用多种绘制调用优化方法,Unity将使用优先级最高的方法。唯一的例外是SRP Batcher。当您使用SRP Batcher时,Unity还支持对与SRP Batcher兼容的游戏对象进行静态批处理。 Unity 按以下顺序对绘制调用优化进行优先排序:
如果您将GameObject标记为静态批处理并且Unity成功对其进行了批处理,Unity会禁用该GameObject的GPU实例化,即使渲染器使用实例化着色器也是如此。发生这种情况时,Inspector 窗口显示一条警告消息,建议您禁用静态批处理。 同样,如果Unity可以对网格使用GPU实例化,Unity会禁用该网格的动态批处理。
通用渲染管线(URP)是Unity官方创建的可编程渲染管线(SRP)。URP提供了艺术家友好的工作流程,能够快速且简单创建跨平台的图形,从移动端到高端控制台和PC。SRP的内容可以参见:Unity渲染管线介绍。
Unity将渲染管线的代码分为了几个包,分别如下:
从名字我们可以看出,这个阶段是由我们的应用主导的,因此通常由CPU负责实现。换句话说,我们这些开发者具有这个阶段的绝对控制权。 在这阶段中,开发者有3个主要任务:
这一阶段最重要的输出是渲染所需的几何信息,即渲染图元(rendering primitives)。通俗来讲,渲染图元可以是点、线、三角面等。这些渲染图元将会被传递给下一个阶段——几何阶段。
在开始学习ShaderLab之前,我们先简单的了解一下着色器语言。着色器语言主要分为离线渲染时使用的着色器语言和实时渲染中使用的着色器语言。
离线作色器语言
实时着色器语言
ShaderLab与以上的作色语言有什么区别呢?ShaderLab是Unity定义的一个Shader描述性语言,不能直接在对应图形平台运行,并且是夸平台。为了更好的理解它们的区别,先来看一下OpenGL是如何通过GLSL着色语言对一个三角形进行着色的。
这篇文章覆盖了制作六边形地图所涉及到相关的方法,通用公式和算法。为了文章更加优雅简洁,文中的实例都将使用伪代码进行描述。
六边形是由六个边组成的。正六边形的每条边长度相同。我们这里假设所有的六边形都是正六边形。六边形的方向有两个:
1. 垂直列方向(六边形的任意两条平行边在垂直方向上)
六边形有6个边和6个角。每个边被两个六边形共享。每个角被三个六边形共享。更多关于中心点(centers), 边(sides), 和 角(corners)可以参见这篇文章(四边形,六边性和三角形)。
Lua的核心代码主要分为以下几个模块:
核心API
GC管理
词法,语法和语义分析器
Lua虚拟机(解释器)