我不想用UGUI製作一些教學級別,所以需要整體在黑暗中,但是一些矩形區域不是在黑暗中。在Unity3D中,如何在黑暗中製作整個場景,但是有些區域不是在黑暗中
我可以通過添加一個帶有圖像組件的gameobject來控制黑暗中的整個場景,並將其控制爲alpha。
但我不知道如何使一些矩形區域被點亮,矩形會在不同的教學層次上發生變化。而具有不同分辨率的不同設備也將改變錄音的重要性。
Picutre3是我想要的,只是矩形區域是確定的。
Picture1中
圖片2
圖片2
圖片4
我不想用UGUI製作一些教學級別,所以需要整體在黑暗中,但是一些矩形區域不是在黑暗中。在Unity3D中,如何在黑暗中製作整個場景,但是有些區域不是在黑暗中
我可以通過添加一個帶有圖像組件的gameobject來控制黑暗中的整個場景,並將其控制爲alpha。
但我不知道如何使一些矩形區域被點亮,矩形會在不同的教學層次上發生變化。而具有不同分辨率的不同設備也將改變錄音的重要性。
Picutre3是我想要的,只是矩形區域是確定的。
Picture1中
圖片2
圖片2
圖片4
我將解釋如何用簡單的着色器和一些設置來實現這一點。我是從記憶中講話,所以如果出現一些問題,請問。
所以你可以做的是:
新建一個圖層渲染口罩。假設我們將這個圖層稱爲MaskLayer。
複製您的主相機。我們稱之爲舊的主攝像機camA和新的camB。
此時您應該注意到,精靈在遊戲窗口或camA預覽中不再可見。只有場景的其餘部分可見。當您選擇camB時,只有平面在預覽中可見。 camB的輸出表示「孔」的位置。
現在我們將繼續這樣的:
可以說你的着色器參數叫做DIFFUSE。在像素 着色器,輸出顏色設置爲一樣的東西:
fixed4 frag (v2f i) : SV_Target
{
fixed4 texcol = tex2D (DIFFUSE, i.uv);
fixed4 outputColor = fixed4(0,0,0, 0.8-texcol.r);
return outputColor ;
}
所以我們在這裏說,在我們用簡單的英語着色器是什麼: 我的顏色爲純黑色有輕微的透明度(0.8),除非我的輸入紋理在同一位置有一個白色,在這種情況下,我更透明(-texcol.r)。
我們在這裏使用r組件,但您可以輕鬆使用任何顏色組件。
現在,將此新材質和着色器分配給您的全屏精靈,並將MaskRT渲染紋理設置爲Mask Shader的輸入紋理DIFFUSE。
如果一切順利(lol右),那麼你現在應該有你想要的效果。移動蒙版現在與移動場景中標記有MaskLayer圖層的任何對象一樣簡單。所以你可以有很多面具。
注:
的精靈會刁難你一些也許面對相機,以防萬一飛機開始了 。
這裏是關於着色器的文檔,以防你需要閱讀一些內容:http://docs.unity3d.com/Manual/ShaderTut2.html這是值得研究的,但你可能會在這次試驗和錯誤中脫身。
fixed4 outputColor = fixed4(InputColor.Albedo,InputColor.a-texcol)
編輯: 可以看看在 「在CG代碼使用着色器性能」 部分這裏:http://docs.unity3d.com/Manual/ShaderTut2.html如果你正在掙扎,你可以複製粘貼這整個片段並更改片段着色器(對不起,我不知道你有什麼級別的經驗)。編輯: 這是根據要求的着色器。另請閱讀以下注意事項。
Shader "Tutorial/Textured Colored" {
Properties {
_Color ("Main Color", Color) = (1,1,1,0.5)
_MainTex ("Texture", 2D) = "white" { }
}
SubShader {
Tags
{
"Queue" = "Transparent"
}
Blend One OneMinusSrcAlpha
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
fixed4 _Color;
sampler2D _MainTex;
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
};
float4 _MainTex_ST;
v2f vert (appdata_base v)
{
v2f o;
o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
o.uv = TRANSFORM_TEX (v.texcoord, _MainTex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
fixed4 texcol = tex2D (_MainTex, i.uv);
fixed4 outputColor = _Color;
outputColor.a -= texcol.r;
return outputColor ;
}
ENDCG
}
}
}
注:
UPDATE:
我離開了着色器的關鍵部件遺憾。請參閱標籤部分和添加到着色器的混合操作。另請注意,對於全屏幕四邊形,您應該使用平面而不是精靈,因爲着色器與此狀態下的精靈不兼容。
還要注意的是,在示例項目位置:https://drive.google.com/file/d/0Bw8X8yAt21AiYjRyVkxJUkhreVU/view?usp=sharing
,這架飛機是在X和Z軸翻轉兩者。
至於我早先錯過的UGUI部分 - 這個解決方案可以工作。我沒有檢查過。如果遮罩位於UI後面,您可以嘗試將着色器中的「隊列」標籤設置爲「疊加」。
對不起,我的着色器不太好,我嘗試了,但失敗了。如果它更方便,你能給我一個完整的着色器嗎?謝謝 – zhangjiangtao
好吧,我更新了答案。如果你還在掙扎,你將不得不提供更多關於這個問題的細節。問題的範圍可以從場景設置到着色器中的語法錯誤,因此很難猜測出現了什麼問題。也許回來併發布最新結果的屏幕截圖(如果它運行但不能正常工作)。 – Reasurria
非常感謝,我正在嘗試。 – zhangjiangtao
前段時間我做了類似的事情,我做了一個遮罩着色器。我所做的是我首先渲染場景只帶有蒙版(在你的情況下是一個矩形),渲染紋理爲白色。無處不在的地方,我只是呈現黑色。然後我將這個紋理與最終的渲染混合。這對你來說可能會超出你的想象,但它可以讓你有更多的矩形,甚至任意的形狀。如果您需要更多指導,我會在有空的時候發佈帶有示例代碼的完整答案。 – Reasurria
非常感謝。我會嘗試,如果你有時間發佈完整的答案,這將是最好的。 – zhangjiangtao
我加了答案。我意識到你可能想要3D效果類型(就像從上面照射閃光燈一樣)。如果是這種情況,我會延長答案。 – Reasurria