50字范文,内容丰富有趣,生活中的好帮手!
50字范文 > Unity shader图集Atlas下的UV坐标归一化转换

Unity shader图集Atlas下的UV坐标归一化转换

时间:2018-09-19 16:09:45

相关推荐

Unity shader图集Atlas下的UV坐标归一化转换

unity中如果图片打入了图集中,在shader中取到的uv坐标默认是图集中的坐标,如果需要shader做一些类似流光的效果,需要转换成常用的0-1区间的归一化uv坐标,转换方法如下:

步骤一:C#中向shader中传入图片在图集中的Rect信息和Scale信息

Vector4 UVRect = UnityEngine.Sprites.DataUtility.GetOuterUV(spriteRenderer.sprite);Rect originRect = spriteRenderer.sprite.rect;Rect textureRect = spriteRenderer.sprite.textureRect;float scaleX = textureRect.width / originRect.width;float scaleY = textureRect.height / originRect.height;spriteRenderer.material.SetVector("_UVRect", UVRect);spriteRenderer.material.SetVector("_UVScale", new Vector4(scaleX, scaleY, 0, 0));

步骤二:shader中根据Rect信息和Scale信息换算得到归一化UV坐标:

_UVRect("UVRect", Vector) = (0, 0, 1, 1)_UVScale("UVScale", Vector) = (0, 0, 0, 0)//Shader Pass中声明变量属性float4 _UVRect;float4 _UVScale;//Fragment Shader中换算算法,换算后的IN.texcoord就是归一化后的UV坐标float2 center = (_UVRect.zw - _UVRect.xy) / 2;IN.texcoord = IN.texcoord - _UVRect.xy - center;IN.texcoord *= _UVScale;IN.texcoord += center;IN.texcoord = IN.texcoord / (_UVRect.zw - _UVRect.xy);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。