跳转到内容

分形/计算机图形技术/3D

来自维基教科书,开放的世界,开放的书籍
  • API (C++、JS...)
  • 后端(渲染器后端架构)
    • Linux、macOS 和 Windows 的 OpenGL 4.1+
    • Android 和 iOS 的 OpenGL ES 3.0+
    • macOS 和 iOS 的 Metal
    • Android、Linux、macOS 和 Windows 的 Vulkan 1.0
    • 所有平台的 WebGL 2.0

渲染

  • 图像顺序渲染(基于 CPU 的光线追踪)
  • 对象顺序渲染(基于 GPU 的渲染。更快,因为我们可以并行地对不同的顶点应用相同的指令。)


 "A single frame in Toy story 4 could take anywhere between 60 to 160 hours to render using CPU based ray tracing."Brendan Galea The Math behind (most) 3D games - Perspective Projection by  Brendan Galea
  • 网格
  • 纹理(贴图)
  • 几何变换
  • 管道


3D 图形与矢量图形比与光栅图形有更多共同点。图像内容被指定为几何对象的列表。该技术被称为几何建模。

渲染场景 = 创建 3D 对象/世界的 2D 图像[1]

3d 静态图像

[编辑 | 编辑源代码]

3D 图形程序的任务是将 3D 环境的规范转换为 2D 图片。[2]

有两种方式可以生成这样的图片

  • 实时渲染(交互式图形应用程序,如视频游戏或模拟)
  • 非实时渲染(非交互式图形应用程序,如电影)。


使用 API 的主机程序(CPU)的编程语言

  • C
  • C++

特殊 API

  • OpenGL
  • WebGl
  • Direct3D
  • Vulkan
  • OpenCl
  • CUDA

着色器程序(GPU)的编程语言

  • GLSL(OpenGl)
  • HLSL(DirectX)
  • Cg(NVIDIA 的着色语言)

管道或工作流程

[编辑 | 编辑源代码]
3D 渲染

3D 管道包含

  • 硬件管道(主内存、CPU、PCI Express 总线、GPU 和 GPU 内存)
  • 软件管道


软件管道

  • CPU 上的主机程序(在 CPU 上运行的 3D 程序)
  • GPU 上的着色器程序(3D 数据处理的大部分)

主机程序的工作包括

  • 初始化
  • 设置或重新配置 3D 软件管道
  • 构建着色器程序
  • 将着色器程序传输到 GPU
  • 数据管理
  • 加载 3D 数据
  • 处理 3D 数据
  • 更新 3D 数据
  • 将 3D 数据传输到 GPU
  • 向 GPU 发送命令
  • 处理用户输入并更新 3D 数据

着色器程序

  • 顶点着色器
  • 片段着色器
  • 几何着色器


每个 API 都有自己的管道

  • MeshLab - 用于处理和编辑 3D 三角形网格的开源系统。

它提供了一组用于编辑、清理、修复、检查、渲染、纹理化和转换网格的工具。它提供了用于处理由 3D 数字化工具/设备生成的原始数据以及为 3D 打印准备模型的功能。

将 2D 图像转换为 3D

[编辑 | 编辑源代码]
  • 映射到黎曼球面的 2D 分形


对于每个像素的高度,可以使用

  • 到边界的距离: "我使用距离估计方法 (DEM) 作为我高度值的依据。(反转、对数、缩放和拉伸等)" Duncan C[3]
  • 分数迭代值 [4]

3D 到 2D

[编辑 | 编辑源代码]
  • 将 3D 空间中的点投影到可以展开的圆柱形表面上,到平面上[5]

从 2D 图像制作的视频或动画

[编辑 | 编辑源代码]

视频和动画有什么区别?

用于进行转换的软件

参数平面

[编辑 | 编辑源代码]

可以使用以下方法制作视频

  • 在参数平面上沿着一些路径移动(例如内部和外部射线)
  • 用于缩放动画的庞加莱半平面度量[7]
  • 缩放 到参数平面[8][9][10] 使用自动确定最大迭代次数[11]
  • 更改配色方案(例如颜色循环 - Fractint)
  • 更改算法的某些参数,例如
    • 逃逸时间算法的最大迭代次数
    • 逃逸值[12]
  • 从 c=-0.75+i 到 c=-0.75-i 的直线。它大部分位于曼德勃罗集的外部(因此,朱利亚集是分离的,没有内部)。只有一个点 c=-0.75,其中 c 属于曼德勃罗集的边界(周期 1 和 2 双曲分量的根点)。在那个点上,朱利亚集有内部(抛物线)。[13]
  • 从 c=-2 到 c=1.65(曼德勃罗集的实切片)[14]
  • 以 -1 为中心,半径为 0.25 的圆
  • 围绕主心形[15]
  • 参数沿着以 -0.29848658+0.65843271i 为中心,半径为 0.004 的圆形移动。在参数平面上,这在曼德勃罗分形的某个点周围形成了一个圆,该点以非常松散的螺旋形辐射出 11 根线。[16]
  • 以 -1.57621921451761 为中心,半径为 3.6 x 10^-10 的圆形移动。在参数平面上,这在那个位置的一个迷你勃罗特周围形成了一个圆,但没有穿过迷你勃罗特本身。[17]

参考文献

[编辑 | 编辑源代码]
华夏公益教科书