BlueRoseNote/03-UnrealEngine/Rendering/Shader/Effect/Ocean/海洋SSS效果论文笔记.md
2023-06-29 11:55:02 +08:00

76 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 论文与相关资料
### 寒霜的快速SSS
在GDCVault中搜索对应的演讲之后就可以下载了。一些PPT比较大可以直接去控件里找下载地址。
https://www.slideshare.net/colinbb/colin-barrebrisebois-gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurfacescattering-look-7170855
#### 视频
https://www.gdcvault.com/play/1014536/Approximating-Translucency-for-a-Fast
因为视频是blob模式的所以可以去下面的网站下载
http://downloadblob.com/
#### ppt
https://twvideo01.ubm-us.net/o1/vault/gdc2011/slides/Colin_BarreBrisebois_Programming_ApproximatingTranslucency.pptx
### SIGGRAPH2019ppt
http://advances.realtimerendering.com/s2019/index.htm
## Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look
### 数据管理
数据可以分成材质相关与灯光类型相关。在寒霜中材质相关会使用GBuffer传递UE4可以使用CustomData吧光类型相关会在LightPass中传递。
### 计算厚度值
通过AO的方式来计算厚度:
- 反转表面法线
- 渲染AO
- 反转颜色最后渲染到贴图中
### 技术细节
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/DirectandTranslucencyLightingVectors.png)
LT应该是Light Translucency的意思。v代表Vectorf代表floati代表int。
```
half3 vLTLight = vLight + vNormal * fLTDistortion;
half fLTDot = pow(saturate(dot(vEye, -vLTLight)), iLTPower) * fLTScale;
half3 fLT = fLightAttenuation * (fLTDot + fLTAmbient) * fLTThickness;
outColor.rgb += cDiffuseAlbedo * cLightDiffuse * fLT;
```
#### fLTAmbient
Ambient项代表了始终存的各个方向的透射值。材质相关变量。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/FastSSS_AmbientTerm.png)
#### iLTPower
强度衰减项,直接透射强度。与视口相关。可以通过预计算进行优化。材质相关变量。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/FastSSS_PowerTerm.png)
#### fLTDistortion
透射方向形变项,用于模拟光线传输的不规则的效果,类似于毛玻璃的效果。主要的功能是控制法线对于透射光方向的影响。与视口相关。材质相关变量。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/FastSSS_DistortionTerm.png)
#### fLTThickness
厚底项预计算的Local坐标的表面厚度值。材质相关变量。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/FastSSS_ThicknessTerm.png)
#### fLTScale
缩放项,用于缩放直接透射效果。视口相关。灯光相关变量。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/FastSSS_ScaleTerm.png)
### 最终效果
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/FastSSS_FinalyResult.png)
### GBuffer设计
最低的要求是GBufer中使用8位位宽灰度贴图的方式来存储translucency。使用24位位宽以颜色贴图的方式可以实现材质对于不同光谱的光线不同的散射效果。
### 技术缺点
因为是一种近似技术所以只适合在凸物体上演示。这种技术对变形物体不起作用因为需要烘焙厚度贴图。此外我们可以使用实时AO算法配合倒置法线来计算厚度。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/FastSSS_ConcaveHull.png)
PS.该技术的详细描述可以在《GPU PRO2》中找到。