Skip to content

Commit a9e0f05

Browse files
committed
hdrp fixes: setup Opaque materials properly
1 parent 6d79805 commit a9e0f05

2 files changed

Lines changed: 49 additions & 2 deletions

File tree

Runtime/Scripts/SceneImporter/ImporterMaterials.cs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,14 @@ void SetTransformKeyword()
220220
var KHR_materials_anisotropy = settings && settings.KHR_materials_anisotropy;
221221
// ReSharper restore InconsistentNaming
222222

223+
var isHDRP = false;
224+
var renderPipelineAsset = UnityEngine.Rendering.GraphicsSettings.currentRenderPipeline;
225+
if (renderPipelineAsset)
226+
{
227+
var renderPipeline = renderPipelineAsset.GetType().Name;
228+
isHDRP = renderPipeline == "HighDefinitionRenderPipelineAsset" || renderPipeline == "HDRenderPipelineAsset";
229+
}
230+
223231
var sgMapper = mapper as ISpecGlossUniformMap;
224232
if (sgMapper != null && KHR_materials_pbrSpecularGlossiness)
225233
{
@@ -422,6 +430,12 @@ void SetTransformKeyword()
422430
if (transmissionMapper != null && KHR_materials_transmission)
423431
{
424432
var transmission = GetTransmission(def);
433+
434+
// TODO: maybe find a better solution.
435+
// currently to avoid the creation of transmission materials when it's actually not using it
436+
if (transmission != null && transmission.transmissionFactor == 0f && isHDRP)
437+
transmission = null;
438+
425439
if (transmission != null)
426440
{
427441
transmissionMapper.TransmissionFactor = transmission.transmissionFactor;
@@ -449,7 +463,9 @@ void SetTransformKeyword()
449463
}
450464
}
451465

452-
mapper.Material.renderQueue = 3000;
466+
if (!isHDRP)
467+
mapper.Material.renderQueue = 3000;
468+
453469
#if UNITY_VISIONOS
454470
mapper.AlphaMode = AlphaMode.BLEND;
455471
#endif
@@ -513,7 +529,8 @@ void SetTransformKeyword()
513529
}
514530
}
515531

516-
mapper.Material.renderQueue = 3000;
532+
if (!isHDRP)
533+
mapper.Material.renderQueue = 3000;
517534
mapper.Material.SetFloat("_VOLUME_ON", 1f);
518535
}
519536
}

Runtime/Scripts/UniformMaps/BaseGraphMap.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ public virtual AlphaMode AlphaMode
8888
{
8989
_material.SetOverrideTag("RenderType", "TransparentCutout");
9090
_material.SetFloat("_Mode", 1);
91+
_material.SetFloat("_SurfaceType", 0);
92+
9193
_material.SetInt("_SrcBlend", (int)BlendMode.One);
9294
_material.SetInt("_DstBlend", (int)BlendMode.Zero);
9395
_material.SetInt("_BUILTIN_SrcBlend", (int)BlendMode.One);
@@ -114,6 +116,8 @@ public virtual AlphaMode AlphaMode
114116
{
115117
_material.SetOverrideTag("RenderType", "Transparent");
116118
_material.SetFloat("_Mode", 2);
119+
_material.SetFloat("_SurfaceType", 1);
120+
117121
_material.SetInt("_SrcBlend", (int)BlendMode.SrcAlpha);
118122
_material.SetInt("_DstBlend", (int)BlendMode.OneMinusSrcAlpha);
119123
_material.SetInt("_BUILTIN_SrcBlend", (int)BlendMode.SrcAlpha);
@@ -139,6 +143,7 @@ public virtual AlphaMode AlphaMode
139143
{
140144
_material.SetOverrideTag("RenderType", "Opaque");
141145
_material.SetFloat("_Mode", 0);
146+
_material.SetFloat("_SurfaceType", 0);
142147
_material.SetInt("_SrcBlend", (int)BlendMode.One);
143148
_material.SetInt("_DstBlend", (int)BlendMode.Zero);
144149
_material.SetInt("_BUILTIN_SrcBlend", (int)BlendMode.One);
@@ -154,6 +159,8 @@ public virtual AlphaMode AlphaMode
154159
_material.DisableKeyword("_BUILTIN_ALPHABLEND_ON");
155160
_material.DisableKeyword("_BUILTIN_ALPHAPREMULTIPLY_ON");
156161
_material.renderQueue = (int)RenderQueue.Geometry;
162+
163+
SetShaderModeOpaque(_material);
157164
}
158165

159166
_alphaMode = value;
@@ -218,6 +225,29 @@ protected void SetAlphaModeMask(Material material, bool isMask) {
218225
const string k_ShaderPassRayTracingPrepass = "RayTracingPrepass";
219226
const string k_ShaderPassDepthOnlyPass = "DepthOnly";
220227

228+
protected void SetShaderModeOpaque(Material material)
229+
{
230+
material.SetOverrideTag(TAG_RENDER_TYPE, TAG_RENDER_TYPE_OPAQUE);
231+
material.DisableKeyword(KW_SURFACE_TYPE_TRANSPARENT);
232+
material.DisableKeyword(KW_SURFACE_TYPE_TRANSPARENT_BUILTIN);
233+
material.DisableKeyword(KW_DISABLE_SSR_TRANSPARENT);
234+
material.DisableKeyword(KW_ENABLE_FOG_ON_TRANSPARENT);
235+
material.DisableKeyword(KW_ALPHACLIP_ON_BUILTIN);
236+
material.SetShaderPassEnabled(k_ShaderPassTransparentDepthPrepass, true);
237+
material.SetShaderPassEnabled(k_ShaderPassTransparentDepthPostpass, true);
238+
material.SetShaderPassEnabled(k_ShaderPassTransparentBackface, true);
239+
material.SetShaderPassEnabled(k_ShaderPassRayTracingPrepass, true);
240+
material.SetShaderPassEnabled(k_ShaderPassDepthOnlyPass, true);
241+
material.SetFloat(srcBlendPropId, (int)BlendMode.One);
242+
material.SetFloat(dstBlendPropId, (int)BlendMode.Zero);
243+
material.SetFloat(k_ZTestGBufferPropId, (int)CompareFunction.LessEqual); //4
244+
material.SetFloat(k_AlphaDstBlendPropId, (int)BlendMode.Zero);
245+
material.SetFloat(k_Surface, 0);
246+
material.SetFloat(k_SurfaceBuiltin, 0);
247+
material.SetFloat(zWritePropId, 1);
248+
material.SetFloat(alphaToMask, 0);
249+
}
250+
221251
protected void SetShaderModeBlend(Material material)
222252
{
223253
material.SetOverrideTag(TAG_RENDER_TYPE, TAG_RENDER_TYPE_TRANSPARENT);

0 commit comments

Comments
 (0)