You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			80 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
		
		
			
		
	
	
			80 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
| 
								 
											1 year ago
										 
									 | 
							
								//======= Copyright (c) Valve Corporation, All rights reserved. ===============
							 | 
						||
| 
								 | 
							
								// UNITY_SHADER_NO_UPGRADE
							 | 
						||
| 
								 | 
							
								Shader "Custom/SteamVR_SphericalProjection" {
							 | 
						||
| 
								 | 
							
									Properties {
							 | 
						||
| 
								 | 
							
										_MainTex ("Base (RGB)", 2D) = "white" {}
							 | 
						||
| 
								 | 
							
										_N ("N (normal of plane)", Vector) = (0,0,0,0)
							 | 
						||
| 
								 | 
							
										_Phi0 ("Phi0", Float) = 0
							 | 
						||
| 
								 | 
							
										_Phi1 ("Phi1", Float) = 1
							 | 
						||
| 
								 | 
							
										_Theta0 ("Theta0", Float) = 0
							 | 
						||
| 
								 | 
							
										_Theta1 ("Theta1", Float) = 1
							 | 
						||
| 
								 | 
							
										_UAxis ("uAxis", Vector) = (0,0,0,0)
							 | 
						||
| 
								 | 
							
										_VAxis ("vAxis", Vector) = (0,0,0,0)
							 | 
						||
| 
								 | 
							
										_UOrigin ("uOrigin", Vector) = (0,0,0,0)
							 | 
						||
| 
								 | 
							
										_VOrigin ("vOrigin", Vector) = (0,0,0,0)
							 | 
						||
| 
								 | 
							
										_UScale ("uScale", Float) = 1
							 | 
						||
| 
								 | 
							
										_VScale ("vScale", Float) = 1
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									CGINCLUDE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									#include "UnityCG.cginc"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									sampler2D _MainTex;
							 | 
						||
| 
								 | 
							
									float4 _N;
							 | 
						||
| 
								 | 
							
									float _Phi0, _Phi1, _Theta0, _Theta1;
							 | 
						||
| 
								 | 
							
									float4 _UAxis, _VAxis;
							 | 
						||
| 
								 | 
							
									float4 _UOrigin, _VOrigin;
							 | 
						||
| 
								 | 
							
									float _UScale, _VScale;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									struct v2f {
							 | 
						||
| 
								 | 
							
										float4 pos : SV_POSITION;
							 | 
						||
| 
								 | 
							
										float2 tex : TEXCOORD0;
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									v2f vert(appdata_base v) {
							 | 
						||
| 
								 | 
							
										v2f o;
							 | 
						||
| 
								 | 
							
								#if UNITY_VERSION >= 540
							 | 
						||
| 
								 | 
							
										o.pos = UnityObjectToClipPos(v.vertex);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
										o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
										o.tex = float2(
							 | 
						||
| 
								 | 
							
											lerp(_Phi0, _Phi1, v.texcoord.x),
							 | 
						||
| 
								 | 
							
											lerp(_Theta0, _Theta1, v.texcoord.y));
							 | 
						||
| 
								 | 
							
										return o;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									float3 cartesian(float phi, float theta)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										float sinTheta = sin(theta);
							 | 
						||
| 
								 | 
							
										return float3(
							 | 
						||
| 
								 | 
							
											sinTheta * sin(phi),
							 | 
						||
| 
								 | 
							
											cos(theta),
							 | 
						||
| 
								 | 
							
											sinTheta * cos(phi));
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									float4 frag(v2f i) : COLOR {
							 | 
						||
| 
								 | 
							
										float3 V = cartesian(i.tex.x, i.tex.y);
							 | 
						||
| 
								 | 
							
										float3 P = V / dot(V, _N.xyz); // intersection point on plane
							 | 
						||
| 
								 | 
							
										float2 uv = float2(
							 | 
						||
| 
								 | 
							
											dot(P - _UOrigin.xyz, _UAxis.xyz) * _UScale,
							 | 
						||
| 
								 | 
							
											dot(P - _VOrigin.xyz, _VAxis.xyz) * _VScale);
							 | 
						||
| 
								 | 
							
										return tex2D(_MainTex, uv);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									ENDCG
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									SubShader {
							 | 
						||
| 
								 | 
							
										Pass {
							 | 
						||
| 
								 | 
							
											ZTest Always Cull Off ZWrite Off
							 | 
						||
| 
								 | 
							
											Fog { Mode Off }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											CGPROGRAM
							 | 
						||
| 
								 | 
							
											#pragma vertex vert
							 | 
						||
| 
								 | 
							
											#pragma fragment frag
							 | 
						||
| 
								 | 
							
											ENDCG
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |