您的位置:首页 > 移动开发 > Unity3D

unity中把材质截图当材质的matcap材质

2016-08-18 16:40 267 查看
这里使用shaderforge进行实现的

matcap这种材质有个很有意思的特点,就是能把材质的截图当初材质赋予给物体

优点是可以很方便使用贴图创建很多材质效果,而且非常方便

缺点因为材质可以说是通过图片生成的,所以只能表现固定的效果,而且最好图片上不能有纹理,因为纹理会拉伸,还有就是不能实现透明之类特殊效果

基本连接如下



因为在zbrush中也有这种技术,所以下面是几个仿造的材质













是不是前面两个还挺像zbrush中的材质的

需要注意的是贴图需要设置一下,不然边缘容易有锯齿

当然最好是贴边的圆形再往外边扩展3个像素以上,可以用用这个unity官方插件http://docs.unity3d.com/462/Documentation/uploads/Main/AlphaUtility.atn.zip

扩展padding pixel 用的



接下来就是对材质的理解,为什么一个材质的截图能够作为一个材质应用到模型上

简单说就是把法线贴图从世界空间转换到屏幕空间,然后作为uv来扭曲贴图从而映射到模型上

至于为什么材质是个圆,而其他形状不行,因为这里采样法线贴图其实是一个归一化的圆形

具体可以看看这里http://www.falloutsoftware.com/tutorials/gl/normal-map.html

当然国内也有其他博客具体分析这种材质的
http://blog.csdn.net/candycat1992/article/details/26387471 http://www.cnblogs.com/flytrace/p/3395911.html
最后附上源码

Shader "Shader Forge/test" {
Properties {
_materail ("materail", 2D) = "black" {}
}
SubShader {
Tags {
"RenderType"="Opaque"
}
Pass {
Name "FORWARD"
Tags {
"LightMode"="ForwardBase"
}

CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#define UNITY_PASS_FORWARDBASE
#include "UnityCG.cginc"
#pragma multi_compile_fwdbase_fullshadows
#pragma multi_compile_fog
#pragma exclude_renderers gles3 metal d3d11_9x xbox360 xboxone ps3 ps4 psp2
#pragma target 3.0
uniform sampler2D _materail; uniform float4 _materail_ST;
struct VertexInput {
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 vertexColor : COLOR;
};
struct VertexOutput {
float4 pos : SV_POSITION;
float3 normalDir : TEXCOORD0;
float4 vertexColor : COLOR;
UNITY_FOG_COORDS(1)
};
VertexOutput vert (VertexInput v) {
VertexOutput o = (VertexOutput)0;
o.vertexColor = v.vertexColor;
o.normalDir = UnityObjectToWorldNormal(v.normal);
o.pos = mul(UNITY_MATRIX_MVP, v.vertex );
UNITY_TRANSFER_FOG(o,o.pos);
return o;
}
float4 frag(VertexOutput i) : COLOR {
i.normalDir = normalize(i.normalDir);
float3 normalDirection = i.normalDir;
////// Lighting:
float2 node_3409 = (mul( UNITY_MATRIX_V, float4(i.normalDir,0) ).xyz.rgb.rg*0.5+0.5);
float4 _materail_var = tex2D(_materail,TRANSFORM_TEX(node_3409, _materail));
float3 finalColor = (_materail_var.rgb*i.vertexColor.rgb);
fixed4 finalRGBA = fixed4(finalColor,1);
UNITY_APPLY_FOG(i.fogCoord, finalRGBA);
return finalRGBA;
}
ENDCG
}
}
FallBack "Diffuse"
CustomEditor "ShaderForgeMaterialInspector"
}


当然还能用MaCrea来生成材质,当然最后还是需要扩展下像素比较好

下载地址http://www.zbrushcentral.com/showthread.php?92157-MaCrea-Material-Creation-Tool
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: