Dual mat-cap corrected technique

Dual mat-cap corrected technique

I was used screen space light texture technique (matcap or lightcap) since from 2006 in years.

And then my new stuff of new matcap technique (I called dual matcap technique) since by 2015 in years When I developed android mobile game in Korea.

Basically matcap technique is So famous tweak shader lighting technique for mobile games.

But I curious Could I use to dual side of matcap?

So here is results.

自2006年以來,我一直在使用屏幕空間光紋理技術(matcap或lightcap)。

然後我的新東西是新的matcap技術。

基本匹配的技術是用於手機遊戲的着名的調整着色器照明技術。

但我很好奇我可以使用matcap的雙面嗎?

所以這是結果。

Paraboloid意思就是數學上的拋物面公式。

https://en.wikipedia.org/wiki/Paraboloid

在這裏插入圖片描述
如圖所示,看上圖的凸面鏡和凹面鏡的話,更容易理解。

這樣的凸面拋物面用兩個,當做environment map或者irradiance map來使用。

有實時捕捉環境圖的方法和在手遊裏面能讓他快速運行而使用的pre compute的方法。

本章就講第二種方法pre compute based irradiance map和Specular Glossy filtering map。

還有關於實際shader 的 implementation,從構造要怎麼設計開始到製作爲止。

★ What is the dual parabolic environment map
(A View-Independent Parameterization for Environment Maps)
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

Result is here

在這裏插入圖片描述

Dual Matcap Preview Demo Clip here

Shader /*ase_name*/ "Leegoonz/ASETemplateShaders/ParabolicMatcap" /*end*/
{
	Properties
	{
		_FrontParaboloid ("_FrontParaboloid", 2D) = "white" { }
		_RearParaboloid ("_RearParaboloid", 2D) = "white" { }
		/*ase_props*/
		
	
	}
	
	SubShader
	{
		Tags { "RenderType"="Opaque" "LightMode" = "ForwardBase" /*ase_tags*/}
		LOD 100
		Cull Off
		/*ase_pass*/

		Pass
		{
			CGPROGRAM
			#pragma target 3.0 
			#pragma vertex vert
			#pragma fragment frag
			#include "UnityCG.cginc"
			/*ase_pragma*/

			struct appdata
			{
				float4 vertex : POSITION;
				float3 normal : NORMAL;	
				float4 texcoord : TEXCOORD0;
				float4 texcoord1 : TEXCOORD1;
				UNITY_VERTEX_INPUT_INSTANCE_ID
				/*ase_vdata:p=p;uv0=tc0.xy;uv1=tc1.xy*/
			};
			
			struct v2f
			{
				float4 vertex : SV_POSITION;
				float4 texcoord : TEXCOORD0;
				float3 worldNormal : TEXCOORD1;
				UNITY_VERTEX_OUTPUT_STEREO
				/*ase_interp(1,7):sp=sp.xyzw;uv0=tc0.xy;uv1=tc0.zw*/
			};

			
			uniform fixed4 _Color;
			uniform sampler2D _FrontParaboloid;
			uniform sampler2D _RearParaboloid;
			/*ase_globals*/
			
			v2f vert ( appdata v /*ase_vert_input*/)
			{
				v2f o;
				UNITY_SETUP_INSTANCE_ID(v);
				UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
				o.texcoord.xy = v.texcoord.xy;
				o.texcoord.zw = v.texcoord1.xy;
				
				// ase common template code
				/*ase_vert_code:v=appdata;o=v2f*/
				
				v.vertex.xyz += /*ase_vert_out:Local Vertex;Float3*/ float3(0,0,0) /*end*/;
				o.vertex = UnityObjectToClipPos(v.vertex);
				o.worldNormal = normalize(mul((float3x3)unity_ObjectToWorld, v.normal));
				return o;
			}

			inline fixed4 texParaboloidXFliped(sampler2D front, sampler2D back, float3 refl)
			{
				if (refl.x > 0)
				{
					float2 frontUv;
					frontUv.x = refl.z / (refl.x + 1);
					frontUv.y = refl.y / (refl.x + 1);
					frontUv = (frontUv * .5f) + 0.5f;
		
					frontUv.x = 1 - frontUv.x;

					return tex2D(front, frontUv);
				}
				else
				{
					float2 backUv;
					backUv.x = refl.z / (1 - refl.x);
					backUv.x *= -1;
					backUv.y = refl.y / (1 - refl.x);
					backUv = (backUv * .5f) + 0.5f;
	
					backUv.x = backUv.x;
		
					return tex2D(back, backUv);
				}
			}
			
			fixed4 frag (v2f i /*ase_frag_input*/) : SV_Target
			{
				fixed4 parabolicOut;
				// ase common template code
				/*ase_frag_code:i=v2f*/
				
				parabolicOut = /*ase_frag_out:Albedo Color;Float4*/float4(1,1,1,1)/*end*/;
				//return myColorVar;
				return parabolicOut * texParaboloidXFliped(_FrontParaboloid, _RearParaboloid, i.worldNormal);;
			}
			ENDCG
		}
	}
	CustomEditor "ASEMaterialInspector"
}

About JP

鏈接: Website.
在這裏插入圖片描述
在這裏插入圖片描述
出生在韓國的TA。
1997年開始從事電腦圖形視覺化工作後,在這個行業已經有21年經驗了。
在多個網絡遊戲公司引領過美術團隊,之前在allegorithmic擔任TA負責人,在中國網易盤古工作室擔任TA總監,現在是巨人網絡TA部門的總負責人。
懶惰的人才有創意”是他堅信並執行的哲學道理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章