計算機圖形學基礎--Games101筆記(一)數學基礎與光柵化

文章目錄

  • 數學基礎
    • 向量
    • 插值
      • 三角形插值
      • 雙線性插值
    • 平面定義
      • 法線-點表示
  • 第一部分:光柵化
    • 坐標變換
      • 二維變換
      • 3D變換
      • 視圖變換(MVP)
      • 投影變換
    • 光柵化
      • 采樣
      • 抗鋸齒(反走樣)
      • 可見性(遮擋)
    • 著色與紋理
      • Blinn-Phong著色模型
      • 著色頻率
      • 渲染管線
      • 紋理
        • MipMpa方法
        • 紋理作用

數學基礎

向量

點乘,叉乘和投影:

插值

三角形插值

**重心坐標:**我們通過任意點的重心坐標來插值。 V = α V A + β V B + γ V C V=\alpha V_A+\beta V_B+\gamma V_C V=αVA?+βVB?+γVC?。注意重心坐標沒有投影不變性,如果插值三維屬性,需要利用投影前的坐標插值。例如深度插值應該用三維空間坐標。

雙線性插值

平面定義

法線-點表示

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

第一部分:光柵化

坐標變換

二維變換

從上述公式中我們發現,平移變換需要兩個向量的加和,為了使得所有的變換統一寫成矩陣乘法的形式,我們引入齊次坐標。在齊次坐標中,每個點表示為: ( x , y , 1 ) T (x,y,1)^\mathrm{T} (x,y,1)T,每個向量表示為: ( x , y , 0 ) T (x,y,0)^\mathrm{T} (x,y,0)T。通過這種方式我們可以確保,點加點等于點(中點),點減點等于向量,向量加減向量還是向量。點加減向量還是向量。特別地,我們認為 ( x , y , k ) T = ( x / k , y / k , 1 ) T (x,y,k)^\mathrm{T}=(x/k,y/k,1)^\mathrm{T} (x,y,k)T=(x/k,y/k,1)T。在引入齊次坐標后,平移可以寫成:
在這里插入圖片描述

在其次坐標系下的變化矩陣最后一行一般都是001,左上角是縮放,拉伸,鏡像,旋轉變化,最后一列是平移變換。在這種情況下,是先進性二維變換,在進行平移變換。

如果要求逆變換,求矩陣的逆即可。由于矩陣乘積不滿足交換律,因此計算的時候不可更改變換矩陣的順序。注意旋轉矩陣是正交矩陣,求旋轉矩陣的逆相當于求旋轉矩陣的轉置。

3D變換

在三位空間中點和向量的描述形式和二維空間類似(只增加了一個z維)。三位空間中的旋轉和二位空間有些許不同。我們按照xyz的順序構建坐標系,沿x軸旋轉的時候yxz是x軸,沿y軸旋轉的時候xz是-y軸。因此需要添加符號(conx=-conx)

我們可以通過分解的方式,吧沿任意軸旋轉a度分解為沿xyz軸分別旋轉a1,b1,c1度。也可以通過三位旋轉矩陣直接求沿著任意軸旋轉。 R ( n , α ) R(n,\alpha) R(n,α)是沿著空間中任意一個軸n逆時針旋轉 α \alpha α度后的結果。

視圖變換(MVP)

image-20250405164510392

投影變換

投影變換分為兩種:正交投影和透視投影。正交投影我們先做平移,再做縮放。我們把物體的中心移動到坐標軸遠點,之后把物體限制在(-1,1)的立方體中。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

**透視投影:**我們先把透視投影變換為正交投影所需的長方體,再進行正交投影。再壓縮透視投影的梯形體時,對于前面的面上的點,z值不變,后面面上的點同理。

光柵化

采樣

我們先忽略z軸,考慮-1,1的正方體。采樣就是判斷像素點是否在三角形內。我們可以對整個屏幕范圍采樣,也可以采用bounding采樣,還有行bounding采樣。

抗鋸齒(反走樣)

在這里插入圖片描述
在這里插入圖片描述

可見性(遮擋)

如何在采樣的時候維持正確的模型順序?–深度緩沖方法。該方法無法處理透明物體。如果兩個三角形在同一個像素內有相同的深度如何處理?(工程實現問題)

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

著色與紋理

著色器可以做任何事情!!!

在本章節,我們只考慮著色點本身,不考慮其他點(比如遮擋)。每個著色點可以是一個像素,也可以是一個fragment,這取決于我們如何采樣。I表示入色光的單位光強,V代表反色方向,n是法線。ivn都是單位向量。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

Blinn-Phong著色模型

該模型是一個經驗模型。在該模型中,我們考慮漫反射,鏡面反色和環境光。

漫反射diffuse: L d = k d ( I / r 2 ) m a x ( 0 , n I ) L_d=k_d(I/r^2)max(0,nI) Ld?=kd?(I/r2)max(0,nI)。其中kd為漫反射系數(物體顏色),nI是光線和著色點的cos值。

鏡面反射specular: L s = k s ( L / r 2 ) m a x ( 0 , n h ) p , , , h = ( v + I ) / ∣ ∣ V + I ∣ ∣ L_s=k_s(L/r^2)max(0,nh)^p,,,h=(v+I)/||V+I|| Ls?=ks?(L/r2)max(0,nh)p,,,h=(v+I)/∣∣V+I∣∣,H代表入i和v的半程向量,如果該半程向量與n很近,則代表人眼看到的高光越明顯(為什么算半程向量,而不是算光的反色向量和人眼向量的sin,是因為半程向量計算簡單)ks一般為白色。

環境光ambient: L a = K a I a L_a=K_aI_a La?=Ka?Ia?,該模型是一個經驗模型,環境光當作一個常熟項簡單處理。

最終著色: L d + L s + L a L_d+L_s+L_a Ld?+Ls?+La?

著色頻率

  1. 三角形著色,三角形法線可以用叉乘計算
  2. 頂點著色,頂點法線可以用該頂點相關的三角形的法線的加權平均值。此外也可以用該頂點實際表示的圖形來確定法線,例如如果用三角形組合表示圓,則頂點的法線防線可能是圓心到該頂點的連線方向。
  3. 像素著色(fragemt),算出三角形的所有頂點法線,用插值方法得到像素法線。phong shadings

渲染管線

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

紋理

物體不同位置可能有不同的屬性(著色時用特有的屬性而不用同一的屬性),該屬性定義在物體表面上。我們把這個屬性用一張圖(紋理圖)來表示,同時給出模型上每一個點對應紋理圖上的點(紋理映射,紋理坐標一般定義在三角形的頂點上)。

**紋理太小:**映射道德如果是紋理中的非整數坐標,我們可以采用該頂點周圍的四個點進行雙線性插值,用差值,返回插值后的屬性。

**紋理太大:**紋理太大時會導致采樣頻率不足,從而產生走樣。不同像素覆蓋紋理的區域不同,有些點可能實際覆蓋了很大一部分紋理區域,只返回該點的屬性必然會導致走樣問題。可以通過范圍查詢方法MipMap來緩解。范圍查詢返回一定范圍內的平均值,MipMap是一種近似方法,fast,approx,square。該方法在遠距離下會導致過度模糊。

MipMpa方法

該方法會提前計算4和1,8和1,,,,點的平均值,并保存 l o g 2 h log_2h log2?h個紋理圖。其中h是正方形紋理的長度。

在進行紋理映射時,我們首先確定每個點所覆蓋的紋理范圍。我們通過該點周圍的四個點的坐標來把紋理覆蓋范圍近似成正方形。通過紋理覆蓋范圍的邊長查找相應層級的紋理圖。如果log2L不為整數,我們可以在兩層紋理圖中采用三線性插值的方式得到最終屬性。

MipMap方法無法解決該點所覆蓋的紋理是矩形(尤其是長條矩形)情況下的的走樣問題。一種緩解方法是各向異性過濾。該方維護不同長寬比例下的紋理分層圖。

如果要緩解傾斜矩形,可以采用EWA filtering方法,但是該方法計算量大。

紋理作用

**環境光紋理:**紋理可認為是gpu中的一塊數據,可以做點查詢和范圍查詢。因此我們可以把環境光做成紋理,渲染過程中通過紋理映射仿照環境光。我們可以用一個光滑的球體來記錄環境光,把球展開貼到環境中的物體表面。用球有個缺點是極點初會被壓縮。為了解決這個問題,我們可以用一個正方體包圍一個球體。把球體上的每一個點都沿著法線方向打到立方體表面。

**凹凸貼圖:**凹凸貼圖定義了每個點的相對移動距離,從而改變著色點的法線,渲染出一種凹凸的質感。實際上該點并不會凹凸。我們假設原始表面是水平,并且法線向上。在二維情況下更改后的法線如下圖左圖。我們通過推廣,可以得到三位空間下更改后的法線,下圖右圖。(紋理保存的是高度變化信息h)。注意在三位空間中,法線方向不一定為001,此時我們需要轉換坐標系,在新的坐標系下法線方向為001,此時我們求出新坐標系下更改后的法線,再將該法線映射會原坐標系。

**三維紋理:**我們也可以定義一個三維空間的噪聲函數來作為紋理。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

**環境光遮蔽紋理:**我們可以提前算出物體的環境光遮蔽,把他保存為紋理,加速實時渲染。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81679.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81679.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81679.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

@RequestParam 和 @RequestBody、HttpServletrequest 與HttpServletResponse

在Java Web開發中,RequestParam、RequestBody、HttpServletRequest 和 HttpServletResponse 是常用的組件,它們用于處理HTTP請求和響應。下面分別介紹它們的使用場景和使用方法: 1. RequestParam RequestParam 是Spring MVC框架中的注解&am…

【硬核數學】2. AI如何“學習”?微積分揭秘模型優化的奧秘《從零構建機器學習、深度學習到LLM的數學認知》

在上一篇中,我們探索了線性代數如何幫助AI表示數據(向量、矩陣)和變換數據(矩陣乘法)。但AI的魅力遠不止于此,它最核心的能力是“學習”——從數據中自動調整自身,以做出越來越準確的預測或決策…

10.15 LangChain v0.3重磅升級:Tool Calling技術顛覆大模型工具調用,效率飆升300%!

LangChain v0.3 技術生態與未來發展:支持 Tool Calling 的大模型 關鍵詞:LangChain Tool Calling, 大模型工具調用, @tool 裝飾器, ToolMessage 管理, Few-shot Prompting 1. Tool Calling 的技術革新 LangChain v0.3 的工具調用(Tool Calling)功能標志著大模型應用開發進…

[架構之美]從PDMan一鍵生成數據庫設計文檔:Word導出全流程詳解(二十)

[架構之美]從PDMan一鍵生成數據庫設計文檔:Word導出全流程詳解(二十) 一、痛點 你是否經歷過這些場景? 數據庫字段頻繁變更,維護文檔耗時費力用Excel維護表結構,版本混亂難以追溯手動編寫Word文檔&#…

Image and depth from a conventional camera with a coded aperture論文閱讀

Image and depth from a conventional camera with a coded aperture 1. 研究目標與實際意義1.1 研究目標1.2 實際問題與產業意義2. 創新方法:編碼光圈設計與統計模型2.1 核心思路2.2 關鍵公式與模型架構2.2.1 圖像形成模型2.2.2 深度可區分性準則2.2.3 統計模型與優化框架2.2…

JMeter 教程:使用 HTTP 請求的參數列表發送 POST 請求(form 表單格式)

目錄 ? 教程目的 🛠? 準備工作 📄 操作步驟 第一步:新建測試計劃 第二步:添加 HTTP 請求 第三步:添加參數列表(表單參數) 第四步:添加結果查看器 第五步:運行測…

交易所開發:構建功能完備的金融基礎設施全流程指南

交易所開發:構建功能完備的金融基礎設施全流程指南 ——從技術架構到合規安全的系統性解決方案 一、開發流程:從需求分析到運維優化 開發一款功能完備的交易所需要遵循全生命周期管理理念,涵蓋市場定位、技術實現、安全防護和持續迭代四大階…

【數據結構篇】排序1(插入排序與選擇排序)

注:本文以排升序為例 常見的排序算法: 目錄: 一 直接插入排序: 1.1 基本思想: 1.2 代碼: 1.3 復雜度: 二 希爾排序(直接插入排序的優化): 2.1 基本思想…

Cursor日常配置指南

文章目錄 整體說明一、簡單介紹1.1、簡介1.2、功能 二、日常配置2.1、Profiles 簡介2.2、Cursor 配置2.2.1、通用設置(General)2.2.2、功能設置(Features)2.2.2.1、長上下文(Large context)2.2.2.2、代碼索…

客戶體驗數據使用的三種視角——旅程視角

企業收集到大量的客戶體驗數據之后,應該如何應用?有哪些主要的使用場景和分析視角呢?接下來,體驗家團隊將通過三篇文章陸續介紹體驗數據的三種應用場景,以幫助企業更有效地利用體驗數據進行改進。 這三個場景分別是…

大語言模型怎么進行記憶的

大語言模型怎么進行記憶的 大語言模型(LLM)本身是無狀態的,每次輸入獨立處理,但可通過以下方式實現對話記憶及長期記憶能力: 模型架構改進 顯式記憶模塊: 記憶網絡(Memory Networks) :在模型里嵌入可讀寫的記憶單元,像鍵值存儲 (Key - Value Memory)或動態記憶矩…

Spring Boot 與 RabbitMQ 的深度集成實踐(三)

高級特性實現 消息持久化 在實際的生產環境中,消息的可靠性是至關重要的。消息持久化是確保 RabbitMQ 在發生故障或重啟后,消息不會丟失的關鍵機制。它涉及到消息、隊列和交換機的持久化配置。 首先,配置隊列持久化。在創建隊列時&#xf…

成功案例丨GEZE與Altair合作推動智能建筑系統開發

Altair 作為計算智能領域的全球領導者,將分別在北京、上海、成都、深圳舉辦 “AI驅動,仿真未來”Altair 區域技術交流會。屆時將匯聚行業專家與先鋒企業,共同探討仿真智能化如何賦能工業創新,分享最新仿真與 AI 技術的應用實踐。歡…

DDoS與CC攻擊:誰才是服務器的終極威脅?

在網絡安全領域,DDoS(分布式拒絕服務)與CC(Challenge Collapsar)攻擊是兩種最常見的拒絕服務攻擊方式。它們的目標都是通過消耗服務器資源,導致服務不可用,但攻擊方式、威脅程度和防御策略存在顯…

循環中使用el-form

循環中使用el-form 主要是校驗問題 el-table 的數據 :data“ruleForm.tableData” :prop“‘tableData.’ $index ‘.name’” :rules“rules.name” <el-button type"primary" click"addNewData">新增項目</el-button><el-form :model&…

SAP學習筆記 - 開發13 - CAP 之 添加數據庫支持(Sqlite)

上一章學習了CAP開發準備&#xff0c;添加Service。 SAP學習筆記 - 開發12 - CAP 之 開發準備&#xff0c;添加服務-CSDN博客 本章繼續學習CAP開發 - 添加數據庫支持&#xff08;Sqlite&#xff09;。 目錄 1&#xff0c;數據庫準備 - H2 內存數據庫 - Sqlite數據庫 a&…

【數據結構與算法】——圖(三)——最小生成樹

前言 本將介紹最小生成樹以及普里姆算法&#xff08;Prim&#xff09;和克魯斯卡爾&#xff08;Kruskal&#xff09; 本人其他博客&#xff1a;https://blog.csdn.net/2401_86940607 圖的基本概念和存儲結構&#xff1a;【數據結構與算法】——圖&#xff08;一&#xff09; 源…

Flink運維要點

一、Flink 運維核心策略 1. 集群部署與監控 資源規劃 按業務優先級分配資源&#xff1a;核心作業優先保障內存和 CPU&#xff0c;避免資源競爭。示例&#xff1a;為實時風控作業分配專用 TaskManager&#xff0c;配置 taskmanager.memory.process.size8g。 監控體系 集成 Prom…

面試點補充

目錄 1. 搭建lnmp Linux 系統基礎命令 nginx相關命令 MySQL 相關命令 PHP 相關命令 驗證命令 下載并部署 Discuz! X3.4 論壇 到 Nginx 網站 2. 腦裂 2.1 腦裂的定義 2.2 腦裂產生的原因 1. 主備節點之間的心跳線中斷 2. 優先級沖突 3. 系統或服務負載過高 2.3 如何…

天能股份SAP系統整合實戰:如何用8個月實現零業務中斷的集團化管理升級

目錄 天能股份SAP系統整合案例&#xff1a;技術驅動集團化管理的破局之路 一、企業背景&#xff1a;新能源巨頭的數字化挑戰 二、項目難點&#xff1a;制造業的特殊攻堅戰 1. 生產連續性剛性需求 2. 數據整合三重障礙 3. 資源限制下的技術突圍 三、解決方案&#xff1a;S…