Skip to content

Commit 05a7518

Browse files
committed
Add a flag to make StereoRenderer unlit by scene lighting
* add a flag make StereoRenderer unlit by scene lighting - this is done by replacing Unity Surface shaders with Unlit shaders - also add a method StereoRenderer.SetUnlit() to set this flag during runtime * modify relative examples to demostrate this feature
1 parent 74a2afe commit 05a7518

File tree

8 files changed

+1747
-1582
lines changed

8 files changed

+1747
-1582
lines changed

Assets/HTC.UnityPlugin/StereoRendering/Examples/3. PortalDoor/PortalExample.unity

Lines changed: 1572 additions & 1570 deletions
Large diffs are not rendered by default.

Assets/HTC.UnityPlugin/StereoRendering/Examples/4. RuntimeCreation/Scripts/CreateStereoRenderer.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//========= Copyright 2016-2017, HTC Corporation. All rights reserved. ===========
1+
//========= Copyright 2016-2018, HTC Corporation. All rights reserved. ===========
22

33
using UnityEngine;
44
using HTC.UnityPlugin.StereoRendering;
@@ -14,6 +14,7 @@ void Update ()
1414
if (r == null && Input.GetKeyDown(KeyCode.Space))
1515
{
1616
StereoRenderer stereoRenderer = target.AddComponent<StereoRenderer>();
17+
stereoRenderer.SetUnlit(true);
1718

1819
stereoRenderer.anchorPos = new Vector3(-0.22f, 0.0f, -2.39f);
1920
stereoRenderer.anchorEuler = new Vector3(0, 180.0f, 0);
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
//========= Copyright 2016-2018, HTC Corporation. All rights reserved. ===========
2+
3+
Shader "Custom/StereoRenderShader-SingleTexture-Unlit"
4+
{
5+
Properties
6+
{
7+
_MainTexture("Eye Texture", 2D) = "white" {}
8+
}
9+
10+
SubShader
11+
{
12+
Tags{ "RenderType" = "Opaque" }
13+
14+
Pass
15+
{
16+
CGPROGRAM
17+
#pragma vertex vert
18+
#pragma fragment frag
19+
#pragma multi_compile_fog
20+
21+
#include "UnityCG.cginc"
22+
23+
struct appdata
24+
{
25+
float4 vertex : POSITION;
26+
float2 uv : TEXCOORD0;
27+
};
28+
29+
struct v2f
30+
{
31+
float4 vertex : SV_POSITION;
32+
float4 screenPos : TEXCOORD1;
33+
};
34+
35+
sampler2D _MainTexture;
36+
37+
v2f vert(appdata v)
38+
{
39+
v2f o;
40+
o.vertex = UnityObjectToClipPos(v.vertex);
41+
o.screenPos = ComputeScreenPos(o.vertex);
42+
return o;
43+
}
44+
45+
fixed4 frag(v2f i) : SV_Target
46+
{
47+
float2 screenUV = i.screenPos.xy / i.screenPos.w;
48+
fixed4 color = tex2D(_MainTexture, screenUV);
49+
return color;
50+
}
51+
52+
ENDCG
53+
}
54+
}
55+
}

Assets/HTC.UnityPlugin/StereoRendering/Resources/Shader/StereoRenderShader-SingleTexture-Unlit.shader.meta

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
//========= Copyright 2016-2018, HTC Corporation. All rights reserved. ===========
2+
3+
Shader "Custom/StereoRenderShader-Unlit"
4+
{
5+
Properties
6+
{
7+
_LeftEyeTexture("Left Eye Texture", 2D) = "white" {}
8+
_RightEyeTexture("Right Eye Texture", 2D) = "white" {}
9+
}
10+
11+
SubShader
12+
{
13+
Tags { "RenderType"="Opaque" }
14+
15+
Pass
16+
{
17+
CGPROGRAM
18+
#pragma vertex vert
19+
#pragma fragment frag
20+
#pragma multi_compile_fog
21+
22+
#include "UnityCG.cginc"
23+
24+
struct appdata
25+
{
26+
float4 vertex : POSITION;
27+
float2 uv : TEXCOORD0;
28+
};
29+
30+
struct v2f
31+
{
32+
float4 vertex : SV_POSITION;
33+
float4 screenPos : TEXCOORD1;
34+
};
35+
36+
sampler2D _LeftEyeTexture;
37+
sampler2D _RightEyeTexture;
38+
39+
v2f vert (appdata v)
40+
{
41+
v2f o;
42+
o.vertex = UnityObjectToClipPos(v.vertex);
43+
o.screenPos = ComputeScreenPos(o.vertex);
44+
return o;
45+
}
46+
47+
fixed4 frag (v2f i) : SV_Target
48+
{
49+
float2 screenUV = i.screenPos.xy / i.screenPos.w;
50+
51+
#if UNITY_SINGLE_PASS_STEREO
52+
float4 scaleOffset = unity_StereoScaleOffset[unity_StereoEyeIndex];
53+
screenUV = (screenUV - scaleOffset.zw) / scaleOffset.xy;
54+
#endif
55+
56+
fixed4 color = float4(0, 0, 0, 0);
57+
if (unity_StereoEyeIndex == 0)
58+
{
59+
color = tex2D(_LeftEyeTexture, screenUV);
60+
}
61+
else
62+
{
63+
color = tex2D(_RightEyeTexture, screenUV);
64+
}
65+
66+
return color;
67+
}
68+
ENDCG
69+
}
70+
}
71+
}

Assets/HTC.UnityPlugin/StereoRendering/Resources/Shader/StereoRenderShader-Unlit.shader.meta

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/HTC.UnityPlugin/StereoRendering/Scripts/Editor/StereoRendererEditor.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class StereoRendererEditor : Editor
1212
private SerializedProperty stereoCameraEyeProp;
1313
private SerializedProperty anchorTransformProp;
1414
private SerializedProperty canvasOriginProp;
15+
private SerializedProperty isUnlitProp;
1516
private SerializedProperty shouldRenderProp;
1617
private SerializedProperty textureResProp;
1718
private SerializedProperty useScissorProp;
@@ -33,6 +34,7 @@ public void OnEnable()
3334
stereoCameraEyeProp = serializedObject.FindProperty("stereoCameraEye");
3435
anchorTransformProp = serializedObject.FindProperty("anchorTransform");
3536
canvasOriginProp = serializedObject.FindProperty("canvasOrigin");
37+
isUnlitProp = serializedObject.FindProperty("isUnlit");
3638
shouldRenderProp = serializedObject.FindProperty("shouldRender");
3739
textureResProp = serializedObject.FindProperty("textureResolutionScale");
3840
useScissorProp = serializedObject.FindProperty("useScissor");
@@ -81,6 +83,9 @@ public override void OnInspectorGUI()
8183
// create a horizontal line to seperate things
8284
EditorGUILayout.TextArea("", GUI.skin.horizontalSlider);
8385

86+
// get "isUnlit" flag value
87+
EditorGUILayout.PropertyField(isUnlitProp);
88+
8489
// get "shouldRender" flag value
8590
EditorGUILayout.PropertyField(shouldRenderProp);
8691

Assets/HTC.UnityPlugin/StereoRendering/Scripts/StereoRenderer.cs

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,11 @@ public Vector3 anchorUp
153153
// flags
154154
private bool canvasVisible = false;
155155
public bool shouldRender = true;
156+
public bool useObliqueClip = true;
157+
public bool useScissor = true;
158+
159+
[SerializeField]
160+
private bool isUnlit = false;
156161

157162
// camera rig for stereo rendering, which is on the object this component attached to
158163
public GameObject stereoCameraHead = null;
@@ -175,10 +180,6 @@ public Vector3 anchorUp
175180
public string ignoreLayerName = "StereoRender_Ignore";
176181
private int ignoreLayerNumber = -1;
177182

178-
// optimization flags
179-
public bool useObliqueClip = true;
180-
public bool useScissor = true;
181-
182183
// other params
183184
public float reflectionOffset = 0.05f;
184185
private Rect fullViewport = new Rect(0, 0, 1, 1);
@@ -302,7 +303,15 @@ private void SwapStereoShader()
302303

303304
if (StereoRenderDevice.IsNotUnityNativeSupport(StereoRenderManager.Instance.hmdType))
304305
{
305-
renderer.materials[i].shader = Shader.Find("Custom/StereoRenderShader-SingleTexture");
306+
if (isUnlit)
307+
renderer.materials[i].shader = Shader.Find("Custom/StereoRenderShader-SingleTexture-Unlit");
308+
else
309+
renderer.materials[i].shader = Shader.Find("Custom/StereoRenderShader-SingleTexture");
310+
}
311+
else
312+
{
313+
if (isUnlit)
314+
renderer.materials[i].shader = Shader.Find("Custom/StereoRenderShader-Unlit");
306315
}
307316

308317
break;
@@ -313,14 +322,12 @@ private void SwapStereoShader()
313322
if (i == materialList.Length)
314323
{
315324
renderer.sharedMaterial = (Material)Resources.Load("StereoRenderMaterial", typeof(Material));
316-
317325
if (StereoRenderDevice.IsNotUnityNativeSupport(StereoRenderManager.Instance.hmdType))
318326
{
319-
renderer.materials[0].shader = Shader.Find("Custom/StereoRenderShader-SingleTexture");
320-
}
321-
else
322-
{
323-
renderer.materials[0].shader = Shader.Find("Custom/StereoRenderShader");
327+
if (isUnlit)
328+
renderer.materials[i].shader = Shader.Find("Custom/StereoRenderShader-SingleTexture-Unlit");
329+
else
330+
renderer.materials[i].shader = Shader.Find("Custom/StereoRenderShader-SingleTexture");
324331
}
325332

326333
stereoMaterial = renderer.materials[0];
@@ -725,6 +732,12 @@ public bool IsEditing()
725732
return Application.isEditor && !Application.isPlaying;
726733
}
727734

735+
public void SetUnlit(bool value)
736+
{
737+
isUnlit = value;
738+
SwapStereoShader();
739+
}
740+
728741
#if UNITY_EDITOR
729742
private bool LayerInjection(string layerName)
730743
{

0 commit comments

Comments
 (0)