{"id":625,"date":"2012-02-15T01:21:38","date_gmt":"2012-02-14T22:21:38","guid":{"rendered":"http:\/\/unitycoder.com\/blog\/?p=625"},"modified":"2013-08-15T22:22:04","modified_gmt":"2013-08-15T19:22:04","slug":"raycast-realtime-visibility-2-0","status":"publish","type":"post","link":"https:\/\/unitycoder.com\/blog\/2012\/02\/15\/raycast-realtime-visibility-2-0\/","title":{"rendered":"Raycast Visibility 2.2"},"content":{"rendered":"<p><a title=\"start webplayer demo\" href=\"http:\/\/unitycoder.com\/upload\/demos\/mShadowRayScan2\/\" target=\"_blank\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"626\" data-permalink=\"https:\/\/unitycoder.com\/blog\/2012\/02\/15\/raycast-realtime-visibility-2-0\/mraycastvisibility2\/\" data-orig-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/mRayCastVisibility2.jpg?fit=680%2C435&amp;ssl=1\" data-orig-size=\"680,435\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"mRayCastVisibility2\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/mRayCastVisibility2.jpg?fit=680%2C435&amp;ssl=1\" class=\"alignnone  wp-image-626\" title=\"mRayCastVisibility2\" alt=\"\" src=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/mRayCastVisibility2.jpg?resize=680%2C435\" width=\"680\" height=\"435\" srcset=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/mRayCastVisibility2.jpg?w=680&amp;ssl=1 680w, https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/mRayCastVisibility2.jpg?resize=300%2C191&amp;ssl=1 300w\" sizes=\"auto, (max-width: 680px) 100vw, 680px\" \/><\/a><\/p>\n<p>This is just a updated version of the: <a title=\"http:\/\/unitycoder.com\/blog\/2012\/01\/04\/fake-realtime-raycast-shadows-unity3d\/\" href=\"http:\/\/unitycoder.com\/blog\/2012\/01\/04\/fake-realtime-raycast-shadows-unity3d\/\">fake realtime raycast shadows<\/a> <em>(its not really shadows though..)<\/em><\/p>\n<p><strong>Features in v2.0<\/strong><\/p>\n<ul>\n<li>Mesh is pre-build<\/li>\n<li>In update loop we just modify the existing vertices (no need to triangulate, create uv&#8217;s, etc in every frame)<\/li>\n<li>50000 raycasts starts to get slow, but 10k is still 60fps in editor.<\/li>\n<li>Would be interesting to add this also: <a title=\"http:\/\/unitycoder.com\/blog\/2012\/01\/02\/precalculated-sin-cos-arrays\/\" href=\"http:\/\/unitycoder.com\/blog\/2012\/01\/02\/precalculated-sin-cos-arrays\/\">Precalculated sin cos arrays<\/a><\/li>\n<li>Some overlapping lines seem to appear (see those white lines..) not sure why, but atleast its fast : )<\/li>\n<li><\/li>\n<\/ul>\n<h3>Ideas to try:<\/h3>\n<p>&#8211; Use low quality mesh in LateUpdate(?)<\/p>\n<h3><strong>Bug fixes for script: &#8220;ShadowRayScan2.js&#8221;<\/strong><\/h3>\n<p><strong>Find line:<\/strong><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">vertices&#x5B;i] = Vector3(tmp.x,0.5,tmp.z); <\/pre>\n<p><strong>Replace with:<\/strong><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">vertices&#x5B;i] = Vector3(tmp.x,0,tmp.z);\u00a0 \/\/ now the mesh wont go upwards<\/pre>\n<p><strong>Find line:<\/strong><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">vertices&#x5B;i] = Vector3(tmp2.x,0.5,tmp2.z); <\/pre>\n<p><strong>Replace with:<\/strong><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">vertices&#x5B;i] = Vector3(tmp2.x,0,tmp2.z); <\/pre>\n<h3>*Fix for &#8220;upside down&#8221; mesh:<\/h3>\n<p><strong>Find:<\/strong><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">triangles&#x5B;n] = newvertices.Length-1;<\/pre>\n<p><strong>Replace with:<\/strong><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">triangles&#x5B;n+2] = newvertices.Length-1;<\/pre>\n<p><strong>Find:<\/strong><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">triangles&#x5B;n+2] = i;<\/pre>\n<p><strong>Replace with:<\/strong><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">triangles&#x5B;n] = i;<\/pre>\n<p><strong>Find:<\/strong><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\u00a0\u00a0\u00a0 triangles&#x5B;triangles.length-3] = newvertices.Length-1;\r\ntriangles&#x5B;triangles.length-2] = 0;\r\ntriangles&#x5B;triangles.length-1] = i-1;<\/pre>\n<p><strong>Replace with:<\/strong><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\u00a0\u00a0\u00a0 triangles&#x5B;triangles.length-1] = newvertices.Length-1;\r\ntriangles&#x5B;triangles.length-2] = 0;\r\ntriangles&#x5B;triangles.length-3] = i-1;<\/pre>\n<h3>*Fix for disappearing mesh (if go further away from 0,0,0)<\/h3>\n<p><strong>Find:<\/strong><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">var tmp2 = lightmeshholder.transform.InverseTransformPoint(lightmeshholder.transform.position+dir);<\/pre>\n<p><strong>Replace with:<\/strong><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">var tmp2 = lightmeshholder.transform.InverseTransformPoint(lightmeshholder.transform.position+dir*distance);<\/pre>\n<p><strong>Find (inside update loop):<\/strong><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">mesh.vertices = vertices;<\/pre>\n<p><strong>Insert line after it:<\/strong><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">mesh.RecalculateBounds();<\/pre>\n<p>*More info here: <a title=\"http:\/\/forum.unity3d.com\/threads\/35897-Object-disappear-when-zooming-in-lt-URGENT!?p=628496&amp;viewfull=1#post628496\" href=\"http:\/\/forum.unity3d.com\/threads\/35897-Object-disappear-when-zooming-in-lt-URGENT!?p=628496&amp;viewfull=1#post628496\" target=\"_blank\">http:\/\/forum.unity3d.com\/threads\/35897-Object-disappear-when-zooming-in-lt-URGENT!?p=628496&amp;viewfull=1#post628496<\/a><\/p>\n<p>&#8212;<\/p>\n<p><strong>Webplayer:<\/strong><br \/>\n<a title=\"http:\/\/unitycoder.com\/upload\/demos\/mShadowRayScan2\/\" href=\"http:\/\/unitycoder.com\/upload\/demos\/mShadowRayScan2\/\" target=\"_blank\">http:\/\/unitycoder.com\/upload\/demos\/mShadowRayScan2\/<\/a><\/p>\n<p><strong>Source:<\/strong><br \/>\n<a title=\"Download Source\" href=\"http:\/\/unitycoder.com\/download\/index2.php?link=173&amp;uid=un1t3c0d5r\" target=\"_blank\">mRaycastVisibility2.unityPackage<\/a><\/p>\n<p>&#8212;<\/p>\n<p><strong>Image#2<\/strong><\/p>\n<p>Profiler image for ShadowRayScan4.js (512 rays)<br \/>\n&#8211; using<a title=\"http:\/\/unitycoder.com\/blog\/2012\/01\/02\/precalculated-sin-cos-arrays\/\" href=\"http:\/\/unitycoder.com\/blog\/2012\/01\/02\/precalculated-sin-cos-arrays\/\" target=\"_blank\"> SinCos lookup tables<\/a> didnt make any difference<br \/>\n&#8211; it seems the actual raycast takes only half of the total scanning loop..?)<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/raycast_profiler.jpg\" target=\"_blank\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"788\" data-permalink=\"https:\/\/unitycoder.com\/blog\/2012\/02\/15\/raycast-realtime-visibility-2-0\/raycast_profiler\/\" data-orig-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/raycast_profiler.jpg?fit=985%2C979&amp;ssl=1\" data-orig-size=\"985,979\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"raycast_profiler\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/raycast_profiler.jpg?fit=985%2C979&amp;ssl=1\" class=\"alignnone size-medium wp-image-788\" title=\"raycast_profiler\" alt=\"\" src=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/raycast_profiler-300x298.jpg?resize=300%2C298\" width=\"300\" height=\"298\" srcset=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/raycast_profiler.jpg?resize=300%2C298&amp;ssl=1 300w, https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/raycast_profiler.jpg?resize=150%2C150&amp;ssl=1 150w, https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/raycast_profiler.jpg?w=985&amp;ssl=1 985w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&#8212;<\/p>\n<p>Image #3 : Fading light with blending shader: &#8220;Blend One OneMinusDstColor&#8221;<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/fakeshadow_blend2.jpg\" target=\"_blank\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"791\" data-permalink=\"https:\/\/unitycoder.com\/blog\/2012\/02\/15\/raycast-realtime-visibility-2-0\/fakeshadow_blend2\/\" data-orig-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/fakeshadow_blend2.jpg?fit=700%2C533&amp;ssl=1\" data-orig-size=\"700,533\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"fakeshadow_blend2\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/fakeshadow_blend2.jpg?fit=700%2C533&amp;ssl=1\" class=\"alignnone size-medium wp-image-791\" title=\"fakeshadow_blend2\" alt=\"\" src=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/fakeshadow_blend2-300x228.jpg?resize=300%2C228\" width=\"300\" height=\"228\" srcset=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/fakeshadow_blend2.jpg?resize=300%2C228&amp;ssl=1 300w, https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/fakeshadow_blend2.jpg?w=700&amp;ssl=1 700w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Shader for the fade light:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\r\nShader &quot;UnityCoder\/LightMeshShaderGradient1&quot;\r\n{\r\nSubShader\r\n{\r\nTags { &quot;RenderType&quot;=&quot;Opaque&quot; }\r\nBlend One OneMinusDstColor\r\nLighting Off\r\nCull Front\r\nCGPROGRAM\r\n#pragma surface surf Lambert\r\n#include &quot;UnityCG.cginc&quot;\r\n\r\nstruct Input\r\n{\r\nfloat2 uv_MainTex;\r\nfloat4 screenPos;\r\n};\r\n\r\nvoid surf (Input IN, inout SurfaceOutput o)\r\n{\r\nfloat2 screenUV = IN.screenPos.xy \/ IN.screenPos.w;\r\nfloat xx = 0.5-screenUV.x;\r\nfloat yy = 0.5-screenUV.y;\r\nfloat d = 2-(xx*xx+yy*yy)*9; \/\/ 2 &amp; 9 are from just testing what values work on this distance..\r\nhalf3 c = half3(d,d,d);\r\no.Albedo = c;\r\no.Alpha = 1; \/\/c.r;\r\n}\r\nENDCG\r\n}\r\n}\r\n\r\n<\/pre>\n<p>&#8212;<\/p>\n<p>Image #4 : 10000 times multiplied Albedo with &#8220;Blend DstColor SrcColor&#8221; (couldnt get it any brighter..?)<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/fakeshadow_blend1.jpg\" target=\"_blank\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"792\" data-permalink=\"https:\/\/unitycoder.com\/blog\/2012\/02\/15\/raycast-realtime-visibility-2-0\/fakeshadow_blend1\/\" data-orig-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/fakeshadow_blend1.jpg?fit=700%2C533&amp;ssl=1\" data-orig-size=\"700,533\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"fakeshadow_blend1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/fakeshadow_blend1.jpg?fit=700%2C533&amp;ssl=1\" class=\"alignnone size-medium wp-image-792\" title=\"fakeshadow_blend1\" alt=\"\" src=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/fakeshadow_blend1-300x228.jpg?resize=300%2C228\" width=\"300\" height=\"228\" srcset=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/fakeshadow_blend1.jpg?resize=300%2C228&amp;ssl=1 300w, https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/fakeshadow_blend1.jpg?w=700&amp;ssl=1 700w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Image #5: if you clone the lightmeshHolder, you get brighter light..<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/fakeshadow_blend3cloned.jpg\" target=\"_blank\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"795\" data-permalink=\"https:\/\/unitycoder.com\/blog\/2012\/02\/15\/raycast-realtime-visibility-2-0\/fakeshadow_blend3cloned\/\" data-orig-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/fakeshadow_blend3cloned.jpg?fit=700%2C526&amp;ssl=1\" data-orig-size=\"700,526\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"fakeshadow_blend3cloned\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/fakeshadow_blend3cloned.jpg?fit=700%2C526&amp;ssl=1\" class=\"alignnone size-medium wp-image-795\" title=\"fakeshadow_blend3cloned\" alt=\"\" src=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/fakeshadow_blend3cloned-300x225.jpg?resize=300%2C225\" width=\"300\" height=\"225\" srcset=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/fakeshadow_blend3cloned.jpg?resize=300%2C225&amp;ssl=1 300w, https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/fakeshadow_blend3cloned.jpg?w=700&amp;ssl=1 700w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&#8212;<br \/>\nImage#6: Quick test using DX11 features.. so far its only 1ms faster with 20000 rays..<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/dx11_raycast_shadows_fake1.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1047\" data-permalink=\"https:\/\/unitycoder.com\/blog\/2012\/02\/15\/raycast-realtime-visibility-2-0\/dx11_raycast_shadows_fake1\/\" data-orig-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/dx11_raycast_shadows_fake1.jpg?fit=680%2C321&amp;ssl=1\" data-orig-size=\"680,321\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"dx11_raycast_shadows_fake1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/dx11_raycast_shadows_fake1.jpg?fit=680%2C321&amp;ssl=1\" class=\"alignnone size-medium wp-image-1047\" title=\"dx11_raycast_shadows_fake1\" alt=\"\" src=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/dx11_raycast_shadows_fake1-300x141.jpg?resize=300%2C141\" width=\"300\" height=\"141\" srcset=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/dx11_raycast_shadows_fake1.jpg?resize=300%2C141&amp;ssl=1 300w, https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/dx11_raycast_shadows_fake1.jpg?w=680&amp;ssl=1 680w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is just a updated version of the: fake realtime raycast shadows (its not really shadows though..) Features in v2.0 Mesh is pre-build In update loop we just modify the existing vertices (no need to triangulate, create uv&#8217;s, etc in every frame) 50000 raycasts starts [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":626,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[4,3],"tags":[173,7,174,98,40,172],"class_list":["post-625","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-demos","category-unity3d","tag-cone","tag-fake","tag-range","tag-raycast","tag-shadow","tag-visibility"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2012\/02\/mRayCastVisibility2.jpg?fit=680%2C435&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/p1KTaT-a5","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/posts\/625","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/comments?post=625"}],"version-history":[{"count":31,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/posts\/625\/revisions"}],"predecessor-version":[{"id":630,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/posts\/625\/revisions\/630"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/media\/626"}],"wp:attachment":[{"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/media?parent=625"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/categories?post=625"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/tags?post=625"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}