Unity Shader

[Unity Shader编程之]自定义双面材质(doubleside material)二

 

继续上篇文章《[Unity Shader编程之]自定义双面材质(doubleside material)二》前面说了Surface shader是不能写两个pass渲染不同面的,但其实surface方式可以写多个渲染过程,根本不需要pass的概念,Surface Shader可以这样写:
Call back 
渲染正面的代码
Call front
渲染反面的代码

就可以实现双面不同的控制了。
根据这个原理,其实我们只要把系统内建shader的源代码复制一份,就能实现另一面不同效果了。以下供参考: More

[Unity Shader编程之]自定义双面材质(doubleside material)一

 

Unity内置的Shader,都是单面效果,想必导入Mesh的同学都碰到过这样的痛苦,布料飘起的背面部分看起来是空气,汽车透过车窗看到是路面…各种蛋疼。
有些文章教导大家 把模型做出厚度来吧,这种做法实在太那个啥了……

其实用改写Shader的方法可以很方便的实现双面材质。
Unity里有3种Shader方式:
1.Fixed Function Shaders 
2.Vertex and Fragment Shaders
3. Surface Shaders
关于这部分的详细介绍,请参考官方的教程。
这三种方式里,都可以通过直接在Shader代码头部添加一个Cull off 语句,实现强制双面渲染。
但是直接用Cull off的方式 有个重大的缺陷,这材质从两面看无论贴图、颜色、反光、照明情况,都是一模一样的,这并不符合大多数实际情况的常识。
在第1和第2种Shader里,是可以通过在一个渲染子程序里用两个渲染Pass来实现双面不同效果的,这部分网上的资料也很多,写起来也很简单直接。

这里主要讨论的是第三种也是最常用的Surface Shader的双面不同效果的实现。
Surface Shader是不能写在Pass里的,所以要实现它的双面不同效果就要用其他变通的办法。

首先去Unity官方网站下载一个内置Shader的代码包,链接如下:
http://unity3d.com/download_unity/builtin_shaders.zip 
打开后看见一堆.shader文件,可以用任何文本编辑器打开。可以看见系统内建的Shader基本都是Surface方式。
这里随便打开一个Normal-BumpSpec.Shader 这是普通的高光-凹凸贴图材质 More

[Unity Shader编程之]Alpha Blending

 

Alpha  Blending主要用于实现半透明效果,类似于玻璃,学习Blending之前,首先要了解源和目标。

源:已经计算过的颜色,形象地说,就是Blending操作之前,经过各种操作计算后的颜色。

目标:已经在屏幕的颜色,因为要实现半透明效果,要把渲染队列设为Transparent,这里的”已经在屏幕的颜色”指的是在Transparent之前渲染的像素颜色,其中包含相机的背景颜色,这里可以通过测试来证明一下,看不懂的可以先跳过这个shader。其中赋值给_MainTex的是一个rgb为(1,1,1),a为0.5的tex。 More

Unity Shader编程之Unity的GPU编程问题解析

 

本篇文章我们来谈下关于Unity中的Shader编程方面的函数问题,所谓GPU编程其实就是把固定流水线的各种矩阵变换放到了GPU里面进行。

下面给大家主要介绍一些基本的常识:

我们在Shader编程中经常使用 Vertex & Fragment Shaders,通过举例说明: More