HLSL半透明塑料着色器

时间:2010-09-08 13:48:41

标签: graphics 3d shader hlsl pixel-shader

我正在尝试制作一个着色器来复制一个内部带有彩色光的白色塑料物体。要么使用一个半透明的着色器,如果我在物体内部放置一盏灯,那么灯光会显示出来,或者通过一个着色器来消除内部光线的效果。

我想要的效果有点像透过与这些照片相似的灯罩:

alt text alt text alt text

理想情况下,我可以控制光线的强度和颜色,使其通过一些漂亮的明亮荧光色脉冲并旋转

虽然我不知道从哪里开始!

我的问题是,是否有人知道我应该研究的技术是否能够生成这样的着色器,或者有一个我可以用作起点的相同/类似着色器的示例?或者即使您想提供可以完成工作的着色器

2 个答案:

答案 0 :(得分:4)

您可能希望对Subsurface Scattering进行一些研究,以了解如何重新创建此类效果。次表面散射对于渲染逼真的皮肤非常重要,但在这种情况下,您通常会处理半透明物体前面或后面的光线而不是光线内部的光线。适用相同的基本原则,但用于实时次表面散射近似的一些技巧和黑客可能不适用于您的情况。

答案 1 :(得分:2)

漂亮的照片。看起来你使用的半透明塑料类型可以产生很大的不同。我所看到的是,每个点处塑料的亮度是基于从光源到该点的光线与该点处的表面法线之间的角度。 (观察者角度无关紧要。)

当内部光源到表面点的矢量几乎平行于表面法向量时,表面点亮;当它们几乎彼此垂直时,表面点是暗的。所以尝试使用这两个向量的点积。别忘了规范化。

换句话说,除了你将内部光源(透射)的效果添加到外部光源(反射)的效果之外,它基本上是漫反射。请参阅Lambertian_reflectance作为起点。

您可能还想在其上添加一些镜面反射。

第三张图片更复杂:我认为它会显示外层表面的阴影。