Advertisement
Shiranui_Isuzu

RaymarchingTemplate

Jul 5th, 2019
1,073
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Shader /*fileName*/"Raymarching/Template"/*end*/
  2. {
  3.     Properties
  4.     {
  5.         /*property*/
  6.     }
  7.  
  8.     SubShader
  9.     {
  10.         Tags
  11.         {
  12.             "RenderType" = "Transparent"
  13.             "Queue" = "Transparent+0"
  14.             "IgnoreProjector" = "True"
  15.             "IsEmissive" = "true"
  16.             /*tags*/
  17.         }
  18.  
  19.         LOD 100
  20.  
  21.         Pass
  22.         {
  23.             CGPROGRAM
  24.             #pragma target 4.6
  25.             #pragma vertex vert
  26.             #pragma fragment frag
  27.             #pragma fragmentoption ARB_precision_hint_fastest
  28.             #pragma multi_compile_shadowcaster
  29.             /*pragma*/
  30.  
  31.             #include "UnityCG.cginc"
  32.             #include "Lighting.cginc"
  33.             /*include*/
  34.  
  35.             /*fields*/            
  36.  
  37.             float2 distanceFunction(float3 pos)
  38.             {
  39.                return /*distanceFunction*/float2(0, 0)/*end*/;
  40.             }
  41.  
  42.             float4 materialFunction(float2 distance)
  43.             {
  44.                 return /*materialFunction*/float4(0, 0, 0, 0)/*end*/;
  45.             }
  46.  
  47.             float computeDepth(float3 pos)
  48.             {
  49.                 float4 vpPos = UnityObjectToClipPos(float4(pos, 1.0));
  50.                 #if UNITY_UV_STARTS_AT_TOP
  51.                     return vpPos.z / vpPos.w;
  52.                 #else
  53.                     return (vpPos.z / vpPos.w) * 0.5 + 0.5;
  54.                 #endif
  55.             }
  56.  
  57.             struct appdata
  58.             {
  59.                 float4 vertex : POSITION;
  60.                 float2 uv : TEXCOORD0;
  61.             };
  62.  
  63.             struct v2f
  64.             {
  65.                 float2 uv : TEXCOORD0;
  66.                 float4 vertex : SV_POSITION;
  67.                 float3 pos : TEXCOORD1;
  68.             };
  69.  
  70.             struct Ray
  71.             {
  72.                 float3 org;
  73.                 float3 dir;
  74.             };
  75.  
  76.             struct gbuffer_out
  77.             {
  78.                 half4 color : SV_Target;
  79.                 float depth : SV_Depth;
  80.             };
  81.  
  82.             v2f vert (appdata v)
  83.             {
  84.                 v2f o;
  85.                 o.vertex = UnityObjectToClipPos(v.vertex);
  86.                 o.pos = v.vertex.xyz;
  87.                 return o;
  88.             }
  89.  
  90.             gbuffer_out frag (v2f i)
  91.             {
  92.                 float3 wpos = i.pos;
  93.                 Ray ray_center;
  94.                 ray_center.org = mul(unity_WorldToObject, float4(_WorldSpaceCameraPos, 1)).xyz;
  95.                 ray_center.dir = normalize(i.pos - ray_center.org);
  96.  
  97.                 float t = 0.0;
  98.                 float2 distance = float2(0.0, 0.0);
  99.                 float3 posOnRay = ray_center.org;
  100.  
  101.                 float maxStep = 64;
  102.  
  103.                 for(int i = 0; i < maxStep; ++i)
  104.                 {
  105.                     distance = distanceFunction(posOnRay);
  106.  
  107.                     t += distance.x;
  108.                     posOnRay = ray_center.org + t * ray_center.dir;
  109.                 }
  110.  
  111.                 gbuffer_out o;
  112.  
  113.                 if(abs(distance.x) < 0.001)
  114.                 {
  115.                     o.color = materialFunction(distance);
  116.                 }
  117.                 else discard;
  118.  
  119.                 o.depth = computeDepth(posOnRay);
  120.                 return o;
  121.             }
  122.             ENDCG
  123.         }
  124.     }
  125.  
  126.     CustomEditor "Shiranui_Isuzu.RaymarchingEditor"
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement