-
Notifications
You must be signed in to change notification settings - Fork 499
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix export of metallic and normal texture map. Add support for any sh…
…ader that can support metallic roughness workflow. (#133) * Fix export of metallic and normal texture map. Add support for any shader that can support metallic roughness workflow. * Addressed feedback - Use Graphics.blit to speed up texture read/write - Update texture image paths to use full paths to avoid name collision - Don't do anything if user cancels the dialog * Revert irrelevant files * Fix indentation * Update accessor for structs and enum * Update formatting * Address feedback * Remove exporter dependency on UnityEditor.
- Loading branch information
1 parent
b63e529
commit 9d5a2df
Showing
12 changed files
with
380 additions
and
89 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
10
UnityGLTF/Assets/Resources/MetalGlossChannelSwap.shader.meta
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} | ||
} | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.