浏览代码

changed input textures layout for decals

/prototype-decals
Paul Melamed 7 年前
当前提交
2df92783
共有 8 个文件被更改,包括 28 次插入27 次删除
  1. 14
      ScriptableRenderPipeline/HDRenderPipeline/Editor/Material/Decal/DecalUI.cs
  2. 4
      ScriptableRenderPipeline/HDRenderPipeline/Material/Decal/Decal.cs
  3. 8
      ScriptableRenderPipeline/HDRenderPipeline/Material/Decal/Decal.cs.hlsl
  4. 4
      ScriptableRenderPipeline/HDRenderPipeline/Material/Decal/Decal.hlsl
  5. 4
      ScriptableRenderPipeline/HDRenderPipeline/Material/Decal/Decal.shader
  6. 12
      ScriptableRenderPipeline/HDRenderPipeline/Material/Decal/DecalData.hlsl
  7. 4
      ScriptableRenderPipeline/HDRenderPipeline/Material/Decal/DecalProperties.hlsl
  8. 5
      ScriptableRenderPipeline/HDRenderPipeline/Material/Decal/DecalUtilities.hlsl

14
ScriptableRenderPipeline/HDRenderPipeline/Editor/Material/Decal/DecalUI.cs


public static GUIContent baseColorText = new GUIContent("Base Color + Blend", "Albedo (RGB) and Blend Factor (A)");
public static GUIContent normalMapText = new GUIContent("Normal Map", "Normal Map (BC7/BC5/DXT5(nm))");
public static GUIContent MSHMapText = new GUIContent("Metal Smoothness Height Map", "Metal(R) Smoothness(G) Height(B) ");
public static GUIContent decalBlendText = new GUIContent("Decal Blend", "Combines with Base Color (A)");
public static GUIContent maskMapText = new GUIContent("Mask Map - M(R), AO(G), D(B), S(A)", "Mask map");
public static GUIContent decalBlendText = new GUIContent("Decal Blend", "Whole decal blend");
}
protected MaterialProperty baseColorMap = new MaterialProperty();

protected const string kNormalMap = "_NormalMap";
protected MaterialProperty MSHMap = new MaterialProperty();
protected const string kMSHMap = "_MSHMap";
protected MaterialProperty maskMap = new MaterialProperty();
protected const string kMaskMap = "_MaskMap";
protected MaterialProperty decalBlend = new MaterialProperty();
protected const string kDecalBlend = "_DecalBlend";

{
baseColorMap = FindProperty(kBaseColorMap, props);
normalMap = FindProperty(kNormalMap, props);
MSHMap = FindProperty(kMSHMap, props);
maskMap = FindProperty(kMaskMap, props);
decalBlend = FindProperty(kDecalBlend, props);
}

{
CoreUtils.SetKeyword(material, "_COLORMAP", material.GetTexture(kBaseColorMap));
CoreUtils.SetKeyword(material, "_NORMALMAP", material.GetTexture(kNormalMap));
CoreUtils.SetKeyword(material, "_MSHMAP", material.GetTexture(kMSHMap));
CoreUtils.SetKeyword(material, "_MASKMAP", material.GetTexture(kMaskMap));
}
protected void SetupMaterialKeywordsAndPassInternal(Material material)

m_MaterialEditor.TexturePropertySingleLine(Styles.baseColorText, baseColorMap);
m_MaterialEditor.TexturePropertySingleLine(Styles.normalMapText, normalMap);
m_MaterialEditor.TexturePropertySingleLine(Styles.MSHMapText, MSHMap);
m_MaterialEditor.TexturePropertySingleLine(Styles.maskMapText, maskMap);
m_MaterialEditor.ShaderProperty(decalBlend, Styles.decalBlendText);
EditorGUI.indentLevel--;

4
ScriptableRenderPipeline/HDRenderPipeline/Material/Decal/Decal.cs


public Vector4 baseColor;
[SurfaceDataAttributes("Normal", true)]
public Vector4 normalWS;
[SurfaceDataAttributes("Metal Smoothness Height", true)]
public Vector4 MSH;
[SurfaceDataAttributes("Mask", true)]
public Vector4 mask;
};
[GenerateHLSL(PackingRules.Exact)]

8
ScriptableRenderPipeline/HDRenderPipeline/Material/Decal/Decal.cs.hlsl


//
#define DEBUGVIEW_DECAL_DECALSURFACEDATA_BASE_COLOR (10000)
#define DEBUGVIEW_DECAL_DECALSURFACEDATA_NORMAL_WS (10001)
#define DEBUGVIEW_DECAL_DECALSURFACEDATA_MSH (10002)
#define DEBUGVIEW_DECAL_DECALSURFACEDATA_MASK (10002)
//
// UnityEngine.Experimental.Rendering.HDPipeline.Decal+DBufferMaterial: static fields

{
float4 baseColor;
float4 normalWS;
float4 MSH;
float4 mask;
};
//

case DEBUGVIEW_DECAL_DECALSURFACEDATA_NORMAL_WS:
result = decalsurfacedata.normalWS.xyz;
break;
case DEBUGVIEW_DECAL_DECALSURFACEDATA_MSH:
result = decalsurfacedata.MSH.xyz;
case DEBUGVIEW_DECAL_DECALSURFACEDATA_MASK:
result = decalsurfacedata.mask.xyz;
break;
}
}

4
ScriptableRenderPipeline/HDRenderPipeline/Material/Decal/Decal.hlsl


{
outDBuffer0 = surfaceData.baseColor;
outDBuffer1 = surfaceData.normalWS;
outDBuffer2 = surfaceData.MSH;
outDBuffer2 = surfaceData.mask;
}
void DecodeFromDBuffer(

surfaceData.baseColor = inDBuffer0;
surfaceData.normalWS.xyz = inDBuffer1.xyz * 2.0f - 1.0f;
surfaceData.normalWS.w = inDBuffer1.w;
surfaceData.MSH = inDBuffer2;
surfaceData.mask = inDBuffer2;
}

4
ScriptableRenderPipeline/HDRenderPipeline/Material/Decal/Decal.shader


{
_BaseColorMap("BaseColorMap", 2D) = "white" {}
_NormalMap("NormalMap", 2D) = "bump" {} // Tangent space normal map
_MSHMap("MSHMap", 2D) = "white" {}
_MaskMap("MaskMap", 2D) = "white" {}
_DecalBlend("_DecalBlend", Range(0.0, 1.0)) = 0.5
}

//-------------------------------------------------------------------------------------
#pragma shader_feature _COLORMAP
#pragma shader_feature _NORMALMAP
#pragma shader_feature _MSHMAP
#pragma shader_feature _MASKMAP
//-------------------------------------------------------------------------------------

12
ScriptableRenderPipeline/HDRenderPipeline/Material/Decal/DecalData.hlsl


{
surfaceData.baseColor = float4(0,0,0,0);
surfaceData.normalWS = float4(0,0,0,0);
surfaceData.MSH = float4(0,0,0,0);
surfaceData.mask = float4(0,0,0,0);
totalBlend *= surfaceData.baseColor.w;
surfaceData.baseColor.w = totalBlend;
surfaceData.baseColor.w *= totalBlend;
#endif
UVMapping texCoord;
ZERO_INITIALIZE(UVMapping, texCoord);

surfaceData.normalWS.w = totalBlend;
#endif
#if _MSHMAP
surfaceData.MSH.xyz = SAMPLE_TEXTURE2D(_MSHMap, sampler_MSHMap, texCoordDS.xy);
surfaceData.MSH.w = totalBlend;
#if _MASKMAP
surfaceData.mask = SAMPLE_TEXTURE2D(_MaskMap, sampler_MaskMap, texCoordDS.xy);
surfaceData.normalWS.w *= surfaceData.mask.z;
surfaceData.mask.z *= totalBlend;
#endif
}

4
ScriptableRenderPipeline/HDRenderPipeline/Material/Decal/DecalProperties.hlsl


SAMPLER2D(sampler_BaseColorMap);
TEXTURE2D(_NormalMap);
SAMPLER2D(sampler_NormalMap);
TEXTURE2D(_MSHMap);
SAMPLER2D(sampler_MSHMap);
TEXTURE2D(_MaskMap);
SAMPLER2D(sampler_MaskMap);
float _DecalBlend;

5
ScriptableRenderPipeline/HDRenderPipeline/Material/Decal/DecalUtilities.hlsl


surfaceData.baseColor.xyz = lerp(surfaceData.baseColor.xyz, decalSurfaceData.baseColor.xyz, decalSurfaceData.baseColor.w);
surfaceData.normalWS.xyz = normalize(lerp(surfaceData.normalWS.xyz, decalSurfaceData.normalWS.xyz, decalSurfaceData.normalWS.w));
surfaceData.metallic = lerp(surfaceData.metallic, decalSurfaceData.MSH.x, decalSurfaceData.MSH.w);
surfaceData.perceptualSmoothness = lerp(surfaceData.perceptualSmoothness, decalSurfaceData.MSH.y, decalSurfaceData.MSH.w);
surfaceData.metallic = lerp(surfaceData.metallic, decalSurfaceData.mask.x, decalSurfaceData.mask.z);
surfaceData.ambientOcclusion = lerp(surfaceData.ambientOcclusion, decalSurfaceData.mask.y, decalSurfaceData.mask.z);
surfaceData.perceptualSmoothness = lerp(surfaceData.perceptualSmoothness, decalSurfaceData.mask.w, decalSurfaceData.mask.z);
#endif
}
正在加载...
取消
保存