1. 程式人生 > 其它 >記錄一下Vray5中文漢化版本中匯出EXR或vrimg多通道檔案的那些坑和解決方法

記錄一下Vray5中文漢化版本中匯出EXR或vrimg多通道檔案的那些坑和解決方法

最近在給一個培訓機構代課,學生英語基礎差,就安裝了Vray5的中文版,噩夢從此開始。

做過合成的都知道,需要輸出多通道到NUKE或者AE中進行合成,通常情況下把多個pass分成不同的檔案對硬碟反覆讀寫會對預覽效能有影響,所以都是將多通道輸出到一個EXR或者VRIMG進行後續處理。

坑就坑在,這些漢化版的Vray會把中文寫進這些二進位制檔案裡,再到AE或者NUKE裡匯入 就會出現亂碼甚至通道丟失(如圖1)

圖1

這邊記錄一下解決方法和思路,避免踩坑。

思路是用OpenImageIO這個庫進行通道重新命名,如果是在Linux系統就很簡單,直接獲取包就好(安裝參考oiio/INSTALL.md at master · OpenImageIO/oiio · GitHub

但是在windows下,不是每個電腦都有visual studio,所以編譯就很麻煩,我這邊提供編譯好的版本(2.2.2)(下載連結:https://pan.baidu.com/s/1jYwQljiYI1fZflwt6mYptw提取碼:toto)

下載之後解壓,cd /d "你解壓的路徑" 轉到對應目錄,輸入chcp 65001並回車,將CMD編碼改到UTF-8

這邊假設要處理的EXR名稱為1.EXR

檢視EXR資料

oiiotool -info -v 1.exr

如果要提取出通道資訊 可以用

oiiotool -info -v 1.exr | find /i "channel list"

如果不出意外 就會得到EXR中通道的順序資訊,要修改的是裡面的中文,對應Channel中的RGB通道不能動,CMD輸出如圖2

圖2

可以將這一段內容輸出到文字文件做修改,只需要channel list:後面的部分即可,並且不要換行(圖3)

圖3

將中文內容逐個替換,並且把中間的空格去掉或者改成下劃線_,替換後文本如圖4

圖4

回到CMD,輸入

oiiotool 1.exr --chnames "R,G,B,A,VFB2Composite.R,VFB2Composite.G,VFB2Composite.B,VRayGI.R,VRayGI.G,VRayGI.B,VRayReflection.R,VRayReflection.G,VRayReflection.B,VRayBackToBeauty.R,VRayBackToBeauty.G,VRayBackToBeauty.B,VRayAtomsphere.R,VRayAtomsphere.G,VRayAtomsphere.B,VRayRefraction.R,VRayRefraction.G,VRayRefraction.B,VRay_Diffuse.R,VRay_Diffuse.G,VRay_Diffuse.B,VRayCaustics.R,VRayCaustics.G,VRayCaustics.B,VRayLighting.R,VRayLighting.G,VRayLighting.B,VRayBackground.R,VRayBackground.G,VRayBackground.B,VRaySelfluminous.R,VRaySelfluminous.G,VRaySelfluminous.B,VRayDenoiser.R,VRayDenoiser.G,VRayDenoiser.B,VRaySpecular.R,VRaySpecular.G,VRaySpecular.B,VRaySSS2.R,VRaySSS2.G,VRaySSS2.B,bumpNormals.Y,bumpNormals.Z,bumpNormals.X,effectsResult.R,effectsResult.G,effectsResult.B

" -o 2.exr

命令中 綠色1.exr可以替換為輸入的exr檔案路徑,紅色2.exr可替換為輸出exr檔名和路徑

橙色部分請替換成自己的通道,因為通道順序每個檔案都不一樣,所以不可照搬

輸出完成後,匯入NUKE,可以看到通道資料恢復正常(圖5)

圖5

這是基本的思路,但實際操作非常麻煩,如果是序列就更加崩潰,所以可以用批處理檔案來輔助。

批處理程式碼如下,可複製另存為UTF-8編碼的批處理檔案,放在oiio的解壓目錄中。

 1 @echo off
 2 chcp 65001&&setlocal ENABLEDELAYEDEXPANSION
 3 echo 轉換編碼到UTF-8&echo.
 4 set /p url=請將序列資料夾拖入:
 5 set /p output=請將輸出資料夾拖入:
 6 
 7 for /f "delims=" %%j in ('dir /b "%url%\*.exr"') do (
 8     set "exrname=%%j"
 9     for /f "delims=" %%i in ('oiiotool -info -v "%url%\!exrname!" ^| find /i "channel list"') do (
10         set "ca=%%i"
11         echo 正在處理!exrname!,獲得EXR通道資料&echo.
12         set ca=!ca:    channel list: =!
13         set ca=!ca:VRay 全域性照明=VRay_GlobalIllumination!
14         set ca=!ca:VRay 反射=VRay_Reflection!
15         set ca=!ca:VRay 回到美景=VRay_BackToBeauty!
16         set ca=!ca:VRay 大氣=VRay_Atmosphere!
17         set ca=!ca:VRay 折射=VRay_Refraction!
18         set ca=!ca:VRay 漫反射過濾器=VRay_DiffuseFilter!
19         set ca=!ca:VRay 焦散線=VRay_Caustics!
20         set ca=!ca:VRay 照明=VRay_Lighting!
21         set ca=!ca:VRay 背景=VRay_Background!
22         set ca=!ca:VRay 自發光=VRay_SelfIuminous!
23         set ca=!ca:VRay 降噪器=VRay_Denoiser!
24         set ca=!ca:VRay 高光=VRay_Specular!
25         oiiotool "%url%\!exrname!" --chnames "!ca!" -o "%output%\!exrname!"
26     )
27 )
28 echo 處理完成&pause>nul&&exit

使用時先拖入EXR序列所在資料夾,再新建一個輸出資料夾,拖入程式並回車,程式會自動開始處理。

如果需要自定義替換字串的內容,增加oiiotool命令前的set命令即可。

set ca=!ca:VRay 高光=VRay_Specular!

紅字為替換前關鍵字,綠字為替換後關鍵字

至此,大坑已填

最好的解決方法還是用英文版的Vray,漢化版的各種問題,都是折騰。