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 大概是第乙個正兒八經做的構造題吧 主要考察智商,像我...