最近逃课做游戏,逃的有几门都要停考了,呵呵呵,百忙之中不忘超炒冷饭,感觉之前的人皮效果还是不够好,又改进了一些东西

首先上图

放大看细节

显而易见的比上次的效果要好很多,此次我把模型用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篇的更多相关文章

  1. unity3d Human skin real time rendering with blood and water drop effect真实模拟人皮实时渲染之血液和水珠掉落效果

    在之前的一篇(链接在此)文章中写了下关于真实模拟皮肤渲染,在此基础之上又想加上血液效果,在洗澡的时候(=  =:)又想在skin上加上水珠的效果,所以研究了下,做出来效果感觉还不错,放下效果图: 水珠 ...

  2. unity3d Human skin real time rendering 真实模拟人皮实时渲染(转)

    先放出结果图片...由于网上下的模型是拼的,所以眼皮,脸颊,嘴唇看起来像 存在裂痕,解决方式是加入曲面细分和置换贴图 进行一定隆起,但是博主试了一下fragment shader的曲面细分,虽然细分成 ...

  3. unity3d Human skin real time rendering 真实模拟人皮实时渲染

    先放出结果图片...由于网上下的模型是拼的,所以眼皮,脸颊,嘴唇看起来像存在裂痕,解决方式是加入曲面细分和置换贴图 进行一定隆起,但是博主试了一下fragment shader的曲面细分,虽然细分成功 ...

  4. Unity3d 屏幕空间人体皮肤知觉渲染&次表面散射Screen-Space Perceptual Rendering & Subsurface Scattering of Human Skin

    之前的人皮渲染相关 前篇1:unity3d Human skin real time rendering 真实模拟人皮实时渲染 前篇2:unity3d Human skin real time ren ...

  5. Thinking in Unity3D:渲染管线中的Rendering Path

      关于<Thinking in Unity3D> 笔者在研究和使用Unity3D的过程中,获得了一些Unity3D方面的信息,同时也感叹Unity3D设计之精妙.不得不说,笔者最近几年的 ...

  6. Single-Pass Stereo Rendering for HoloLens——HoloLens的单程立体渲染

    原文网站:https://docs.unity3d.com/Manual/SinglePassStereoRenderingHoloLens.html Single-Pass Stereo Rende ...

  7. 【译】Unity3D Shader 新手教程(3/6) —— 更加真实的积雪

    本文为翻译,附上原文链接. 转载请注明出处--polobymulberry-博客园. 如果你满足以下条件,我建议你阅读这篇教程: 你想知道如何在表面着色器中进行混色(blend colour) 你想实 ...

  8. Unity3d Realtime Dynamic Volume Clouds Rendering

    Ray Marching体积渲染+perlin noise 动态效果: 博主近期渲染: 2016的渲染 2015后半段的渲染 ---- by wolf96

  9. Rendering Problems Failed to load platform rendering library 为何打开布局页面时手机预览页面显示不出来?

    看到图片右上角的 android图标没有?把它改为低版本的就可以了,如我的是21就可以了.原因我想是因为sdk版本更新了不兼容导致的吧.

随机推荐

  1. 如何在Sql2008中获取表字段属性和注释?

    如何在Sql2008中获取表字段属性和注释? select b.[value] from sys.columns a left join sys.extended_properties b on a. ...

  2. JAVA时间日期处理类,主要用来遍历两个日期之间的每一天。

    /** * * 文 件 名: AccountDate.java * * 创建时间: 2008-11-18 * * Email : **@163.com */ import java.text.Deci ...

  3. 来讲讲C#中的类

    1.什么是类? 面向对象的语言,最基本的就是类.在C#中,类是这样来定义的:类代表一组具有公共属性和行为的对象. 举个例子,现实生活中,人就是一个“类”,但这只是一个统称,指所有的人.我们要找个人一起 ...

  4. 类库探源——System.Exception

    一.MSDN描述 Exception 类: 表示在应用程序执行期间发生的错误 命名空间 : System 程序集:   mscorlib.dll 继承关系: 常用属性(含字段)和方法: 1. 属性Me ...

  5. POJ 3280 Cheapest Palindrome(DP 回文变形)

    题目链接:http://poj.org/problem?id=3280 题目大意:给定一个字符串,可以删除增加,每个操作都有代价,求出将字符串转换成回文串的最小代价 Sample Input 3 4 ...

  6. URL 路由访问报错

    错误: 错误分析:    控制器的文件名命名有问题(index.php)    在TP中控制器命名规范(IndexController.class.php) 相信许多PHP开发者在使用ThinkPHP ...

  7. Spring MVC 3.2 406 Not Acceptable

    Spring MVC 3.2 406 Not Acceptable 这个报错主要是因为SpringMVC配置文件配置问题. 修改步骤如下: 首先,修改spring-mvc.xsd为 spring-mv ...

  8. Eyeshot Ultimate 学习笔记(1)

    在Winform项目中用到3D技术,这是在做项目一段时间以来第一次,还是指定的3D控件Eyeshot Ultimate,这个控件名称用度娘搜索,竟然毫无结果,不知道是没有人用过还是觉得该控件过于简单, ...

  9. Python: 设计模式 之 工厂模式例(1)

    #!/usr/bin/env python #coding=utf-8 # # 工厂模式一例 # 版权所有 2014 yao_yu (http://blog.csdn.net/yao_yu_126) ...

  10. sizeof()用法

    参考:sizeof_百度百科 sizeof()用法汇总(经典) 声明:本文是笔者抽出对自己有用的细节,对前两文的总结. 1.sizeof概念 sizeof是C语言中判断数据类型或者表达式长度符:不是一 ...