id_Tech5_challenges--siggraph09
為什么80%的碼農都做不了架構師?>>> ??
http://s09.idav.ucdavis.edu/talks/05-JP_id_Tech_5_Challenges.pdf
?
這個作者--J.M.P. van Waveren,就是那個在quake3發布之前拯救項目的哥們。話說quake3的bot模式,bot總是看起來很傻,行為不像人,大家陷入困境,然后找到了這哥們,成功搞定,被carmack說成拯救大家的家伙。幾年后已經成長成全才啦。
?
http://www.cs.rochester.edu/research/quagents/QuakeIII.pdf?
這個文章估計對ai有興趣的可以一讀,或許已經過時了也說不定。
?
進入正文,先看id tech5的能力,這是三平臺60幀的游戲:
?
?
開始部分是virtual texture的細節
- 使用了128k*128k texel的texture
- texture filter----bilinear with border比較好用,trilinear已經有點費了
- memory trashing-----virtual tex會需要大量的物理內存,這個常常會出現不夠的情況,就需要換頁了,但是還沒換完怎么辦,就強制修改mipmap bias,用低精度mipmap先用著,換好頁了再切換到高精度,算是一種應急處理方式,很有引擎的dynamic loading也會這么干。也可以使用trilinear filter來做到比較平滑的過度,而不是一個popup,這個pop up可是巨有害的東西,會很容易被玩家捕捉到,盡量避免啊。
- tex load 分析----分析出virtual tex哪個部分是需要load進來的,每個virtual tex使用四叉樹組織起來的,分析的結果會產生一個寬度優先的四叉樹訪問/load 請求。
- transcode----這步比較暈,貌似是讀取高度壓縮的dct格式的貼圖,解壓成顯卡直接可用的dxt格式。
- virtual texturing pipeline:
- 紫色部分是可以并行的。
?
?
Job部分
?
id tech5引擎里這些東西要處理的,也是想并行處理的
- animation
- collision detection
- obstacle avoidance
- transparency sort
- virtual tex
- misc processing
- rendering
- audio
而且面向多平臺,多核的pc,3核六線程的xbox360,2硬件線程+7spu的ps3,所以要對這些并行資源進行抽象化。
就生成了job系統,job系統核心理念是:
- 對線程抽象化,變成一種像memory的一種資源
- job scheduler申請到這些資源后,開始接受job,并在這些線程上執行。
早起多線程會像UE3那樣,人為切成main thread,render thread然后每個線程里在手動弄出一堆小線程的任務來做。
這就像一種靜態數組。
?
job系統更像動態數組std::vector,使用正確的話性能,靈活性,跨平臺性都非常好。
?
這個job系統和spu job太像了,可以直接參考學習。
?
一個比較棘手的東西就是sync,sync意味著等待->性能損失。
文中盡可能的要求對job的output晚一幀使用來避免sync。
這個。。。有點太理想化,實際應用中原則就是盡可能避免sync就好,晚一幀是最理想的,實在不行也只能等待了。
?
接下來job還要去支持cuda,larabbee等,很贊。
但是實際工作中我發現job系統的思想是好的,在硬件多核發展以及console平臺差異性的趨勢下,開發者趨向job系統幾乎是必然。
但是也是有很多弱點,像很難debug,寫出好的job系統以及良好的使用(穩定而且高效)都仍舊需要開發者付出很多的努力。
原文鏈接: http://blog.csdn.net/ccanan/article/details/5126174
轉載于:https://my.oschina.net/dtec/blog/44499
總結
以上是生活随笔為你收集整理的id_Tech5_challenges--siggraph09的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Vegas原创】获取远程数据库到本地
- 下一篇: 我犯了技术狂热症,应该做减法