广告牌效果既是不论物体与摄像机的角度,被渲染物体总是正对着摄像机。
此技术广泛利用于粒子效果中,例如Unity内置的Particle System。下文将要介绍如何在Shader中实现广告牌效果。

在视空间对顶点进行重定位


(图1:摄像机绑定在立方体上,立方体进行原地旋转,雪花使用里广告牌渲染,总是正对着摄像机)

此项技术的核心是在视空间(view space)将顶点进行重新定位。

网上有一个简单的例子,https://en.wikibooks.org/wiki/Cg_Programming/Unity/Billboards

...output.pos = mul(UNITY_MATRIX_P, mul(UNITY_MATRIX_MV, float4(0.0, 0.0, 0.0, 1.0))+ float4(input.vertex.x, input.vertex.y, 0.0, 0.0)* float4(_ScaleX, _ScaleY, 1.0, 1.0));
...

看以上这行代码理解广告牌的两处核心逻辑:

1,先看mul(UNITY_MATRIX_MV, float4(0.0, 0.0, 0.0, 1.0))
float4(0.0, 0.0, 0.0, 1.0)代表顶点所属物体在Model空间中的位置,mul MV矩阵后,Model空间转到了视空间。在此阶段x,y轴方向既是屏幕的xy轴。在这次mul运算之后,所有的顶点位置都集中到了被渲染物体的中心点,并等待对它们进行重新定位。由于视空间换行是一个必须过程,相比于在其他空间重定位还需要再寻找摄像机角度,这里操作可以省去一次矩阵乘法运算。

2,再看+ float4(input.vertex.x, input.vertex.y, 0.0, 0.0):
由于vertex.xy是当前顶点相对与模型中心点的,已知中心点位置在2D平面中用vertex.xy就可以对顶点进行定位了,将顶点的位置分别在视空间中向x方向偏移vertex.x,向y方向偏移vertex.y,就相当于以float4(0.0, 0.0, 0.0, 1.0)为中心,在视空间重新归位了顶点位置。而由于视空间的z轴与摄像机是一致的,所以所有重新归位xy坐标的顶点连接起来的图元一定是面向摄像机的。

以上的代码试用于当2D图元的顶点是以自身坐标轴中的xy分布的,例如Unity内置的立方体quad,如果是其他情况,例如plane的顶点是在xz平面分布,那么代码就要改为+ float4(input.vertex.x, input.vertex.z, 0.0, 0.0):

(图2:plane的顶点以xz分布。绿色箭头指向y,兰z,红x)

(图3:quad的顶点分布在xy平面上)

应用到复杂网格

以上Shader代码只适用于渲染单个quad,或plane的mesh。在用同一个Shader渲染复杂网格的情况下,需要用每个基础图元单位的中心点取代上文中的物体中心点‘float(0,0,0,1)’。


(图4:在以两个三角形组成的quad为基本单位的线型网格中实现粒子广告牌,所有的亮点都在quad中心点并正对摄像机)


(图5:在以两个三角形组成的quad为基本单位零散分布在3D空间中,它们都属于同一个mesh)

以图4图5为例,可以在进入渲染管线之前的顶点属性定义阶段(C#脚本)计算好quad的中心点位置,然后赋值给Mesh的任意属性,Shader在顶点着色器通过相应的语义获取。也可以在Shader的几何着色器中进行计算,因为两个三角形是对称的,只要用三个顶点的位置计算斜边中点就可得出quad中心点。不论哪种实现,计算公式为:

vcenter=(v0−v3)/2+v3v_{center}=(v_0-v_3)/2+v_3vcenter​=(v0​−v3​)/2+v3​

v0v_0v0​与v3v_3v3​为quad对角顶点位置,vcenterv_{center}vcenter​为quad中心点位置,具体实现代码就不再赘述。


2020-8-15:review

Unity Shader: Shader粒子广告牌相关推荐

  1. Unity Shader - Billboard 广告板/广告牌 - BB树,BB投影

    文章目录 实现 CPU层 使用简单实现方式 模仿Shader层的复杂逻辑写法 向量叉乘的顺序 新的BB本地坐标系矩阵:newLocalMatrix可以不构建 2D的Billboard GPU层 带有可 ...

  2. Unity初学者Shader Graph教程

    Unity初学者Shader Graph教程 了解面向非程序员的 Unity 引擎可视化着色器编程工具的来龙去脉 课程英文名:Your Ultimate Guide to Shader Graph f ...

  3. Unity之Shader基础探索

    Unity之Shader基础探索 一.什么是Shader? 1.Shader的开发语言 2.着色器用途 3.着色器的编辑 4.着色器性能分析工具 5.着色器编译 6.异步着色器的编译工作原理 7.内置 ...

  4. Unity编写Shader内置各种矩阵和方法介绍

    返回目录 大家好,我是阿赵. 这里记录一下Unity编写Shader内置各种矩阵和方法 一.Unity内置转换矩阵 1.MVP类矩阵 UNITY_MATRIX_MVP:Current model * ...

  5. 1.Unity之Shader新手入门

    Unity Shader着色器的基本概念 如何使用Unity Shader着色器 示例:如何使用Unity Shader着色器创建复杂的效果 总结 什么是Unity中的Shader着色器? Shade ...

  6. Unity学习shader笔记[一百]简单焦散Caustic效果

    焦散是模仿光透过水底的一个投影景象 有两个版本,改版最后效果如下 这里是简单的基于物体的焦散,基于水体的焦散思路是水面物体的shader中拿到ColorBuffer,然后用水体的屏幕空间坐标取采集Co ...

  7. Unity中用Shader实现镜子效果

    做项目的时候要用到镜子,折腾了一下午,发现做镜子还是蛮快的,总结了一下网上的教程,大致有这么几种做法: 1.使用反射探针(Reflection Probe) 2.使用Render Texture 3. ...

  8. Unity使用Shader快速制作一个圆形遮罩

    Unity使用Shader快速制作一个圆形遮罩 如何用Shader来做出圆形.切倒角和边缘虚化 Unity使用Shader快速制作一个圆形遮罩 橙子前言 一.创建Shader 二.创建Material ...

  9. Unity官方Shader介绍: TRANSFORM_TEX

    Unity官方Shader介绍: TRANSFORM_TEX 文章目录 Unity官方Shader介绍: TRANSFORM_TEX 纹理(Texture) 纹理坐标(UVW, STR) 纹理映射(T ...

最新文章

  1. 通过JS如何获取IP地址
  2. 微信小程序INC自增自减MUL自乘问题
  3. mysql重做日志与binlog日志区别_MySQL日志之binlog、redo log、undo log
  4. Educational Codeforces Round 73 (Rated for Div. 2) E. Game With String 思维博弈 好题(2500)
  5. seekbar垂直放置_将刻度线对准Android SeekBar
  6. Android 第三方有用的库收集
  7. Oracle中dmp/dmpdp导出,imp/impdp导入
  8. ikvm.net简介
  9. uniapp 即时通讯_uniapp与webview的实时通讯
  10. c# 操作 Excel
  11. vs code安装使用ESLint,typescript
  12. Alex 的 Hadoop 菜鸟教程: 第21课 不只是在HBase中用SQL:Phoenix
  13. 软件工程专业要考c语言吗,【干货】软件工程专业课到底考什么?
  14. 豆瓣250信息爬取及保存到excel中
  15. excel查找窗口被拉边上_excel2010两个窗口一拉一靠左右排列 - 卡饭网
  16. JMeter-配置元件-HTTP授权管理器
  17. 京东用户行为数据分析——以Python为主要工具
  18. BAS:天牛须搜索智能优化算法
  19. 一台微型计算机的好坏 主要取决于,计算机一级MSOffice应用选择题
  20. 2018年38种自由职业大盘点

热门文章

  1. jdbc mysql 存储过程查询数据_jdbc调用mysql存储过程实现代码
  2. java mybatis 搭建_mybatis环境搭建(转载)
  3. json string 格式_python中json函数的用法
  4. 怎么把外部参照合并到图纸_CAD图纸中插入的参照底图如何使用
  5. 爬虫如何监听插件_NodeJS概述2-事件插件-简易爬虫
  6. 中加学校计算机考试题,嘉应学院2009年计算机期末考试试题
  7. linux安装phpunit,linux下安装phpunit
  8. php在四线城市待遇如何,月薪5000元在四线城市算什么水平,丢人吗?
  9. php curl https_PHP FFI:一种全新的PHP扩展方式
  10. excel文件无法打印提示内存不足_U盘拷贝文件提示目标文件过大无法复制怎么解决...