美文网首页Unity基础入门分享
固定角色的间接光照

固定角色的间接光照

作者: 恶毒的狗 | 来源:发表于2020-03-25 11:50 被阅读0次

一个美术需求

今天美术大哥要我把角色的间接光照固定,不受场景影响,即把下图的 环境光环境反射Lighting Settings 面板搬到 角色材质球 上:

image

这种环境光的反差,也是突出角色的方法之一。

固定环境光

美术的要求是,无论场景如何布置,程序只认下图这个预设的环境光:

image

这里的做法很简单,打开美术预烘培好的场景,用 FrameDebugger 截取 球谐光照 的参数值,然后在任何情况下都用这些值计算环境光即可:

image

把上图中的 unity_SHXXX 带入下面的函数就大功告成了:

// normal should be normalized, w=1.0
half3 SHEvalLinearL0L1 (half4 normal)
{
    half3 x;

    // Linear (L1) + constant (L0) polynomial terms
    x.r = dot(unity_SHAr,normal);
    x.g = dot(unity_SHAg,normal);
    x.b = dot(unity_SHAb,normal);

    return x;
}

// normal should be normalized, w=1.0
half3 SHEvalLinearL2 (half4 normal)
{
    half3 x1, x2;
    // 4 of the quadratic (L2) polynomials
    half4 vB = normal.xyzz * normal.yzzx;
    x1.r = dot(unity_SHBr,vB);
    x1.g = dot(unity_SHBg,vB);
    x1.b = dot(unity_SHBb,vB);

    // Final (5th) quadratic (L2) polynomial
    half vC = normal.x*normal.x - normal.y*normal.y;
    x2 = unity_SHC.rgb * vC;

    return x1 + x2;
}

// normal should be normalized, w=1.0
// output in active color space
half3 ShadeSH9 (half4 normal)
{
    // Linear + constant polynomial terms
    half3 res = SHEvalLinearL0L1 (normal);

    // Quadratic polynomials
    res += SHEvalLinearL2 (normal);

#   ifdef UNITY_COLORSPACE_GAMMA
        res = LinearToGammaSpace (res);
#   endif

    return res;
}

当然,这样做之后,场景的 光照探头 对角色就失效了,不过美术要的就是这个效果......

固定环境反射

固定环境光,只需要在shader里写死参数,美术不需要做任何材质设置。

下面开始固定环境反射。

首先,把用于环境反射的 CubemapLighting Settings 面板搬到 角色材质球 上,如下图:

image

然后,间接高光的计算直接认角色材质指定的环境,即上图中的 Env Cubemap,主要代码如下:

half envRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness);
half envMip = envRoughness * UNITY_SPECCUBE_LOD_STEPS;
half4 envColor = texCUBElod(_EnvCubemap, half4(R, envMip)) * _EnvReflectStrength;
envColor.rgb = DecodeHDR(envColor, _EnvCubemap_HDR).rgb;

用上面代码的计算结果 envColor 替代Unity全局光照的 gi.indirect.specular 就大功告成了。

最后,需要注意的是,环境图是需要勾选 Generate Mip Maps 的,否则 粗糙度 的表现就错误了。

个人主页

本文的个人主页链接:https://baddogzz.github.io/2020/03/25/Fix-Indirect-Lighting/

好了,拜拜!

相关文章

  • 固定角色的间接光照

    一个美术需求 今天美术大哥要我把角色的间接光照固定,不受场景影响,即把下图的 环境光 和 环境反射 从 Light...

  • Unity高级开发-光照系统-2019.4LFT版本

    Unity渐进式光照贴图烘焙(Progressive Lightmapper) Unity光照系统 直接光照 间接...

  • Unity基础(四)渲染烘焙Lightmap光照贴图(未完)

    一、光照 游戏场景通常使用两种光照模式,即实时光照(RealTime) 和全局光照(GI)(间接光照)。 1、...

  • shader光照和阴影

    一.标准光照模型OpenGL与Direct3D提供了几乎相同的固定功能光照模型。什么是固定功能光照模型?在过去只有...

  • 更复杂的光源

    一.前言 在光照概述中,我们叙述了一些光照模型,以及逐顶点和逐像素的计算光照,我们没有考虑阴影,没有考虑间接光照,...

  • 2.Light

    GI(Global illumination),即全局光照。能够计算直接光、间接光、环境光(ambient)以及反...

  • Reflective Shadow Maps 论文解析

    间接光照 这篇文章可以说是全局光照中一篇超级经典的文章,大家不要被他的名字所骗了Reflective Shadow...

  • 间接的间接

    各种朋友圈和微信签名的,间接的,交流。 也蛮好。 安好

  • 基础篇-光照

    Light(光照) 在真实场景中,一般存在两种类型的光照效果:直接光源和间接光源。 直接光源:顾名思义,就是光直接...

  • 固定渲染管线与可编程渲染管线

    1.固定渲染管线与可编程渲染管线的区别: 1)、固定渲染管线 ——这是标准的几何&光照(T&L)管线,功能是固定的...

网友评论

    本文标题:固定角色的间接光照

    本文链接:https://www.haomeiwen.com/subject/zrytuhtx.html