当前位置: 首页 > news >正文

网站正能量晚上不用下载进入免费温州网站建设服务中心

网站正能量晚上不用下载进入免费,温州网站建设服务中心,微网站后台录入,怡美工业设计公司大家好#xff0c;我是阿赵。继续介绍Unity可视化Shader编辑插件ASE的用法。上一篇已经介绍了很多ASE常用的节点。这一篇通过几个小例子#xff0c;来看看这些节点是怎样连接使用的。   这篇的内容可能会比较长#xff0c;最终是做了一个遮挡X光的效果#xff0c;不过把这…  大家好我是阿赵。继续介绍Unity可视化Shader编辑插件ASE的用法。上一篇已经介绍了很多ASE常用的节点。这一篇通过几个小例子来看看这些节点是怎样连接使用的。   这篇的内容可能会比较长最终是做了一个遮挡X光的效果不过把这个效果拆分成多个步骤每个步骤是一个小例子。 一、贴图颜色 首先来一个最简单的值显示模型的贴图和颜色。 先准备一个需要展示的模型 然后新建一个ASE的shader 在实际的项目中我一直很喜欢用这个Unlit的shader模板。这是因为Surface类型虽然功能非常的多而且效果很好但可控性不如单纯的顶点片段着色器这么好。而这个Unlit其实就是单纯的顶点片段着色器。如果需要光照模型、法线贴图等功能实际上也是可以在Unlit的基础上自己实现的。 创建了shader之后打开节点编辑器看到了这样一个情况。然后按着键盘t键再点击鼠标创建一个贴图采样节点 双击节点名称可以修改变量名。我这里把这张贴图的名字改成了MainTex 注意看属性面板虽然节点的名称改成了MainTex但实际上属性名称是_MainTex: 接下来把这个贴图的RGBA输出拖动到输出节点的FragColor接收接口 如果想给这个节点一张默认的贴图可以点击select按钮然后从弹出窗口中选择 接下来看看效果先保存一下这个shader 然后在shader被选中的情况下右键创建一个材质球 这样就可以快速的创建一个使用该shader的材质球了。当然你也可以随便先创建一个材质球然后再把材质球的shader改成刚刚编辑的shader只是我觉得这样比较快。 可以看到由于刚才在shader里面指定了贴图所以新建的材质球就已经有一张默认贴图了。不过其实我不太建议这样做因为这样会导致资源依赖的问题。我这里这样做只是为了做一个功能的展示。   把这个材质球赋予给模型就能看到模型已经被赋予贴图的效果了。 接下来回到节点编辑界面按着大键盘的数字5然后鼠标点击创建一个颜色节点并且命名为mainColor。 这里需要注意一点贴图类型的参数是默认就是对外可编辑的所以刚才我们可以直接在材质球上面看得到贴图的选项。但其他类型的节点参数默认都是常量如果需要把它变成可以编辑的参数需要修改一下 把这个参数的类型改成Property就可以。   接下来按着键盘的m键然后点击鼠标创建一个乘法的节点 然后把mainTex和mainColor的RGBA输出分别拖到乘法节点的A和B输入口。 最后把乘法节点的输出口拖到FragColor。 最后保存一下shader然后回到场景看看会发现现在模型已经可以控制颜色了。 这是一个最简单的例子创建了贴图采样和颜色节点并且用乘法节点把它们连起来再输出到最终的颜色。 二、光照模型 在刚才那个例子的基础上我们再加工一点东西加上光照的效果。   在节点编辑器的空白地方鼠标右键然后搜索world normal创建一个世界空间法线节点这个节点是获取了模型的法线方向并转成了世界空间坐标 再创建一个世界空间下的灯光方向节点 按着句号键点鼠标左键或者搜索dot创建一个点乘节点并把世界法线和世界灯光方向的输出连到点乘节点上   最后把点乘的结果拖动到刚才贴图和颜色的乘法节点上。 可以看到原来乘法节点只有A和B两个输入但当我们拖动的时候出现了C输入。其实所有允许多个输入的节点都会出现这样的情况默认只有2个然后你可以继续的拖动其他结果进去作为输入节点会自动增加输入接口。   这个时候保存一下节点看看模型会发现已经有了最基本的光照效果了。 刚才的世界法线和世界灯光方向点乘其实就是实现了最简单的Lambert光照模型。   接下来再加工一下新增一个乘法节点然后把dot的结果输入到乘法节点的A参数。这里注意一个情况B参数我并没有再新建节点输入而是直接选择乘法节点在属性栏里面可以直接指定B的值。这里我输入B的值是0.5。 继续创建一个Add加法节点然后把乘法节点输入到A参数再指定B参数为0.5.。 最后把加法的结果输入到原来的乘法C参数 这时候保存shader看看模型会看到模型比刚才亮了一些阴影没那么重。 这是因为刚才的dot后乘以0.5再加0.5是Half-Lambert光照模型的算法。 三、边缘光 由于前面的步骤介绍得比较详细浪费了不少篇章所以接下来会加快一点速度。 新建一个Unlit模板的ASE的shader 新建一个颜色节点命名为rimColor。然后新建worldNormal和worldSpaceViewDir节点。其中worldNormal刚才用过是世界空间法线。而worldSpaceViewDir是世界空间的观察方向。 给worldSpaceViewDir连一个Normalize标准化节点然后再和WorldNormal做dot点乘再用OneMinus(一减)节点让dot的结果被1减得到的结果连到FragColor输入 这时候看模型是这样的 现在模型的边缘光已经有一点点感觉了接下来做一个非常常用的操作先对刚才的结果做一个次方(Power)的操作然后再做一个乘法的操作。这个操作可以记下来可以用于控制一些效果的范围和强度 通过调节powVal可以调节边缘光的范围通过调节mulVal可以控制边缘光的强度 把颜色乘上去就可以控制边缘光的颜色了 最后还要做一步现在的模型并不是透明的需要把它设置一下混合模式 选择输出节点找到BlendMode选择一下Alpha Blend 这时候就看到模型变透明了效果就做完了 四、遮挡X光效果 这里再新建一个叫做XRay的ASE的Shader使用的是上一篇文章介绍的2个pass的模板。 可以看到这里就有2个输出节点了。 重新打开刚才上一步做的RimColor边缘光的shader编辑界面然后框选除了输出节点以外的其他节点按CtrlC复制 然后回到XRay的shader节点编辑界面按CtrlV把节点复制到XRay里面并且把复制过来的节点的输出连接到XRay第一个输出节点。 打开第二步做的DiffuseTex的带光照和贴图的Shader的编辑界面然后框选除了输出节点以外的其他节点按CtrlC复制 又回到了XRay的编辑界面按CtrlV把节点复制过来并且把输出连到UnlitPass2的输出。 上面的步骤其实就是把之前做的2个shader的效果复制过来分别连接到这个新Shader的2个Pass的输出而已。做XRay效果其实就是这么简单一个pass显示正常颜色另外一个pass显示透明的边缘光而已。   不过2个pass之间怎样去决定谁应该什么时候渲染呢这里是需要通过ZTest来控制了。当前面没东西遮挡的时候也就是ZTest LEqual的时候显示正常颜色当前面有东西遮挡也就是ZTest Greater的时候显示边缘光。然后由于边缘光需要半透明混合所以还需要加一个ZWrite Off。 然后问题来了选择一下这两个输出节点看到了Pass里面并没有ZTest和ZWrite的选项怎么办呢 上一篇文章已经说过了需要什么可以编辑的参数去模板加就行所以打开模板然后在两个Pass里面都加上ZTest和ZWrite。 再回到节点编辑器就可以看到Pass里面已经有这两个选项了 于是修改注意模板里面的第一个Pass的名字在节点属性里面会显示成shader的名字比如我这个Shader叫做XRay所以第一个输出节点就叫XRay但点进去属性里面还是显示UnlitPass1的这个不要搞错。第一个Pass是显示边缘光所以ZWrite要offZTest要Greater然后混合模式用AlphaBlend 第二个Pass显示的是正常的漫反射颜色所以ZWrite用默认也就是OnZTest选择Less or Equal。最后混合模式选Off。 现在回到模型场景建一个Cube挡在模型前面然后调整一下边缘光的颜色和强度就可以看到我们的最终效果了。 五、总结 这样一个XRay透视效果我分了挺多步骤来说明主要是越简单的操作步骤越难说如果大家都已经很熟悉ASE的操作了我只是讲节点的连接思路那会快很多。 最后附上XRay的例子的代码可以粘贴到Shader里面应该就能打开看节点了 // Made with Amplify Shader Editor // Available at the Unity Asset Store - http://u3d.as/y3X Shader XRay {Properties{_mainTex(mainTex, 2D) white {}_rimColor(rimColor, Color) (0.8109627,0.7688679,1,0)_mainColor(mainColor, Color) (1,1,1,1)_powVal(powVal, Float) 2_mulVal(mulVal, Float) 1[HideInInspector] _texcoord( , 2D ) white {}}SubShader{Tags { RenderTypeOpaque }LOD 100Pass{Name UnlitPass1ZTest GreaterZWrite OffBlend SrcAlpha OneMinusSrcAlphaTags { LightModeForwardBase }CGPROGRAM#ifndef UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX//only defining to not throw compilation error over Unity 5.5#define UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input)#endif#pragma vertex vert#pragma fragment frag#pragma multi_compile_instancing#include UnityCG.cgincstruct appdata{float4 vertex : POSITION;float4 color : COLOR;float3 ase_normal : NORMAL;UNITY_VERTEX_INPUT_INSTANCE_ID};struct v2f{float4 vertex : SV_POSITION;#ifdef ASE_NEEDS_FRAG_WORLD_POSITIONfloat3 worldPos : TEXCOORD0;#endiffloat4 ase_texcoord1 : TEXCOORD1;UNITY_VERTEX_INPUT_INSTANCE_IDUNITY_VERTEX_OUTPUT_STEREO};uniform float4 _rimColor;uniform float _powVal;uniform float _mulVal;v2f vert ( appdata v ){v2f o;UNITY_SETUP_INSTANCE_ID(v);UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);UNITY_TRANSFER_INSTANCE_ID(v, o);float3 ase_worldNormal UnityObjectToWorldNormal(v.ase_normal);o.ase_texcoord1.xyz ase_worldNormal;//setting value to unused interpolator channels and avoid initialization warningso.ase_texcoord1.w 0;float3 vertexValue float3(0, 0, 0);#if ASE_ABSOLUTE_VERTEX_POSvertexValue v.vertex.xyz;#endifvertexValue vertexValue;#if ASE_ABSOLUTE_VERTEX_POSv.vertex.xyz vertexValue;#elsev.vertex.xyz vertexValue;#endifo.vertex UnityObjectToClipPos(v.vertex);#ifdef ASE_NEEDS_FRAG_WORLD_POSITIONo.worldPos mul(unity_ObjectToWorld, v.vertex).xyz;#endifreturn o;}fixed4 frag (v2f i ) : SV_Target{UNITY_SETUP_INSTANCE_ID(i);UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);fixed4 finalColor;#ifdef ASE_NEEDS_FRAG_WORLD_POSITIONfloat3 WorldPosition i.worldPos;#endiffloat3 ase_worldNormal i.ase_texcoord1.xyz;float3 worldSpaceViewDir10 WorldSpaceViewDir( float4( 0,0,0,1 ) );float3 normalizeResult12 normalize( worldSpaceViewDir10 );float dotResult13 dot( ase_worldNormal , normalizeResult12 );finalColor ( _rimColor * ( pow( ( 1.0 - dotResult13 ) , _powVal ) * _mulVal ) );return finalColor;}ENDCG}Pass{Name UnlitPass2Tags { LightModeForwardBase }Blend OffZWrite OnZTest LEqualCGPROGRAM#ifndef UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX//only defining to not throw compilation error over Unity 5.5#define UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input)#endif#pragma vertex vert#pragma fragment frag#pragma multi_compile_instancing#include UnityCG.cginc#include Lighting.cginc#include AutoLight.cginc#define ASE_NEEDS_FRAG_WORLD_POSITIONstruct appdata{float4 vertex : POSITION;float4 color : COLOR;float4 ase_texcoord : TEXCOORD0;float3 ase_normal : NORMAL;UNITY_VERTEX_INPUT_INSTANCE_ID};struct v2f{float4 vertex : SV_POSITION;#ifdef ASE_NEEDS_FRAG_WORLD_POSITIONfloat3 worldPos : TEXCOORD0;#endiffloat4 ase_texcoord1 : TEXCOORD1;float4 ase_texcoord2 : TEXCOORD2;UNITY_VERTEX_INPUT_INSTANCE_IDUNITY_VERTEX_OUTPUT_STEREO};//This is a late directiveuniform sampler2D _mainTex;uniform float4 _mainTex_ST;uniform float4 _mainColor;v2f vert(appdata v ){v2f o;UNITY_SETUP_INSTANCE_ID(v);UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);UNITY_TRANSFER_INSTANCE_ID(v, o);float3 ase_worldNormal UnityObjectToWorldNormal(v.ase_normal);o.ase_texcoord2.xyz ase_worldNormal;o.ase_texcoord1.xy v.ase_texcoord.xy;//setting value to unused interpolator channels and avoid initialization warningso.ase_texcoord1.zw 0;o.ase_texcoord2.w 0;float3 vertexValue float3(0, 0, 0);#if ASE_ABSOLUTE_VERTEX_POSvertexValue v.vertex.xyz;#endifvertexValue vertexValue;#if ASE_ABSOLUTE_VERTEX_POSv.vertex.xyz vertexValue;#elsev.vertex.xyz vertexValue;#endifo.vertex UnityObjectToClipPos(v.vertex);#ifdef ASE_NEEDS_FRAG_WORLD_POSITIONo.worldPos mul(unity_ObjectToWorld, v.vertex).xyz;#endifreturn o;}fixed4 frag(v2f i ) : SV_Target{UNITY_SETUP_INSTANCE_ID(i);UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);fixed4 finalColor;#ifdef ASE_NEEDS_FRAG_WORLD_POSITIONfloat3 WorldPosition i.worldPos;#endiffloat2 uv_mainTex i.ase_texcoord1.xy * _mainTex_ST.xy _mainTex_ST.zw;float3 ase_worldNormal i.ase_texcoord2.xyz;float3 worldSpaceLightDir UnityWorldSpaceLightDir(WorldPosition);float dotResult4 dot( ase_worldNormal , worldSpaceLightDir );finalColor ( tex2D( _mainTex, uv_mainTex ) * _mainColor * ( ( dotResult4 * 0.5 ) 0.5 ) );return finalColor;}ENDCG}}CustomEditor ASEMaterialInspectorFallback Diffuse } /*ASEBEGIN Version18500 0;306;1661;681;1937.559;441.4886;1.45936;True;True Node;AmplifyShaderEditor.WorldSpaceLightDirHlpNode;3;-976.1194,139.55;Inherit;False;False;1;0;FLOAT;0;False;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 Node;AmplifyShaderEditor.WorldNormalVector;2;-986.5195,-64.54977;Inherit;False;False;1;0;FLOAT3;0,0,1;False;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 Node;AmplifyShaderEditor.DotProductOpNode;4;-693.6849,42.34929;Inherit;False;2;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode;5;-534.3663,61.05127;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0.5;False;1;FLOAT;0 Node;AmplifyShaderEditor.ColorNode;6;-993.7325,-285.175;Inherit;False;Property;_mainColor;mainColor;2;0;Create;True;0;0;False;0;False;1,1,1,1;1,1,1,1;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 Node;AmplifyShaderEditor.SamplerNode;7;-1024.732,-503.175;Inherit;True;Property;_mainTex;mainTex;0;0;Create;True;0;0;False;0;False;-1;None;138df4511c079324cabae1f7f865c1c1;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 Node;AmplifyShaderEditor.SimpleAddOpNode;8;-363.3666,73.05125;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0.5;False;1;FLOAT;0 Node;AmplifyShaderEditor.ColorNode;18;-579.6888,383.1555;Inherit;False;Property;_rimColor;rimColor;1;0;Create;True;0;0;False;0;False;0.8109627,0.7688679,1,0;0.8109627,0.7688679,1,1;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 Node;AmplifyShaderEditor.NormalizeNode;12;-1045.079,582.2842;Inherit;False;1;0;FLOAT3;0,0,0;False;1;FLOAT3;0 Node;AmplifyShaderEditor.WorldNormalVector;11;-1264.591,398.5844;Inherit;False;False;1;0;FLOAT3;0,0,1;False;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 Node;AmplifyShaderEditor.DotProductOpNode;13;-996.485,444.3506;Inherit;False;2;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode;14;-783.7252,675.4164;Inherit;False;Property;_powVal;powVal;3;0;Create;True;0;0;False;0;False;2;2;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.OneMinusNode;15;-868.7095,556.3414;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode;19;-486.6632,600.4702;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.PowerNode;16;-645.6777,609.1974;Inherit;False;False;2;0;FLOAT;0;False;1;FLOAT;1;False;1;FLOAT;0 Node;AmplifyShaderEditor.WorldSpaceViewDirHlpNode;10;-1251.096,622.5241;Inherit;False;1;0;FLOAT4;0,0,0,1;False;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 Node;AmplifyShaderEditor.SimpleMultiplyOpNode;9;-660.4999,-365.2596;Inherit;True;3;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;FLOAT;0;False;1;COLOR;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode;20;-283.6566,462.576;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;FLOAT;0;False;1;COLOR;0 Node;AmplifyShaderEditor.RangedFloatNode;17;-621.9011,755.5342;Inherit;False;Property;_mulVal;mulVal;4;0;Create;True;0;0;False;0;False;1;1;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;0;0,0;Float;False;True;-1;2;ASEMaterialInspector;100;11;XRay;cb43803649bb8db429b4b5d8ba318e3a;True;UnlitPass1;0;0;UnlitPass1;2;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;RenderTypeOpaqueRenderType;False;0;True;2;5;False;-1;10;False;-1;0;1;False;-1;0;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;2;False;-1;True;2;False;-1;False;True;1;LightModeForwardBase;False;0;Diffuse;0;0;Standard;1;Vertex Position,InvertActionOnDeselection;1;0;2;True;True;False;;False;0 Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;1;2.219055,-151.1632;Float;False;False;-1;2;ASEMaterialInspector;100;11;New Amplify Shader;cb43803649bb8db429b4b5d8ba318e3a;True;UnlitPass2;0;1;UnlitPass2;2;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;RenderTypeOpaqueRenderType;False;0;True;0;5;False;-1;10;False;-1;0;5;False;-1;10;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;True;3;False;-1;False;True;1;LightModeForwardBase;False;0;;0;0;Standard;0;False;0 WireConnection;4;0;2;0 WireConnection;4;1;3;0 WireConnection;5;0;4;0 WireConnection;8;0;5;0 WireConnection;12;0;10;0 WireConnection;13;0;11;0 WireConnection;13;1;12;0 WireConnection;15;0;13;0 WireConnection;19;0;16;0 WireConnection;19;1;17;0 WireConnection;16;0;15;0 WireConnection;16;1;14;0 WireConnection;9;0;7;0 WireConnection;9;1;6;0 WireConnection;9;2;8;0 WireConnection;20;0;18;0 WireConnection;20;1;19;0 WireConnection;0;0;20;0 WireConnection;1;0;9;0 ASEEND*/ //CHKSM6DD70292189FAD2C0FC85A4698D11D5C972718B6
http://www.hkea.cn/news/14399149/

相关文章:

  • 网站tag聚合怎么做智库建设网站方案
  • 免费 开源 企业网站网站服务器安全防护
  • 小型企业网站建设报告微网站 网页
  • iis一个文件夹配置多个网站搜索引擎营销名词解释
  • 品牌 网站建设不用买服务器可以做网站
  • 秦皇岛专业网站建设哪里有wordpress 3.6
  • 重庆网站定制哪家好网络营销策划书范文模板
  • 门户网站开发项目用易语言做网站
  • 网站效果检测潍坊营销型网站制作
  • 昆明建企业网站多少钱wordpress调用 自定义php
  • 注销主体备案与网站备案国家建设工程标准化信息网
  • 简历网站免费怎么做自己的app软件
  • 哪里有做网站开发学校网站怎么做推广
  • 做好网站开发工作总结网站不备案什么意思
  • 湛江网站搜索引擎推广山东网站建设系统
  • 宁波网站推广外包服务婚庆网站模板
  • 做网站用com还是cn好新闻类网站的设计
  • 公司网站有什么作用咖啡网站建设的需求分析
  • 石家庄建站培训h5做的分销网站
  • 网站推广策略和效果评价php网站建设的公司
  • 网站怎么创建网址怎么推广
  • 保山网站建设有哪些免费做电子名片的网站
  • win2008 r2 搭建网站烟台莱州网站建设
  • wordpress snape蒲城网站建设wzjseo
  • 合作网站登录制作wordpress论坛功能
  • phpwind和wordpress安徽360优化
  • 昆明网站推广优化公司专业团队图片素材
  • 做外贸网站做成哪种形式好安阳县交易中心网站建设招标
  • 商务网站开发技术wordpress怎么念
  • 京东购物网站怎么做福建公司网站建设