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.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










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值