关于 MMD 的各种光照的基础原理

本文由 简悦 SimpRead 转码, 原文地址 www.bilibili.com

作者:KarlvonDonitz

本文章跟随视频教程,希望大家可以和视频教程一起观看。 在我们继续之后的教程前,我还是需要先给大家做点预习。这次我们将要来了解在 MMD 下,各种光照的基础原理。0x01 我们可以获得的参数 M

本文章跟随视频教程,希望大家可以和视频教程一起观看。 在我们继续之后的教程前,我还是需要先给大家做点预习。这次我们将要来了解在 MMD 下,各种光照的基础原理。

MMD 中可以参考 REFERENCE.txt 中给出的例子:

float4 MaterialDiffuse  : DIFFUSE  ;

float3 MaterialAmbient  : AMBIENT  ;

float3 MaterialEmmisive : EMISSIVE ;

float3 MaterialSpecular : SPECULAR ;

float  SpecularPower    : SPECULARPOWER ;

float3 MaterialToon     : TOONCOLOR;

float3 EdgeColor        : EDGECOLOR;

float3 LightDiffuse     : DIFFUSE   ;

float3 LightAmbient     : AMBIENT   ;

float3 LightSpecular    : SPECULAR  ;

float4 GroundShadowColor : GROUNDSHADOWCOLOR;

从上方的变量宣告中(当然,你还需要一定的英文基础),好吧,假设你还是没看懂,我来翻译一下好了。

float4 MaterialDiffuse 材质的漫反射颜色

float3 MaterialAmbient  材质的环境色

float3 MaterialEmmisive 材质的发光色

float3 MaterialSpecular 材质的镜面色

float  SpecularPower   材质的镜面高光系数

float3 MaterialToon    材质对应的 Toon 贴图

float3 EdgeColor   材质的描边色

float3 LightDiffuse   光线的漫反射色

float3 LightAmbient   光线的环境色

float3 LightSpecular   光线的镜面色

float4 GroundShadowColor   地面阴影颜色

这样你可以看懂了吧!

我们都知道在真实生活里,有光线的房子里的物体不会是全黑的,总有一些光量子照亮物体表面,即使这个表面是背对光源的,这就是环境光的原因。我们不考虑环境光的照射方向,我们总认为场景中的物体,不论它在什么位置,总会受到一定数量的环境光照射(全局照明)。

对此我们可以得到环境光照算法:

输入:

Color :物体原表面颜色

Ambient  :场景中的环境光

输出:

SurfaceColor – 环境光照作用之后的表面颜色

SurfaceColor = Color*Ambient;

按照环境光获得的效果

这里我要对已经对图形学有所理解的同学说一下为什么不探讨冯式或者 Cook-Torrance 这些类型的渲染方式,主要原因是对于和图形学并不是很清楚的同学来尽可能的降低输入参数。取消例如镜面高光等参数。

那么现在我们真正开始考虑一束光照射在物体表面上的作用过程,我们使用最常见的光照算法——漫反射光照着色或者说郎伯特余弦定律或郎伯特着色(三个都一回事),这个算法是将入射光与表面法线向量的点积当作漫反射光照强度因子,下面我们看看环境光照与漫射光照共同作用的算法

Inputs:

LCol – 照射在表面上的漫射光

Pos – 表面上被照射的位置

LPos – 漫射光源的位置

N - 表面上被照射的位置处的法向量

Col –物体原表面颜色

AmbAmount - 场景中环境光的强弱程度 (0 to 1)

Outputs:

SurfaceColor - 环境光照与漫射光照共同作用之后的表面颜色

VectorToLight = Normalise(LPos - Pos);

DiffuseFactor = Dot(VectorToLight, Normal); 

if(DiffuseFactor < 0)

then DiffuseFactor = 0;

SurfaceColor = Col*AmbAmount + Col*DiffuseFactor*LCol;

如果好奇为啥是这样的,可以看下

好的,现在你至少已经搞懂这是什么。在 MMD 里面实践一下可以得到什么样子?

得到效果图

对的,其实就是增加上了阴影的效果!

当然我们还有镜面高光和菲涅尔准则这些事情啦,但是对于刚刚接触渲染的你可能需要考虑的事情太多啦,我就不仔细说了,等你跟着我的教学视频一起慢慢学习吧!所以赶紧点个关注吧,一起跟我学习图形学。

评论