网站推广系统方案,戴南网站建设,购物网站用html怎么做,网页制作素材 期末考试描边shader的实现有很多种#xff0c;顶点外扩是其中之一。顶点外扩的原理是用2个Pass 渲染物体2次第一遍:描边#xff0c;顶点沿法线方向外拓后用黑色渲染。外扩这一步的实现是在投影空间#xff0c;也就是2D的#xff0c;根绝法线的x和y值进行外扩#xff0c;因为是沿着…描边shader的实现有很多种顶点外扩是其中之一。顶点外扩的原理是用2个Pass 渲染物体2次第一遍:描边顶点沿法线方向外拓后用黑色渲染。外扩这一步的实现是在投影空间也就是2D的根绝法线的x和y值进行外扩因为是沿着法线方向外扩所以法线越和摄像机方向相同也就是越接近面向摄像机的顶点顶点的位置变化的越小当法线和摄像机方向相同时不会有任何变化。
第一遍渲染后实际的图像如下 第二遍:正常渲染物体与第一遍渲染的混合在一起 优点:(1)效果最好。(2)适用范围广。缺点:(1)对效率有一定影响。因为有2个Pass,所以DrawCall为正常的2倍(2)对于法线过度不均匀的模型比如立方体轮廓会有缝隙。 上边的立方体例子我是特意把描边的外扩值调到很大便于理解。由第一遍渲染后的图和第二遍渲染后的图的对比很容易理解这个方法的原理。其实就是通过法线来把边缘进行位移如果不是边缘则不位移比如立方体的正面。在第二次渲染后会覆盖同位置的像素因为边缘已经外扩像素的位置已经不是原来的位置因此不会被覆盖而像位于立方体正面的像素则会被第二次渲染时覆盖最后就混合成了带黑边的效果图。 Shader Study/3_OutLine
{Properties{_MainTex(Texture, 2D) white{}_LineSize(OutlineSize, range(0, 0.1)) 0.02_LineColor(LineColor, Color) (0,0,0,1)}SubShader{Pass{Tags{ LightMode Always }// 先绘制这个纯色的顶点然后在下一个pass绘制对象//这里不存在前后面关闭裁剪前后面也不需要深度缓存Cull Off // 关闭剔除模型前后都会显示ZWrite Off // 系统默认是开的要关闭。关闭深度缓存后渲染的物体会根据ZTest的结果将自己渲染输出写入ZTest Always // 深度测试[一直显示]被其他物体挡住后此pass绘制的颜色会显示出来CGPROGRAM#pragma vertex vert#pragma fragment frag#include UnityCG.cgincfloat _LineSize;float4 _LineColor;struct v2f{float4 pos:SV_POSITION;float4 color : COLOR;};v2f vert(appdata_full v){v2f o;// 获取模型的最终的投影坐标o.pos mul(UNITY_MATRIX_MVP, v.vertex);// UNITY_MATRIX_IT_MV为【模型坐标-世界坐标-摄像机坐标】【专门针对法线的变换】// 法线乘以MV将模型空间 转换 视图空间float3 norm mul((float3x3)UNITY_MATRIX_IT_MV, v.normal);// 转换 视图空间 到 投影空间 【3D转2D】float2 offset TransformViewToProjection(norm.xy);// 得到的offset模型被挤的非常大然后乘以倍率o.pos.xy offset * _LineSize;o.color _LineColor;return o;}float4 frag(v2f i) : COLOR{return i.color;}ENDCG}Pass{// 直接使用顶点和片段shader显示物体CGPROGRAM#pragma vertex vert#pragma fragment frag#include UnityCG.cgincsampler2D _MainTex;float4 _MainTex_ST;struct v2f {float4 pos:SV_POSITION;float2 uv : TEXCOORD0;// 纹理相对自身的坐标轴,float2是一个平面};v2f vert(appdata_full v){v2f o;o.pos mul(UNITY_MATRIX_MVP, v.vertex);o.uv TRANSFORM_TEX(v.texcoord, _MainTex);return o;}float4 frag(v2f i) : COLOR{float4 texCol tex2D(_MainTex, i.uv);return texCol;}ENDCG}}
}附上工程连接http://download.csdn.net/detail/yinfourever/9565336