转自: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. Java中加密算法介绍及其实现

    1.Base64编码算法 Base64简介 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RF ...

  2. 步步为营-36-ADO.Net简介

    与数据库进行连接交互 方法一 #region 01连接对象 //01 连接字符串 string connstr = "server=.;uid=sa;pwd=sa;database=Demo ...

  3. javascript如何从tr中分别获得每个td的元素

    <html> <body> <table border="1" id="table1"> <tr id="r ...

  4. ASP.NET Identity详解

      Asp.Net Identiy是ASP.NET身份验证机制. 如何构建安全的Web应用? 我们先来思考一个问题:如何构建安全的WEB应用? 一直以来,这都是比较热门的话题.不幸的是,目前还没有一种 ...

  5. [转] Nginx 配置 SSL 证书 + 搭建 HTTPS 网站教程

    一.HTTPS 是什么? 根据维基百科的解释: 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合 ...

  6. Codeforces Round #467 (Div. 2) E -Lock Puzzle

    Lock Puzzle 题目大意:给你两个字符串一个s,一个t,长度<=2000,要求你进行小于等于6100次的shift操作,将s变成t, shift(x)表示将字符串的最后x个字符翻转后放到 ...

  7. HTTP 的长连接和短连接

    一.什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待 ...

  8. Ubuntu (虚拟机同样) 更换内核?

    1:查看当前安装的内核dpkg -l|grep linux-image 2:查看可以更新的内核版本:sudo apt-cache search linux-image 3:安装新内核sudo apt- ...

  9. Hash值破解工具Hashcat使用

    Hash值破解工具Hashcat使用 Hashcat介绍 HashCat系列软件拥有十分灵活的破解方式,可以满足绝大多数的破解需求. Hashcat系列软件是比较牛逼的密码破解软件,系列软件包含Has ...

  10. 从零搭建ES搜索服务(一)基本概念及环境搭建

    一.前言 本系列文章最终目标是为了快速搭建一个简易可用的搜索服务.方案并不一定是最优,但实现难度较低. 二.背景 近期公司在重构老系统,需求是要求知识库支持全文检索. 我们知道普通的数据库 like ...