3D地形相關技術 (轉)
3D地形相關技術 (轉)[@more@]* 地形紋理
大概分兩種型別:rts型和fps型
**第一種:rts型。
和二維做法差不多,把地圖分為很多Block,每塊Block可能又由m*n個Tile組成。每塊Block使用一張紋理。適合rts等俯視型別遊戲,《魔獸3》、《魔域帝國》用到。
優點:影像精細,適合表現細緻的場景。
缺點:渲染時紋理切換頻繁。沒法做大面積LOD(Level of Detail),LOD被限制在Block內。由於Block邊緣頂點紋理座標問題,導致Block間沒法共用頂點。
地貌間過渡處理: 如草地過渡到土地,簡單的方法是讓美術做好所有可能用到的不同地貌過渡的圖片,計算拼接。複雜點的做法是程式計算紋理融合,在渲染是用多層紋理來解決過渡問題,《Empire Earth》,《C&C將軍》使用類似做法。
特效處理:
水深效果:使用頂點色形成水下體積霧效果。
**第二種:fps型。
整個地形用一張基本紋理(如:1024*1024)鋪滿,這張紋理是由程式計算生成(Terrain Texture Generation)。適合室外大場景遊戲,如室外fps,飛行模擬。《Battle Field 1942》用到。
優點:任意的LOD範圍。無紋理切換問題。可以把計算好的地形LightMap融入基本紋理,一次渲染。
缺點:影像精度不夠,解決方法是在渲染時上面加一層細節貼圖,如:BumpMap,《Ground Control》用到。
*下面是一些常見的問題
**紋理生成計算方法
基本紋理每點畫素由所處的海拔高度和坡度計算而得。可以理解為有一張橫座標為高度,縱座標為坡度的紋理表,每點畫素查表而來。資料見後。
**地形LightMap
明暗(Shading):首先計算每個頂點的平均法向量,注意是共點平面的平均法向量,而不是某個面的法向量,然後用你的光照模型計算公式計算該點光照強度,如:I = cos*Isun + ambient。頂點間光照用插值計算,如法向插值phong演算法。
陰影(Shadow):沒看到太好的演算法,一般光線求交演算法速度太慢,目前我的想法是用
作ShadowVolume,渲染到一張紋理,然後儲存。如果你有好的方法請告訴我。
**物體陰影
對靜態物體,如房屋可事先渲染好融入Terrain LightMap。
對動態物體,可用Projection Shadow,簡單說就是從光源方向把物體影子渲染到一張紋理,然後透過使用紋理座標生成(TexCoordGen)和修改相應Texture Coordinates Matrix,把這張圖貼到地面渲染。
**地形渲染
用Indexed方式按塊渲染,注意頂點提交順序,增加GPU Vertex Cache命中率。如果有LOD,因為每次頂點資料是變化的,d3d實現時用Dynamic Vertex Buffer,把頂點放入AGP。
**LOD(Level of Detail)
ROAM演算法不適合現代硬體加速,不要用。
可以看一下GeomMipMap LOD和T-StrLOD。網址見後。
**射線與地形求交演算法
把射線垂直投影到2d地面網格,順著射線方向檢測經過的每個格子,如果光線在格子裡面的最低處大於格子四個頂點的最高處,則不可能有交點。
資料:
T-Strip LOD: ~eszoka/tstriplod/tstrip.htm
GeoMipMap LOD:
TerrainTextureGenerator(Full Code):?page=freetools/terrain.php
my e: skull@hardcore3d
大概分兩種型別:rts型和fps型
**第一種:rts型。
和二維做法差不多,把地圖分為很多Block,每塊Block可能又由m*n個Tile組成。每塊Block使用一張紋理。適合rts等俯視型別遊戲,《魔獸3》、《魔域帝國》用到。
優點:影像精細,適合表現細緻的場景。
缺點:渲染時紋理切換頻繁。沒法做大面積LOD(Level of Detail),LOD被限制在Block內。由於Block邊緣頂點紋理座標問題,導致Block間沒法共用頂點。
地貌間過渡處理: 如草地過渡到土地,簡單的方法是讓美術做好所有可能用到的不同地貌過渡的圖片,計算拼接。複雜點的做法是程式計算紋理融合,在渲染是用多層紋理來解決過渡問題,《Empire Earth》,《C&C將軍》使用類似做法。
特效處理:
水深效果:使用頂點色形成水下體積霧效果。
**第二種:fps型。
整個地形用一張基本紋理(如:1024*1024)鋪滿,這張紋理是由程式計算生成(Terrain Texture Generation)。適合室外大場景遊戲,如室外fps,飛行模擬。《Battle Field 1942》用到。
優點:任意的LOD範圍。無紋理切換問題。可以把計算好的地形LightMap融入基本紋理,一次渲染。
缺點:影像精度不夠,解決方法是在渲染時上面加一層細節貼圖,如:BumpMap,《Ground Control》用到。
*下面是一些常見的問題
**紋理生成計算方法
基本紋理每點畫素由所處的海拔高度和坡度計算而得。可以理解為有一張橫座標為高度,縱座標為坡度的紋理表,每點畫素查表而來。資料見後。
**地形LightMap
明暗(Shading):首先計算每個頂點的平均法向量,注意是共點平面的平均法向量,而不是某個面的法向量,然後用你的光照模型計算公式計算該點光照強度,如:I = cos
陰影(Shadow):沒看到太好的演算法,一般光線求交演算法速度太慢,目前我的想法是用
作ShadowVolume,渲染到一張紋理,然後儲存。如果你有好的方法請告訴我。
**物體陰影
對靜態物體,如房屋可事先渲染好融入Terrain LightMap。
對動態物體,可用Projection Shadow,簡單說就是從光源方向把物體影子渲染到一張紋理,然後透過使用紋理座標生成(TexCoordGen)和修改相應Texture Coordinates Matrix,把這張圖貼到地面渲染。
**地形渲染
用Indexed方式按塊渲染,注意頂點提交順序,增加GPU Vertex Cache命中率。如果有LOD,因為每次頂點資料是變化的,d3d實現時用Dynamic Vertex Buffer,把頂點放入AGP。
**LOD(Level of Detail)
ROAM演算法不適合現代硬體加速,不要用。
可以看一下GeomMipMap LOD和T-StrLOD。網址見後。
**射線與地形求交演算法
把射線垂直投影到2d地面網格,順著射線方向檢測經過的每個格子,如果光線在格子裡面的最低處大於格子四個頂點的最高處,則不可能有交點。
資料:
T-Strip LOD: ~eszoka/tstriplod/tstrip.htm
GeoMipMap LOD:
TerrainTextureGenerator(Full Code):?page=freetools/terrain.php
my e: skull@hardcore3d
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-977629/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JavaScript全形和半形相互轉換JavaScript
- 異地容災系統技術概述(轉載)
- 大牛帶你玩轉 CSS3 3D 技術CSSS33D
- XML與其相關技術(1) (轉)XML
- Java 相關的編譯技術(轉)Java編譯
- 高精地圖技術專欄 | 基於空間連續性的異常3D點雲修復技術地圖3D
- 病毒的編制關鍵技術(1) (轉)
- 病毒的編制關鍵技術(2) (轉)
- 關注******技術
- 關於IT,關於技術
- 關於[技術挑戰-2]轉載自黑哥
- XML入門指南(19)XML相關技術(轉)XML
- 3D人臉技術漫遊指南3D
- 3D列印技術之切片引擎(3)3D
- 3D列印技術之切片引擎(2)3D
- (轉)BDC技術
- VDSL技術(轉)
- 深圳3D地圖3D地圖
- 中科三方IPv6地址轉換技術怎麼樣?採用了哪種技術手段?
- (轉)多核處理器的九大關鍵技術
- 從技術到管理:思維轉變是關鍵
- 字元畫軟體的四個關鍵技術 (轉)字元
- 關於技術方案
- 關於技術文件
- Weex技術相關
- QTP關鍵技術QT
- 【高德地圖API】匯潤做愛地圖技術大揭祕地圖API
- Java相關技術點及技術內容Java
- 內碼轉換技術 (轉)
- 轉 http協議中有關http頭的技術資料-HTTP協議
- 轉:Java同步技術Java
- JDBC介面技術(轉)JDBC
- 正確地使用加密與認證技術加密
- 3D地圖折射功能3D地圖
- 技術教程網 -- 實用技術參考 (轉)
- 交換技術:NGN核心軟交換技術分析(轉)
- 微信小程式技術點 -- 3D輪播圖微信小程式3D
- 軟體相關技術及其在國內的應用 (轉)