unity shader之——分割物体效果(着色器分割物体的方法)
在很多打斗游戏中,经常能看到物体被撕碎或者打破的效果,这种效果比较直观,可以通过分割一个网格来实现,即在原来网格基础上,再算出一个新的网格,本章将介绍一种通过着色器分割一个物体的方法。
在很多打斗游戏中,经常能看到物体被撕碎或者打破的效果,这种效果比较直观,可以通过分割一个网格来实现,即在原来网格基础上,再算出一个新的网格,本章将介绍一种通过着色器分割一个物体的方法。
表面着色器实际上就是在顶点片元着色器上添加了一层抽象,顶点片元着色器是硬件能理解的渲染方式,而开发者应该使用一种更容易理解的方式。
今天我们要介绍的是新的文档网站中又一个知识点:着色器中的流控制和分支,这个系列涵盖了从mipmapping到GPU负载均衡等一系列话题,我们很高兴大家能一直喜欢这些内容,从流量统计数据来看大家都会花一定的时间来浏览这个网站,这看起来太棒了。
着色器只是一种把输入转化为输出的程序。着色器也是一种非常独立的程序,因为它们之间不能相互通信;它们之间唯一的沟通只有通过输入和输出。在最简配置下,至少都得有两个着色器:一个叫顶点着色器(vertex shader),它将作用于每个顶点上;另一个叫片段着色器(fragment shader),它将作用于每一个采样点。我们采用4倍抗锯齿,因此每个像素有四个采样点。
着色器的写法类似C语言,可以定义变量、常量以及函数,有main方法,在Opengl ES渲染过程中,会不断调用其main方法来进行计算,我们不去大篇幅讨论着色器语法、API等,会通过实际的例子让大家真正知道着色器中变量的含义、以及对变量进行定位和其赋值等。
在可编程管线中,我们能够编码的就是Vertex Shader(顶点着色器) 和 Fragment Shader(片元着色器),这也是渲染过程中,必备的2个着色器。
光照用来表示材质和光源之间的相互作用。光照可以和颜色,纹理,以及透明度等一起使用,共同形成屏幕上的视觉外观效果。主要存在三种类型的着色处理方法:扁平、Gouraud、Phong。这3种方法分别基于多边形,顶点,像素来计算光照效果。
常用的几个内置文件通常都被封装在cginc文件中,通过文件的包含来实现对文件中函数及变量的引用,大家可以到unity的安装目录下找到对应的文件,当然我们也可以写一些自己的cginc文件放置到该目录中,方便自己使用。
unity会把 CGINCLUDE 和 ENDCG 之间的代码插入到每一个pass中,已达到声明一遍,多次使用的目的。例如,可以在 CGINCLUDE 和 ENDCG 之间 定义多个 顶点和片段方法,在pass里只要写明 #pragma vertex 顶点方法名 #pragma fragment 片段方法名 即可,而不用写具体的函数实现。