QXSoftware


千里之行,始于足下。

缓存和性能提升

缓存的意义 CPU 的缓存(L1 L2 L3)是 CPU 和内存之间的临时存储器,它的速度非常快,可以极大缓解内存速度慢导致 CPU 等待数据传输的问题。 其实可以把这个概念扩展一下,如果有一些数据需要从硬盘上读取,那么可以用内存当做这些资源的“缓存”。通过设计一个合理的缓存机制,可以减少...

数字的补码

补数计算法(Method of complements) 首先,网上流传的“补码”一般是指二进制补码,而这里说的是广义的“补码”,或者“补数”。我们说一个数字的时候,必须明确这个数字是什么进制的。比如 1234510,对于常用的十进制数,一般都会把下标省去。 那么,我们如何算出 12345...

浮点数精度

之前只知道浮点数存在精度问题,但是不理解为什么。现在通过维基百科学习了,在此记录下来。 浮点数的格式 浮点数是按照 符号位 + 指数位 + 小数位 来存储的。按照位数的不同,分为单精度浮点数和双精度浮点数。 单精度浮点数(float/single) 单精度浮点数的第 1 位是符号位...

法线贴图和高光贴图

之前在项目中经常说起法线贴图和高光贴图,这些到底是什么呢? 法线贴图(Normal Map) 首先,法线贴图是一张特殊的纹理,其中每个像素中存储的是法线信息。按照存储的法线信息不同分为两类:模型空间的法线贴图和切空间的法线贴图。 模型空间的法线贴图 如果法线纹理中存储的是模型空间中的法...

Unity 基本光照模型

基本光照成分 实际使用中的光照模型把光分成 4 种独立的成分:环境光(Ambient Light)、散射光(Diffuse Light)、镜面光(Specular Light)和自发光(Emissive Light)。 环境光(Ambient Light) 环境光是那些在环境中进行了充分...

Unity 渲染顺序详解

准备工作 工欲善其事,必先利其器。为了搞清楚 Unity 的渲染顺序,首先我们要准备一个能方便修改 SortingLayer 以及 RenderQueue 的工具,下面这个编辑器脚本可以满足这个需求: MeshRendererInspector.cs 效果如下: 如何添加新的 So...

Unity Shader 语义

Shader 语法和 C 语言类似,但是有一个很特别的东西:语义(Semantics)。 语义用来表明一个变量到底代表什么含义。下面就 vertex shader 和 fragment shader 的输入输出语义进行总结。 Vertex Shader Input Semantics ...

Unity Shader 内置变换矩阵

Unity 有很多内置变换矩阵: 变量名 描述 UNITY_MATRIX_MVP 当前的模型观察投影矩阵,用于将顶点/方向矢量从模型空间转换到裁剪空间 UNITY...