最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

09

2023-06-24 11:06 作者:絕劍結(jié)城  | 我要投稿

首先是菲涅爾,其實(shí)我之前自己研究描邊的時(shí)候都搞出了個(gè)類似的,不過后面的處理太錯(cuò)誤了。正確的處理還是oneminus和power。唉,真是妙啊。不過也可能是我當(dāng)時(shí)太菜了,所以底子還是很重要的。

然后是Matcap(Material Capture(材質(zhì)捕捉))。用來造假的光照效果,不用任何光照信息,只用個(gè)貼圖。首先要把法線貼圖轉(zhuǎn)到觀察空間(view space,以相機(jī)為中心,鏡頭后方是+z軸,右方是+x軸,上方是+y軸,所以指向鏡頭的面是藍(lán)色,指向鏡頭上方的是綠色,指向鏡頭右方的是紅色)(在不同的空間下法線貼圖呈現(xiàn)不同的顏色,但是實(shí)際上,法線還是那個(gè)法線,只是基不同,導(dǎo)致坐標(biāo)值不同,導(dǎo)致顯示出來的顏色不同)。

然后取RG通道(此時(shí)它們映射都是從-1到1),然后重映射為(0到1),以此作為采樣的uv坐標(biāo)。

然后采樣一個(gè)圓形的matcap貼圖,這里我解釋下為什么是圓形。首先,最開始的rgb值代表的是一個(gè)歸一化過的方向向量。對(duì)于一個(gè)模型的觀察空間下的坐標(biāo),我們肯定只能看得到z為正的面,哪怕在最邊緣,z也只是為0,而當(dāng)z值為0的時(shí)候x方+y方=1。而當(dāng)z值為正數(shù)的時(shí)候,x方+y方則肯定小于1。這樣我們以一個(gè)球來代替物體的時(shí)候(因?yàn)榍虬怂蟹较虻拿妫梢院苊黠@看出xy的范圍。

而因?yàn)榧y理坐標(biāo)的范圍是如下圖的0到1,所以為了采樣就要把單位圓映射為以(0.5,0.5)為中心的這個(gè)小圓。

我上面應(yīng)該解釋得挺清楚了。然后把搞好的坐標(biāo)來做uv采樣matcap,即可得到最終效果,而且說實(shí)話效果挺好的(什么sssmatcap看起來還真有模有樣)。但是移動(dòng)視角(指的是物體在觀察空間內(nèi)的坐標(biāo)移動(dòng),比如把物體從屏幕中央移到邊緣)的話,就容易穿幫,原因:在透視投影下,將模型拉到屏幕的左右邊緣,那么側(cè)面的占的像素就會(huì)被拉寬,但是對(duì)應(yīng)的MatCap的區(qū)域還是那么點(diǎn)。(大佬的總結(jié)https://zhuanlan.zhihu.com/p/415525195)

算了,我打算改變策略了,不什么都記錄了,有些大佬筆記有的,我抄過來也沒意義。我就對(duì)一些我想了比較久才懂的,或者說模糊不清的概念再做筆記。

這里記錄一下手寫cubemap代碼的注意點(diǎn)。那些比較簡(jiǎn)單的問題,可以直接copy連連看代碼的,我就不講了。

首先是法線貼圖,我發(fā)現(xiàn)sf用的是第一個(gè)代碼,然后聲明參數(shù)的時(shí)候要多聲明一個(gè)ST后綴的float4。這兩段代碼的區(qū)別在于是否使用了TRANSFORM_TEX函數(shù)對(duì)紋理坐標(biāo)進(jìn)行了變換。TRANSFORM_TEX函數(shù)是一個(gè)Unity定義的宏,用于對(duì)紋理坐標(biāo)進(jìn)行縮放和偏移,以實(shí)現(xiàn)紋理的平鋪和偏移效果。這個(gè)函數(shù)需要使用一個(gè)帶有_ST后綴的屬性來傳遞紋理的縮放和偏移參數(shù),例如_BaseMap_ST2。如果不使用這個(gè)函數(shù),那么紋理坐標(biāo)就不會(huì)發(fā)生變化,紋理就會(huì)按照原始大小和位置貼在模型上。所以,第一段代碼相當(dāng)于對(duì)紋理進(jìn)行了縮放和偏移(依據(jù)ST),而第二段代碼則沒有對(duì)紋理進(jìn)行任何變換。

然后是聲明菲涅爾強(qiáng)度值的時(shí)候,SF用了上面那個(gè)代碼。這兩種定義shader參數(shù)的方式的區(qū)別在于是否支持GPU instancing。GPU instancing是一種優(yōu)化方法,可以在一次繪制調(diào)用中渲染多個(gè)相同網(wǎng)格和材質(zhì)的實(shí)例,從而減少繪制調(diào)用的數(shù)量和提高性能。為了讓shader支持GPU instancing,需要使用一些特定的宏和變量來聲明和定義每個(gè)實(shí)例的屬性。例如:

? UNITY_INSTANCING_BUFFER_START(Props)和UNITY_INSTANCING_BUFFER_END(Props):這兩個(gè)宏用于聲明一個(gè)名為Props的每個(gè)實(shí)例的常量緩沖區(qū),用于存儲(chǔ)每個(gè)實(shí)例的屬性。

? UNITY_DEFINE_INSTANCED_PROP(float, _fresnel):這個(gè)宏用于定義一個(gè)類型為float,名為_fresnel的每個(gè)實(shí)例的屬性。這個(gè)屬性可以在shader中使用,也可以在材質(zhì)檢視面板中調(diào)整。

? UNITY_VERTEX_INPUT_INSTANCE_ID:這個(gè)宏用于在頂點(diǎn)著色器輸入/輸出結(jié)構(gòu)中定義一個(gè)實(shí)例ID。這個(gè)ID可以用于訪問每個(gè)實(shí)例的屬性或其他信息。

使用這些宏和變量的好處是可以讓shader支持GPU instancing,從而提高渲染效率。缺點(diǎn)是需要額外的代碼和內(nèi)存來存儲(chǔ)每個(gè)實(shí)例的屬性,而且不是所有平臺(tái)和渲染管線都支持GPU instancing。

使用**uniform float _fresnel;**的方式則是定義一個(gè)全局的shader參數(shù),這個(gè)參數(shù)對(duì)所有實(shí)例都是相同的,不會(huì)隨著每個(gè)實(shí)例而改變。使用這種方式的好處是簡(jiǎn)單方便,不需要額外的代碼和內(nèi)存,而且兼容性更好。缺點(diǎn)是無法讓shader支持GPU instancing,從而降低渲染效率。(來源newbing)


09的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
大庆市| 洛阳市| 临清市| 湟中县| 长乐市| 福州市| 东乡族自治县| 千阳县| 襄汾县| 波密县| 丰都县| 怀化市| 宣恩县| 石家庄市| 武邑县| 萍乡市| 密云县| 嘉峪关市| 祁连县| 始兴县| 德清县| 山西省| 天柱县| 福清市| 潢川县| 莎车县| 丰城市| 游戏| 赤壁市| 清丰县| 阿瓦提县| 临邑县| 泰安市| 兴仁县| 四子王旗| 清水县| 北宁市| 栖霞市| 遵义县| 德格县| 长阳|