unity3d Human skin real time rendering plus 真实模拟人皮实时渲染 plus篇
最近逃课做游戏,逃的有几门都要停考了,呵呵呵,百忙之中不忘超炒冷饭,感觉之前的人皮效果还是不够好,又改进了一些东西
首先上图
放大看细节
显而易见的比上次的效果要好很多,此次我把模型用3dmax进行了细化,模型裂缝情况有所好转,但是嘴唇等处还是有明显裂缝(没办法,网上没有比这个再细致的贴图了)
去除了之前所有大量的rim,换成了SSS次表面散射之前一篇文章详细讲过,
SSS次表面散射的参数真心难调= =;
漫反射换成了基于物理的Oren Nayar反射模型
specular
高光反射与之前一篇相同,这里简单介绍下
BRDF首先由Fred Nicodemus在1965年提出
L是辐射率,或射线方向中立体角的能量,E是辐照度,或每单位角度的辐照能,theta_i是法线与wi的夹角,i表明是入射光incident light,r表明是反射光reflected light。
Cook-Torrance模型
F(l,h)是菲涅尔函数,
D(h)为分布函数,这个函数负责表面的光滑度,高光的形状与大小,也与粗糙度相关,可以达到完美镜面反射。
G(l,v,h)是几何函数,
float _SP = pow(8192, _GL);
float d = (_SP + 2) / (8 * PIE) * pow(dot(n2, H), _SP);
float f = _SC + (1 - _SC)*pow(2, -10 * dot(H, lightDir));
float k = min(1, _GL + 0.545);
float v = 1 / (k* dot(viewDir, H)*dot(viewDir, H) + (1 - k)); float all = d*f*v; all = saturate(all);
diff = (1 - all)*diff;
diff = saturate(diff); spec3 *= Luminance(diff);
spec3 = saturate(spec3);
spec3 *= _SpecularPower;
diffuse
Oren–Nayar 反射模型由 Michael Oren和 Shree K. Nayar研发,是依据粗糙表面的漫反射模型,可以模拟很大范围的物体,混凝土,塑料,沙子等。
它是基于物理的反射模型。
现
在大多数情况都在用Lambertian 模型,包括unity的diffuse,编写surface
shader的都知道,有lambert光照。Lambertian
模型在所有方向均匀的反射所有光线,这种方法模拟的diffuse不怎么真实,没有根据roughness 粗糙度来计算漫反射。
真实图像与Lambertian和Oren–Nayar的比较
Oren–Nayar和Lambertian 的亮度曲线
具体求法和wiki中的一样
Sigma是表面粗糙度
E0是正面照射时的辐照度
Rho是表面反射
中间的步骤比较简单
最终公式为
风之旅人journey 中的沙子渲染也用了这种方法
次表面散射(Subsurface Scattering)
光经过哪,就带一部分那里的颜色,可以发现光从入射到出射,位置和方向都变了
光走的路径数量是无穷大,光反射回来的都为漫反射,油脂表面的透明度也都是不一样的,
这就产生了次表面散射
具体算法公式在这里此处不再赘述
相要变得更真实还可以加一些noise进去
加了bloom效果之后:
感觉此次效果还不是很完美,随着学习的深入还会继续改进;
全部代码已上传至github
----by wolf96
unity3d Human skin real time rendering plus 真实模拟人皮实时渲染 plus篇的更多相关文章
- unity3d Human skin real time rendering with blood and water drop effect真实模拟人皮实时渲染之血液和水珠掉落效果
在之前的一篇(链接在此)文章中写了下关于真实模拟皮肤渲染,在此基础之上又想加上血液效果,在洗澡的时候(= =:)又想在skin上加上水珠的效果,所以研究了下,做出来效果感觉还不错,放下效果图: 水珠 ...
- unity3d Human skin real time rendering 真实模拟人皮实时渲染(转)
先放出结果图片...由于网上下的模型是拼的,所以眼皮,脸颊,嘴唇看起来像 存在裂痕,解决方式是加入曲面细分和置换贴图 进行一定隆起,但是博主试了一下fragment shader的曲面细分,虽然细分成 ...
- unity3d Human skin real time rendering 真实模拟人皮实时渲染
先放出结果图片...由于网上下的模型是拼的,所以眼皮,脸颊,嘴唇看起来像存在裂痕,解决方式是加入曲面细分和置换贴图 进行一定隆起,但是博主试了一下fragment shader的曲面细分,虽然细分成功 ...
- Unity3d 屏幕空间人体皮肤知觉渲染&次表面散射Screen-Space Perceptual Rendering & Subsurface Scattering of Human Skin
之前的人皮渲染相关 前篇1:unity3d Human skin real time rendering 真实模拟人皮实时渲染 前篇2:unity3d Human skin real time ren ...
- Thinking in Unity3D:渲染管线中的Rendering Path
关于<Thinking in Unity3D> 笔者在研究和使用Unity3D的过程中,获得了一些Unity3D方面的信息,同时也感叹Unity3D设计之精妙.不得不说,笔者最近几年的 ...
- Single-Pass Stereo Rendering for HoloLens——HoloLens的单程立体渲染
原文网站:https://docs.unity3d.com/Manual/SinglePassStereoRenderingHoloLens.html Single-Pass Stereo Rende ...
- 【译】Unity3D Shader 新手教程(3/6) —— 更加真实的积雪
本文为翻译,附上原文链接. 转载请注明出处--polobymulberry-博客园. 如果你满足以下条件,我建议你阅读这篇教程: 你想知道如何在表面着色器中进行混色(blend colour) 你想实 ...
- Unity3d Realtime Dynamic Volume Clouds Rendering
Ray Marching体积渲染+perlin noise 动态效果: 博主近期渲染: 2016的渲染 2015后半段的渲染 ---- by wolf96
- Rendering Problems Failed to load platform rendering library 为何打开布局页面时手机预览页面显示不出来?
看到图片右上角的 android图标没有?把它改为低版本的就可以了,如我的是21就可以了.原因我想是因为sdk版本更新了不兼容导致的吧.
随机推荐
- [PDF] PDFOperation--C#PDF文件操作帮助类 (转载)
点击下载 PDFOperation.rar 这个类是关于PDFOperation的帮助类,主要是实现C#PDF的文件操作,具体实现功能如下1.构造函数2.私有字段3.设置字体4.设置页面大小5.实例化 ...
- 源码心德`Context`类
Context,中文直译为“上下文”,SDK中对其说明如下: Interface to global information about an application environment. Thi ...
- Javascript实现图片库效果
思路: 无序列表加载图片文件.用img标签加载一张图片作为占位符.当点击照片链接时,改变<a>元素的href属性.并且阻止浏览器的默认行为. 动态改变描述文字,在图片下方增加P标签.通过获 ...
- List集合的去除重复性练习
package com.java.b.listdmeo.www; import java.util.ArrayList;import java.util.Iterator; import com.ja ...
- Binary Tree Level Order Traversal II 解题思路
思路: 与Binary Tree Level Order Traversal I 几乎一样.只是最后将结果存放在栈里,然后在栈里再传给向量即可. 再次总结思路: 两个queue,先把第一个放进q1,循 ...
- sql 建立数据库,表格,索引,主键
---- 数据库: `message_db`-- -- --------------------------------------------------------create database ...
- ubuntu npm 私有库搭建 (npmjs.org 官方版本)
目标 npm.xxx.com 安装和推送nodejs包 npmui.xxx.com 管理已经推送的nodejs包 安装 couchdb https://launchpad.net/~couch ...
- WPF之application对象
WPF:Application简介 Application是一个地址空间,在WPF中应用程序就是在System.Windows命名空间下的一个Application实例.一个应用程序只能对应一个App ...
- WebApi学习总结系列第三篇(Http)此篇持续更新...
越了解Http对WebApi开发就越有帮助,因为WebApi就是建立在Http基础之上的. 一.Http: 通过 <ASP.NET Web API 2 框架揭秘>一书中 了解到 什么叫We ...
- 《深入剖析Tomcat》阅读(三)
这里要介绍下Tomcat的一个重要设计方法,Catalina设计方式. Servlet容器是一个复杂系统,但是,它有三个基本任务,对每个请求,servlet容器会为其完成以下三个操作: 1.创建一个R ...