當(dāng)前位置: 首頁 > 資訊動(dòng)態(tài) > 行業(yè)洞察
當(dāng)前位置:首頁專利查詢蘇州蝸牛數(shù)字科技股份有限公司專利正文
一種基于Unity的軟件線性渲染的方法,包括以下步驟:(1)對(duì)線性渲染的環(huán)境進(jìn)行判斷;(2)如果環(huán)境為Gamma Space,則在Gamma Space環(huán)境下進(jìn)行軟件線)如果環(huán)境為Linear Space,則在Linear Space環(huán)境下進(jìn)行軟件線性渲染。本發(fā)明專利技術(shù)可以在不支持硬件渲染的設(shè)備上,實(shí)現(xiàn)與硬件線性渲染相同的畫面效果。
本專利技術(shù)涉及線性渲染領(lǐng)域,特別是一種基于Unity軟件進(jìn)行線性渲染的方法。
線性渲染(LinearRendering)就是渲染場景所有輸入都是線性的。使用線性渲染相比于在伽瑪空間(GammaSpace)進(jìn)行非線性的渲染,更貼近真實(shí)世界的表現(xiàn)。如果在Unity中開啟了線性渲染模式,Unity會(huì)將Default類型的紋理設(shè)置為sRGB模式,這種模式下硬件在對(duì)紋理進(jìn)行采樣時(shí)會(huì)自動(dòng)將其轉(zhuǎn)換到線性空間中(LinearSpace);并且,也會(huì)設(shè)置一個(gè)sRGB格式的buffer,此時(shí)GPU會(huì)在shader寫入colorbuffer前自動(dòng)進(jìn)行伽馬校正(GammaCorrection)。然而并非所有硬件都能支持sRGB格式的紋理采樣技術(shù),Unity引擎也并沒有提供在硬件線性渲染不支持的情況下的解決方案。目前,在其他的一些引擎中,存在采用軟件線性渲染的方式來解決該問題,但實(shí)現(xiàn)的方法過于簡單,不能完全還原硬件線性渲染的效果。
為了解決現(xiàn)有技術(shù)存在的不足,本專利技術(shù)的目的在于提供一種基于Unity引擎的軟件線性渲染的方案。本專利技術(shù)可以在不支持硬件渲染的設(shè)備上,實(shí)現(xiàn)與硬件線性渲染相同的畫面效果。為實(shí)現(xiàn)上述目的,本專利技術(shù)提出了基于Unity的軟件線性渲染的方法,包括以下步驟:(1)對(duì)線性渲染的環(huán)境進(jìn)行判斷;(2)如果環(huán)境為GammaSpace,則在GammaSpace環(huán)境下進(jìn)行軟件線)如果環(huán)境為LinearSpace,則在LinearSpace環(huán)境下進(jìn)行軟件線性渲染。對(duì)應(yīng)GammaSpace和LinearSpace兩種環(huán)境,具體包括以下兩種線性渲染方法。方法一:一種在GammaSpace環(huán)境下實(shí)現(xiàn)軟件線性渲染的方法,包括以下步驟:S101:在腳本中定義開啟線性渲染的宏_COLORSPACE_GAMMA;S102:在Shader中執(zhí)行tex2D()函數(shù)之后,并在將該采樣結(jié)果運(yùn)用于計(jì)算之前,根據(jù)宏_COLORSPACE_GAMMA判斷是否需要開啟軟件線性渲染,如果需要線性渲染,則進(jìn)行一下步驟;如果不需要線性渲染,則直接輸出結(jié)果;S103:對(duì)tex2D()函數(shù)的采樣結(jié)果執(zhí)行Pow(...,2.0)操作,以將采樣結(jié)果的值從非線Dbias()和texCUBE()函數(shù)之后,對(duì)其采樣結(jié)果重復(fù)S102-S103步驟;S105:對(duì)光照貼圖、全局反射貼圖和/或光照的采樣結(jié)果,重復(fù)S102-S103步驟,從非線性空間轉(zhuǎn)換到線:在主相機(jī)上添加繼承MonoBehaviour的腳本,用于進(jìn)行全屏后處理的操作;S107:編寫用于屏幕后處理的Shader,對(duì)RenderTexture中的顏色執(zhí)行Pow(...,0.5)操作;S108:在后處理腳本中,使用步驟S107中的Shader進(jìn)行OnRenderImage的處理,將處理后的最終結(jié)果輸出到屏幕上。進(jìn)一步地,在步驟S101中還包括,以#pragmamulti_pile的方式定義開啟線性渲染的宏_COLORSPACE_GAMMA。進(jìn)一步地,在步驟S106中還包括,腳本中包括對(duì)_COLORSPACE_GAMMA宏的開關(guān)。更進(jìn)一步地,使用Shader.EnableKeyword或Shader.DisableKeyword對(duì)_COLORSPACE_GAMMA宏進(jìn)行開關(guān)控制。方法二:一種在LinearSpace環(huán)境下實(shí)現(xiàn)軟件線性渲染的方法,包括以下步驟:S201:在腳本中定義開啟線性渲染的宏_COLORSPACE_LINEAR;S202:在Unity引擎的目錄下,修改UnityCG.cginc和UnityStandardBRDF.cginc文件中的內(nèi)容,加入對(duì)宏的判斷,以判斷是否需要開啟軟件線性渲染,如果需要線性渲染,則進(jìn)行一下步驟;如果不需要線性渲染,則直接輸出結(jié)果;S203:將修改過后的UnityCG.cginc和UnityStandardBRDF.cginc文件放到Shader文件目錄下,并在Shader中添加對(duì)上述兩個(gè)cginc文件的引用;S204:在主相機(jī)上添加繼承MonoBehaviour的腳本,用于進(jìn)行全屏后處理的操作;S205:編寫用于屏幕后處理的Shader,對(duì)RenderTexture中的顏色執(zhí)行Pow(...,0.5)的操作;S206:在后處理腳本中,使用步驟S205中的Shader進(jìn)行OnRenderImage的處理,將處理后的最終結(jié)果輸出到屏幕上。進(jìn)一步地,在步驟S1中,由以#pragmamulti_pile的方式定義開啟線性渲染的宏_COLORSPACE_LINEAR。進(jìn)一步地,在步驟S202中,對(duì)宏的判斷包括:判斷UNITY_COLORSPACE_GAMMA的未開啟的部分,并且判斷宏_COLORSPACE_LINEAR。進(jìn)一步地,當(dāng)所述方法使用在IOS系統(tǒng)上時(shí),步驟S207還包括:復(fù)制主相機(jī),將該相機(jī)的深度緩沖和顏色緩沖寫入到RenderTexture中,在應(yīng)用運(yùn)行時(shí)持續(xù)對(duì)RenderTexture進(jìn)行更新,并將RenderTexture替換后處理腳本中OnRenderImage方法的輸入源source。進(jìn)一步地,在步驟S204中還包括,腳本中包括對(duì)宏_COLORSPACE_LINEAR的開關(guān)。更進(jìn)一步地,使用Shader.EnableKeyword或Shader.DisableKeyword對(duì)宏_COLORSPACE_LINEAR進(jìn)行開關(guān)控制。本專利技術(shù)提供的基于Unity的軟件線性渲染方法,具有如下有益效果:現(xiàn)有技術(shù)中的線性渲染方法過于簡單,無法完全還原渲染的效果,而本專利技術(shù)的方法能夠完全還原硬件線性渲染的效果。本專利技術(shù)的其它特征和優(yōu)點(diǎn)將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實(shí)施本專利技術(shù)而了解。附圖說明附圖用來提供對(duì)本專利技術(shù)的進(jìn)一步理解,并且構(gòu)成說明書的一部分,并與本專利技術(shù)的實(shí)施例一起,用于解釋本專利技術(shù),并不構(gòu)成對(duì)本專利技術(shù)的限制。在附圖中:圖1為根據(jù)本專利技術(shù)的在GammaSpace環(huán)境下實(shí)現(xiàn)軟件線性渲染的方法流程圖;圖2為根據(jù)本專利技術(shù)的在LinearSpace環(huán)境下實(shí)現(xiàn)軟件線性渲染的方法流程圖。具體實(shí)施方式以下結(jié)合附圖對(duì)本專利技術(shù)的優(yōu)選實(shí)施例進(jìn)行說明,應(yīng)當(dāng)理解,此處所描述的優(yōu)選實(shí)施例僅用于說明和解釋本專利技術(shù),并不用于限定本專利技術(shù)。本專利技術(shù)的目的在于提供一種基于Unity引擎的軟件線性渲染的方案,本專利技術(shù)包括兩種軟件線性渲染的實(shí)施例,對(duì)應(yīng)了Unity引擎以不同的色彩空間發(fā)布應(yīng)用時(shí)的情況。實(shí)施例一圖1為根據(jù)本專利技術(shù)的在GammaSpace環(huán)境下實(shí)現(xiàn)軟件線性渲染的方法流程圖,下面將參考圖1,對(duì)本專利技術(shù)的在GammaSpace環(huán)境下實(shí)現(xiàn)軟件線性渲染的方法進(jìn)行詳細(xì)描述:步驟101中,在腳本中定義開啟線性渲染的宏_COLORSPACE_GAMMA;該宏_COLORSPACE_GAMMA以#pragmamulti_pile的方式定義,若不以該方式定義,則可能無法在最終發(fā)布的應(yīng)用程序中執(zhí)行線性渲染的相關(guān)方法。步驟102中,在Shader中執(zhí)行tex2D()函數(shù)之后,并在將該采樣結(jié)果運(yùn)用于計(jì)算之前,根據(jù)宏_COLORSPACE_GAMMA判斷是否需要開啟軟件線性渲染
1.一種基于Unity的軟件線性渲染的方法,包括以下步驟:(1) 對(duì)線性渲染的環(huán)境進(jìn)行判斷;(2) 如果環(huán)境為Gamma Space,則在Gamma Space環(huán)境下進(jìn)行軟件線) 如果環(huán)境為Linear Space,則在Linear Space環(huán)境下進(jìn)行軟件線)進(jìn)一步包括以下步驟:S101:在腳本中定義開啟線性渲染的宏_COLORSPACE_GAMMA;S102:在Shader中執(zhí)行tex2D()函數(shù)之后,并在將該采樣結(jié)果運(yùn)用于計(jì)算之前,根據(jù)宏_COLORSPACE_GAMMA判斷是否需要開啟軟件線性渲染,如果需要線性渲染,則進(jìn)行一下步驟;如果不需要線性渲染,則直接輸出結(jié)果;S103:對(duì)tex2D()函數(shù)的采樣結(jié)果執(zhí)行Pow(...,2.0)操作,以將采樣結(jié)果的值從非線Dbias()和texCUBE()函數(shù)之后,對(duì)其采樣結(jié)果重復(fù)S102?S103步驟;S105:對(duì)光照貼圖、全局反射貼圖和/或光照的采樣結(jié)果,重復(fù)S102?S103步驟,從非線性空間轉(zhuǎn)換到線:在主相機(jī)上添加繼承MonoBehaviour的腳本,用于進(jìn)行全屏后處理的操作;S107:編寫用于屏幕后處理的Shader,對(duì)RenderTexture中的顏色執(zhí)行Pow(...,0.5)操作;S108:在后處理腳本中,使用步驟S107中的Shader進(jìn)行OnRenderImage的處理,將處理后的最終結(jié)果輸出到屏幕上。
1.一種基于Unity的軟件線性渲染的方法,包括以下步驟:(1)對(duì)線性渲染的環(huán)境進(jìn)行判斷;(2)如果環(huán)境為GammaSpace,則在GammaSpace環(huán)境下進(jìn)行軟件線)如果環(huán)境為LinearSpace,則在LinearSpace環(huán)境下進(jìn)行軟件線)進(jìn)一步包括以下步驟:S101:在腳本中定義開啟線性渲染的宏_COLORSPACE_GAMMA;S102:在Shader中執(zhí)行tex2D()函數(shù)之后,并在將該采樣結(jié)果運(yùn)用于計(jì)算之前,根據(jù)宏_COLORSPACE_GAMMA判斷是否需要開啟軟件線性渲染,如果需要線性渲染,則進(jìn)行一下步驟;如果不需要線性渲染,則直接輸出結(jié)果;S103:對(duì)tex2D()函數(shù)的采樣結(jié)果執(zhí)行Pow(...,2.0)操作,以將采樣結(jié)果的值從非線Dbias()和texCUBE()函數(shù)之后,對(duì)其采樣結(jié)果重復(fù)S102-S103步驟;S105:對(duì)光照貼圖、全局反射貼圖和/或光照的采樣結(jié)果,重復(fù)S102-S103步驟,從非線性空間轉(zhuǎn)換到線:在主相機(jī)上添加繼承MonoBehaviour的腳本,用于進(jìn)行全屏后處理的操作;S107:編寫用于屏幕后處理的Shader,對(duì)RenderTexture中的顏色執(zhí)行Pow(...,0.5)操作;S108:在后處理腳本中,使用步驟S107中的Shader進(jìn)行OnRenderImage的處理,將處理后的最終結(jié)果輸出到屏幕上。2.根據(jù)權(quán)利要求1所述的基于Unity的軟件線性渲染的方法,其特征在于,在步驟S101中還包括,以#pragmamulti_pile的方式定義開啟線性渲染的宏_COLORSPACE_GAMMA。3.根據(jù)權(quán)利要求1所述的基于Unity的軟件線性渲染的方法,其特征在于,在步驟S106中還包括,腳本中包括對(duì)_COLORSPACE_GAMMA宏的開關(guān)。4.根據(jù)權(quán)利要求3所述的基于Unity的軟件線性渲染的方法,其特征在于,使用Shader.EnableKeyword或Shader.DisableKeyword對(duì)_COLORSPACE_GAMMA宏進(jìn)行開關(guān)控制。5.根據(jù)權(quán)利要求1所述的基于Unity的軟件線性渲染的方法,其特征在于,所述步驟(3)進(jìn)一步包括以下步驟:S201:在腳本中定...九游娛樂中心