對WoW Shader檔案的分析

來源:互聯網
上載者:User
文章目錄
  • 評論

Wow的渲染引擎是同時支援固定渲染管線渲染和Shader渲染管線渲染的.
bls檔案是wow的shader檔案,分析它的實現可以學習引擎是怎樣渲染的,以及如何做一個相容固定管線和Shader管線的引擎.

bls裡儲存的是OpenGL low-level shading language的指令,terrain1.bls,terrain2.bls,terrain3.bls,terrain4.bls分別對應渲染一塊具有1/2/3/4層的紋理地形.terrain1_s.bls,terrain2_s.bls,terrain3_s.bls,terrain4_s.bls分別對應渲染帶高光反射的地形,其對應使用的是帶有_s的地形紋理.

雖然shader可以按任何演算法和順序來混合使用各層紋理,但Wow的shader的使用仍受限於與固定管線的相容,使用ARBfp1.0標準,仍然是按標準紋理層次先後疊加.從使用的紋理可以看出,
layer0Texture,layer1Texture,..,,blendTexture,其中blendTexture的每一個分量都是一個Alpha圖,

地形塊為3層紋理時,第一層直接渲染不需要Alpha圖,第2,3層各需要一張Alpha圖,即共需2張Alpha圖,這2張Alpha圖儲存在BlendTexture的x,w分量上.
使用4層紋理時,使用BlendTexture的x/y/w作3張Alpha圖.
由於最多有4層地形紋理,BlendTexture的z就剩下來作為陰影圖使用,完成了整個地形塊的Shader.

posted on 2006-02-21 20:26 linghuye 閱讀(2332) 評論(20)  編輯 收藏 引用 所屬分類: 3D圖形學研究

評論# re: 對WoW Shader檔案的分析  回複  更多評論   

wow 的圖象引擎是什麼公司做的啊?

2006-03-03 15:49 | Ori # re: 對WoW Shader檔案的分析  回複  更多評論   

嗯,是他們自己開發的引擎.

2006-03-03 20:05 | 平民程式 # re: 對WoW Shader檔案的分析  回複  更多評論   

大哥,我BT了一個<鬼武者3 PC版>的遊戲,,,,

這遊戲的模型非常不錯,是日本鬼子做的,

主角還是金城武的模型呢!

我很想把裡面的模型搞出來做DEMO ,

看了一下裡面的檔案封裝得很簡陋,全是。LDT的

音樂檔案都可以真接用WinAMP播放,

有許多紋理檔案都可以用ACDsee直接開啟,

我想請大哥出馬,幫忙分析下日本鬼子模形檔案。

http://dl2.www2.btchina.net/download.php?s=b93561e4b5ada269&attachmentid=589803

這是BT種子,我就下的這個

2006-03-04 12:27 | Ori # re: 對WoW Shader檔案的分析  回複  更多評論   

to Ori
你在這裡找苦力來了?

2006-03-06 09:48 | kokk # re: 對WoW Shader檔案的分析  回複  更多評論   

分析模型,解放資源都是Linghuye老大的樂趣、愛好,何苦之有?

我也非常想做這些,雖然自已技術淺薄,但樂此不彼!

2006-03-06 10:15 | Ori # re: 對WoW Shader檔案的分析  回複  更多評論   

我得 wowmapview 編譯不通過,沒有SDL,不知道什麼地方可以下載,或者可以給我一個馬?謝謝 inversewalking@133sh.com
我是上次向你請教水平裁減的那個。
萬分感謝!

2006-03-09 18:13 | zeng # re: 對WoW Shader檔案的分析  回複  更多評論   

就是SDL_opengl.h沒有,

2006-03-09 18:14 | zeng # re: 對WoW Shader檔案的分析  回複  更多評論   

需要的SDL包可以在 http://www.libsdl.org/index.php 下載,要下載Source Code包.

wowmapview中的SDL/SDL.h,SDL/SDL_opengl.h,都在SDL包中的 include目錄中,
複製一個到wowmapview工程目錄下並改名為SDL目錄即可,需要的lib,dll可以用包中VisualC.zip裡的vc工程檔案編譯產生.

2006-03-09 19:11 | 平民程式 # re: 對WoW Shader檔案的分析  回複  更多評論   

如果針對不同的紋理層數設計不同的pass,那就是說WOW的地形確實是按chunk來渲染的?那DP調用會不會太多了?而且要不停的切換紋理……

2006-05-20 16:04 | ZERO # re: 對WoW Shader檔案的分析  回複  更多評論   

我的意思是,如果按紋理來渲染,就是說對於當前每種可見的紋理都渲染一次,每次渲染都提供一張該紋理對應的alpha圖(第一層不需要),當然這樣就要求運行時把每種紋理對應的mesh組織好。這樣渲染的優點是DP調用少,多少種紋理就多少次DP調用,而且不用頻繁切換紋理;缺點是多層紋理重疊的象素實際上被渲染了多次,而且大部分頂點也都要被處理多次……說的我自己都沒底氣了,到底密集細碎的DP調用能多大程度影響效率這個我也沒有經驗,回頭試一試。

WOW基本是沒有LOD的(最多可以有兩級好象),如果使用LOD的話,那麼最壞的情況下對於遠處的一個chunk可能一個DP調用只繪製了兩個三角形,想起來就相當不爽

2006-05-20 16:21 | ZERO # re: 對WoW Shader檔案的分析  回複  更多評論   

問下什麼是DP?
切換顯存中的壓縮紋理,我以為消耗不大,不用每次都下載.
重要的是按每種可見的順序是有要求的,不是簡單的紋理都渲染一次,達不到最終要渲染的效果,一個chunk的每層紋理疊加權重累加.
不知道按當前每種可見的紋理都渲染一次,且不按chunk來渲染,如何作到這點?
另外我以為實踐中應該避免的似乎是"而且大部分頂點也都要被處理多次".

2006-05-21 12:11 | 平民程式 # re: 對WoW Shader檔案的分析  回複  更多評論   

DP可能是DrawPramitive函數, D3D的

2006-05-22 09:11 | fannyfish # re: 對WoW Shader檔案的分析  回複  更多評論   

對,DP就是指d3d的DrawPrimitive(DrawIndexedPrimitive)。
按紋理不按chunk渲染,具體說就是對於每種紋理,都把用到該紋理的chunk的頂點都拼成一個大vertex buffer(或index buffer),用一張alpha圖(實際上只需要一個通道)來控制該層紋理在每個頂點位置的混合權重。這樣對每層紋理渲染一次就得到最終的結果了。

2006-05-22 15:43 | ZERO # re: 對WoW Shader檔案的分析  回複  更多評論   

這隻是我初步的考慮,還沒有實踐過。我會把兩種方案都試一下,哪種效率高應該很容易判斷。

2006-05-22 15:48 | ZERO # re: 對WoW Shader檔案的分析  回複  更多評論   

我認為按紋理渲染不是效率上的問題,而是我懷疑根本做不出wow中的地形紋理混合的效果.我所知道的渲染公式是 (A * (1-a1) + B * a1)) * (1-a2) + C * a2,不是A * a0 + B * a1 + C * a2這種簡單的權重混合.
我曾經想過按材質分類渲染,結論是不可行,只能儘可能減少紋理材質切換,但不能完全按材質分類渲染.
wow的alpha層資料是依附於每個chunk給出的,所以按chunk渲染是比較自然地,減少材質切換的最佳化建立在以chunk為渲染單位上,即歸類具有相同層數,使用相同shader,使用相似紋理的chunk.

不過,期待你的實踐.

// 順便說一下,不喜歡DP這樣的縮寫,我用OpenGL,比較喜歡VBO,PBO,RTT,:),just joking.

2006-05-22 23:28 | 平民程式 # re: 對WoW Shader檔案的分析  回複  更多評論   

我之前已經實現了。
方法是渲染每層細節紋理時都提供兩個texturestage給顯卡:stage0是alpha圖(也就是只用到該圖的alpha通道,如果用可程式化管線實際上最多可以把4層alpha塞到一個alpha圖裡),對於這一層,COLOR取CURRENT,ALPHA取TEXTURE;stage1是紋理本身,COLOR取TEXTURE,ALPHA取CURRENT。之後在幀緩衝裡把這一層紋理和前面的結果混合:SRCBLEND設為SRCALPHA,DESTBLEND設為INVSRCALPHA。也就是說對於每一層紋理都是:Res_n = Cur_n-1 * ( 1 - alpha_n ) + color_n * alpha_n 2006-05-23 14:04 | ZERO # re: 對WoW Shader檔案的分析  回複  更多評論   

不好意思我這裡說的都是d3d的東西,OGL沒有用過不過應該也有類似的概念吧

2006-05-23 14:05 | ZERO # re: 對WoW Shader檔案的分析  回複  更多評論   

我後來看了一下WOW地形渲染bls檔案,之前都是用HLSL,彙編形式的看的比較吃力,不過還是看明白了。

我認為你看的不夠仔細,alpha圖的x,y,z通道分別對應第1,2,3層紋理的alpha權重(如你所說,和疊加順序有關),w通道應該是陰影值(1為陰影,0為正常),而且能看出最終屏蔽了陰影中的高光,保留了70%的diffuse亮度。

2006-05-30 17:00 | ZERO # re: 對WoW Shader檔案的分析  回複  更多評論   

To 平民程式,
我和你的理解是完全一致的,也實現了類似的室外地形。這裡有一點點細微的差別,就是wow也許是把Blend Factor儲存在了貼圖中,然後在PS裡面Sampler,而我是直接增加了一個Vertex stream, 儲存float4 的alpha值,使用TEXCOORD1的語意,讓頂點渲染引擎直接進行插值。

樓主我很想和你交個朋友,我人在上海。

2007-07-09 18:23 | Jackwolf # re: 對WoW Shader檔案的分析  回複  更多評論   

lol can't read nothing

all is chinese

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.