🚀 优质资源分享 🚀
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
使用顶点动画中的广告牌技术(Billboarding),来实现大卢恩在竖直方向上保持始终朝向玩家的效果。
1、广告牌技术原理
广告牌技术会根据视角方向来旋转一个被纹理着色的多边形,通常用于渲染烟雾、云朵、火焰等。
使用三个向量确定这个广告牌的方向:
- 表面法线(normal)
- 指向上的方向(up)
- 指向右的方向( right)
存在两种广告牌:
- 广告牌完全朝向摄像机。此时广告牌的法向量就是视角方向
- 广告牌在保持垂直的同时朝向摄像机。(如艾尔登法环中的大卢恩)此时广告牌的向上的方向始终垂直。
构建这三个向量的过程:
- 通过初始计算得到广告牌的表面法线(即视角方向) 和指向上的方向。
两者往往不垂直,但是两者其中之一是固定的。 - 我们假设广告牌完全朝向摄像机。那么法线方向是固定的。
我们根据初始的表面法线和指向上的方向来计算出目标方向的指向右的方向(叉积)
right = normal * up
- 对其归一化后,再由法线方向与指向右的方向计算出正交的指向上的方向即可得到新的 up。
up = normal * right
- 如果广告牌在保持垂直的同时朝向摄像机(大卢恩),过程也相似。
只要在最开始将广告牌的法线方向的 y 值(竖直方向上)设为 0 。
这样再按照上述的固定法线的方式计算就可以保证广告牌始终垂直啦。
2、实现
整体代码在此部分最后展示
在 Unity 中创建一个 Shader,创建一个材质,将创建的 Shader 赋给创建的材质。
以下为 Shader 的写作过程:
声明变量:
| | Properties { |
| | //透明纹理 |
| | \_Ma