在項(xiàng)目實(shí)踐中,我的模型做了兩套u(yù)v,我需要使用standardShader的secondary maps翁逞,因此在面板上選擇uv1录肯,這樣Detail Albedo x 2使用的是第二套u(yù)v蚤假。
在烘培完光照貼圖之后栏饮,運(yùn)行項(xiàng)目,發(fā)現(xiàn)貼圖發(fā)生了改變磷仰。把物體的static選項(xiàng)取消抡爹,再運(yùn)行,貼圖正常芒划。這意味著第二套u(yù)v和光照貼圖不讓同時(shí)使用了嗎冬竟?(經(jīng)過(guò)反復(fù)測(cè)試,如果場(chǎng)景中只有一個(gè)物體,不會(huì)出這個(gè)錯(cuò)誤,一旦有一個(gè)以上物體媒惕,就會(huì)出現(xiàn)錯(cuò)誤。)
通過(guò)不斷試驗(yàn)和在論壇中查找笑诅,得出以下經(jīng)驗(yàn)。
一疮鲫、
這是unity工作人員吆你,在論壇中給出的關(guān)于使用uv的說(shuō)明圖表。unity一共支持4套u(yù)v俊犯,在shader編程中妇多,分別叫UV0, UV1, UV2, UV3,而在c#編程中分別叫UV, UV2, UV3, UV4燕侠。由于我是要對(duì)shader進(jìn)行修改者祖,所以使用shader編程中的命名。按照?qǐng)D表中的解釋绢彤,UV0用于主紋理, UV1用于光照貼圖, UV2用于實(shí)時(shí)動(dòng)態(tài)光照, UV3可進(jìn)行自定義七问。
二、如果在3d模型中只做了一套u(yù)v茫舶,將模型導(dǎo)入unity的時(shí)候械巡,在導(dǎo)入設(shè)置中勾選Generate Lightmap UVs, unity會(huì)自動(dòng)為我們生成用于光照貼圖的uv1,和用于動(dòng)態(tài)光照的uv2饶氏。
三讥耗、由此得知,我之前的錯(cuò)誤結(jié)果是因?yàn)槭褂昧斯庹召N圖的那套u(yù)v1進(jìn)行紋理貼圖造成的嚷往。我應(yīng)該使用的是唯一可以自定義的uv3葛账。使用方法,給物體做3套u(yù)v皮仁,重寫(xiě)UnityStandardInput.cginc。打開(kāi)這個(gè)文件,找到頂點(diǎn)輸入結(jié)構(gòu)體贷祈,
里面只有包含了3套u(yù)v趋急,自己在結(jié)構(gòu)體內(nèi)加入 float2 uv3 :TEXCOORD3;
然后在使用的時(shí)候,把使用uv1改為使用uv3势誊,我的情況如下呜达,
這樣在UV Set選uv1后,Detail Albedo x 2就會(huì)使用uv3了粟耻。
四查近、經(jīng)過(guò)反復(fù)的測(cè)試,發(fā)現(xiàn)一些現(xiàn)象挤忙,并不能解釋霜威,也沒(méi)有查出原因。如果模型自帶兩套u(yù)v册烈,即使修改了UnityStandardInput.cginc也得不到正確結(jié)果戈泼,必須要有3套u(yù)v。奇怪的是赏僧,在一個(gè)場(chǎng)景中大猛,只要有任何一個(gè)物體帶了三套u(yù)v,其他物體都只有兩套u(yù)v淀零,所有的物體都能得到正確的結(jié)果挽绩。