浮点数误差分析及补偿

    在各种渲染引擎中使用浮点数几乎可以肯定一定会产生浮点数误差,而渲染引擎的大量计算量也不允许使用其他特别高精度的浮点数,因而需要一定程度的精度补偿。事实上,浮点数并不适合用于精确计算,而适合进行科学计算。 float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字; double […]

折射光线方向公式推导

    先给出结论:折射方向公式: t={η_1\over η_2}i+({η_1\over η_2}cos\theta_i-\sqrt{1-sin^2\theta_t})n   要注意的是,这个向量不是单位向量,使用前请自行单位化。   下面开始证明,根据 Snell 法则: {sin\theta_1 \over sin\ […]

可编辑网格的存储方式

  渲染时使用的数据结构往往是数组,因为它节约存储空间而且方便索引进行随机访问。但是在模型编辑软件如 Blender、MAYA 中就不能使用数组,取而代之的是类似于链表的数据结构。   为了方便修改,网格信息时一般不只存储顶点信息,往往还会保存连接信息(mesh connectivity)。 邻接三角形结构     这次要讨论的 […]

OpenGL 中的 mipmap

  mipmap   使用 mipmap 时,OpenGL 根据被映射对象的大小(单位是像素),自动决定使用纹理图的哪个分辨率级别。mipmap 表示着纹理的层次细节(LOD),随着对象图像变小,使用纹理图的大小将减少。mipmap 需要一些额外的计算和纹理存储空间(大概三分之一),但这些消耗是值得的,如果不使用 mipmap ,那么映射到更小图像上的纹理将随着物体移动而闪烁。   Op […]

蒙特卡罗综述

    许多事情在生活中太难以评估,特别是当它涉及非常大的数字。例如,计算一个国家的成年人口的平均高度,将需要测量每个人的身高,身高值相加除以总人数。这明显是不可能的,这种任务需要很长的时间,非常难以求解。在这种情况下,可以做的是取一个样本的人口并计算其平均高度,以此来估算整个国家人口的平均高度。这是统计学中最简单的概念。   需要特别提醒的是,在这个例子中,随机选取的人的身高是随机数, […]

光线追踪简述

    光线追踪(Ray tracing)是三维计算机图形学中的特殊渲染算法,跟踪从眼睛发出的光线而不是光源发出的光线,通过这样一项技术生成编排好的场景的数学模型显现出来。这样得到的结果类似于光线投射与扫描线渲染方法的结果,但是这种方法有更好的光学效果,例如对于反射与折射有更准确的模拟效果,并且效率非常高,所以当追求高质量的效果时经常使用这种方法。 光线追踪分为两种: […]

图形学中的辐射度

    写在前面   光线追踪中最基础的部分是光线的传播和反射(一般把表面双向透射分布函数[BTDF]和双向反射分布函数[BRDF]统一处理为 BSDF,即双向散射分布函数),辐射度测量学则提供了相关数学概念,构成了基于物理渲染算法推导过程的基本内容。   本文使用和 PBRT 相同的左手系,即球坐标中 \phi 表示范围为 [0 […]