转自:http://qiankanglai.me/misc/2014/11/15/fur-shader/

花时间看了下毛发效果,苦于囊中羞涩没能买QuickFur、furFX等插件,最后找到了Fur Shader学习了一下。

这个代码一开始貌似是Unity 3.x版本的,我稍微改了几个地方,不然在Android上是黑的:

  • 第一遍绘制的时候Blend Off不知道为何,在Nexus 5上起不了作用,我就单独重写了第一遍Pass、保证底图能画上去;
  • Alphatest Greater [_Cutoff]据说性能比alpha blend还糟,而且效果不明显就被我直接注释了;
  • 把第二个文件用CGINCLUDE ENDCG合并进来;
  • 把VertexProgram改成了vert/frag形式。

这段代码为了利用光源,还单独写了一个Script将两个平行光的方向和颜色传进来~偷懒起见也被我干掉了。

简单解释一下原理:这个说穿了,就是画多个Pass,然后每个Pass中将顶点沿着法向方向挪动出来一部分,同时控制顶点的alpha:

  • 移动的越往外的顶点alpha越小
  • 法向量与视线越接近垂直的顶点alpha越小

最后在vert里根据normal计算下顶点的Diffuse Light,传到frag之后采样贴图乘上去就行了。

这里把相邻Pass挪动顶点的距离放大,就很清晰的看到一层层结构:

顺便提一句就是,我也见到有人是从噪声纹理贴图中取alpha,配合前面的“移动的越往外的顶点alpha越小”规则,调出一个Fur。

此外,我看了下asset shop里那俩插件的描述:

The package comes with 3 detail levels, with 10, 20 and 40 steps. More steps gives you more detailed fur, but is more expensive to render.

Pack contains multi pass FUR shaders with many extra features like physics based fur movement, fur gravity, custom coloring etc. Shaders are compiled.

感觉是同一个思路,不过控制每个Pass中顶点移动方式更加多样罢了……具体在移动设备上性能还需要再研究研究,不过随便搞20 Pass这种事情还是不幻想了...

(转)Fur Shader的更多相关文章

  1. Geometry shader总结

    什么是Geometry Shader GS存在于vertext shader和固定功能vertex post-processing stage之间,它是可选的不是必要的.GS的输入是单个primiti ...

  2. Stable Fur Generation on Mesh

    After tested the Maya 2015 XGen Grooming, we dropped it, that's really slow and unstable, totally no ...

  3. Geometry Shader 【转】

    Geometry shader – receives as its input complete primitives as a collection of vertices, and these i ...

  4. OpenGL shader 中关于顶点坐标值的思考

    今天工作中需要做一个事情: 在shader内部做一些空间距离上的计算,而且需要对所有的点进行计算,符合条件的显示,不符合条件的点不显示. 思路很简单,在vertex shader内知道顶点坐标,进行计 ...

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

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

  6. 【译】Unity3D Shader 新手教程(6/6) —— 更好的卡通Shader

    本文为翻译,附上原文链接. 转载请注明出处--polobymulberry-博客园. 动机 如果你想了解以下几件事,我建议你阅读以下这篇教程: 想知道如何写一个multipass的toon shade ...

  7. 【译】Unity3D Shader 新手教程(5/6) —— Bumped Diffuse Shader

    本文为翻译,附上原文链接. 转载请注明出处--polobymulberry-博客园. 动机 如果你满足以下条件,我建议你阅读这篇教程: 你想学习片段着色器(Fragment Shader). 你想实现 ...

  8. 【译】Unity3D Shader 新手教程(4/6) —— 卡通shader(入门版)

    本文为翻译,附上原文链接. 转载请注明出处--polobymulberry-博客园. 暗黑系 动机 如果你满足以下条件,我建议你阅读这篇教程: 你想了解更多有关表面着色器的细节知识. 你想实现一个入门 ...

  9. 【译】Unity3D Shader 新手教程(3/6) —— 更加真实的积雪

    本文为翻译,附上原文链接. 转载请注明出处--polobymulberry-博客园. 如果你满足以下条件,我建议你阅读这篇教程: 你想知道如何在表面着色器中进行混色(blend colour) 你想实 ...

随机推荐

  1. STL整理之map

    转载请注明出处,部分内容引自李煜东<算法竞赛进阶指南> 前置知识:    C++.C语言入门 Map是什么 Map是从键(key)到值(value)的映射,其内部实现是一棵以key为关键码 ...

  2. 我靠,上班eclipse看糗事百科

    package test; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; ...

  3. 【C++ Primer | 06】 函数

    contexpr函数 const用于运行期常量,constexpr用于编译期常量 • [test1.cpp] #include <iostream> using namespace std ...

  4. JS高级 - 面向对象4(json方式面向对象)

    把方法包在一个Json里 var p1 = { name: "唐三", sex: "男", dreamdu: { URL: "www.dreamdu. ...

  5. hdu 1217 汇率 Floyd

    题意:给几个国家,然后给这些国家之间的汇率.判断能否通过这些汇率差进行套利交易. Floyd的算法可以求出任意两点间的最短路径,最后比较本国与本国的汇率差,如果大于1,则可以.否则不可以. 有向图 一 ...

  6. hdu 1575 求一个矩阵的k次幂 再求迹 (矩阵快速幂模板题)

    Problem DescriptionA为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input数据的第一行是一个T,表示有T组数据.每组数据的第一行有 ...

  7. Ubuntu 安装 OpenMPI

    1. 下载OpenMPI 在官网上下载最新版本的安装包,如:openmpi-1.8.4.tar.gz 2. 解压并进行配置 tar -zxvf openmpi-3.0.0.tar.gz cd open ...

  8. vtiger自定上传图片的字段

    废话不多说,上一篇有说到过vtiger新建模块的事 现在我新建了一个Score的模块,里面需要一个上传图片的功能 在Score界面新建一个字段叫grede 但是自定义类型里面是没有,图片这个选项的,只 ...

  9. Nightmare HDU1072

    非常标准的BFS 第一次写错了很多 1.到达4时设置为墙就好了  避免了死循环 2.不用开d数组   在结构体里面就行了 3.结构体初始化函数的写法: Node(int x=0,int y=0,int ...

  10. TextInputLayout输入框验证

    <!-- 通过修改<color name="colorAccent">#023cfa</color>可以修改正确提示文本的颜色 添加<item ...