From 3364c19adf96d0ee7aeeb3cf3fa1d5c1f6177254 Mon Sep 17 00:00:00 2001 From: hecomi Date: Sat, 26 Nov 2016 16:14:00 +0900 Subject: [PATCH] add displacement shader. --- .../Examples/Prefabs/Monitor Plane.prefab | Bin 7980 -> 7964 bytes .../Prefabs/Monitor Plane.prefab.meta | 4 +- .../Prefabs/Monitor Unity Plane.prefab | Bin 0 -> 7980 bytes .../Prefabs/Monitor Unity Plane.prefab.meta | 8 + .../Examples/Scenes/Displacement.unity | Bin 0 -> 14432 bytes .../Examples/Scenes/Displacement.unity.meta | 8 + .../uDD_Screen_Unlit_Displacement.mat | Bin 0 -> 4664 bytes .../uDD_Screen_Unlit_Displacement.mat.meta | 8 + .../Models/uDD_Board.fbx.meta | 4 +- .../uDesktopDuplication/Models/uDD_Plane.fbx | Bin 0 -> 35872 bytes .../Models/uDD_Plane.fbx.meta | 87 +++++++++ Assets/uDesktopDuplication/Scripts/Texture.cs | 1 + .../Shaders/uDD_Common.cginc | 35 +++- .../Shaders/uDD_Unlit.shader | 1 + .../Shaders/uDD_Unlit_BlackMask.shader | 1 + .../Shaders/uDD_Unlit_Displacement.shader | 179 ++++++++++++++++++ .../uDD_Unlit_Displacement.shader.meta | 9 + .../Shaders/uDD_Unlit_Transparent.shader | 1 + ProjectSettings/QualitySettings.asset | Bin 5004 -> 4736 bytes 19 files changed, 340 insertions(+), 6 deletions(-) create mode 100644 Assets/uDesktopDuplication/Examples/Prefabs/Monitor Unity Plane.prefab create mode 100644 Assets/uDesktopDuplication/Examples/Prefabs/Monitor Unity Plane.prefab.meta create mode 100644 Assets/uDesktopDuplication/Examples/Scenes/Displacement.unity create mode 100644 Assets/uDesktopDuplication/Examples/Scenes/Displacement.unity.meta create mode 100644 Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit_Displacement.mat create mode 100644 Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit_Displacement.mat.meta create mode 100644 Assets/uDesktopDuplication/Models/uDD_Plane.fbx create mode 100644 Assets/uDesktopDuplication/Models/uDD_Plane.fbx.meta create mode 100644 Assets/uDesktopDuplication/Shaders/uDD_Unlit_Displacement.shader create mode 100644 Assets/uDesktopDuplication/Shaders/uDD_Unlit_Displacement.shader.meta diff --git a/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Plane.prefab b/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Plane.prefab index 6d2132fe5e4c6b48c23a912a54f57d1d1006f1d8..d89b17eab8adf862fdc75e55cf6a3bc886ed0dbc 100644 GIT binary patch delta 373 zcmZ2uH^)wzfk8%>fk9q|fq{V^$PNI~45oS}dPZqR8>LyL6*P8TDs1d!X0QN?uLNR7 zF#i7^NHOG`csgyegR}(8vWK7FOpcM3uxY8EZxCi%%J2fH%mk=H5sV?KZ8DzSPG_3R zsKCU)kN_0_4+KR(8U*ez*ba~xFuTP;93TKWDtTKV1I!MX{V+b*P8Qh|ahMk& z+F)eESAiy|TP+k=1WTDA7 L!bUX2)k8 delta 385 zcmbPZx5iGIfkDQHfk9q}fq{V^$W8##45oS}dWLC+8>LyL6|$-<*&BPA87zR}D}k61 zjQ{@!QVc#xWm1zJq$OCs9T&5j93w4Zv#R)eL6~hR!waA?6QBx3Fovl1co+U5ooOng z0uuv60#N)v5EKDv5cp+r(qr-l>1tyLmw|x~#sJbenMp;7MV0!cd6^}Z3Mr{+iKRIu z3Pq{K`K3k4sl}81WVBd7&YWB$W8wmG(_d3Qu+1PdU@j7e8VGV~^0q(*n9VR(!T4a8 ze33~Jhk5)9i|Kx-UIrk0a=xrI)0RV%17&0;2gry__L1d*Sbj#fM-Zlm1*qYnI*^!b ZD60;Uo+76(*+N!i@(DQ&h`<*)4FJ||VcP%z diff --git a/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Plane.prefab.meta b/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Plane.prefab.meta index 2a70831..4821977 100644 --- a/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Plane.prefab.meta +++ b/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Plane.prefab.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 42d6b6dbae38a384e882c2c907915139 -timeCreated: 1478889784 +guid: 57d4a6e606848364c9880f2adec16d90 +timeCreated: 1480074774 licenseType: Pro NativeFormatImporter: userData: diff --git a/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Unity Plane.prefab b/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Unity Plane.prefab new file mode 100644 index 0000000000000000000000000000000000000000..5721fbf8045387ab416253b034e31afb72d250a4 GIT binary patch literal 7980 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 literal 0 HcmV?d00001 diff --git a/Assets/uDesktopDuplication/Models/uDD_Plane.fbx.meta b/Assets/uDesktopDuplication/Models/uDD_Plane.fbx.meta new file mode 100644 index 0000000..52c6cad --- /dev/null +++ b/Assets/uDesktopDuplication/Models/uDD_Plane.fbx.meta @@ -0,0 +1,87 @@ +fileFormatVersion: 2 +guid: f30f6cfd6aa37554ca886424cada7cbb +timeCreated: 1480072865 +licenseType: Pro +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: //RootNode + 100002: uDD_Plane_MeshPart0 + 100004: uDD_Plane_MeshPart1 + 400000: //RootNode + 400002: uDD_Plane_MeshPart0 + 400004: uDD_Plane_MeshPart1 + 2300000: //RootNode + 2300002: uDD_Plane_MeshPart0 + 2300004: uDD_Plane_MeshPart1 + 3300000: //RootNode + 3300002: uDD_Plane_MeshPart0 + 3300004: uDD_Plane_MeshPart1 + 4300000: uDD_Plane + 4300002: uDD_Plane_MeshPart0 + 4300004: uDD_Plane_MeshPart1 + 9500000: //RootNode + materials: + importMaterials: 0 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 0.1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 0 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 2 + importAnimation: 0 + copyAvatar: 0 + humanDescription: + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/uDesktopDuplication/Scripts/Texture.cs b/Assets/uDesktopDuplication/Scripts/Texture.cs index 32858ff..b5ea645 100644 --- a/Assets/uDesktopDuplication/Scripts/Texture.cs +++ b/Assets/uDesktopDuplication/Scripts/Texture.cs @@ -16,6 +16,7 @@ public class Texture : MonoBehaviour if (monitor_ != null) { material = GetComponent().material; // clone material.mainTexture = monitor_.texture; + material.SetTexture("_DispTex", monitor_.texture); material.SetFloat("_Width", transform.localScale.x); } } diff --git a/Assets/uDesktopDuplication/Shaders/uDD_Common.cginc b/Assets/uDesktopDuplication/Shaders/uDD_Common.cginc index 61a56c8..40ecd2a 100644 --- a/Assets/uDesktopDuplication/Shaders/uDD_Common.cginc +++ b/Assets/uDesktopDuplication/Shaders/uDD_Common.cginc @@ -63,17 +63,22 @@ inline void uddConvertToLinearIfNeeded(inout fixed3 rgb) } } -inline fixed4 uddGetScreenTexture(float2 uv) +inline fixed4 uddGetTexture(sampler2D tex, float2 uv) { uv = uddInvertUV(uv); #ifdef USE_CLIP uv = uddClipUV(uv); #endif - fixed4 c = tex2D(_MainTex, uddRotateUV(uv)); + fixed4 c = tex2D(tex, uddRotateUV(uv)); uddConvertToLinearIfNeeded(c.rgb); return c; } +inline fixed4 uddGetScreenTexture(float2 uv) +{ + return uddGetTexture(_MainTex, uv); +} + inline void uddBendVertex(inout float4 v, half radius, half width, half thickness) { #ifdef BEND_ON @@ -97,4 +102,30 @@ inline void uddBendVertex(inout float4 v, half radius, half width, half thicknes #endif } +inline float3 uddRotateY(float3 n, float angle) +{ + float c = cos(angle); + float s = sin(angle); + return float3(c * n.x - s * n.z, n.y, s * n.x + c * n.z); +} + +inline float3 uddRotateX(float3 n, float angle) +{ + float c = cos(angle); + float s = sin(angle); + return float3(n.x, c * n.y + s * n.z, -s * n.y + c * n.z); +} + +inline void uddBendNormal(float4 x, inout float3 n, half radius, half width) +{ +#ifdef BEND_ON + half angle = width * x / radius; + #ifdef _FORWARD_Z + n = uddRotateY(n, -angle); + #elif _FORWARD_Y + n = uddRotateX(n, -angle); + #endif +#endif +} + #endif \ No newline at end of file diff --git a/Assets/uDesktopDuplication/Shaders/uDD_Unlit.shader b/Assets/uDesktopDuplication/Shaders/uDD_Unlit.shader index 6c3becc..f2f7751 100644 --- a/Assets/uDesktopDuplication/Shaders/uDD_Unlit.shader +++ b/Assets/uDesktopDuplication/Shaders/uDD_Unlit.shader @@ -10,6 +10,7 @@ Properties [Toggle(BEND_ON)] _Bend("Use Bend", Int) = 0 [PowerSlider(10.0)] _Radius("Bend Radius", Range(1, 100)) = 30 [PowerSlider(10.0)] _Thickness("Thickness", Range(0.01, 10)) = 1 + _Width("Width", Range(0.0, 10.0)) = 1.0 [KeywordEnum(Off, Front, Back)] _Cull("Culling", Int) = 2 } diff --git a/Assets/uDesktopDuplication/Shaders/uDD_Unlit_BlackMask.shader b/Assets/uDesktopDuplication/Shaders/uDD_Unlit_BlackMask.shader index 46b1f99..069e16a 100644 --- a/Assets/uDesktopDuplication/Shaders/uDD_Unlit_BlackMask.shader +++ b/Assets/uDesktopDuplication/Shaders/uDD_Unlit_BlackMask.shader @@ -11,6 +11,7 @@ Properties [Toggle(BEND_ON)] _Bend("Use Bend", Int) = 0 [PowerSlider(10.0)] _Radius("Bend Radius", Range(1, 100)) = 30 [PowerSlider(10.0)] _Thickness("Thickness", Range(0.01, 10)) = 1 + _Width("Width", Range(0.0, 10.0)) = 1.0 [KeywordEnum(Off, Front, Back)] _Cull("Culling", Int) = 2 } diff --git a/Assets/uDesktopDuplication/Shaders/uDD_Unlit_Displacement.shader b/Assets/uDesktopDuplication/Shaders/uDD_Unlit_Displacement.shader new file mode 100644 index 0000000..d73ab95 --- /dev/null +++ b/Assets/uDesktopDuplication/Shaders/uDD_Unlit_Displacement.shader @@ -0,0 +1,179 @@ +Shader "uDesktopDuplication/Unlit_Displacement" +{ + +Properties +{ + _Color ("Color", Color) = (1, 1, 1, 1) + _MainTex ("Texture", 2D) = "white" {} + _CursorTex ("Cursor Texture", 2D) = "white" {} + [KeywordEnum(Y, Z)] _Forward("Mesh Forward Direction", Int) = 0 + [Toggle(BEND_ON)] _Bend("Use Bend", Int) = 0 + [PowerSlider(10.0)] _Radius("Bend Radius", Range(1, 100)) = 30 + _Width ("Width", Range(0.0, 10.0)) = 1.92 + [PowerSlider(10.0)] _Thickness("Thickness", Range(0.01, 10)) = 1 + [KeywordEnum(Off, Front, Back)] _Cull("Culling", Int) = 2 + _DispTex ("Displacement Map", 2D) = "black" {} + _Displacement("Displacement Factor", Range(0, 5.0)) = 1 + _TessMinDist("Tessellation Min Distance", Range(0.1, 100.0)) = 1.0 + _TessMaxDist("Tessellation Max Distance", Range(0.1, 100.0)) = 5.0 + _TessFactor("Tessellation Factor", Range(0.1, 50.0)) = 10.0 +} + +SubShader +{ + +Tags { "RenderType"="Opaque" } + +Cull [_Cull] + +CGINCLUDE + +#include "./uDD_Common.cginc" +#include "Tessellation.cginc" + +half _Radius; +half _Width; +half _Thickness; +Texture2D _DispTex; +SamplerState sampler_DispTex; +half _Displacement; +half _TessMinDist; +half _TessMaxDist; +half _TessFactor; + +struct VsInput +{ + float3 vertex : POSITION; + float3 normal : NORMAL; + float2 texcoord : TEXCOORD0; +}; + +struct HsInput +{ + float4 f4Position : POS; + float3 f3Normal : NORMAL; + float2 f2TexCoord : TEXCOORD; +}; + +struct HsControlPointOutput +{ + float3 f3Position : POS; + float3 f3Normal : NORMAL; + float2 f2TexCoord : TEXCOORD; +}; + +struct HsConstantOutput +{ + float fTessFactor[3] : SV_TessFactor; + float fInsideTessFactor : SV_InsideTessFactor; +}; + +struct DsOutput +{ + float4 f4Position : SV_Position; + float2 f2TexCoord : TEXCOORD0; +}; + +HsInput vert(VsInput i) +{ + HsInput o; + float4 v = float4(i.vertex, 1.0); + uddBendNormal(v.x, i.normal, _Radius, _Width); + uddBendVertex(v, _Radius, _Width, _Thickness); + o.f4Position = v; + o.f3Normal = i.normal; + o.f2TexCoord = i.texcoord; + return o; +} + +[domain("tri")] +[partitioning("integer")] +[outputtopology("triangle_cw")] +[patchconstantfunc("hullConst")] +[outputcontrolpoints(3)] +HsControlPointOutput hull(InputPatch i, uint id : SV_OutputControlPointID) +{ + HsControlPointOutput o = (HsControlPointOutput)0; + o.f3Position = i[id].f4Position.xyz; + o.f3Normal = i[id].f3Normal; + o.f2TexCoord = i[id].f2TexCoord; + return o; +} + +HsConstantOutput hullConst(InputPatch i) +{ + HsConstantOutput o = (HsConstantOutput)0; + + float4 p0 = i[0].f4Position; + float4 p1 = i[1].f4Position; + float4 p2 = i[2].f4Position; + float4 tessFactor = UnityDistanceBasedTess(p0, p1, p2, _TessMinDist, _TessMaxDist, _TessFactor); + + o.fTessFactor[0] = tessFactor.x; + o.fTessFactor[1] = tessFactor.y; + o.fTessFactor[2] = tessFactor.z; + o.fInsideTessFactor = tessFactor.w; + + return o; +} + +[domain("tri")] +DsOutput domain( + HsConstantOutput hsConst, + const OutputPatch i, + float3 bary : SV_DomainLocation) +{ + DsOutput o = (DsOutput)0; + + float3 f3Position = + bary.x * i[0].f3Position + + bary.y * i[1].f3Position + + bary.z * i[2].f3Position; + + float3 f3Normal = normalize( + bary.x * i[0].f3Normal + + bary.y * i[1].f3Normal + + bary.z * i[2].f3Normal); + + o.f2TexCoord = + bary.x * i[0].f2TexCoord + + bary.y * i[1].f2TexCoord + + bary.z * i[2].f2TexCoord; + + float disp = length(_DispTex.SampleLevel(sampler_DispTex, o.f2TexCoord, 0)) * _Displacement; + f3Position.xyz += f3Normal * disp; + + o.f4Position = mul(UNITY_MATRIX_MVP, float4(f3Position.xyz, 1.0)); + + return o; +} + + +fixed4 frag(DsOutput i) : SV_Target +{ + return uddGetScreenTexture(i.f2TexCoord); +} + +ENDCG + +Pass +{ + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma hull hull + #pragma domain domain + #pragma multi_compile ___ INVERT_X + #pragma multi_compile ___ INVERT_Y + #pragma multi_compile ___ ROTATE90 ROTATE180 ROTATE270 + #pragma multi_compile ___ USE_CLIP + #pragma multi_compile ___ BEND_ON + #pragma multi_compile _FORWARD_Y _FORWARD_Z + ENDCG +} + +} + +Fallback "Unlit/Texture" + +} \ No newline at end of file diff --git a/Assets/uDesktopDuplication/Shaders/uDD_Unlit_Displacement.shader.meta b/Assets/uDesktopDuplication/Shaders/uDD_Unlit_Displacement.shader.meta new file mode 100644 index 0000000..29932c3 --- /dev/null +++ b/Assets/uDesktopDuplication/Shaders/uDD_Unlit_Displacement.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 05df46eb51b13c84eabbdf4c53cc8db7 +timeCreated: 1480072905 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/uDesktopDuplication/Shaders/uDD_Unlit_Transparent.shader b/Assets/uDesktopDuplication/Shaders/uDD_Unlit_Transparent.shader index cf2c96a..11a8449 100644 --- a/Assets/uDesktopDuplication/Shaders/uDD_Unlit_Transparent.shader +++ b/Assets/uDesktopDuplication/Shaders/uDD_Unlit_Transparent.shader @@ -10,6 +10,7 @@ Properties [Toggle(BEND_ON)] _Bend("Use Bend", Int) = 0 [PowerSlider(10.0)] _Radius("Bend Radius", Range(1, 100)) = 30 [PowerSlider(10.0)] _Thickness("Thickness", Range(0.01, 10)) = 1 + _Width("Width", Range(0.0, 10.0)) = 1.0 [KeywordEnum(Off, Front, Back)] _Cull("Culling", Int) = 2 } diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset index cc79ef5aeb5c161283cda4b2a0ca7c341bf82898..0e714bdb6238a05389aac751f3060d5a5513db5f 100644 GIT binary patch delta 64 zcmeBCZ%~zHU|7 z)vDYT`Ga=`;#sJ1Y~PKeL58GgVy3D~8Tt9ek1hohYp+G$Rn84x$}p|`+=Ro~tkh6F jC_9U@=;Tmyf