Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Shader /*fileName*/"Raymarching/Template"/*end*/
- {
- Properties
- {
- /*property*/
- }
- SubShader
- {
- Tags
- {
- "RenderType" = "Transparent"
- "Queue" = "Transparent+0"
- "IgnoreProjector" = "True"
- "IsEmissive" = "true"
- /*tags*/
- }
- LOD 100
- Pass
- {
- CGPROGRAM
- #pragma target 4.6
- #pragma vertex vert
- #pragma fragment frag
- #pragma fragmentoption ARB_precision_hint_fastest
- #pragma multi_compile_shadowcaster
- /*pragma*/
- #include "UnityCG.cginc"
- #include "Lighting.cginc"
- /*include*/
- /*fields*/
- float2 distanceFunction(float3 pos)
- {
- return /*distanceFunction*/float2(0, 0)/*end*/;
- }
- float4 materialFunction(float2 distance)
- {
- return /*materialFunction*/float4(0, 0, 0, 0)/*end*/;
- }
- float computeDepth(float3 pos)
- {
- float4 vpPos = UnityObjectToClipPos(float4(pos, 1.0));
- #if UNITY_UV_STARTS_AT_TOP
- return vpPos.z / vpPos.w;
- #else
- return (vpPos.z / vpPos.w) * 0.5 + 0.5;
- #endif
- }
- struct appdata
- {
- float4 vertex : POSITION;
- float2 uv : TEXCOORD0;
- };
- struct v2f
- {
- float2 uv : TEXCOORD0;
- float4 vertex : SV_POSITION;
- float3 pos : TEXCOORD1;
- };
- struct Ray
- {
- float3 org;
- float3 dir;
- };
- struct gbuffer_out
- {
- half4 color : SV_Target;
- float depth : SV_Depth;
- };
- v2f vert (appdata v)
- {
- v2f o;
- o.vertex = UnityObjectToClipPos(v.vertex);
- o.pos = v.vertex.xyz;
- return o;
- }
- gbuffer_out frag (v2f i)
- {
- float3 wpos = i.pos;
- Ray ray_center;
- ray_center.org = mul(unity_WorldToObject, float4(_WorldSpaceCameraPos, 1)).xyz;
- ray_center.dir = normalize(i.pos - ray_center.org);
- float t = 0.0;
- float2 distance = float2(0.0, 0.0);
- float3 posOnRay = ray_center.org;
- float maxStep = 64;
- for(int i = 0; i < maxStep; ++i)
- {
- distance = distanceFunction(posOnRay);
- t += distance.x;
- posOnRay = ray_center.org + t * ray_center.dir;
- }
- gbuffer_out o;
- if(abs(distance.x) < 0.001)
- {
- o.color = materialFunction(distance);
- }
- else discard;
- o.depth = computeDepth(posOnRay);
- return o;
- }
- ENDCG
- }
- }
- CustomEditor "Shiranui_Isuzu.RaymarchingEditor"
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement