照明是計算機圖形學中一個非常複雜的主題。
真正重要的是,物體照明,模擬真實世界的照明或我們所針對的效果。照明環境可以由許多來源組成,以便逼近我們試圖實現的真實效果。
OpenGL照明實現是動態光源,它是光點抽象,允許「渲染」(即給出顏色)渲染的頂點(用於渲染三角形)。 ...頂點被照亮,獲得每種光線的顏色貢獻。
正如你所提到的,渲染過程需要更多的時間,我們啓用了更多的燈光。爲了儘量減少這一點,你有不同的可能性
- 光剔除(不包括對光線的貢獻稍微改變顏色的光),這是使用光屬性(距離,圓錐,衰減,視角和障礙物)確定的。
- 靜態照明,它使用紋理來模擬永不會移動的物體上的照明。
OpenGL固定光照對頂點顏色有貢獻,頂點顏色用其他頂點顏色插值以便柵格化三角形。在幾何圖形由幾個三角形組成的情況下,每個三角形內部都看不到任何光錐,因爲它的顏色是三種顏色(三個頂點)的插值結果。
爲了實現更精確的照明,軟件應該像確定頂點被燈光着色的方式一樣確定每個片段(像素)的顏色(像素點亮),但正如您所能理解的,可能會有比頂點更多的像素。 一種方法是在光柵化階段計算(使用着色器或OpenGL擴展)光線對幾何圖形每個像素的貢獻,或使用延遲光照確定像素顏色。
延期照明使用多個紋理(對應於視口)來存儲每個顯示像素的光照參數。通過這種方式,您可以在生成圖像後執行光照計算,爲每個像素確定一次像素光貢獻,而不是每個幾何像素一次。
更新:這項技術被討論了很多,這裏有一個鏈接: http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=267432 – alxx 2010-08-27 11:59:12
弱燈不是着色器功能,因爲啓用/禁用燈光的功能可以在設計燈光管理器的固定管線之外完成,只啓用重要燈光。 – Luca 2010-08-31 16:35:14
光管理器啓用/禁用整個場景的燈光。像素着色器可以做到每個像素,看到不同?順便說一下,傳統流水線中的8個燈是每個頂點的,而着色器則是每個像素的燈光 - 完全不同。 – alxx 2010-08-31 17:38:05