Unity Shader

Unity Shader编程之-Unity Shader常用函数列表

 

CG标准函数库
和C的标准函数库类似,Cg提供了一系列内建的标准函数。这些函数用于执行数学上的通用计算或通用算法(纹理映射等),例如,需要求取入射光线的反射光线方向向量可以使用标准函数库中的reflect 函数,求取折射光线方向向量可以使用 refract 函数,做矩阵乘法运算时可以使用mul 函数。
有些函数直接和 GPU 指令相对应,所以执行效率非常高。绝大部分标准函数都被重载过,用于支持不同长度的数组和向量作为输入参数。

Cg标准函数会随着未来 GPU硬件的发展而不断优化,所以基于标准函数库写的程序是可以用在以后的 GPU硬件上的。 Cg 标准函数库主要分为五个部分:
数学函数(Mathematical Functions);
几何函数(Geometric Functions);
纹理映射函数(Texture Map Functions)
偏导数函数(Derivative Functions);
调试函数(Debugging Function)

数学函数(Mathematical Functions)
数学函数用于执行数学上常用计算,包括:三角函数、幂函数、园函数、向量和矩阵的操作函数。这些函数都被重载,以支持标量数据和不同长度的向量作为输入参数。
More

Unity3d Shader编程之实时动态反射周围世界

 

先截出一个效果图:

要反射出周围世界
我们只需要一个周围世界的cubemap

先来看反射的shader

首先声明变量:
_Cubemap                  需要反射的cubemap
_ReflAmount              反射的强度

More

Unity3d编程ShaderToy基础篇之谈谈点、线的绘制

前面一篇的时候,发现还是不够基础。因此打算增加几篇基础篇,从点线面开始,希望可以更好理解。

其实用Pixel Shader的过程很像在纸上绘画的过程。屏幕上的每一个像素对应了纸上的一个方格,如果你愿意,你甚至可以一个个判断像素的位置,从而画出任何你想画的图像,也的确有爱好者这么做过。但往往,我们需要的是一个动态的效果,这个效果往往依赖于数学公式的约束。我们可以说是,用数学去绘画。我们用数学去约束,哪些点应该用什么颜色去绘制。

这篇,我们从基本的点和线开始,看一下如何在Pixel Shader里面随心画出点和线。

在哪里画

在开始之前,有一个最基本的问题我们要计算清楚,就是如何知道当前计算的fragment的像素位置。在之前的开篇中,我们给出了模板。其中v2f结构里,有一个很重要的变量srcPos,它的计算如下:

More

Unity3d Shader编程ShaderToy跳动的心

 

如果你还不了解ShaderToy,请看开篇

作为ShaderToy系列的第一篇,我们先来点简单的。下面是效果:

http://www.unitymanual.com/data/attachment/forum/201503/05/180340lrmyyxb5grf385rr.gif

我们使用了之前的开篇中的基础模板。这里仅仅给出main函数的代码:

More

Unity3d Shader编程之ShaderToy

 

如果你还没听过ShaderToy,那你就真的错过了一个很好的shader学习网站。我是在群里有一次听到小伙伴们提到这个网站的。点进去就会发现里面有很多很绚丽的shader展示。

说简单点,这个网站是专门让人们分享和编写GLSL的pixel shaders的。换句话说,里面那些绚丽的效果仅仅依靠pixel shaders就可以完成了(当然还有纹理和模型的配合,如有不对请指出),是不是很强大?里面的强人很多,就像头脑风暴一样,让你一次次发出惊叹,原来还可以这样做!但是,这里面也蕴含了很多数学和算法知识,所以你可能会经常发现自己脑袋不够用,跟不上作者的思路。。。不过,脑袋都是靠锻炼的嘛,没有捷径可走,多看多写总是没错的~

强烈建议大家先去逛一逛,有很多很好玩的东西,例如这个人写了一个莫比乌斯带,而这个人写了一个耀眼的小太阳!一开始你很难相信这些完全都是用shader计算出来的。

More

【Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)—— 自定义光照模式

 

本文主要讲解了Unity中SurfaceShader的自定义光照模式的写法。

上篇文章中我们已经说到,表面着色器将分为两次讲解,上一篇文章中介绍了表面着色器的基本概念和一些写法,用内置的兰伯特光照模式来进行Surface Shader的书写,而本文将介绍Surface Shader+自定义的光照模式的写法。

OK,言归正传,依然是先来看看本文配套的游戏场景截图。

运行游戏,音乐响起,金黄色的丰收之秋映入眼帘

More

【Unity3D Shader编程】之六 暗黑城堡篇: 表面着色器(Surface Shader)的写法(一)

 
本文主要讲解了Unity中SurfaceShader的具体写法,以及几个常用的CG函数的用法。

在这里先说明一下,表面着色器将分为两次讲解,本文介绍表面着色器的基本概念和一些写法,用内置的兰伯特光照模式来进行Surface Shader的书写,而下次将介绍Surface Shader+自定义的光照模式的写法。

运行游戏,音乐响起,首先是一个欧式风格的集市映入眼帘:
 
 

More

【Unity3D Shader编程】之五 圣诞夜篇: Unity中Shader的三种形态对比&混合操作合辑

 

本文算是固定功能Shader的最后一篇,下一次更新应该就会开始讲解表面Shader,而讲解完表面Shader,后续文章最终会讲解到顶点着色器和片段着色器(也就是可编程Shader)。

文章第一部分复习和进一步了解了Unity中Shader的三种形态,然后讲解了固定功能Shader中混合操作的方方面面,然后以6个Shader的书写作为实战内容,最后创建了一个温馨美好的圣诞夜场景进行了Shader的测试。

 

依旧是国际惯例,先上本文配套程序的截图吧。

圣诞节就快到了,而下次更新就已经过了圣诞节,于是这次更新浅墨就提前把这个场景放出来吧,预祝大家圣诞节快乐~

 

雪花飘落:

More

【Unity3D Shader编程】之四 热带雨林篇: 剔除、深度测试、Alpha测试以及基本雾效合辑

 

本文介绍了Unity中Shader书写中会用到的剔除、深度测试、Alpha测试以及基本雾效相关的语法知识,然后以6个Shader的书写作为实战内容,最后创建了一个生机勃勃的热带雨林场景进行了Shader的测试。依旧是国际惯例,先上本文配套程序的截图。

绿色的海洋:

  More

【Unity3D Shader编程】之三 光之城堡篇:子着色器、通道与标签的写法 & 纹理混合

本文介绍了Unity中子着色器、通道和标签相关的详细概念与写法,以及纹理的设置方法,基本的纹理混合写法,写了5个Shader作为本文Shader讲解的实战内容,最后创建了一个梦幻的光之城堡场景进行了Shader的测试。依旧是国际惯例,先上本文配套程序的截图。

光之城堡:

More