正经的说说MMD(RAY)的材质
KarlvonDonitz
2017年12月01日 15:14

本次对应渲染下载点:

https://github.com/ray-cast/ray-mmd

首先我澄清下 不是因为懒得录视频教程

我只是希望这样整理下 大家好记忆怎么使用材质贴图

就是这样 不准反驳

而且 很多人都没有认真听?

这次先说的是ray-mmd的材质贴图使用

主要是因为用的人多嘛

先来看看ray支持什么贴图

源代码如下:

#define USE_CUSTOM_MATERIAL 0 #define ALBEDO_MAP_ENABLE 1 #define ALBEDO_MAP_ANIMATION_ENABLE 0 #define ALBEDO_MAP_IN_TEXTURE 1 #define ALBEDO_MAP_IN_SCREEN_MAP 0 #define ALBEDO_MAP_UV_FLIP 0 #define ALBEDO_MAP_UV_REPETITION 0 #define ALBEDO_MAP_APPLY_COLOR 0 #define ALBEDO_MAP_APPLY_DIFFUSE 1 #define ALBEDO_APPLY_MORPH_COLOR 0 #define ALBEDO_MAP_FILE "albedo.png" const float3 albedo = 1.0; const float2 albedoMapLoopNum = 1.0; #define ALPHA_MAP_ENABLE 1 #define ALPHA_MAP_ANIMATION_ENABLE 0 #define ALPHA_MAP_IN_TEXTURE 1 #define ALPHA_MAP_UV_FLIP 0 #define ALPHA_MAP_SWIZZLE 3 #define ALPHA_MAP_FILE "alpha.png" const float alpha = 1.0; const float alphaMapLoopNum = 1.0; #define NORMAL_MAP_ENABLE 0 #define NORMAL_MAP_ANIMATION_ENABLE 0 #define NORMAL_MAP_IN_SPHEREMAP 0 #define NORMAL_MAP_IS_COMPRESSED 0 #define NORMAL_MAP_UV_FLIP 0 #define NORMAL_MAP_UV_REPETITION 0 #define NORMAL_MAP_FILE "normal.png" const float normalMapScale = 1.0; const float normalMapLoopNum = 1.0; #define NORMAL_MAP_SUB_ENABLE 0 #define NORMAL_MAP_SUB_ANIMATION_ENABLE 0 #define NORMAL_MAP_SUB_IN_SPHEREMAP 0 #define NORMAL_MAP_SUB_IS_COMPRESSED 0 #define NORMAL_MAP_SUB_UV_FLIP 0 #define NORMAL_MAP_SUB_UV_REPETITION 0 #define NORMAL_MAP_SUB_FILE "normal.png" const float normalMapSubScale = 1.0; const float normalMapSubLoopNum = 1.0; #define SMOOTHNESS_MAP_ENABLE 0 #define SMOOTHNESS_MAP_ANIMATION_ENABLE 0 #define SMOOTHNESS_MAP_IN_TOONMAP 0 #define SMOOTHNESS_MAP_IS_ROUGHNESS 0 #define SMOOTHNESS_MAP_UV_FLIP 0 #define SMOOTHNESS_MAP_SWIZZLE 0 #define SMOOTHNESS_MAP_APPLY_SCALE 0 #define SMOOTHNESS_MAP_FILE "smoothness.png" const float smoothness = 0.0; const float smoothnessMapLoopNum = 1.0; #define METALNESS_MAP_ENABLE 0 #define METALNESS_MAP_ANIMATION_ENABLE 0 #define METALNESS_MAP_IN_TOONMAP 0 #define METALNESS_MAP_UV_FLIP 0 #define METALNESS_MAP_SWIZZLE 0 #define METALNESS_MAP_APPLY_SCALE 0 #define METALNESS_MAP_FILE "metalness.png" const float metalness = 0.0; const float metalnessMapLoopNum = 1.0; const float metalnessBaseSpecular = 0.04;  #define MELANIN_MAP_ENABLE 0 #define MELANIN_MAP_IN_TOONMAP 0 #define MELANIN_MAP_UV_FLIP 0 #define MELANIN_MAP_SWIZZLE 0 #define MELANIN_MAP_APPLY_SCALE 0 #define MELANIN_MAP_FILE "melanin.png" const float melanin = 0.0; const float melaninMapLoopNum = 1.0; #define EMISSIVE_ENABLE 0 #define EMISSIVE_USE_ALBEDO 0 #define EMISSIVE_MAP_ENABLE 0 #define EMISSIVE_MAP_ANIMATION_ENABLE 0 #define EMISSIVE_MAP_IN_TEXTURE 0 #define EMISSIVE_MAP_IN_SCREEN_MAP 0 #define EMISSIVE_MAP_UV_FLIP 0 #define EMISSIVE_APPLY_COLOR 0 #define EMISSIVE_APPLY_MORPH_COLOR 0 #define EMISSIVE_APPLY_MORPH_INTENSITY 0 #define EMISSIVE_APPLY_BLINK 0 #define EMISSIVE_MAP_FILE "emissive.png" const float3 emissive = 1.0; const float3 emissiveBlink = 1.0; const float  emissiveIntensity = 1.0; const float2 emissiveMapLoopNum = 1.0; #define OCCLUSION_MAP_ENABLE 0 #define OCCLUSION_MAP_IN_TOONMAP 0 #define OCCLUSION_MAP_UV_FLIP 0 #define OCCLUSION_MAP_SWIZZLE 0 #define OCCLUSION_MAP_APPLY_SCALE 0  #define OCCLUSION_MAP_FILE "occlusion.png" const float occlusionMapScale = 1.0; const float occlusionMapLoopNum = 1.0; #define PARALLAX_MAP_ENABLE 0 #define PARALLAX_MAP_UV_FLIP 0 #define PARALLAX_MAP_SUPPORT_ALPHA 0 #define PARALLAX_MAP_FILE "height.png" const float parallaxMapScale = 1.0; const float parallaxMapLoopNum = 1.0; #define CUSTOM_ENABLE 0 #define CUSTOM_A_MAP_ENABLE 0 #define CUSTOM_A_MAP_IN_TOONMAP 0 #define CUSTOM_A_MAP_UV_FLIP 0 #define CUSTOM_A_MAP_COLOR_FLIP 0 #define CUSTOM_A_MAP_SWIZZLE 0 #define CUSTOM_A_MAP_APPLY_SCALE 0 #define CUSTOM_A_MAP_FILE "custom.png" const float customA = 0.0; const float customAMapLoopNum = 1.0; #define CUSTOM_B_MAP_ENABLE 0 #define CUSTOM_B_MAP_UV_FLIP 0 #define CUSTOM_B_MAP_COLOR_FLIP 0 #define CUSTOM_B_MAP_APPLY_COLOR 0 #define CUSTOM_B_MAP_FILE "custom.png" const float3 customB = 0.0; const float2 customBMapLoopNum = 1.0;

我知道你也是直接滚下来的

大概整理下 一共是:

ALBEDO_MAP

ALPHA_MAP

NORMAL_MAP

NORMAL_MAP_SUB

SMOOTHNESS_MAP

METALNESS_MAP

MELANIN_MAP

EMISSIVE_MAP

OCCLUSION_MAP

PARALLAX_MAP

看不懂英文吧!

没事,我来翻译下

ALBEDO_MAP    原材质贴图

ALBEDO_MAP_SUB    原材质次表面贴图

ALPHA_MAP   阿尔法通道贴图

NORMAL_MAP   法线贴图

NORMAL_MAP_SUB   法线次表面贴图

SMOOTHNESS_MAP     光滑度贴图

METALNESS_MAP    金属性贴图

MELANIN_MAP   黑色素贴图   (讲道理我也不知道这是啥)

EMISSIVE_MAP   自发光贴图

OCCLUSION_MAP     闭塞贴图

PARALLAX_MAP     视察贴图   

有中文了吧!

虽然我相信你们可能还是看不懂

呢还是解释下这些贴图都是些什么好了

但是在解释贴图之前

我们需要搞懂以下几个概念问题

什么是阿尔法通道?

阿尔法通道出现在png格式的贴图

png都比jpg大一点

说简单点 如果背景颜色是红色

png有的地方并不是白色的

很奇怪吧

阿尔法通道的意思就是透明度

如果这个地方完全透明了就会表达出来后面的颜色

你可别以为没用

可以看到后面的颜色

这个可是很重要的

还有就是什么半透明的物品啦

比如轻纱什么的

什么是次表面?

肥皂泡

这是一个肥皂泡

肥皂泡在光线的照射下 颜色五彩斑斓的

学过高中物理的应该都知道

产生这种现象的原因是因为光线折射与反射后相互叠加了

绿色为法线的不规范作图

而这两个黑色的线

上面的则是表面

而下面的就是次表面

当然,你的皮肤也是需要次表面渲染的。

现在你能明白什么是次表面了么?

明白了次表面,现在来看看贴图好了。

ALBEDO_MAP    原材质贴图

ALBEDO_MAP_SUB    原材质次表面贴图

这两个代表的就是材质原始颜色

大概类似这样的

TDA标准的面部材质

同样,次表面也类似如此 不过只是表面下面的一层颜色。

两个贴图有时候很相似

有时候很不一样

但是都是一眼望过去的颜色

ALPHA_MAP   阿尔法通道贴图

这个就是用来表现透明的

但是一般不单独使用

大部分png贴图自己就有

NORMAL_MAP   法线贴图

NORMAL_MAP_SUB   法线次表面贴图

这两个贴图

如果你是N渲染用户应该十分熟悉

如果你是别人的世界玩家应该也很熟悉

带有凹凸感觉的法线贴图

法线贴图用来给你的模型带来一点细节上凹凸感不一样的变化

这个玩意一般都给头发了

大概差距是这样的

左边无法线,右边是有法线贴图的

或许你觉得没有什么

其实我觉得变化也不是很大

置换贴图才是王道

SMOOTHNESS_MAP     光滑度贴图

顾名思义嘛

用来表现一个物品是否光滑

陆地就没有海洋有更高的光泽

这个玩意说白了就是给你们渲染丝袜的?

只有皮衣才有这么强烈的菲涅尔吧

METALNESS_MAP    金属性贴图

这个.......

感觉你们都知道的吧

上面没贴图,下面是使用噪点贴图来做金属性贴图

黑色就会让金属性为0 白色为1

中间的话 会自动调整的

MELANIN_MAP   黑色素贴图   (讲道理我也不知道这是啥)

跳过.....

EMISSIVE_MAP   自发光贴图

如果你一个材质里面有的地方希望是发亮的

怎么办?

自发光贴图就可以了

给灯泡的地方变为激活(就是白色)

OCCLUSION_MAP     闭塞贴图

这个可能有点难理解了

AO贴图知道么?

远距离看的AO贴图渲染

这玩意可以让你感觉到这个玩意深度

按照AutodeskA的解释:

使用半径创建局部化的 AO 效果:只考虑将给定半径内的曲面作为遮光板。这也将加块渲染的速度。实际的结果是 AO 提供了完美的“接触阴影”效果并使小裂缝可见。 下图描绘的是一个几乎完全由间接光照明的直升机模型。注意:为什么左图中的直升机感觉没有“着陆”,以及为什么着陆橇下边的阴影太过模糊。右图使用 AO 来“冲压出”细节和接触阴影。

效果

实际运用到MMD是啥样子?

上面使用贴图 下面是原色

感觉上颜色也深了很多对吧

但是更重要的是 本身的树木凹陷下去的地方颜色更加深了

PARALLAX_MAP     视察贴图   

准确的说这个玩意可以用来代替法线贴图

毕竟这个玩意好很多

但是为啥没人用呢?

原因很简单

置换大法好

好吧

不闹了

主要原因是这些贴图弄起来就麻烦(其实是懒)

想详细了解的可以问下wiki

https://en.wikipedia.org/wiki/Parallax_mapping

大概也就这些了

东西有点多

也很杂

最主要我只是来试试看这个玩意写起来咋样

或许以后会单独出个更好的?

感谢观看

有问题还希望各位可以提出来!

谢谢