Hello . 大家好,我这次带来了完整的手游写实角色渲染合集,我是麦田。本次是写实头发的各向异性表达——Kajiya-Kay光照模型。一起来看这篇U3D实时渲染教程之角色头发各向异性表达(上)。

这个系列主要分为三个部分:

1.头发的渲染

2.皮肤的渲染

3.眼睛的渲染

每个分为2个文章,第一篇讲基础理论,第二篇讲实际操作,最后的工程文件分别是Shader代码和Shader图表两种形式。

一、观察

在游戏内,出于性能的考虑。引擎不会做到和DCC软件使用离线渲染器渲染出来一样的毛发效果,如Maya的XGen这种质感。这时候我们就有了替代方案,即:使用面片头发。这就涉及到了如何去表达头发的质感问题。

毛发的各异

螺纹不锈钢的各异

二、分析

我们先从美术角度分析一下头发:

我们可以看到头发上的高光和传统的球体的高光不一样,头发的高光更近似一个不规则的条状(如果放置在一个平面上)。

而且条状的上下似乎有一定的渐变规律,暗-亮-暗。金属器皿上的高光波纹近似。我们着重介绍头发的理论基础。

上图圈1的区域是亮的,圈2是暗色,这里我们从观察可以得出头发的高光形状与明暗的变化。如果观察的仔细的话,可以回忆一下,生活中,看到姑娘的头发,会跟随看的方向和光产生偏移,以及透光性(散射)。

三、总结

从美术角度总结一下:

1.需要用面片做出好看的头发模型。

2.头发想要好看必须要有一个这种形状的高光,并且有明暗过度。

3.能受到灯光的影响,表达出她的透气感。

我们再从程序的角度分析一下头发:

找案例,Render Doc截帧,Profile,Frame Debug ,review源码,一气呵成(哈哈,开个玩笑)

既然说到这里,我们就引入GDC2004的那片PDF的内容吧——Kajiya-Kay模型传送门:

(注:worldBinormal就是我们要的副切线,这里写做了副法线)

可以看出利用cross(叉积)来得出向量,然后再乘上tangentSign得到最终确定方向的副切线。所以说副切线的方向主要是由tangentSign来决定的,而tangentSign是由v.tangent.w* unity_WorldTransformParams.w计算得出的。

这里的法线切线副切线的基础内容,在知乎的Taecg的一片文章介绍的非常详细了。我这里只是拾人牙慧简单捋一遍。传送请走:https://zhuanlan.zhihu.com/p/103546030

五、回归到公式理解

T,即为上文讲到的切线。但是这里是副切线,H是什么呢?H是光入射方向L和视口方向V的中间向量,通常也称之为半角向量(Half),半角向量被广泛用于各类光照模型如Blinn—Phong。

为什么会有这个H呢?我们来回想一下Blinn-Phong的光照模型和示意图:

Blinn-Phong和Ponng的区别就在于多了一个H

当视线正好与反射向量对齐时,半程向量就会与法线完美契合。所以当观察者视线越接近于原本反射光线的方向时,镜面高光就会越强。

获取半程向量的方法很简单,只需要将光线的方向向量和观察向量加到一起,并将结果归一化(Normalize)就可以了。

在引入半向量H之后,我们现在应该就不会再看到Phong光照中高光断层的情况了。下面两个图片展示的是两种方法在镜面光分量为0.5时的对比:

除此之外Blinn-Phong就没什么好说的了,Blinn-Phong与Phong唯一的区别就是,Blinn-Phong测量的是法线与半程向量之间的夹角,而Phong测量的是观察方向与反射向量间的夹角。

绕了一堆,不就是Blinn—Phong高光的计算公式么!

我们知道了这两个数值,回到公式,我们再看一下,是不是了然了?

哦!就是副切线和LightingDir+ViewDir的和,然后点积,然后平方,然后用1减去这个值后再开方!最后想要到这个效果我们再平方。

六、实践光照模型

我们用Graph复原一下逻辑,验证一下想法!

Graph逻辑图

这个高光模型我们给到一个球上观察,OK,基本的环状效果已经有了,剩下的就是加入comb map 来细化了。

观察

CombMap采样

写在后面:头发的光照模型我感觉更加近似一个经验值模型,是基于观察近似的算法而非基于理论模拟。我们可以在这个理论模型的基础上进行一些改进,让它更加符合我们想要的一个效果。原理虽然枯燥,但确实很重要。具体的改动,会在实操的第二章节介绍。

头发卡我卡得最难受的地方可能就是半透排序的方式了。思路是从模型下手加上双Pass解决。

七、完整内容效果

八、完整内容预习

以下是完整的Graph图表和Shader代码部分(手撸),有兴趣的朋友可以先看一下。具体工程下一篇讲完的时候放出来。

理解透彻光照模型后,具体实现的细节很容易了,下回见!

直线网公众号,第一时间学习最新教程,看最新行业动态!!

unity给头发添加物理_U3D实时渲染教程之角色头发各向异性表达(上)相关推荐

  1. unity给头发添加物理_unity3d Hair real time rendering 真实头发实时渲染

    先放上效果 惊现塞拉酱 算法是Weta Digital根据siggraph2003的论文加以改进,改进之前使用的是Kajiya and Kay's 模型,它能量不守恒,也就是说不是基于物理的,不准确 ...

  2. unity给头发添加物理_不需要写代码,直接在unity实现手机可以跑的毛发效果

    马上注册,加入CGJOY,让你轻松玩转CGJOY. 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 大家好,  我是炭窑居士, 好久不见 这次由我和好友fxyyoung一起给大家带来原创的毛发 ...

  3. unity给头发添加物理_Unity中如何加入液体物理效果

    在这个教程中我会展示如何扩展你自己的水粒子(water particle),以使流体物理能在很多机器上运行(当然也包括手机). 效果不是很现实,不过我可以保证这很简单而且可能是最省性能的方式.如果你知 ...

  4. unity给头发添加物理_Unity学习笔记 Vol.64 使用Spring Bone给角色添加头发效果

    摘要 在游戏中,让我们的角色拥有一头柔顺的秀发,可以使角色显得更加生动.在UnityChan模版我们可以从中借鉴Unity酱的飘逸的头发的实现方法.下面我们来具体研究一下. 实现方法 UnityCha ...

  5. unity给头发添加物理_unity游戏角色发型头发设计毛发毛皮纹理胡子生成编辑插件Hair Designer v1.5.7...

    Hair Designer是角色发型头发和毛发毛皮纹理胡子设计生成编辑插件,包括可自定义的着色器. Hair designer is an amazing tool for generating dy ...

  6. 【我的渲染技术进阶之旅】Google开源的基于物理的实时渲染引擎Filament源码分析:Android版本的Filament第一个示例:sample-hello-triangle

    文章目录 一.效果展示 二.之前的博客 三.示例工程sample-hello-triangle源码分析 3.1 项目源码路径 3.2 分析源码 3.2.1 分析AndroidManifest.xml ...

  7. 【我的渲染技术进阶之旅】Google开源的基于物理的实时渲染引擎Filament源码分析:在android中如何使用filamesh命令将.obj或者.fbx文件转换为.filamesh文件?

    文章目录 一.需求描述 1.1 为啥要学习`filamesh`命令 1.2 从android项目的build.gradle看起 1.3 查看FilamentToolsPlugin插件源代码 1.3.1 ...

  8. 【我的渲染技术进阶之旅】Google开源的基于物理的实时渲染引擎Filament源码分析:在android中如何使用cmgen命令自动将.hdr文件转换为.ktx文件或者.rgb32文件等?

    文章目录 一.需求描述 1.1 为啥要学习cmgen命令 1.1 bug描述 1.1.1 运行错误描述:java.io.FileNotFoundException: envs/flower_road_ ...

  9. 如何实现最佳的跨平台游戏体验?Unity成亮解密实时渲染技术!

    7月31日,2018云创大会游戏论坛在杭州国际博览中心103B圆满举行.本场游戏论坛聚焦探讨了可能对游戏行业发展有重大推动的新技术.新实践,如AR.区块链.安全.大数据等. Unity大中华区技术经理 ...

  10. (二十)unity shader之——————基于物理的渲染技术(PBS):下篇(PBS技术拓展:全局光照、伽马校正、HDR)

    前面两篇文章我们介绍了PBS实现的数学和理论基础,和standard shader的原理和实现,还有一些其他的渲染相关的unity技术.其中有些概念和技术没有讲的很详细,现在对这些重要的概念进行更深入 ...

最新文章

  1. python语音识别终极指南
  2. 道理我都懂,但是神经网络反向传播时的梯度到底怎么求?
  3. 说说重试的那些实现方式
  4. Spring应用的单元测试
  5. Vue.js 整理笔记
  6. python实战项目书 题库系统_Python实战视频教程_基于Python项目与面试题实例讲解(进阶训练篇)...
  7. 破境Angular(三)Angular构件之模块
  8. java list 有向图_Java检测循环有向图
  9. 郑州大学计算机学科导论,郑州大学计算机导论大一试题答案.doc
  10. Windows7快捷键大全
  11. NOIP模拟——偷书(读书人的事,那能叫偷吗?)
  12. 灵媒阅读开始自学通灵
  13. 【啃书】《智能优化算法及其MATLAB实例》例6.1基本粒子群算法进行sphere函数寻优
  14. html下拉框的宽度怎么设置,在HTML选择下拉选项中设置下拉元素的宽度
  15. 中国Java培训机构09年度排行榜
  16. 论文阅读_人脸检测:S3FD: Single Shot Scale-invariant Face Detector
  17. 使用Matlab转换高阶方程自变量和因变量
  18. 微信小程序本地连接后端开发
  19. Linux环境下 制作U盘启动盘
  20. 英特尔与众多科技业者创CXL反击Nvidia

热门文章

  1. 源码:三星键盘输入法 安卓开发者福音
  2. VHDL实验二::半加器、一位和四位全加器(绘制原理图)
  3. word如何一次将所有英文改为新罗马字体
  4. 指付通盗刷信用卡维权连载--9月5日维权纪实
  5. 湖南师范大学学科综合评价计算机,师范类高校自主招生/综合评价相关问答,2020届参考...
  6. 微信小程序选择图片更换背景
  7. 用C语言打印一个菱形图案!
  8. [原创]威胁猎人 | 2018年上半年短视频行业黑灰产研究报告
  9. MobileNet网络系列论文及模型V1-V2-V3
  10. Android 宏病毒,xls宏病毒,程序不落地创建傀儡进程实现远控