文章目录
前言
在上一篇文章中,我们用Shader实现了面片一直面向摄像机的效果。
在这篇文章中,我们对其进行个性化修改 及 BRP下的适配。
一、个性化修改面向摄像机效果
- 在很多时候,我们并不需要面片在上下方向跟随摄像机旋转
- 我们只需要面片跟随摄像机的左右旋转。
- 那么,我们就需要对上一篇文章中实现的效果进行修改
1、把上一篇文章中求的 Z轴基向量 投影到 XoZ平面上
- 最简单的办法就是,先把摄像机坐标转化到模型本地坐标
- 让 y 值为0后,再归一化
float3 viewDir = mul(GetWorldToObjectMatrix(),float4(_WorldSpaceCameraPos,1)).xyz;
viewDir = float3(viewDir.x,0,viewDir.z);
viewDir = normalize(viewDir);
2、其余步骤和之前的一致
- 假设Y轴基向量
- 求X轴基向量
- 求Y轴基向量
3、在属性面板定义一个变量,控制面片面向摄像机的类型
- 属性面板
[Enum(Billboard,1,VerticalBillboard,0)]_BillboardType(“BillboardType”,int) = 1
- 在顶点着色器
float3 viewDir = mul(GetWorldToObjectMatrix(),float4(_WorldSpaceCameraPos,1)).xyz;
viewDir.y *= _BillboardType;
viewDir = normalize(viewDir);
4、效果
二、适配BRP
SubShader
{
Tags
{
//渲染类型
"RenderType"="Transparent"
//渲染队列
"Queue"="Transparent"
}
Blend [_SrcFactor] [_DstFactor]
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fog
#include "UnityCG.cginc"
struct appdata
{
float3 vertexOS : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float4 vertexCS : SV_POSITION;
float2 uv : TEXCOORD1;
UNITY_FOG_COORDS(2)
};
float4 _Color;
sampler2D _MainTex;
float4 _MainTe