(转)Fur Shader
转自: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的更多相关文章
- Geometry shader总结
什么是Geometry Shader GS存在于vertext shader和固定功能vertex post-processing stage之间,它是可选的不是必要的.GS的输入是单个primiti ...
- Stable Fur Generation on Mesh
After tested the Maya 2015 XGen Grooming, we dropped it, that's really slow and unstable, totally no ...
- Geometry Shader 【转】
Geometry shader – receives as its input complete primitives as a collection of vertices, and these i ...
- OpenGL shader 中关于顶点坐标值的思考
今天工作中需要做一个事情: 在shader内部做一些空间距离上的计算,而且需要对所有的点进行计算,符合条件的显示,不符合条件的点不显示. 思路很简单,在vertex shader内知道顶点坐标,进行计 ...
- CSharpGL(14)用geometry shader渲染模型的法线(normal)
+BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(14)用geometry shader渲染模型的法线(normal) +BIT祝威+悄悄在此留下版了个权的信息说: 2016-08-13 ...
- 【译】Unity3D Shader 新手教程(6/6) —— 更好的卡通Shader
本文为翻译,附上原文链接. 转载请注明出处--polobymulberry-博客园. 动机 如果你想了解以下几件事,我建议你阅读以下这篇教程: 想知道如何写一个multipass的toon shade ...
- 【译】Unity3D Shader 新手教程(5/6) —— Bumped Diffuse Shader
本文为翻译,附上原文链接. 转载请注明出处--polobymulberry-博客园. 动机 如果你满足以下条件,我建议你阅读这篇教程: 你想学习片段着色器(Fragment Shader). 你想实现 ...
- 【译】Unity3D Shader 新手教程(4/6) —— 卡通shader(入门版)
本文为翻译,附上原文链接. 转载请注明出处--polobymulberry-博客园. 暗黑系 动机 如果你满足以下条件,我建议你阅读这篇教程: 你想了解更多有关表面着色器的细节知识. 你想实现一个入门 ...
- 【译】Unity3D Shader 新手教程(3/6) —— 更加真实的积雪
本文为翻译,附上原文链接. 转载请注明出处--polobymulberry-博客园. 如果你满足以下条件,我建议你阅读这篇教程: 你想知道如何在表面着色器中进行混色(blend colour) 你想实 ...
随机推荐
- 将模型.pb文件在tensorboard中展示结构
本文介绍将训练好的model.pb文件在tensorboard中展示其网络结构. 1. 从pb文件中恢复计算图 import tensorflow as tf model = 'model.pb' # ...
- poj3264 倍增法(ST表)裸题
打出st表的步骤:1:建立初始状态,2:区间按2的幂从小到大求出值 3:查询时按块查找即可 #include<iostream> #include<cstring> #incl ...
- Nginx部署多个网站
为节省资源,通常一个服务器会运行多个网站,通常一个服务一个IP,多个域名共用一个IP,多个域名共用一个端口(通常是80端口). 这时候需要一台服务器部署多个网站,多个网站共用一个IP,共用一个80端口 ...
- springbank 开发日志 SpringMVC是如何找到handler找到对应的方法并执行的
从DispatcherServlet说起,本文讨论的内容都是DispatcherServlet的doDispatch方法完成 mappedHandler是一个HandlerExecutionChain ...
- POJ 3280 Cheapest Palindrome【DP】
题意:对一个字符串进行插入删除等操作使其变成一个回文串,但是对于每个字符的操作消耗是不同的.求最小消耗. 思路: 我们定义dp [ i ] [ j ] 为区间 i 到 j 变成回文的最小代价.那么对于 ...
- AOJ 0525 Osenbei【穷竭搜索】
AOJ 0525 题意: 有一个烤饼器可以烤r行c列的煎饼,煎饼可以正面朝上(用1表示)也可以背面朝上(用0表示).一次可将同一行或同一列的煎饼全部翻转.现在需要把尽可能多的煎饼翻成正面朝上,问最多能 ...
- #14 [BZOJ2090/2089] [Poi2010]Monotonicity 2/Monotonicity
题解: 首先想到了标算..然后证明了一发是错的(事实证明很智障) 先说正确性比较显然的O(n^2)算法 令f[i][j]表示前i个物品,匹配到第j个括号,最大值是多少 g[i][j]表示前i个物品,匹 ...
- 062 hive中的常用方法(case,cast,unix_timestamp)
1.case的用法 )格式1 case col when value then '' when value then '' else '' end )格式2 case when col='value' ...
- 程序猿(媛)的葵花宝典-- 必备idea 插件plugins 提高编码效率
最近发现了几个非常好用 提高编码效率 的idea 插件 跟大家分享一下,,,不用谢我!!!!!!!!!!!!! 因为idea自带的插件下载可能连接不上服务器而导致插件下载失败,所以这里推荐使用引入 ...
- [软件研究]对AMH面板的研究
0x00 前言 继续研究,这次来看一下AMH面板,图截自官网 就让我们来看看这个多个"首个"的面板做的怎么样吧. 0x01 安装 官方提供了两种安装方式,一是极速安装,二是编译安装 ...