0x00 前言

上一篇小随笔《小随笔:利用Shader给斯坦福兔子长毛和实现雪地效果》中,我和大家聊了聊著名的斯坦福兔子和利用geometry shader实现的一些效果。这篇文章继续沿用了同样来自斯坦福的另一个模型Armadillo,同样也使用了geometry shader来实现效果的表现。

0x01 凶恶的怪物和爆炸

当然,用之前的斯坦福兔子的模型做爆炸的效果也是可以的,但是考虑到要让一个那么可爱的模型变成沙砾总觉得不太好,所以长相自带怪物属性的模型Armadillo就成了一个不错的选择。

不过另一个让我选择Armadillo的原因其实是因为它的面数和顶点数相对来说更多,可以看到它有106289个顶点和212574个多边形组成,所以用来做爆炸成为沙砾的效果要更好。

ok,现在让我们把Armadillo的obj文件导入到Unity内,可以看到这个怪物已经站立在我们的场景内了。接下来我们就要利用geometry shader来实现我们想要的爆炸沙粒化的效果了。

之前提到Geometry Shader的时候,往往是利用它来生成更多新的顶点和多边形来实现我们期望的效果,例如利用它在GPU上生成草体,实现真实草的实时渲染。

但是Geometry Shader不仅可以生成新的图元,同时它还可以减少顶点和多边形的输出,以实现一些有趣的效果,比如这篇小文章的例子,利用Geometry Shader来实现怪兽的爆炸和沙粒化效果。

而我们要做的也很简单,就是在Geometry Shader内将输入的由3个顶点组成的三角形图元修改为只有一个顶点组成的点图元。而输出的这个点的坐标我们可以很简单的使用三角形的中心点坐标。

			float3 tempPos = (IN[0].vertex + IN[1].vertex + IN[2].vertex) / 3;
o.vertex = UnityObjectToClipPos(tempPos);

这样,组成怪兽的网格就由三角形图元变成了点图元,而且顶点数量也随之减少,至于怪物本身也变成了下面这个样子。

但是这个时候的模型是静止的,因此也看不出爆炸甚至是沙砾的效果。所以接下来我们就要让怪物的模型随着时间运动起来。

而一个大家都知道的运动学公式就可以用来实现这个效果:

其中的S就是顶点的最新位置,v0和a的值可以作为一个uniform变量传入shader,运动方向可以是沿着三角形的法线方向,而t的来源则是Unity内置的变量_Time的y分量。

这样,需要的几个变量我们就有了:

            //速度的值加速度的值
float _Speed;
float _AccelerationValue;
float _StartTime //法线
float3 v1 = IN[1].vertex - IN[0].vertex;
float3 v2 = IN[2].vertex - IN[0].vertex;
float3 norm = normalize(cross(v1, v2));
...
//时间
float realTime = _Time.y - _StartTime;

之后只要带入运动学公式就好了:

			tempPos += norm * (_Speed * realTime + .5 * _AccelerationValue * pow(realTime, 2));

最后的效果就变成了这样:

Demo地址:chenjd/Unity-Miscellaneous-Shaders

0x02 后记

ok,以上就是我这周的小随笔。希望大家能有所收获。哦,对了,我用的obj文件各位可以到这里下载:http://www.prinmath.com/csci5229/OBJ/index.html。

-EOF-

最后打个广告,欢迎支持我的书《Unity 3D脚本编程》

欢迎大家关注我的公众号慕容的游戏编程:chenjd01

小随笔:利用Shader实现模型爆炸和沙粒化的效果的更多相关文章

  1. 小随笔:利用Shader给斯坦福兔子长毛和实现雪地效果

    0x00 前言 发现最近没有了写长篇大论的激情,可能是到了冬天了吧.所以这篇小文只是简单介绍下如何在Unity中利用shader很简单的实现雪地效果以及毛皮效果,当然虽然标题写在了一起,但其实这是俩事 ...

  2. CSharpGL(14)用geometry shader渲染模型的法线(normal)

    +BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(14)用geometry shader渲染模型的法线(normal) +BIT祝威+悄悄在此留下版了个权的信息说: 2016-08-13 ...

  3. css小随笔(二)与通用样式

    51先在学校HTML5已经有半个多月了,然后这个星期做了一个京东的手机网站,接触到了通用样式,下面以京东的手机站为例 这两个就是京东手机站了的不同的两个板块,因为HTML5仅仅只是学完了基本标签跟cs ...

  4. 理解微信小程序的双线程模型

    有过微信小程序开发经验的朋友应该都知道"双线程模型"这个概念,本文简单梳理一下双线程模型的一些科普知识,学识浅薄,若有错误欢迎指正. 我以前就职于「小程序·云开发」团队,在对外的一 ...

  5. CentOS7.0小随笔——指令基本操作(Part.A)

    与其说是CentOS7.0的小随笔,说老实话,基本指令在每个发行版本的Linux中都基本上是一致的. Part.A部分我们讲述以下四个方面:命令行界面与图形界面.Linux系统的关闭与重启.命令行帮助 ...

  6. NLP(十八)利用ALBERT提升模型预测速度的一次尝试

    前沿   在文章NLP(十七)利用tensorflow-serving部署kashgari模型中,笔者介绍了如何利用tensorflow-serving部署来部署深度模型模型,在那篇文章中,笔者利用k ...

  7. R语言利用ROCR评测模型的预测能力

    R语言利用ROCR评测模型的预测能力 说明 受试者工作特征曲线(ROC),这是一种常用的二元分类系统性能展示图形,在曲线上分别标注了不同切点的真正率与假正率.我们通常会基于ROC曲线计算处于曲线下方的 ...

  8. Journal of Proteomics Research | 利用混合蛋白质组模型对MBR算法中错误转移鉴定率的评估

    题目:Evaluating False Transfer Rates from the Match-between-Runs Algorithm with a Two-Proteome Model 期 ...

  9. 小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像)

    小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像) 微信小程序生成特色头像,海报等是比较常见的.下面我来介绍下实现该类小程序的过程. 首先选择前端来通过 canvas 绘制.这样比较节 ...

随机推荐

  1. 使用Git 本地代码提交到 GitHub

    第一步:下载Git 工具 在官网下载 https://git-scm.com/ 第二部:注册官方账号 创建一个村代码的仓库 注册地址https://github.com/ 第三部:本地代码 通过Git ...

  2. Java求555 555的约数中最大的三位数。

    package org.llh.test; /** * 求555 555的约数中最大的三位数 * @author llh * */ public class Car { //整数j除以整数i(i≠0) ...

  3. Linux CentOS7 安装 Qt 5.9.2

    Linux CentOS7 安装 Qt 5.9.2 参考链接 http://doc.qt.io/qt-5/linux.html sudo yum groupinstall "C Develo ...

  4. sed基本常用命令

    sed的基本操作 sed 's/a/b/g' 文件a 把文件a中的a修改成b 注意这只是临时的 注:s就是所有的意思,g是缓存区的意思 sed -i 's/a/b/g' 文件a 把文件a中的a修改成b ...

  5. js with用法

    有标签的语句 with 语句用于设置代码在特定对象中的作用域. 它的语法: with (expression) statement 例如: var sMessage = "hello&quo ...

  6. ie 如何判断正在执行的脚本

    1.在非ie浏览器里,script上的onload事件会准确地在脚本执行完以后触发   2.在ie浏览器里,如果脚本是在缓存里的话,那么onload事件是在你把script标签插入Dom结束时马上执行 ...

  7. css相关 细节 优化 备忘

    <p>标签不能再包含<p>,也不能包含<div>,<div>可以包含<p> a 和 img 标签是特殊的行内元素,a标签可以包含div等,几 ...

  8. SpringBoot下配置FreeMarker配置远程模版

    需求产生原因 要求在同一个接口中,根据不同的参数,返回不同的视图结果 所有的视图中的数据基本一致 要求页面能静态化,优化SEO 例如:A接口返回客户的信息 客户A在调用接口时,返回其个性化定制的页面A ...

  9. P3003 [USACO10DEC]苹果交货Apple Delivery

    题目描述 Bessie has two crisp red apples to deliver to two of her friends in the herd. Of course, she tr ...

  10. [转载] HBase vs Cassandra:我们迁移系统的原因

    转载自http://www.csdn.net/article/2010-11-29/282698 我的团队近来正在忙于一个全新的产品——即将发布的网络游戏www.FightMyMonster.com. ...