当前位置: 首页 > news >正文

3DGS之光栅化

光栅化(Rasterization)是计算机图形学中将连续的几何图形(如三角形、直线等)转换为离散像素的过程,最终在屏幕上形成图像。

一、光栅化的核心比喻

  1. 像画家在画布上作画 假设你是一个画家,要把一个3D立方体画到2D画布(屏幕)上。你需要将立方体可见的每个面分解成小色块(像素),并确定每个色块的颜色。光栅化就是这个“分解并填色”的过程,只不过计算机通过数学计算自动完成。

  2. 拼图游戏 光栅化类似于将一幅完整的拼图分解成无数小拼图块(像素),然后根据原图规则给每个小拼图块上色,最终拼出完整画面。

  3. 光栅设备的原理 屏幕像一块由横向和纵向栅格组成的“捕鱼网”(光栅),光栅化的过程就像用这些栅格过滤光线,只允许特定方向的光通过,从而形成图像(例如液晶显示器的工作原理)。

二、光栅化的具体步骤

  1. 输入几何图元 光栅化处理的基本单位通常是三角形(因为三角形是平面且无歧义的几何形状),输入数据包括三角形的顶点坐标、颜色、纹理等信息。

  2. 投影到屏幕空间 通过矩阵变换将3D模型映射到2D屏幕坐标系,类似于用相机拍摄物体后得到平面照片的过程。这一步会剔除视锥外的不可见部分(如相机背后的物体)。

  3. 分解为像素并判断覆盖关系 计算机遍历屏幕上的每个像素,判断其中心点是否在三角形内部。例如,通过叉乘计算三个边的方向与点到边的关系,若所有方向一致,则点在三角形内。

  4. 颜色插值与混合 若像素被覆盖,则根据顶点颜色或纹理坐标进行插值计算(如三角形的三个顶点是红、绿、蓝,中间像素会渐变过渡),同时处理透明度和遮挡关系(如使用深度缓冲Z-buffer)。

  5. 输出到屏幕 最终将所有像素的颜色存入帧缓冲区(Frame Buffer),显示器逐行扫描这些数据形成图像

三、光栅化中的关键问题与解决

  1. 锯齿(走样) 由于像素是离散的,斜线或曲线边缘会出现锯齿。例如,楼梯状的斜线边缘看起来不平滑。

    解决方法
    1. 多重采样(MSAA):对每个像素多次采样并混合结果,平滑边缘。
    2. 抗锯齿:先对图像进行模糊(低通滤波),再采样,减少高频信号带来的锯齿感。
  2. 性能优化

    • 包围盒(Bounding Box):仅处理三角形覆盖的像素区域,减少无效计算。
       
    • 深度测试(Z-Buffer):通过记录像素的深度值,避免绘制被遮挡的物体。

四、现实中的光栅化应用

  • 游戏渲染:实时生成逼真的3D场景,例如《少年派的奇幻漂流》中的虚拟老虎。
  • UI界面:手机、电脑屏幕的显示均依赖光栅化技术。
  • 科学可视化:将复杂数据(如气象模型)转化为直观的2D图像。

光栅化是计算机图形学的基石,通过将连续几何离散化为像素,让虚拟世界得以在屏幕上“活”起来。其核心逻辑是“分解-判断-填充”,结合数学计算与硬件加速,实现高效渲染。

欢迎关注公众号AutoSIM,新技术分享抢先一步查看


http://www.mrgr.cn/news/98287.html

相关文章:

  • mongodb 4.0+多文档事务的实现原理
  • 网络基础-路由技术和交换技术以及其各个协议
  • ubuntu 20.04 安装源码编译 ros humble过程
  • 深入详解MYSQL的MVCC机制
  • CAP理论 与 BASE理论
  • python——正则表达式
  • C++17模板编程与if constexpr深度解析
  • C# net CMS相关开源软件 技术选型 可行性分析
  • flutter 桌面应用之右键菜单
  • 【Python全栈】应用开发实战案例解析
  • 39.[前端开发-JavaScript高级]Day04-函数增强-argument-额外知识-对象增强
  • 【docker】--部署--安装docker教程
  • 【HD-RK3576-PI】Docker搭建与使用
  • 【第41节】windows的中断与异常及异常处理方式
  • 记录一个虚拟机分配资源的问题
  • 第二十四:查看当前 端口号是否被占用
  • Open-TeleVision源码解析——宇树摇操方案的重要参考:VR控制人形机器人采集数据
  • 高并发内存池(三):PageCache(页缓存)的实现
  • python基础:数据类型转换、运算符(算术运算符、比较运算符、逻辑运算符、三元运算符、位运算符)
  • CTF--bp