文章目录
- 前言
- 一、个性化修改面向摄像机效果
- 1、把上一篇文章中求的 Z轴基向量 投影到 XoZ平面上
- 2、其余步骤和之前的一致
- 3、在属性面板定义一个变量,控制面片面向摄像机的类型
- 4、效果
- 二、适配BRP
- 三、最终代码
前言
在上一篇文章中,我们用Shader实现了面片一直面向摄像机的效果。
- Unity中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 fra