Category Archives: Tech

hqdefault3

Unreal 4 + Oculus Rift 筆記

撞正Unreal 4 Free咗又接到個Oculus job 做,
就好快手咁玩咗一陣。
初步感覺Crash嘅情況係有但係唔多,
除咗load新project會有啲耐之外performance都算好好,
document好簡陋但有unreal answer補夠。
新engine多咗fancy嘢,又唔洗錢,
明顯係Unity做得太好,佢地要急起直追啦XD

Unreal / Oculus Notes

  • Unreal本身就support oculus,唔洗裝plugin,就咁run個app fullscreen就會自動開stereo mode
  • 我部mbp一開stereo就好鬼慢,暫時未知個bottleneck喺邊。不過做Oculus app就一定要搞好performance
  • Quality Settings: https://answers.unrealengine.com/questions/23023/trouble-configuring-game-settings.html
    P.S. sg.ResolutionQuality好似影響唔到Oculus
  • Disable smooth frame rate: Project Settings -> Engine -> General Settings -> Framerate -> turn off smooth frame rate. 啲人話呢個唔會影響framerate但我見會減咗少少,而且frame rate好低嘅時候唔需要control frame rate
  • Ambient Sound: 記住個聲音檔format要係wav,仲一定要係Mono,否則個engine會做唔到因應player位置嘅立體聲
  • 自動fullscreen: 建立 DefaultGameUserSettings.ini 放入去 project_folder/Config 入面:
    [/Script/Engine.GameUserSettings]
    bUseVSync=False
    ResolutionSizeX=1920
    ResolutionSizeY=1080
    LastUserConfirmedResolutionSizeX=1920
    LastUserConfirmedResolutionSizeY=1080
    WindowPosX=-1
    WindowPosY=-1
    bUseDesktopResolutionForFullscreen=False
    FullscreenMode=0
    LastConfirmedFullscreenMode=2
    Version=5

    P.S. bUseDesktopResolutionForFullscreen唔肯定係唔係False

  • Trick: 個scene冇光源,加ambient cubmap,用有illumination 嘅material做燈光效果,物件加reflection,就可以冇lighting 嘅情況下做到好似有lighting咁,Performace超高。P.S. Unreal 嘅reflection做得出奇地快

Post Process Volume

喺Modes入面search “Post Process Volume” 加入去個scene度,喺Details做settings(將個feature嘅intensity set做0就可以熄咗佢):

  • Post Process Volume – Unbound: turn on令佢影響整個scene,而唔理佢個brush settings
  • Bloom: 光暈。呢個效果出奇地重,較細啲會好啲,但係冇咗又差好遠。就算個scene冇光源,佢對illumination都有效
  • Ambient Cubmap: Unreal冇 “Ambient Light”,所以要用cubmap。Unreal 只係Support 32bits/Channel, 8.8.8.8 ARGB 32 bpp, unsigned。如果做咗個cubmap import唔到可能係因為未set 32 bpp https://docs.unrealengine.com/latest/INT/Engine/Content/Types/Textures/Cubemaps/CreatingCubemaps/index.html
  • Lens Flares: 都係熄咗佢好啲⋯⋯
  • Global Illumination: 可以一次過調整所有illumination。注意有illumination嘅物件唔會令周圍嘅嘢光咗,所以要加cubmap
  • Motion Blur: 喺Oculus Rift見到Motion Blur仲衰過見唔到,一定要熄咗佢

Animation Transition Blending

唔知點解網上面search到嘅blending都好鬼複雜,如果你只係想做個好簡單嘅transition blending,由一個animation blend去另一個animation,首先create個animation blueprint,係入面create個state machine:
https://docs.unrealengine.com/latest/INT/Engine/Animation/StateMachines/CreatingStateMachines/index.html

然後喺個transition rules度set高返 Blend Settings -> Transition Crossfade Sharing -> Duration 就OK了。

Matinee

識用真係幾好用,雖然又多bug又多唔方便嘢XD

首先我解釋下點用:

  • create一個matinee actor,然後select佢,喺details度click “Open Matinee” 就會開咗個Matinee Editor。
  • 喺個scene度㨂咗個actor之後係Matinee Editor -> Tracks -> 左邊個section度add new empty group就會出咗嗰個actor嘅group。
  • 再對個group right click -> Add New Movement Track就可以animation個action走黎走去
  • 㨂咗track同時間之後按enter開keyframe
  • 返去個scene度set position / rotation 等等
  • 見到有條線track住點郁就成功啦
  • 返去matinee editor可以調整個curve

不過好多唔方便嘢大家要記得:

  • 如果喺matinee editor select個keyframe就會select返相應嘅actor,但係一deselect咗個actor就會deselect個keyframe,再郁個actor都唔會edit個keyframe。你要返去matinee editor select返個keyframe再返黎個scene度改。
  • 有個UI bug係click details panel會click到個scene 啲嘢,令你deselect個actor -> deselect個keyframe :@ 解決方法係留意下個cursor over detail panel嘅時候有冇轉到cursor icon,如果仲係十字就select另一個application(Cmd+tab for Mac, 去另一個app例如Chrome)再返去Unreal。
  • 又有個UI bug係right click個group冇menu出,呢個時候right click下curve panel至有menu出,然後right click個group就有返menu
  • 記住唔好開住Matinee Editor,而又唔係改緊keyframe個陣改其他actor,因為一熄咗Matinee Editor就會冇曬。
  • Matinee嘅animation track係冇blending 嘅,所以我用咗個好迂迴嘅方法做⋯⋯有人知道好啲嘅方法請話我知⋯⋯首先做個animation blueprint (custom_animation_blueprint) -> state machine,個transition rule用public variable determine (anim_var)。喺Matinee event track set 個keyframe,然後去Level blueprint -> add matinee controller(去level blueprint之前喺個scene要select緊個matinee actor),個controller會有之前係matinee editor度加嘅event。再跟住令個event改個public variable: actor ref -> get anim instance -> cast to custom_animation_blueprint -> set  anim_var
  • 如果你睇Matinee 嘅tutorial會見到佢好容易就做都一個cut scene,因為佢加條track就會自動多咗個camera然後好易就郁到佢。不過如果做Oculus,嗰個camera就唔會跟個oculus郁。可能你會想加個script入去個camera度就得,或者唔同camera track,而係直接郁個player actor。不過我又唔知點解rotate個actor向下望嗰陣個cam又唔跟住rotate⋯⋯
Playmaker_DuelingBlades

PlayMaker 初試

PlayMaker係一個Unity Plugin for Finite State Machine (FSM),
可以drag & drop咁edit個state diagram。
如果你試過用code寫有關state ge嘢你就知道佢有幾好啦XD
其實買咗佢好耐一直冇時間試,
而家終於可以試返夠本:P

 Asset Store – Playmaker
Playmaker_DuelingBlades
DreamfallThumb

基本功能

  • 建造一個State
  • 喺個state度加transition(每一個transition對應一個event),定義個transition會去邊個state(drag個transition就會拉到條箭咀出黎)
  • 喺個state度加action,一到呢個state佢就會做曬成個state嘅action。本身有好多action可以㨂,或者自己做custom action
  • Action可以控制send邊個event同幾時send,如果個state有相應嘅transition,個FSM就會switch去個transition所指嘅state
  • State可以接收global transition,無論佢本身喺邊個state一收到global event都會跳去相應嘅state
  • 有variable可以用。當喺action填資料嗰陣可以直接填上值或者variable。可以令variable顯示喺inspector度
  • 一個FSM只有一個current state(呢個絕對係feature唔係limitation!)。當個editor play緊個FSM dialog會highlight current state/行過乜嘢state。可以喺個state度set break point做debug,亦可以即時睇到每個variable嘅值(睇到值呢個feature應該歸功於unity XD)

用途

  • Organic AI - 好多時生物嘅AI都係一個FSM:patrol,follow,fire,die⋯
  • Trigger - 例如一度門,有”打開”同”關閉”兩個state
  • Stated Control - 如果做一尐複雜嘅control,例如touch dragging gesture,可能會需要考慮”touch down”之前同之後,”touch up”之前同之後做唔同嘢,有2至4個state
  • Stated UI – 例如Button會有Enable/Disable兩個state,或者可能會有唔同state show唔同function

如果用code做FSM,
好可能就係一個function implement一個state,
未必做到尐同state有關嘅功能,
例如返到上一個state,檢查執行緊乜嘢state,
離開state個陣做某尐action,從外部接收event等等。
更改transition可能要search返個function喺邊,
然後夾硬改個function call@@
改code個陣又要好記得個workflow係點,
或者要自己做好個doc記低佢。

PlayMaker嘅好處就係你做個個machine本身就係一個diagram,
做FSM有關嘅改動都好方便。
佢亦要求每一個state/event都要命名,
其他人一睇唔知detail都知道個大概。
就算係自己改返自己嘢,
見到個diagram都會remind返好多嘢。

缺點

1. 每一個action都係一個script
雖然可以做custom action但係比較麻煩,
就算係做加減乘除都要用action做,
所以如果做大量procedural嘢就會好煩,
一個一個action係咁加會耐過打幾行code好多。
不過可以用send event嘅方法call其他MonoBehavior,
PlayMaker FSM就做返FSM相關嘢然後call 其他script procedure。
如果佢有個好方便嘅UI link去相關嘅script就正囉~

2. 重用性低
例如有一個state有好多action,
想做另一個有同樣action嘅state只可以copy and paste⋯
(或者save template再paste返出黎但係都係冇分別 lol)
除非你做咗個custom action出黎比唔同嘅state用。

3. 唔支援array
本身係冇任何同array有關嘅action/variable type,
更加唔洗講looping。
就算做咗同array有關嘅custom action,
looping 好可能都係由兩個state互相指住黎做。
暫時未諗到有咩好方法可以處理,
大不了所有array有關嘅嘢交返曬比script做

4. Edit mode有bug
呢個可以話係最大嘅缺點~_~
有時undo嘢會有bug(undo的確係唔易做嘅事⋯),
好多時undo完要reload個editor先見到佢係undo咗,
有時改完action sequence之後field value會錯@@
總之做完嘢save咗先,有咩事就reload個scene :P
不過當你做好個diagram去run就未見到有bug,
都係edit個陣尐細bug無傷大雅

其實頭兩個缺點都可以用custom action解決,
而且做custom action都幾好玩㗎XD
大家有興趣可以試下。

初試後感

第一次試我故意將所有都用PlayMaker做,
成個UI Logic同Control都係,
結果當然好悲劇XD

Screen Shot 2014-06-08 at 10.43.14 am

因為每一個button都起碼要做一個state,
咁十幾個button就有十幾個state,
再加幾個state去check邊粒button比人禁,
就變咗一個大到唔想睇嘅diagram XD。

亦由於state嘅重用性低,
加一個case又起碼要加一個event一個transition同一個stage,
為咗方便又要加一個variable(下面再詳細講),
所以如果想加一個同之前類似嘅button都要搞一輪zzz

當中有個FSM設計咗幾個global event,
諗住好似function call咁,call一個event做一樣嘢,
但係每次call都要用幾個action去set幾個parameter,
再用一個action去call,
可能仲要寫多個stage去等個FSM return

結論當然係應該將同FSM冇乜關係嘅嘢抽返比script去做XD
同埋個diagram唔應該做曬個UI hierarchy,
簡單尐講就係唔好一個button一個state,
唔好搞到個UI越多個diagram越大。

啱啱上手個陣會有少少唔知尐state放邊度嘅感覺,
(我嘅意思係放喺diagram邊度,純綷係用家視覺問題XD)
不過用咗一陣之後就OK,
一排stage最好就打直排唔好打橫排~

以下係尐值得注意嘅嘢:

  • Annoying Active Browser
    我唔知Windows版係咪都係咁,我用Mac版開咗PlayMaker Editor之後佢個自動開Action Browser,然後用Cmd+Tab去另一個panel個陣佢會loop住select PlayMaker Editor <-> Action Browser。解決方法就係將Action Browser merge去PlayMaker Editor,成為同一個panel
  • Event “Forwarding”
    “Get Mouse Button Down”  Action係會等Mouse Button Down然後sent一個event 。如果一個state用”Get Mouse Button Down” Action去下一個state,而下一個又有”Get Mouse Button Down”,咁下一個state又會因為咁去再下一個state。因為佢用咗Unity嘅”Input.GetMouseButtonUp”,同一個message loop都會收到同一個result。
    仲有呢個唔知係唔係bug:如果喺state A收到event 1會去state B,然後state B收到event 1會去另一個state,就算個FSM只係收到一個event 1都會連續跳state,更可能因為咁出現dead loop。所以某尐位我會delay 0.1秒先send event。呢個問題有待查證。
  • Variable for GameObject value
    就算你想reference嘅GameObject係喺個scene度,我建議你開個variable裝住佢而唔係直接set落個action度,一來要改動嘅時候只要改個variable就改曬全部action,二來可以display in inspector令你見到曬呢個FSM用緊邊尐GameObject
  • FSM callback
    如果FSM A等FSM B做完嘢先去下一個state,但係又唔想FSM B直接reference FSM A(Modular Programming!!),可以喺FSM B開一個GameObject variable,係FSM B做嘢之前set個variable做FSM A,再用”Send Event By Name” action 通知個variable ge FSM。不過咁做令呢個callback只可以有一個receiver(PlayMaker冇支援array⋯)。或者call script再call其他FSM。
  • Save FSM as a Prefab
    如果你唔將個FSM GameObject save做Prefab,然後你個project上咗version control同人地夾黎做,咁個scene file其他嘢conflict咗就會連累埋個FSM。但係save做prefab之後prefab嘅variable對scene GameObject嘅linkage會冇曬,然後又好可能會出尐不必要嘅error(尤其是”Call Method” action)
    解決方法係所有action都唔好直接reference GameObject,而係用variable
    至於”Call Method”我就直接comment了CallMethod.cs第102行(errorString += “Behaviour is invalid!\n”;)
    記得唔好改prefab FSM然後revert to prefab,如果唔係連scene嘅FSM variable都冇曬reference。應該係改scene FSM然後apply to prefab

改良提案

  • Script linkage
    如果可以加粒掣係同script有關嘅action度,一click就彈去個句function就好囉,不過unity plugin黎講應該做唔到。
    或者做一個script execution action然後可以加幾句script。
    Variable嘅class應該要implement operator,唔洗下下都會dot佢個value出黎
    現在:variable.Value = value;
    建議:variable = value;
  • Every frame
    好多原有action都有”Every Frame”呢個flag,用法係當個FSM stay喺嗰個state個陣,個action每個frame都會做嘢,唔洗做多個transition過一個frame loop比自己咁煩。但係唔知點解唔係個個action都有。其實應該要改到個super class本身就有
  • Comment Block
    我見其他graphical programming都會做一個冇用ge rectangle放喺一堆note下面說明個堆係乜,可以寫埋字做說明

以我所見PlayMaker都算係幾好玩幾幫到手嘅嘢,
有賴Unity Asset Store尐update都做得幾好,
雖然要比錢買但係值得一試~

hp_hero

Oculus Rift

https://www.oculusvr.com

如圖所見就係一個帶係頭到會見到3D影像嘅電子產品
記唔記得Sims入面都有個咁ge野玩呢?~而家真係做到啦~
攞黎打機就正囉~
有Accelerometer偵測到你個頭擰去邊
玩射擊game個陣可以用個頭望黎望去
之前同事買左個Development Kit比我地玩感覺好正
Accelerometer嘅detection好夠快
可能因為只係Development Kit所以像素唔高
不過己經夠玩

我第一時間諗如果同Leap Motion夾埋一齊玩一定好正XD

1024px-Barcamp_hk_2008

Barcamp HK 2012

一年一度ge Barcamp就咁就完左
佢係一個一日時間好多個conference ge event
完全免費,但名額可能有限

一如以往唔多野睇XD
不過香港ge IT event冇理由唔支持

有幾個topic我覺得好好

1. Pitching
香港IT人成日比人話唔識講野,唔識溝通,唔識sell自已
其實一句講曬就係唔識pitching
pitch就係simple, 中point, 唔留手, 一兩句講完
只求一句,你以後都會記得

2. Angular JS
http://angularjs.org/
其實barcamp應該好多呢D tech sharing先0岩
都唔明點解只有幾多係咁
呢個係其中一個好好ge sharing
雖然講者準備唔多但係都show到D feature
其實就係一D descriptive language去做D visual野
TODO list, draw flow chat / graph 等等

3. Lytro
http://www.lytro.com/
其實係講者攞到部機出黎show off haha
不過真係好有趣
一個lens,影一次,可以calculate返唔同焦點ge相出黎
甚至可以做到個3d model(理論上可以)

有時間有興趣下年黎睇下啦~

link: http://www.barcamp.hk/