緣起

在 2016 年 12 月,我第一次舉辦了系學會的聖誕餐會,並且和多媒體系學會一起辦理,帶來了外系的人口以及分攤金費的困擾,同時還得想出活動中的元素,不過在第一次把這些第一次都嘗試過後, 2017 年年尾,我再次舉辦了聖誕餐會,靠著第一次的經驗延續下去,讓活動更好。

活動規劃

資工系這個科系的主題,肯定跟科技跑不了關係,從 2016 年,就有用程式來解決活動需要用到的內容,比方說抽獎、交換禮物,不過今年的規劃中,我一共加入了這些元素:

  • 開放兩個教室為場地
  • 教室間同步主場的攝影機畫面
  • 交換禮物
  • 抽獎
  • 電影觀賞
  • 聖誕餐會短片
  • 聖誕餐敘
  • 遊戲體驗

在人力部分上,實際只有 2 個人在辦理這項活動,我甚至搬桌椅搬到手脫臼 (._.),由於辦活動的人少,就必須有條理的把活動的代辦事項安排仔細,總共的工作中,在遊戲體驗和交換禮物上,花了比較多的心思。

電腦科學能解決的問題

自動控制

活動中可以靠自己寫出自動控制的程式碼,其實挺酷的,能用不同的方法解決問題,就可以降低很多成本,甚至可以讓解決方案變得更有趣,比方說,這個活動中,我靠 MPC-HC 這個開源的播放軟體,解決了:

  • 活動行前、中的廣告影片播送
  • 活動中的短片播放

的控制問題,而且他能夠同步的把不同場地的播放畫面給同步起來,而且只透過網路,不是 HDMI 傳輸,以下是透過電腦控制多個 MPC-HC 播放器的程式碼,是使用 Golang 寫出來的:

package main

import (  
    "fmt"
    "net/http"
    "time"
)

func main() {

    ch := make(chan string)

    playingList := []string{
        "192.168.168.189:13579",
        "192.168.168.188:13579",
        "192.168.168.190:13579",
    }

    for i := 0; i < len(playingList); i++ {
        go startPlaying("http://"+playingList[i]+"/command.html?wm_command=830", ch)
        fmt.Println(<-ch)
    }

    time.Sleep(time.Second * 2)

    for i := 0; i < len(playingList); i++ {
        go startPlaying("http://"+playingList[i]+"/command.html?wm_command=884", ch)
        fmt.Println(<-ch)
    }

    time.Sleep(time.Second * 2)

    for i := 0; i < len(playingList); i++ {
        go startPlaying("http://"+playingList[i]+"/browser.html?path=C:%5cMain.mp4", ch)
        fmt.Println(<-ch)
    }
}

func startPlaying(url string, ch chan<- string) {  
    http.Get(url)
    ch <- fmt.Sprintf("Server: " + url + " has been started!")
}

其中三個迴圈做的事情分別是: 讓視窗在最前面 > 全螢幕 > 播放 ,而且間隔都停頓 2 秒,讓網路延遲的影響降低。

場地的攝影機聯播

另外,系上之前因為錄製磨課師 (MOOCs) 開放課程的原因,購買遊戲串流盒 (AverMedia - GC550),剛好這個盒子提供了串流功能,採用 rtmp 的格式進行串流,因此我借來使用,只要在一個校內網路開一個伺服器,就可以當作 RTMP 串流,所以我就拿我的 Docker 伺服器,打開別人現成的 rtmp server:

docker run -d -p 1935:1935 --name nginx-rtmp tiangolo/nginx-rtmp  

並且只要把串流盒指向這個位置: rtmp://[server]:1935/live

就可以用 VLC Player 將串流指向這個位置: rtmp://[server]:1935/live/[key]

就可以播放串流盒的畫面。

交換禮物程式

交換禮物有個很重要需要考慮的問題,就是假設要程式設計成兩個人互相交換的話,肯定會出現大麻煩,就是總會有一個人無法換到禮物,因為一時沒有解決方案,所以我只好先自己買好一個交換禮物,假設實際交換的人,人數為雙數,那麼我就可以不需要提供我的禮物,假設是單數,我就得必須拿出我的禮物來。

所以現場程式是這樣執行的: xx號 和 xx 號互相交換。

但是後來發現,只要將程式改成: xx 號 拿 xx 號的禮物。

這個問題就可以被解決,因為你一定會拿到別人的禮物。

程式是使用 Unity3d 寫的,最後將會運行在一個咖啡桌的電腦上,給大家觸碰這個螢幕,所以只要在程式偵測 Mouse 0 被按下的情況,就可以執行一次交換禮物或抽獎。

製作過程就是去商店買一個爆炸的粒子系統效果,和一個禮物的模型,然後到網路上找一張圖片做成天空盒,再把攝影機加上景深的 Shader 效果腳本,然後讓攝影機慢慢圍繞禮物轉,就會有那種超高級的效果。

遊戲體驗

系上在 2016 年購買了 HTC-Vive VR ,但一直都想用它來做個專案,因此,就直接在聖誕餐會的活動上,來做一個 VR 的遊戲,用 Unity 搭配 Htc-Vive 的 sdk 就可以做簡單的射擊遊戲。

除了 VR 外,還另外做了一個 Logtech-G27 整套方向盤含踏板的賽車遊戲,一樣是 Unity 製作的,只要把 Unity 官方的賽車範例改過,就可以套用,相關開發內容可以參考這篇文章 Unity + logitech g27

遊戲體驗中,總共有:

  • Playstation 4 (放極速快感來玩)
  • Xbox Controller (隨便找台電腦來放 Project Cars 來玩)
  • Logtech G27 方向盤 (自製遊戲)
  • HTC Vive VR (自製遊戲,不過後來有人用它來玩 Payday VR)

短片製作

剛好在做短片的主題發想時,看到了 Medium 上有一位醫學系的學生,自己製作了關於醫學的主題 Medium - <醫學是什麼> ,所以我自己也效仿做了關於資工的主題,純手工用 After Effects 打造一個,由於先前我沒有太多 Motion Graphics 的知識或經驗,所以我全部把每一個 AE 中的元素,手動調整了時間軸曲線,讓它變成有 Motion Graphics 的感覺。

這個 1.50 分的影片花了大約 56 小時左右才做完 (兩週),另外我還參考了活動的入場卷設計,把元素拿來設計一個 Logo 短片:

這個影片只使用 6 小時就做完了,大概 16 秒。

餐敘的問題

關於預備餐點的部份,事前預計了大約有 79 人來參加餐會,在人數上和餐點餐費運用上,我們系學會和教授研討了有一小段時間,大致上,我們希望一開始用麵、飯來填飽學生的肚子,而後來的甜點則不需要叫這麼的多。

所以我們在鳳山區找了個學長推薦的莊記麵食館,以及方師傅點心坊 (2016 年選擇的森森歐式點心坊不合大家的胃口),點了這麼多東西:

實際上,其實最後大家都吃不完,大概留下逾 20 人份的食物,還請大家分別帶走。

由於 2016 年的活動,我們在外燴的店家叫了炒飯炒麵,實在又貴又少,導致 2016 年活動的食物吃不夠,還另外叫了必勝客,因此今年分開成兩家不同的店家來製作餐點,果然就便宜了很多,順帶一提,今年花費的價格只差去年 2,000 元左右,相較去年吃不夠的情況,今年的餐點狀況十分令人滿意。

而且,在這個經驗中告訴我們,大家其實一開始就喜歡先吃很多主食,只要吃飽了,點心少少的就可以了,接著就是有老師建議我們以後可以叫水果類或湯類的食品,可以省下一些甜點費用。

活動宣傳設計

活動除了要預備教室佈置、桌椅安排以外,最重要的就是在宣傳方面;尤其,都到了 2017 年了,活動總該有一些代表性的設計,帶給參與前的學生好的印象,所以我在 Freepik 或是 Evanto 上找了一些適合節氣的設計,設計了海報的形象,還有傳單的設計。

海報使用了 Freepik 的設計樣式,偏深藍色,而剛好在 Facebook 看到了 梅竹黑客松 的網站,挺適合這種風格的,所以就借了設計來用。

除此之外,還設計了入場卡的效果,把交換禮物號碼寫上去,就可以在叫號的時候來交換禮物,本來想說可以來寫一個影像辨識,透過手機註冊這張卡片,然後可以在叫號的時候震動來通知,不過礙於時間,這個想法並沒有被實現。

號碼牌要印製的話,建議可以先排好剛好的位置,給輸出中心印出來,就可以沿線切好,就會很輕鬆!

心得

今年辦的這個活動,整體感覺上還是太過制式了一點,不知道是不是工學院學生的感覺都是挺方方正正的,所以活動的人文部分則少了點色彩,反而活動都是專注在內容,而不是體驗者的感受,所以雖然設計了這麼多內容,但參與者之間還是少了一些交流或互動,這是比較不完美的部分,至於在活動安排上,比 2016 第一次舉辦時還要更輕鬆需多,能讓本次活動更專注在強化第一次舉辦的內容上,扮出活動的感覺,再來就是辦理活動的人數太少了,才 2 個人來辦活動,其實讓自己處在每天都忙不過來的狀態,所以活動提早了 4 週開始準備,剛好塞好塞滿每天的時間。

辦這樣的活動會搞垮每一個辦活動的人,但至少留下多了一個在學校的回憶。