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





