關于材質與渲染狀態的一些心得
寫代碼這么久,材質、渲染狀態和shader的問題一直給我有很大的困攏,今天為了整理一下思路,決定寫一下設計文檔和序列圖。經過這樣一寫,和對之前渲染狀態管理的一些文章的理解,思路終于清楚了一點。
原來我是把材質使用及shader的調用都寫在一起,這樣寫很不好。因為渲染狀態與shader是應該分組,然后在某一組中只調用一次,而材質的使用(一般是紋理的使用),是每個renderobject都在渲染前都要設置的。
我覺得比較合理的做法是:把渲染狀態與shader封裝在一起,我這里統稱shader,假如使用了effect,可以不做渲染狀態的封裝。然后,在渲染前要根據場景或整個游戲中用到的相同的shader進行分組。然后把擁有這些shader的物體都放進該shader的渲染隊列中去。在渲染過程中,首先遍歷所有組,在每組開始時,設置好渲染狀態,包括shader的全局參數的設置,然后針對每個渲染物只做設置材質的操作(這里的操作是:設置紋理、設置shader需要從renderObject中取得的參數)。
排序流程:首先根據shader分組,把相同分組的渲染物放到同一個隊列, 然后,在同一個隊列中,把相同材質的放在一起,這樣就可以減少紋理的切換。呵呵,今天先寫這么多,接下來要好好設計一下。
posted on 2009-06-16 16:46 狂爛球 閱讀(2136) 評論(0) 編輯 收藏 引用 所屬分類: 圖形編程