在2011年的时候,没写错,是11年前,某岛国的每年一度的graphic论坛,提出了多个贴图的次表面散射,Screen Space Subsurface Scatter

接着的2012年,同一个团队,再次提出次时代人物皮肤的研究 - XXXXX

但都不是哥这个文章展示的代码,哥没这么高端,但确实实现了一个SSS

这十年间,无数国内“牛人”提出了各种在Unity实现SSS的方法

当然,另一个SSS方法,就是最近这几年的LUT-SSS,但是就承认这是米哈游首先提出的概念有这么难么,反正哥第一次从国内看到LUT这个概念来自原神的分享,但这也不是也下内容涵盖的

(嗯,上面提出了5种sss,这个文章只是其中一种)

个人引擎还是停摆中,正参考一个不错的开源引擎:overload,采集灵感,也因为上一节的反射探针该引擎没有(个人引擎更是没有),所以还是继续用Unity做以下演示

次表面散射入门

次表面散射 - 以下简称SSS。。。。。。。。。。。。

上一节完成了PBR渲染,实现反射(基于Cubemap),

本来觉得像素风手和武器发光的部分就酱

<主要是想偷懒,lut不想研究,关键字,米哈游,原神,渲染分享>

结果这个亚索皮肤,绿色手发光的部分,看上去用SSS实现也不错

<做了一个开关,可以选择0.关闭,1.全身,3.detailsMap只映射手的部分>

一般的SSS可以用在玉石等半透明渲染

这个文章说到皮肤的 lut 实现:

谈一谈英雄联盟手游渲染2——高级篇 - 知乎

但我不确定是不是同一样的东西,某大神提出的反面再创造一个光,正反两面打光就可以做到”简单“的Mobile版本的次表面散射:

关键的关键还是在于这是打光,也就还是一个光照模型

原理

公式就不在这里推了,不画图了,无非就是一个平面,一个光线反射+折射,网上很多

<当然各种 N L V H 的定义必须掌握,个人水平不到,说不清楚,如从0开始学,还请自行百度>

掌握渲染的方法有4个

看书

日常观察

看视频

看博客

光照模型公式快速略过

(待补充)

关键代码:

inline float SubsurfaceScattering (float3 viewDir, float3 lightDir, float3 normalDir, float frontSubsurfaceDistortion, float backSubsurfaceDistortion, float frontSssIntensity)
{float3 frontLitDir = normalDir * frontSubsurfaceDistortion - lightDir;float3 backLitDir = normalDir * backSubsurfaceDistortion + lightDir;float frontSSS = saturate(dot(viewDir, -frontLitDir));float backSSS = saturate(dot(viewDir, -backLitDir));float result = saturate(frontSSS * frontSssIntensity + backSSS);return result;
}
float sss = SubsurfaceScattering(i.viewDir,i.lightDir,i.normalDir,_FrontDistortion,_BackDistortion,_FrontIntensity);
float3 sssColor = lerp(_InnerColor,_LightColor0,saturate(pow(sss, _InnerColorPower))).rgb * sss;
float3 finalColor = sssColor + col.rgb;//最终需要次表面散射,加上原颜色

后记:

这个实现有bug的,某些角度会有强白光,转动远镜头时看上去”一闪一闪的“代码和大神一模一样的,大神还用了4盏点光源,所以避免了单一平行光的这个强白光bug,这个之后再看怎么修复吧;

虽然说用了Fake的SSS方法(不完善,新方法,必然引入了bug),减少了性能消耗,但没有真机测过,要是上测试,还会有更多各种BUG;

只是符合个人状态的实现,主要想讲一些SSS理论,因为实现真的可以多种多样,各个团队需求也不一样;

有空还是要把真的SSS实现一遍,并掌握;

因为是Fake的方法,两面打光这个”设计“很厉害(大神的思路),但确实不是理工科的设计,整个渲染肯定不会很”物理化“,肯定不是纯粹的PBR;

参考:

Simple Subsurface Scatterting for Mobile – (一)通透材质的次表面散射 – WalkingFat

https://www.youtube.com/watch?v=RPkhbjmmvS0

​​​​​​Translucent Shader for Unity3D | James O'Hare, Game Character Artist: Blog

【Unity Shader】在URP里写Shader(三):URP简单光照Shader - 知乎

后记之后记

真的不记得当年写过上面这样的文档,现在再也写不出来了(公式推导,过两天11月前应该会补一下吧)

参考x2

有2个开源项目,不容易了,感觉现在或者一直以来TA都没点分享精神,这个有分享算不错的了。。。。。

https://www.jianshu.com/p/6a5e1f780988

引擎十一:体积感SSS,SSR相关推荐

  1. UE3 体积感光束教程

    体积感光束教程 概述 教程内容 LightBeams 创建静态网格物体 创建材质 FalloffTexture 设置材质 修复失真问题 查看 Underneath 中显示有问题的地方 相机交叉 世界对 ...

  2. 2D动画如何做出3D体积感

    https://cowlevel.net/article/1959026 <AngerForce>幕后故事 这篇文章是个老坑,最近有时间开始写,也是对之前项目的一个总结和记录吧. 本篇文章 ...

  3. Kinect结合Unity3D引擎开发体感游戏(二)

    这篇接着<Kinect结合Unity3D引擎开发体感游戏(一)>,时隔3个月才出这篇,在此期间还有不少机油们,要求出续集,期间在公司那边事情太多,一直帮公司前人做的项目擦屁股,到目前为止, ...

  4. [Kinect]Kinect结合Unity3D引擎开发体感游戏

    最近公司项目需要做科技馆的体感游戏,以前也没接触过游戏,虽然以前自己也是想做游戏,我想大部分都是学编程出来来做游戏,哈哈(请允许我淫笑一下,终于可以做这方面).虽然以前没接触过体感游戏,看到的体验也是 ...

  5. 画色彩如何画出体积感

    本文由"学美术上美术集网校"原创,图片素材来自网络,仅供学习分享 画色彩如何画出体积感?大家在练习色彩的时候是不是也曾出现过这种问题?明明画了很多,但是画面就是出不来体积和空间.这 ...

  6. 静物素描如何“鼓”起来,画出体积感?

    静物素描怎么画?素描怎么画的鼓起来,并且画出体积感?很多小伙伴在学习美术素描的时候都会遇到各种问题今天美术加带大家了解下静物素描的画法: 首先,静物素描怎么才能画出体积感: 1. 理解形体,有形才有体 ...

  7. Kinect结合Unity3D引擎开发体感游戏

    Kinect结合Unity3D引擎开发体感游戏 1 最近公司项目需要做科技馆的体感游戏,以前也没接触过游戏,虽然以前自己也是想做游戏,我想大部分都是学编程出来来做游戏,哈哈(请允许我淫笑一下,终于可以 ...

  8. Kinect结合Unity3D引擎开发体感游戏(一

    1 最近公司项目需要做科技馆的体感游戏,以前也没接触过游戏,虽然以前自己也是想做游戏,我想大部分都是学编程出来来做游戏,哈哈(请允许我淫笑一下,终于可以做这方面).虽然以前没接触过体感游戏,看到的体验 ...

  9. [引擎开发] PBR材质的原理

    [本文大纲] 基础概念篇 引入 光线与介质的作用 光线的传播路径 体积散射和表面光照 光线和介质外观 微平面理论 概念介绍 中间向量 能量守恒定律 微平面理论的不足 光照计算 半球积分 单位光照 反射 ...

最新文章

  1. 周怎么换算成月_您每天需要多少能量,怎么知道自己摄入多少能量
  2. [实现]Javascript代码的另一种压缩与加密方法——代码图片转换
  3. NYOJ 453 小珂的烦恼 模拟
  4. linux最基础安装,Linux Nginx最基础的十大安装步骤(2)
  5. Quartz以及代码实现--可以实现定时器效果
  6. Python和SQL Server 2017的力量
  7. Vh和Vw的简介和使用
  8. 2012-01-17-04
  9. excel几个数相加等于某个数_Excel如何在一列数字中找出几个之和等于某个特定值...
  10. Bitmap Style Designer非官方说明
  11. 06. 重建二叉树(C++版本)
  12. kl距离 java_相对熵(relative entropy或 Kullback-Leibler divergence,KL距离)的java实现(三)...
  13. Swarm创始人:强调BZZ主网上线不需要质押
  14. Gmail企业邮箱在用OUTLOK或FOXMAIL有时出现密码错误的解决办法
  15. 【SQL数据库】数据库的创建、查询、插入等操作使用方法(结合黑皮书教材网站(db-book中的例子)在MySQL Workbench和shell中实现查询操作
  16. java中使用poi导出ppt(图片和表格)
  17. 误删除与误格式化的挽回(图)
  18. python识别麻将牌_图像识别之麻将识别源码( 三 )
  19. 求解汽车加油问题C++
  20. Landsat5数据下载中国地区1991年

热门文章

  1. YOLOV5改进-添加EIoU,SIoU,AlphaIoU,FocalEIoU,Wise-IoU
  2. Java web session失效时间配置及详解
  3. 【题库】上海市学校心理咨询师-普通心理学-考点解析 9.2 意志行动过程
  4. 蓝桥杯-暴力破解-03-罗马数字
  5. 利用css 使div上下左右移动
  6. SugarCRM源码分析之ControllerFactory
  7. Google Adwords的广告特点
  8. ERROR: child process failed, exited with error number 51
  9. BZOJ P1966[Ahoi2005]VIRUS 病毒检测
  10. 【更新至 11P】Cocos Creator 3D 官方中文视频教程