unity billboard 最简单实现

本文介绍了在遇到Unity内置BillboardRenderer使用问题时,如何自行动手编写Billboard Shader。首先在3dsmax创建一个4个顶点的平面,并确保所有顶点位于(0,0,0),导入Unity时取消合并顶点。接着展示了一段修改过的简单Shader源码,实现Billboard效果,虽然无法直接单击选择,但能通过框选进行交互。" 130273353,13469072,C/C++编程安全注意事项,"['C++', '安全编程', '内存管理', '多线程', '加密算法']

新号第一篇

最近发现unity自己的billboardrenderer 需要billboardasset 但是怎么都创建不好 原因不明,怒而自己写。

以下放出核心内容。

1. 进3dsmax等3d制作软件中做一个面 像这样

调整为4个顶点2个面的最简单平面。

然后把所有的顶点位置调整为(0,0,0) 


所有顶点都在000处。导入unity 在导入fbx导入设置中将 合并顶点取消。不然导入以后会是0个顶点。

准备工作完成。

2 shader部分

直接贴源码 用的最简单的shader改的。核心代码有注解自己看

Shader "Lib/BillBoardPoint"
{
	Properties
	{
		_MainTex ("Texture", 2D) = "white" {}
		_Scale("Scale",Vector)=(1,1,0,0)
	}
	SubShader
	{
		Tags { "RenderType"="Opaque" }
		LOD 100
		cull off
		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			// make fog work
			#pragma multi_compile_fog
			
			#include "UnityCG.cginc"

			struct appdata
			{
				float4 vertex : POSITION;
				float2 uv : TEXCOORD0;
			};

			struct v2f
			{
				float2 uv : TEXCOORD0;
				UNITY_FOG_COORDS(1)
				float4 vertex : SV_POSITION;
			};

			sampler2D _MainTex;
			float4 _MainTex_ST;
			float4 _Scale;
			v2f vert (appdata v)
			{
				v2f o;
				o.vertex = UnityObjectToClipPos(v.vertex);
				o.uv = TRANSFORM_TEX(v.uv, _MainTex);
				UNITY_TRANSFER_FOG(o,o.vertex);

				//在视空间中根据uv扩展4个顶点坐标
				//不受物体缩放影响 因为在obj->project过程中还没做扩展 
				//缩放
			o.vertex.xy += float2(o.texcoord.x - 0.5, -o.texcoord.y +0.5)*_Scale.xy/_ScreenParams;
				return o;
			}
			
			fixed4 frag (v2f i) : SV_Target
			{
				// sample the texture
				fixed4 col = tex2D(_MainTex, i.uv);
				// apply fog
				UNITY_APPLY_FOG(i.fogCoord, col);
				return col;
			}
			ENDCG
		}
	}
}
思路很简单事先准备好一个0大小的面片 投影到屏幕上时再去修改。uv本身就标明了每个顶点在面片中的相对位置,所以直接拿来做参照乘个2维系数用来调整宽高。结果大概是这样的:


稍有点美中不足的是你不能直接点选这个billboard 但是框选还是可以的。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值