最近为美术开发一个可以直接在unity中预览uv的编辑器,考虑到实用性,直接扩展了GameObject的Inspector,在GameObject的Preview中增加绘制UV的预览,支持查看模型光照贴图的UV布局:
效果:
UV预览:
光照贴图UV预览:
关键技术:几何着色器,C#反射
核心功能即UV的渲染,因此放到最前面讲:
第一步、uvmesh和uv绘制shader
最开始打算使用GL或Handles.DrawLine来绘制(
注意Handles.DrawLine实际上就是封装了GL而已),但是对于面数高的模型效率不太高,所以考虑直接用集合着色器。可以通过mesh的uv信息生成一个用于渲染uv的mesh,也可以考虑直接在着色器中计算uv来渲染。
另外注意:由于几何着色器的特性需要target4.0,且PC上需要DX10以上才可以使用,如果当前Build Setting里并非PC平台,或没设置里没有勾选DX11,或这Graphics Emulation中勾选了OpenGl es2.0,则可能导致渲染uv的shader无法工作,不过unity为我们提供了一个Shader Tag:
“ForceSupported”=”True”,加上这个标签后,除非你的显卡本身不支持几何着色器或不支持DX,否则不管当前的设置是什么都会强制支持。
UV渲染shader:
Tags{ "RenderType" = "Transparent" "Queue"="Transparent" "ForceSupported"="True" }
Pass
{
cull off
zwrite off
blend srcalpha oneminussrcalpha
CGPROGRAM
#pragma vertex vert
#pragma geometry geom
#pragma fragment frag
#pragma exclude_renderers opengl
#pragma target 4.0
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
};
struct v2g
{
float4 vertex : SV_POSITION;
float4 worldPos : TEXCOORD0;
};