本發明涉及視頻制作領域,尤其涉及一種對unity3d程序進行全景視頻錄制方法及系統。
背景技術:
unity3d是由unitytechnologies開發的一個讓玩家輕松創建諸如三維視頻游戲、建筑可視化、實時三維動畫等類型互動內容的多平臺的綜合型游戲開發工具,是一個全面整合的專業游戲引擎。現有的3d游戲大多使用unity3d引擎開發。
隨著信息技術的發展,目前新開發的3d游戲中大多自帶有錄制全景視頻的功能,使錄制的視頻不受特定視角的限制,可完整還原三維空間的完整場景。但是,早期開發的3d游戲大部分沒有錄制全景視頻的功能,若要在沒有錄制全景視頻功能的3d游戲中添加該功能,需要通過修改源碼的方式實現。然而,游戲的源碼量大多比較龐大,且早期開發該游戲的程序人員可能早已調離其它項目組,新的工程師對該游戲的源碼進行修改需要耗費大量不必要的時間和精力。
技術實現要素:
本發明所要解決的技術問題是:提供一種對unity3d程序進行全景視頻錄制方法及系統,實現對于未開發錄制全景視頻功能的游戲系統,無需修改游戲系統的源碼即可新增該功能。
為了解決上述技術問題,本發明采用的技術方案為:
本發明提供一種對unity3d程序進行全景視頻錄制方法,包括:
當unity3d引擎處于運行時狀態時,通過hook技術在unity3d引擎的內部函數上掛載預設的全景視頻錄制腳本;所述內部函數為刷新三維場景時需調用的函數;
執行所述全景視頻錄制腳本中添加六個以上攝像機對象至所述三維場景的操作;
當unity3d引擎刷新所述三維場景時,執行所述全景視頻錄制腳本中觸發所述攝像機對象截取場景圖片的操作;
執行所述全景視頻錄制腳本中根據所述場景圖片制作全景視頻的操作。
本發明還提供一種對unity3d程序進行全景視頻錄制系統,包括:
掛載模塊,用于當unity3d引擎處于運行時狀態時,通過hook技術在unity3d引擎的內部函數上掛載預設的全景視頻錄制腳本;所述內部函數為刷新三維場景時需調用的函數;
添加模塊,用于執行所述全景視頻錄制腳本中添加六個以上攝像機對象至所述三維場景的操作;
截取模塊,用于當unity3d引擎刷新所述三維場景時,執行所述全景視頻錄制腳本中觸發所述攝像機對象截取場景圖片的操作;
制作模塊,用于執行所述全景視頻錄制腳本中根據所述場景圖片制作全景視頻的操作。
本發明的有益效果在于:通過向處于運行時狀態的unity3d引擎,添加六個以上攝像機對象至三維場景捕獲不同角度的場景圖片,并根據場景圖片制作全景視頻,實現無需在游戲系統的開發階段往unity3d程序中加入錄制腳本,就能夠實現對三維場景的全景錄制,從而使得原不具有錄制全景視頻功能的游戲系統在無需修改源碼的情況下,實現游戲過程中的全景視頻錄制,極大程度上減少了為不具有錄制全景視頻功能的游戲系統添加全景視頻錄制功能所需耗費的時間和精力。
附圖說明
圖1為本發明提供的一種對unity3d程序進行全景視頻錄制方法的具體實施方式的流程框圖;
圖2為本發明提供的一種對unity3d程序進行全景視頻錄制系統的具體實施方式的結構框圖;
圖3為本發明提供的一種對unity3d程序進行全景視頻錄制方法實施例的流程框圖;
圖4為本發明提供的一種對unity3d程序進行全景視頻錄制系統實施例的結構框圖;
標號說明:
1、掛載模塊;2、添加模塊;3、截取模塊;4、制作模塊;41、第一合成單元;42、第二合成單元;5、第一綁定模塊;6、解綁模塊;7、第二綁定模塊;8、設置模塊。
具體實施方式
為詳細說明本發明的技術內容、所實現目的及效果,以下結合實施方式并配合附圖予以說明。
本發明最關鍵的構思在于:通過向處于運行時狀態的unity3d引擎,添加六個以上攝像機對象至三維場景捕獲不同角度的場景圖片,并根據場景圖片制作全景視頻,實現對于未開發錄制全景視頻功能的游戲系統,無需修改游戲系統的源碼即可新增該功能。
請參照圖1至圖4:
如圖1所示,本發明提供一種對unity3d程序進行全景視頻錄制方法,包括:
當unity3d引擎處于運行時狀態時,通過hook技術在unity3d引擎的內部函數上掛載預設的全景視頻錄制腳本;所述內部函數為刷新三維場景時需調用的函數;
執行所述全景視頻錄制腳本中添加六個以上攝像機對象至所述三維場景的操作;
當unity3d引擎刷新所述三維場景時,執行所述全景視頻錄制腳本中觸發所述攝像機對象截取場景圖片的操作;
執行所述全景視頻錄制腳本中根據所述場景圖片制作全景視頻的操作。
進一步地,還包括:
執行所述全景視頻錄制腳本中綁定所述攝像機對象與所述三維場景中的第一角色對象的操作。
由上述描述可知,當第一角色對象移動時,攝像機對象也隨之移動,實現以三維場景中一角色對象為中心錄制全景視頻。
進一步地,還包括:
執行所述全景視頻錄制腳本中解綁所述攝像機對象與所述第一角色對象的操作;
執行所述全景視頻錄制腳本中綁定所述攝像機對象與所述三維場景中的第二角色對象的操作。
由上述描述可知,實現在錄制過程中可切換錄制視角,以另一角色對象為中心錄制全景視頻。
進一步地,還包括:
執行所述全景視頻錄制腳本中設置所述六個以上攝像機對象朝向預設多面體的不同面的操作。
由上述描述可知,將六個以上攝像機綁定在同一角色對象上之后,設置六個以上攝像機對象分別朝向預設多面體的不同面,使得六個以上攝像機對象截取到的場景圖片可構成全景幀。
進一步地,根據所述場景圖片制作全景視頻,具體為:
合成同一時刻不同所述攝像機對象截取的所述場景圖片,得到全景幀;
按時序合成所述全景幀,得到全景視頻。
由上述描述可知,實現將攝像機對象獲取到的場景圖片合成全景視頻。
如圖2所示,本發明還提供一種對unity3d程序進行全景視頻錄制系統,包括:
掛載模塊1,用于當unity3d引擎處于運行時狀態時,通過hook技術在unity3d引擎的內部函數上掛載預設的全景視頻錄制腳本;所述內部函數為刷新三維場景時需調用的函數;
添加模塊2,用于執行所述全景視頻錄制腳本中添加六個以上攝像機對象至所述三維場景的操作;
截取模塊3,用于當unity3d引擎刷新所述三維場景時,執行所述全景視頻錄制腳本中觸發所述攝像機對象截取場景圖片的操作;
制作模塊4,用于執行所述全景視頻錄制腳本中根據所述場景圖片制作全景視頻的操作。
進一步地,還包括:
第一綁定模塊5,用于執行所述全景視頻錄制腳本中綁定所述攝像機對象與所述三維場景中的第一角色對象的操作。
進一步地,還包括:
解綁模塊6,用于執行所述全景視頻錄制腳本中解綁所述攝像機對象與所述第一角色對象的操作;
第二綁定模塊7,用于執行所述全景視頻錄制腳本中綁定所述攝像機對象與所述三維場景中的第二角色對象的操作。
進一步地,還包括:
設置模塊8,用于執行所述全景視頻錄制腳本中設置所述六個以上攝像機對象朝向預設多面體的不同面的操作。
進一步地,所述制作模塊包括:
第一合成單元41,用于合成同一時刻不同所述攝像機對象截取的所述場景圖片,得到全景幀;
第二合成單元42,用于按時序合成所述全景幀,得到全景視頻。
由上述描述可知,本發明提供的對unity3d程序進行全景視頻錄制系統,實現對于未開發錄制全景視頻功能的游戲系統,無需修改游戲系統的源碼即可新增該功能。
如圖3所示,本發明的實施例一為:
s1、當unity3d引擎處于運行時狀態時,通過hook技術在unity3d引擎的內部函數上掛載預設的全景視頻錄制腳本;所述內部函數為刷新三維場景時需調用的函數;
其中,使用反射原理,即通過reflection等.net語言開發編譯工具,查看動態鏈接庫unityengine.dll的內部實現,找到需新增錄制全景視頻功能游戲程序的unity3d引擎動態鏈接庫unityengine.dll的內部函數camera.fireonprecull,并通過hook技術將預設的全景視頻錄制腳本掛載在內部函數camera.fireonprecull上。此后,每當unity3d引擎調用內部函數camera.fireonprecull時,都會先執行預設的全景視頻錄制腳本。由于內部函數camera.fireonprecull在照相機對象進行消隱操作前調用,而每當刷新三維場景時,三維場景中的照相機對象都必須執行消隱操作,因此,將預設的全景視頻錄制腳本對象掛載在內部函數camera.fireonprecull上能夠記錄游戲過程中的每一幀。
s2、執行所述全景視頻錄制腳本中添加六個以上攝像機對象至所述三維場景的操作;
其中,將預設的全景視頻錄制腳本中的錄制函數recorderbehaviour掛載到unity三維場景中的gameobject(即三維場景中的物體對象)上。錄制函數recorderbehaviour繼承自unitysdk的公共基類monobehaviour,負責在三維場景中添加六個以上攝像機對象。
s3、執行所述全景視頻錄制腳本中綁定所述攝像機對象與所述三維場景中的第一角色對象的操作;
其中,設置六個以上攝像機對象位于第一角色對象的中心點,并跟隨第一角色對象移動。
s4、執行所述全景視頻錄制腳本中設置所述六個以上攝像機對象朝向預設多面體的不同面的操作;
其中,當攝像機對象為六個時,設置六個攝像機對象分別朝向正上方、正下方、正左方、正右方、正前方和正后方,使得六個攝像機對象拍攝的區域構成一個立方體。錄制三維場景所需的攝像機對象個數至少為六個,隨著攝像機對象個數的增加,可更全面地錄制三維場景。
s5、在unity3d引擎刷新所述三維場景前,判斷是否需要切換全景視頻錄制視角,若判斷結果為要切換錄制視角,則執行所述全景視頻錄制腳本中解綁所述攝像機對象與所述第一角色對象的操作;執行所述全景視頻錄制腳本中綁定所述攝像機對象與所述三維場景中的第二角色對象的操作;
s6、當unity3d引擎刷新所述三維場景時,執行所述全景視頻錄制腳本中觸發所述攝像機對象截取場景圖片的操作;
s7、執行所述全景視頻錄制腳本中根據所述場景圖片制作全景視頻的操作;具體為:
合成同一時刻不同所述攝像機對象截取的所述場景圖片,得到全景幀;
按時序合成所述全景幀,得到全景視頻。
由上述描述可知,本實施例提供一種對unity3d程序進行全景視頻錄制方法,實現對于未開發錄制全景視頻功能的游戲系統,無需修改游戲系統的源碼即可新增該功能。
如圖4所示,本發明的實施例二為:
當unity3d引擎處于運行時狀態時,掛載模塊通過hook技術在unity3d引擎的內部函數上掛載預設的全景視頻錄制腳本;其中,所述內部函數為刷新三維場景時需調用的函數camera.fireonprecull;
添加模塊執行所述全景視頻錄制腳本中添加六個以上攝像機對象至所述三維場景的操作;具體為:將預設的全景視頻錄制腳本中的錄制函數recorderbehaviour掛載到unity三維場景中的gameobject上,其中錄制函數recorderbehaviour繼承自unitysdk的公共基類monobehaviour,負責在三維場景中添加六個以上攝像機對象;
第一綁定模塊執行所述全景視頻錄制腳本中綁定所述攝像機對象與所述三維場景中的第一角色對象的操作;具體為:設置六個以上攝像機對象位于第一角色對象的中心點;
設置模塊執行所述全景視頻錄制腳本中設置所述六個以上攝像機對象朝向預設多面體的不同面的操作;例如,當攝像機對象為六個時,設置六個攝像機對象分別朝向正上方、正下方、正左方、正右方、正前方和正后方,使得六個攝像機對象拍攝的區域構成一個立方體;
當unity3d引擎刷新所述三維場景時,截取模塊執行所述全景視頻錄制腳本中觸發所述攝像機對象截取場景圖片的操作;
制作模塊執行所述全景視頻錄制腳本中根據所述場景圖片制作全景視頻的操作;具體為:第一合成單元合成同一時刻不同所述攝像機對象截取的所述場景圖片,得到全景幀;第二合成單元按時序合成所述全景幀,得到全景視頻。
在錄制全景視頻的過程中,還可通過解綁模塊執行所述全景視頻錄制腳本中解綁所述攝像機對象與所述第一角色對象的操作;第二綁定模塊執行所述全景視頻錄制腳本中綁定所述攝像機對象與所述三維場景中的第二角色對象的操作。實現切換錄制視角。
由上述描述可知,通過本實施例提供的對unity3d程序進行全景視頻錄制系統,可在未開發錄制全景視頻功能的游戲系統上便捷地增加該功能。
綜上所述,本發明提供的一種對unity3d程序進行全景視頻錄制方法及系統,通過向處于運行時狀態的unity3d引擎,添加六個以上攝像機對象至三維場景捕獲不同角度的場景圖片,并根據場景圖片制作全景視頻,實現無需在游戲系統的開發階段往unity3d程序中加入錄制腳本,就能夠實現對三維場景的全景錄制,從而使得原不具有錄制全景視頻功能的游戲系統在無需修改源碼的情況下,實現游戲過程中的全景視頻錄制,極大程度上減少了為不具有錄制全景視頻功能的游戲系統添加全景視頻錄制功能所需耗費的時間和精力。進一步地,由上述描述可知,當第一角色對象移動時,攝像機對象也隨之移動,實現以三維場景中一角色對象為中心錄制全景視頻。進一步地,還包括:實現在錄制過程中可切換錄制視角,以另一角色對象為中心錄制全景視頻。進一步地,將六個以上攝像機綁定在同一角色對象上之后,設置六個以上攝像機對象分別朝向預設多面體的不同面,使得六個以上攝像機對象截取到的場景圖片可構成全景幀。進一步地,實現將攝像機對象獲取到的場景圖片合成全景視頻。
以上所述僅為本發明的實施例,并非因此限制本發明的專利范圍,凡是利用本發明說明書及附圖內容所作的等同變換,或直接或間接運用在相關的技術領域,均同理包括在本發明的專利保護范圍內。