2011/04/03

UDK三月份新增功能

最近CryEngine動作頻頻, 向來搞金字塔頂端的CryEngine不知會不會在推出免費版後市場上後來居上; 而在市場上耕耘許久, 相對平民化的Unreal Engine在畫質與地形處理上是否能趕上CryEngine呢? 拭目以待~

---以下為翻譯---
Epic公司最近展示全新的Unreal Engine 3 即時展示作品---Samaritan. 這套利用了DirectX 11 高階的算圖功能, NVIDIA APEX物理運算科技等等的新增功能. 這些新的功能你也可以在三月版的UDK裡面找到. 你可以到 Wired, TIME與IGN等網站看到相關報導與影片.
有了影像為基礎的反射效果, 在倒影裡面可以清楚看到人行道反射的字

清楚的陰影效果外加帶有細節的反射

重要的DirectX 功能包含了
  • Tessellation 與 displacement;
  • Geometry shaders
  • Multisampled textures
  • Shader Model 5
不同程度的多邊形細分效果(Tessellation)

高階的算圖功能包含了
  • 用貼圖當做反射來源(Image-based reflections) 能夠套用到任何模型表面, 模擬出逼近的場景反射效果, 還可以達到可變的光澤度, 異向的HDR高光(anisotropic HDR highlights) 與反鋸齒.
  • 次表面散射Subsurface scattering (SSS) 能模擬出光線在半透光的模型內部的散射效果, 讓角色的皮膚表現更加栩栩如生.
  • 反鋸齒遮罩的材質會對遮罩的邊界進行超級採樣, 且會對材質進行alpha-test, 讓角色整體效果比過去更加的寫實.
  • 支援MSAA(Multisample anti-aliasing)的延遲渲染功能(Deferred rendering)
  • 接近電影品質的散景效果(Bokeh) , 提供美術人員能夠調控的散景效果
  • 高品質的動態陰影 場景中的多種類型燈光都支援, 例如點光源或是其他類型的燈光來源
  • NVIDIA的 APEX科技這次也終於完全整合到UDK裡面了
左圖: 未開啟bEnableMaskedAntialiasing; 右圖:開啟bEnableMaskedAntialiasing

場景綠色部分使用到延遲渲染功能(Deferred rendering)

儲存在G-buffer的不同材質屬性

材質編輯器新增了SSS的結點

均向的反射效果

異向性(anisotropic HDR)的反射效果

SSS表面散射表現皮膚材質


而且 Epic這次還提高了免權利金的機會, 在新的授權條約, 遊戲開發者不必支付任何的權利金, 直到該遊戲的總收益超過$50,000美金 .還有, 遊戲開發者可拿75%的收益, 而Epic得到25%.你可以點這裡看相關資訊.

三月版的新增功能介紹
  • 支援DirectX 11
  • 自適應的散景效果(Bokeh DOF)
  • 你可以自行選擇散景的形狀 用在鏡頭耀斑(lens flare)上面
  • 紅色區域代表完整品質 綠色區域代表部分的品質 (效能會有四倍快)
  • 動態陰影與影像為基礎的反射(HDRI)
算圖
可以縮放特效(例如散景與光暈效果) 添加了大小顯示
Post Process Effect -> Scale Effects with View Size

新增了能夠在流體表面使用重複的法線貼圖( tiled normals)


Unreal Landscape 這是全新的地形系統

Landscape地型編輯的工具列

建議的場景地圖尺寸, 這次Unreal Engine 3的Landscape功能主要由Epic韓國部門開發, 主要就是要補足MMO需要大型地圖的效能等問題.

新的地型材質混合模式

支援像 ZBrush那樣的繪圖功能
支援繪圖板的靈敏度
在繪製圖層時 多了一個自動更新weightmap mipmaps的選項
在Noise tool裡面多了Perlin Noise的類型
支援溫度與水對地形腐蝕的效果

支援NVIDIA APEX:NVIDIA APEX科技讓用戶能夠很快速地產生物理模擬的布料飄動 或是場景破壞的效果 想要知道更多有關於APEX的資訊 請到以下網址

Unreal Editor編輯器相關
在編輯器裡面可以啟用DX11 renderer 的功能
View ->; Preferences ->; Enable DirectX 11 Rendering

透過新的 show flag 你可以查看哪一個景深(DOF)圖層有對到焦
  • 你可以透過Unreal Matinee來開關影像反射
  • 在工具列裡面你可以切換貼圖的棋盤格背景
  • 以FBX格式導入morph targets時 會使用多核心計算 這樣可以加速導入時間
  • upk package裡面有遺失的物件時 會顯示更好的錯誤回報
  • Matinee現在支援可視度的軌道切換( jumping on the visibility interp track)

[相關文章]

2011/04/02

thinkingParticles R4: volumeBreaker程序性碎裂


近花了點時間把很久以前就想學的thinkingParticles弄懂了它的使用流程. 用這個東西可以實現程序性的碎裂效果: 也就是一旦節點都串好了以後 只要替換模型就可以隨時產生新的寫實碎裂效果了. 相當的理想.

這裡翻譯整理出主要涉及的操作子(operator)的重要參數:
  1. ShapeCollision 用來計算實體碰撞
  2. VolumeBreak用來把模型切碎
  3. VolumeActivate Operator用來控制模型碎裂的動態過程

---以下為翻譯---

//SC Operator//
SC是新的 ShapeCollision操作子(Operator), 這是原廠要來取代舊的ShapeCollision operator. 這個新的操作子能夠提供更好的解算功能, 用的是最新的演算法來計算剛體動態, 提供更快速, 更精確的結果, 跟舊的相比會更有效率, 效能也比較好! 但是為了能向下相容, 舊的 ShapeCollision還是保留在那邊, 算出來的結果跟以前一樣.

我們建議你用新的SC操作子, 不要用舊的ShapeCollision!

用新的SC有以下好處:
  • 支援多點Joint類型
  • 加強對多核心計算的支援
  • 再也不需要指定接觸的類型了(contact type)
  • 加快了整體速度
  • 大大的減少了快速的抖動問題
  • 添加了Voxel debug模式
SC操作子的威力到底如何呢? 我們可以在暢銷的電影2012裡面知道它的成功, 這在電影裡面的破壞特效暫了重要角色!

雖然你可以在 DynamicSet裡面添加多個 Shape Collision operators, 建議你盡量用越少越好, 因為這會需要大量的記憶體來計算.

Floor Node - (Node) 地面節點. 這個節點可以輸入地面的資料做為碰撞之用, 地面物件會自動設定為不可移動, 且具有無限大的質量.

Collision Iteration 碰撞迭代計算. 這個參數可以用來計算物件的真實碰撞點, 這個數值越小, 模擬的速度會越快, 但是結果會不精確. 大部分的狀況建議你設定成5-10, 如果你希望結果精確一點那可以設定成30.

Contact Iteration 接觸的迭代計算. 用來計算兩個物件接觸的細分, 產生的接觸狀況, 面對面(face to face)在物理引擎裡面是最複雜的計算狀況, 增加這個數值會產生更寫實的模擬結果.

Deactivation Time 取消作用的時間. 這個參數用來控制粒子到底是真的在移動還是只是在胡亂的抖動, 如果粒子落在這個時間區間裡面, 則會參考它的速度或是旋轉數值, TP4會據此來決定是否要讓粒子進入休眠或是凍結狀態. 這個參數越小粒子就凍結的越快, 這個參數會跟以下兩個參數協同作用一起影響粒子的動態.

Velocity Threshold 速度的閾值. 這個參數定義最小速度, 讓粒子進入凍結狀態.

Rotation Threshold旋轉的閾值. 這個參數定義最小旋轉數值, 讓粒子進入凍結狀態.

//VolumeBreak Operator//
VolumeBreak操作子是一個會計算實體模型碎裂的工具. 這個操作子是由 volumeBreaker為基礎, 快速地創造出模型的碎片.這些碎片是真的根據模型體積計算出來的.有了 volumeBreaker , cebas公司帶給您好萊屋特效等級的破壞工具, 而VolumeBreaker的開發有徵詢過顧問以及特效專家們 , 這些專家參與的都是數百萬等級的大電影的人.

VolumeBreak幾乎可以套用在任何類型的模型, 包括那種很懶惰的人做出來的模型 (沒有完全閉合的模型). VolumeBreaker 會試著補償模型本身的錯誤, 例如沒有焊接的點, 或是開啟的邊(open edges). 這個操作子所計算出來的碎片能夠被thinkingParticles其它的操作子所取用.

Activate 啟動碎裂. 定義碎裂的百分比, 100%代表完全碎裂 ; 0%代表完全不碎. 通常會對這個參數設定動畫 當然你也可以用動態的方式控制

Raster
細分的大小 這會計算每個碎片的最小距離 因此可以控制碎片的大小 請注意如果把這個參數設定太小或產生大量模型碎片 會耗費許多計算時間

//VolumeActivate Operator//
這個操作子是thinkingParticles的新血, 把TP的整體功能強化! 這是第一次你可以在TP裡面進行跨DynamicSets的, 把資料由一個操作子餵到另外一個操作子的功能. 這個特殊的功能, VolumeActivate operator可以取代並且蓋過 VolumeBreak operator的activation data. 如此, 你就可以用TP做出多點衝擊(多個撞擊點)的效果了!

簡單的說, 你可以控制 VolumeBreak operator裡面的物件何時碎裂, 在哪個地方碎裂, 以及要怎樣碎裂. 請注意, 這個VolumeActivate Operator必須要搭配VolumeBreak operator才能使用, 而且是被用來告訴VolumeBreak operator他哪邊要進行碎裂(透過Position input); 碎裂的範圍有多遠(透過Initial Length控制) ;而這個範圍擴張的速度有多快 (由Spreading Second控制); 甚至也能決定發生的位置類型(World, Object, Normalized).

Position - 起始長度. 設定volumeBreak碎裂效果的起始長度, 這個長度是以 position 參數為中心做為起始, 告訴VolumeBreak內部碎裂的起始範圍, 來決定啟動 VB fragments的範圍有多廣.
Spreading Length - 擴張長度. 定義碎裂由上述參數起始, 最大可延伸到多大的碎裂範圍.

Spreading Second - 擴張秒數. 這設定要釋放所有的碎片要花多久的時間 , 這個參數可以用來模擬出震波效果.

----翻譯完畢----

[推薦文章]

2011/03/18

Building demolition建築物爆破流程


整理一下建築物爆破(Building demolition)的製作心得. 就像所有的視覺特效一樣, 想像很容易但實際製作上卻會遇到很多愈想不到的問題, 這邊把建模->拆UV->碎模型->碎裂的物理模擬->添加煙霧->算圖 這一整個流程的細節重點做簡單的說明.

首先是建模. 因為之後要做實體碎裂, 不是只有單純的算圖表現而已, 所以模型要很嚴格的要求1.不能有重疊面 2.所有相接的vertex要焊接起來 3.不可以有開口的面 這是最基本的要求. 如果模型做得太細緻的話之後在做切割的時候會有問題.

拆UV. 因為建築物本身是經過好幾的布林操作合併而成的, 所以每個原件再合併以前就要先拆好UV, 如果是合併後再拆的話會變得很麻煩. 因為Rayfire或是VolumeBreaker在切碎的時候, 會自動在截斷面給予新的material ID, 所以那部份的UV就不必擔心了.

材質, 因為建築本身會分好幾個區塊, 所以要分好Material ID. 材質會建議用程序性材質會比較好掌控. max 2012的Substance Texture會是不錯的選擇.


用Rayfire的Voronoi的切割算法, 結果如箭頭所示建築物內部(凹面)出現計算錯誤.

利用Cebas VolumeBreaker切割出來的效果. 可以用Pivot為中心做不同密度的切割效果. "幾乎"沒有計算錯誤. 但是如果你分割的碎片過細的話 還是有可能產生具有重疊面, 破面的模型. 所以要適度的調整參數.

如果像是雕像這種的凸面模型, 切割就容易得多了.

碎裂, 如果你是一簡單的Box要切碎的話, 其實很單純. 用Rayfire, SplitItUP, Voroni maxscript這些都可以做得很好. 但是如建築物模型這種有凹面(concave)的幾合體, 狀況就變得很複雜. 因為碎裂涉及到切割, 還有把切割截面補洞(Caphole). 這個動作往往會計算錯誤.

VolumeBreaker的參數非常不直覺. 建議參考上面的數值調整到適合您的大小.

物理模擬使用的是Rayfire的PhysX即時物理運算. 基本上是先讓所有的碎片inactivate (不計算物理), 等到移動的box碰觸到碎片的時候才讓碎片計算物理模擬, 因此會有由上往下的碎裂效果. 細節上會把一大片的碎片先做成group, Rayfire有功能可以讓group內的碎片先黏在一起, 再根據衝撞的強度來讓這些碎片再分離開. 參數設定如下:







碎裂的物理動態好了以後, 接下來就是要處理煙塵的部分了. 我們要用碎片當做煙霧產生的來源. 所以用Particle Flow的speed test, 在選取內的碎片當作Position Object, 如此只有當碎片達到某個速度的時候, 才會產生煙霧所要使用的粒子.


PF也可以用來產生更細小的碎片. 所以沒有必要把所有的碎片利用Rayfire來產生, 畢竟用物理算的東西需要很高的效能與精確性. 極小的碎片用PF反而更有效率.

以PF做為來源

以Cylinder做為來源

接下來, 進入到Phoenix的階段, 請參考之前的教學設定. 主要差別是場景中有兩個PHXSource, 一個是用PF當作來源, 另外一個是圓柱擺放在建築物底部, 做為建築物垮下地面揚起的煙塵的來源.

Displacement是增加細節的好方法

Truc的Sampler Type可以表現極高的細節, 效果很寫實

Phoenix FD製作細節表現的煙有兩種方式: 一種是用displacement來增加細節; 另外一種是把Sampler Type由spherical改為Truc, 同時把cell size調到很低. 後者可以做出極寫實的細節但是會耗費大量cache. 所以這裡我們用的是前者的方法.

增加了煙霧的倒塌效果也增加了寫實度.




以上是爆破的流程, 打好基礎後接下來就是要製作更細緻的效果了 ; )

[相關教學]

2011/03/17

Phoenix FD Tutorial: Large Scale Smoke



Tutorial results
Large scale smoke with Phoenix FD 03 (1920X1080 HD video)


Large scale smoke with Phoenix FD 04 (1920X1080 HD video)

This continue my previous two tutorial: explosion, nuke cloud. Please read those tutorials first if you are not familiar Phoenix FD.