shader入門16 立方體紋理

2021-09-24 18:21:59 字數 3663 閱讀 8677

1.什麼是立方體紋理?

簡單的說就是6張紋理組成的乙個方塊形狀的紋理.像骰子一樣,有六個面.

2.立方體紋理有什麼用?

立方體紋理通常用於作為反射源,以及環境反射來實現玻璃,金屬的效果

3.為什麼立方體紋理要做成這個形狀?

以立方體的中心為原點,向任意方向投射射線,可以與立方體6個面相交,得到不同的取樣值.

可以根據方向對紋理進行取樣,這就是立方體紋理的意義.

天空盒是模擬遊戲背景的一種常用方法,它所使用的原理就是立方體紋理.

利用立方體紋理不同方向的紋理取樣值,來達到3d背景的效果.

如何使用天空盒

新建乙個材質,選擇天空盒的shader

為6個紋理面賦值,紋理的wrap mode設定為clamp防止銜接處不匹配

開啟光照選單,設定天空盒材質,skybox material,把我們剛剛建立的材質拖給它就可以.此時設定的是全域性相機的天空盒

另外,相機要設定天空盒模式才可以看到效果.如果多個相機使用不同天空盒的話,要新增skybox元件進行覆蓋.

1.向美工要立方體紋理

2.在project裡右鍵create,legacy,cubemap.建立乙個立方體紋理,然後找6張紋理拖上去.

3.實時渲染.

實時渲染以場景中任意乙個物體的為相機,分別拍攝6個方向組成乙個立方體紋理.

**如下

1.注意這個類要放在editor目錄下,否則unity不把它當做編輯器處理

2.渲染出的cubemap是根據場景烘焙成的,無法拷貝到其他專案中,也無法修改.

using unityeditor;

using unityengine;

public class cubemapgenerator : scriptablewizard

void onwizardcreate()

[menuitem("gameobject/render into cubemap")]

static void rendercubemap()

}

**
shader "unlit/newunlitshader"

//立方體紋理

} subshader

; struct v2f

;v2f vert(a2v v)

fixed4 frag(v2f f) : sv_target

endcg

} }}

效果

場景有點暗,效果不是很好,可以看到場景被渲染到這個cube上了

加入反射的立方體紋理看起來更像是金屬的質感

**

shader "unlit/newunlitshader"

//立方體紋理

} subshader

cgprogram

#pragma vertex vert

#pragma fragment frag

#include "unitycg.cginc"

#include "lighting.cginc"

#include "autolight.cginc"

samplercube _cubemap;

fixed4 _diffusecolor;

fixed4 _reflectcolor;

fixed _reflectvalue;

struct a2v

;struct v2f

;v2f vert(a2v v)

fixed4 frag(v2f f) : sv_target

endcg

} }fallback "diffuse"

}

效果

簡單的修改一下上面的**,可以編寫乙個模擬水面折射的效果

**

shader "unlit/newunlitshader"

//立方體紋理

} subshader

cgprogram

#pragma vertex vert

#pragma fragment frag

#include "unitycg.cginc"

#include "lighting.cginc"

#include "autolight.cginc"

samplercube _cubemap;

fixed4 _diffusecolor;

fixed4 _refractcolor;

fixed _refractvalue;

fixed _refractratio;

struct a2v

;struct v2f

;v2f vert(a2v v)

fixed4 frag(v2f f) : sv_target

endcg

} }fallback "diffuse"

}

效果

菲涅爾反射效果可以描述更接近現實的效果,即一部分發生反射,一部分發生折射.

近處的水面幾乎看不到反射,只有折射效果;而遠處的水面則只有反射效果,看不到折射效果

現實中的菲涅爾反射公式非常複雜,我們在**中使用的是菲涅爾近似等式.

**

shader "unlit/newunlitshader"

//立方體紋理

} subshader

cgprogram

#pragma vertex vert

#pragma fragment frag

#include "unitycg.cginc"

#include "lighting.cginc"

#include "autolight.cginc"

samplercube _cubemap;

fixed4 _diffusecolor;

fixed _fresnelscale;

struct a2v

;struct v2f

;v2f vert(a2v v)

fixed4 frag(v2f f) : sv_target

endcg

} }fallback "diffuse"

}

效果

Shader 高階紋理 立方體紋理

立方體紋理 cubemap 天空盒子 skybox是遊戲中模擬背景的一種方法,每個面使用的技術就是立方體紋理對映技術。建立用於環境對映的立方體紋理 1.提供一張具有特殊布局的紋理,類似於立方體展開圖的交叉布局 全景布局等。我們需要將texturetype設定為cubemap 2.使用camera.r...

UnityShader學習 立方體紋理及其應用

1.天空盒子 是什麼?天空盒子 skybox 是遊戲中用於模擬背景的一種方法。當我們在場景中使用了天空盒子時,整個場景就被包圍在乙個立方體內。在unity中,天空盒子是在所有不透明物體之後渲染的,而其背後使用的網格是乙個立方體或乙個細分後的球體。怎麼用?製作材質 window lighting選單中...

bzoj4312 立方體 構造

有若干行,每行三個數字 x y z 代表一組資料,表示立方體的長寬高加 1 第 i 行資料輸出case i 第i組資料的答案 2 1 2 2 2 2 case 1 4 case 2 15 x,y,z 1000 鄭州培訓d3考試題t2,orzydc 大概是第乙個正兒八經做的構造題吧 主要考察智商,像我...