Unity Shader: Shader粒子广告牌
来源:互联网 发布:淘宝天下视频营销 编辑:程序博客网 时间:2024/06/09 16:59
广告牌效果既是不论物体与摄像机的角度,被渲染物体总是正对着摄像机。
此技术广泛利用于粒子效果中,例如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));...略
主要看以上这行代码。
核心思想:
通过以上代码理解广告牌的两处核心逻辑:
先看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矩阵后,变换到世界空间对应位置再转换到视空间。在此阶段x,y轴方向既是屏幕的xy轴。
进入到了视空间,并把当前顶点移到了被渲染物体所在位置,接下来要进行适当的偏移,使各个顶点重新连接成正对摄像机的图元。
+ float4(input.vertex.x, input.vertex.y, 0.0, 0.0):
由于vertex.xy是相对模型中心点的距离,因此在比较简单的图元中,例如矩形,可以把他理解成矩形的长宽的一半(假如矩形的中心点是在正中)。那么在此将四个顶点的位置分别在视空间中向x方向偏移vertex.x,向y方向偏移vertex.y,就相当于以float4(0.0, 0.0, 0.0, 1.0)为中心,面向摄像机重新定位了矩形的四个顶点。
以上的代码试用于当图元的顶点是以坐标轴中的xy分布的,例如quad,如果是其他情况,例如plane的顶点是以xz分布,那么代码就要改为+ float4(input.vertex.x, input.vertex.z, 0.0, 0.0):
绿:y
兰:z
红:x
(图2:plane的顶点以xz分布)
(图3:quad的顶点以xy分布)
推广到复杂分布的粒子网格:
以上代码只适用于渲染单个quad,或plane。在用同一个Shader渲染复杂网格的情况下,需要用每个quad的中心点取代上文中的‘float(0,0,0,1)’。
(图4:在线型网格中实现粒子广告牌)
(图5:效果图中的三维零散分布网格)
计算两个三角形组合的quad中心点可以在cpu中(脚本)进行,然后通过Mesh插入顶点属性中,Shader在渲染时通过相应的语义获取。也可以在Shader的几何着色器中进行计算,不论哪种,计算公式为:
如果v0与v3为quad对角,v_center为quad中心点,那么
具体实现代码就不再赘述。
- Unity Shader: Shader粒子广告牌
- unity shader
- Unity Shader
- Unity-Shader
- unity shader
- Unity Shader
- Unity Shader
- Unity Shader
- unity shader
- Unity Shader 学习笔记(18)纹理动画、顶点动画、广告牌技术
- Shader以及Unity中的Shader
- Unity Shader 二 发光Shader
- Unity Shader简单Shader一
- Unity Shader简单Shader二
- Unity Shader修改Shader属性
- Unity Shader--fixed function shader
- [Unity Shader] Fixed Function Shader
- Unity Shader 之Geometry Shader
- 【CodeForces】598A
- python之元组字典及set类型
- (五)linux下c语言实现在线词典
- 常用的正则表达式 数字 邮箱 电话等
- 算法题/用递归实现一个字符串的全排列
- Unity Shader: Shader粒子广告牌
- CodeForces Round 428 div2 839D Winter is here(数学)(详解)
- 十条穷人思维,来看看你占了几条!
- 求多个数的最大公约数方法
- java 比较器 对多个对象进行排序操作
- 堆排序-------------->_<
- hdu-4725 The Shortest Path in Nya Graph (spfa + 建图)
- pytyon关键字参数
- LinkedList与迭代器模式