WEBVTT 00:00:00.300 --> 00:00:04.951 我們現在對合理時間內計算光的效果有些概念 00:00:05.031 --> 00:00:10.567 這門課我們概觀地來看繪圖加速器如何繪製物件 00:00:10.609 --> 00:00:15.395 這個硬體通常叫作 GPU(Graphics Processing Unit) 00:00:15.426 --> 00:00:19.752 GPU 使用柵格化(Rasterization)或掃瞄轉換(Scan Conversion)繪圖 00:00:19.776 --> 00:00:22.523 它們依照我提過的簡化來最佳化 00:00:22.610 --> 00:00:25.793 我們從頭到尾來看一條繪圖管線 00:00:25.881 --> 00:00:29.113 管線的用意就是分別處理各個物件 00:00:29.138 --> 00:00:32.556 第一步即應用程式將物件送往 GPU 00:00:32.580 --> 00:00:35.130 送什麼物件?通常是 3D 三角形 00:00:35.162 --> 00:00:38.480 每個三角形由空間中三個點定義 00:00:38.505 --> 00:00:41.486 應用程式將立方體被轉換成一些三角形 00:00:41.510 --> 00:00:43.917 球體被轉換成一堆三角形 00:00:43.954 --> 00:00:48.503 在第一步,應用程式決定哪些三角形送往接下來的管線 00:00:48.765 --> 00:00:53.091 管線的第二階段,這些三角形經過攝影機視角變換 00:00:53.116 --> 00:00:55.406 還有物件本身的座標變換 00:00:55.430 --> 00:01:00.354 物件的座標變換指對位置、方向甚至大小的修改 00:01:00.385 --> 00:01:03.025 舉例來說,假設你在繪製一個彈跳中的球 00:01:03.063 --> 00:01:05.365 球的每一格的座標變換 00:01:05.390 --> 00:01:08.188 會讓球沿著路徑移動 00:01:08.212 --> 00:01:10.491 攝影機的視角變換效果相當直白 00:01:10.516 --> 00:01:14.628 當物件移動到這一格所該在的位置後,還在攝影機視野裡嗎? 00:01:14.660 --> 00:01:18.313 即物件是否在視錐內 00:01:18.361 --> 00:01:22.697 如果不在,那我們就不用處理這個物件,因為它不會影響到螢幕上任何像素 00:01:22.776 --> 00:01:25.220 這種情況,我們會說這物件整個被裁切(Clip)掉了 00:01:25.281 --> 00:01:29.846 這個方塊被整個裁切掉,因為它在視錐之外 00:01:29.932 --> 00:01:34.229 攝影機與物件的座標變換會算出每個三角形在螢幕上的位置 00:01:34.270 --> 00:01:37.390 如果三角形部分或全部在視錐裡 00:01:37.428 --> 00:01:41.684 這個三角形三個點會被送往下一個叫做柵格化的階段 00:01:41.711 --> 00:01:44.539 如果三角形稍微超出範圍,則會被裁切 00:01:44.563 --> 00:01:46.475 變成更多的三角形 00:01:46.476 --> 00:01:50.846 這個過程會找出所有像素,其中心點在三角形內 00:01:50.887 --> 00:01:52.862 換個角度說,它在「填滿」三角形 00:01:52.911 --> 00:01:59.000 這裡柵格化辨識出這個三角形涵蓋了這幾個像素中心點 00:01:59.000 --> 00:02:03.193 這些位置接著被用來展示三角形的圖像在螢幕上