全文3200字,版本V1,寫于2019-05-10夜,可直接從正文開始看,歡迎轉(zhuǎn)載(修改請(qǐng)不要?jiǎng)h除前言)
前言:
注:文章為第一版,記為V1,以后會(huì)慢慢修改,更新記為V2,V3等.以后文章也會(huì)按照這一格式
文章包含詞匯:??
? ? ?? ?HDA 格式(全稱?houdini?digital asset ,是ue4,unity,maya等軟件所能識(shí)別的houdini文件格式)?
? ? ? ? VEX(houdini的內(nèi)置編程語言,類似于c/c++,houdini也支持python,但效率不如vex)
? ? ? ? PDG(全稱:?Procedural Dependency Graph .houdini17.5新出的功能,可以高效,快速的生成不同類型的資產(chǎn),官方連接:https://www.sidefx.com/products/pdg/)
? ? ? ? 游戲資產(chǎn)(個(gè)人從某處學(xué)到的詞,是模型,uv,紋理,lod,碰撞等游戲資源的統(tǒng)稱,拿來使用,請(qǐng)諸位理解)
正文
常見觀點(diǎn)一:用的少,應(yīng)用范圍狹小,投入成本高
?Procedural的應(yīng)用確實(shí)取決于項(xiàng)目需求,例如蜘蛛俠中的曼哈頓場(chǎng)景便是houdini,便極大的提高了制作效率,有些人認(rèn)為只有大場(chǎng)景才能用的上houdini,這是高估了Procedural的威力,Procedural流程并不是一個(gè)程序解決游戲開發(fā)中的所有問題.Procedural的重點(diǎn)在于設(shè)置一些小插件,優(yōu)化工作流程,細(xì)節(jié)設(shè)計(jì)上采用procedural流程上更能發(fā)揮出houdini的優(yōu)勢(shì),例如,要給山體設(shè)置階梯,傳統(tǒng)方法是手動(dòng)擺放,若遇到山體修改,則需要手動(dòng)修正階梯角度,且很難避免因?yàn)槟P徒嵌茸兓鴮?dǎo)致的前后連接問題.而houdini可以實(shí)時(shí)調(diào)節(jié)模型與山體的關(guān)系(如下圖).畢竟修改返工是設(shè)計(jì)師的痛苦根源,而houdini在一定程度能幫助大家減少修改的次數(shù),降低痛苦.熟悉houdini者設(shè)置此類HDA不會(huì)超過20分鐘,投入的時(shí)間成本很低.

?常見觀點(diǎn)二:procedural生成是一次性的,定制化的東西,每次還要專門diy一個(gè)程序
答:蜘蛛俠的曼哈頓場(chǎng)景就是houdini生成的,確實(shí)是一次性的,定制化的,別人游戲開發(fā)商用不到,或者自己不再做以曼哈頓為背景的游戲也用不到.
但實(shí)際整個(gè)hda(ue4,unity,maya等軟件所能識(shí)別的houdini文件格式)工程是由控制街道,樓梯,店鋪,貼畫,垃圾桶擺放的小型hda拼裝而成,這些hda是高度模塊化,技術(shù)點(diǎn)都是通用的.且小型hda內(nèi)部 并非全是代碼,內(nèi)部結(jié)構(gòu)如下圖所示(頭號(hào)玩家-疊樓區(qū)https://www.bilibili.com/video/av52010921),其內(nèi)部的核心是由一些普通的節(jié)點(diǎn)以及包含vex代碼的pointwrangle構(gòu)成(vex是houdini的內(nèi)置語言),而這5個(gè)pointwrangle中vex只是同一段代碼的不同變體,只是對(duì)輸入的點(diǎn)進(jìn)行處理,高度模塊化,這5個(gè)pointwrangle中的代碼可應(yīng)用于任何高層住宅或者商業(yè)大樓,而重慶-洪崖洞中的橫向排布hda,可用于任何的街道類項(xiàng)目.技術(shù)通用,需要修改的只是輸入模型.(重慶-洪崖洞(https://www.bilibili.com/video/av52010921,約54秒))

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?頭號(hào)玩家-疊樓區(qū)主體建筑的內(nèi)部結(jié)構(gòu)
?常見觀點(diǎn)三:只有不需要設(shè)計(jì)的次要場(chǎng)景才會(huì)用程序化生成
有人認(rèn)為設(shè)計(jì)就應(yīng)該人手工做出來的,程序生成的沒有靈魂,缺少匠人精神,這是一種狹隘的看法,優(yōu)秀的設(shè)計(jì)也是將現(xiàn)有元素按照美學(xué)規(guī)則進(jìn)行拼貼與重構(gòu),而規(guī)則是可以提煉的,,可以用houdini定義設(shè)計(jì)規(guī)則,曝露出足夠的參數(shù),保證設(shè)計(jì)的可修改性.最大限度的在時(shí)間與效果謀取平衡,Houdini是一個(gè)工具,procedural生成是一種方法,為的是提高工作效率,
常見觀點(diǎn)四:往往只有低質(zhì)量開發(fā)的游戲才會(huì)用到程序生成
1,質(zhì)量取決于游戲資產(chǎn)模組的制作水準(zhǔn),houdini不是游戲資產(chǎn)的生成者,只是游戲資產(chǎn)的搬運(yùn)工,將完整的模組放在合適的位置上.
2,此言論屬于偏見,恰恰是低質(zhì)量開發(fā)的游戲才不會(huì)用程序生成,procedural生成是成本與效果平衡的產(chǎn)物.而低質(zhì)量開發(fā)的游戲只有妥協(xié),沒有平衡.
個(gè)人觀點(diǎn):
一 何時(shí)采用procedural生成,用程序修改實(shí)際到處是需要具體問題具體分析的情況
資產(chǎn)類型:
? ? ? ? ? ? ?1,游戲主角不需要,但1000個(gè)配角需要
? ? ? ? ? ? ?2,一棟建筑不需要,但制作城市需要
游戲類型:
? ? ? ? 若是開發(fā)現(xiàn)代寫實(shí)場(chǎng)景,或者科幻類,賽破朋克類的游戲內(nèi)容,可以采用procedural流程提高迭代效率,豐富游戲內(nèi)容
? ? ? ? 若是手游,棋牌,抽卡或者室內(nèi)演出型游戲則不需要.
二 houdini在游戲領(lǐng)域的兩種使用形式
? 一 資產(chǎn)的生成者,類似于maya,既可建模,uv,亦可動(dòng)畫,破碎.此類方法是將houdini作為資產(chǎn)生成的軟件,作用等同于maya,c4d,blender等軟件建模后導(dǎo)入游戲引擎
? ? ? houdini可以在內(nèi)部生成資產(chǎn),不依賴第三方DCC軟件(如模型:maya,3dmax,c4d,blender,modo.紋理:sp,sd),所有的建模,uv,烘焙,紋理,lod,動(dòng)畫等都在houdini完成,(效率較低,不推薦)
如下圖所示,便是houdini內(nèi)部建模,不依賴外部資產(chǎn)導(dǎo)入(教程連接:https://www.youtube.com/watch?v=fAmjnJAuvp0)
此種方法是改變模型的拓?fù)浣Y(jié)構(gòu),較為適合影視流程,或游戲領(lǐng)域中的模塊化生成(模塊化:若游戲中需要10km的高速公路,只需制作一小段路面,然后不斷復(fù)制即可)
優(yōu)點(diǎn):達(dá)到對(duì)模型結(jié)構(gòu),uv的完全控制,實(shí)時(shí)調(diào)整,完全程序生成.
缺點(diǎn):若是在較大規(guī)模的游戲場(chǎng)景中采用此種方法,在游戲引擎中無法高效控制drawcall的數(shù)量.且修改效率過低.
綜合優(yōu)缺點(diǎn):一些需求種類很多的單體物體可以采用此類方法,配合houdini17.5的pdg流程可以快速生成同一類型的資產(chǎn)變體,然后導(dǎo)出模型到游戲引擎.例如書本,罐子,箱子,武器,飾品等小型物體(pdg相關(guān)連接:https://www.youtube.com/watch?v=lL_jUZtaF1k).
注意事項(xiàng):
? ? ? 1 若想在游戲引擎中實(shí)時(shí)修改:請(qǐng)導(dǎo)出hda格式,uv,烘焙需要在houdini內(nèi)部完成,碰撞給予模型一個(gè)字符串屬性即可(如下圖中的命名約定表).紋理可直接調(diào)用引擎中的已有紋理.(游戲引擎想要識(shí)別hda格式,需安裝houdini engine插件,ue4/unity文檔鏈接:https://www.sidefx.com/docs/hengine/,ue4,unity的細(xì)節(jié)有些許不同,請(qǐng)細(xì)細(xì)查閱)
? ? ? 2 若不想在引擎中實(shí)時(shí)修改:請(qǐng)導(dǎo)出fbx,obj格式,剩下與常規(guī)流程相同,即uv,烘培可在第三方軟件中完成(個(gè)人建議:uv,lod可在houdini內(nèi)直接完成,速度賊快,用過都說好)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 改變拓?fù)浣Y(jié)構(gòu)

? 碰撞的命名約定

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? mesh與碰撞體(上圖共有11種類型,任君選擇)
二? 規(guī)則的定義者
只是把houdini當(dāng)作一個(gè)資產(chǎn)的搬運(yùn)工,不破壞拓?fù)浣Y(jié)構(gòu).此種方法的口號(hào)是: houdini 從不生產(chǎn)水,只是大自然的搬運(yùn)工,
頭號(hào)玩家-疊樓區(qū)模組

?重慶_洪崖洞的所有模組

優(yōu)點(diǎn) : 高效控制drawcall的數(shù)量與大小,高度模塊化,在輸入----處理----輸出的數(shù)據(jù)處理中,只定義處理的方式,不同的輸入,都會(huì)得到一個(gè)明確且可重復(fù),可動(dòng)態(tài)調(diào)整的輸出.
此類方法有兩個(gè)不同的實(shí)現(xiàn)方式
1, packed實(shí)例,將輸入的模型打包成一個(gè)實(shí)例,游戲引擎可以自動(dòng)識(shí)別(注:unity很早就有了動(dòng)態(tài)實(shí)例,ue4在4.22才有)
2,點(diǎn)云實(shí)例,將houdini定義的規(guī)則封裝在一個(gè)個(gè)的點(diǎn)中,游戲引擎可以直接讀取.如下圖(若圖不動(dòng),請(qǐng)移步https://www.bilibili.com/video/av52010921,約在54-59秒)

三 兩種方式經(jīng)驗(yàn)總結(jié):
1.packed實(shí)例通過hda導(dǎo)出后ue4,unity,maya,3dmax,c4d軟件都可識(shí)別,點(diǎn)云實(shí)例不可通用,因?yàn)辄c(diǎn)云實(shí)例中要包含的實(shí)例屬性的名字不一樣,要導(dǎo)出為不同的版本(注:不同版本的修改,只需一秒鐘,把ue4版本中實(shí)例屬性的名字替換為unity即可完成unity版本的制作.
2.packed實(shí)例可在houdini中顯示模型,易于觀察,點(diǎn)云實(shí)例只有一個(gè)個(gè)點(diǎn),只能引擎中看到效果,個(gè)人建議先用packe方式制作,最后轉(zhuǎn)為點(diǎn)云實(shí)例.
3,點(diǎn)云實(shí)例的優(yōu)點(diǎn)在于可以更有效的刪除模型重疊部分,例如重慶-洪崖洞項(xiàng)目中相鄰建筑之間緊密相連,便可以剔除掉重疊的模型.(如下圖)

三 程序化與手動(dòng)擺放的平衡
場(chǎng)景關(guān)卡生成大致可分為3個(gè)方式
? ? ? ? 1,完全程序化生成 ,不做修改 如?Roguelike類游戲,全自動(dòng)一鍵生成,依靠某一全局參數(shù)控制場(chǎng)景的整體變化,
?????????2 完全手動(dòng)擺放與修正,傳統(tǒng)制作方法
?????????3 采用houdini的規(guī)則定義方式,進(jìn)行procedural生成,暴露內(nèi)部參數(shù),若是不加修改便是第一種完全程序化生成 ,也可以單獨(dú)設(shè)每一個(gè)參數(shù),例如位置,角度,縮放等,達(dá)到傳統(tǒng)方法中的完全手動(dòng)的效果.在完全程序化與完全手動(dòng)中各取優(yōu)點(diǎn).直接bake成actor再修改的區(qū)別在于bake之后就變?yōu)槠胀╝ctor 無法自動(dòng)適應(yīng)定義的規(guī)則.如下圖所示若在ue4烘焙成actor,再進(jìn)行調(diào)整的話,建筑之間的電線便不會(huì)自動(dòng)跟隨物體變化(如無法查看動(dòng)圖,請(qǐng)移步視頻鏈接https://www.bilibili.com/video/av52010921,約在4-9秒)

單體建筑修改調(diào)整直接修改hda

建筑場(chǎng)景修改需指定具體的hda
動(dòng)圖操作具體分解:
? ? ? ? ?1,先打開建筑標(biāo)號(hào)顯示,設(shè)置為1.
? ? ? ? ?2,設(shè)置你要調(diào)整幾個(gè)建筑的細(xì)節(jié),例如我準(zhǔn)備調(diào)節(jié)2號(hào)建筑這一個(gè)建筑的旋轉(zhuǎn)角度,在prop_num中輸入1.(代表修改總數(shù)為1).
? ? ? ? ?3.將要修改的建筑的標(biāo)號(hào)輸入point_id,如要修改2號(hào)建筑,即在point_id輸入2,即可對(duì)2號(hào)建筑的旋轉(zhuǎn),位置等所有屬性進(jìn)行修改


總結(jié): 一 procedural流程不是一勞永逸,目的加快迭代速度,減少人力成本
? ? ? ? ?二 houdini不是游戲資產(chǎn)的生成者,只是游戲資產(chǎn)的搬運(yùn)工,
? ? ? ? ?三?procedural生成是成本與效果平衡的產(chǎn)物,采用與否請(qǐng)具體問題具體分析
? ? ? ? 四 houdini是一個(gè)工具,procedural生成是一種方法,為的是提高工作效率
注:個(gè)人才疏學(xué)淺,若有錯(cuò)訛,請(qǐng)諸位斧正,?一定積極改正
最后打個(gè)廣告,本人qq:925071038,郵箱925071038@qq.com,如需合作請(qǐng)聯(lián)系我,生活不易,請(qǐng)各位見諒