08_添加MatCap

添加MatCap

贴图打组

MatCap的遮罩信息在下方贴图的B通道中,先打组传入ForwardShader等下处理

计算MatCap的UV

因为Blender的组中不能传入贴图采样器,所以只能在ForwardShader组外面对matcap处理 使用之前的两个组获取法线 创建一个新的组进行MatCapUV的计算 采样matCap的固定公式,将法线转换到观察空间,取XY作为UV进行采样,这里因为原本法线是-1~1,这里需要重映射到0~1,这样得到了基础的MatcapUV 添加输入参数 对应的折射开关,折射深度,折射UV的缩放和平移 在Unity或者UE中可以用4维的向量控制缩放和平移,但是Blender的向量属性只显示3维,所以这里只能拆分掉缩放和平移参数使用两个向量控制 当折射开启时,需要对UV进行调整,当然这里并非是真的计算折射,其实只是对MatCap采样进行缩放和平移调整。这里先乘上折射深度 整体公式就是:matCapUV = matCapUV * depth + Scale * input.uv + Offset;

计算并加上物体本身UV方向的平移值 最后在加上整体的平移 最后根据折射开关的Bool进行输出不同的UV,不开启就输出基础的MatCapUV

ForwardShader计算

参数添加

添加参数,对应是MatCap开关,MatCap贴图,Matcap染色,Matcap颜色强度和Alpha强度以及混合模式

处理Matcap相关参数

获取材质ID 根据材质ID控制输出颜色等数据,之前只写了颜色选择,这里记得需要新建和修改,拓展两个出来,一个是Float类型,一个是Int类型 读取传入的贴图新建一个组进行解释获得MatCap的Mask 取出B通道就是MatCap的Mask

混合计算MatCap

参数都处理完后,新建应该混合的组进行颜色混合 输入参数 这里分为三种混合模式 混合模式参数对应,0:乘法混合,1:加法混合,2:叠加混合 乘法混合(Multiply Alpha Blend) 这里先计算Alpha的值,blendColor就是MatCap采样颜色乘上基础混合颜色和Matcap颜色总强度,最后是使用alpha进行插值 从效果来说,乘法会使颜色变暗,而使用alpha混合,输出部分就全部是Matcap颜色或全是基础颜色,两者是不会有重叠的 加法混合(Additive Blend) 同样先计算Alpha,几个混合模式中Alpha是一样的。这里是先是使用乘法混合matcap颜色和相关系数,最后是加法混合,使用原本颜色加上matcap颜色 效果来说就,在最后一步加法混合时,原颜色并没有剔除掉Alpha中部分,所以在alpha区域两个颜色相加就会变亮 叠加混合(Overlay Blend) 叠加混合之前做了增加对比度的操作 对比度调整 先对matcap的blendColor进行处理,-0.5就是原本颜色范围变成-0.5~0.5以0.5为中心环绕,这时这个值作为一个基数在乘上颜色强度就得到了一个降低暗部增强亮部的系数,最后加上原本的matcapColor,相当于以matcapColor增强对比度 为了防止前面的颜色对比度过高失真所以使用一个中性灰色0.5进行平滑

最终混合输出,使用MatCap开关判断是否使用MatCap

最外层参数调整

饰品,头发等 MatCapTintColor5:E0C8BF 第五个插槽是丝袜的Matcap,需要开启折射,调整RefractUVScale5为0 服装 颜色MatCapTintColor2:DBE4F8,MatCapTintColor5:D9E6EC

当前效果


Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • URP - RendererFeature :ScreenSpaceOutline
  • 平滑法线处理 - 八面体映射
  • Lv.3 Unity主线:一个简单的PBRShader
  • 理论支线:直接光漫反射与GGX高光的混合问题
  • 理论支线:PBR - 基于图像的照明( image based lighting-IBL)
  • # #