网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月21日漏签0天
unity3d吧 关注:116,885贴子:562,200
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1 2 3 下一页 尾页
  • 45回复贴,共3页
  • ,跳到 页  
<<返回unity3d吧
>0< 加载中...

分享一下个人的开源,技术细节可能会在本帖更新

  • 只看楼主
  • 收藏

  • 回复
  • 影随我殇化为劫
  • Collider
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
地址:https://github.com/MaxwellGengYF
以下为部分实现效果:





  • 你眼眸的星尘
  • Shader
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
🐂


2026-01-21 04:06:39
广告
不感兴趣
开通SVIP免广告
  • 奢侈
  • Renderer
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
🐎


  • ithasbegan
  • Collider
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
好东西


  • 就要000
  • Prefab
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶大神


  • 影随我殇化为劫
  • Collider
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • 影随我殇化为劫
  • Collider
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
先来说说皮肤渲染是怎么做的吧,注意,本帖对初学者并不友好,看不懂的同学可以果断跳过,直接下载使用就可以了。(顺便举起可爱的小手点一波follow,让我的gayhub好看一点)
很多人在说到次表面时,第一反应是透光效果,当然,透光效果确实是次表面的主要表现之一,但是在渲染皮肤时,这里的次表面可不仅仅是透明。人类的身体组织,透光性并不强,甚至在日常生活中,很难看出光线直接穿过身体组织的效果。而除了光线穿透以外,表现最明显的就是次表面材质的反射了。普通人的皮肤有油脂层,表皮层,真皮层,以及皮下组织,血管,肌肉等多层,而每一层都有数以亿计的细胞,间质,想要通过传统的BRDF渲染柔软的皮肤表面,有些困难,那么在这种时候,我们需要通过另类的光照模型以及屏幕空间后处理效果实现。
首先是光照模型方面,我们希望Shader具有很高的运行效率,至少可以做到在中端PC机上渲染成群结队的人物时不会发生卡顿,在分辨率不高手机上可以流畅运行。因此我们的光照模型必须保证运算量的限制,出于对效果的考虑与对美术人员贴图制作难度的考虑,我们这里采用一种GGX光照模型的变种。
来复习一下GGX的公式先:
这就是GGX的基本公式,Unity和Unreal Engine目前使用的光照模型都离不开GGX与菲涅尔高光,而光照方法的基本实现在Unity的目录下Editor/Data/CGIncludes/UnityStandardBRDF.cginc已经有了完善的实现,LZ的开源中也有优化过的版本可以直接下载,那么该怎么对他进行变种呢?这里抖了一下机灵:显卡的运算单元是4位的,也就是说他会同时运算4个数,即使是一个float,也会被当做float4来进行运算,那么是不是可以使用4个不同的法线向量进行运算,然后运算完毕以后取四种高光色彩的平均值,以此模拟光线在人体皮肤表面不规则反射的效果,这样行不行?当然行啦!下面是核心代码:

注意这里的几个红色箭头,nv表示normal dot viewdir,nl表示normal dot lightdir以此类推,通过使用四个法向量代入公式,最后一个红箭头里取平均值,就可以获得一个近似的模糊高光的效果,那么漫反射又是怎么处理的呢,这里我们为了偷懒就没有使用最精确的迪士尼漫反射,而是单纯的用了一张ramp texture来实现:

对的就是这个玩意,原来关注GDC和SIGGRAPH的同学对这张图应该不陌生,这里就不详解如何生成的了,我们使用normal dot light direction作为贴图的x轴,使用常量作为y轴,制作了一个简单的漫反射光照模型。
下面是无任何后处理特效的效果:

在本例中,我们使用了4张法线贴图,其中有一张原装法线贴图,一张模糊的法线贴图,一张原装细节法线贴图,一张模糊的细节法线贴图,层层嵌套,最后再套上pbr的光照限制公式和贴图工作流程,皮肤表面的shader完美成型!


  • 影随我殇化为劫
  • Collider
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
但是,但是,but,这个皮肤看起来虽然有了一些柔软的质感,可是却非常干涩,非常生硬,而许多大作,诸如古墓丽影崛起中劳拉的皮肤渲染,就看起来细腻柔软有质感,想让人上去捏一把……咳嗯,所以这里需要使用后处理特效来实现。后处理使用三次高斯模糊并进行魔参混合实现,关于魔参是怎么被图形学前辈们调出来的,这里直接上地址:
https://www.iryoku.com/sssss/downloads/Screen-Space-Perceptual-Rendering-of-Human-Skin.pdf
总的来讲就是,要让皮肤的高光反射看着更加的“漫反射”,这一点实现起来非常的简单,毕竟高斯模糊和色彩混合只是普通的初中生小萌新的必修课,而比较麻烦的就是如何只对人物表面进行模糊采样,而不影响其他物体呢?诶才是比较复杂的。这里我想了几个方案并且实现了一下试了试。
1. 使用子摄像机进行replacement shader的渲染,给人物shader加一个特定的renderType tag。
2. 使用子摄像机或CommandBuffer单独渲染,然后像素深度进行检测,判断是否是皮肤材质,是否需要后处理。
3. 使用Stencil,给皮肤添加不同的Stencil Reference。
4. 使用Alpha通道与CommandBuffer在透明物体渲染前完成后处理。
首先来看一下第一条,这一条除了性能以外,可以说完美无缺,把整个场景重新渲染一遍纯色,灰色不想说,蓝色是忧郁……啊不是不是,黑色是非皮肤材质,颜色越亮表示模糊度越高,比如额头,腮等,都是次表面模糊比较强的地方,而眼睛,头发等则需要降低一下,保持材质的清晰性,几乎挑不出毛病。可是,可是,最大的问题就是性能了,将整个场景重新渲染一遍,最可怕的是如果皮肤材质使用了曲面细分,头发使用了gemoetry shader,这些甚至都需要重新渲染一遍,性能几乎是爆炸的,在进行压力测试时连我的1080TI SLI都不到60帧了,因此,第一条否定。
然后是第二条,像素深度检测确实是个办法,也不需要对整个场景进行渲染,只需要渲染皮肤即可,然而深度检测的缺陷一是不精确,很容易出现闪烁,二是无法侦测透明物体,如果场景中玻璃等透明材质很多,会严重影响效果,第二条否定。
Stencil在Unity中,或者说在DirectX等API中可以说是脾气很大了,RenderTexture没法跟随,需要手动设置RenderTarget,无法进行降采样操作,手机上很难优化,而且只能是整数,无法实现我们需要的不同部位使用不同的强度,但是却可以完美的解决性能问题与遮挡问题,虽然依旧解决不了透明问题。
那么最后只剩第四条了,每个非透明物体默认的alpha值都是1,所以我们可以给皮肤设置一个不同的alpha值,比如0是最大模糊,1是最不模糊,所以其他部分不会被模糊,而人物也可以愉快的进行不同部位的强度改变。可是透明物体的alpha值不为1且会对效果造成严重破坏,所以我们就不能用OnRenderImage来进行后处理了,而是需要使用commandBuffer在透明物体渲染之前,对场景中的不透明物体进行处理,由于我们的shader使用了自定义的光照模型,只能走forward rendering path,所以不必担心deferred rendering path带来的麻烦,因为这时的deferred rendering path已经渲染完毕了,而且GBuffer中也没有alpha通道这个东西的存在。我们的CommandBuffer就定位到BeforeForwardAlpha,在渲染半透明alpha blend物体之前完成对皮肤的后处理,并塞回原图。
核心代码如下:


2026-01-21 04:00:39
广告
不感兴趣
开通SVIP免广告
  • 影随我殇化为劫
  • Collider
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
测试一下后处理效果与透明物体的兼容性:

效果非常理想。
配上官方的Post-Processing Stack v2后处理包,最后的效果如下:

面颊的绯红,皮肤的油腻感以及后处理特效带来的质感都达到了理想的效果,请原谅这个色调,作为一个曾经美术考试不及格的男人,lz以及尽力了。。。


  • 影随我殇化为劫
  • Collider
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有人说后处理不够明显?我只能说呵呵,在这个世界上如果有什么高斯模糊不能用迭代实现,那就说明你迭代的次数还不够多!总共六次迭代以后的效果:

这次够模糊了吧哈哈哈哈,对了,显卡着火了用什么灭火器比较好……
开个玩笑,其实高斯模糊加上边缘检测的运算量也并不高,整个过程算上天空盒子也只用了0.6ms,而显卡只用了0.2ms左右,我们把迭代数提高到惊人的100次,也只用了0.4ms,抛开测试平台的硬件性能这点,我们不难看出CommandBuffer的后处理效率还是很可观的,并没有造成老版本Unity给人带来的“渲染性能低下”的感觉,所以还是需要大家及时更新Unity版本,跟上时代的节奏。


  • 影随我殇化为劫
  • Collider
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
哇,没有人真的好气啊..


  • 纳能扫地老大爷
  • Unitor
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • 就要000
  • Prefab
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶楼主!这么详细的技术分享真的很难得,辛苦。


  • AWE
  • Animator
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
666


2026-01-21 03:54:39
广告
不感兴趣
开通SVIP免广告
  • 农夫二十拳
  • Unitor
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
大佬你好,我是一个学UNITY的萌新,有些问题想加QQ请教您一下可以吗?


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 3 下一页 尾页
  • 45回复贴,共3页
  • ,跳到 页  
<<返回unity3d吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示