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
最后附上源码
当然还能用MaCrea来生成材质,当然最后还是需要扩展下像素比较好
下载地址http://www.zbrushcentral.com/showthread.php?92157-MaCrea-Material-Creation-Tool
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
相关文章推荐
- <Unity-UGUI>使用Mask, 正确的裁减非默认材质UI对象
- Unity 游戏开发技巧集锦之材质的应用的创建反射材质
- unity标准材质球动态改值和共用材质不同设置问题
- unity做类似QQ截图功能
- Unity 设置材质属性事件
- unity Ios 在ios8.3及以上的版本上 材质变黑
- unity 截图
- 【Unity Shader编程】之十六 基于MatCap实现适于移动平台的“次时代”车漆Shader
- 【截图整理官方教程】unity 2D角色控制器 2D Character Controller
- 【浅墨Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法&颜色、光照与材质
- unity《加纳战机》手游截图
- 随笔1: 3DMax中模型生成fbx,导入Unity中出现材质丢失问题
- unity学习笔记~材质金属颜色对照表
- 用ShareSDK for Unity分享屏幕截图(android和ios平台)
- 【Unity Shader】1.Unity的基本Shader框架学习(颜色,光照,材质)
- ogre的材质与unity的材质的相似性
- Unity 制作灯罩 双面材质背面不受光照影响的解决方法
- unity发布安卓 截图保存到本地
- Unity摄像机的使用三:游戏的截图
- 如何在Unity5.0 下实现贴图材质的Animation动画功能