浏览代码
Merge branch 'StackLit2' of https://github.com/Unity-Technologies/ScriptableRenderPipeline into StackLit2
/main
Merge branch 'StackLit2' of https://github.com/Unity-Technologies/ScriptableRenderPipeline into StackLit2
/main
Oliver Schnabel
7 年前
当前提交
ecdbdcab
共有 67 个文件被更改,包括 1020 次插入 和 308 次删除
-
5com.unity.render-pipelines.core/CoreRP/Editor/ShaderGenerator/ShaderTypeGeneration.cs
-
2com.unity.render-pipelines.core/CoreRP/ShaderLibrary/Common.hlsl
-
5com.unity.render-pipelines.core/CoreRP/ShaderLibrary/CommonMaterial.hlsl
-
34com.unity.render-pipelines.high-definition/CHANGELOG.md
-
5com.unity.render-pipelines.high-definition/HDRP/Debug/ColorPickerDebug.cs
-
24com.unity.render-pipelines.high-definition/HDRP/Debug/DebugColorPicker.shader
-
33com.unity.render-pipelines.high-definition/HDRP/Debug/DebugDisplay.cs
-
1com.unity.render-pipelines.high-definition/HDRP/Debug/DebugViewMaterialGBuffer.shader
-
1com.unity.render-pipelines.high-definition/HDRP/Debug/DebugViewTiles.shader
-
1com.unity.render-pipelines.high-definition/HDRP/Debug/LightingDebug.cs
-
9com.unity.render-pipelines.high-definition/HDRP/Debug/LightingDebug.cs.hlsl
-
2com.unity.render-pipelines.high-definition/HDRP/Editor/Lighting/HDLightEditor.Styles.cs
-
18com.unity.render-pipelines.high-definition/HDRP/Editor/Lighting/Reflection/ReflectionMenuItem.cs
-
3com.unity.render-pipelines.high-definition/HDRP/Editor/Material/Decal/DecalProjectorComponentEditor.cs
-
21com.unity.render-pipelines.high-definition/HDRP/Editor/Material/Decal/DecalUI.cs
-
16com.unity.render-pipelines.high-definition/HDRP/Editor/Material/Lit/LitShaderPreprocessor.cs
-
21com.unity.render-pipelines.high-definition/HDRP/HDRenderPipelineAsset.asset
-
24com.unity.render-pipelines.high-definition/HDRP/Lighting/DeferredDirectionalShadow.compute
-
8com.unity.render-pipelines.high-definition/HDRP/Lighting/LightLoop/LightLoop.cs
-
4com.unity.render-pipelines.high-definition/HDRP/Material/Decal/DBufferManager.cs
-
14com.unity.render-pipelines.high-definition/HDRP/Material/Decal/Decal.cs
-
31com.unity.render-pipelines.high-definition/HDRP/Material/Decal/Decal.shader
-
35com.unity.render-pipelines.high-definition/HDRP/Material/Decal/DecalData.hlsl
-
9com.unity.render-pipelines.high-definition/HDRP/Material/Decal/DecalProjectorComponent.cs
-
73com.unity.render-pipelines.high-definition/HDRP/Material/Decal/DecalSystem.cs
-
9com.unity.render-pipelines.high-definition/HDRP/Material/Decal/DecalUtilities.hlsl
-
10com.unity.render-pipelines.high-definition/HDRP/Material/Decal/ShaderPass/DecalSharePass.hlsl
-
12com.unity.render-pipelines.high-definition/HDRP/Material/LayeredLit/LayeredLit.shader
-
12com.unity.render-pipelines.high-definition/HDRP/Material/LayeredLit/LayeredLitTessellation.shader
-
112com.unity.render-pipelines.high-definition/HDRP/Material/Lit/Lit.hlsl
-
12com.unity.render-pipelines.high-definition/HDRP/Material/Lit/Lit.shader
-
2com.unity.render-pipelines.high-definition/HDRP/Material/Lit/LitBuiltinData.hlsl
-
12com.unity.render-pipelines.high-definition/HDRP/Material/Lit/LitTessellation.shader
-
38com.unity.render-pipelines.high-definition/HDRP/Material/StackLit/StackLit.hlsl
-
4com.unity.render-pipelines.high-definition/HDRP/Material/StackLit/StackLit.shader
-
2com.unity.render-pipelines.high-definition/HDRP/Material/StackLit/StackLitData.hlsl
-
4com.unity.render-pipelines.high-definition/HDRP/Material/SubsurfaceScattering/SubsurfaceScattering.hlsl
-
2com.unity.render-pipelines.high-definition/HDRP/Material/Unlit/Unlit.hlsl
-
2com.unity.render-pipelines.high-definition/HDRP/Material/Unlit/Unlit.shader
-
106com.unity.render-pipelines.high-definition/HDRP/RenderPipeline/HDRenderPipeline.cs
-
13com.unity.render-pipelines.high-definition/HDRP/RenderPipeline/HDStringConstants.cs
-
3com.unity.render-pipelines.high-definition/HDRP/ShaderPass/ShaderPass.cs
-
3com.unity.render-pipelines.high-definition/HDRP/ShaderPass/ShaderPass.cs.hlsl
-
30com.unity.render-pipelines.high-definition/HDRP/ShaderPass/ShaderPassDBuffer.hlsl
-
15com.unity.render-pipelines.high-definition/HDRP/ShaderPass/ShaderPassDepthOnly.hlsl
-
2com.unity.render-pipelines.high-definition/HDRP/ShaderPass/ShaderPassForward.hlsl
-
2com.unity.render-pipelines.high-definition/HDRP/ShaderPass/ShaderPassForwardUnlit.hlsl
-
2com.unity.render-pipelines.high-definition/HDRP/ShaderPass/ShaderPassGBuffer.hlsl
-
2com.unity.render-pipelines.high-definition/HDRP/ShaderPass/ShaderPassLightTransport.hlsl
-
160com.unity.render-pipelines.lightweight/CHANGELOG.md
-
14com.unity.render-pipelines.lightweight/LWRP/Editor/ShaderGraph/lightweightPBRExtraPasses.template
-
11com.unity.render-pipelines.lightweight/LWRP/Editor/ShaderGraph/lightweightPBRForwardPass.template
-
14com.unity.render-pipelines.lightweight/LWRP/Editor/ShaderGraph/lightweightUnlitExtraPasses.template
-
11com.unity.render-pipelines.lightweight/LWRP/Editor/ShaderGraph/lightweightUnlitPass.template
-
2com.unity.render-pipelines.lightweight/LWRP/Shaders/Terrain/LightweightStandardTerrain.shader
-
6com.unity.render-pipelines.lightweight/LWRP/Shaders/Terrain/LightweightStandardTerrainBase.shader
-
82com.unity.shadergraph/Editor/Data/Nodes/Utility/Logic/IsFrontFaceNode.cs
-
5com.unity.shadergraph/Editor/Data/Util/PropertyCollector.cs
-
5com.unity.shadergraph/Editor/Data/Util/ShaderGenerator.cs
-
11CONTRIBUTING
-
21com.unity.render-pipelines.high-definition/HDRP/Debug/FalseColorDebug.cs
-
11com.unity.render-pipelines.high-definition/HDRP/Debug/FalseColorDebug.cs.meta
-
55com.unity.render-pipelines.high-definition/HDRP/Material/NormalBuffer.hlsl
-
9com.unity.render-pipelines.high-definition/HDRP/Material/NormalBuffer.hlsl.meta
-
81com.unity.render-pipelines.high-definition/HDRP/Material/NormalBufferManager.cs
-
11com.unity.render-pipelines.high-definition/HDRP/Material/NormalBufferManager.cs.meta
-
9issue_template.md
|
|||
# Changelog |
|||
All notable changes to this package will be documented in this file. |
|||
|
|||
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) |
|||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). |
|||
|
|||
## [Unreleased] |
|||
|
|||
## [2.0.1-preview] |
|||
|
|||
### Fixed |
|||
- VR Single Pass Instancing shadows |
|||
|
|||
## [2.0.0-preview] |
|||
|
|||
### Added |
|||
- Explicit render target load/store actions were added to improve tile utilization |
|||
- Camera opaque color can be requested on the pipeline asset. It can be accessed in the shader by defining a _CameraOpaqueTexture. This can be used as an alternative to GrabPass. |
|||
- Dynamic Batching can be enabled in the pipeline asset |
|||
- Pipeline now strips unused or invalid variants and passes based on selected pipeline capabilities in the asset. This reduces build and memory consuption on target. |
|||
- Shader stripping settings were added to pipeline asset |
|||
|
|||
### Changed |
|||
#### Pipeline |
|||
- Pipeline code is now more modular and extensible. A ForwardRenderer class is initialized by the pipeline with RenderingData and it's responsible for enqueueing and executing passes. In the future pluggable renderers will be supported. |
|||
- On mobile 1 directional light + up to 4 local lights (point or spot) are computed |
|||
- On other platforms 1 directional light + up to 8 local lights are computed |
|||
- Multiple shadow casting lights are supported. Currently only 1 directional + 4 spots light shadows. |
|||
#### Shading Framework |
|||
- Directional Lights are always considered a main light in shader. They have a fast shading path with no branching and no indexing. |
|||
- GetMainLight() is provided in shader to initialize Light struct with main light shading data. |
|||
- Directional lights have a dedicated shadowmap for performance reasons. Shadow coord always comes from interpolator. |
|||
- MainLigthRealtimeShadowAttenuation(float4 shadowCoord) is provided to compute main light realtime shadows. |
|||
- Spot and Point lights are always shaded in the light loop. Branching on uniform and indexing happens when shading them. |
|||
- GetLight(half index, float3 positionWS) is provided in shader to initialize Light struct for spot and point lights. |
|||
- Spot light shadows are baked into a single shadow atlas. |
|||
- Shadow coord for spot lights is always computed on fragment. |
|||
- Use LocalLightShadowAttenuation(int lightIndex, float3 positionWS) to comppute realtime shadows for spot lights. |
|||
|
|||
### Fixed |
|||
- Issue that was causing VR on Android to render black |
|||
- Camera viewport issues |
|||
- UWP build issues |
|||
- Prevent nested camera rendering in the pipeline |
|||
### Improvements |
|||
|
|||
### Added |
|||
|
|||
### Bugfixes |
|||
- Fixed SRP Shader library issue that was causing all constants to be highp in mobile |
|||
- Fixed shader error that prevented LWRP to build to UWP |
|||
- Fixed shader compilation errors in Linux due to case sensitive includes |
|||
- Fixed Rendering Texture flipping issue |
|||
- Fixed Standard Particles shader cutout and blending modes |
|||
- Fixed crash caused by using projectors |
|||
- Fixed issue that was causing Shadow Strength to not be computed on mobile |
|||
- Fixed Material Upgrader issue that caused editor to SoftLocks |
|||
- Fixed GI in Unlit shader |
|||
- Fixed null reference in the Unlit material shader GUI |
|||
|
|||
### Fixed |
|||
- SRP Shader library issue that was causing all constants to be highp in mobile |
|||
- shader error that prevented LWRP to build to UWP |
|||
- shader compilation errors in Linux due to case sensitive includes |
|||
- Rendering Texture flipping issue |
|||
- Standard Particles shader cutout and blending modes |
|||
- crash caused by using projectors |
|||
- issue that was causing Shadow Strength to not be computed on mobile |
|||
- Material Upgrader issue that caused editor to SoftLocks |
|||
- GI in Unlit shader |
|||
- Null reference in the Unlit material shader GUI |
|||
### Improvements |
|||
|
|||
### Changed |
|||
|
|||
### Bugfixes |
|||
- Fixed shadows on GLES 2.0 |
|||
- Fixed CPU performance regression in shadow rendering |
|||
- Fixed alpha clip shadow issues |
|||
- Fixed unmatched command buffer error message |
|||
- Fixed null reference exception caused by missing resource in LWRP |
|||
- Fixed issue that was causing Camera clear flags was being ignored in mobile |
|||
|
|||
### Fixed |
|||
- Shadows on GLES 2.0 |
|||
- CPU performance regression in shadow rendering |
|||
- Alpha clip shadow issues |
|||
- Unmatched command buffer error message |
|||
- Null reference exception caused by missing resource in LWRP |
|||
- Issue that was causing Camera clear flags was being ignored in mobile |
|||
|
|||
### Improvements |
|||
|
|||
### Added |
|||
- Shadowmap uses 16bit format instead of 32bit. |
|||
|
|||
### Changed |
|||
- Shadowmap uses 16bit format instead of 32bit. |
|||
### Bugfixes |
|||
- Fixed Subtractive Mode |
|||
### Fixed |
|||
- Subtractive Mode |
|||
|
|||
### Improvements |
|||
- Refactored lightweight standard shaders and shader library to improve ease of use. |
|||
|
|||
### Added |
|||
- HDR RT now uses what format is configured in Tier settings. |
|||
- Optimized tile LOAD op on mobile. |
|||
|
|||
### Changed |
|||
- HDR RT now uses what format is configured in Tier settings. |
|||
- Refactored lightweight standard shaders and shader library to improve ease of use. |
|||
- Optimized tile LOAD op on mobile. |
|||
|
|||
### Bugfixes |
|||
- Fixed realtime shadows on OpenGL |
|||
- Fixed shader compiler errors in GLES 2.0 |
|||
- Fixed issue sorting issues when BeforeTransparent custom fx was enabled. |
|||
- Fixed VR single pass rendering. |
|||
- Fixed viewport rendering issues when rendering to backbuffer. |
|||
- Fixed viewport rendering issues when rendering to with MSAA turned off. |
|||
- Fixed multi-camera rendering. |
|||
|
|||
### Fixed |
|||
- Realtime shadows on OpenGL |
|||
- Shader compiler errors in GLES 2.0 |
|||
- Issue sorting issues when BeforeTransparent custom fx was enabled. |
|||
- VR single pass rendering. |
|||
- Viewport rendering issues when rendering to backbuffer. |
|||
- Viewport rendering issues when rendering to with MSAA turned off. |
|||
- Multi-camera rendering. |
|||
### Improvements |
|||
- Shaders ported to the new SRP shader library. |
|||
- Constant Buffer Refactor to use new Batcher |
|||
|
|||
### Added |
|||
- UI Improvements (Rendering features not supported by LW are hidden) |
|||
|
|||
### Changed |
|||
- Shaders were ported to the new SRP shader library. |
|||
- Constant Buffer refactor to use new Batcher |
|||
- UI Improvements (Rendering features not supported by LW are hidden) |
|||
|
|||
### Bugfixes |
|||
|
|||
### Fixed |
|||
### Improvements |
|||
- Realtime shadow filtering was improved. |
|||
|
|||
### Added |
|||
### Bugfixes |
|||
### Changed |
|||
- Realtime shadow filtering was improved. |
|||
|
|||
### Fixed |
|||
|
|||
|
|||
|
|||
|
|||
|
|
|||
using UnityEngine; |
|||
using UnityEditor.Graphing; |
|||
|
|||
namespace UnityEditor.ShaderGraph |
|||
{ |
|||
[Title("Utility", "Logic", "Is Front Face")] |
|||
public class IsFrontFaceNode : AbstractMaterialNode, IGeneratesBodyCode, IMayRequireFaceSign |
|||
{ |
|||
public IsFrontFaceNode() |
|||
{ |
|||
name = "Is Front Face"; |
|||
UpdateNodeAfterDeserialization(); |
|||
} |
|||
|
|||
public override string documentationURL |
|||
{ |
|||
get { return "https://github.com/Unity-Technologies/ShaderGraph/wiki/Is-Front-Face-Node"; } |
|||
} |
|||
|
|||
public override bool hasPreview { get { return false; } } |
|||
|
|||
public const int OutputSlotId = 0; |
|||
private const string kOutputSlotName = "Out"; |
|||
|
|||
public override void UpdateNodeAfterDeserialization() |
|||
{ |
|||
AddSlot(new BooleanMaterialSlot(OutputSlotId, kOutputSlotName, kOutputSlotName, SlotType.Output, true, ShaderStageCapability.Fragment)); |
|||
RemoveSlotsNameNotMatching(new[] { OutputSlotId }); |
|||
} |
|||
|
|||
public void GenerateNodeCode(ShaderGenerator visitor, GenerationMode generationMode) |
|||
{ |
|||
visitor.AddShaderChunk(string.Format("{0} {1} = max(0, IN.{2});", precision, GetVariableNameForSlot(OutputSlotId), ShaderGeneratorNames.FaceSign), true); |
|||
} |
|||
|
|||
public bool RequiresFaceSign(ShaderStageCapability stageCapability = ShaderStageCapability.Fragment) |
|||
{ |
|||
return true; |
|||
} |
|||
} |
|||
} |
|||
using UnityEngine; |
|||
using UnityEditor.Graphing; |
|||
|
|||
namespace UnityEditor.ShaderGraph |
|||
{ |
|||
[Title("Utility", "Logic", "Is Front Face")] |
|||
public class IsFrontFaceNode : AbstractMaterialNode, IGeneratesBodyCode, IMayRequireFaceSign |
|||
{ |
|||
public IsFrontFaceNode() |
|||
{ |
|||
name = "Is Front Face"; |
|||
UpdateNodeAfterDeserialization(); |
|||
} |
|||
|
|||
public override string documentationURL |
|||
{ |
|||
get { return "https://github.com/Unity-Technologies/ShaderGraph/wiki/Is-Front-Face-Node"; } |
|||
} |
|||
|
|||
public override bool hasPreview { get { return false; } } |
|||
|
|||
public const int OutputSlotId = 0; |
|||
private const string kOutputSlotName = "Out"; |
|||
|
|||
public override void UpdateNodeAfterDeserialization() |
|||
{ |
|||
AddSlot(new BooleanMaterialSlot(OutputSlotId, kOutputSlotName, kOutputSlotName, SlotType.Output, true, ShaderStageCapability.Fragment)); |
|||
RemoveSlotsNameNotMatching(new[] { OutputSlotId }); |
|||
} |
|||
|
|||
public void GenerateNodeCode(ShaderGenerator visitor, GenerationMode generationMode) |
|||
{ |
|||
visitor.AddShaderChunk(string.Format("{0} {1} = max(0, IN.{2});", precision, GetVariableNameForSlot(OutputSlotId), ShaderGeneratorNames.FaceSign), true); |
|||
} |
|||
|
|||
public bool RequiresFaceSign(ShaderStageCapability stageCapability = ShaderStageCapability.Fragment) |
|||
{ |
|||
return true; |
|||
} |
|||
} |
|||
} |
|
|||
# PR review process |
|||
|
|||
- Any PR must have an entry in the corresponding changelog in a separate commit (CHANGELOG.MD file) |
|||
- Changelog follow these guidelines: https://github.com/Unity-Technologies/PostProcessing/blob/v2/CHANGELOG.md |
|||
- Each release branch (2018.1, 2018.2...) have a unique Changelog file |
|||
- when backporting, don't backport the changelog commit but update the branch changelog manually |
|||
- (optional) add reviewver from doc team |
|||
- Any more complex description of a change with future need to go in a release note file |
|||
|
|||
|
|||
|
|
|||
using System.Collections.Generic; |
|||
using UnityEngine; |
|||
using System; |
|||
|
|||
namespace UnityEngine.Experimental.Rendering.HDPipeline |
|||
{ |
|||
[Serializable] |
|||
public class FalseColorDebugSettings |
|||
{ |
|||
public bool falseColor = false; |
|||
|
|||
public float colorThreshold0 = 0.0f; |
|||
public float colorThreshold1 = 2.0f; |
|||
public float colorThreshold2 = 10.0f; |
|||
public float colorThreshold3 = 20.0f; |
|||
|
|||
public void OnValidate() |
|||
{ |
|||
} |
|||
} |
|||
} |
|
|||
fileFormatVersion: 2 |
|||
guid: 8fc313e69425fb44c8fa18af3761ec24 |
|||
MonoImporter: |
|||
externalObjects: {} |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
#include "CoreRP/ShaderLibrary/Packing.hlsl" |
|||
#include "CoreRP/ShaderLibrary/CommonMaterial.hlsl" |
|||
|
|||
// ---------------------------------------------------------------------------- |
|||
// Encoding/decoding normal buffer functions |
|||
// ---------------------------------------------------------------------------- |
|||
|
|||
struct NormalData |
|||
{ |
|||
float3 normalWS; |
|||
float perceptualRoughness; |
|||
}; |
|||
|
|||
#define NormalBufferType0 float4 // Must match GBufferType1 in deferred |
|||
|
|||
// SSSBuffer texture declaration |
|||
TEXTURE2D(_NormalBufferTexture0); |
|||
|
|||
void EncodeIntoNormalBuffer(NormalData normalData, uint2 positionSS, out NormalBufferType0 outNormalBuffer0) |
|||
{ |
|||
// The sign of the Z component of the normal MUST round-trip through the G-Buffer, otherwise |
|||
// the reconstruction of the tangent frame for anisotropic GGX creates a seam along the Z axis. |
|||
// The constant was eye-balled to not cause artifacts. |
|||
// TODO: find a proper solution. E.g. we could re-shuffle the faces of the octahedron |
|||
// s.t. the sign of the Z component round-trips. |
|||
const float seamThreshold = 1.0 / 1024.0; |
|||
normalData.normalWS.z = CopySign(max(seamThreshold, abs(normalData.normalWS.z)), normalData.normalWS.z); |
|||
|
|||
// RT1 - 8:8:8:8 |
|||
// Our tangent encoding is based on our normal. |
|||
float2 octNormalWS = PackNormalOctQuadEncode(normalData.normalWS); |
|||
float3 packNormalWS = PackFloat2To888(saturate(octNormalWS * 0.5 + 0.5)); |
|||
// We store perceptualRoughness instead of roughness because it is perceptually linear. |
|||
outNormalBuffer0 = float4(packNormalWS, normalData.perceptualRoughness); |
|||
} |
|||
|
|||
void DecodeFromNormalBuffer(float4 normalBuffer, uint2 positionSS, out NormalData normalData) |
|||
{ |
|||
float3 packNormalWS = normalBuffer.rgb; |
|||
float2 octNormalWS = Unpack888ToFloat2(packNormalWS); |
|||
normalData.normalWS = UnpackNormalOctQuadEncode(octNormalWS * 2.0 - 1.0); |
|||
normalData.perceptualRoughness = normalBuffer.a; |
|||
} |
|||
|
|||
void DecodeFromNormalBuffer(uint2 positionSS, out NormalData normalData) |
|||
{ |
|||
float4 normalBuffer = LOAD_TEXTURE2D(_NormalBufferTexture0, positionSS); |
|||
DecodeFromNormalBuffer(normalBuffer, positionSS, normalData); |
|||
} |
|||
|
|||
// OUTPUT_NORMAL_NORMALBUFFER start from SV_Target0 as it is used during depth prepass where there is no color buffer |
|||
#define OUTPUT_NORMALBUFFER(NAME) out NormalBufferType0 MERGE_NAME(NAME, 0) : SV_Target0 |
|||
#define ENCODE_INTO_NORMALBUFFER(SURFACE_DATA, UNPOSITIONSS, NAME) EncodeIntoNormalBuffer(ConvertSurfaceDataToNormalData(SURFACE_DATA), UNPOSITIONSS, MERGE_NAME(NAME, 0)) |
|||
|
|||
#define DECODE_FROM_NORMALBUFFER(UNPOSITIONSS, NORMAL_DATA) DecodeFromNormalBuffer(UNPOSITIONSS, NORMAL_DATA) |
|
|||
fileFormatVersion: 2 |
|||
guid: c575b09819842744aa411a49f5a26660 |
|||
ShaderImporter: |
|||
externalObjects: {} |
|||
defaultTextures: [] |
|||
nonModifiableTextures: [] |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
using UnityEngine.Rendering; |
|||
using System; |
|||
|
|||
namespace UnityEngine.Experimental.Rendering.HDPipeline |
|||
{ |
|||
public class NormalBufferManager |
|||
{ |
|||
// Currently we only support NormalBuffer with one buffer. If the shader code change, it may require to update the shader manager
|
|||
public const int k_MaxNormalBuffer = 1; |
|||
|
|||
public int normalBufferCount { get { return k_MaxNormalBuffer; } } |
|||
|
|||
RTHandleSystem.RTHandle[] m_ColorMRTs = new RTHandleSystem.RTHandle[k_MaxNormalBuffer]; |
|||
protected RenderTargetIdentifier[] m_RTIDs = new RenderTargetIdentifier[k_MaxNormalBuffer]; |
|||
bool[] m_ExternalBuffer = new bool[k_MaxNormalBuffer]; |
|||
|
|||
RTHandleSystem.RTHandle m_HTile; |
|||
|
|||
public NormalBufferManager() |
|||
{ |
|||
} |
|||
|
|||
public void InitNormalBuffers(GBufferManager gbufferManager, RenderPipelineSettings settings) |
|||
{ |
|||
if (settings.supportOnlyForward) |
|||
{ |
|||
// In case of full forward we must allocate the render target for normal buffer (or reuse one already existing)
|
|||
// TODO: Provide a way to reuse a render target
|
|||
m_ColorMRTs[0] = RTHandles.Alloc(Vector2.one, filterMode: FilterMode.Point, colorFormat: RenderTextureFormat.ARGB32, sRGB: false, name: "NormalBuffer"); |
|||
m_ExternalBuffer[0] = false; |
|||
} |
|||
else |
|||
{ |
|||
// In case of deferred, we must be in sync with NormalBuffer.hlsl and lit.hlsl files and setup the correct buffers
|
|||
m_ColorMRTs[0] = gbufferManager.GetBuffer(1); // Normal + Roughness is GBuffer(1)
|
|||
m_ExternalBuffer[0] = true; |
|||
} |
|||
} |
|||
|
|||
public RenderTargetIdentifier[] GetBuffersRTI() |
|||
{ |
|||
// nameID can change from one frame to another depending on the msaa flag so so we need to update this array to be sure it's up to date.
|
|||
for (int i = 0; i < normalBufferCount; ++i) |
|||
{ |
|||
m_RTIDs[i] = m_ColorMRTs[i].nameID; |
|||
} |
|||
|
|||
return m_RTIDs; |
|||
} |
|||
|
|||
public RTHandleSystem.RTHandle GetNormalBuffer(int index) |
|||
{ |
|||
Debug.Assert(index < normalBufferCount); |
|||
return m_ColorMRTs[index]; |
|||
} |
|||
|
|||
public void Build(HDRenderPipelineAsset hdAsset) |
|||
{ |
|||
} |
|||
|
|||
public void Cleanup() |
|||
{ |
|||
for (int i = 0; i < k_MaxNormalBuffer; ++i) |
|||
{ |
|||
if (!m_ExternalBuffer[i]) |
|||
{ |
|||
RTHandles.Release(m_ColorMRTs[i]); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void BindNormalBuffers(CommandBuffer cmd) |
|||
{ |
|||
// NormalBuffer can be access in forward shader, so need to set global texture
|
|||
for (int i = 0; i < normalBufferCount; ++i) |
|||
{ |
|||
cmd.SetGlobalTexture(HDShaderIDs._NormalBufferTexture[i], GetNormalBuffer(i)); |
|||
} |
|||
} |
|||
} |
|||
} |
|
|||
fileFormatVersion: 2 |
|||
guid: 37fd75386a4957c43b0e2d0311efe2c4 |
|||
MonoImporter: |
|||
externalObjects: {} |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
##### What happened? |
|||
|
|||
##### Which package (Shader graph, LW, HDRP, Core...)? |
|||
|
|||
##### Unity template or github source code? |
|||
|
|||
##### Which package version or branch (1.1.8-preview, 2.0.0-preview, 2018.1, 2018.1-experiment, 2108.2...)? |
|||
|
|||
##### Unity version, operating system, target platform (standalone windows, mac, iOS, PS4...)? |
撰写
预览
正在加载...
取消
保存
Reference in new issue