Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
bf4c3cd
Initial Commit
ChuksOk Jun 9, 2022
957d3cc
ran out of ideas
ChuksOk Jun 10, 2022
111a268
Magnifier Render Pass/Feature
ChuksOk Jun 10, 2022
f0450c1
Scene Fix
ChuksOk Jun 14, 2022
06b5a9e
Magnifier Test Fresh Scene
ChuksOk Jul 6, 2022
9ff62ea
test
ChuksOk Jul 6, 2022
fdc5b6c
Magnifier test shader
ChuksOk Jul 14, 2022
48e2519
Deletions
ChuksOk Jul 15, 2022
449cc61
scene update
ChuksOk Jul 27, 2022
3486185
Found a way to render transparent objects behind the magnifying quad,…
ChuksOk Aug 16, 2022
13044f0
new changes
ChuksOk Aug 17, 2022
e497128
Wip
Cameron-Micka Aug 18, 2022
4650d1c
Fixing "nose" artifact.
Cameron-Micka Aug 18, 2022
e8a98e6
Change to bilinear.
Cameron-Micka Aug 18, 2022
76e7135
Pulling Camron's branch
ChuksOk Aug 26, 2022
11be83c
Redundant file clean up
ChuksOk Sep 1, 2022
a9151d0
More Deletions/Material name change
ChuksOk Sep 1, 2022
a986cb2
Update .gitignore
ChuksOk Sep 1, 2022
ad7f5d0
Update .gitignore
ChuksOk Sep 1, 2022
d0bb80e
more deletion
ChuksOk Sep 1, 2022
14a8e55
Reverting changed files to main
ChuksOk Sep 2, 2022
e4ec28a
test
ChuksOk Sep 6, 2022
c9be3ae
test
ChuksOk Sep 6, 2022
f282257
Merge branch 'magnifier' of https://github.com/ChuksOk/MixedReality-G…
ChuksOk Sep 6, 2022
e8b356f
Merge branch 'main' of https://github.com/microsoft/MixedReality-Grap…
Cameron-Micka Sep 6, 2022
7f32f0f
Removing .vs files
Cameron-Micka Sep 6, 2022
896c558
Reverted ignore file
Cameron-Micka Sep 6, 2022
5489f2c
Reverting xr settings
Cameron-Micka Sep 6, 2022
ffc99a7
unnecessary file
ChuksOk Sep 7, 2022
7d33c45
unnecessary files
ChuksOk Sep 7, 2022
884132b
.
ChuksOk Sep 7, 2022
e1968fb
.
ChuksOk Sep 7, 2022
3cf66e9
Merge branch 'magnifier' of https://github.com/ChuksOk/MixedReality-G…
ChuksOk Sep 7, 2022
117d936
Scene Adjustments
ChuksOk Sep 14, 2022
97d08e9
test
ChuksOk Sep 14, 2022
1077be4
test
ChuksOk Sep 14, 2022
65995ba
test
ChuksOk Sep 14, 2022
e631878
test
ChuksOk Sep 14, 2022
b835b11
Last Draft PR push
ChuksOk Sep 22, 2022
5f7e114
Magnification no longer visible
ChuksOk Oct 19, 2022
da51c19
Added the magnifier to the package manager
ChuksOk Oct 19, 2022
8dfb52c
Scene fix
ChuksOk Oct 20, 2022
dba149b
scene fix
ChuksOk Oct 20, 2022
1b5dfd3
scene fix
ChuksOk Oct 20, 2022
6f93e67
Scene fixes
ChuksOk Oct 20, 2022
21f204b
Magnifier bug fix, added a second renderer for the magnifier scene an…
ChuksOk Oct 27, 2022
fe6b22e
fix
ChuksOk Nov 10, 2022
c850764
fix
ChuksOk Nov 10, 2022
fb2692f
fixes
ChuksOk Nov 10, 2022
8ebe567
fixed
ChuksOk Nov 10, 2022
80e7a1d
fix
ChuksOk Nov 10, 2022
9ffba26
Public API Summaries and sight adjustments
ChuksOk Nov 29, 2022
4bba1db
.
ChuksOk Nov 30, 2022
018c3ec
check
ChuksOk Dec 1, 2022
36e95a7
Added programmatic render feature creation
ChuksOk Dec 12, 2022
afbfd76
.
ChuksOk Dec 13, 2022
c8fcd3d
clean up and update to the magnifier manager script
ChuksOk Dec 13, 2022
3a91dda
Minor adjustments to the magnifier manager setup.
Cameron-Micka Dec 13, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,18 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: c353a8f1e58cf884584123914fe63cd5, type: 3}
m_Name: Oculus Settings
m_EditorClassIdentifier:
m_StereoRenderingModeDesktop: 1
m_StereoRenderingModeAndroid: 2
m_StereoRenderingModeDesktop: 0
m_StereoRenderingModeAndroid: 0
SharedDepthBuffer: 1
DashSupport: 1
V2Signing: 1
LowOverheadMode: 1
ProtectedContext: 0
FocusAware: 1
LowOverheadMode: 0
OptimizeBufferDiscards: 1
PhaseSync: 1
PhaseSync: 0
SymmetricProjection: 1
SubsampledLayout: 0
LateLatching: 0
LateLatchingDebug: 0
SpaceWarp: 0
TargetQuest: 1
TargetQuest2: 1
SystemSplashScreen: {fileID: 0}
2 changes: 1 addition & 1 deletion GraphicsToolsUnityProject/ProjectSettings/TagManager.asset
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ TagManager:
- UI
- PostBlur0
- PostBlur1
-
- AfterTransparent
-
-
-
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

#if GT_USE_URP
using System.Reflection;
using UnityEngine;
using UnityEngine.Experimental.Rendering.Universal;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;

namespace Microsoft.MixedReality.GraphicsTools
{
/// <summary>
/// Manages creating and updating render features necessary for the magnification effect on the scriptable render pipeline that in use .
/// </summary>
public class MagnifierManager : MonoBehaviour
{
[SerializeField]
private DrawFullscreenFeature.Settings drawFullscreenSettings = new DrawFullscreenFeature.Settings()
{
renderPassEvent = RenderPassEvent.AfterRenderingTransparents,
SourceType = BufferType.CameraColor,
DestinationType = BufferType.Custom,
SourceTextureId = string.Empty,
DestinationTextureId = "MagnifierTexture",
};

[SerializeField, Header("Render Objects Settings")]
private RenderObjects.RenderObjectsSettings renderObjectsSettings = new RenderObjects.RenderObjectsSettings()
{
Event = RenderPassEvent.AfterRenderingTransparents,
filterSettings = new RenderObjects.FilterSettings()
{
RenderQueueType = RenderQueueType.Transparent
}
};

[Tooltip("Which renderer to use in the UniversalRenderPipelineAsset.")]
[SerializeField]
private int rendererIndex = 0;

private DrawFullscreenFeature magnifierFeature;
private ScriptableRendererFeature renderTransparent;
private bool initialized = false;

#if UNITY_2021_2_OR_NEWER
private UniversalRendererData rendererData = null;
#else
private ForwardRendererData rendererData = null;
#endif
private LayerMask previousOpaqueLayerMask;
private LayerMask previousTransparentLayerMask;

private void OnEnable()
{
if (!initialized)
{
InitializeRendererData();

if (rendererData != null)
{
CreateRendererFeatures();
initialized = true;
}
}
}

private void OnDisable()
{
if (initialized)
{
if (magnifierFeature != null)
{
rendererData.rendererFeatures.Remove(magnifierFeature);
}

if (renderTransparent != null)
{
rendererData.rendererFeatures.Remove(renderTransparent);
}

// Reset the layer masks.
rendererData.opaqueLayerMask = previousOpaqueLayerMask;
rendererData.transparentLayerMask = previousTransparentLayerMask;

rendererData.SetDirty();

initialized = false;
}
}

/// <summary>
/// Method <c>InitializeRendererData</c> gets the selected scriptable render pipeline thats currently in use.
/// </summary>
private void InitializeRendererData()
{
var pipeline = ((UniversalRenderPipelineAsset)GraphicsSettings.currentRenderPipeline);

if (pipeline == null)
{
Debug.LogWarning("Universal Render Pipeline not found");
}
else
{
FieldInfo propertyInfo = pipeline.GetType().GetField("m_RendererDataList", BindingFlags.Instance | BindingFlags.NonPublic);
#if UNITY_2021_2_OR_NEWER
rendererData = ((ScriptableRendererData[])propertyInfo?.GetValue(pipeline))?[rendererIndex] as UniversalRendererData;
#else
rendererData = ((ScriptableRendererData[])propertyInfo?.GetValue(pipeline))?[rendererIndex] as ForwardRendererData;
#endif
}
}

/// <summary>
/// Method <c>CreateRendererFeatures</c> creates renderer features and adds them to a list of features to be deployed on the scriptable render pipeline.
/// </summary>
private void CreateRendererFeatures()
{
magnifierFeature = CreateMagnifierFullsreenFeature("Magnifier Draw Fullscreen Feature", drawFullscreenSettings);
rendererData.rendererFeatures.Add(magnifierFeature);
renderTransparent = CreateMagnifierRenderObjectsFeature("Magnifier Render Objects", renderObjectsSettings);
rendererData.rendererFeatures.Add(renderTransparent);

// Don't render the layers rendered by the RenderObjectsFeature
previousOpaqueLayerMask = rendererData.opaqueLayerMask;
previousTransparentLayerMask = rendererData.transparentLayerMask;
rendererData.opaqueLayerMask &= ~renderObjectsSettings.filterSettings.LayerMask;
rendererData.transparentLayerMask &= ~renderObjectsSettings.filterSettings.LayerMask;

rendererData.SetDirty();
}

/// <summary>
/// Method <c>CreateMagnifierFullsreenFeature</c> creates an instance of the draw fullscreen renderer feature.
/// </summary>
private DrawFullscreenFeature CreateMagnifierFullsreenFeature(string name, DrawFullscreenFeature.Settings settings)
{
DrawFullscreenFeature feature = ScriptableObject.CreateInstance<DrawFullscreenFeature>();
feature.name = name;
feature.settings = settings;

return feature;
}

/// <summary>
/// Method <c>CreateRenderObjectsFeature</c> creates an instance of the render objects renderer feature.
/// </summary>
private ScriptableRendererFeature CreateMagnifierRenderObjectsFeature(string name, RenderObjects.RenderObjectsSettings settings)
{
RenderObjects feature = ScriptableObject.CreateInstance<RenderObjects>();
feature.name = name;
feature.settings = settings;

return feature;
}
}
}
#endif // GT_USE_URP

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

Shader "Graphics Tools/Magnifier"
{
Properties
{
Magnification("Magnification", Float) = 0.5
[ShowAsVector2] Center("Center", Vector) = (0.5,0.5,0,0)
}
SubShader
{
PackageRequirements
{
"com.unity.render-pipelines.universal": "10.6.0"
}

Tags
{
"RenderType" = "Transparent"
"Queue" = "Transparent"
}

Pass
{
ZTest Always
Cull Off
ZWrite Off

HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag

#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

struct appdata
{
float4 vertex : POSITION;

UNITY_VERTEX_INPUT_INSTANCE_ID
};

struct v2f //vertex to fragment
{
float4 vertex : SV_POSITION;

UNITY_VERTEX_OUTPUT_STEREO
};

half Magnification;
float2 Center;

TEXTURE2D_X(MagnifierTexture);
SAMPLER(samplerMagnifierTexture);

float2 zoomIn(float2 uv, float zoomAmount, float2 zoomCenter)
{
return ((uv - zoomCenter) * zoomAmount) + zoomCenter;
}

v2f vert(appdata v)
{
v2f o = (v2f)0;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);

o.vertex = TransformObjectToHClip(v.vertex.xyz);

return o;
}

half4 frag(v2f i) : SV_Target
{
float2 normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(i.vertex);

float2 normalizedScreenSpaceUVStereo = UnityStereoTransformScreenSpaceTex(normalizedScreenSpaceUV);

float2 zoomedUv = zoomIn(normalizedScreenSpaceUVStereo, Magnification, Center);

float4 output = SAMPLE_TEXTURE2D_X(MagnifierTexture, samplerMagnifierTexture, zoomedUv);

return output;
}
ENDHLSL
}
}

Fallback "Hidden/InternalErrorShader"
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading