Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix export of metallic and normal texture map. Add support for any shader that can support metallic roughness workflow. #133

Merged
merged 9 commits into from
Apr 4, 2018
61 changes: 61 additions & 0 deletions UnityGLTF/Assets/Resources/MetalGlossChannelSwap.shader
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
Shader "Hidden/MetalGlossChannelSwap"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
// No culling or depth
Cull Off ZWrite Off ZTest Always

Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag

#include "UnityCG.cginc"

struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};

struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};

v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}

sampler2D _MainTex;

float4 frag (v2f i) : SV_Target
{
float4 col = tex2D(_MainTex, i.uv);
// From the GLTF 2.0 spec
// The metallic-roughness texture. The metalness values are sampled from the B channel.
// The roughness values are sampled from the G channel. These values are linear.
// If other channels are present (R or A), they are ignored for metallic-roughness calculations.
//
// Unity, by default, puts metallic in R channel and glossiness in A channel.
// Unity uses a metallic-gloss texture so we need to invert the value in the g channel.
//
// Conversion Summary
// Unity R channel goes into B channel
// Unity A channel goes into G channel, then inverted
return float4(1, 1 - col.a, col.r, 1);
}
ENDCG
}
}
}
10 changes: 10 additions & 0 deletions UnityGLTF/Assets/Resources/MetalGlossChannelSwap.shader.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

52 changes: 52 additions & 0 deletions UnityGLTF/Assets/Resources/NormalChannel.shader
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
Shader "Hidden/NormalChannel"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
// No culling or depth
Cull Off ZWrite Off ZTest Always

Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag

#include "UnityCG.cginc"

struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};

struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};

v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}

sampler2D _MainTex;

fixed4 frag (v2f i) : SV_Target
{
float4 col = tex2D(_MainTex, i.uv);
// If a texture is marked as a normal map
// the values are stored in the A and G channel.
return float4(col.a, col.g, 1, 1);
}
ENDCG
}
}
}
10 changes: 10 additions & 0 deletions UnityGLTF/Assets/Resources/NormalChannel.shader.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Empty file.
Empty file.
9 changes: 7 additions & 2 deletions UnityGLTF/Assets/UnityGLTF/Scripts/Editor/GLTFExportMenu.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,11 @@ static void ExportSelected()
throw new Exception("No objects selected, cannot export.");

var exporter = new GLTFSceneExporter(Selection.transforms);

var path = EditorUtility.OpenFolderPanel("glTF Export Path", "", "");
exporter.SaveGLTFandBin(path, name);
if (!string.IsNullOrEmpty(path)) {
exporter.SaveGLTFandBin (path, name);
}
}

[MenuItem("GLTF/Export Scene")]
Expand All @@ -30,6 +33,8 @@ static void ExportScene()

var exporter = new GLTFSceneExporter(transforms);
var path = EditorUtility.OpenFolderPanel("glTF Export Path", "", "");
exporter.SaveGLTFandBin(path, scene.name);
if (path != "") {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

string.IsNullOrEmpty

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated

exporter.SaveGLTFandBin (path, scene.name);
}
}
}
2 changes: 0 additions & 2 deletions UnityGLTF/Assets/UnityGLTF/Scripts/Editor/PbrShaderGUI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,6 @@ private static class Styles
MaterialProperty bumpMap = null;
MaterialProperty occlusionStrength = null;
MaterialProperty occlusionMap = null;
MaterialProperty heigtMapScale = null;
MaterialProperty heightMap = null;
MaterialProperty emissionColor = null;
MaterialProperty emissionMap = null;

Expand Down
2 changes: 1 addition & 1 deletion UnityGLTF/Assets/UnityGLTF/Scripts/GLTFComponent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace UnityGLTF
/// </summary>
class GLTFComponent : MonoBehaviour
{
public string Url;
public string Url = null;
public bool Multithreaded = true;
public bool UseStream = false;

Expand Down
Loading