• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 94, comments - 250, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            經(jīng)過半小時下載,終于下載完成了VSTS2010Beta版,以下是安裝截圖:

            sshot-1 sshot-3 sshot-4 sshot-5  未標題-2 未標題-3 未標題-4 未標題-5sshot-9 未標題-6

            第一次啟動VSTS2010

            未標題-9 未標題-10 未標題-11

            這個就是新個界面了,在這個版本中微軟正式加入了F#

            未標題-12 未標題-13 未標題-14 未標題-15

            新功能太多了,去MSDN BLOG上看吧.

            posted @ 2009-05-21 17:54 Condor 閱讀(605) | 評論 (0)編輯 收藏

            作為高級程序員,以至于系統(tǒng)分析員,也就是對于一個程序項目的設(shè)計者而言,除了應(yīng)該具備上述全部素質(zhì)之外,還需要具備以下素質(zhì):

            第一,需求分析能力

              對于程序員而言,理解需求就可以完成合格的代碼,但是對于研發(fā)項目的組織和管理者,他們不但要理解客戶需求,更多時候還要自行制定一些需求,為什么這么說呢?

              一般而言,進行研發(fā)任務(wù),也許是客戶提出需求,也許是市場和營銷部門提出的需求,這時候?qū)τ谘邪l(fā)部門,他們看到的不是一個完整的需求,通常而言,該需求僅僅是一些功能上的要求,或者更正規(guī)些,可能獲得一個完整的用戶視圖;但是這都不夠,因為客戶由于非技術(shù)因素多一些,他們可能很難提出完整和清晰,或者說專業(yè)性的性能需求,但是對于項目組織者和規(guī)劃者,他必須能夠清醒認識到這些需求的存在并在完成需求分析報告的時候適當(dāng)?shù)奶岢觯瑫r要完整和清晰的體現(xiàn)在設(shè)計說明書里面,以便于程序員編碼時不會失去這些準則。

              程序設(shè)計者必須正確理解用戶需求所處的環(huán)境,并針對性做出需求的分析,舉例而言,同樣一個軟件通過ASP租用方式發(fā)布和通過License方式發(fā)布,性能需求可能就是有區(qū)別的,前者強調(diào)的是更好的支撐能力和穩(wěn)定性,而后者則可能更強調(diào)在各種平臺下的普適性和安裝使用的簡捷性。

            第二,項目設(shè)計方法和流程處理能力

              程序設(shè)計者必須能夠掌握不少于兩到三種的項目設(shè)計方法(比如自頂至下的設(shè)計方法,比如快速原型法等等),并能夠根據(jù)項目需求和資源搭配來選擇合適的設(shè)計方法進行項目的整體設(shè)計。

              設(shè)計方法上選擇不當(dāng),就會耽誤研發(fā)周期,浪費研發(fā)資源,甚至影響研發(fā)效果。

              一個程序設(shè)計者還需要把很多功夫用在流程圖的設(shè)計和處理上,他需要做數(shù)據(jù)流圖以確立數(shù)據(jù)詞典;他需要加工邏輯流圖以形成整體的系統(tǒng)處理流程。

              一個流程有問題的系統(tǒng),就算代碼多漂亮,每個模塊多精致,也不會成為一個好的系統(tǒng)。當(dāng)然,做好流程分析并選擇好項目設(shè)計方法,都需要在需求分析能力上具有足夠的把握。

            第三,復(fù)用設(shè)計和模塊化分解能力

              這個似乎又是老調(diào)重談,前面基本素質(zhì)上不是已經(jīng)說明了這個問題嗎?

              作為一個從事模塊任務(wù)的程序員,他需要對他所面對的特定功能模塊的復(fù)用性進行考慮,而作為一個系統(tǒng)分析人員,他要面對的問題復(fù)雜的多,需要對整體系統(tǒng)按照一種模塊化的分析能力分解為很多可復(fù)用的功能模塊和函數(shù),并針對每一模塊形成一個獨立的設(shè)計需求。舉個例子,好比是汽車生產(chǎn),最早每輛汽車都是獨立安裝的,每個部件都是量身定做的,但是后來不一樣了,機器化大生產(chǎn)了,一個汽車廠開始通過流水線來生產(chǎn)汽車,獨立部件開始具有一定的復(fù)用性,在后來標準化成為大趨勢,不同型號,品牌甚至不同廠商的汽車部件也可以進行方便的換裝和升級,這時候,汽車生產(chǎn)的效率達到最大化。軟件工程也是同樣的道理,一個成熟的軟件行業(yè),在一些相關(guān)項目和系統(tǒng)中,不同的部件是可以隨意換裝的,比如微軟的許多桌面軟件,在很多操作模塊(如打開文件,保存文件等等)都是復(fù)用的同一套功能模塊,而這些接口又通過一些類庫提供給了桌面應(yīng)用程序開發(fā)者方便掛接,這就是復(fù)用化的模塊設(shè)計明顯的一個佐證。

              將一個大型的,錯綜復(fù)雜的應(yīng)用系統(tǒng)分解成一些相對獨立的,具有高度復(fù)用性的,并能僅僅依靠幾個參數(shù)完成數(shù)據(jù)聯(lián)系的模塊組合,是作為高級程序員和系統(tǒng)分析員一項最重要的工作,合適的項目設(shè)計方法,清晰的流程圖,是實現(xiàn)這一目標的重要保證。

            第四,整體項目評估能力

              作為系統(tǒng)設(shè)計人員,必須能夠從全局出發(fā),對項目又整體的清醒認識,比如公司的資源配置是否合理和到位,比如工程進度安排是否能最大化體現(xiàn)效率又不至于無法按期完成。評估項目整體和各個模塊的工作量,評估項目所需的資源,評估項目可能遇到的困難,都需要大量的經(jīng)驗積累,換言之,這是一種不斷總結(jié)的累計才能達到的境界。在西方一些軟件系統(tǒng)設(shè)計的帶頭人都是很年長的,比如4,50歲,甚至更老,他們在編碼方面已經(jīng)遠遠不如年輕人那樣活絡(luò),但是就項目評估而言,他們幾十年的經(jīng)驗積累就是最重要和寶貴的財富。中國缺這么一代程序員,主要還不是缺那種年紀的程序員,而是那種年紀的程序員基本上都是研究單位作出來的,都不是從專業(yè)的產(chǎn)品化軟件研發(fā)作出來的,他們沒有能積累那種產(chǎn)品化研發(fā)的經(jīng)驗,這也是沒有辦法的事情。

            第五,團隊組織管理能力

              完成一個項目工程,需要團隊的齊心協(xié)力,作為項目設(shè)計者或研發(fā)的主管人,就應(yīng)當(dāng)有能力最大化發(fā)揮團隊的整體力量,技術(shù)管理由于其專業(yè)性質(zhì),不大同于一般的人事管理,因為這里面設(shè)計了一些技術(shù)性的指標和因素。
            首先是工作的量化,沒有量化就很難做到合適的績效考核,而程序量化又不是簡單的代碼行數(shù)可以計算的,因此要求技術(shù)管理人員需要能真正評估一個模塊的復(fù)雜性和工作量。

              其次是對團隊協(xié)作模式的調(diào)整,一般而言,程序開發(fā)的協(xié)作通常分為小組進行,小組有主程序員方式的,也有民主方式的,根據(jù)程序員之間的能力水平差距,以及根據(jù)項目研發(fā)的需求,選擇合適的組隊方式,并能將責(zé)權(quán)和成員的工作任務(wù)緊密結(jié)合,這樣才能最大發(fā)揮組隊的效率。

              一個代碼水平高的人,未必能成為一個合格的項目研發(fā)主管,這方面的能力欠缺往往是容易被忽視的。

              綜上可以看到,作為一個主管研發(fā)的負責(zé)人,一個項目設(shè)計者,所需要具備的素質(zhì)和能力并不是程序代碼編寫的能力,當(dāng)然一般情況下,一個程序員通過不斷的總結(jié)提高達到了這種素質(zhì)的時候,他所具有的代碼編寫能力也已經(jīng)相當(dāng)不簡單了,但是請注意這里面的因果關(guān)系,一個高水平的項目設(shè)計者通常已經(jīng)是代碼編寫相當(dāng)優(yōu)秀的人了,但是并不是一個代碼相當(dāng)優(yōu)秀的程序員就可以勝任項目設(shè)計的工作,這里面存在的也不是智商和課本的問題,還是在于一個程序員在積累經(jīng)驗,逐步提升的時候沒有意識到應(yīng)當(dāng)思考哪方面的東西,沒有有意識的就項目的組織和復(fù)用設(shè)計進行揣摩,沒有經(jīng)常性的文檔習(xí)慣和總結(jié)習(xí)慣,不改變這些,我們的合格的項目設(shè)計者還是非常欠缺。

              另外,為防止有無聊的人和我較真,補充一點,本文針對目標是作商業(yè)化的軟件項目和工程,那些科研機構(gòu)的編程高手,比如算法高手,比如圖象處理高手,他們的工作是研究課題而非直接完成商業(yè)軟件(當(dāng)然最終間接成為商業(yè)產(chǎn)品,比如微軟研究院在作的研究課題),因此他們強調(diào)的素質(zhì)可能是另外的東西,這些人(專家),并不能說是程序員,不能用程序員的標準去衡量。

            posted @ 2009-05-20 10:36 Condor 閱讀(791) | 評論 (2)編輯 收藏

            一個犁牛半塊田,收也憑天,荒也憑天
            粗茶淡飯飽三餐,早也香甜,晚也香甜
            布衣得暖勝絲綿,長也可穿,短也可穿
            草舍茅屋有幾間,行也安然,待也安然
            雨過天青駕小船,魚在一邊,酒在一邊
            夜歸兒女話燈前,今也有言,古也有言
            日上三竿我獨眠,誰是神仙,我是神仙
            南山空谷書一卷,瘋也癡癲,狂也癡癲

            posted @ 2009-05-19 21:35 Condor 閱讀(525) | 評論 (0)編輯 收藏

            最近沒啥好八卦的,拿這個來充數(shù).HOHO.0day在文章最后面.

            |=---------------------------------------------------------------------------=|
            |=----------------------=[       專訪wordexp       ]=---------------------=|
            |=---------------------------------------------------------------------------=|
            |=---------------------------------------------------------------------------=|
            |=-------------------=[           By wordexp            ]=------------------=|
            |=---------------------------------------------------------------------------=|

            [目錄]
            1. 據(jù)您所知現(xiàn)在都還有哪些嚴重的0DAY沒被公開?
            2. 挖漏洞有什么竅門?可以具體談?wù)刦uzzer怎樣構(gòu)造樣本么?
            3. 請問您對0day市場有什么看法?
            4. 您建立wordexp這個blog的初衷是什么?為什么叫wordexp,而不是pdfexp或者是exclexp?
            5. 請問0day是咋來的?
            6. 請問在安全圈子誰是您的偶像?
            7. 請問溢出這面紅旗還能打多久?
            8. 您對我們雜志以及我們小組的發(fā)展有什么建議?
            一、據(jù)您所知現(xiàn)在都還有哪些嚴重的0DAY沒被公開?
                主流應(yīng)用軟件方面目前微軟公司的IE6/7和PPT 2003 SP3前一陣子就有EXP在外面跑了,
            adobe公司的FLASH產(chǎn)品中也有一個能被利用的漏洞,拿到的人應(yīng)該也不少,往后的一到三個月
            內(nèi)就應(yīng)該出補丁或是有相關(guān)新聞,當(dāng)然以我們目前的視界能看到的只有很少很少的一部分,其
            實國外的很多安全機構(gòu)比如:idefense和zdi可以確定還有不少沒被公開的漏洞,只是這些漏
            洞可能并不是我們想象的那么通用,成功率也許有限。
                其實經(jīng)常聽到朋友問這個問題,說白了就是個消息的打聽,這個一方面要提高自已的敏感
            度,注意隨時關(guān)注國內(nèi)外相關(guān)網(wǎng)站的新聞,比如NORTON和MCAFEE的網(wǎng)站經(jīng)常有一些抓到的0DAY
            樣本的新聞,有時還有一些細節(jié)。還有就是消息的共享,你提前能知道消息并告知朋友,以后
            也許人家也會這樣對你。
            二、挖漏洞有什么竅門?可以具體談?wù)刦uzzer怎樣構(gòu)造樣本么?
                這個問題太為難我了,很多人比我更有資格回答這個問題。我只是斗膽胡說幾句。
                要說竅門,應(yīng)該是不同軟件的洞竅門還不一樣,然后還要看挖洞的目的,如果是為了出名
            在bugtraq之類的郵件列表上能多露幾次臉,那么可以盡可能的找那種用戶少關(guān)注少的軟件特
            別是WEB腳本程序的洞。如果是公司有任務(wù)必須往CVE、MS上報多少條漏洞那么可以找大公司
            的二三線產(chǎn)品的漏洞或是有一定用戶數(shù)但版本很久不更新的軟件的洞,而且這些洞是不一定
            要可利用的。如果是為了混zdi、idefense那么可以把fuzz到的POC只要看起來有可能被利用
            的都提交上去,也可以找默認情況下不支持的功能的洞,多少可以騙點錢。
                如果是要挖賣得出去也能利用的洞,比較通用的一些竅門我能想到的是:
                1. 找大眾軟件生僻功能,生僻協(xié)議/文件格式的洞
                2. 找?guī)缀鯖]有文檔化的功能的洞
                3. 新版本軟件為了向下兼容所支持的老協(xié)議/老文件格式的洞
                4. 新版本軟件增加的新功能/新格式
                5. 不容易fuzz到的洞,比如數(shù)據(jù)是加密/壓縮/編碼過的,或是有驗效的
                6. 某軟件某功能剛出了漏洞,馬上測試其它同類軟件同類功能是否有類似漏洞
                7. 多分析老漏洞,善于總結(jié)前人挖漏洞的經(jīng)驗技巧,很多不同的洞其實都有相類似的發(fā)
                掘方式和思路
                第二個問題,我以文件型漏洞舉例子,fuzz樣本的構(gòu)造,首先是按照上述幾個竅門來生成
            原始模版,這樣相對可以弄出一些人家不太容易fuzz到的數(shù)據(jù)格式結(jié)構(gòu),當(dāng)然在生成原始模版
            的前期功課也是很花時間的。做好樣本后就是寫具體的fuzz程序, 如果對文件格式比較熟,
            那么可以節(jié)約很多的時間,我比較喜歡的一個辦法是fuzz某一些功能的洞,那么就先看格式,
            把數(shù)據(jù)在文件中的位置先手工定位,然后小粒度的測試,要注意的是可能與某功能相關(guān)聯(lián)的數(shù)
            據(jù)比較雜亂數(shù)據(jù)很可能并不是連續(xù)存放的。一般1-4KB的數(shù)據(jù)要不了多少時間就可以手工測
            試完畢。另外具體測試時,數(shù)據(jù)替換的長度(一次替換幾個字節(jié)),替換的內(nèi)容也是非常重要的。
            為此我們將提供一個PPT 2003 sp3的“0day”poc,在這個“0day”中數(shù)據(jù)替換的步進就必須為1
            字節(jié),而且值也必須為一個固定的值才能觸發(fā)出錯。最后要注意的就是錯誤的捕捉,有些洞是
            打開就退出進程,有些是打開要停頓一定時間才退出進程,有些是CPU 100%程序掛起,有些是
            關(guān)閉時觸發(fā),甚至有些是文檔打開后進行某種操作才會觸發(fā),當(dāng)然還有一種情況進程不退出,
            也沒有提示,也不出錯,象這種情況一般依靠進程/窗口/CPU來檢測錯誤的fuzz就失效了。
            三、請問您對0day市場有什么看法?
                很復(fù)雜的一個圈子,搞技術(shù)的不搞技術(shù)的啥人都有,不過目前看來很多都是為了各種利益
            混這個圈子。簡單說就是:
                池塘不大但人雜,水深。
            四、您建立wordexp這個blog的初衷是什么?為什么叫wordexp,而不是pdfexp或者是exclexp?
                初衷就是團隊成員工作之余發(fā)發(fā)勞騷,聊聊八卦的地方,希望大家別見怪。另外這個名字
            是因為我們幾個人搞客戶端的漏洞都比較多,所以隨便就取了這么個名字。
            五、請問0day是咋來的?
                最初當(dāng)然是某個人找出來的。從這個0DAY的發(fā)掘者到最終的用戶中間可能會只有一層關(guān)
            系,也可能會有N層關(guān)系,也許直到這個0DAY被補上,使用者也不知道洞是誰挖到的。下面舉幾
            個例子吧:
                情況一:A挖到一個0day,但對黑產(chǎn)沒有了解或接觸,或者也不想靠這個賺錢,或者覺得漏
            洞不值錢,或者壓根以為漏洞不能夠被利用,那么A有可能把這個漏洞公開給類似PST的網(wǎng)站,
            網(wǎng)站上的代碼通常是POC或是只有一部分細節(jié)。這時黑產(chǎn)中的漏洞研究者B,很快會看到這個
            消息,并且分析POC然后寫出EXP。隨后B再聯(lián)系具體的使用者C或是自已使用。最終或是因為
            這個0DAY的POC被公開,也或許因為EXP被殺毒軟件公司抓到樣本等等,軟件廠商推出補丁。在
            這個過程中B可能是一個人也可能是很多水平各不相同的人,所以公開的0DAY的EXP有時是千
            差萬別,有的好用,有的很差。
                情況二:A是黑產(chǎn)中的一員,挖到一個0DAY并賣給X,或是接受使用者X的定制并找到0DAY,
            X偷偷的使用0DAY,這樣的情況一般0DAY的生存期會比較長一些,因為這才算是真正的私洞,知
            道的人不多。但是在X的使用中,EXP可能被別的黑產(chǎn)從業(yè)者Y抓到樣本,然后Y把樣本提供給技
            術(shù)員T分析并重新寫出EXP,而成果Y和T分享。這時T可能再次把EXP賣給其它的黑產(chǎn)使用者W,
            同樣X或Y在使用一段時間后也可能交換或者再出手給其它的買家,而且這個過程是可以無限
            次重復(fù)的,當(dāng)然時間越久知道的人越多,0DAY就越掉價。
                情況三:白帽子A挖到一個0day,并提交給軟件廠商B。假設(shè)A是個真真正正的白帽子,也假
            設(shè)這個0day的確也只被A發(fā)現(xiàn)了,但0day到了廠商B那兒,最終會找公司內(nèi)負責(zé)安全的部門對漏
            洞進行研究,假設(shè)這個公司內(nèi)部的研究者是C,C有可能在圈子中也有其它從事黑產(chǎn)的朋友或是
            自已本身就偷偷的在參與黑產(chǎn),那么在金錢或是感情的作用下C完全有可能違背道德,寫出EXP
            出售或是使用。象這種情況,0day可能剛出來沒幾天就被補上了,或者圈子里的很多人根本就
            沒機會見到0day,知道有這么個東東的時候早就被補上了。
                情況四:軟件廠商B在代碼審計或軟件測試過程中發(fā)現(xiàn)了漏洞,自已在新版本中偷偷的補
            上了漏洞,但并沒有在相對老的版本中打補丁,也沒有公開任何細節(jié)和公告。 研究人員A通過
            補丁比較,直接定位出老版本中的漏洞位置,然后動態(tài)調(diào)試找到觸發(fā)方式,并寫出EXP,由于很
            多情況下老版本的軟件反而用戶更多,所以這樣的0day還是有一定的價值。
                情況五:研究員A挖到了一個Nday而這個Nday以前在圈內(nèi)并不為人所知,或是研究員A研究
            出某Nday的新利用方式,比如說可以和某某軟件結(jié)合看起來和以前的EXP完全不一樣,或是成
            功率有很大的提高。研究員A以較低的價格出售給中間人B。B拿到EXP后,發(fā)現(xiàn)圈內(nèi)還沒人有,
            成功率各方面也還不錯,于是號稱0day到處叫賣。如果買家發(fā)現(xiàn)問題,B就裝傻說自已也上當(dāng)
            了。現(xiàn)在象B這樣的人其實也是不少的, 因為很多最終用戶對技術(shù)并不是特別懂,而且有些
            Nday測試起來也不是那么簡單,如果剛好EXP效果不錯,可能就忽悠過去了。那么我們能看到
            的情況就是,江湖傳言又出了個0day,或是某某手上有0day,但等呀等就是見不到東東,最終傳
            言不了了之或是被人家揭發(fā)出來。
                所以要搞到0day可以自已挖,可以補丁比較,也可以分析已公開信息快速寫出EXP,可以買,
            也可以換,不要命也可以偷搶騙,技術(shù)手段非技術(shù)手段都是可能的。也正是因為上述情況的多
            樣性,所以經(jīng)常有不怎么搞技術(shù)的人,手上也有些0day。
            六、請問在安全圈子誰是您的偶像?
                我的偶象是那種啥技術(shù)不懂,還能發(fā)大財?shù)模籔F不行。
            七、請問溢出這面紅旗還能打多久?
                僅僅是溢出這塊,我們團隊里面意見也大不相同,另外幾個成員還是比較樂觀的,如果比
            較全面的分析這個問題,首先要看站在什么人的角度來看這個問題,是黑產(chǎn)工作者是安全公司
            還是軟件生產(chǎn)商。假設(shè)以黑產(chǎn)工作者的角度來看,那么我是非常非常悲觀的,因為溢出漏洞從
            技術(shù)角度上說:有一個通用性和成功率的問題,直觀的說就是有一個效果的問題,再深一點說
            就是經(jīng)濟成本的問題。往后走溢出漏洞單從個數(shù)上說還是會有很多的。但是現(xiàn)在從編譯器和
            OS(/GS、/SafeSEH、/DYNAMICBASE、DEP、PEB隨機等等)到CPU(NX),軟件公司和硬件廠商已
            經(jīng)越來越關(guān)注安全問題,幾十年來溢出漏洞最關(guān)鍵的命脈無非是數(shù)據(jù)能夠被當(dāng)做代碼來執(zhí)行,
            以前這一點基本上不被軟硬件廠商所重視,這幾年來人家開始重視了,開始從體系上解決這個
            問題,那么這個命脈也將因為各種防范檢測技術(shù)的運用被卡得越來越死,另外現(xiàn)在很多軟件也
            有自動升級功能了。
                往后走是個什么樣的情況,我想應(yīng)該是上面提到的各種技術(shù)隨著新型CPU和OS的占有率越
            來越高,被越來越多的應(yīng)用。一個溢出漏洞的成功率將會大大下降,再加上主流軟件公司的產(chǎn)
            品也越來越安全,以后那種一個漏洞打天下的局面將會越來越少(現(xiàn)在黑產(chǎn)工作者的網(wǎng)馬都是
            漏洞合集了,無非就是提高成功率),具體的情況也許就是現(xiàn)在我有一個IE的0DAY,100個人看
            也許能中10-20個,以后可能手上能用的就變成某個第三方控件的0DAY,100個人看網(wǎng)頁就能中
            1-2個吧。當(dāng)你使用溢出漏洞的時間,人力,金錢成本和產(chǎn)出完全不成正比的時候,也基本上算
            溢出這面紅旗倒下的時候。
                估計也就三四年以后,具體指標就是上面提到的各種檢測技術(shù)的普及率,至少往后的發(fā)展
            不會是車到山前必有路。如果把挖溢出漏洞當(dāng)成一個產(chǎn)業(yè),也就是個夕陽產(chǎn)業(yè)。
            八、您對我們雜志以及我們小組的發(fā)展有什么建議?
                不走商業(yè)路線是正確的,反正你們那群人也不差錢,就不定期搞搞科普工作吧,為普及中
            國安全事業(yè)做點貢獻,同時也可以鍛煉你們各方面的能力,繼續(xù)努力!
            -EOF-

            posted @ 2009-05-15 19:08 Condor 閱讀(256) | 評論 (0)編輯 收藏

            某類領(lǐng)導(dǎo)
            在我們眼里,他們沒文化,沒水平,沒魄力,他一無是處
            但是他對上級忠誠,唯命是從,鞍前馬后,忠誠得像一條哈巴狗
            憑借著這種忠誠,甚至是卑賤,他總是有骨頭啃,總是能明目張膽地拿著雞毛當(dāng)令箭
            這種人創(chuàng)造的,往往都是一種非常壓抑的氣氛
            他不停地給你找事做,他盡可能剝奪你學(xué)習(xí)時間和上進的機會,他不希望任何他能影響的人,變得比他聰明
            你若反對他,他就變成狼狗,悄悄地卻狠狠地咬你,咬你的時候他還裝作自己也很受傷的樣子
            若有告狀的,上級領(lǐng)導(dǎo)就會出來說:“xx其實是個好人,他也不容易,相互理解支持嘛”
            年底,xx必然有各種獎狀,“勤勤懇懇、大膽潑辣、敢于管理”
            等到某一天,xx求我辦事
            這事跟他切身利益直接相關(guān),我一手把握的,我才突然感覺他很可憐
            但是,誰又來可憐我呢
            山不轉(zhuǎn)路轉(zhuǎn),路不轉(zhuǎn)水轉(zhuǎn),水不轉(zhuǎn)人轉(zhuǎn),終于轉(zhuǎn)到老子手上
            呵呵,不符合游戲規(guī)則的,沒辦法處理的,統(tǒng)統(tǒng)法辦
            相信你肯定可以理解我的
            就像當(dāng)年我可以理解你的那樣
            組織,是有胸懷的
            每一個人,總是要有覺悟和勇氣為自己的所作所為付出代價的
            不能把握的東西,你還不如不去占有

            評論:出來混總是要還的。這種領(lǐng)導(dǎo)一般還有一些特性,比如中飽私囊、成事不足敗事有余。

            posted @ 2009-05-14 17:40 Condor 閱讀(520) | 評論 (0)編輯 收藏

                 摘要: 1.缺乏信任       該問題源于成員大都害怕成為別人攻擊的對象。大家不愿意互相敞開心扉,承認自己的缺點和弱項,導(dǎo)致無法建立相互信任的基礎(chǔ) 2.懼怕沖突       缺乏信任的團隊無法進行直接而熱烈的思想交鋒,取而代之的是毫無針對性的討論一級無關(guān)痛癢的意見。 3.欠缺投入   ...  閱讀全文

            posted @ 2009-05-06 20:27 Condor 閱讀(1400) | 評論 (2)編輯 收藏

            《榮枯鑒》 

            馮道 著
            東東槍 譯
             
            ·圓通卷一
             
            善惡有名,智者不拘也。
            善惡這種事兒都有個定義,但真正有智慧的人根本不理會。
             
            天理有常,明者不棄也。
            世上什么事兒都有個規(guī)律,真正的明白人不會隨意視而不見、自以為是。
             
            道之靡通,易者無虞也。
            是不是合乎道理,順應(yīng)變化的人根本也不關(guān)心這個。
             
            惜名者傷其名,惜身者全其身。
            珍視名聲者,名譽易損,愛惜自己者,保全自身。
             
            名利無咎,逐之非罪,過乃人也。
            名利不是壞事,追名逐利也不是罪過,以此為惡是人的主觀想法而已。
             
            君子非貴,小人非賤,貴賤莫以名世。
            君子沒什么可自以為尊貴的,小人也沒什么低賤的,尊貴還是低賤都是虛名,不足以稱道一世。
             
            君子無得,小人無失,得失無由心也。
            君子不一定就能得到什么,小人也不一定會失去什么,得到、失去,跟思想境界也毫無關(guān)系。
             
            名者皆虛,利者惑人,人所難拒哉。
            名譽都是虛的,利益才能真正誘人,是人就難以抗拒。
             
            榮或為君子,枯必為小人。
            事成顯貴的,有可能會被傳頌為君子;身敗落魄的,必定會被當(dāng)作小人。
             
            君子無及,小人乃眾,眾不可敵矣。
            因此,君子永遠是少數(shù)(因為即使成功也不都是君子),小人永遠是多數(shù),多數(shù)人的力量,無可抗拒。
             
            名可易事難易也,心可易命難易也,人不患君子,何患小人焉?
            名譽容易轉(zhuǎn)變,思想境界可以變化,但事情的成敗、人生的命運,卻難以更改。反正君子小人不是根本問題,你覺得當(dāng)君子受苦沒有什么不好,當(dāng)小人來享福又有什么可怕的呢?反正名譽根本都不靠譜。
             
             
            ·聞達卷二
             
            仕不計善惡,遷無論奸小。
            做官不做官,升職不升職這類事情,根本不是以善還是惡、君子還是小人來作為判斷標準的。
             
            悅上者榮,悅下者蹇。
            讓上邊的領(lǐng)導(dǎo)高興的,日子必定好過;讓下邊的群眾高興的,碰到的困難卻會更多。
             
            君子悅下,上不惑名。
            君子讓下邊的群眾高興,可上頭的領(lǐng)導(dǎo)并不覺得你在群眾里的好名聲有什么意義。
             
            小人悅上,下不懲惡。
            小人討好上頭的領(lǐng)導(dǎo),下邊的群眾可能會反感,但是,這樣的反感并不能對你有任何損傷。
             
            下以直為美,上以媚為忠。
            下邊的群眾以道德高尚剛正不阿為美德,上頭的領(lǐng)導(dǎo)會把諂媚順應(yīng)當(dāng)做忠誠。
             
            直而無媚,上疑也;媚而無直,下棄也。
            道德高尚,但是毫不順應(yīng)領(lǐng)導(dǎo),上頭就該不信任你了;順應(yīng)領(lǐng)導(dǎo),但是讓下頭人覺得你不地道,下頭人就該反對你了。
             
            上疑禍本,下棄毀譽,榮者皆有小人之謂,蓋固本而舍末也。
            可是,上頭不信任你,你就完了——這是根本,下頭反對你,頂多是給你來個壞名譽——無所謂的事兒。因此,那些功成名就大富大貴的人都難免被人稱作小人,就是因為他們選擇了保住根本,顧不得那些沒有意義的名譽了。
             
            富貴有常,其道乃實。
            想富貴么?規(guī)律很簡單:一切從實際出發(fā)。
             
            福禍非命,其道乃察。
            禍福其實并非命運注定,也有規(guī)律可循:看你是否善于觀察和判斷。
             
            實不為虛名所羈,察不以奸行為恥。
            一切從實際出發(fā),就別受那些毫無實際意義的虛名的束縛。善于觀察判斷,就別老以壞人壞事為恥辱,那會搞得很不客觀。
             
            無羈無恥,榮之義也。
            沒有名譽的羈絆,沒有恥辱感的束縛,你離顯貴發(fā)達也就不遠了。
             
            求名者莫仕,位非名也。
            要是真想追求名譽,你就別去當(dāng)官,好名譽不是當(dāng)官兒可以當(dāng)出來的。
             
            求官者莫名,德非榮也。
            要是真想當(dāng)官,你就別管什么名譽了,道德高尚跟富貴榮華是兩碼事兒。
            君子言心,小人攻心,其道不同,其效自異哉。
            君子講的是道德、理念,小人則專門對付這種道德理念,價值觀不同,行為不同,結(jié)果自然不同。
             
             
            ·解厄卷三
             
            無憂則患烈也。
            什么都不操心,你就離倒霉不遠了。
             
            憂國者失身,憂己者安命。
            不過,操心根操心不一樣。為國家操心的人,只能把自己搭上;為自己操心的人,卻能樂享安然。
             
            禍之人拒,然亦人納;禍之人怨,然亦人遇。
            禍事是人不想要的,但也是人自找的,人人都討厭有禍事,但人人都難免碰上。
             
            君子非惡,患事無休;小人不賢,余慶弗絕。
            君子不做壞事兒,但倒霉事兒一個接一個,小人不干什么好事兒,卻能夠常年樂樂呵呵。
             
            上不離心,非小人難為;下不結(jié)怨,非君子勿論。
            讓上頭領(lǐng)導(dǎo)對自己完全放心,不是小人就難以做到;讓下頭群眾不怨恨自己,不是君子您就別想了。
             
            禍于上,無辯自罪者全。禍于下,爭而罪人者免。
            上頭要找別扭的時候,只有裝孫子認罪才能保全自己;要是下頭起了負面意見,就只有搶先把責(zé)任推到別人頭上,裝好人,才能免去責(zé)任。
             
            君子不黨,其禍無援也。小人利交,其利人助也。
            君子不愛拉幫結(jié)伙,所以,真有了禍事,沒人會幫助君子。小人有一大幫酒肉朋友,成事解圍,全都靠這幫人幫助。
             
            道義失之無懲,禍無解處必困,君子莫能改之,小人或可諒矣。
            不講道義不會造成什么實際的惡果,有了禍事沒人幫可就必然倒霉。做君子倒了霉只能束手無措,所以,大家選擇做小人,也就是可以理解的了。
             
             
            ·交結(jié)卷四
             
            智不拒賢,明不遠惡,善惡咸用也。
            真正的聰明人不拒絕好人,也不疏遠壞人,這兩款都有用。
             
            順則為友,逆則為敵,敵友常易也。
            都是拿順應(yīng)自己的人當(dāng)朋友,拿反對自己的人當(dāng)敵人——敵人朋友是隨時可以轉(zhuǎn)化的。
             
            貴以識人者貴,賤以養(yǎng)奸者賤。
            用尊重的態(tài)度看待別人的人,日后將發(fā)達顯貴,用輕賤的態(tài)度對待別人,日后難免潦倒。
             
            貴不自貴,賤不自賤,貴賤易焉。
            顯貴的人不自重,不知道擺出個尊貴的樣子來,而潦倒的人不做輕賤別人的賤事兒,貴賤就該掉個兒了。
             
            貴不賤人,賤不貴人,貴賤久焉。
            顯貴的人永遠不輕視別人,潦倒的人永遠不尊重別人,貴賤就這么一直下去了。
             
            人冀人愚而自明,示人以愚,其謀乃大。
            人盼著別人傻自己聰明,但還是成天裝傻給人看,這是真正有主意的人。
             
            人忌人明而自愚,智無潛藏,其害無止。
            不樂意別人機靈自己傻,就玩兒命抖機靈,這就純屬作死。
             
            明不接愚,愚者勿長其明。
            聰明的人不接觸傻子,接觸傻子不會讓聰明人變得更聰明。
             
            智不結(jié)怨,仇者無懼其智。
            有智慧的人不跟人結(jié)仇,仇人不會因為你聰明就怕你。
             
            君子仁交,惟憂仁不盡善。小人陰結(jié),惟患陰不制的。
            君子人用仁義與人交往,生怕自己不夠仁義;小人滿懷陰損與人交往,生怕陰損的不夠,達不到目的。
             
            君子弗勝小人,殆于此也。
            君子注定吃小人的虧,就是因為這個。
             
            ·節(jié)儀卷五
             
            外君子而內(nèi)小人者,真小人也。
            外表君子作派,內(nèi)心小人肚腸的,這是真小人。
             
            外小人而內(nèi)君子者,真君子也。
            行事手段并不比小人差,內(nèi)心卻有君子情懷的,這才配稱真君子。
             
            德高者不矜,義重者輕害。
            道德高尚的人以道德高自居,就不太知道保重自己,看重仁義的人太重仁義,總是忽視自己面對的危害。
             
            人慕君子,行則小人,君子難為也。
            人們滿嘴說的都是仰慕君子,辦出來的卻還都是小人事兒,那誰要真當(dāng)君子,誰就該倒霉了。
             
            人怨小人,實則忘義,小人無羈也。
            人們口口聲聲憎惡小人,實際上做事情還是不仁不義,也就是說,做小人其實是沒有任何阻礙的——憎惡全是空喊。
             
            難為獲寡,無羈利豐,是以人皆小人也。
            可誰也不愿意當(dāng)?shù)姑沟埃驗榈姑沟氨葎e人倒霉,誰都愿意沒有任何阻礙,因為沒有任何阻礙就比別人牛B,所以,所有人就都成了小人了。
             
            位高節(jié)低,人賤義薄。
            社會階層越高,氣節(jié)越低——因為要裝孫子;人越貧賤,義氣越是狗屁——因為先要活著。
             
            君子不堪辱其志,小人不堪壞其身。
            君子最受不了的是精神屈辱,小人最受不了的是身體上的困苦。
             
            君子避于亂也,小人達于朝堂。
            所以,一有亂子,君子就躲起來自保高潔去了,小人卻常能當(dāng)上國家領(lǐng)導(dǎo)。
             
            節(jié)不抵金,人困難為君子。
            氣節(jié)比不上金錢實在,所以,人一窮了,就做不成君子——因為講不起氣節(jié)。
             
            義不抵命,勢危難拒小人。
            義氣也不如生命重要,所以,身處危困就沒辦法不當(dāng)小人,因為活命更重要。
             
            不畏人言,惟計利害,此非節(jié)義之道,然生之道焉。
            不管別人如何夸獎或批評,只管自己的利益存亡,這不是追求氣節(jié)仁義的道理,卻是能讓你安身立命、生存下來的道理。
             
             
            ·明鑒卷六   
             
            福不察非福,禍不預(yù)必禍。
            有福氣,可你自己不知道,這就白費。有禍事,你自己不能預(yù)先避免,那就準得倒霉。
             
            福禍先知,事盡濟耳。
            要是福禍都能提前預(yù)知,那就牛B了。
             
            施小信而大詐逞,窺小處而大謀定。
            偶爾裝裝實在,大陰謀就能得逞;多偷偷看看細節(jié),大的決策就能搞定。
             
            事不可絕,言不能盡,至親亦戒也。
            做事情要留后路,說話要留半句,縱然是親爹也得防著點兒。
             
            佯懼實忍,外恭內(nèi)忌,奸人亦惑也。
            心里頭有火兒也要憋著,假裝畏懼,心里頭滿是仇恨也得藏著,假裝恭敬,您要能這么辦,壞心眼兒再多的人也得上當(dāng)。
             
            知戒近福,惑人遠禍,俟變則存矣。
            知道克制自己的表現(xiàn)、學(xué)會迷惑人,就可以少惹事兒、多成事兒了——反正就是得會變化、會掩飾,您就放心大膽的活著吧。
             
            私人惟用,其利致遠。
            只跟用得上的人套近乎,講交情,這是可以長遠地對你有利的。
             
            天恩難測,惟財可恃。
            別指望領(lǐng)導(dǎo)的保護,包括領(lǐng)導(dǎo)在內(nèi)的一切都是錢的孫子。
             
            以奸治奸,奸滅自安。
            用壞人治壞人,壞人被整死了,整人的那位自己也知道了厲害,也就老實了。
             
            伏惡勿善,其患不生。
            別干什么壞事兒,但也別傻了吧唧干什么好事兒,這樣就能永遠不惹事兒。
             
            計非金者莫施,人非智者弗謀,愚者當(dāng)戒哉。
            計策不牛逼,就別一條道走到黑;要是知道誰傻B,就別跟丫商量事兒,珍惜生命,遠離傻B——如果您自己腦子就不怎么好使,那就更得注意以上這兩條兒。
             
             
            ·謗言卷七
             
            人微不諍,才庸不薦。
            職位低賤的人,沒必要老給他提意見幫助他成長,真沒什么本事的那些貨,也別到處瞎推薦,推了也沒用——該整的要整,該毀的要毀。
             
            攻其人忌,人難容也。
            攻擊一個人,就找他最遭人羨慕嫉妒恨的那一點,大伙兒就都幫你毀他了。
             
            陷其窘地人自污,謗之易也。
            或者把他推到一個進退兩難怎么辦都只有難辦的境地,別人就會替你開始戳他脊梁骨了,這是簡易誹謗法。
             
            善其仇者人莫識,謗之奇也。
            好好對待那些跟他有仇的人,他們早晚會跳出來毀他,而別人又不知道跟你有關(guān)系,這就又上一個層次,算是奇招了。
             
            究其末事人未察,謗之實也。
            把別人不知道的他干過的各種小事兒揪出來,挑出毛病公諸于世,這是實在有效的毀謗法。
             
            設(shè)其惡言人弗辯,謗之成也。
            把關(guān)于他的種種壞話全給散播出去,真真假假的誰也分辨不了,這算直接毀謗成功了。
             
            謗而不辯,其事自明,人惡稍減也。
            被人毀謗,要是不爭辯,只等事實慢慢兒冒出來,旁人的厭惡或許還能稍微減少一些。
             
            謗而強辯,其事反濁,人怨益增也。
            可要是他非爭辯不可,只能是越描越黑,純屬找死。
             
            失之上者,下必毀之;失之下者,上必疑之。
            上頭對誰印象不好了,你看著吧,很快下邊的人也該開始毀他了。同樣,要是下頭的人對誰不滿意了,上頭很快也將對這人產(chǎn)生懷疑。
             
            假天責(zé)人掩私,假民言事見信,人者盡惑焉。
            借助上頭的意見打壓別人實現(xiàn)自己的目的,或者借助下頭的輿論來說事兒討取上頭的信任,任誰都得上當(dāng)。
             
             
            ·示偽卷八
             
            無偽則無真也。
            沒有虛假,也就沒有真實。
             
            真不忌偽,偽不代真,忌其莫辯。
            真的不怕假的,因為假的無論如何也真不了,怕的是真真假假摻合一塊兒分不清楚。
             
            偽不足自禍,真無忌人惡。
            虛偽卻又虛偽的不夠,那就會給自己惹禍;真誠要是真誠到毫無忌諱,那就是缺心眼兒。
             
            順其上者,偽非過焉。
            順應(yīng)上頭的意思,哪怕是裝的,也不是什么過錯。
             
            逆其上者,真亦罪焉。
            悖逆上頭的意思,哪怕是真誠,也是找倒霉。
             
            求忌直也,曲之乃得。
            要求什么東西,別說的太直了,用點技巧含蓄點,才容易成功。
             
            拒忌明也,婉之無失。
            拒絕什么東西,也別有什么說什么,委婉點兒,照樣能達到目的。
             
            忠主仁也,君子仁不棄舊。
            往往會指向,仁厚的人不忍棄舊,自然也就忠了;
             
            仁主行也,小人行弗懷恩。
            往往就要起而行之,君子知道通過行動來感恩,這就是仁,而小人就不會這樣。
             
            君子困不惑人,小人達則背主,偽之故,非困達也。
            君子落魄了也不會騙人,小人一發(fā)達了就開始在主子背后耍花活,這是因為君子不虛偽、小人虛偽,跟發(fā)達不發(fā)達毫無關(guān)系。
             
            俗禮,不拘者非偽;事惡,守諾者非信。物異而情易矣。
            如果是虛禮俗套,一副渾不吝偏不服就跟別人不一樣的姿態(tài),也不算什么虛偽,明明是壞事兒,還說一不二一條道走到黑的,也算不上什么實誠,得具體問題具體分析。

             
            ·降心卷九
             
            以智治人,智窮人背也。
            用智慧來管理下屬,智慧什么時候枯竭了,那些人也就都背棄你了。
             
            伏人懾心,其志無改矣。
            改用攻心,讓他們從心里、從靈魂深處被懾服住,那么無論什么時候他們也不會改變方向了。
             
            上寵者弗明貴,上怨者休暗結(jié)。
            被上頭寵信的人,別太拿自己當(dāng)回事兒;被上頭瞧不上的,也別私下解黨與上頭作對。
             
            術(shù)不顯則功成,謀暗用則致勝。
            權(quán)謀手段,隱蔽的好才能成功,要悄悄地來,打槍地不要。
             
            君子制于親,親為質(zhì)自從也。
            君子的弱點在于他們珍愛親屬,拿他們親屬做人質(zhì)相要挾,也就從了。
             
            小人畏于烈,奸恒施自敗也。
            小人的弱點在于害怕比他們更狠的,你就比他們更惡毒,他們就服了。
             
            理不直言,諫非善辯,無嫌乃及焉。
            說理、勸諫不一定是有什么說什么或者跟人爭辯,別遭人恨才能達到目的。
             
            情非彰示,事不昭顯,順變乃就焉。
            有什么態(tài)度、做什么事情,也沒必要先弄得天下人都知道,順應(yīng)形勢該藏著就藏著才能成功。
             
            仁堪誅君子,義不滅小人,仁義戒濫也。
            仁義二字,能夠拖累死君子,卻滅不掉小人,還是不要濫施仁義,適度才好。
             
            恩莫棄賢者,威亦施奸惡,恩威戒偏也。
            施好處別忘了那些你以為不喜歡好處的好人,懲罰措施也別忘了給那些諂媚的壞人來點兒,好事兒壞事兒得摻合者來,得讓吃肉的也挨挨板子,挨板子的也來點兒肉嘗嘗。
             
             
            ·揣知卷十
             
            善察者知人,善思者知心。
            善于觀察,就能了解人,善于思考,你才能理解人。
             
            知人不懼,知心堪御。
            了解了他們,你就不會怕他們了;理解了他們,你就已經(jīng)能搞定他們了。
             
            知不示人,示人者禍也。
            智慧別讓別人看見,讓別人看見就會惹禍。
             
            密而測之,人忌處解矣。
            偷偷地猜度、揣測,不讓他們知道,人們對你的嫉恨就會消除掉。
             
            君子惑于微,不惑于大。
            君子總是在大事兒上明白,小事兒上糊涂。
             
            小人慮于近,不慮于遠。
            小人總是在眼前事兒上考慮多,未來的事兒上考慮少。
             
            設(shè)疑而惑,真?zhèn)慰设b焉。
            掌握了這個規(guī)律,制造些問題給他們,看看他們的反應(yīng),你就知道誰真誠誰虛偽,誰是君子誰是小人了。
             
            附貴而緣,殃禍可避焉。
            然后認準你覺得有前途的、能富貴的,攀附一下,以后的禍事就可以避免了。
             
            結(jié)左右以觀情,無不知也。
            結(jié)交各路朋友,留神各路的消息和反映,那就什么事兒也瞞不過你了。
             
            置險難以絕念,無不破哉。
            常如身處險境般心存憂患,拋掉無關(guān)的累贅想法——恭喜您,您已經(jīng)神光護體,攻無不克了。
             
            <完>

            posted @ 2009-05-06 17:36 Condor 閱讀(268) | 評論 (0)編輯 收藏

            建議準備做項目和正在做項目的都來看看,吸取一下教訓(xùn)。

            1.過多的工作壓到了同一個人身上

            在很多小公司[或小項目組]里,總有那么一個核心程序員,負擔(dān)了幾乎所有的編程任務(wù)。這個人即使是個天才,也會被繁重的工作壓的沒有學(xué)習(xí)和自我提高的時間。

            比如設(shè)計模式這樣的思考方式也是近幾年才在中國普及開來,卻并非那么容易學(xué)習(xí)。整天迫于項目壓力,就無法領(lǐng)悟新的東西,去用更好的方法解決問題。

            獨自一個人總攬大局,在項目后期很容易因為想早點結(jié)束,而把整個代碼補丁打得滿目滄夷,只求能解決眼前碰到的BUG而不為長遠的結(jié)構(gòu)穩(wěn)定去考慮了。

            結(jié)果整個工程無法分出明顯的模塊,各部分耦合度太高,牽一發(fā)而動全身,一直到新的BUG出來后無可救藥。

            2.過分的彈性工作制

            游戲程序員好似天生追求自由的一群人,白天辦公室里經(jīng)常看不到幾個人,晚上通宵達旦地在電腦前奮戰(zhàn)。不否認好的程序員在精神興奮的時候可以連續(xù)工作寫出質(zhì)量不錯的代碼,但是停下來時幾天沒有進展也是時有發(fā)生。尤其到了項目后期,一旦BUG重重,程序員備受挫折,仿佛眼前的活永遠都干不完,而且調(diào)試程序也失去了編寫程序時的新鮮感,最終假借彈性工作制的名義,消極怠工拖垮項目的先例已經(jīng)有很多了。

            彈性工作制不等于沒有計劃,不等于可以隨意為之。在項目沒有進展,而程序員卻整天不干正經(jīng)事,只知道聊天,瀏覽網(wǎng)頁的時候,程序員并非沒有心理壓力,他可能只是不知道下一步該怎么做,或是問題太多已無從入手,這說明項目已經(jīng)失控了。

            3.沒完沒了的變化,沒完沒了的返工

            大家都想把自己的作品做的更好,往往正在做的還是自己的處女作。自己的游戲做了一半,看見新上市的游戲有了什么新玩法,新東西,都想抄到自己的東西里來。

            新發(fā)現(xiàn)什么技術(shù)可以讓畫面效果更絢,就迫不及待地實現(xiàn)出來看看。又或者,新做出來的東西老是不滿意,三天兩頭地放棄重做,力求完美。最終,游戲老是做不完,看不到盡頭。如果從投資方來了時間壓力,最后一咬牙將有缺漏的版本交出去,等待著的是玩家沒完沒了的投訴電話。

            4.沒有及時的測試

            誰都知道軟件做完了是需要做測試的,測試出問題就應(yīng)該修正,這似乎是天經(jīng)地義的事情,但是落到實處,早期的國產(chǎn)游戲卻很少有嚴格的測試。因為很多人忽略了一點,無論是哪種軟件開發(fā)方法,測試都不是在軟件全部開發(fā)完畢后才進行的。等到大家看到項目好像已經(jīng)完工,這時候?qū)τ螒蜃稣w的測試已經(jīng)完了。必定發(fā)現(xiàn)一大堆的BUG,已經(jīng)到了無處著手的地方,如果只是頭痛醫(yī)頭腳痛醫(yī)腳那還真的不如借這次的經(jīng)驗教訓(xùn),把程序推倒重來做個更好的設(shè)計呢。

            5.項目的主導(dǎo)嚴重地偏向了某一個職位上

            早期的游戲大多是程序員主導(dǎo)整個游戲的設(shè)計的,程序員說應(yīng)該怎么做就怎么做,說今天要怎么改就怎么改,甚至沒有單獨的游戲策劃一職,全部由程序員包辦。

            這對小型游戲倒沒什么,對于規(guī)模較大的游戲,最終即使游戲程序本身沒有大的問題,但是在游戲性方面卻讓玩家難以接受。作為技術(shù)人員,很容易把目光注視到技術(shù)的枝節(jié)上,而忽略了玩家的感受,大多數(shù)情況玩家并不把技術(shù)人員洋洋得意的地方放在眼里,游戲畢竟是給人玩的。

            后來又出現(xiàn)了策劃為主導(dǎo)的游戲,策劃拍腦袋一想,我們應(yīng)該加點什么,那么程序員就日日夜夜地加班完成。如果實在是技術(shù)解決不了的還就算了,最怕的是,本來技術(shù)解決有問題,可能新加的設(shè)計會影響到整體的框架結(jié)構(gòu)、對硬件的過分要求等,暫時像貼皮膏藥一樣把功能補上去看起來工作得很好,可是早早地就給日后的持續(xù)開發(fā)留下了隱患。程序員在實現(xiàn)的時候盲目聽從策劃的安排,沒有仔細地全面思考,造成了項目無法完成。

            我也聽說過美術(shù)甚至市場人員為主導(dǎo)的項目,但并沒有接觸過這樣的團隊,就不太清楚會出現(xiàn)什么問題了。

            總而言之,游戲開發(fā)是一個需要大家共同努力的事情。我們應(yīng)該把自己的思考都帶入到開發(fā)中,盲目地跟從別人的想法或固執(zhí)地堅持自己都有可能影響整個項目。

            posted @ 2009-04-29 10:42 Condor 閱讀(640) | 評論 (1)編輯 收藏

            引言:

            GameBryo擁有一套復(fù)雜的材質(zhì)系統(tǒng),這套材質(zhì)系統(tǒng)可以根據(jù)渲染對象的狀態(tài)和屬性生成不同的shader代碼,提高了渲染流程的適應(yīng)性,可以使你定義一套材質(zhì)能適應(yīng)多種渲染對象。同時,GameByro將shader的初始化和使用插件化,方便與美術(shù)工具集成,并且實現(xiàn)了平臺無關(guān)性。為了實現(xiàn)這些目的,GameByro使用了一套復(fù)雜的機制,本文主要解析GameByro如何生成、編譯并使用shader代碼。

            Shader

            GameBryo的shader的接口封裝在NiShader中,頂點數(shù)據(jù)流聲明,常量表的訪問,渲染狀態(tài)的設(shè)置都是通過這個類(有點類似于D3Deffect)。在程序運行NiShader是由NiShaderFactory負責(zé)管理的,NiShaderFactory通過NiShaderLibrary從文件中創(chuàng)建shader,用全局性的map管理起來。NiShaderLibrary通過解析shader文本創(chuàng)建NiShader對象,并調(diào)用3D圖形接口編譯shader代碼,將這個類以dll的形式封裝,就可以作為插件來使用。NiShader類的創(chuàng)建可以通過解析文件來進行,也可以通過C++的類來定制,只需從NiShader上繼承即可。GameByro為PC平臺提供了一個NiD3DXEffectShaderLib庫,這個庫提供了解析shader文件和初始化shader對象的功能。用戶只需按GameByro定義的格式編寫shader代碼的語意和注釋,NiD3DXEffectShaderLibrary就會根據(jù)文本來創(chuàng)建NiD3Dshader對象,在應(yīng)用程序中就可以通過Techinqe的名稱來訪問這個對象。通過這種機制,我們將shader文本文件放在相關(guān)美術(shù)工具指定的目錄下,在工具中就可以使用這些shader,并且能夠通過shader的語意和注釋為相關(guān)參數(shù)和變量生成UI,方便美術(shù)調(diào)試。

            WIN平臺上的整個流程如下:

            1. 應(yīng)用程序在啟動時會先初始化整個shader系統(tǒng),接下來導(dǎo)入Shader解析庫和加載庫(dll的形式)。

            2. 接下來應(yīng)用程序?qū)iD3DShader的初始化工作委托給NiShaderLibrary來處理,NiShaderLibrary首先通過NiD3DXEffectLoader載入所有的shader文本文件,并通過NiD3DXEffectParser解析文本生成NiD3DXEffectFile對象,同時NiD3DXEffectLoader還負責(zé)將shader代碼編譯成二進制形式的GPU程序。

            3. 最后由NiD3DXEffectTechnique負責(zé)通過NiD3DXEffectFile上的信息生成NiD3Dshader對象。

            4. 所有的shader對象創(chuàng)建后,NiShaderLibrary的初始化就結(jié)束了,最后由NiShaderFactory負責(zé)統(tǒng)一管理。

            材質(zhì):

            NiMaterial為渲染對象生成和定義Shader,NiMaterialInstance為渲染對象分配 和Cach Shader。NiFragmentMaterial提供了一個Shader Tree框架,在它的繼承類中可以使用這個框架搭建shader tree。這個機制允許NiFragmentMaterial根據(jù)對象不同的渲染狀態(tài)生成不同的shader代碼,Cach在內(nèi)存中,并保存到磁盤文件。GameByro描述符的概念大量使用,包括前面提到的Shader解析過程也是通過描述符來傳遞信息。在材質(zhì)系統(tǒng)中主要使用了NiMaterialDescriptor和NiGPUProgramDescriptor這個兩個類做描述符,這兩個類中保存的信息是兼容的,都是為了描述某種材質(zhì)在渲染對象的某一特定渲染狀態(tài)下所對應(yīng)的GPU程序的特征。NiFragmentMaterial通過渲染目標的狀態(tài)和屬性生成NiMaterialDescriptor,并通過NiMaterialDescriptor查找匹配的shader,如果找不到,則通過shader tree生成相應(yīng)的shader程序,并保存到磁盤文件中。當(dāng)下一次應(yīng)用程序啟動時就可以通過這個文件直接創(chuàng)建NiShader對象。可以說通過NiFragmentMaterial生成的shader代碼是為特定的渲染對象在特定的情況下量身打造的。

            整個過程的詳細流程如下:

            1. 在每次渲染一個物體之前,NiMaterialInstance會先判斷這個物體的shader程序是否需要更新,如果不需要更新,就直接返回當(dāng)前Cach的NiShader;如果需要更新, NiMaterialInstance首先會根據(jù)物體的渲染狀態(tài)為其生成一個NiMaterialDescriptor,然后將這個NiMaterialDescriptor和當(dāng)前Cach住的NiShader進行比較,如果匹配仍然返回當(dāng)前Cach的NiShader,如果不匹配,將獲得shader的工作轉(zhuǎn)交給NiMaterial進行。

            2. NiMaterial首先通過這個NiShaderFactory 查詢匹配這個NiMaterialDescriptor的NiShader,如果找不到,就通過NiMaterialDescriptor生成NiShader,同時生成一段Shader代碼,并保存到以shader描述符中的特征碼來命名對應(yīng)的shader文件。

            3. 當(dāng)獲得相應(yīng)的NiShader對象后,NiMaterialInstance會調(diào)用NiShader的SetupGeometry接口,在這個接口中會進行頂點聲明。

            以下是NiMaterialInstance為Geometry選擇shader的代碼:

            NiShader* NiMaterialInstance::GetCurrentShader(NiRenderObject* pkGeometry,

            const NiPropertyState* pkState,

            const NiDynamicEffectState* pkEffects)

            {

            if (m_spMaterial)

            {

            bool bGetNewShader = m_eNeedsUpdate == DIRTY;

            if (m_eNeedsUpdate == UNKNOWN)

            bGetNewShader = pkGeometry->GetMaterialNeedsUpdateDefault();

            // Check if shader is still current

            if (bGetNewShader && m_spCachedShader)

            {

            bGetNewShader = !m_spMaterial->IsShaderCurrent(m_spCachedShader,

            pkGeometry, pkState, pkEffects, m_uiMaterialExtraData);

            }

            // Get a new shader

            if (bGetNewShader)

            {

            NiShader* pkNewShader = m_spMaterial->GetCurrentShader(

            pkGeometry, pkState, pkEffects, m_uiMaterialExtraData);

            if (pkNewShader)

            {

            NIASSERT(m_spCachedShader != pkNewShader);

            ClearCachedShader();

            m_spCachedShader = pkNewShader;

            if (!pkNewShader->SetupGeometry(pkGeometry, this))

            ClearCachedShader();

            }

            else

            {

            ClearCachedShader();

            }

            }

            m_eNeedsUpdate = UNKNOWN;

            }

            return m_spCachedShader;

            }

            如果想通過NiFragmentMaterial實現(xiàn)自己的shader tree就需要在NiFragmentMaterial提供的接口中實現(xiàn)自己拼裝代碼的邏輯,代碼塊由NiMaterialLibraryNode封裝,NiMaterialLibraryNode既可以直接寫C++代碼來定義,也可以先寫成XML腳本,再由專門的解析工具轉(zhuǎn)換成C++代碼。

            由NiStandardMaterial生成的shader代碼文件如下圖所示:

            clip_image002

            文件名就是NiMaterialDescriptor的掩碼,用來標識的shader代碼的行為。

            Shader代碼的行為描述如下:

            Shader description:

            APPLYMODE = 1

            WORLDPOSITION = 0

            WORLDNORMAL = 0

            WORLDNBT = 0

            WORLDVIEW = 0

            NORMALMAPTYPE = 0

            PARALLAXMAPCOUNT = 0

            BASEMAPCOUNT = 1

            NORMALMAPCOUNT = 0

            DARKMAPCOUNT = 0

            DETAILMAPCOUNT = 0

            BUMPMAPCOUNT = 0

            GLOSSMAPCOUNT = 0

            GLOWMAPCOUNT = 0

            CUSTOMMAP00COUNT = 0

            CUSTOMMAP01COUNT = 0

            CUSTOMMAP02COUNT = 0

            CUSTOMMAP03COUNT = 0

            CUSTOMMAP04COUNT = 0

            DECALMAPCOUNT = 0

            FOGENABLED = 0

            ENVMAPTYPE = 0

            PROJLIGHTMAPCOUNT = 0

            PROJLIGHTMAPTYPES = 0

            PROJLIGHTMAPCLIPPED = 0

            PROJSHADOWMAPCOUNT = 0

            PROJSHADOWMAPTYPES = 0

            PROJSHADOWMAPCLIPPED = 0

            PERVERTEXLIGHTING = 1

            UVSETFORMAP00 = 0

            UVSETFORMAP01 = 0

            UVSETFORMAP02 = 0

            UVSETFORMAP03 = 0

            UVSETFORMAP04 = 0

            UVSETFORMAP05 = 0

            UVSETFORMAP06 = 0

            UVSETFORMAP07 = 0

            UVSETFORMAP08 = 0

            UVSETFORMAP09 = 0

            UVSETFORMAP10 = 0

            UVSETFORMAP11 = 0

            POINTLIGHTCOUNT = 0

            SPOTLIGHTCOUNT = 0

            DIRLIGHTCOUNT = 0

            SHADOWMAPFORLIGHT = 0

            SPECULAR = 1

            AMBDIFFEMISSIVE = 0

            LIGHTINGMODE = 1

            APPLYAMBIENT = 0

            BASEMAPALPHAONLY = 0

            APPLYEMISSIVE = 0

            SHADOWTECHNIQUE = 0

            ALPHATEST = 0

            NiStanderMaterial就是根據(jù)這些掩碼的數(shù)據(jù)來生成shader代碼,用戶可以通過重載GenerateVertexShadeTree、GeneratePixelShadeTree、CreateShader這些接口來定義自己的shader生成規(guī)則。

            增加自己的渲染效果:

            通過前幾節(jié)我們可以了解到,想定義自己的材質(zhì),一是通過編寫shader代碼完成。在應(yīng)用程序初始化的時候,這些shader代碼會被初始化成NiShader對象,進一步的通過NiShader對象來初始化NiSingleShaderMaterial對象,并分配給渲染對象。在GameByro默認的渲染流程中,這些步驟都是自動進行的,美術(shù)只需在3DMAX插件中為幾何體的材質(zhì)指定Shader程序,導(dǎo)出到nif文件,應(yīng)用程序就能正確加載并渲染;二是定義自己的NiMaterialFragment類,在類中定義如何生成shader,在應(yīng)用程序運行時只要將這個類的實例指派給幾何體,這個類就會自動為幾何體生成shader。這兩種方式對于美術(shù)人員來說,主要區(qū)別在于,采用第一種方法定義的材質(zhì),其渲染數(shù)據(jù)的設(shè)置必須嚴格符合shader代碼中所需的數(shù)據(jù),否則就會報錯。(比如說,頂點數(shù)據(jù)流必須嚴格符合shader程序的定義,必須為shader中每個采樣器提供格式正確的紋理);而采用第二種方法定義的材質(zhì),就有很高的容錯和適應(yīng)性,但是這種容錯性和適應(yīng)性需要自己寫代碼來完成,GameByro提供的NiStanderMaterial就提供了這套完整的機制。每個貼圖槽內(nèi)的貼圖如果你設(shè)置就會生成相應(yīng)的貼圖處理流程,如果不設(shè)置,就沒有這張貼圖的處理流程。

            為了驗證這個過程,筆者嘗試增加了一個自己的shader特效——SubSurfaceScattering,簡稱3s,其原理是模擬光在半透明物體中散射的效果。由于該效果無須預(yù)處理過程,所有的貼圖均來自磁盤文件,所以比較容易融合到GameByro工作流中。

            筆者將在FX COMPOSER中調(diào)試通過的fx文件放入SDK中的SDK\Win32\Shaders\Data目錄下,在3DMAX的材質(zhì)面板選擇GameByroShader,然后就可在顯示shader的組合框中看到文件中定義的Techinqe,選擇點擊apply按鈕,就會出現(xiàn)自定義的參數(shù)調(diào)整界面。

            clip_image004

            clip_image006

            通過調(diào)整參數(shù),最終得到皮膚和玉器的渲染效果如下:

            clip_image007

            皮膚

            clip_image009

            玉器

            總結(jié)

            GameByro的這套開發(fā)流程非常方便直觀,但是美術(shù)僅能為shader程序分配靜態(tài)的數(shù)據(jù)源,比如說光照圖等,CubeMap等;而一些在程序中實時生成的紋理數(shù)據(jù)則無法整合到美術(shù)工具中,比如說陰影圖、折射圖、反射圖等,這些都需要程序?qū)懘a來實現(xiàn)。調(diào)試起來就不大方便了。大部分情況下,我們只需要使用GameByro提供的NiStanderMaterial就可以完成大部分材質(zhì)的需求,特殊的效果可以自己寫shader或者通過引擎提供的shader庫來完成,只有當(dāng)我們需要即根據(jù)復(fù)雜的情況做很多不同的處理時,我們才需要重載NiFragmentMaterial搭建自己的shader tree。不過搭建shader tree的程序一般比較復(fù)雜,編寫難度大,雖然引擎允許通過XML文件來編寫材質(zhì)節(jié)點,但是使用起來仍然不方便。GameByro并沒有提供相關(guān)的后期處理的開發(fā)工具,后期處理的特效并不能所見即所得,這方面還需完善。

            GameByro為幾何體在特定的環(huán)境下生成專用的shader代碼,具有一定的靈活性,但是也付出了以下代價:

            l 分析幾何體的屬性和當(dāng)前狀態(tài),為其生成shader代碼的過程有性能損耗。

            l Shader代碼生成后會保存到磁盤文件中,這個過程如果不使用異步,可能會引起阻塞。

            l 生成的NiShader對象會有內(nèi)存消耗。由于GameByro默認的實現(xiàn)是將所有的shader文件初始化成NiShader對象,所以當(dāng)游戲運行的時間久了以后會生成大量的shader文件,這時候內(nèi)存的消耗可能會很可觀,同時加載的時間也會增加。不過可以自己控制加載的流程,在這里進行性能優(yōu)化。

            作者:葉起漣漪

            posted @ 2009-04-22 11:18 Condor 閱讀(1876) | 評論 (0)編輯 收藏

            引言

            GameByro是一款成熟的商業(yè)引擎,已經(jīng)被許多成功的商業(yè)項目所使用,不僅包括文明4、上古卷軸4,輻射3等跨平臺知名單機游戲,還有EA的大型3DMMORPG戰(zhàn)錘online。GameByro完全基于面對對象設(shè)計,結(jié)構(gòu)清晰,便于使用和擴展。靈活的可編程渲染架構(gòu)使它比較容易支持最新的圖形技術(shù)。另一方面,由于強調(diào)通用性,GameByro并沒有對上層應(yīng)用做太多的支持,其工具和插件大多僅具有一些通用功能,所以它更像是一個游戲開發(fā)套件而不是一個完整的FrameWork。

            引擎特性概覽:

            · 跨平臺(PC,XBOX360,PS3)

            · 場景圖表現(xiàn)為層次化的結(jié)構(gòu)

            · 同目前主要的建模工具集成(插件支持)

            · 高效的可視性裁剪

            · 在所有的平臺上支持高級3D硬件加速

            · 高級紋理和著色效果

            · 動態(tài)碰撞檢測

            · 細節(jié)分級表現(xiàn)(LOD)

            · 靈活的渲染,排序和裁剪算法

            對象系統(tǒng)

            GameByro的對象系統(tǒng)的使用遍及整個引擎,其主要實現(xiàn)如對象管理,引用計數(shù),對象生存期等功能。可以通過對幾個基類的繼承來使用對象系。

            其主要特性主要有:

            1. 智能指針(引用計數(shù))

            2. 運行時類識別(RTTI)

            3. 場景對象復(fù)制

            4. 序列化(對象文檔化)

            5. 對象命名

            6. 對象擴展數(shù)據(jù)的管理

            7. 定時器(主要用于動畫)

            8. 多線程操作

            驅(qū)動層

            GameByro對圖形接口進行了封裝,將圖形API從引擎的渲染系統(tǒng)中剝離出來,在PC系統(tǒng)上,GameByro同時支持DX9和DX10兩種接口。

            DX9渲染器特性

            l GameByro不允許多個DX9Renderer對象同時存在,且不能與DX10Renderer共存。但在同一幀內(nèi),GameByro的DX9Renderer可以同時渲染多個窗口。

            l GameByro的DX9渲染器支持對資源的多線程訪問,同時也支持對資源的預(yù)載,但是多線程的操作仍然受到嚴格的限制。

            l DX9Renderer 的固定管線蒙皮操作最少支持4塊骨骼(矩陣),同時基于shader的蒙皮操作支持30塊骨骼。

            l DX9Renderer通過對后臺緩沖的多重采樣支持全屏抗鋸齒,范圍在2倍到4倍之間。

            l 大多數(shù)硬件在DX9下對幾何體的一個單一的piece所能接受的光照數(shù)量都有一定的限制(指渲染的一個批),如果超過這個限制,GameByro會根據(jù)距離或者是影響因子放棄一些光照。正因如此,在應(yīng)用程序中,當(dāng)8個以上的逐頂點光照作用于同一對象時,就會有一些被拋棄。

            l DX9Renderer提供了視口的左右反向功能,用于實現(xiàn)后視鏡、立方體貼圖表面繪制等功能。

            l DX9Renderer支持頂點霧,可以通過相關(guān)接口設(shè)置霧的最大值。

            l DX9Renderer完全支持DX的紋理格式。應(yīng)用程序可以將自己的Direct3D textures提供給GameByro,引擎會自動將其封裝到自己的材質(zhì)對象中并允許添加屬性和特效。通過提供自己的DX的紋理格式,GameByro能夠正確的使用自并非天然支持的紋理格式。

            l 紋理相關(guān)特性和限制:DX9Renderer需要顯卡支持在同一pass中至少使用兩個紋理,否則渲染器則不會創(chuàng)建成功。此外受限于硬件的功能還有:

            1. Cube Mapping(立方體紋理)

            2. Specular Bump Mapping(凹凸鏡面貼圖)

            3. Diffuse Bump Mapping(凹凸反射貼圖)

            4. Non-Power-of-Two Texture Size(編長非二整數(shù)冪的紋理):使用這種紋理有如下限制:紋理尋址模式必須設(shè)置為clamp,Mipmapping不能使用。

            5. Texture Downsizing(紋理精度縮減)

            6. Texture Compression(壓縮紋理),DX9Renderer支持載入經(jīng)過壓縮的紋理格式,并提供了紋理即時壓縮的功能。如果硬件支持壓縮紋理,DX9Renderer可以將經(jīng)過壓縮的紋理數(shù)據(jù)直接交給硬件處理,否則DX9Renderer會自動將數(shù)據(jù)解壓后再交給硬件。

            7. Texture Apply Modes Supported:DX9Renderer不支持APPLY_DECAL紋理應(yīng)用模式。

            8. Texture Format Requests(紋理格式要求):精確的紋理像素映射依賴于目標硬件和顯示器像素位寬。

            9. Palettized Texture Formats(調(diào)色板紋理格式的支持)。

            10. Sphere Mapping(球面映射):GameByro中所有的渲染器都支持世界空間中的球面映射。

            11. DX9Renderer支持加載包括DDS、TGA、BMP格式的文件。Cube textures和volume textures都能被正確的加載,但是只能通過三維坐標尋址。

            12. GameByro的編輯器支持導(dǎo)出DX原格式的紋理,并在加載的時候不進行格式轉(zhuǎn)換。將DX格式的紋理直接交給DX處理。

            引擎渲染系統(tǒng)分析

            GameByro的渲染是由幀渲染系統(tǒng)(Frame Rendering System) 控制的,幀渲染系統(tǒng)封裝了每一個批次的繪制過程,這樣可以方便的控制整個渲染流程。

            陰影系統(tǒng):

            GameByro的陰影系統(tǒng)是使用幀渲染系統(tǒng)的典范,通過對已有的類以繼承的方式進行功能擴展,實現(xiàn)了靈活的陰影渲染功能。GameByro自身支持三種光源的陰影圖生成,分別為點光源(全方向光)、平行光、聚光燈。

            陰影系統(tǒng)統(tǒng)一由一個管理器負責(zé)控制。陰影的算法被封裝成了一個個類對象中。系統(tǒng)中同時存在著幾種陰影技術(shù),即可以選擇使用,也可以同時使用幾種陰影技術(shù)作用于同一幾何體。陰影系統(tǒng)會自動裁剪掉那些沒有陰影接受體的光源,同時在計算每個光源所產(chǎn)生的陰影時,會裁剪掉那些不受此光源影響的幾何體,達到性能優(yōu)化的目的。用戶很容易對陰影系統(tǒng)進行擴展,實現(xiàn)自己的陰影算法。

            GameByro的陰影主要是基于shadowMap技術(shù),點光源使用了立方體陰影圖,軟陰影則使用了方差陰影圖技術(shù)(VSM)。

            GameByro的陰影系統(tǒng)集成到了場景編輯器中,可以在編輯器中直接為光源指定陰影效果,所見即所得,提高了開發(fā)效率。

            clip_image002

            (如圖所示,在編輯器中同時使用點光源陰影和方向光產(chǎn)生的軟陰影)

            地形系統(tǒng):

            GameByro的terrain是簡單易用的,并且方便為其擴展,用以滿足項目的其他功能需求。

            地形系統(tǒng)由以下幾部分組成:

            clip_image004

            1. NiTerrainComponent:是整個地形系統(tǒng)的入口,通過Terrain Interactor可以像訪問容器一樣訪問NiTerrainComponent所有的sub-component。

            2. Terrain Interactor 地形迭代器,通過Terrain Interactor可以啟動所有的數(shù)據(jù)查詢,比如簡單的碰撞檢測,meta-data查詢,高度圖導(dǎo)入和文件加載。幾乎所有基于terrain系統(tǒng)的操作都是通過Terrain Interactor完成的。

            3. NiTerrainSectorComponent 的內(nèi)部主要包含一個負責(zé)組織地形數(shù)據(jù)塊的四叉樹。此對象負責(zé)從磁盤加載執(zhí)行物體與地形的射線相交查詢,轉(zhuǎn)換地形幾何體,管理內(nèi)部資源(包括共享的頂點流和shader)。同時NiTerrainSectorComponent還負責(zé)進行四叉樹的遮擋查詢和生成可見集。

            4. Data Leaves and Blocks 四叉樹的切分等級是通過NiTerrainComponent設(shè)置的,四叉樹的每個節(jié)點都包含一個地形塊,塊的邊長必須是2的整數(shù)冪。四叉樹的根節(jié)點等級為N,葉節(jié)點為0,由高到底細節(jié)依次增加,等級為0的葉節(jié)點所包含的地形塊擁有最高的細節(jié)。

            clip_image006

            5. Material Layers:地形系統(tǒng)通過掩碼圖來為地形指定材質(zhì)。掩碼的數(shù)據(jù)指定了地表的每個部分所對應(yīng)的材質(zhì)。同一地表最多支持四種材質(zhì),根據(jù)各自的權(quán)重進行混合,權(quán)重數(shù)據(jù)也是通過掩碼來獲得。

            材質(zhì)在地形的渲染系統(tǒng)中扮演著很特殊的角色,可以通過對材質(zhì)指定meta-data來附載其他的信息(比如在雪地行走的聲音),同時也可以通過對材質(zhì)的紋理貼圖為地表增加頂點或像素著色程序。此外每種材質(zhì)可以包含如下指定類型的紋理貼圖:

            l Diffuse/Base Map 反射貼圖,通過3或4個通道決定反射光的顏色。

            l Detail Map 細節(jié)貼圖,為反射貼圖提供Alpha值。

            l Normal Map 法線貼圖。

            l Parallax Map 視差貼圖,用來保存表面像素的高度偏移信息。

            此外GameByro還提供了簡單的地形射線追蹤和水面渲染。地形射線追蹤目前的實現(xiàn)很簡單,就是用一個射線查詢地表的三角形,以后會與Physics進行集成,支持通過物理引擎l實現(xiàn)物體與地表的碰撞檢測。水面渲染主要是用兩張紋理動畫混合而成,通過凹凸貼圖來表現(xiàn)水波。引擎為水面所在的地表生成一個灰度圖,保存地表距離水面的高度。這里預(yù)先定義了兩種顏色,深水顏色和淺水顏色,如果水面以下沒有地表就直接使用深水顏色。再像素著色器中可以對高度圖進行采樣,從而得出當(dāng)前像素的水深,然后根據(jù)這個深度在深色和淺色之間進行差值,得到最終水的顏色。不過這個效果并不是很理想,如需更好的效果,還需要對其進行擴展,比如說,增加反射和折射等。

            clip_image008

            材質(zhì)

            GameByro的材質(zhì)主要是通過3DMAX的插件進行編輯的,并提供了標準的材質(zhì)節(jié)點。

            (在GameByro中,材質(zhì)節(jié)點的主要作用是負責(zé)根據(jù)著色過程生成相應(yīng)的shader代碼)這個節(jié)點一共有9個通道,并提供了大量可供調(diào)整的參數(shù),這樣就可以讓美術(shù)方便的使用逐像素光照、視差貼圖、環(huán)境體貼圖這些效果,在游戲中,GameByro通過不同的材質(zhì)屬性和不同的光照環(huán)境編譯出不同的shader代碼,以二進制的形式保存在磁盤上,下次啟動時載入內(nèi)存,這樣就不用重復(fù)編譯,但在第一次進入游戲中時會有些延遲。靈活強大的材質(zhì)是次世代引擎的重要特征,GameByro在這方面做到了靈活,但是美術(shù)仍然不能通過可視化工具控制材質(zhì)的處理過程,只能編輯資源和修改參數(shù),編輯性還不夠強大。

            Shader

            GameByro提供了一個極具擴展性的shader系統(tǒng),并將它與藝術(shù)創(chuàng)作工具緊密結(jié)合。GameByro定義了自己的shader格式,基于文本的.NSF文件和基于二進制的.NSB文件,.NSF文件編譯后生成.NSB文件,這個過程即可以在開發(fā)時完成,也可以在運行時進行。 .NSF文件使用的是GameByro自定義的語法,并使用自己的語法分析器將其編譯成相關(guān)平臺的代碼。實際上,GameByro的shader系統(tǒng)在應(yīng)用程序和GPU程序之間做了一層封裝,屏蔽了不同平臺之間的差異,使得應(yīng)用程序可以用相同的接口來與GPU之間進行交互,而GPU程序最終還是通過cg或hlsl來實現(xiàn)的,這樣做的好處是,當(dāng)平臺發(fā)生改變時,只需要根據(jù)具體的平臺來編寫相應(yīng)的shader程序,而不需要去修改應(yīng)用程序。當(dāng)然,shader系統(tǒng)也直接支持cg和hlsl格式的文件,使用方法同NSF、NSB文件相似。GameByro的Shader系統(tǒng)提供了一套完整的查錯機制,方便使用者對程序進行debug。

            GameByro的shader系統(tǒng)集成到了所有的配套開發(fā)工具中,這樣就實現(xiàn)了所見即所得,美術(shù)在工具中就可以直接看到資源在游戲中的效果,從而提高了開發(fā)效率。

            GameByro通過引入自己的shader文件格式為跨平臺提供了方便,同時也增加了系統(tǒng)的復(fù)雜性,使用起來稍微有點繁瑣,開發(fā)人員又不得不去熟悉它的語法,如果開發(fā)中不考慮跨平臺的話,想要自己開發(fā)特效,也可以不使用NSF文件,直接使用fx格式的文件。

            引擎自帶的特殊材質(zhì)

            AdditiveLightMapsMaterial(附加光照圖材質(zhì),使用額外的光照圖紋理來混合當(dāng)前場景光照計算的結(jié)果。下面的插圖是使用投射光照圖紋理的渲染效果。)

            clip_image010

            AlphaTextureBlender(紋理Alpha混合)

            clip_image012

            Aniso(各向異性光照,左下的飛機)、Halo(光暈效果。上面的飛機)

            clip_image014

            ASMSkinningLighting(參與光照計算的骨骼動畫蒙皮)

            ASMSkinningNoLighting(不參與光照計算的骨骼動畫蒙皮,效率經(jīng)過了優(yōu)化)

            BaseBumpWithSpatialGlow(帶有輝光效果的凹凸貼圖)

            clip_image016

            Chrome(金屬外表,使用基本紋理、漫反射cube map、鏡面反射cube map、法線貼圖等效果實現(xiàn)類似于金屬表面的光澤和質(zhì)感,并支持基于此效果的蒙皮操作)

            clip_image018

            Colorize(使用一個自定義的屬性來動態(tài)的設(shè)置或者修改顏色)

            clip_image020

            FXSkinning and HLSLSkinning(使用可編程渲染管線進行骨骼動畫的蒙皮)

            GeneralGlow(普通輝光效果)

            GeneralDiffuseSpecularGlow(普通鏡面反射高光輝光)

            clip_image022

            GeneralDiffuseSpecular(普通鏡面反射高光,支持蒙皮操作)

            clip_image024

            Dot3BumpMap(凹凸貼圖,右圖為蒙皮效果)

            clip_image026

            Glass (玻璃效果)

            clip_image028

            OilyFilm(油狀薄膜)

            clip_image030

            LuminanceTransfer(類似于熱源偵測儀的效果)

            clip_image032

            Outlining(藍圖或草圖)

            clip_image034

            ParallaxMapping(視差貼圖,下面右圖是使用了ParallaxMapping的效果)

            clip_image036

            PerPixelLighting(逐像素光照,同時支持固定管線和可編程渲染管線)

            clip_image038

            SkinnedToonShadingWithOutline(卡通渲染,支持骨骼蒙皮、描邊)

            clip_image040

            紋理

            GameByro的紋理系統(tǒng)支持多重紋理、投射紋理、動態(tài)紋理、特效紋理,并且使用紋理的一些高級特性是平臺無關(guān)的。當(dāng)然GameByro中紋理的功能仍然受限于硬件特征。主要特性和限制見渲染器。

            工具及插件:

            GameByro提供了場景編輯器,資源瀏覽器,資源的物理模型瀏覽器、動畫編輯工具,字體創(chuàng)建工具,以及3DMAX、MAYA插件,材質(zhì)編輯是在插件中進行的,這套工具包含了完整的3D資源開發(fā)流程。

            物理系統(tǒng)

            GameByro通過PhysX提供物理仿真模擬,只需幾行簡單的代碼就可以將GameByro的場景和PhysX建立起聯(lián)系,不過需要在顯式的調(diào)用相關(guān)接口來進行物理仿真對象和場景對象間的同步,即將物理仿真的結(jié)果作用于場景中的對象。同時,還可以通過參數(shù)來決定是否需要等待物理仿真運算的結(jié)果。這就保證了一定的靈活性,例如,用戶可以不對靜態(tài)物體進行同步,達到優(yōu)化的目的。還可以通過把更新的接口放在下一次循環(huán)開始的時候調(diào)用,這樣可以減少由于等待物體仿真模擬造成線程的阻塞,充分的利用了CPU資源。

            粒子系統(tǒng)

            GameByro的粒子系統(tǒng)為3ds max 和 Maya等粒子生成工具提供了完整的插件系統(tǒng),并完全支持軟粒子,即粒子會受到力的影響。

            clip_image042

            流處理引擎

            GameByro實現(xiàn)了一個完全跨平臺的流處理引擎。使用者可以方便的利用它完成多線程任務(wù),如資源的加載等,完全發(fā)揮多處理器平臺的威力,而不用關(guān)注底層細節(jié)。

            效率分析:

            為了對GameByro進行全面的評估,筆者試著對GameByro的渲染效率進行了簡單的測試,本人的機器配置如下:

            l CPU:E2180

            l GPU:2400PRO

            l 內(nèi)存:2GB

            基本可以代表當(dāng)前中低端玩家的配置。

            場景一

            下圖為一個大的室外地形場景,包括建筑物、水面,地表使用了法線貼圖,除了植被以外,基本包含MMORPG的大部分室外場景要素。最后測試的結(jié)果平均幀數(shù)為21幀。幀數(shù)偏低的原因是整個場景使用了逐像素光照,同時沒有采用LOD進行優(yōu)化。

            clip_image044

            場景二

            如圖所示場景中有100個角色在做不同的動畫,每個角色有51個骨骼,整個場景共有287900個多邊形和556600個頂點,并且場景中有一個點光源和平行光源,在沒有陰影的情況下幀數(shù)大約在27~28幀左右。這些骨骼動畫使用了GameByro提供的骨骼動畫優(yōu)化方法,性能有一定提升。

            clip_image046

            由以上結(jié)果可以看出,GameByro的骨骼動畫渲染效率尚可,而室外地形渲染系統(tǒng)的性能稍顯不足,再沒有角色和植被的情況下,僅能達到22幀左右,如果在實際的游戲環(huán)境還要算上其他游戲系統(tǒng)(網(wǎng)絡(luò)、邏輯、UI等)的性能消耗,這是不足以讓玩家流暢進行游戲的,還需進一步手動的優(yōu)化。

            總結(jié)

            GameByro擁有一套靈活的架構(gòu),便于使用和擴展,易于上手;配套的開發(fā)工具比較齊全,擁有完整的美術(shù)開發(fā)流程;完全支持跨平臺,便于游戲的移植;同時由于為了保證靈活性,在設(shè)計上面比較偏重于功能和擴展,而不是性能。

            高度的可定制性帶來的是較低的整合,GameByro沒有提供游戲框架,地圖編輯器也僅僅實現(xiàn)了最通用的功能,即地表和物件的擺放。這就說明,如果要使用GameByro開發(fā)產(chǎn)品,就需要自己整合GameByro,并對其進行一定的修改和擴展。這也是它與UnrealEngine3區(qū)別最大的地方。

             

            作者:葉起漣漪

            posted @ 2009-04-22 10:42 Condor 閱讀(2833) | 評論 (2)編輯 收藏

            僅列出標題
            共10頁: 1 2 3 4 5 6 7 8 9 Last 
            亚洲色欲久久久久综合网| 久久精品国产久精国产果冻传媒| 久久久久亚洲精品无码网址 | 久久久久久久波多野结衣高潮| 伊人久久大香线蕉综合影院首页 | 色综合久久最新中文字幕| 久久久久香蕉视频| 久久精品一本到99热免费| 精品久久综合1区2区3区激情| 久久99久久99精品免视看动漫| 久久精品嫩草影院| 久久人人爽人人爽人人片AV高清 | 久久超碰97人人做人人爱| 亚洲AV伊人久久青青草原| 一本色综合网久久| 一本一本久久A久久综合精品 | 欧美大战日韩91综合一区婷婷久久青草| 久久五月精品中文字幕| 久久久精品人妻一区二区三区四| 久久99亚洲综合精品首页| 亚洲午夜久久久久久噜噜噜| 品成人欧美大片久久国产欧美| 精品久久久无码21p发布| 久久久精品视频免费观看| 婷婷伊人久久大香线蕉AV| 看全色黄大色大片免费久久久 | 亚洲AⅤ优女AV综合久久久| 亚洲国产精品人久久| 精品久久人妻av中文字幕| 久久乐国产综合亚洲精品| 99久久伊人精品综合观看| 久久精品人成免费| 日本久久久久亚洲中字幕| 中文字幕人妻色偷偷久久| 国产精品久久久久蜜芽| 久久亚洲av无码精品浪潮| 久久se这里只有精品| 成人国内精品久久久久影院VR| 国产精品久久影院| 99久久国产亚洲高清观看2024 | 品成人欧美大片久久国产欧美|