diff --git a/com.unity.render-pipelines.high-definition/CHANGELOG.md b/com.unity.render-pipelines.high-definition/CHANGELOG.md
index 24bfc468885..962c0bdfeaf 100644
--- a/com.unity.render-pipelines.high-definition/CHANGELOG.md
+++ b/com.unity.render-pipelines.high-definition/CHANGELOG.md
@@ -131,6 +131,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- Added few exposure debug modes.
- Added support for multiple path-traced views at once (e.g., scene and game views).
- Added Virtual Texturing cache settings to control the size of the Streaming Virtual Texturing caches.
+- Added support for 3DsMax's 2021 Simplified Physical Material from FBX files in the Model Importer.
### Fixed
- Fix when rescale probe all direction below zero (1219246)
diff --git a/com.unity.render-pipelines.high-definition/Documentation~/Diffusion-Profile.md b/com.unity.render-pipelines.high-definition/Documentation~/Diffusion-Profile.md
index 09d6da2ae7d..8c85dcee955 100644
--- a/com.unity.render-pipelines.high-definition/Documentation~/Diffusion-Profile.md
+++ b/com.unity.render-pipelines.high-definition/Documentation~/Diffusion-Profile.md
@@ -1,8 +1,13 @@
# Diffusion Profile
-The High Definition Render Pipeline (HDRP) stores most [subsurface scattering](Subsurface-Scattering.html) settings in a __Diffusion Profile__ Asset. You can assign a __Diffusion Profile__ Asset directly to Materials that use Subsurface Scattering.
+The High Definition Render Pipeline (HDRP) stores most [subsurface scattering](Subsurface-Scattering.md) settings in a __Diffusion Profile__ Asset. You can assign a __Diffusion Profile__ Asset directly to Materials that use Subsurface Scattering.
-To create a Diffusion Profile, navigate to __Assets > Create > Rendering > Diffusion Profile__. To use it, open your HDRP Asset and add it to the __Diffusion Profile List__ property.
+To create a Diffusion Profile, navigate to __Assets > Create > Rendering > Diffusion Profile__.
+
+* To use it by default, open your HDRP Asset and, in the **Material** section, add it to the __Diffusion Profile List__.
+* To use it in a particular [Volume](Volumes.md), select a Volume with a [Diffusion Profile Override](Override-Diffusion-Profile.md) and add it to the **Diffusion Profile List** .
+
+## Properties
| Property| Description |
|:---|:---|
@@ -14,7 +19,7 @@ To create a Diffusion Profile, navigate to __Assets > Create > Rendering > Diffu
-## Subsurface Scattering only
+### Subsurface Scattering only
| Property| Description |
|:---|:---|
@@ -22,7 +27,7 @@ To create a Diffusion Profile, navigate to __Assets > Create > Rendering > Diffu
-## Transmission only
+### Transmission only
| Property| Description |
|:---|:---|
@@ -33,7 +38,7 @@ To create a Diffusion Profile, navigate to __Assets > Create > Rendering > Diffu
-## Profile Previews
+### Profile Previews
| Property| Description |
|:---|:---|
diff --git a/com.unity.render-pipelines.high-definition/Documentation~/HDRP-Asset.md b/com.unity.render-pipelines.high-definition/Documentation~/HDRP-Asset.md
index 2933603e2c7..ed8188a7586 100644
--- a/com.unity.render-pipelines.high-definition/Documentation~/HDRP-Asset.md
+++ b/com.unity.render-pipelines.high-definition/Documentation~/HDRP-Asset.md
@@ -75,7 +75,7 @@ These settings control the draw distance and resolution of the decals atlas that
| ------------------------------- | ------------------------------------------------------------ |
| **Enable** | Enable the checkbox to make HDRP support dynamic resolution in your Unity Project. |
| **- Dynamic Resolution Type** | Use the drop-down to select the type of dynamic resolution HDRP uses:
• **Software**: This option allocates render targets to accommodate the maximum resolution possible, then rescales the viewport accordingly. This allows the viewport to render at varying resolutions. |
-| **- Upscale Filter** | Use the drop-down to select the filter that HDRP uses for upscaling.
• **Bilinear**: A low quality upsample. The least resource intensive option.
• **Catmull-Rom**: A bicubic upsample with 4 taps.
• **Lanczos**: A sharp upsample. This method can potentially introduce artifacts so you should not use it for extreme upsampling cases for example, when the screen percentage is less than 50%.
• **Contrast Adaptive Sharpen**: An ultra sharp upsample. Not meant for screen percenatage less than 50% and will still sharpen when screen percentage is set to 100% |
+| **- Upscale Filter** | Use the drop-down to select the filter that HDRP uses for upscaling.
• **Bilinear**: A low quality upsample. The least resource intensive option.
• **Catmull-Rom**: A bicubic upsample with 4 taps.
• **Lanczos**: A sharp upsample. This method can potentially introduce artifacts so you should not use it for extreme upsampling cases for example, when the screen percentage is less than 50%.
• **Contrast Adaptive Sharpen**: An ultra sharp upsample. This option is not meant for screen percentages less than 50% and still sharpens when the screen percentage is set to 100%. This uses **FidelityFX (CAS) AMD™**. For information about FidelityFX and Contrast Adaptive Sharpening, see [AMD FidelityFX](https://www.amd.com/en/technologies/radeon-software-fidelityfx). |
| **- Minimum Screen Percentage** | The minimum screen percentage that dynamic resolution can reach. |
| **- Maximum Screen Percentage** | The maximum screen percentage that dynamic resolution can reach. This value must be higher than the **Min Screen Percentage**. |
| **- Force Screen Percentage** | Enable the checkbox to force HDRP to use a specific screen percentage for dynamic resolution. This feature is useful for debugging dynamic resolution. |
diff --git a/com.unity.render-pipelines.high-definition/Documentation~/HDRP-Camera.md b/com.unity.render-pipelines.high-definition/Documentation~/HDRP-Camera.md
index aa048554c23..de1b3136bdf 100644
--- a/com.unity.render-pipelines.high-definition/Documentation~/HDRP-Camera.md
+++ b/com.unity.render-pipelines.high-definition/Documentation~/HDRP-Camera.md
@@ -19,7 +19,7 @@ The HDRP Camera shares many properties with the [Standard Unity Camera](https://
| **Volume Anchor Override** | Assign a Transform that the [Volume](Volumes.html) system uses to handle the position of this Camera. For example, if your application uses a third person view of a character, set this property to the character's Transform. The Camera then uses the post-processing and Scene settings for Volumes that the character enters.If you do not assign a Transform, the Camera uses its own Transform instead. |
| **Probe Layer Mask** | Use the drop-down to set the Layer Mask that the Camera uses to exclude environment lights (light from Planar Reflection Probes and Reflection Probes). The Camera only uses Reflection Probes on Layers that you include in this Layer Mask. |
| **Occlusion Culling** | Enable the checkbox to make this Camera not render GameObjects that are not currently visible. For more information, see the [Occlusion Culling documentation](). |
-| **Projection** | Use the drop-down to select the projection mode for the Camera.
• **Perspective**: The Camera simulates perspective when it renders GameObjects. This means that GameObjects further from the Camera appear smaller than GameObjects that are closer.
• **Orthographic**: The Camera renders GameObjects uniformly with no perspective. This means that GameObjects further from the Camera appear to be the same size as GameObjects that are closer. |
+| **Projection** | Use the drop-down to select the projection mode for the Camera.
• **Perspective**: The Camera simulates perspective when it renders GameObjects. This means that GameObjects further from the Camera appear smaller than GameObjects that are closer.
• **Orthographic**: The Camera renders GameObjects uniformly with no perspective. This means that GameObjects further from the Camera appear to be the same size as GameObjects that are closer. Currently, HDRP does not support this projection mode. If you select this projection mode, any HDRP feature that requires lighting does not work consistently. However, this projection mode does work consistently with [Unlit](Unlit-Shader.md) Materials. |
| **FOV Axis** | Use the drop-down to select the axis that you want the field of view to relate to.
• **Vertical**: Allows you to set the **Field of View** using the vertical axis.
• **Horizontal**: Allows you to set the **Field of View** using the horizontal axis.This property only appears when you select **Perspective** from the **Projection** drop-down. |
| **Field of View** | Use the slider to set the viewing angle for the Camera, in degrees.
This property only appears when you select **Perspective** from the **Projection** drop-down. |
| **Link FOV to Physical Camera** | Enable the checkbox to make the Camera use its **Physical Settings** to calculate its viewing angle.This property only appears when you select **Perspective** from the **Projection** drop-down. |
diff --git a/com.unity.render-pipelines.high-definition/Documentation~/Images/VolumetricLighting1.png b/com.unity.render-pipelines.high-definition/Documentation~/Images/VolumetricLighting1.png
deleted file mode 100644
index 2e653c96395..00000000000
--- a/com.unity.render-pipelines.high-definition/Documentation~/Images/VolumetricLighting1.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:e93f3e969405031a0b0ab665441d433350ee4560108b83e35fa8ecc9ab3b1750
-size 5823
diff --git a/com.unity.render-pipelines.high-definition/Documentation~/Images/VolumetricLighting2.png b/com.unity.render-pipelines.high-definition/Documentation~/Images/VolumetricLighting2.png
deleted file mode 100644
index e410c9c1561..00000000000
--- a/com.unity.render-pipelines.high-definition/Documentation~/Images/VolumetricLighting2.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:c9e453bbd6f2834915a61cb6e6be8abcee01dc6ec3814184a4b73761ad8c8597
-size 20335
diff --git a/com.unity.render-pipelines.high-definition/Documentation~/Light-Component.md b/com.unity.render-pipelines.high-definition/Documentation~/Light-Component.md
index cc7d7669fea..a889989aa30 100644
--- a/com.unity.render-pipelines.high-definition/Documentation~/Light-Component.md
+++ b/com.unity.render-pipelines.high-definition/Documentation~/Light-Component.md
@@ -216,7 +216,7 @@ This section is only available in Realtime or Mixed light **Mode**.
| **Blur Passes** | Use the slider to set the number of blur passes HDRP performs on this shadow map. Increasing this value softens shadows, but impacts performance. This property only appears if you select **Rectangle** from the **Type** drop-down and enable [more options](More-Options.html) for this section. |
| **Dimmer** | Dims the shadows this Light casts so they become more faded and transparent.
This property only appears when you enable [more options](More-Options.html) for this section. |
| **Tint** | Specifies whether HDRP should tint the shadows this Light casts. This option affects dynamic shadows, [Contact Shadows](Override-Contact-Shadows.md), and [ShadowMask](Lighting-Mode-Shadowmask.md). It does not affect baked shadows. You can use this behavior to change the color and transparency of shadows.
This property only appears when you enable the [more options](More-Options.html) for this section. |
-| **Penumbra Tint** | Specifies whether the tint should only affect the shadow's penumbra.
This property only appears when you enable the [more options](More-Options.htmlMore-Options.html) for this section. |
+| **Penumbra Tint** | Specifies whether the tint should only affect the shadow's penumbra. If you enable this property, HDRP only applies the color tint to the shadow's penumbra. If you disable this property, HDRP applies the color tint to the entire shadow including the penumbra. To change the color HDRP tints the shadow to, see the above **Tint** property.
This property only appears when you enable the [more options](More-Options.htmlMore-Options.html) for this section. |
| **Fade Distance** | The distance, in meters, between the Camera and the Light at which shadows fade out. This property is available for **Spot** and **Point** Lights.
This property only appears when you enable [more options](More-Options.html) for this section. |
| **Link Light Layer** | Enable the checkbox to use the same [Light Layer](Light-Layers.html) for shadows and lighting. If you enable this feature, then HDRP uses the Light Layer from the **Light Layer** drop-down in the **General** section for shadowing. If you disable this feature, then HDRP uses the **Light Layer** drop-down in this section for shadowing.
This property only appears if you enable [more options](More-Options.html) for this section.To access this property, enable **Light Layers** in your [HDRP Asset](HDRP-Asset.html). |
| **Light Layer** | Use the drop-down to set the Light Layer HDRP uses for shadowing. This Light therefore only casts shadows for GameObjects that use a matching Light Layer. For more information about using Light Layers for shadowing, see [Shadow Light Layers](Light-Layers.html#ShadowLightLayers).
This property only appears if you enable [more options](More-Options.html) for this section.To access this property, disable the **Link Light Layer** checkbox. |
diff --git a/com.unity.render-pipelines.high-definition/Documentation~/Override-Diffusion-Profile.md b/com.unity.render-pipelines.high-definition/Documentation~/Override-Diffusion-Profile.md
index c315b00fc1f..23aff332e11 100644
--- a/com.unity.render-pipelines.high-definition/Documentation~/Override-Diffusion-Profile.md
+++ b/com.unity.render-pipelines.high-definition/Documentation~/Override-Diffusion-Profile.md
@@ -1,6 +1,6 @@
# Diffusion Profile Override
-The High Definition Render Pipeline (HDRP) allows you to use up to 15 [Diffusion Profiles](Diffusion-Profile.html) in view at the same time. To use more than 15 Diffusion Profiles in a Scene, you can use the **Diffusion Profile Override** inside a [Volume](Volumes.html). This allows you to specify which Diffusion Profile to use in a certain area (or in the Scene if the Volume is global).
+The High Definition Render Pipeline (HDRP) allows you to use up to 15 custom [Diffusion Profiles](Diffusion-Profile.md) in view at the same time. To use more than 15 custom Diffusion Profiles in a Scene, you can use the **Diffusion Profile Override** inside a [Volume](Volumes.md). This allows you to specify which Diffusion Profiles to use in a certain area (or in the Scene if the Volume is global).
## Using a Diffusion Profile Override
diff --git a/com.unity.render-pipelines.high-definition/Documentation~/Subsurface-Scattering.md b/com.unity.render-pipelines.high-definition/Documentation~/Subsurface-Scattering.md
index 1ec53d0a336..ca59614540c 100644
--- a/com.unity.render-pipelines.high-definition/Documentation~/Subsurface-Scattering.md
+++ b/com.unity.render-pipelines.high-definition/Documentation~/Subsurface-Scattering.md
@@ -4,20 +4,20 @@ __Subsurface Scattering__ handles light that penetrates and moves within the are
Subsurface scattering also handles the light that penetrates GameObjects from behind and makes those GameObjects look transparent. For certain types of objects, the screen-space blur effect may not make a large visual difference. Therefore, HDRP implements two material types:
-* __Subsurface Scattering__ implements both the screen-space blur effect and transmission (you can disable the latter)
+* __Subsurface Scattering__ implements both the screen-space blur effect and transmission (you can disable the latter).
* __Translucent__ only models transmission.
## Enabling Subsurface Scattering
-To enable subsurface scattering in your [HDRP Asset](HDRP-Asset.html):
+To enable subsurface scattering in your [HDRP Asset](HDRP-Asset.md):
-- In the HDRP Asset’s Inspector window, navigate to the __Material__ section and enable the __Subsurface Scattering__ checkbox.
-- When you enable the __Subsurface Scattering__ checkbox, HDRP displays the __High Quality__ option. You can Enable the checkbox to increase the sample count and reduce the amount of visual noise the blur pass can cause by undersampling. Note that this is around two and a half times more resource intensive than the default quality.
-- Within the __HDRP Asset__, locate the __Default Frame Settings__. Under the __Lighting__ section, enable __Subsurface Scattering__ and __Transmission__.
+1. In the HDRP Asset’s Inspector window, go to the __Material__ section and enable the __Subsurface Scattering__ checkbox.
+2. When you enable the __Subsurface Scattering__ checkbox, HDRP displays the __High Quality__ option. You can Enable this option to increase the sample count and reduce the amount of visual noise the blur pass can cause by under sampling. Note that this is around two and a half times more resource intensive than the default quality.
+3. Go to **Edit > Project Settings > HDRP Default Settings** and, in the **Default Frame Settings** section, under the __Lighting__ subsection, enable __Subsurface Scattering__ and __Transmission__.
-HDRP stores most subsurface scattering settings in a [Diffusion Profile Settings](Diffusion-Profile.html) Asset. The __Diffusion Profile List Asset__ contains a set of 15 Diffusion Profiles you can edit and later assign to your Materials.
+HDRP stores most subsurface scattering settings in a [Diffusion Profile](Diffusion-Profile.md). HDRP supports up to 15 custom Diffusion Profiles in view at the same time, but you can override which Diffusion Profiles HDRP uses and thus use as many Diffusion Profiles as you want throughout your project. To do this, use the [Diffusion Profile Override](Override-Diffusion-Profile.md) in the [Volume](Volumes.md) system. This [override](Volume-Components.md) lets you specify 15 custom Diffusion Profiles which HDRP can use for a Camera within the override's Volume.
-To create a Diffusion Profile Asset, navigate to __Assets > Create > Rendering > Diffusion Profile Settings__. To use it, open your HDRP Asset and assign the new Diffusion Profile Asset to the __Diffusion Profile List__ property.
+For information on how to create and use a Diffusion Profile, see the [Diffusion Profile documentation](Diffusion-Profile.md)
## Adding Subsurface Scattering to your Material
@@ -27,6 +27,6 @@ For the __Subsurface Scattering__ material type, uncheck the __Transmission__ ch
### Customizing Subsurface Scattering behavior
-When you select __Subsurface Scattering__ or __Translucent__ from the __Material Type__ drop-down, Unity exposes several new properties in the Material UI. For information on how to use these properties to customize the behavior of the subsurface scattering effect, see the [Material Type documentation](Material-Type.html).
+When you select __Subsurface Scattering__ or __Translucent__ from the __Material Type__ drop-down, Unity exposes several new properties in the Material UI. For information on how to use these properties to customize the behavior of the subsurface scattering effect, see the [Material Type documentation](Material-Type.md).
You can learn more about HDRP’s implementation in our [Efficient Screen-Space Subsurface Scattering](http://advances.realtimerendering.com/s2018/Efficient%20screen%20space%20subsurface%20scattering%20Siggraph%202018.pdf) presentation.
diff --git a/com.unity.render-pipelines.high-definition/Documentation~/Volumetric-Lighting.md b/com.unity.render-pipelines.high-definition/Documentation~/Volumetric-Lighting.md
index bdf941ed394..f327f6ebe43 100644
--- a/com.unity.render-pipelines.high-definition/Documentation~/Volumetric-Lighting.md
+++ b/com.unity.render-pipelines.high-definition/Documentation~/Volumetric-Lighting.md
@@ -4,14 +4,12 @@ The High Definition Render Pipeline (HDRP) includes a volumetric lighting system
## Enabling Volumetric Lighting
-To toggle and customize Volumetric Lighting in an [HDRP Asset](HDRP-Asset.html):
+To enable and customize Volumetric Lighting in an [HDRP Asset](HDRP-Asset.md):
-1. Open an HDRP Asset in your Unity Project and view it in the Inspector. Enable the **Volumetrics** checkbox in the **Lighting** section to enable Volumetric Lighting.
- 
-2. If you want to increase the resolution of the volumetrics, enable the **High Quality** checkbox. Volumetric lighting is an expensive effect, and this option can potentially increase the cost of volumetric lighting by up to eight times.
-3. In the **Default Frame Settings** section, under the **Lighting** subsection, make sure you enable **Fog** and **Volumetric** if they are not already.
- 
-4. If you want to enable reprojection support, check **Reprojection**. This option improves the lighting quality in the Scene by taking previous frames into account when calculating the lighting for the current frame. Currently, this option is not compatible with dynamic lights, so you may encounter ghosting artifacts behind moving Lights. Additionally, using high values for **Global Anisotropy** in the [Fog](Override-Fog.html) Volume override may cause flickering Shadows.
+1. Select an HDRP Asset in your Unity Project and view it in the Inspector. In the **Lighting** section, enable the **Volumetrics** checkbox.
+2. If you want to increase the resolution of the volumetrics, enable the **High Quality** checkbox. Volumetric lighting is a resource intensive effect and this option can potentially increase the resource intensity by up to eight times.
+3. Go to **Edit > Project Settings > HDRP Default Settings** and, in the **Default Frame Settings** section, under the **Lighting** subsection, make sure you enable **Fog** and **Volumetrics** if they are not already.
+4. Still in **Default Frame Settings**, if you want to enable reprojection support, enable **Reprojection**. This option improves the lighting quality in the Scene by taking previous frames into account when calculating the lighting for the current frame. Currently, this option is not compatible with dynamic lights, so you may encounter ghosting artifacts behind moving Lights. Additionally, using high values for **Anisotropy** in the [Fog](Override-Fog.md) Volume override may cause flickering Shadows.
## Notes
Volumetric fog does not work for Cameras that use oblique projection matrices. If you want a Camera to render volumetric fog, do not assign an off-axis projection to it.
\ No newline at end of file
diff --git a/com.unity.render-pipelines.high-definition/Editor/AssetProcessors/PhysicalMaterial3DsMaxPreprocessor.cs b/com.unity.render-pipelines.high-definition/Editor/AssetProcessors/PhysicalMaterial3DsMaxPreprocessor.cs
index 6a9aba49cfb..ab3c8643b60 100644
--- a/com.unity.render-pipelines.high-definition/Editor/AssetProcessors/PhysicalMaterial3DsMaxPreprocessor.cs
+++ b/com.unity.render-pipelines.high-definition/Editor/AssetProcessors/PhysicalMaterial3DsMaxPreprocessor.cs
@@ -1,6 +1,7 @@
using UnityEditor.AssetImporters;
using UnityEngine;
using UnityEditor.Experimental.AssetImporters;
+using UnityEngine.Rendering;
namespace UnityEditor.Rendering.HighDefinition
{
@@ -29,12 +30,141 @@ static bool Is3DsMaxPhysicalMaterial(MaterialDescription description)
return classIdA == 1030429932 && classIdB == -559038463;
}
+ static bool Is3DsMaxSimplifiedPhysicalMaterial(MaterialDescription description)
+ {
+ float classIdA;
+ float classIdB;
+ float useGlossiness;
+ description.TryGetProperty("ClassIDa", out classIdA);
+ description.TryGetProperty("ClassIDb", out classIdB);
+ description.TryGetProperty("useGlossiness", out useGlossiness);
+
+ return classIdA == -804315648 && classIdB == -1099438848 && useGlossiness == 2.0f;
+ }
+
public void OnPreprocessMaterialDescription(MaterialDescription description, Material material, AnimationClip[] clips)
{
if (Is3DsMaxPhysicalMaterial(description))
{
CreateFrom3DsPhysicalMaterial(description, material, clips);
}
+ else if (Is3DsMaxSimplifiedPhysicalMaterial(description))
+ {
+ CreateFrom3DsSimplifiedPhysicalMaterial(description, material, clips);
+ }
+ }
+
+ void CreateFrom3DsSimplifiedPhysicalMaterial(MaterialDescription description, Material material, AnimationClip[] clips)
+ {
+ float floatProperty;
+ Vector4 vectorProperty;
+ TexturePropertyDescription textureProperty;
+
+ description.TryGetProperty("basecolor", out vectorProperty);
+ bool hasTransparencyScalar = vectorProperty.w != 1.0f;
+ var hasTransparencyMap = description.TryGetProperty("opacity_map", out textureProperty);
+ bool isTransparent = hasTransparencyMap | hasTransparencyScalar;
+
+
+ Shader shader;
+ if (isTransparent)
+ shader = GraphicsSettings.currentRenderPipeline.autodeskInteractiveTransparentShader;
+ else
+ shader = GraphicsSettings.currentRenderPipeline.autodeskInteractiveShader;
+
+ if (shader == null)
+ return;
+
+ material.shader = shader;
+ foreach (var clip in clips)
+ {
+ clip.ClearCurves();
+ }
+
+ if (hasTransparencyMap)
+ {
+ material.SetFloat("_UseOpacityMap", 1.0f);
+ material.SetTexture("_OpacityMap", textureProperty.texture);
+ }
+ else if (hasTransparencyScalar)
+ {
+ material.SetFloat("_Opacity", vectorProperty.w);
+ }
+
+ if (description.TryGetProperty("basecolor", out vectorProperty))
+ material.SetColor("_Color", vectorProperty);
+
+ if (description.TryGetProperty("emit_color", out vectorProperty))
+ material.SetColor("_EmissionColor", vectorProperty);
+
+ if (description.TryGetProperty("roughness", out floatProperty))
+ material.SetFloat("_Glossiness", floatProperty);
+
+ if (description.TryGetProperty("metalness", out floatProperty))
+ material.SetFloat("_Metallic", floatProperty);
+
+ if (description.TryGetProperty("base_color_map", out textureProperty))
+ {
+ material.SetTexture("_MainTex", textureProperty.texture);
+ material.SetFloat("_UseColorMap", 1.0f);
+ material.SetColor("_UvTiling", new Vector4(textureProperty.scale.x, textureProperty.scale.y, 0.0f, 0.0f));
+ material.SetColor("_UvOffset", new Vector4(textureProperty.offset.x, textureProperty.offset.y, 0.0f, 0.0f));
+ }
+ else
+ {
+ material.SetFloat("_UseColorMap", 0.0f);
+ }
+
+ if (description.TryGetProperty("norm_map", out textureProperty))
+ {
+ material.SetTexture("_BumpMap", textureProperty.texture);
+ material.SetFloat("_UseNormalMap", 1.0f);
+ }
+ else
+ {
+ material.SetFloat("_UseNormalMap", 0.0f);
+ }
+
+ if (description.TryGetProperty("roughness_map", out textureProperty))
+ {
+ material.SetTexture("_SpecGlossMap", textureProperty.texture);
+ material.SetFloat("_UseRoughnessMap", 1.0f);
+ }
+ else
+ {
+ material.SetFloat("_UseRoughnessMap", 0.0f);
+ }
+
+ if (description.TryGetProperty("metalness_map", out textureProperty))
+ {
+ material.SetTexture("_MetallicGlossMap", textureProperty.texture);
+ material.SetFloat("_UseMetallicMap", 1.0f);
+ }
+ else
+ {
+ material.SetFloat("_UseMetallicMap", 0.0f);
+ }
+
+ if (description.TryGetProperty("emit_color_map", out textureProperty))
+ {
+ material.SetTexture("_EmissionMap", textureProperty.texture);
+ material.SetFloat("_UseEmissiveMap", 1.0f);
+ }
+ else
+ {
+ material.SetFloat("_UseEmissiveMap", 0.0f);
+ }
+
+ if (description.TryGetProperty("ao_map", out textureProperty))
+ {
+ var tex = AssetDatabase.LoadAssetAtPath(textureProperty.relativePath);
+ material.SetTexture("AoMap", tex);
+ material.SetFloat("UseAoMap", 1.0f);
+ }
+ else
+ {
+ material.SetFloat("UseAoMap", 0.0f);
+ }
}
void CreateFrom3DsPhysicalMaterial(MaterialDescription description, Material material, AnimationClip[] clips)
diff --git a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs
index 6750807b7e8..d3a6f3083de 100644
--- a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs
+++ b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs
@@ -2068,9 +2068,8 @@ ref _cullingResults
// Render XR mirror view once all render requests have been completed
if (i == 0 && renderRequest.hdCamera.camera.cameraType == CameraType.Game && renderRequest.hdCamera.camera.targetTexture == null)
- {
- HDAdditionalCameraData acd;
- if (renderRequest.hdCamera.camera.TryGetComponent(out acd) && acd.xrRendering)
+ {
+ if (HDUtils.TryGetAdditionalCameraDataOrDefault(renderRequest.hdCamera.camera).xrRendering)
{
m_XRSystem.RenderMirrorView(cmd);
}
diff --git a/com.unity.render-pipelines.universal/CHANGELOG.md b/com.unity.render-pipelines.universal/CHANGELOG.md
index f432ec58a28..1c9f323a13a 100644
--- a/com.unity.render-pipelines.universal/CHANGELOG.md
+++ b/com.unity.render-pipelines.universal/CHANGELOG.md
@@ -29,6 +29,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- Added additional steps to the 2D Renderer setup page for quality and platform settings.
- Added option to disable XR autotests on test settings.
- Added option to enable/disable Adaptive Performance when it's package is available.
+- Added support for 3DsMax's 2021 Simplified Physical Material from FBX files in the Model Importer.
### Changed
diff --git a/com.unity.render-pipelines.universal/Editor/AssetPostProcessors/PhysicalMaterial3DsMaxPreprocessor.cs b/com.unity.render-pipelines.universal/Editor/AssetPostProcessors/PhysicalMaterial3DsMaxPreprocessor.cs
index c6b5dfd1668..2f2b9028419 100644
--- a/com.unity.render-pipelines.universal/Editor/AssetPostProcessors/PhysicalMaterial3DsMaxPreprocessor.cs
+++ b/com.unity.render-pipelines.universal/Editor/AssetPostProcessors/PhysicalMaterial3DsMaxPreprocessor.cs
@@ -1,6 +1,7 @@
using UnityEditor.AssetImporters;
using UnityEditor.Experimental;
using UnityEngine;
+using UnityEngine.Rendering;
using UnityEditor.Experimental.AssetImporters;
namespace UnityEditor.Rendering.Universal
@@ -31,12 +32,141 @@ static bool Is3DsMaxPhysicalMaterial(MaterialDescription description)
return classIdA == 1030429932 && classIdB == -559038463;
}
+ static bool Is3DsMaxSimplifiedPhysicalMaterial(MaterialDescription description)
+ {
+ float classIdA;
+ float classIdB;
+ float useGlossiness;
+ description.TryGetProperty("ClassIDa", out classIdA);
+ description.TryGetProperty("ClassIDb", out classIdB);
+ description.TryGetProperty("useGlossiness", out useGlossiness);
+
+ return classIdA == -804315648 && classIdB == -1099438848 && useGlossiness == 2.0f;
+ }
+
public void OnPreprocessMaterialDescription(MaterialDescription description, Material material, AnimationClip[] clips)
{
if (Is3DsMaxPhysicalMaterial(description))
{
CreateFrom3DsPhysicalMaterial(description, material, clips);
}
+ else if (Is3DsMaxSimplifiedPhysicalMaterial(description))
+ {
+ CreateFrom3DsSimplifiedPhysicalMaterial(description, material, clips);
+ }
+ }
+
+ void CreateFrom3DsSimplifiedPhysicalMaterial(MaterialDescription description, Material material, AnimationClip[] clips)
+ {
+ float floatProperty;
+ Vector4 vectorProperty;
+ TexturePropertyDescription textureProperty;
+
+ description.TryGetProperty("basecolor", out vectorProperty);
+ bool hasTransparencyScalar = vectorProperty.w !=1.0f;
+ var hasTransparencyMap = description.TryGetProperty("opacity_map", out textureProperty);
+ bool isTransparent = hasTransparencyMap | hasTransparencyScalar;
+
+
+ Shader shader;
+ if (isTransparent)
+ shader = GraphicsSettings.currentRenderPipeline.autodeskInteractiveTransparentShader;
+ else
+ shader = GraphicsSettings.currentRenderPipeline.autodeskInteractiveShader;
+
+ if (shader == null)
+ return;
+
+ material.shader = shader;
+ foreach (var clip in clips)
+ {
+ clip.ClearCurves();
+ }
+
+ if (hasTransparencyMap)
+ {
+ material.SetFloat("_UseOpacityMap", 1.0f);
+ material.SetTexture("_OpacityMap", textureProperty.texture);
+ }
+ else if (hasTransparencyScalar)
+ {
+ material.SetFloat("_Opacity", vectorProperty.w);
+ }
+
+ if (description.TryGetProperty("basecolor", out vectorProperty))
+ material.SetColor("_Color", vectorProperty);
+
+ if (description.TryGetProperty("emit_color", out vectorProperty))
+ material.SetColor("_EmissionColor", vectorProperty);
+
+ if (description.TryGetProperty("roughness", out floatProperty))
+ material.SetFloat("_Glossiness", floatProperty);
+
+ if (description.TryGetProperty("metalness", out floatProperty))
+ material.SetFloat("_Metallic", floatProperty);
+
+ if (description.TryGetProperty("base_color_map", out textureProperty))
+ {
+ material.SetTexture("_MainTex", textureProperty.texture);
+ material.SetFloat("_UseColorMap", 1.0f);
+ material.SetColor("_UvTiling", new Vector4(textureProperty.scale.x, textureProperty.scale.y, 0.0f, 0.0f));
+ material.SetColor("_UvOffset", new Vector4(textureProperty.offset.x, textureProperty.offset.y, 0.0f, 0.0f));
+ }
+ else
+ {
+ material.SetFloat("_UseColorMap", 0.0f);
+ }
+
+ if (description.TryGetProperty("norm_map", out textureProperty))
+ {
+ material.SetTexture("_BumpMap", textureProperty.texture);
+ material.SetFloat("_UseNormalMap", 1.0f);
+ }
+ else
+ {
+ material.SetFloat("_UseNormalMap", 0.0f);
+ }
+
+ if (description.TryGetProperty("roughness_map", out textureProperty))
+ {
+ material.SetTexture("_SpecGlossMap", textureProperty.texture);
+ material.SetFloat("_UseRoughnessMap", 1.0f);
+ }
+ else
+ {
+ material.SetFloat("_UseRoughnessMap", 0.0f);
+ }
+
+ if (description.TryGetProperty("metalness_map", out textureProperty))
+ {
+ material.SetTexture("_MetallicGlossMap", textureProperty.texture);
+ material.SetFloat("_UseMetallicMap", 1.0f);
+ }
+ else
+ {
+ material.SetFloat("_UseMetallicMap", 0.0f);
+ }
+
+ if (description.TryGetProperty("emit_color_map", out textureProperty))
+ {
+ material.SetTexture("_EmissionMap", textureProperty.texture);
+ material.SetFloat("_UseEmissiveMap", 1.0f);
+ }
+ else
+ {
+ material.SetFloat("_UseEmissiveMap", 0.0f);
+ }
+
+ if (description.TryGetProperty("ao_map", out textureProperty))
+ {
+ var tex = AssetDatabase.LoadAssetAtPath(textureProperty.relativePath);
+ material.SetTexture("AoMap", tex);
+ material.SetFloat("UseAoMap", 1.0f);
+ }
+ else
+ {
+ material.SetFloat("UseAoMap", 0.0f);
+ }
}
void CreateFrom3DsPhysicalMaterial(MaterialDescription description, Material material, AnimationClip[] clips)