Как в 3d max'e сделать материал с вертекс-колорным шейдером?
Добавлено: 04 фев 2018, 16:48
В Юнити у меня есть очень простой, самописный вертекс-колорный шейдер.
Как в 3d max'e сделать рендер модели максимально похожий на то, что имеет место быть в Юнити? =)
Синтаксис:
Используется csharp
Shader "BlastDigger/VertexColor"
{
Properties
{
}
SubShader
{
Tags { "Queue" = "Geometry-1" "RenderType"="Opaque" }
Lighting Off
//Cull Off
ZWrite On
Fog { Mode Off }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float3 color : COLOR;
float3 normal : NORMAL;
};
struct v2f
{
float4 vertex : SV_POSITION;
float4 ramps : TEXCOORD0;
float3 color : TEXCOORD1;
};
v2f vert (appdata v)
{
v2f o;
UNITY_INITIALIZE_OUTPUT(v2f, o);
o.vertex = UnityObjectToClipPos(v.vertex);
float ambientLight = dot(normalize(mul(unity_ObjectToWorld, v.vertex)), half3(0, 1, 0)) * 0.5 + 0.5;
//float directLight = dot(normalize(mul(unity_ObjectToWorld, float4(v.normal.xyz,0))), half3(0,1,0)) * 0.5 + 0.5;
//o.col = _Color;
o.color = v.color;
o.ramps.z = abs(pow(1 - dot(normalize(ObjSpaceViewDir(v.vertex)), v.normal.xyz), 4));
o.ramps.z *= ambientLight;// / 2;
o.ramps.z *= 5;
return o;
}
half4 frag (v2f i) : COLOR
{
half3 color = i.color;
color += half3(1, 1, 1) * i.ramps.z;
return half4(color, 1);
}
ENDCG
}
}
}
{
Properties
{
}
SubShader
{
Tags { "Queue" = "Geometry-1" "RenderType"="Opaque" }
Lighting Off
//Cull Off
ZWrite On
Fog { Mode Off }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float3 color : COLOR;
float3 normal : NORMAL;
};
struct v2f
{
float4 vertex : SV_POSITION;
float4 ramps : TEXCOORD0;
float3 color : TEXCOORD1;
};
v2f vert (appdata v)
{
v2f o;
UNITY_INITIALIZE_OUTPUT(v2f, o);
o.vertex = UnityObjectToClipPos(v.vertex);
float ambientLight = dot(normalize(mul(unity_ObjectToWorld, v.vertex)), half3(0, 1, 0)) * 0.5 + 0.5;
//float directLight = dot(normalize(mul(unity_ObjectToWorld, float4(v.normal.xyz,0))), half3(0,1,0)) * 0.5 + 0.5;
//o.col = _Color;
o.color = v.color;
o.ramps.z = abs(pow(1 - dot(normalize(ObjSpaceViewDir(v.vertex)), v.normal.xyz), 4));
o.ramps.z *= ambientLight;// / 2;
o.ramps.z *= 5;
return o;
}
half4 frag (v2f i) : COLOR
{
half3 color = i.color;
color += half3(1, 1, 1) * i.ramps.z;
return half4(color, 1);
}
ENDCG
}
}
}
Как в 3d max'e сделать рендер модели максимально похожий на то, что имеет место быть в Юнити? =)