跳轉到內容

分形/計算機圖形技術/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]

參考文獻

[編輯 | 編輯原始碼]
華夏公益教科書