开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2213

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 1978|回复: 105

[士郎] 技巧—低成本皮肤渲染 Pre-integrated Skin

  [复制链接]  [移动端链接]
排名
3
昨日变化

6378

主题

6892

帖子

2万

积分

Rank: 16

UID
1231
好友
185
蛮牛币
2787
威望
30
注册时间
2013-7-29
在线时间
3267 小时
最后登录
2018-5-25

社区QQ达人活力之星原创精华达人突出贡献奖财富之证游戏蛮牛QQ群会员蛮牛妹VIP

发表于 2018-4-19 10:36:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
传统的根据光照原理实现的次表面散射都免不了进行N次高斯Blur。成本且不说,渲染过程还需要预处理或者后处理,需要处理管线,很麻烦。
所以目前移动平台比较靠谱的就是这个预积分的方法,不从光学原理入手,而是从统计结果反推。

它只需要一张LUT图:

1.jpg
横坐标是:NoL = dot(worldNormal,lightDir)

纵坐标是模型曲率,这个值是法线微分和坐标微分长度的商

2.jpg

[AppleScript] 纯文本查看 复制代码
uv = saturate(_CurveFactor * (length(fwidth(worldNormal)) / length(fwidth(worldPos))))


3.jpg
对Cuv着色,寻找一个合适的系数


利用得到的坐标到LUT取值,然后用这个值代替NoL作为最后的光照值系数就行了。


[AppleScript] 纯文本查看 复制代码
fixed3 diffuse = tex2D(_SSSLUT,float2(NoL*0.5+0.5,cuv));


1.1.gif
NO SSS 有一种塑胶的感觉
1.1.gif
SSS 光照特性更接近硅胶


注意,LUT图的重复模式必须设置成clamp,否则会出现如下深色污迹。

4.jpg
预烘焙曲率贴图
  • 在计算曲率时使用了fwidth,这个API在ES2.0下无法使用。
  • 即使可以使用,多多少少也有一些成本
  • 放大后,由于模型多边形数量的限制,法线变化是不平滑的,导致曲率变化也不平滑。这在光照较暗的地方会体现到最终画面上。

5.jpg 6.jpg


可以将实时计算的曲率烘焙到一张贴图上

[AppleScript] 纯文本查看 复制代码
v2f vert(appdata_full v)
{
    v2f o;
    o.uv = fmod(v.texcoord.xy, 1);
    o.pos = float4(o.uv * 2 - 1, 0, 1);
    o.pos.y = -o.pos.y;
    o.vertex = v.vertex.xyz;
    o.normal = v.normal;
    return o;
}

fixed4 frag(v2f i) : SV_Target
{
    float3 worldPos = i.vertex;
    float3 worldBump = normalize(i.normal);
    float cuv = length(fwidth(worldBump)) / length(fwidth(worldPos)) / 10000 * _CurveFactor;
    return fixed4(cuv, cuv, cuv,1);
}


7.jpg

计算结果(已经进行了5x5的高斯模糊)
但即使进行了高斯模糊,多边形的痕迹还是很明显。所以我选择PS。
8.jpg
就能消除这个瑕疵(某游戏的曲率贴图包含莫名的模糊和手工痕迹多半也是这个原因)。

9.jpg

不过这样做,人物动起来的时候曲率变化的部分就不会更新了。但由于曲率对画面的影响本来也不太大,这是可接受的。

高光的选择
皮肤上由于油脂的存在,其实是有一定高光特性的。

10.jpg
面部光滑度贴图

11.jpg
Blin-Phong高光

上面一直使用的都是传统的Blin-Phong高光,除了这个外,还有一个专门用于模拟油脂层的Kelemen/Szirmay-Kalos specular BRDF高光。

它也是个用LUT图改变数值区间的技术

12.jpg


[AppleScript] 纯文本查看 复制代码
float PH = pow(2.0 * tex2D(_KelemenLUT,float2(NoH, smooth)), 10.0 );
fixed F = 0.028;//fresnelReflectance( H, viewDir, 0.028 );
half3 specular = max( PH * F / dot( h, h ), 0 ) * _SpecularScale;


会将高光转换成这样的效果

13.jpg

这个高光确实对油脂层的模拟效果很好。但在Scale较低的时候非常不明显,影响范围很小,而Scale高的则在脸上正确体现出了明显的油脂特性。

1.3.gif

我们希望皮肤有明显的光泽感,但是又不希望皮肤像是抹了油一样——但真正有光泽感的皮肤就是抹了油的,这就是现实和理想的矛盾。

这个特殊的Kelemen高光虽然更符合现实,但是如果只是想让皮肤变得“有光泽”,用普通的Blin-Phong高光反而可以回避“皮肤抹油”的问题。考虑到这个特殊高光还需要取一次LUT纹理,如果咱们追求的并非真实,而是看上去更丰富的光照效果,用简单的Blin-Phong高光也许反而更合适。


更低的成本
现在这个皮肤效果,除去高光之外,其实也就是一次曲率贴图的采样,再加一次LUT贴图的采样。
但是LUT贴图由于Cache效果不好,本身比较费带宽。这也是这个效果的主要成本。


如果不从真实角度考虑,而是仅仅想做出“柔和的材质效果”,其实可以把曲率抛弃掉。

这个预积分SSS,无非就是改变了diffuse光的分布,让亮部更多,而且亮部和暗部之间有一个红色的过度区。曲率越大的地方,这个红色区域越多。
但正是这个红色区域让皮肤看上去更像“皮肤”,所以目标仅仅是看上去“像皮肤”,而不是“真实”的话,让红色区域更多的出现,可能更能满足需求。
所以我们可以只保留LUT贴图最上面的一条,然后忽略曲率,只根据NoL在这一条LUT上取值。由于贴图变小了,带宽成本也就降低了。

由于不需要计算曲率,fwidth的兼容问题,烘焙曲率贴图的工作也都不需要了。

14.jpg

1.4.gif
也就是更加硅胶了而已
也有游戏确实是这么做的。如果你并不追求“真实”,这是很聪明的做法。
SmoothTex和CurveTex都是单色图且对精度要求不高,最终应该合并为一张贴图的多个通道,并一同压缩。


本文工程文件回复可见


知乎@flashyiyi

工程文件:
游客,如果您要查看本帖隐藏内容请回复

评分

参与人数 1鲜花 +1 收起 理由
godb0 + 1

查看全部评分


跟我念“站长妹纸萌萌哒!”我说站长,你说YO!爱你们么么哒~
回复

使用道具 举报

7日久生情
3274/5000
排名
100
昨日变化

2

主题

100

帖子

3274

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
23497
好友
7
蛮牛币
6051
威望
0
注册时间
2014-4-30
在线时间
918 小时
最后登录
2018-5-27
发表于 2018-4-19 10:57:38 | 显示全部楼层
感谢分享!!!!
[发帖际遇]: jlzz147258 乐于助人,奖励 2 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

7日久生情
2694/5000
排名
2940
昨日变化
13

0

主题

1888

帖子

2694

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
219676
好友
0
蛮牛币
2496
威望
0
注册时间
2017-7-12
在线时间
370 小时
最后登录
2018-5-27

活力之星

发表于 2018-4-19 11:04:46 | 显示全部楼层
谢谢分享

回复

使用道具 举报

7日久生情
2296/5000
排名
783
昨日变化
4

1

主题

186

帖子

2296

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
124540
好友
1
蛮牛币
2015
威望
0
注册时间
2015-10-4
在线时间
1013 小时
最后登录
2018-5-27
发表于 2018-4-19 11:09:52 | 显示全部楼层
谢谢分享,非常不错

回复 支持 反对

使用道具 举报

2初来乍到
128/150
排名
15849
昨日变化
3

0

主题

25

帖子

128

积分

Rank: 2Rank: 2

UID
246625
好友
0
蛮牛币
20
威望
0
注册时间
2017-9-28
在线时间
66 小时
最后登录
2018-4-28
发表于 2018-4-19 11:40:50 | 显示全部楼层
谢谢分享

回复

使用道具 举报

7日久生情
1984/5000
排名
498
昨日变化

3

主题

76

帖子

1984

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
1069
好友
0
蛮牛币
8576
威望
0
注册时间
2013-7-20
在线时间
529 小时
最后登录
2018-5-25

社区QQ达人

发表于 2018-4-19 12:10:41 | 显示全部楼层
不错哦,看看
[发帖际遇]: 菲尔 乐于助人,奖励 3 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

7日久生情
1984/5000
排名
498
昨日变化

3

主题

76

帖子

1984

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
1069
好友
0
蛮牛币
8576
威望
0
注册时间
2013-7-20
在线时间
529 小时
最后登录
2018-5-25

社区QQ达人

发表于 2018-4-19 12:12:10 | 显示全部楼层
不错哦,看看效果如何

回复 支持 反对

使用道具 举报

4四处流浪
324/500
排名
10488
昨日变化
4

1

主题

66

帖子

324

积分

Rank: 4

UID
148913
好友
0
蛮牛币
262
威望
0
注册时间
2016-5-17
在线时间
171 小时
最后登录
2018-5-25
发表于 2018-4-19 12:28:44 | 显示全部楼层
厉害了谢谢

回复

使用道具 举报

7日久生情
1554/5000
排名
1078
昨日变化
2

5

主题

102

帖子

1554

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
106862
好友
1
蛮牛币
5750
威望
0
注册时间
2015-6-9
在线时间
517 小时
最后登录
2018-5-25
发表于 2018-4-19 13:37:39 | 显示全部楼层
00000000000000000000000000000

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1037/1500
排名
2221
昨日变化

0

主题

101

帖子

1037

积分

Rank: 6Rank: 6Rank: 6

UID
63265
好友
0
蛮牛币
419
威望
0
注册时间
2014-12-24
在线时间
376 小时
最后登录
2018-5-25
发表于 2018-4-19 13:47:37 | 显示全部楼层
666666666
[发帖际遇]: lb1986818 乐于助人,奖励 2 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

6蛮牛粉丝
1037/1500
排名
2221
昨日变化

0

主题

101

帖子

1037

积分

Rank: 6Rank: 6Rank: 6

UID
63265
好友
0
蛮牛币
419
威望
0
注册时间
2014-12-24
在线时间
376 小时
最后登录
2018-5-25
发表于 2018-4-19 13:48:59 | 显示全部楼层
感谢分享知识

回复

使用道具 举报

6蛮牛粉丝
1037/1500
排名
2221
昨日变化

0

主题

101

帖子

1037

积分

Rank: 6Rank: 6Rank: 6

UID
63265
好友
0
蛮牛币
419
威望
0
注册时间
2014-12-24
在线时间
376 小时
最后登录
2018-5-25
发表于 2018-4-19 13:51:11 | 显示全部楼层
感谢分享知识!!!{:87:}

回复 支持 反对

使用道具 举报

4四处流浪
435/500
排名
8254
昨日变化
2

0

主题

177

帖子

435

积分

Rank: 4

UID
91044
好友
0
蛮牛币
109
威望
0
注册时间
2015-4-10
在线时间
131 小时
最后登录
2018-5-26
发表于 2018-4-19 13:54:18 | 显示全部楼层
感谢分享

回复

使用道具 举报

0

主题

9

帖子

33

积分

Rank: 1

UID
226101
好友
0
蛮牛币
64
威望
0
注册时间
2017-6-10
在线时间
24 小时
最后登录
2018-5-19
发表于 2018-4-19 14:08:40 | 显示全部楼层
看着挺不错的

回复

使用道具 举报

0

主题

9

帖子

33

积分

Rank: 1

UID
226101
好友
0
蛮牛币
64
威望
0
注册时间
2017-6-10
在线时间
24 小时
最后登录
2018-5-19
发表于 2018-4-19 14:09:56 | 显示全部楼层
看着挺不错的

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关闭

站长推荐 上一条 /1 下一条

快速回复 返回顶部 返回列表