什么是斜坡着色或照明?


14

什么是匝道阴影或照明,它如何工作?它与卡通着色是不同的还是相同的概念?渐变阴影与blinn-phong或lambert的镜面反射度如何计算不同?

Answers:


21

在传统的Blinn / Phong着色中,您可以通过测量表面法线与光线方向之间的夹角的余弦值来计算像素的扩散项。因此,在这种情况下,一个简单的着色器将如下所示:

float DiffuseCoeff(in float3 pos, in float3 normal, in float3 lightPos) {
    float3 lightDir = lightPos - pos;
    lightDir.normalize();

    return max(0.0, Dot(lightDir, normal));
}

在渐变着色中,其想法是通过一维查找纹理来调制漫射系数。根据您在此纹理中放置的内容,可以生成不同的效果。因此,我们用于计算漫射系数的着色器函数变为:

texture1D rampTex;
float DiffuseCoeff(in float3 pos, in float3 normal, in float3 lightPos) {
    float3 lightDir = lightPos - pos;
    lightDir.normalize();

    // Map value from [-1, 1] to [0, 1]
    float rampCoord = Dot(lightDir, normal) * 0.5 + 0.5;
    return tex1D(rampTex, rampCoord);
}

例如,如果我们要实现一个单元着色器,我们可以做的是生成一个模仿阶跃函数的渐变纹理:

在此处输入图片说明

您也可以使用相同的想法为镜面照明生成不同的效果。“渐变”阴影实际上仅是指通过纹理调制阴影值的想法。

编辑:团队要塞2在其渲染中使用渐变着色器。您可以查看本文的详细信息:

http://www.valvesoftware.com/publications/2007/NPAR07_IllustrativeRenderingInTeamFortress2.pdf

在标题为“扩散扭曲函数”的小节的第5部分中查看


1
好答案!我一直在寻找有关漫射照明和渐变照明之间照明差异的解释。我也很欣赏有关斜坡着色的一般概念的评论。另外,您是否可以在使用此概念的游戏中发布示例图像?
StampyTurtle

@Stampyturtle我用一个例子更新了我的答案。
Mokosha 2013年
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.