最近兩周剛花點時間想去研究(玩)一下 nVidia hair work (integration for Unity)
參考 https://lab.uwa4d.com/lab/5b6657ebd7f10a201ffb0359?fbclid=IwAR3P8rgfkZALrf3mw3lq7PBfXIu5w8GKn5qcAjEIby51NMtpoyr-cavEFXI
但花點時間裝好 unitypackage後才發現其實裡面沒什麼 source資訊
真的 source codes/manual 都還是在 nVidia developer官網那 (nVidia HairWorks 1.1.1)
在還沒花時間深入研究完整的 source codes之前
我是無法理解 nVidia提出的高品質 hair shaders如何實作, 甚至如何使用的
以我自己的現況, 靠自己目前僅能達成低品質的 fur shaders
就算我本來認為在不追求高畫質為前提之下
我還有建模型和動作素材這些問題待克服
只能說在完全沒計畫前想像的開發方向真的蠻天真的
現在呢........我是不是該認真思考一下
我真的要自己去學 blender學建模與動作
還是想辦法買適合的美術素材來繼續測試自己想做的 prototype cores
或是........我該挑一個完全可以先跳過美術素材的題材
先試試身手完成一款小遊戲呢? 但題材可能要重新想過吧.....
至少今年該先好好思考這個問題
https://www.linkedin.com/in/river-wang-4118425b/
https://www.slideshare.net/riverwang54
本是個愛打電動的小屁孩
直到第一次看到FF7
就夢想有一天自己也能做出那樣等級的遊戲
但直到過了30歲才開始真的當遊戲人
雖然夢想還在遠方
但不願為了夢想而犧牲任何東西
因為另一個夢想就是當個普通人
2019年1月27日 星期日
2018年12月16日 星期日
Unity + native plugins on Linux
Unity engine中使用 managed/native plugins配合開發,
這是很便利和重要的開發工具,
不同的 OS環境下需要準備對應的 plugin library動態連結檔案,
Windows : .dll
Linux : .so
Mac OSX : bundle
以下就自己的經驗, 使用第三方 SimpleITK library,
(SimpleITK是我用到的 image processing toolkit library, 就先跳過介紹了)
如何準備 Linux OS環境下所需的 native plugins步驟.
1. 準備 source code
SimpleITK已經準備好 cmake可編譯的 source code makefiles.
較詳細的官方教學
https://itk.org/Wiki/SimpleITK/GettingStarted/Visual_guide_to_building_on_Linux
2. 準備 cmake
在 ubuntu 18.04 中 software center已經有 cmake (含cmake-gui)等我去一鍵安裝了, 真方便...
3. cmake building...
照著教學的步驟做(此步不詳述)
但因為我們需要透過 Unity engine開發, 所以設置參數中選取 CSharp wrapping enabled.
建置完成後取得 SimpleITKCSharpManaged.dll 與 libSimpleITKCSharpNative.so
4. 整合進 Unity
將 XXXXmanaged.all 與 XXXXnative.so 檔案放進 Unity project中的 Plugins專屬目錄下,
並注意好設置給 Linux環境專用,
差不多大功告成~
.
.
.
事情還沒完, 因為我使用 ubuntu 18.04 OS環境編譯出 library binaries,
因此在較舊的 ubuntu 14.04 OS 環境測試 standalone player app時便遇到問題,
舊 ubuntu 14 OS中無法完全相容 ubuntu 18編譯出來的 libs,
在 app啟動無法成功載入 libSimpleITKNative.so, 得到以下 log:
./libSimpleITKCSharpNative.so: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.27' not found (required by ./libSimpleITKCSharpNative.so....
google後決定安裝 ubuntu 14.04 64bit OS, 並安裝 cmake-gui, 來編譯 library binaries,
ubuntu 14 OS環境下安裝 cmake-gui稍微麻煩一點,
https://askubuntu.com/questions/1020168/how-to-build-cmake-gui-on-linux-from-source
善用 Google, 佛心教學真的頗多.
最後從 ubuntu 14編譯出來的 library binaries取代之後,
便可成功載入 libSimpleITKNative.so 檔案, 並且測試 app成功~
這是很便利和重要的開發工具,
不同的 OS環境下需要準備對應的 plugin library動態連結檔案,
Windows : .dll
Linux : .so
Mac OSX : bundle
以下就自己的經驗, 使用第三方 SimpleITK library,
(SimpleITK是我用到的 image processing toolkit library, 就先跳過介紹了)
如何準備 Linux OS環境下所需的 native plugins步驟.
1. 準備 source code
SimpleITK已經準備好 cmake可編譯的 source code makefiles.
較詳細的官方教學
https://itk.org/Wiki/SimpleITK/GettingStarted/Visual_guide_to_building_on_Linux
2. 準備 cmake
在 ubuntu 18.04 中 software center已經有 cmake (含cmake-gui)等我去一鍵安裝了, 真方便...
3. cmake building...
照著教學的步驟做(此步不詳述)
但因為我們需要透過 Unity engine開發, 所以設置參數中選取 CSharp wrapping enabled.
建置完成後取得 SimpleITKCSharpManaged.dll 與 libSimpleITKCSharpNative.so
4. 整合進 Unity
將 XXXXmanaged.all 與 XXXXnative.so 檔案放進 Unity project中的 Plugins專屬目錄下,
並注意好設置給 Linux環境專用,
差不多大功告成~
.
.
.
事情還沒完, 因為我使用 ubuntu 18.04 OS環境編譯出 library binaries,
因此在較舊的 ubuntu 14.04 OS 環境測試 standalone player app時便遇到問題,
舊 ubuntu 14 OS中無法完全相容 ubuntu 18編譯出來的 libs,
在 app啟動無法成功載入 libSimpleITKNative.so, 得到以下 log:
./libSimpleITKCSharpNative.so: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.27' not found (required by ./libSimpleITKCSharpNative.so....
google後決定安裝 ubuntu 14.04 64bit OS, 並安裝 cmake-gui, 來編譯 library binaries,
ubuntu 14 OS環境下安裝 cmake-gui稍微麻煩一點,
https://askubuntu.com/questions/1020168/how-to-build-cmake-gui-on-linux-from-source
善用 Google, 佛心教學真的頗多.
最後從 ubuntu 14編譯出來的 library binaries取代之後,
便可成功載入 libSimpleITKNative.so 檔案, 並且測試 app成功~
Unity engine editor on Linux
前一陣子因為有需求, 嘗試在 Linux環境中使用 Unity engine,
Unity官方早期是有宣稱過支援 Linux OS的, 但其實近年已經悄悄拿掉,
目前官方只公布支援 Windows與 Mac OSX.
原因無它, 自然是因為 Linux分岐版本太多難以維護管理.
自己也算是 Unix系統新手/白癡
所以想說還是紀錄一下這一陣子以來在 Linux使用經驗上踩過的雷好了
1. 準備VM
首先因為手邊只有 Windwos OS (沒錯我一直很懶得學/用 Linux環境)
因此最快的方式就是使用 virtual machine工具,
鑒於以前慣用 virtual box, 這次想改玩 VMware,
故使用免費版 VMware workstation player
https://www.vmware.com/tw/products/workstation-player/workstation-player-evaluation.html
2. 安裝Linux OS
從官方論壇調查得知, 目前 Unity官方宣稱支援最穩定的是 ubuntu OS環境,
因此選擇 ubuntu, 初步測試先選擇安裝較新的 ubuntu 18.04 64bit
https://www.ubuntu-tw.org/modules/tinyd0/
現在的 virtual machine和 ubuntu安裝流程真的是有夠方便的,
感覺跟一鍵搞定差不多了
3. 安裝 Unity engine editor (for Linux)
參考以下官方討論串
https://forum.unity.com/threads/unity-on-linux-release-notes-and-known-issues.350256/
沒錯, 並沒有在官方網站上留下 Linux版本支援連結,
只剩下討論串的方式來發布新的 Linux版本 Unity engine...
總之裡面也算是有詳細介紹安裝教學,
而必備的 3rd party tool/app/libs 則是列出了一大堆..
The dependencies for Unity itself are:
Unity官方早期是有宣稱過支援 Linux OS的, 但其實近年已經悄悄拿掉,
目前官方只公布支援 Windows與 Mac OSX.
原因無它, 自然是因為 Linux分岐版本太多難以維護管理.
自己也算是 Unix系統新手/白癡
所以想說還是紀錄一下這一陣子以來在 Linux使用經驗上踩過的雷好了
1. 準備VM
首先因為手邊只有 Windwos OS (沒錯我一直很懶得學/用 Linux環境)
因此最快的方式就是使用 virtual machine工具,
鑒於以前慣用 virtual box, 這次想改玩 VMware,
故使用免費版 VMware workstation player
https://www.vmware.com/tw/products/workstation-player/workstation-player-evaluation.html
2. 安裝Linux OS
從官方論壇調查得知, 目前 Unity官方宣稱支援最穩定的是 ubuntu OS環境,
因此選擇 ubuntu, 初步測試先選擇安裝較新的 ubuntu 18.04 64bit
https://www.ubuntu-tw.org/modules/tinyd0/
現在的 virtual machine和 ubuntu安裝流程真的是有夠方便的,
感覺跟一鍵搞定差不多了
3. 安裝 Unity engine editor (for Linux)
參考以下官方討論串
https://forum.unity.com/threads/unity-on-linux-release-notes-and-known-issues.350256/
沒錯, 並沒有在官方網站上留下 Linux版本支援連結,
只剩下討論串的方式來發布新的 Linux版本 Unity engine...
總之裡面也算是有詳細介紹安裝教學,
而必備的 3rd party tool/app/libs 則是列出了一大堆..
The dependencies for Unity itself are:
- gconf-service
- lib32gcc1 (>= 1:4.1.1)
- lib32stdc++6 (>= 4.6)
- libasound2 (>= 1.0.23)
- libc6 (>> 2.15)
- libc6-i386 (>= 2.15)
- libcairo2 (>= 1.6.0)
- libcap2 (>= 2.10)
- libcups2 (>= 1.4.0)
- libdbus-1-3 (>= 1.2.14)
- libexpat1 (>= 1.95.8)
- libfontconfig1 (>= 2.8.0)
- libfreetype6 (>= 2.3.9)
- libgcc1 (>= 1:4.1.1)
- libgconf-2-4 (>= 2.31.1)
- libgdk-pixbuf2.0-0 (>= 2.22.0)
- libgl1-mesa-glx | libgl1
- libglib2.0-0 (>= 2.31.8)
- libglu1-mesa | libglu1
- libgtk2.0-0 (>= 2.24.0)
- libnspr4 (>= 1.8.0.10)
- libnss3 (>= 3.14.3)
- libpango1.0-0 (>= 1.22.0)
- libstdc++6 (>= 4.6)
- libx11-6 (>= 2:1.4.99.1)
- libxcomposite1 (>= 1:0.3-1)
- libxcursor1 (>> 1.1.2)
- libxdamage1 (>= 1:1.1)
- libxext6
- libxfixes3
- libxi6 (>= 2:1.2.99.4)
- libxrandr2 (>= 2:1.2.99.2)
- libxrender1
- libxtst6
- zlib1g (>= 1:1.1.4)
- debconf (>= 0.5) | debconf-2.0
- npm
sudo apt-get install xxxx ...... (重複數十遍..)
如果要找更簡潔的安裝說明的話可以參考以下連結
https://www.paperstartgames.com/install-unity3d-in-ubuntu-18_04/
https://www.paperstartgames.com/install-unity3d-in-ubuntu-18_04/
總之我試著安裝了 Unity2018.1.3 與 Unity2018.2.7 (當時官方支援的最新版本)
兩個版本遇到的地雷點差不多,
照個教學一步一步做總之是把 Unity engine run起來惹wwww
可以編遊戲也可以 build player,
但每次開 package manager必定 crash...
為了開啟 coding IDE, 我選擇裝 visual studio code,
但每次重開 Unity editor都必須重新指定 preferences -> External Tools -> External Script Editor,
似乎沒有正確寫入 Unity editor preference...
4. 地雷筆記
這部分只是我將前陣子記錄下來的踩雷點存在 blog上
大部分我也沒再追蹤, 所以算是沒意義可以忽略ww
= Unity engine editor啟動時有出現幾個 error logs, 也遇到 Unity官方 tutorial專案時會發生 crash的問題, 但開啟新的空專案或之前自己準備的 Unity專案時則沒有 crash. ERROR:browser_main_loop.cc(161)] Running without the SUID sandbox! (可忽略); ERROR:renderer_main.cc(227)] Running without renderer sandbox; ERROR:gpu_process_transport_factory.cc(402)] Failed to establish GPU channel.
= 在 Unity editor中設定 preferences -> External Tools -> External Script Editor, 容易發生 Unity editor crash. 嘗試使用 sublime-text開啟 Unity script file (.cs), 但在更改 scripting codes/shader codes後返回 Unity engine editor時會發生 crash.
= Unity editor中開啟 Package Manager必會發生 crash.
= Crash core dump中可以發現訊息: VMware: vmw_ioctl_command error Invalid argument. 可能跟 VMware環境提供的 GPU driver運作有關.
= Linux standalone環境會被 Unity engine自動認定為 UnityEngine.Rendering.GraphicsTier.Tier3 (高階硬體環境)
- 測試 standalone player app在 ubuntu OS VM (VMware without "Accelerate 3D Graphics" enabled)環境下的運行情境. 初步測試因為 Unity Linux standalone player要求至少支援 OpenGL Core 3.2+ version, 所以 app啟動失敗.
2018年5月18日 星期五
2 線段形成夾角之弧線 / 扇形表示法
去年離開模具然後跑去三角洲
後來在三角洲浪費將近半年時光
最後在去年底我才正式回到正常用腦工作的環境
一眨眼又是一年過去了
自從2017/ 12月下旬開始
我的 Indie 之路又中斷了 (又? 根本沒開始才對 XD
為了做好正職, 根本沒時間經營自己的 Indie 事業RRRRR
回到正題來聊一聊過去一個禮拜讓我頭痛好幾天的功能開發
3D 空間中對任意相連的 2 線段形成之夾角
產生對應的弧線或扇形來做視覺化表示
對我來說對這個問題我算是有相關經驗
但動手前我隱約可以感覺到
數學沒學好的我會感到很棘手
首先定義 input,
從 2 線段找到相連的點, 由相連點出發計算出形成夾角的 2 向量,
然後從內積結果來判斷誰是 lhs(left-hand-sided vector)與 rhs(right-hand-sided vector)
接著我的痛苦旅程開始
Unity 可以輕鬆幫我算出 2 個向量之間的夾角 Vector3.Angle()
透過角度代入公式我可以輕鬆計算出正確的弧線或扇形
Mathf.Cos(radian) * axisX + .Sin(radian) * axisZ;
(#這裡要特別感謝 周明倫 大神教學文章的 carry)
但頭痛的問題來了, 我要如何將那個扇形剛好放置在夾角的定位上?
第一次分析後扇形的圓心就是 2 線段相連點 ( <== 正確)
但還有扇形物件的旋轉矩陣要解
於是我天真的想把其中一個線段當成 transform.right,
把 angle = 0 的方向旋轉到 transform.right,
然後再把扇形的 normal 方向旋轉到 2 線段形成平面之法向量 ( Vector3.Cross(lhs, rhs) )
(我計算了 2 個旋轉 quaternion在相乘後找出旋轉矩陣)
經過這樣試驗一整晚, 我的旋轉怎麼 debug 怎麼錯
那幾天剛好狀況不好, 身體疲累, 最後頭痛到受不了只好收工去睡
睡醒後, 不知我是不是在睡夢中夢到解法 XD 突然豁然開朗
我想要解的旋轉矩陣就是 Transform.LookAt() 幫我做好的功能R
於是回頭 debug, 發現我的 lhs 和 rhs 就找錯了
if ( Vector3.Dot( lhs , rhs ) < 0 )
swap(lhs, rhs);
確定有正確的 lhs, rhs 接下來就是要計算 forward,
up = Vector3.Cross(lhs, rhs); // 2 線段所在平面的法向量
right = rhs; // 定義 right-hand-sided vector為 transform.right
forward = Vector3.Cross(right, up); // transform.forward
// transform.position = 線段相連點位置
剩下的就是交給 Transform.LookAt(transform.position + forward, up);
打完, 收工
最後心得是, 這種感覺只是初等幾何問題還困擾我這麼久
我果然是個銅牌R
後來在三角洲浪費將近半年時光
最後在去年底我才正式回到正常用腦工作的環境
一眨眼又是一年過去了
自從2017/ 12月下旬開始
我的 Indie 之路又中斷了 (
回到正題來聊一聊過去一個禮拜讓我頭痛好幾天的功能開發
3D 空間中對任意相連的 2 線段形成之夾角
產生對應的弧線或扇形來做視覺化表示
對我來說對這個問題我算是有相關經驗
但動手前我隱約可以感覺到
數學沒學好的我會感到很棘手
首先定義 input,
從 2 線段找到相連的點, 由相連點出發計算出形成夾角的 2 向量,
然後從內積結果來判斷誰是 lhs(left-hand-sided vector)與 rhs(right-hand-sided vector)
接著我的痛苦旅程開始
Unity 可以輕鬆幫我算出 2 個向量之間的夾角 Vector3.Angle()
透過角度代入公式我可以輕鬆計算出正確的弧線或扇形
Mathf.Cos(radian) * axisX + .Sin(radian) * axisZ;
(#這裡要特別感謝 周明倫 大神教學文章的 carry)
但頭痛的問題來了, 我要如何將那個扇形剛好放置在夾角的定位上?
第一次分析後扇形的圓心就是 2 線段相連點 ( <== 正確)
但還有扇形物件的旋轉矩陣要解
於是我天真的想把其中一個線段當成 transform.right,
把 angle = 0 的方向旋轉到 transform.right,
然後再把扇形的 normal 方向旋轉到 2 線段形成平面之法向量 ( Vector3.Cross(lhs, rhs) )
(我計算了 2 個旋轉 quaternion在相乘後找出旋轉矩陣)
經過這樣試驗一整晚, 我的旋轉怎麼 debug 怎麼錯
那幾天剛好狀況不好, 身體疲累, 最後頭痛到受不了只好收工去睡
睡醒後, 不知我是不是在睡夢中夢到解法 XD 突然豁然開朗
我想要解的旋轉矩陣就是 Transform.LookAt() 幫我做好的功能R
於是回頭 debug, 發現我的 lhs 和 rhs 就找錯了
if ( Vector3.Dot( lhs , rhs ) < 0 )
swap(lhs, rhs);
確定有正確的 lhs, rhs 接下來就是要計算 forward,
up = Vector3.Cross(lhs, rhs); // 2 線段所在平面的法向量
right = rhs; // 定義 right-hand-sided vector為 transform.right
forward = Vector3.Cross(right, up); // transform.forward
// transform.position = 線段相連點位置
剩下的就是交給 Transform.LookAt(transform.position + forward, up);
打完, 收工
最後心得是, 這種感覺只是初等幾何問題還困擾我這麼久
我果然是個銅牌R
2017年12月17日 星期日
有趣的 OGRE 2.1 旅程
因為工作緣故
有機會接觸 OGRE 這個老骨董
(其實本來想專心玩 Unity)
不過花了點時間看了 OGRE的新發展後
發現他們也是很有野心的
目前的開發方向都很有趣
簡單幾句話帶過 OGRE 2.1 的特色的話呢...
就是
1. 偋棄 object-oriented 邁向 data-oriented driven設計方向的懷抱
2. Performance, performance, peroformance...then still performance!
3. 很多改動都因為效能考量整個重構, 像不再支援許多 listener, 因為他們認為 visitor design pattern is SLOWWWWWwww!
4. Cache-friendly & threading 至上主義
5. OGRE 2.1 效能表現海放 Unity & Unreal (他們自己說的 XDDD)
順便附上之前在研究時順便整理的幾篇投影片
因為工作的關係
玩 OGRE的時光暫時告一段落了
不過 v2.1真的很有趣
期待我未來有空時回去補上一些好玩的體驗 (LoD + animation + AAA graphics...)
有機會接觸 OGRE 這個
(其實本來想專心玩 Unity)
不過花了點時間看了 OGRE的新發展後
發現他們也是很有野心的
目前的開發方向都很有趣
簡單幾句話帶過 OGRE 2.1 的特色的話呢...
就是
1. 偋棄 object-oriented 邁向 data-oriented driven設計方向的懷抱
2. Performance, performance, peroformance...then still performance!
3. 很多改動都因為效能考量整個重構, 像不再支援許多 listener, 因為他們認為 visitor design pattern is SLOWWWWWwww!
4. Cache-friendly & threading 至上主義
5. OGRE 2.1 效能表現海放 Unity & Unreal (他們自己說的 XDDD)
順便附上之前在研究時順便整理的幾篇投影片
因為工作的關係
玩 OGRE的時光暫時告一段落了
不過 v2.1真的很有趣
期待我未來有空時回去補上一些好玩的體驗 (LoD + animation + AAA graphics...)
2017年12月3日 星期日
草莓老毛病又犯了
這個BLOG當初是為了想經營自己的 indie game開發生涯而寫的,
結果一年後都還沒開始任何開發進度 XD
我一直以來都覺得自己就是不上不下, 只是個很普通的RD,
但因為我肯爭取, 所以在談薪水時偶爾還是有幾位面試官願意尊重我,
給我可以接受的待遇.
對於這次談科技大廠的工作,
我可以說是我這輩子最接近談到百萬年薪等級的工作了,
一開始我也覺得我會很珍惜這樣的工作機會,
無奈才撐了半年, 我又決定要跑了 XD
到底為什麼, 我又想要走呢?
家庭考量絕對是佔最重要考量,
通勤時間長, 增加疲累程度當然也是很重要因素,
但要談到工作環境還是不可避免地要聊聊管理文化以及主管的個性.
一開始就很常聽到大家在八卦, 講這家公司不重視軟體開發,
硬體背景主管主導一切, 且大多沒有軟體工程背景.
進入第一個部門後可說充分體會到這種外行大主管領導內行的現象,
後來因為看到另一部門有我非常喜歡的主題, 所以就直接衝動內轉換一次部門.
原本換部門後也有期待可以好好發揮自己專長, 做自己喜歡的主題,
但新部門的主管, 個性也跟我不合,
初步共事大約一個月後, 突然聽到他無腦地批評 :
以前他寫 opengl程式一天就做好了, 不懂為什麼我們現在要花這麼久的時間.
坦白講除了發怒外, 我只覺得可笑, 不懂該領域的人challenge該領域的專家,
可是該人連基本的 draw-call, resource management概念都沒有.
一開始評估開發工具以及時程時, 就提出過8-12個月的時間,
主管也沒出聲覺得慢, 之後卻讓我感覺完全不給時間好好做事,
每次都只急著想要一兩天內看到他想看的莫名功能,
每次討論也很常在重覆討論過去提過的問題, 這當然也會是我考慮要換工作環境的因素.
但回過來講自己的規劃,
當然最主要還是要說, 一直以來我都以盡量找高薪資工作為目標,
為了能 cover 家用和孩子們的教育費,
但這次我有機會參與過去好夥伴的公司, 體驗創業, 拚自己事業的機會.
加上好朋友也非常尊重我, 一樣給我不錯的待遇.
坦白說這真的很吸引我, 讓我也有很想要挑戰自己事業的心情.
因此, 可以回到高雄, 有更多時間留給自己和家庭,
也可以嘗試自己喜歡的事業,
雖然還是沒機會回去遊戲產業, 但可以同時兼顧自己事業和家庭的機會真的不多.
只是這樣的決定勢必影響到孩子們的補習與教育機會.. 這是另一個難題
但已決定了就只好繼續好好規劃未來了.
結果一年後都還沒開始任何開發進度 XD
我一直以來都覺得自己就是不上不下, 只是個很普通的RD,
但因為我肯爭取, 所以在談薪水時偶爾還是有幾位面試官願意尊重我,
給我可以接受的待遇.
對於這次談科技大廠的工作,
我可以說是我這輩子最接近談到百萬年薪等級的工作了,
一開始我也覺得我會很珍惜這樣的工作機會,
無奈才撐了半年, 我又決定要跑了 XD
到底為什麼, 我又想要走呢?
家庭考量絕對是佔最重要考量,
通勤時間長, 增加疲累程度當然也是很重要因素,
但要談到工作環境還是不可避免地要聊聊管理文化以及主管的個性.
一開始就很常聽到大家在八卦, 講這家公司不重視軟體開發,
硬體背景主管主導一切, 且大多沒有軟體工程背景.
進入第一個部門後可說充分體會到這種外行大主管領導內行的現象,
後來因為看到另一部門有我非常喜歡的主題, 所以就直接衝動內轉換一次部門.
原本換部門後也有期待可以好好發揮自己專長, 做自己喜歡的主題,
但新部門的主管, 個性也跟我不合,
初步共事大約一個月後, 突然聽到他無腦地批評 :
以前他寫 opengl程式一天就做好了, 不懂為什麼我們現在要花這麼久的時間.
坦白講除了發怒外, 我只覺得可笑, 不懂該領域的人challenge該領域的專家,
可是該人連基本的 draw-call, resource management概念都沒有.
一開始評估開發工具以及時程時, 就提出過8-12個月的時間,
主管也沒出聲覺得慢, 之後卻讓我感覺完全不給時間好好做事,
每次都只急著想要一兩天內看到他想看的莫名功能,
每次討論也很常在重覆討論過去提過的問題, 這當然也會是我考慮要換工作環境的因素.
但回過來講自己的規劃,
當然最主要還是要說, 一直以來我都以盡量找高薪資工作為目標,
為了能 cover 家用和孩子們的教育費,
但這次我有機會參與過去好夥伴的公司, 體驗創業, 拚自己事業的機會.
加上好朋友也非常尊重我, 一樣給我不錯的待遇.
坦白說這真的很吸引我, 讓我也有很想要挑戰自己事業的心情.
因此, 可以回到高雄, 有更多時間留給自己和家庭,
也可以嘗試自己喜歡的事業,
雖然還是沒機會回去遊戲產業, 但可以同時兼顧自己事業和家庭的機會真的不多.
只是這樣的決定勢必影響到孩子們的補習與教育機會.. 這是另一個難題
但已決定了就只好繼續好好規劃未來了.
2017年9月8日 星期五
開發現況與問題
兩年前我就曾經想參加或協助indie game專案,
當時朋友很認真的回應我: 兼顧本業與副業是很困難辛苦的.
況且我一直以來還想要顧及自己的私人和家庭生活時間.
講真的到目前為止就算我曾經很認真的思考要怎麼同時進行本職工作與indie工作,
其實我跟本還沒成功開始過?
當初開這個blog最主要目的也在於想紀錄自己有沒有能力執行開發進度.
可是超過半年過去了..
很明顯的我應該算是什麼都還沒開始動工吧!
沒有思考與撰寫過設計文件, 沒有真的進行prototype相關的任何開發內容,
只有不停的上網找資料, 閱讀參考文獻與教學,
像今天早上原本想嘗試開發卻又花了兩個小時在整理之前網路上找的資料.
還有花時間休息, 打電動, 並且討價還價不想多花時間陪小孩..
講真的就算知道要創業是很孤獨的,
我現在仍然會對這半年來的進展感到很沮喪.
既然要紀錄這一篇, 重點應該是要面對問題.
最大的問題是時間不夠嗎?
目前選的工作每天至少會花掉14個小時 (4個小時在通勤上).
其實真的算是主要的難題.
在晚上回到家後我常常已經感到自己消耗掉很大的精神體力,
我的身體習慣已經開始說服自己早點休息了.
所以常常在有心想做點什麼事的時候,
我的注意力已無法集中, 甚至有時會累到眼睛快睜不開了.
這種時候當然該休息了..
但也有我還有力氣可是卻得花時間處理家務的情況, 這是避免不了的,
不可能把所有事情留給我老婆處理,
因為她真的已經處理掉超過90% 的事情了,
所以要真的完全不理家人的事只做自己想做的事,
坦白講不太可能 (而且我覺得我已經推掉太多家務事給我老婆了).
既然時間是一主要難題, 但又真的想做點事業的話,
也許我該每週固定排某個時間進行自己的indie工作內容.
目前看來最適合的時間是每週六和日的早上.
這種時候通常比較不會有雜務來打擾或中斷工作.
不過要認真執行這樣的工作時間安排,
我可能也要下定決心不要半調子地把時間花在玩樂或打混,
畢竟過去幾個月的時間就是這樣沒掌握好浪費掉大半去的.
但老實說有時真的覺得壓力很大, 想要把電動補玩一玩放鬆一下,
或是前幾個月想開始練習自己固定的運動活動, 這也會花掉體力和時間.
不知道之後工作與休息和家庭這些重點花費的時間, 我該怎麼平衡呢?
也許該邊嘗試執行計劃並同時思考怎麼調整吧.
畢竟比較累比較遠的工作也是自己選的, 只有抱怨的話也不會對事情有幫助吧.
當時朋友很認真的回應我: 兼顧本業與副業是很困難辛苦的.
況且我一直以來還想要顧及自己的私人和家庭生活時間.
講真的到目前為止就算我曾經很認真的思考要怎麼同時進行本職工作與indie工作,
其實我跟本還沒成功開始過?
當初開這個blog最主要目的也在於想紀錄自己有沒有能力執行開發進度.
可是超過半年過去了..
很明顯的我應該算是什麼都還沒開始動工吧!
沒有思考與撰寫過設計文件, 沒有真的進行prototype相關的任何開發內容,
只有不停的上網找資料, 閱讀參考文獻與教學,
像今天早上原本想嘗試開發卻又花了兩個小時在整理之前網路上找的資料.
還有花時間休息, 打電動, 並且討價還價不想多花時間陪小孩..
講真的就算知道要創業是很孤獨的,
我現在仍然會對這半年來的進展感到很沮喪.
既然要紀錄這一篇, 重點應該是要面對問題.
最大的問題是時間不夠嗎?
目前選的工作每天至少會花掉14個小時 (4個小時在通勤上).
其實真的算是主要的難題.
在晚上回到家後我常常已經感到自己消耗掉很大的精神體力,
我的身體習慣已經開始說服自己早點休息了.
所以常常在有心想做點什麼事的時候,
我的注意力已無法集中, 甚至有時會累到眼睛快睜不開了.
這種時候當然該休息了..
但也有我還有力氣可是卻得花時間處理家務的情況, 這是避免不了的,
不可能把所有事情留給我老婆處理,
因為她真的已經處理掉超過90% 的事情了,
所以要真的完全不理家人的事只做自己想做的事,
坦白講不太可能 (而且我覺得我已經推掉太多家務事給我老婆了).
既然時間是一主要難題, 但又真的想做點事業的話,
也許我該每週固定排某個時間進行自己的indie工作內容.
目前看來最適合的時間是每週六和日的早上.
這種時候通常比較不會有雜務來打擾或中斷工作.
不過要認真執行這樣的工作時間安排,
我可能也要下定決心不要半調子地把時間花在玩樂或打混,
畢竟過去幾個月的時間就是這樣沒掌握好浪費掉大半去的.
但老實說有時真的覺得壓力很大, 想要把電動補玩一玩放鬆一下,
或是前幾個月想開始練習自己固定的運動活動, 這也會花掉體力和時間.
不知道之後工作與休息和家庭這些重點花費的時間, 我該怎麼平衡呢?
也許該邊嘗試執行計劃並同時思考怎麼調整吧.
畢竟比較累比較遠的工作也是自己選的, 只有抱怨的話也不會對事情有幫助吧.
2017年7月14日 星期五
Career
新公司報到一陣子了,好像有些事積在心裡也不清楚該怎麼表達。因為受不了前公司的人治,所以離開,雖然當初大聲的說這是職場常態,但在新公司遇到一些自己看不慣的鳥事時,還是覺得很煩。到底我是為了什麼換工作呢?我現在一直在思考這個問題。
精確地說,到底為什麼我選了這家新公司呢?
好吧,坦白說只因為錢,我在南台灣找不到更高的薪水了,但家庭的教育費讓我們的口袋快速見底了,所以我必須找到可以補上這個缺口的工作。但我也不是因為這樣就什麼工作就亂找,所以面試時有發生一段插曲。
因為公司要做模擬議題的軟體服務,所以在找懂繪圖與模擬這些領域的人。其實他們在找的技術跟game engine領域超級match,可惜目前我還無法說服大部份的人這點。但不管如何因此他們在職缺裡開了需求,我看到才投resume想去談。然後A部門找我去面試,但跟我說他們還不會做這塊領域,時程上還不允許,但B部門已經開始做了,也許我去B部門會更適合,也因此我也答應B部門的面試。可是後來因為B部門動作太慢,加上我有事情在忙,所以無法和B部門成功約面試,就已經答應去A部門報到了。但進去一陣子後,目前發現B部門才是我真正想待的地方,A部門則是要接觸一塊全新的領域,因此自然而然,我開始有很想轉到B部門的想法。
但問題不止在此,我在面試時都會談請楚,後端(networking / database)是我的弱項,我不會想去接這種工作內容,對方也都理解,而剛進去時要接觸的也是比較偏compiler領域的計術,這也是面試時有提過的,而去學這種東西我覺得我還吃的下去。但上週突然間,上層主管只傳達一個很簡短的訊息,因為人手不足,要求我待的team去接手後端服務的主要工具工作,說真的我很不喜歡這樣子,先不說我面試時就談好我networking完全不行,我強的是其他地方,他們也是因為我的強項找我進去而不是因為我全方面都會做,但現在突然間傳達一個命令就要另一個 team接手,但理由聽起來又前後矛盾讓人感到牽強,無法理解上面管理層的想法和脈絡,加上開會的氣氛。諸如以上各種理由,加深我想要轉換去B部門做事的想法,更甚者,我開始想著為什麼我現在在做這些事。
這種工作從來不是我心中想做的事,我心中隨時隨地都在想著遊戲開發,我看到的任何畫面/文字/材料/內容我都會下意識地跟遊戲開發技術去聯想,我一直想做的就是做出我心目中真正的遊戲。那為什麼我沒有選這種工作呢?如果是錢的問題的話,其實前公司可以讓我苟延殘喘繼續待著,也不會立刻遇到現金流的缺口問題,但看著老闆親自亂搞底下認真做事的人,我完全無法認同,可說有點意氣用事的情況下我急著辭職不幹。那這些年來我到底在幹什麼呢?我的堅持到底是什麼?
理性看待這個問題,如果小孩的教育費需要,我何不就當個奴材忍個幾年看看做不做的下去,這樣至少薪水有個保障。但撇開新單位我到底喜不喜歡,B部門才是我真正喜歡做的內容,我現在當然會想轉換過去,可是這是我真正想要的嗎?也許我跟本不想待在這個公司,我渴望立刻開始執行自己的計劃、夢想。可是這叫做勇敢還是逃避呢?會不會這一切的抱怨,只是因為我草莓、抗壓性不夠罷了?
最近有點煩這些事。
2017年5月26日 星期五
舊editor開發工作
記得去年年初(2016) 時就有被付予要做遊戲引擎的編輯器更新(升級)的任務
但我想去年我已開始消沉了吧
所以這方面的進度一直都很慢
直到年中時才有初步架構出來
到了下半年 prototype 逐漸自己一行一行刻出來了
然後做出這樣另一個難用的鬼東西 XD
(都是托 irrlicht 的福)
好啦要不是 irrlicht,這鬼東西就刻不出來啦!
是的,我開始有這種想法。
也因此,在年底時,又經過一兩個月的思考之後。
我下定決心一定要改用 Unity 或 Unreal (其實還考慮過Lumberyard啦)!
因此從 2016/10之後開始重新回去自學 Unity。
選擇 Unity 除了因為公司美術部門本來就是配合 Unity 之外,
也因為學習資源最多最方便。
並在2017年初強迫介入部門開發決策,把開發工具整個導向 Unity。
然後,我就跳船了 XDDDDD
影片中是當時試作的 lava shader (for mobile version, in GLSL) 的 DEMO。
shader code 參考以下佛心 post:
http://irrnetcp.proboards.com/thread/2/lava-shader-hlsl
2017年2月14日 星期二
談 Irrlicht
http://irrlicht.sourceforge.net/
因緣際會之下,
2011年底我換工作來到一家新創遊戲公司,
這家公司的決定讓我覺得很有趣(本來是這樣),
他們想要擁有自家 game engine技術,
想要發展自己的 game development 工具與製程,
而那時他們的選擇是 irrlicht 這款 open sourced game engine.
就這樣開啟了 5 年來我與 irrlicht 交手的過程.
先說結論,
就像任何一個 open source 專案一樣,
irrlicht 管理方都只是用自己 part time的時間幫忙維護與開發.
所以可以想像這是一個你看完 demo 之後,
其他功能要什麼沒什麼的工具.
唯一可說嘴的就是 source code 可以無用途限制地讓人修改.
但世界上最有名的一句名言即是:
"免錢的最貴".
所以真的要拿這種工具來製作商業產品,
我想只能用 painful 來形容了.
大致上介紹一下它的架構:
以 source code 來分析的話, irrlicht 主要分為以下幾個 component:
1. VideoDriver : 處理所有繪圖底層與資源相關 API 功能.
2. SceneManager : 場景管理相關功能與演算法.
3. FileSystem : 檔案系統化處理功能.
4. GUIEnvironment : 處理 UI, 最悲劇的部份.
5. Device : 實作各平台視窗顯示與遊戲啟動機制, 坦白說這部份他們做的還蠻用心的.
嗯, 主要的都介紹完了,
那麼重點來了, 是的, 它們並沒有提供 editor (當然他們沒有義務).
但沒有 editor 也是個嚴重的問題,
因此當時我們公司的做法是找到幫 irrcliht 實作過 editor 的某個第三方對象,
直接跟他們購買 source code, 拿回來做我們要的客製化.
再來接下來就是抱怨時間了(誤).
可以透過以下幾個描述來說明"免錢的最貴" 這點.
首先官方自己在 stable release 版中支援的底層 graphics API 只有:
1. D3D8, D3D9,
2. OpenGL 1.x-2.0 (fixed function + programmable).
3. 他們自己寫的 software based driver(看起來比較像是學術研究用途).
因此第一個面對到的情況便是:
如果真的打算用 OpenGL 3.x+ 以上的功能,
就必須自己全部 wrap 一遍, 重寫自己的 video driver.
而更嚴重的問題便是,
想當然地他們官方還沒開始正式支援 OpenGL ES API.
雖然有很多第三方的人幫忙他們擴充,
但直到現在, 仍沒有正式將那些 iOS/Android branch merge 回到 stable release版.
也因此, 在3-4年前我們開始正式啟動手機遊戲開發時,
我們必須有人去 merge 那些 code.
除了 OpenGL ES API之外, 同時還要處理相關圖檔格式的支援,
如 ETC, PVR, webp 等.
以上種種, 當時我們剛好有神人級同事幫忙 carry,
在很快的時間內補完這些功能,
才讓手機遊戲專案避免延遲進度的災難.
另外就是對美術與企劃同事來說要面對的災難級問題:
編輯器.
之前已提過我們必須自己改寫自己要用的編輯器,
也因此編輯器上的所有功能都必須自行想辦法解決,
當然寫出來的功能方便性無法與其他商用工具相比,
結果就變成編輯能力有限, 又讓同事邊用邊罵的工具了.
其實平心而論,
irrlicht 還是對開發者很友善的 open source 團體,
畢竟他們提供的一切都是免費開放, 並同意任何用途的修改的.
我們的製作團隊就在靠自己雙手的情況下,
陸續補完重要的模組:
shaders (lighting / transparent / reflection / refraction / ...)
shadow mapping,
image / mesh import,
particle system,
animation effect editor,
navigation,
parallel processing (for animation / skinning / ...),
state machine,
....
之後, 像跑過一次有點奇幻的旅程般, 把遊戲即時完成並成功上架.
坦白講我一開始聽到要接手 irrlicht 時我還覺得可能蠻有趣的,
但老實說最後我對這個過程只留下負評.
重點即是我們花了太多工時在做本來不必做的事.
很多功能諸如 image / mesh ; navigation ; UI 等等,
在使用其他 engine 工具時都是可以不必花這麼多時間去處理的,
這樣拖慢了開發進度,
但同時對公司整體的開發能量又沒有太大幫助,
(因為我們開發出來的工具連公司內部其他同事都不會去用).
So,
大致上 5 年來的使用經驗介紹到此.
有興趣的人也可以去官網下載來玩, 跑一些他們的 sample.
因緣際會之下,
2011年底我換工作來到一家新創遊戲公司,
這家公司的決定讓我覺得很有趣(本來是這樣),
他們想要擁有自家 game engine技術,
想要發展自己的 game development 工具與製程,
而那時他們的選擇是 irrlicht 這款 open sourced game engine.
就這樣開啟了 5 年來我與 irrlicht 交手的過程.
先說結論,
就像任何一個 open source 專案一樣,
irrlicht 管理方都只是用自己 part time的時間幫忙維護與開發.
所以可以想像這是一個你看完 demo 之後,
其他功能要什麼沒什麼的工具.
唯一可說嘴的就是 source code 可以無用途限制地讓人修改.
但世界上最有名的一句名言即是:
"免錢的最貴".
所以真的要拿這種工具來製作商業產品,
我想只能用 painful 來形容了.
大致上介紹一下它的架構:
以 source code 來分析的話, irrlicht 主要分為以下幾個 component:
1. VideoDriver : 處理所有繪圖底層與資源相關 API 功能.
2. SceneManager : 場景管理相關功能與演算法.
3. FileSystem : 檔案系統化處理功能.
4. GUIEnvironment : 處理 UI, 最悲劇的部份.
5. Device : 實作各平台視窗顯示與遊戲啟動機制, 坦白說這部份他們做的還蠻用心的.
嗯, 主要的都介紹完了,
那麼重點來了, 是的, 它們並沒有提供 editor (當然他們沒有義務).
但沒有 editor 也是個嚴重的問題,
因此當時我們公司的做法是找到幫 irrcliht 實作過 editor 的某個第三方對象,
直接跟他們購買 source code, 拿回來做我們要的客製化.
再來接下來就是抱怨時間了(誤).
可以透過以下幾個描述來說明"免錢的最貴" 這點.
首先官方自己在 stable release 版中支援的底層 graphics API 只有:
1. D3D8, D3D9,
2. OpenGL 1.x-2.0 (fixed function + programmable).
3. 他們自己寫的 software based driver(看起來比較像是學術研究用途).
因此第一個面對到的情況便是:
如果真的打算用 OpenGL 3.x+ 以上的功能,
就必須自己全部 wrap 一遍, 重寫自己的 video driver.
而更嚴重的問題便是,
想當然地他們官方還沒開始正式支援 OpenGL ES API.
雖然有很多第三方的人幫忙他們擴充,
但直到現在, 仍沒有正式將那些 iOS/Android branch merge 回到 stable release版.
也因此, 在3-4年前我們開始正式啟動手機遊戲開發時,
我們必須有人去 merge 那些 code.
除了 OpenGL ES API之外, 同時還要處理相關圖檔格式的支援,
如 ETC, PVR, webp 等.
以上種種, 當時我們剛好有神人級同事幫忙 carry,
在很快的時間內補完這些功能,
才讓手機遊戲專案避免延遲進度的災難.
另外就是對美術與企劃同事來說要面對的災難級問題:
編輯器.
之前已提過我們必須自己改寫自己要用的編輯器,
也因此編輯器上的所有功能都必須自行想辦法解決,
當然寫出來的功能方便性無法與其他商用工具相比,
結果就變成編輯能力有限, 又讓同事邊用邊罵的工具了.
其實平心而論,
irrlicht 還是對開發者很友善的 open source 團體,
畢竟他們提供的一切都是免費開放, 並同意任何用途的修改的.
我們的製作團隊就在靠自己雙手的情況下,
陸續補完重要的模組:
shaders (lighting / transparent / reflection / refraction / ...)
shadow mapping,
image / mesh import,
particle system,
animation effect editor,
navigation,
parallel processing (for animation / skinning / ...),
state machine,
....
之後, 像跑過一次有點奇幻的旅程般, 把遊戲即時完成並成功上架.
坦白講我一開始聽到要接手 irrlicht 時我還覺得可能蠻有趣的,
但老實說最後我對這個過程只留下負評.
重點即是我們花了太多工時在做本來不必做的事.
很多功能諸如 image / mesh ; navigation ; UI 等等,
在使用其他 engine 工具時都是可以不必花這麼多時間去處理的,
這樣拖慢了開發進度,
但同時對公司整體的開發能量又沒有太大幫助,
(因為我們開發出來的工具連公司內部其他同事都不會去用).
So,
大致上 5 年來的使用經驗介紹到此.
有興趣的人也可以去官網下載來玩, 跑一些他們的 sample.
2017年2月4日 星期六
起個頭
之前偶爾寫網誌時就有想過要寫個工作方面的網誌內容
因為懶和忙, 一直沒有付諸行動
去年開始對公司決策方面的不滿讓我開始思考很多事情
並且漸漸覺得我是不是該動手做一些自己覺得正確的事情
如果說我有遇到什麼事像是催化劑一般地開始驅動我的話
那就是去年(2016)我完整看完導演趙德胤的報導介紹了吧
https://www.twreporter.org/a/director-midi-z
看著他有如虛幻情節的人生中掙扎與奮鬥
孤注一擲後終於成功闖出一片天
其中的風險大到會直接讓他失去性命
但他仍然像鬥士一般地完成他自己的夢想
那我呢
我總是問我的夢想是什麼
我什麼時候才要真的動手去實現我的夢想呢?
高中時第一次看到 Final Fantasy 7
我目不轉睛地盯著看好幾個小時
到後來真的有機會玩到並且玩到忘我的程度
然後在學期間接觸到有點相關的科目領域時
我就總是會忘我的投入去做自己喜歡的東西
並且夢想著是不是我有一天
也可以完成一個 Final Fantasy 一般規模的藝術品
工作多年後
為了公事與家庭兼顧
有幾年我總覺得夢想太過遙遠不必在意
但現在已投身遊戲業多年的我
想著自己還要如此消極幾年呢
如果我有機會完成一個自己心目中的作品
我要拼多大賭多大呢?
2016年過後我心中已有答案了
我要一步一步的去實作
要往那個方向前進了
不會再虛度光陰並騙自己, 我不屬於那群人, 我沒有那個本錢去賭.
先做
再看有多少可以賭
那麼, 該怎麼開始呢?
多年來我在工作領域上雖說不上是多上進
但學習到一點東西成果還是有
靠的多是網路上公開的資源平台 (Stack Overflow | GameDev | ....)
那麼就像2015年在Epic Game官網看到他們說的:
"Code is copyrighted, knowledge is free!"
我也該回饋一點東西
回饋的同時, 也許也可以精進自己的某一部份
該開始了
我知道我想做什麼
因為懶和忙, 一直沒有付諸行動
去年開始對公司決策方面的不滿讓我開始思考很多事情
並且漸漸覺得我是不是該動手做一些自己覺得正確的事情
如果說我有遇到什麼事像是催化劑一般地開始驅動我的話
那就是去年(2016)我完整看完導演趙德胤的報導介紹了吧
https://www.twreporter.org/a/director-midi-z
看著他有如虛幻情節的人生中掙扎與奮鬥
孤注一擲後終於成功闖出一片天
其中的風險大到會直接讓他失去性命
但他仍然像鬥士一般地完成他自己的夢想
那我呢
我總是問我的夢想是什麼
我什麼時候才要真的動手去實現我的夢想呢?
高中時第一次看到 Final Fantasy 7
我目不轉睛地盯著看好幾個小時
到後來真的有機會玩到並且玩到忘我的程度
然後在學期間接觸到有點相關的科目領域時
我就總是會忘我的投入去做自己喜歡的東西
並且夢想著是不是我有一天
也可以完成一個 Final Fantasy 一般規模的藝術品
工作多年後
為了公事與家庭兼顧
有幾年我總覺得夢想太過遙遠不必在意
但現在已投身遊戲業多年的我
想著自己還要如此消極幾年呢
如果我有機會完成一個自己心目中的作品
我要拼多大賭多大呢?
2016年過後我心中已有答案了
我要一步一步的去實作
要往那個方向前進了
不會再虛度光陰並騙自己, 我不屬於那群人, 我沒有那個本錢去賭.
先做
再看有多少可以賭
那麼, 該怎麼開始呢?
多年來我在工作領域上雖說不上是多上進
但學習到一點東西成果還是有
靠的多是網路上公開的資源平台 (Stack Overflow | GameDev | ....)
那麼就像2015年在Epic Game官網看到他們說的:
"Code is copyrighted, knowledge is free!"
我也該回饋一點東西
回饋的同時, 也許也可以精進自己的某一部份
該開始了
我知道我想做什麼
訂閱:
文章 (Atom)




