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

花时间看了下毛发效果,苦于囊中羞涩没能买QuickFurfurFX等插件,最后找到了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. 【python】正则表达式中的转义问题

    encode('string-escape') 解决 比如想匹配'\x0e\x0a'中的'\x'后的内容,这里希望把'\x0e'作为一个字符串,那么其中的\应该被转义. 未加转义的正则: p = '( ...

  2. JS基础:(一)

    开发了很多项目,感觉javascript脚本语言用处太大了,所以,把一些心得写出来,尤其是调试的技巧. 本次开发工具:Webstorm 1.  官网:http://www.jetbrains.com/ ...

  3. P3331 [ZJOI2011]礼物(GIFT)

    题解: 首先转化为平面问题 对于每一个z,f(x,y)的值为它能向上延伸的最大高度 ...莫名其妙想出来的是n^4 以每个点作为右下边界n^3枚举再o(n)枚举左下边界计算z的最大值 然而很显然这种做 ...

  4. SpringBoot前端给后端传list

    前端JS "]; var params = { taskList: taskList }; $.ajax({ type: "PUT", dataType: "j ...

  5. Pig和Hive的对比

    Pig Pig是一种编程语言,它简化了Hadoop常见的工作任务.Pig可加载数据.表达转换数据以及存储最终结果.Pig内置的操作使得半结构化数据变得有意义(如日志文件).同时Pig可扩展使用Java ...

  6. Ajax提交form表单内容和文件(jQuery.form.js)

    jQuery官网是这样介绍form.js A simple way to AJAX-ify any form on your page; with file upload and progress s ...

  7. hzy 和zsl 的生存挑战

    Problem Description zsl 和hzy 来到了臭臭城堡,打算挑战臭臭城堡的大魔王hyz,大魔王hyz设置了这样的一个挑战:1. zsl 和hzy两个人各自来到一间密室,期间两人无法以 ...

  8. 论maven release的必要性

    大多数java开发的小伙伴都用过maven来对包进行管理.在自己写项目的过程中,对自己的项目也会进行groupdId,artifactId,version的配置.下面我们来对着3个配置进行简单说明. ...

  9. hibernate中多对一问题

    例如User类中有个Group引用对应数据库就是groupId的外键了. 外键映射成一个类对吧. <many-to-one name="groupId" column=&qu ...

  10. C#全能数据库操作类及调用示例

    C#全能数据库操作类及调用示例 using System; using System.Data; using System.Data.Common; using System.Configuratio ...