首頁 資訊 【Unity3D】廣告牌特效

【Unity3D】廣告牌特效

來源:泰然健康網(wǎng) 時間:2024年12月16日 06:03

1 前言

? 廣告牌特效是指:空間中的一個 2D 對象始終(或盡可能)面向相機,使得用戶能夠盡可能看清楚該 2D 物體。廣告牌特效一共有以下 3 種:

正視廣告牌:廣告牌始終以正視圖姿態(tài)面向相機,即廣告牌的 x、y、z 軸正方向始終指向相機的 x、y、z 軸正方向; 血條廣告牌:游戲中的血條效果廣告牌,廣告牌可以繞世界坐標系的 y 軸旋轉(zhuǎn),使其盡可能面向相機,即廣告牌的 x 軸正方向始終指向相機的 x 軸正方向,y 軸正方向始終指向 (0, 1, 0) 方向,z 軸正方向可以隨相機位置和姿態(tài)變動; 測距廣告牌:測距時顯示距離效果的廣告牌,廣告牌可以繞局部坐標系的 x 軸旋轉(zhuǎn),使其盡可能面向相機,即廣告牌的 x 軸正方向固定不變,y、z 軸正方向可以隨相機位置和姿態(tài)變動。

? 本文完整資源見→Unity3D廣告牌特效。

2 正視廣告牌

? 正視廣告牌是指:廣告牌始終以正視圖姿態(tài)面向相機,即廣告牌的 x、y、z 軸正方向始終指向相機的 x、y、z 軸正方向。

? FrontView.shader

Shader "MyShader/Billboard/FrontView" { // 正視廣告牌 Properties{ _MainTex("Main Tex", 2D) = "white" {} // 材質(zhì)紋理 _Color("Color Tint", Color) = (1, 1, 1, 1) // 材質(zhì)顏色 } SubShader{ // 批處理會合并所有相關(guān)的模型, 導致模型各自的模型空間丟失 Tags {"Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "DisableBatching" = "True"} Pass { Tags { "LightMode" = "ForwardBase" } ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off CGPROGRAM #pragma vertex vert #pragma fragment frag #include "Lighting.cginc" sampler2D _MainTex; // 材質(zhì)紋理 float4 _MainTex_ST; // 材質(zhì)紋理的縮放和偏移 fixed4 _Color; // 材質(zhì)顏色 struct a2v { float4 vertex : POSITION; // 模型空間頂點坐標 half2 texcoord : TEXCOORD0; // 頂點紋理坐標 }; struct v2f { float4 pos : SV_POSITION; // 裁剪空間頂點坐標 half2 uv : TEXCOORD0; // 頂點紋理坐標 }; v2f vert(a2v v) { v2f o; float3 center = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; // 世界坐標系中模型中心坐標 float3 right = mul(unity_MatrixInvV, float4(1, 0, 0, 0)).xyz; // 世界坐標系中相機的right向量(廣告牌的x軸) float3 up = mul(unity_MatrixInvV, float4(0, 1, 0, 0)).xyz; // 世界坐標系中相機的up向量(廣告牌的y軸) float3 forward = mul(unity_MatrixInvV, float4(0, 0, 1, 0).xyz); // 世界坐標系中相機的forward向量(廣告牌的z軸) float3 worldVec = mul(unity_ObjectToWorld, v.vertex).xyz - center; // 世界坐標系中模型中心指向頂點的向量 float3 worldPos = center + worldVec.x * right + worldVec.y * up + worldVec.z * forward; // 世界坐標系中頂點坐標經(jīng)過廣告牌變換后的坐標 o.pos = mul(unity_MatrixVP, float4(worldPos, 1)); // 裁剪坐標系中頂點坐標 o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); // 紋理uv坐標 return o; } fixed4 frag(v2f i) : SV_Target { fixed4 color = tex2D(_MainTex, i.uv); color.rgb *= _Color.rgb; return color; } ENDCG } } FallBack "Transparent/VertexLit" }

? 運行效果:

3 血條廣告牌

? 血條廣告牌是指:游戲中的血條效果廣告牌,廣告牌可以繞世界坐標系的 y 軸旋轉(zhuǎn),使其盡可能面向相機,即廣告牌的 x 軸正方向始終指向相機的 x 軸正方向,y 軸正方向始終指向 (0, 1, 0) 方向,z 軸正方向可以隨相機位置和姿態(tài)變動。

? Lifebar.shader

Shader "MyShader/Billboard/Lifebar" { // 血條廣告牌 Properties{ _MainTex("Main Tex", 2D) = "white" {} // 材質(zhì)紋理 _Color("Color Tint", Color) = (1, 1, 1, 1) // 材質(zhì)顏色 } SubShader{ // 批處理會合并所有相關(guān)的模型, 導致模型各自的模型空間丟失 Tags {"Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "DisableBatching" = "True"} Pass { Tags { "LightMode" = "ForwardBase" } ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off CGPROGRAM #pragma vertex vert #pragma fragment frag #include "Lighting.cginc" sampler2D _MainTex; // 材質(zhì)紋理 float4 _MainTex_ST; // 材質(zhì)紋理的縮放和偏移 fixed4 _Color; // 材質(zhì)顏色 struct a2v { float4 vertex : POSITION; // 模型空間頂點坐標 half2 texcoord : TEXCOORD0; // 頂點紋理坐標 }; struct v2f { float4 pos : SV_POSITION; // 裁剪空間頂點坐標 half2 uv : TEXCOORD0; // 頂點紋理坐標 }; v2f vert(a2v v) { v2f o; float3 center = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; // 世界坐標系中模型中心坐標 float3 right = mul(unity_MatrixInvV, float4(1, 0, 0, 0)).xyz; // 世界坐標系中相機的right向量(廣告牌的x軸) float3 up = float3(0, 1, 0); // 廣告牌的y軸 float3 forward = cross(right, up); // 廣告牌的z軸 float3 worldVec = mul(unity_ObjectToWorld, v.vertex).xyz - center; // 世界坐標系中模型中心指向頂點的向量 float3 worldPos = center + worldVec.x * right + worldVec.y * up + worldVec.z * forward; // 世界坐標系中頂點坐標經(jīng)過廣告牌變換后的坐標 o.pos = mul(unity_MatrixVP, float4(worldPos, 1)); // 裁剪坐標系中頂點坐標 o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); // 紋理uv坐標 return o; } fixed4 frag(v2f i) : SV_Target { fixed4 color = tex2D(_MainTex, i.uv); color.rgb *= _Color.rgb; return color; } ENDCG } } FallBack "Transparent/VertexLit" }

? 運行效果:

4 測距廣告牌

? 測距廣告牌是指:測距時顯示距離效果的廣告牌,廣告牌可以繞局部坐標系的 x 軸旋轉(zhuǎn),使其盡可能面向相機,即廣告牌的 x 軸正方向固定不變,y、z 軸正方向可以隨相機位置和姿態(tài)變動。

? MeasureDist.shader

Shader "MyShader/Billboard/MeasureDist" { // 測距廣告牌 Properties{ _MainTex("Main Tex", 2D) = "white" {} // 材質(zhì)紋理 _Color("Color Tint", Color) = (1, 1, 1, 1) // 材質(zhì)顏色 } SubShader{ // 批處理會合并所有相關(guān)的模型, 導致模型各自的模型空間丟失 Tags {"Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "DisableBatching" = "True"} Pass { Tags { "LightMode" = "ForwardBase" } ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off CGPROGRAM #pragma vertex vert #pragma fragment frag #include "Lighting.cginc" sampler2D _MainTex; // 材質(zhì)紋理 float4 _MainTex_ST; // 材質(zhì)紋理的縮放和偏移 fixed4 _Color; // 材質(zhì)顏色 struct a2v { float4 vertex : POSITION; // 模型空間頂點坐標 half2 texcoord : TEXCOORD0; // 頂點紋理坐標 }; struct v2f { float4 pos : SV_POSITION; // 裁剪空間頂點坐標 half2 uv : TEXCOORD0; // 頂點紋理坐標 }; v2f vert(a2v v) { v2f o; float3 forwardDire = mul(unity_ObjectToWorld, float4(0, 0, 1, 0)).xyz; // 世界坐標系中模型的forward向量 float3 center = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; // 世界坐標系中模型中心坐標 float3 viewDire = normalize(center - _WorldSpaceCameraPos.xyz); // 觀察向量, 相機指向頂點 float3 right = normalize(mul(unity_ObjectToWorld, float4(1, 0, 0, 0)).xyz) * sign(dot(viewDire, forwardDire)); // 世界坐標系中模型的right向量(廣告牌的x軸) float3 up = cross(viewDire, right); // 廣告牌的y軸 float3 forward = cross(right, up); // 廣告牌的z軸 float3 worldVec = mul(unity_ObjectToWorld, v.vertex).xyz - center; // 世界坐標系中模型中心指向頂點的向量 float3 worldPos = center + worldVec.x * right + worldVec.y * up + worldVec.z * forward; // 世界坐標系中頂點坐標經(jīng)過廣告牌變換后的坐標 o.pos = mul(unity_MatrixVP, float4(worldPos, 1)); // 裁剪坐標系中頂點坐標 o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); // 紋理uv坐標 return o; } fixed4 frag(v2f i) : SV_Target { fixed4 color = tex2D(_MainTex, i.uv); color.rgb *= _Color.rgb; return color; } ENDCG } } FallBack "Transparent/VertexLit" }

? 運行效果:

? 聲明:本文轉(zhuǎn)自【Unity3D】廣告牌特效。

相關(guān)知識

平面廣告模特培訓
ASA封禁Saint Laurent Paris廣告 模特太廋不健康
廣東藥監(jiān)局:碧生源常潤茶廣告違法 夸大功效
光明暢優(yōu)酸奶品牌廣告文案活動策劃
碧生源牌減肥茶廣告語(熱門2篇)
[專題]光明暢優(yōu)酸奶品牌廣告文案.doc
廣告心理學閱讀
碧生源牌減肥茶廣告語經(jīng)典3篇
中國勁酒廣告
【廣告策劃

網(wǎng)址: 【Unity3D】廣告牌特效 http://m.u1s5d6.cn/newsview561607.html

推薦資訊