本文主要是介绍unity中把材质截图当材质的matcap材质,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这里使用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.0uniform 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
这篇关于unity中把材质截图当材质的matcap材质的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!