發表文章

目前顯示的是 2019的文章

HP Reverb & Oculus Rift S 停用睡眠功能

圖片
  VR顯示器都帶有自動睡眠功能來避免螢幕老化 (burn-in),但這對開發者或是展示時有很大的困擾,當VR顯示器進入睡眠模式後,體驗內容會造成畫面嚴重延遲,若在多人連線下則會造成伺服器與客戶端失去同步,在甦醒後還有機率會發生VR顯示器需要重新定位的問題。 -------------------- HP Reverb (適用其他windows mixed reality體系頭盔)  Enable Screen Saver Mode - 啟用螢幕保護模式  此模式將停用睡眠模式,頭盔閒置時會關閉螢幕,但不會失去控制,直到重新戴上頭盔時螢幕會恢復顯示。 reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Holographic /v ScreensaverModeEnabled /t REG_DWORD /d 1  // 1 to enable screen saver mode  // 0 to disable screen saver mode  // Windows version 1903 or newer  Set Idle Timer Duration To Default - 設定休眠間隔時間 (預設15分鐘) reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Holographic /v IdleTimerDuration /t REG_DWORD /d 900000  // Warning: Changing this idle timer to longer than the default can lead to Screen burn-in on Mixed Reality Headsets  // The Mixed Reality Portal idle timer specified in milliseconds Oculus Rift S  OculusCompatCheck.exe - 相容性測試  // C:\Program Files\Oculus\Support\oculus-compat  OculusDebugTool.exe - 除錯工具 (含跳過接

UE4中實現OPC UA Client來控制PLC

緣由與介紹    OPC Foundation    OPC (Open Platform Communications)    OPC UA 實作參考    Labview控制PLC使用OPC   商業授權方案 -  LabView  +  LabVIEW OPC UA Toolkit    Qt OPC UA open62541實現 (OPC UA C++ Library)    open62541 - github    open62541 - documentation -------------------------------------------------- 專案說明 本案硬體需與UE4連動,使用OPC來管理,透過PLC去控制,將open62541 (OPC UA C++  Library) 整理成UE4 plugin,可直接在UE4中直接使用 blueprint function library 呼叫方法來讀取、寫入PLC中的數值。   硬體端負責工作:硬體與相關感測器整合、PLC串接與控制、建立OPC Server   軟體端負責工作:建立OPC Client並整合至UE4,可讀取/寫入PLC中的數值 已實現方法   UA Client Connect   UA Client ReadValueAttribute   UA Client WriteValueAttribute   UA Client Disconnect

開放源碼授權類型簡介與選擇

圖片
Yuren Ju發表了關於開放源碼授權的系列文 開放源碼授權概觀(上) 開放源碼授權概觀(下) 文中用淺顯易懂重點摘錄的方式來說明各授權的差異,能夠快速瞭解各授權限制,判斷自己該怎麼選擇與使用。 不同授權的嚴謹程度 圖片出自於 AMIS “ 如果是我個人的開源專案,通常會採用最鬆散的 MIT 授權,讓使用者可以自由的使用,要開源要閉源都可以,並沒有太多的限制。 如果是公司的開源專案,則會選擇定義較為詳實的 Apache 2.0 授權,跟 MIT 授權相同也允許被授權人開源或閉源使用,但在著作權規範的較為仔細,同時也規範了專利權。而因為每個國家的著作權法律都有所不同,詳細的授權也比較容易跨國使用,不會因為不同國家的預設著作權行為造成一些差異。 但如果公司的專案有引用到任何 LGPL 的授權時,我們通常都會採用 LGPL 授權,原因是因為 golang 專案通常都採用靜態連結的方式,授權為 LGPL 會讓情況比較單純一些。 ” 快速簡易選擇建議 段落引用自  AMIS

Logitech G29 control mapping in UE4 (using Raw Input Plugin)

Logitech G29 control mapping in UE4 (using Raw Input Plugin) https://docs.unrealengine.com/zh-CN/Gameplay/Input/RawInput/index.html Logitech G29 Vendor ID : 0x046D Product ID : 0xC24F Logitech Wheel (方向盤) :   axis properties index = 1   offset = -0.5   scale = 3.0 Logitech Brake Pedal (煞車) :   axis properties index = 3   inverted = true   offset = 1.0   scale = -2.0 Logitech Accelerator Pedal (油門) :   axis properties index = 4   inverted = true   offset = 1.0 Logitech POV (十字鍵) :   axis properties index = 0   scale = 0.875

Windows10 版本1607後可啟用支援長路徑檔名 (Maximum Path Length Limitation)

在Windows中一般情況下最大路徑長度被限制在260個字元,Windows 10 版本1607後開始可以啟用支援長路徑。 啟用長路徑: Win + S鍵,輸入regedit,執行登錄編輯程式 找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled 並設定為1 為了使系統順利套用此設定建議重新啟動電腦,因為某些程序可能在設置之前已經啟動 // 在UE4開發中,偶爾會發生路徑過長導致打包失敗的情況,若系統版本支援,可嘗試使用此方法來改善 細節詳見 Microsoft Windows Dev Center - Naming Files, Paths, and Namespaces

UE4破碎功能初探 (Apex Destruction)

圖片
導讀: UE4官方文件參數說明- 可破壞物屬性矩陣 APEX Destruction in UE3 Destructibles官方範例在4.18後版本遭拔除,若想看UE4官方應用範例需下載4.17版本之前的ContentExamples專案,位於/Content/Maps/Destructible.umap 在4.18版本後Destructibles功能被分離至 Apex Destruction Plugin,需至Plugins裡啟用重啟編輯器後才能使用 ------------------------ 以下整理一下常見問題解決 欲製作破碎效果之網格事前準備 若網格有太長的三角面、多邊形面、單邊平面、非閉合幾何圖形,則製作破碎時容易有異常結果 想製作局部破壞效果須以下設定 Support depth = 1 // 支援深度至層級1 Enable impact damage = true, Impact damage = 1.0 // 受投擲物物理碰撞計算給予傷害 World support = true // 破碎物件將固定在靜態網格上 碎片刪除機制 Enable debris = true, Debris depth =1 //啟用殘骸功能至層級1 Debris timeout = true, Debris lifetime min & max // 設定殘骸生命週期 Debris max separation = true, Debris max separation min & max // 依離本體距離判定刪除 Use valid bounds = true, Valid bounds min & max // 依邊界設定判定刪除 碎片內部材質設定 Interior element index // 預設使用網格第一顆材質球 // UE4.21有Bug,欲使用破片內部材質原Mesh需有兩顆材質球才能正常使用 Chunk parameters無法設定 若視角太遠則無法正確選取該碎片 碎片粒子效果應用 (Fracture effects) index 0用於depth 0, index 1用於depth 1 依此類推 其他應用參考: Destructible Troubleshootin

UE4 大圖輸出 (HighResScreenshot)

導讀 如果你對「像素」、「印刷尺寸」、「DPI」之間的關係還不夠熟悉可先參考以下連結 數位影像、像素、影像大小、解析度、列印尺寸 照片印刷不失真,你真的會 DPI 換算嗎? 在UE4中欲擷圖供大圖輸出 在UE4中可透過High Resolution Screenshot功能來取得大像素圖檔,但在實際使用上有一些限制與瓶頸,本篇文章將詳細介紹細節與測試案例分享 一、計算目標像素大小 假設設定目標印刷尺寸為 140 x 220 cm,350 DPI,則得出欲取得像素尺寸為 19291 x 30315 px 計算像素大小 方法一,透過影像處理軟體的影像尺寸來做換算 方法二, 線上轉算工具 二、高解析擷圖 (解析限制與操作瓶頸) UE4編輯器內建高解析擷圖工具倍率最高限制為10倍 擷圖期間若電腦記憶體不足,則會程序崩潰 擷圖像素尺寸過大會直接顯示系統不支援 // 編輯器內建擷圖工具,基準1倍是指當前viewport大小 // 編輯器擷圖工具最高倍率限制應可修改引擎原始碼來突破限制 // 此處系統不支援應是指顯卡渲染架構限制 UE4 AnserHub: HighResShot multiplier too large 「the screenshot is being rendered to a texture, not just a memory buffer, so it will be limited by the maximum size of a texture in the graphics pipeline.」 「In Direct3D 11, it looks like it's set (by DirectX) at the max size of 16384」 三、測試與案例分享 若記憶體為16GB,則最大操作上限約為 viewport size: Full HD x 8倍 記憶體使用48GB,可支援 viewport size: Full HD x 10倍 取得像素約 6000 x 12000 px 記憶體使用48GB,使用4K螢幕,倍率設定4.8倍 取得像素約 10000 x 16000 px 擴展 viewport大小 方法一,UE4 editor -> edi

AR技術應用 簡易分類

1) 基本型 主要架構為攝影機畫面融合虛擬畫面,細分為攝影機畫面(背景)+虛擬畫面(前景)、攝影機畫面(前景)+虛擬畫面(背景)兩種,此類型限制為固定攝影機視角 關鍵字:AR、圖片去背、影片去背、綠幕合成 https://www.youtube.com/watch?v=KUjSZBbGUlo 2)進階型 - 虛擬畫面可被實景所遮蔽 可透過事先定義之遮罩來實現 關鍵字:AR、遮蔽 https://www.youtube.com/watch?v=3KoxtAmvaoQ 3)進階型 - 攝影機可自由控制 須外加輔助標記物或空間定位裝置,細分兩種虛擬物件添加實體標記、在攝影機上加裝空間定位追蹤 關鍵字:AR、追蹤(track) https://www.youtube.com/watch?v=Gp2L_j1TTII https://www.youtube.com/watch?v=8v78vSaQH8U 4)商務型 - 實景光照能反映至虛擬物件 製作難度略高,需相關專業設備(投影牆、光照資訊擷取設備),軟體同步也較複雜(視角與即時光照變化) 關鍵字:AR、即時合成 https://www.unrealengine.com/zh-CN/spotlights/unreal-powers-on-the-fly-compositing-with-handheld-camera

UE4使用TcpSocket發生畫面凍結問題 (socket block)

情況說明: 在UE4中透過winsock來與客戶傳輸資料,保持連線且雙向傳輸(雙方都有傳送與接收),對方在長時間閒置下會停止傳送與接收,我這邊仍持續傳送與接收,最終引發socket block,又因在這個案例中我僅socket->recv()有做thread,send()則無,所以最後ue4 main thread被send()卡住,造成UE4畫面凍結。 解法: socket->SetNonBlocking(); // 將此socket設定為非阻塞模式,預設為阻塞模式 ue4 socket實現參考 socket block ------------------------------------- 延伸閱讀 Online Subsystem模組為UE4提供一些用於跟Steam, Xbox Live, Facebook...等外部網路服務連接的接口。而winsock也被封裝在內 FSocket* socket = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM) ->CreateSocket(NAME_Stream, TEXT("default"), false); // 這裡的 "PLATFORM_SOCKETSUBSYSTEM" 會判定你使用的作業系統 // 這邊的 "NAME_Stream" 則決定選用哪種的socket type 這邊使用 "NAME_Stream" 最終追蹤到 c:\Program Files (x86)\Windows Kits\8.1\Include\um\winsock.h,內容實現則在WINSOCK.DLL裡 // windows裡還有分 winsock.h 跟 WinSock2.h 就不在這討論 Online Subsystem UE4网络底层概览 Facebook Online Subsystem WinSock TCP keepalive的机理及使用

Install SteamVR without Steam

Make a standalone version of SteamVR * copy and zip folder C:\Program Files (x86)\Steam\steamapps\common\SteamVR Use a standalone version of SteamVR * check all cable connected on PC and driver installed * upzip SteamVR.zip * execute ...\SteamVR\bin\win64\vrstartup.exe or vrmonitor.exe

Unreal Engine 4 Project File Re-association

Unreal Engine 4 Project File Re-association

UE4 3D widget for VR (will not be obscured)

圖片
準備一個Widget Blueprint    Create Advanced Asset -> User Interface -> Widget Blueprint 建立一個Actor BP    新增元件 Widget Component      - 指定Widget Class為剛剛準備好的Widget Blueprint      - 取消勾選Rendering.RenderInMainPass // 不要顯示,由StereoLayer顯示不然會有兩個    新增元件 Stereo Layer      - 勾選StereoLayer.LiveTexture // 持續更新內容      - 指定類型StereoLayer.StereoLayerType // FaceLocked=隨攝影機移動旋轉、TrackerLocked=固定位置    Event Graph 將完成的Actor BP放置在場景上