HLSL半透明塑料着色器


12

我正在尝试制作一个着色器,以复制内部带有彩色光的白色塑料对象。通过具有半透明的着色器,或者如果将光放入对象内部,则该光将显示出来,或者通过具有伪装内部光效果的着色器来实现。

我想要的效果有点像光穿过类似于这些图片的灯罩:

替代文字 替代文字 替代文字

理想情况下,我将能够控制光的强度和颜色,使其发出脉冲并通过一些漂亮的明亮荧光色旋转

虽然我不确定从哪里开始!

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

Answers:


10

这就是所谓的“次表面散射”效果。

在“ GPU Pro:高级渲染技术”一书中有一个示例屏幕空间实现,适合实时使用。


0

我不知道HLSL,所以我无法给出确切答案。您基本上可以做的是根据与光源的距离设置每个片段的颜色(忽略任何自阴影)。

用伪代码将是这样的:

片段颜色=光照强度*透明度颜色*光源颜色/(衰减*光源距离^ 2)

除了平方以外,您可能还希望使用线性衰减因子,以使光更多地散布。


0

灯光是否需要能够移动,物体是否需要能够变形/动画?如果这两种情况都不是,那么一种便宜的方法是在对象上应用单色纹理贴图,该对象充当灯光的蒙版;在着色器中采样该纹理,将其乘以当前的灯光颜色/强度,然后添加到输出颜色中。

显而易见的后续问题是如何生成此纹理?如果您可以与画家联系,或者可以自己绘制纹理,则可以尝试绘画。它也可以由离线工具使用光线跟踪或类似方法渲染。不过,我对光线追踪工具还不够熟悉,无法详细告诉您如何进行设置。

一种不同的方法可能是编写一个着色器,使用常规的Lambert漫射着色方程式中的反面法线对它后面的光进行采样。然后将其乘以某个遮罩因子(例如0.5左右),然后添加到输出颜色中。这将允许动态移动灯光或几何图形,并且不需要纹理,但是您可能不会获得像脱机渲染一样美观的结果。

关于次表面散射:我认为这并不是这里所要的,因为我所见过的所有用于图形的SSS算法都是为来自表面外部的光而设计的,该光会反弹一点并再次出射,而这里的光是内部的

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.