[Unity] How to create a "Portal Shifting" shader - Shader source code

Shader "Unlit/PortalShader" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag // make fog work #pragma multi_compile_fog #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; UNITY_FOG_COORDS(1) float4 vertex : SV_POSITION; float4 screenPos : TEXCOORD1; }; sampler2D _MainTex; float4 _MainTex_ST; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); UNITY_TRANSFER_FOG(o,o.vertex); o.screenPos = ComputeScreenPos(o.vertex); return o; } fixed4 frag (v2f i) : SV_Target { //Use screen coordinate as UV float2 uv = i.screenPos.xy / i.screenPos.w; // sample the texture fixed4 col = tex2D(_MainTex, uv); // apply fog UNITY_APPLY_FOG(i.fogCoord, col); return col; } ENDCG } } }
Hi, fellow Game Devs!

Here is the shader source code of our tutorial on how to create a "Portal Shifting" shader.
https://www.youtube.com/watch?v=1gtXuJkKD2A

More tutorials on: -> https://goo.gl/HtSras <-

One way to improve this shader would be using a mask to give it soft borders.
(Masking will certainly be the subject of an upcoming tutorial, stay tunedl)

Feel free to give us your feedback to help us improve the upcoming tuts!

1 Response

(Psssst. Post the Unity project to Github. Much nicer way to distribute your tutorial examples.)

Write a comment

You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.